x-load git: bump SRCREV
[openembedded.git] / recipes / glibc / glibc-2.3.2 / glibc-2.3.2-200304020432.patch
blob2fcd1f2da66cdbeca01de4b687e02c598de86bc4
1 diff -u -udbrN glibc-2.3.2/ChangeLog glibc-2.3.2-200304020432/ChangeLog
2 --- glibc-2.3.2/ChangeLog Sat Mar 1 02:10:14 2003
3 +++ glibc-2.3.2-200304020432/ChangeLog Wed Apr 2 06:00:15 2003
4 @@ -1,3 +1,1581 @@
5 +2003-04-01 Roland McGrath <roland@redhat.com>
7 + * scripts/abilist.awk: Allow dots in soname suffix.
9 + * scripts/abilist.awk (emit): Fix bailout condition.
11 +2003-04-01 Jakub Jelinek <jakub@redhat.com>
13 + * sysdeps/unix/sysv/linux/sparc/sparc64/sigsuspend.c: Use the
14 + IA-64 version.
16 + * elf/tls-macros.h [__ia64__] (TLS_IE, TLS_LD, TLS_GD): Add gp
17 + register as input to asm.
19 +2003-04-01 Jakub Jelinek <jakub@redhat.com>
21 + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h (sigevent_t): Fix a typo.
23 +2003-04-01 Andreas Jaeger <aj@suse.de>
25 + * configure.in: Output as/ld as name if version is too old.
27 +2003-03-31 Daniel Jacobowitz <drow@mvista.com>
29 + * configure.in: Don't require an installed C library in the test
30 + for ".set" assembler support.
32 +2003-03-31 Roland McGrath <roland@redhat.com>
34 + * signal/tst-sigset.c: New file.
35 + * signal/Makefile (tests): Add it.
37 +2003-03-31 Ulrich Drepper <drepper@redhat.com>
39 + * sysdeps/unix/sysv/linux/alpha/bits/signum.h (_NSIG): Define to 65.
40 + * sysdeps/unix/sysv/linux/hppa/bits/signum.h (_NSIG): Likewise.
41 + * sysdeps/unix/sysv/linux/sparc/bits/signum.h (_NSIG): Likewise.
42 + * sysdeps/unix/sysv/linux/bits/signum.h (_NSIG): Likewise.
43 + (__SIGRTMAX): Adjust accordingly.
44 + * sysdeps/gnu/siglist.c: If OLD2_SIGLIST_SIZE is defined define
45 + second compatibility symbol set.
46 + * sysdeps/unix/sysv/linux/siglist.h (OLD2_SIGLIST_SIZE): Define.
48 +2003-03-31 Andreas Schwab <schwab@suse.de>
50 + * sysdeps/m68k/m68020/bits/atomic.h (atomic_increment_and_test):
51 + Define.
52 + (atomic_decrement_and_test): Fix test.
54 +2003-03-31 Jakub Jelinek <jakub@redhat.com>
56 + * sysdeps/sparc/sparc32/bits/atomic.h: New file.
57 + * sysdeps/sparc/sparc32/sparcv9/bits/atomic.h: New file.
58 + * sysdeps/sparc/sparc64/bits/atomic.h: New file.
59 + * sysdeps/sparc/sparc32/atomicity.h: Removed.
60 + * sysdeps/sparc/sparc32/sparcv9/atomicity.h: Removed.
61 + * sysdeps/sparc/sparc64/atomicity.h: Removed.
63 +2003-03-30 Roland McGrath <roland@redhat.com>
65 + * scripts/abilist.awk: Grok .opd foo plus .text .foo as "foo F" alone.
67 + * intl/po2test.sed: Anchor substitution regexps to fix last change.
69 +2003-03-29 Paolo Bonzini <bonzini@gnu.org>
71 + * intl/po2test.sed: Unify the transformations for msgid and msgstr
72 + and remove a useless s/// command.
74 +2003-03-27 David Mosberger <davidm@hpl.hp.com>
76 + * sysdeps/ia64/dl-machine.h (RTLD_START): Wrap ".save rp, r0"
77 + directive into empty .prologue region to ensure that call-chain
78 + is terminated even for the first instruction.
80 + * sysdeps/ia64/elf/start.S (_start): Use ".save rp, r0" idiom
81 + to terminate call-chain right from the get-go.
83 + * sysdeps/unix/sysv/linux/ia64/fork.S (fork): Remove unnecessary
84 + stop bit between compare & branch.
86 +2003-03-29 Ulrich Drepper <drepper@redhat.com>
88 + * stdlib/strtod.c (INTERNAL): Recognize first digit after decimal
89 + point correctly [PR libc/4993].
91 + * sysdeps/unix/sysv/linux/ifaddrs.c (getifaddrs): Avoid
92 + netlink_open calls if netlink is known to not be available.
94 +2003-03-29 Alexandre Oliva <aoliva@redhat.com>
96 + * configure.in: Add mips64* support.
97 + * sysdeps/mips/bits/endian.h: Make it bi-endian.
98 + * sysdeps/mips/mipsel/bits/endian.h: Removed.
99 + * sysdeps/mips/mips64/n32/el/bits/endian.h: Removed.
100 + * sysdeps/mips/mips64/n64/el/bits/endian.h: Removed.
101 + * sysdeps/mips/mips32/Makefile (CC): Add -mabi=32.
102 + * sysdeps/mips/mips64/n32/Makefile (CC): Add -mabi=n32.
103 + * sysdeps/mips/mips64/n64/Makefile (CC): Add -mabi=64.
104 + * sysdeps/mips/Implies: Moved wordsize-32 to...
105 + * sysdeps/mips/mips32/Implies: New file.
106 + * sysdeps/unix/mips/sysdep.h (PSEUDO_NOERRNO, PSEUDO_END_NOERRNO,
107 + ret_NOERRNO): New.
108 + (ret, PSEUDO_END): Moved past END.
109 + (PSEUDO): Moved to...
110 + * sysdeps/unix/mips/mips32/sysdep.h: New file.
111 + * sysdeps/unix/mips/mips64/n32/sysdep.h: Removed #undef PSEUDO.
112 + * sysdeps/unix/mips/mips64/n64/sysdep.h: Likewise.
113 + * sysdeps/unix/sysv/linux/mips/sysdep.h: Move to...
114 + * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h: New file.
115 + * sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h: New file.
117 + * sysdeps/unix/sysv/linux/mips/clone.S (__thread_start):
118 + Re-introduce ENTRY.
120 +2003-03-28 Thorsten Kukuk <kukuk@suse.de>
122 + * sysdeps/unix/sysv/linux/ifaddrs.c: New file.
123 + * inet/test-ifaddrs.c: Allow AF_PACKET.
124 + * sysdeps/unix/sysv/linux/kernel-features.h: Add
125 + __ASSUME_NETLINK_SUPPORT.
127 +2003-03-28 Ulrich Drepper <drepper@redhat.com>
129 + * elf/vismain.c (do_test): Comment out tests which fail in the moment.
131 +2003-03-26 H.J. Lu <hjl@gnu.org>
133 + * elf/vismod.h (getvarlocal1): Return const char **.
134 + (getvarinmod1): Likewise.
135 + (getvaritcpt1): Likewise.
136 + (getvarlocal2): Likewise.
137 + (getvarinmod2): Likewise.
138 + (getvaritcpt2): Likewise.
139 + (getvaritcpt3): Likewise.
140 + * elf/vismain.c (do_test): Adjusted.
141 + * elf/vismod1.c (getvarlocal1): Return address.
142 + (getvarinmod1): Likewise.
143 + (getvaritcpt1): Likewise.
144 + * elf/vismod2.c (getvarlocal2): Likewise.
145 + (getvarinmod2): Likewise.
146 + (getvaritcpt2): Likewise.
147 + * elf/vismod3.c (getvaritcpt3): Likewise.
149 +2003-03-28 Roland McGrath <roland@redhat.com>
151 + * elf/vismain.c (do_test): Print both addresses when they don't match.
153 + * scripts/abilist.awk: If given -v filename_regexp and/or -v
154 + libname_regexp when parsing names, then produce output only
155 + for those matching the given regexps. In combine mode, save all
156 + stanzas for a final sorting by stanza header at the end.
157 + Emit a blank line between stanzas.
159 + * scripts/abilist.awk: When given -v combine=1, do parse_names and
160 + emit a single output stream with lib name in stanza header lines.
162 + * scripts/abilist.awk: Emit A for all *ABS* regardless of type.
164 +2003-03-27 Roland McGrath <roland@redhat.com>
166 + * sysdeps/powerpc/bits/atomic.h [! __powerpc64__]
167 + (__arch_atomic_decrement_if_positive_64): Fix bogus definition.
169 +2003-03-28 Kaz Kojima <kkojima@rr.iij4u.or.jp>
171 + * sysdeps/sh/bits/atomic.h (__arch_compare_and_exchange_val_8_acq):
172 + Return old value. Make asm output reg constraint earlyclobber.
173 + Renamed from...
174 + (__arch_compare_and_exchange_8_acq): ... this.
175 + (__arch_compare_and_exchange_val_16_acq):
176 + Return old value. Make asm output reg constraint earlyclobber.
177 + Renamed from...
178 + (__arch_compare_and_exchange_16_acq): ... this.
179 + (__arch_compare_and_exchange_val_32_acq):
180 + Return old value. Make asm output reg constraint earlyclobber.
181 + Renamed from...
182 + (__arch_compare_and_exchange_32_acq): ... this.
183 + (__arch_compare_and_exchange_val_64_acq):
184 + Renamed from...
185 + (__arch_compare_and_exchange_64_acq): ... this.
186 + (atomic_exchange_and_add): Use local variables and
187 + __arch_compare_and_exchange_val_64_acq.
188 + (atomic_add): Likewise.
189 + (atomic_add_negative, atomic_add_zero): Use local variables.
191 +2003-03-28 Alexandre Oliva <aoliva@redhat.com>
193 + * sysdeps/unix/mips/sysdep.S: Include sys/asm.h.
195 +2003-03-27 Ulrich Drepper <drepper@redhat.com>
197 + * Makefile: Remove libmd5crypt goal.
199 +2003-03-25 Jakub Jelinek <jakub@redhat.com>
201 + * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): Restore
202 + special handling of relocations against local symbols.
204 +2003-03-27 Steven Munroe <sjmunroe@us.ibm.com>
206 + * sysdeps/powerpc/bits/atomic.h
207 + (__arch_compare_and_exchange_bool_32_acq): Move to [!__powerpc64__].
208 + [__powerpc64__] (__arch_compare_and_exchange_bool_32_acq):
209 + Define PPC64 specific version.
210 + [__powerpc64__] (__arch_compare_and_exchange_bool_64_acq):
211 + Change (mem) constraint to "b".
212 + [__powerpc64__] (__arch_atomic_exchange_and add_64):
213 + Replace addi with add. Change (value) contraint to "r".
214 + Change (mem) constraint to "b".
215 + [__powerpc64__] (__arch_atomic_decrement_if_positive_64): New macro.
216 + (__arch_atomic_exchange_32): Change (mem) constraint to "b".
217 + (__arch_atomic_exchange_and_add_32): Change (mem) constraint to "b".
218 + (__arch_atomic_decrement_if_positive_32): New macro.
219 + (atomic_decrement_if_positive): Use __arch* macros.
221 +2003-03-27 Jakub Jelinek <jakub@redhat.com>
223 + * sysdeps/ia64/fpu/libm-test-ulps: Update.
225 +2003-03-27 Roland McGrath <roland@redhat.com>
227 + * scripts/rpm2dynsym.sh: New file.
228 + * Makefile (distribute): Add it.
230 +2003-03-27 David Mosberger <davidm@hpl.hp.com>
232 + * sysdeps/unix/sysv/linux/ia64/getcontext.S: Restore caller's
233 + ar.unat before returning. Add missing .mem.offset directives
234 + to ensure file gets assembled without warnings.
235 + * sysdeps/unix/sysv/linux/ia64/setjmp.S: Likewise.
237 +2003-03-27 Jakub Jelinek <jakub@redhat.com>
239 + * sysdeps/unix/sysv/linux/sysconf.c (__sysconf) <_SC_MONOTONIC_CLOCK>:
240 + Return -1 instead of 0 if clock_getres failed.
242 +2003-03-27 Roland McGrath <roland@redhat.com>
244 + * scripts/abilist.awk: If variable `parse_names' is set, grok the file
245 + header lines and write out foo.symlist files for each foo.so.NN listed.
247 + * libio/libioP.h (_IO_wfile_jumps): Remove attribute_hidden.
248 + This symbol is exported, and we don't want to hide it.
249 + Add libc_hidden_proto instead.
250 + (_IO_file_jumps): Add libc_hidden_proto.
251 + * libio/wfileops.c (_IO_wfile_jumps): Add libc_hidden_data_def.
252 + Remove INTVARDEF.
253 + * libio/fileops.c (_IO_file_jumps): Likewise.
254 + * libio/stdfiles.c: Don't use INTUSE on them.
255 + * libio/iofdopen.c (_IO_new_fdopen): Likewise.
256 + * libio/iofopen.c (__fopen_internal): Likewise.
257 + * libio/freopen.c (freopen): Likewise.
258 + * libio/freopen64.c (freopen64): Likewise.
259 + * libio/iovdprintf.c (_IO_vdprintf): Likewise.
261 + * Makerules (check-abi) [$(enable-check-abi) = warn]:
262 + Ignore exit status from diff.
263 + * configure.in (enable_check_abi): Document possible value "warn".
264 + Change default to no for now.
265 + * configure: Regenerated.
267 + * sysdeps/unix/Makefile ($(objpfx)stub-syscalls.c): Emit stub_warning
268 + macro calls and a #include <stub-tag.h> at the end.
269 + * Makerules ($(objpfx)stubs): Tweak sed commands.
271 + * sysdeps/unix/sysv/linux/syscalls.list: Use - rather than EXTRA in
272 + caller column for *xattr syscalls, since they are in sysdeps/generic.
274 + * sysdeps/unix/sysv/linux/i386/setfsuid.c: setfsgid -> setfsuid
275 + * sysdeps/unix/sysv/linux/i386/setfsgid.c: setfsuid -> setfsgid
277 +2003-03-26 Roland McGrath <roland@redhat.com>
279 + * Makerules (check-abi-config): Use /thread instead of /tls when
280 + use-thread and not just use-tls is set.
282 + * Makerules (update-abi): Put quotes around $(update-abi-config).
284 + * elf/Makefile (check-abi): Depend on check-abi-ld.
285 + (update-abi): Depend on update-abi-ld.
287 +2003-03-26 GOTO Masanori <gotom@debian.or.jp>
289 + * sysdeps/unix/sysv/linux/i386/setfsuid.c: Use INTERNAL_SYSCALL and
290 + do not check for errors (unless testing for 32bit variant).
291 + * sysdeps/unix/sysv/linux/i386/setfsgid.c: Likewise.
293 +2003-03-27 Philip Blundell <philb@gnu.org>
295 + * sysdeps/unix/sysv/linux/arm/sysdep.h (PSEUDO_RET_NOERRNO): Use
296 + unconditional mov. Remove nop.
298 + * sysdeps/unix/sysv/linux/kernel-features.h
299 + (__ASSUME_VFORK_SYSCALL): Define for kernel 2.4 on arm.
300 + * sysdeps/unix/sysv/linux/arm/vfork.S: Elide compatibility code
301 + when __ASSUME_VFORK_SYSCALL is defined.
302 + * sysdeps/unix/sysv/linux/arm/mmap64.S: Likewise for
303 + __ASSUME_MMAP2_SYSCALL.
304 + * sysdeps/unix/sysv/linux/arm/sigaction.c: Likewise for
305 + __ASSUME_REALTIME_SIGNALS.
307 +2003-03-26 Ulrich Drepper <drepper@redhat.com>
309 + * sysdeps/generic/ldsodefs.h (ELF_RTYPE_CLASS_COPY): Define to 2
310 + only if DL_NO_COPY_RELOCS is not defined.
311 + * sysdeps/ia64/dl-lookupcfg.h: Define DL_NO_COPY_RELOCS.
313 +2003-03-26 Roland McGrath <roland@redhat.com>
315 + * sysdeps/unix/make-syscalls.sh: When an undefined syscall has
316 + SOURCE=-, append its symbol names to make variable unix-stub-syscalls.
317 + * sysdeps/unix/Makefile [$(subdir) = misc] [unix-stub-syscalls]
318 + (sysdep_routines): Add stub-syscalls.
319 + ($(objpfx)stub-syscalls.c): New target.
320 + (generated): Add stub-syscalls.c.
322 + * tls.make.c: Also define use-tls according to USE_TLS macro.
324 +2003-03-26 Ulrich Drepper <drepper@redhat.com>
326 + * sysdeps/unix/sysv/linux/alpha/bits/siginfo.h (struct siginfo): Avoid
327 + no-op padding element.
328 + * sysdeps/unix/sysv/linux/bits/siginfo.h: Likewise.
329 + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise.
330 + * sysdeps/unix/sysv/linux/s390/bits/siginfo.h: Likewise.
331 + * sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise.
333 +2003-03-26 GOTO Masanori <gotom@debian.or.jp>
335 + * sysdeps/unix/sysv/linux/i386/getgroups.c: Fix the error
336 + condition check for the return value of getgroups32.
338 +2003-03-26 Jakub Jelinek <jakub@redhat.com>
340 + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h (PSEUDO_NOERRNO):
341 + Fix a typo.
342 + * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h (PSEUDO_NOERRNO,
343 + PSEUDO_END_NOERRNO): Define.
344 + * sysdeps/unix/sysdep.h (PSEUDO_END_NOERRNO): Fix a typo.
345 + Define to PSEUDO_END.
347 +2003-03-26 Ulrich Drepper <drepper@redhat.com>
349 + * abilist/librt.abilist: Add new timer interfaces for 64-bit archs.
351 +2003-03-25 Jiro SEKIBA <jir@yamato.ibm.com>
353 + * iconvdata/euc-tw.c (from_euc_tw): Fix return value of TO_LOOP.
354 + * iconvdata/bug-iconv4.c: New file.
355 + * iconvdata/Makefile (tests): Add bug-iconv4.
357 +2003-03-25 H.J. Lu <hjl@gnu.org>
359 + * elf/dl-lookup.c (_dl_lookup_symbol): Avoid looking up protected
360 + symbols twice.
361 + (_dl_lookup_versioned_symbol): Likewise.
363 +2003-03-26 Jakub Jelinek <jakub@redhat.com>
365 + * csu/tst-atomic.c (do_test): Add some new
366 + atomic_compare_and_exchange_val_acq, atomic_add_zero,
367 + atomic_compare_and_exchange_bool_acq and atomic_add_negative tests.
368 + * include/atomic.h (atomic_add_negative, atomic_add_zero):
369 + Prefix local variable so that it doesn't clash with the one
370 + in atomic_exchange_and_add.
371 + * sysdeps/ia64/bits/atomic.h (atomic_exchange): Fix for long/void *
372 + pointers.
373 + (atomic_exchange_and_add): Implement using __sync_fetch_and_add_?i.
374 + * sysdeps/powerpc/bits/atomic.h (atomic_exchange_and_add): Force
375 + value into register.
376 + * sysdeps/s390/bits/atomic.h (__arch_compare_and_exchange_val_64_acq):
377 + Cast newval to long.
378 + * sysdeps/x86_64/bits/atomic.h
379 + (__arch_compare_and_exchange_val_64_acq): Cast newval and oldval to
380 + long.
381 + (atomic_exchange): Cast newvalue to long if sizeof == 8.
382 + (atomic_exchange_and_add): Cast value to long if sizeof == 8.
383 + (atomic_add, atomic_add_negative, atomic_add_zero): Likewise.
384 + (atomic_bit_set): Shift 1L up in all cases to shut up warnings.
386 +2003-03-21 Martin Schwidefsky <schwidefskyde.ibm.com>
388 + * sysdeps/s390/s390-32/backtrace.c (__backtrace): Remove high order
389 + bit from backtrace addresses.
391 +2003-03-21 Andreas Schwab <schwab@suse.de>
393 + * sysdeps/unix/sysv/linux/i386/chown.c: Don't define any versioned
394 + __chown symbols.
396 +2003-03-25 Roland McGrath <roland@redhat.com>
398 + * config.make.in (enable-check-abi): New variable from configure.
399 + * configure.in (enable_check_abi): New substituted variable,
400 + controlled by --{enable,disable}-check-abi (default yes).
401 + * configure: Regenerated.
402 + * Makerules [$(enable-check-abi) = yes] (tests): Put this condition
403 + on check-abi dependency.
405 +2003-03-26 Andreas Schwab <schwab@suse.de>
407 + * sysdeps/m68k/m68020/bits/atomic.h: Fix typos.
408 + * include/atomic.h: Likewise.
410 + * sysdeps/unix/sysv/linux/m68k/sysdep.h: Define ret_NOERRNO.
412 +2003-03-25 Roland McGrath <roland@redhat.com>
414 + * sysdeps/powerpc/bits/atomic.h (__arch_atomic_exchange_32): New macro.
415 + (__arch_atomic_exchange_64): New macro.
416 + (atomic_exchange): Use them.
417 + (__arch_atomic_exchange_and_add_32): New macro.
418 + (__arch_atomic_exchange_and_add_64): New macro.
419 + (atomic_exchange_and_add): Use them.
420 + Original patch from Steven Munroe <sjmunroe@us.ibm.com>.
422 +2003-03-25 Alexandre Oliva <aoliva@redhat.com>
424 + * sysdeps/mips/sgidefs.h (_MIPS_ISA_MIPS32, _MIPS_ISA_MIPS64):
425 + Define.
426 + * sysdeps/mips/sys/asm.h: Test _MIPS_ISA against them on all
427 + ISA tests.
428 + (ALSZ, ALMASK, SZREG, REG_S, REG_L): Define based on ABI, not ISA.
429 + (PTR_ADD, etc): Test _MIPS_SZPTR instead of _MIPS_SZLONG.
430 + * sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Use _MIPS_SZPTR
431 + to decide whether to add padding.
432 + * sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Use _MIPS_SZPTR
433 + to decide whether to add padding.
434 + * sysdeps/unix/sysv/linux/mips/kernel_sigaction.h (struct
435 + old_kernel_sigaction): Likewise.
437 +2003-03-25 Ulrich Drepper <drepper@redhat.com>
439 + * csu/tst-atomic.c: Adjust tests to what atomic_add_negative and
440 + atomic_add_zero were supposed to do.
441 + * include/atomic.h: Adjust atomic_add_negative and atomic_add_zero
442 + to x86 behavior.
444 + * sysdeps/generic/bits/typesizes.h (__TIMER_T_TYPE): Define as void*.
445 + This matches the new timer implementation.
446 + * sysdeps/unix/sysv/linux/sparc/bits/typesizes.h (__TIMER_T_TYPE):
447 + Likewise.
448 + * sysdeps/unix/sysv/linux/alpha/bits/typesizes.h (__TIMER_T_TYPE):
449 + Likewise.
450 + * sysdeps/unix/sysv/linux/bits/siginfo.h (struct siginfo): Adjust
451 + timer info for what the kernel provides these days.
452 + (struct sigevent): Add _tid field.
453 + Define SIGEV_THREAD_ID.
454 + Remove struct __pthread_attr_s forward declaration.
455 + * sysdeps/unix/sysv/linux/alpha/bits/siginfo.h: Likewise.
456 + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise.
457 + * sysdeps/unix/sysv/linux/s390/bits/siginfo.h: Likewise.
458 + * sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise.
460 + * Versions.def (librt): Add GLIBC_2.3.3.
462 + * abilist/libpthread.abilist: Update for nptl.
464 +2003-03-24 Jon Grimm <jgrimm@us.ibm.com>
466 + * inet/netinet/in.h: Add IPPROTO_SCTP.
468 +2003-03-24 Ulrich Drepper <drepper@redhat.com>
470 + * sysdeps/unix/sysv/linux/sys/epoll.h (EPOLLET): Define.
472 +2003-03-24 Philip Blundell <philb@gnu.org>
474 + * sysdeps/unix/sysv/linux/arm/sysdep.h (INTERNAL_SYSCALL):
475 + Remove a1 from clobber list.
477 +2003-03-24 Ulrich Drepper <drepper@redhat.com>
479 + * timezone/antarctica: Update from tzdata2003a.
480 + * timezone/asia: Likewise.
481 + * timezone/australasia: Likewise.
482 + * timezone/europe: Likewise.
483 + * timezone/iso3166.tab: Likewise.
484 + * timezone/northamerica: Likewise.
485 + * timezone/southamerica: Likewise.
486 + * timezone/zone.tab: Likewise.
488 +2003-03-24 Steven Munroe <sjmunroe@us.ibm.com>
490 + * sysdeps/powerpc/powerpc64/sysdep.h (PSEUDO_END_NOERRNO): Fix typo.
492 +2003-03-23 Ulrich Drepper <drepper@redhat.com>
494 + * sysdeps/unix/sysv/linux/ia64/sysdep.h (ret_NOERRNO): Avoid
495 + unwanted expansion by definining to ret. Patch by Ian Wienand.
497 + * sysdeps/unix/make-syscalls.sh: Recognize 'E' in first position of
498 + the parameter description to denote no error checking. Generate
499 + appropriate pseudo asm code.
500 + * sysdeps/unix/syscalls.list: Mark getgid, getpid, getuid with 'E'.
501 + * sysdeps/unix/sysv/linux/syscalls.list: Mark getegid, geteuid,
502 + getpgrp, and getppid with 'E'.
503 + * sysdeps/powerpc/powerpc32/sysdep.h: Define PSEUDO_NOERRNO,
504 + PSEUDO_END_NOERRNO, and ret_NOERRNO.
505 + * sysdeps/powerpc/powerpc64/sysdep.h: Likewise.
506 + * sysdeps/unix/sysdep.h: Likewise.
507 + * sysdeps/unix/alpha/sysdep.h: Likewise.
508 + * sysdeps/unix/sparc/sysdep.h: Likewise.
509 + * sysdeps/unix/sysv/linux/arm/sysdep.h: Likewise.
510 + * sysdeps/unix/sysv/linux/cris/sysdep.h: Likewise.
511 + * sysdeps/unix/sysv/linux/hppa/sysdep.h: Likewise.
512 + * sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise.
513 + * sysdeps/unix/sysv/linux/ia64/sysdep.h: Likewise.
514 + * sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.
515 + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
516 + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise.
517 + * sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise.
518 + * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Likewise.
519 + * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
521 +2003-03-23 Roland McGrath <roland@redhat.com>
523 + * Makeconfig (+includes): Don't use $(last-includes).
525 +2003-03-22 Alexandre Oliva <aoliva@redhat.com>
527 + * sysdeps/unix/sysv/linux/configure.in: Update mips64 patterns.
528 + * sysdeps/unix/sysv/linux/configure: Rebuilt.
530 +2003-03-23 Jakub Jelinek <jakub@redhat.com>
532 + * sysdeps/alpha/fpu/libm-test-ulps: Update.
533 + * sysdeps/arm/libm-test-ulps: Update.
534 + * sysdeps/hppa/fpu/libm-test-ulps: Update.
535 + * sysdeps/ia64/fpu/libm-test-ulps: Update.
536 + * sysdeps/mips/fpu/libm-test-ulps: Update.
537 + * sysdeps/powerpc/nofpu/libm-test-ulps: Update.
538 + * sysdeps/powerpc/fpu/libm-test-ulps: Update.
539 + * sysdeps/sparc/sparc32/fpu/libm-test-ulps: Update.
540 + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update.
541 + * sysdeps/sh/sh4/fpu/libm-test-ulps: Update.
542 + * sysdeps/s390/fpu/libm-test-ulps: Update.
543 + * sysdeps/x86_64/fpu/libm-test-ulps: Update.
545 +2003-03-22 Roland McGrath <roland@redhat.com>
547 + * include/atomic.h: Put parens around all macro arguments.
548 + (__atomic_val_bysize, __atomic_bool_bysize): New macros.
549 + (atomic_compare_and_exchange_val_acq): Use it.
550 + (atomic_compare_and_exchange_bool_acq): Likewise.
551 + (atomic_increment_and_test): Invert sense of test.
552 + (atomic_decrement_and_test): Likewise.
553 + * csu/tst-atomic.c: Update those tests to match.
555 +2003-03-22 Jakub Jelinek <jakub@redhat.com>
557 + * include/atomic.h (atomic_compare_and_exchange_val_acq): Add comment.
558 + Don't define if __arch_compare_and_exchange_val_32_acq is not defined.
559 + (atomic_compare_and_exchange_bool_acq): Add comment. Don't use
560 + __oldval variable in the macro, since it might be macro argument.
561 + (atomic_decrement_if_positive): Initialize __memp, remove setting
562 + of non-existent variable.
563 + (atomic_bit_test_set): Cast 1 to __typeof (*mem) before shifting.
564 + * sysdeps/ia64/bits/atomic.h (atomic_exchange_and_add): Implement
565 + using atomic_compare_and_exchange_val_acq.
566 + (atomic_decrement_if_positive, atomic_bit_test_set): Define.
567 + * sysdeps/s390/bits/atomic.h (__arch_compare_and_exchange_val_8_acq):
568 + Renamed from...
569 + (__arch_compare_and_exchange_bool_8_acq): ... this.
570 + (__arch_compare_and_exchange_val_16_acq): Renamed from...
571 + (__arch_compare_and_exchange_bool_16_acq): ... this.
572 + (__arch_compare_and_exchange_val_32_acq): Return old value. Renamed
573 + from...
574 + (__arch_compare_and_exchange_bool_32_acq): ... this.
575 + (__arch_compare_and_exchange_val_64_acq): Return old value. Renamed
576 + from...
577 + (__arch_compare_and_exchange_bool_64_acq): ... this.
578 + (__arch_compare_and_exchange_val_32_acq): Use __typeof for local
579 + variables types instead of assuming int.
580 + Change prefix of local variables to __arch.
581 + * sysdeps/generic/bits/atomic.h (arch_compare_and_exchange_acq):
582 + Remove.
583 + (atomic_compare_and_exchange_val_acq,
584 + atomic_compare_and_exchange_bool_acq): Define.
586 + * csu/tst-atomic.c: New test.
587 + * csu/tst-atomic-long.c: New test.
588 + * csu/Makefile (tests): Add tst-atomic and tst-atomic-long.
590 + * malloc/memusagestat.c (main): Kill warning if uint64_t is ulong.
592 + * sysdeps/s390/Versions: Add trailing newline.
594 + * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Kill warning
595 + if INTERNAL_SYSCALL_ERROR_P doesn't use its first argument.
597 +2003-03-22 Andreas Schwab <schwab@suse.de>
599 + * sysdeps/m68k/fpu/libm-test-ulps: Update.
601 + * sysdeps/m68k/m68020/bits/atomic.h: New file.
602 + * sysdeps/m68k/m68020/atomicity.h: Removed.
604 +2003-03-22 Alexandre Oliva <aoliva@redhat.com>
606 + * sysdeps/mips/elf/ldsodefs.h: Add mips-specific elf64 relocation
607 + data structures and macros. Protect from multiple inclusion.
609 + * sysdeps/mips/dl-machine.h (ELF_MIPS_GNU_GOT1_MASK): Fix harmless
610 + typo in #if test.
612 +2003-03-21 Andreas Jaeger <aj@suse.de>
614 + * sysdeps/i386/fpu/libm-test-ulps: Update.
616 + * math/libm-test.inc (tgamma_test): Recompute some constants with
617 + 36 digits precision.
618 + (lgamma_test): Likewise.
619 + (ccos_test): Likewise.
620 + (ccosh_test): Likewise.
621 + (clog10_test): Likewise.
622 + (csin_test): Likewise.
623 + (csinh_test): Likewise.
624 + (ctan_test): Likewise.
625 + (ctanh_test): Likewise.
627 +2003-03-19 Jakub Jelinek <jakub@redhat.com>
629 + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Regenerated.
631 +2003-03-21 Roland McGrath <roland@redhat.com>
633 + * sysdeps/i386/i486/bits/atomic.h (atomic_bit_set): Use "ir"
634 + constraint to permit non-constant BIT argument.
635 + (atomic_bit_test_set): Likewise.
636 + * sysdeps/x86_64/bits/atomic.h (atomic_bit_test_set): Likewise.
637 + (atomic_bit_set): Likewise. Use 1UL in case that BIT might be >= 32.
638 + For quadword case, use "i" constraint if __builtin_constant_p and < 32
639 + or "r" constraint otherwise.
641 + * configure.in: Move AC_PROG_CC and other program-finding before all
642 + the version checks.
643 + * configure: Regenerated.
645 +2003-03-21 Alexandre Oliva <aoliva@redhat.com>
647 + * sysdeps/mips/mips64/memcpy.S: Fix porting bug that broke
648 + unaligned copying of 8-15 bytes. From Chris Demetriou
649 + <cgd@broadcom.com>. Fix label names.
650 + * sysdeps/mips/mips64/memset.S: Fix label names. Make similar
651 + change as to memcpy.S.
652 + * sysdeps/mips/memcpy.S: Formatting changes.
653 + * sysdeps/mips/memset.S: Likewise.
655 +2003-03-21 Roland McGrath <roland@redhat.com>
657 + * sysdeps/arm/sysdep.h (CALL_MCOUNT): Add trailing semicolon.
659 +2003-03-21 Alexandre Oliva <aoliva@redhat.com>
661 + * sysdeps/mips/mips64/memcpy.S, sysdeps/mips/mips64/memset.S: New.
662 + * sysdeps/mips/memcpy.S, sysdeps/mips/memset.S: Update comments.
664 +2003-03-21 Roland McGrath <roland@redhat.com>
666 + * sysdeps/i386/i486/bits/atomic.h
667 + (__arch_compare_and_exchange_val_64_acq): Rewrite abort-calling
668 + version of the macro to avoid compile-time warnings.
669 + [! __PIC__] (__arch_compare_and_exchange_64_acq): Rename to above.
670 + (atomic_exchange_and_add, atomic_add): Fix name and usage of it.
671 + (atomic_increment, atomic_decrement): Likewise.
673 +2003-03-21 Ulrich Drepper <drepper@redhat.com>
675 + * sysdeps/x86_64/bits/atomic.h: Don't use matching memory constraints.
676 + * sysdeps/i386/i486/bits/atomic.h: Likewise.
678 +2003-03-21 Roland McGrath <roland@redhat.com>
680 + * include/atomic.h (atomic_compare_and_exchange_bool_acq): Typo fix.
682 +2003-03-20 Ulrich Drepper <drepper@redhat.com>
684 + * include/atomic.h: Define atomic_compare_and_exchange_val_acq,
685 + atomic_compare_and_exchange_val_rel,
686 + atomic_compare_and_exchange_bool_acq, and
687 + atomic_compare_and_exchange_bool_rel instead of
688 + atomic_compare_and_exchange_acq and atomic_compare_and_exchange_rel.
689 + * sysdeps/i386/i486/bits/atomic.h: Define
690 + __arch_compare_and_exchange_val_*_acq instead of
691 + __arch_compare_and_exchange_*_acq.
692 + * sysdeps/x86_64/bits/atomic.h: Likewise.
693 + * sysdeps/ia64/bits/atomic.h: Define
694 + __arch_compare_and_exchange_bool_*_acq instead of
695 + __arch_compare_and_exchange_*_acq.
696 + * sysdeps/powerpc/bits/atomic.h: Likewise.
697 + * sysdeps/s390/bits/atomic.h: Likewise.
698 + * gmon/mcount.c: Adjust for new form of compare&exchange macros.
699 + * malloc/set-freeres.c: Likewise.
700 + * nscd/cache.c: Likewise.
701 + * stdlib/cxa_finalize.c: Likewise.
702 + * sysdeps/unix/sysv/linux/getsysstats.c: Likewise.
704 +2003-03-20 Alexandre Oliva <aoliva@redhat.com>
706 + * sysdeps/mips/bits/setjmp.h: n32 has only 6 call-saved fpregs.
707 + * sysdeps/mips/mips64/setjmp_aux.c (__sigsetjmp_aux): Adjust.
708 + * sysdeps/mips/mips64/__longjmp.c (__longjmp): Likewise.
710 + * sysdeps/unix/sysv/linux/mips/pread.c: Don't break up offset
711 + into high and low halves on n64.
712 + * sysdeps/unix/sysv/linux/mips/pread64.c: Likewise.
713 + * sysdeps/unix/sysv/linux/mips/pwrite.c: Likewise.
714 + * sysdeps/unix/sysv/linux/mips/pwrite64.c: Likewise.
716 +2003-03-20 Ulrich Drepper <drepper@redhat.com>
718 + * include/atomic.h (atomic_decrement_if_positive): Adjust for the
719 + correct atomic_compare_and_exchange_acq semantics.
721 +2003-03-20 Alexandre Oliva <aoliva@redhat.com>
723 + * sysdeps/mips/ieee754.h: Remove excess #endif.
725 +2003-03-20 Roland McGrath <roland@redhat.com>
727 + * sysdeps/powerpc/bits/atomic.h (atomic_exchange): Remove unused
728 + variable. Remove superfluous memory clobber.
730 + * include/atomic.h: Syntax braino fix.
732 + * posix/tst-nice.c (do_test): Use %m formats instead of printing errno
733 + in decimal. Don't bail if niced at start. Just check that nice call
734 + bumps the total at all.
736 +2003-03-20 Alexandre Oliva <aoliva@redhat.com>
738 + * sysdeps/mips/bits/setjmp.h: Store all N32 and N64 registers,
739 + including pc, gp, sp and fp, as long long.
740 + * sysdeps/mips/mips64/setjmp.S: Pass gp to __sigsetjmp_aux.
741 + * sysdeps/mips/mips64/setjmp_aux.c: Adjust type of arguments.
742 + Add gp argument, and set gp in the jmpbuf to it.
743 + * sysdeps/mips/setjmp_aux.c: Revert to o32-only.
745 +2003-03-20 Ulrich Drepper <drepper@redhat.com>
747 + * include/atomic.h: Define atomic_exchange and
748 + atomic_decrement_if_positive if not already defined. Add some
749 + __builtin_expect.
750 + * sysdeps/i386/i486/bits/atomic.h: Define atomic_exchange.
751 + * sysdeps/x86_64/bits/atomic.h: Likewise.
752 + * sysdeps/ia64/bits/atomic.h: Pretty printing. Define atomic_exchange.
753 + * sysdeps/powerpc/bits/atomic.h: Pretty printing. Define
754 + atomic_exchange, atomic_exchange_and_add, and
755 + atomic_decrement_if_positive
757 +2003-03-20 Alexandre Oliva <aoliva@redhat.com>
759 + * sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S: Sign-extend
760 + with a single instruction.
762 + * sysdeps/mips/dl-machine.h (ELF_MIPS_GNU_GOT1_MASK): Define
763 + properly for n64.
764 + (elf_machine_runtime_setup): Cast link_map pointer to Elf Addr
765 + type.
766 + (elf_machine_rel, elf_machine_rel_relative): Cast symidx to Elf
767 + Word before comparing with gotsym. Take reloc_addr argument as
768 + void*. Remove the code added for the compiler to drop any
769 + alignment assumptions.
771 +2003-03-19 Ulrich Drepper <drepper@redhat.com>
773 + * Makefile (distribute): Add include/atomic.h and bits/atomic.h.
774 + * include/atomic.h: New file.
775 + * sysdeps/i386/i486/bits/atomic.h: New file.
776 + * sysdeps/x86_64/bits/atomic.h: New file.
777 + * sysdeps/s390/bits/atomic.h: New file.
778 + * sysdeps/sh/bits/atomic.h: New file.
779 + * sysdeps/ia64/bits/atomic.h: New file.
780 + * sysdeps/powerpc/bits/atomic.h: New file.
781 + * sysdeps/generic/bits/atomic.h: New file.
782 + * sysdeps/i386/i486/atomicity.h: Removed.
783 + * sysdeps/x86_64/atomicity.h: Removed.
784 + * sysdeps/s390/s390-32/atomicity.h: Removed.
785 + * sysdeps/s390/s390-64/atomicity.h: Removed.
786 + * sysdeps/ia64/atomicity.h: Removed.
787 + * sysdeps/powerpc/powerpc32/atomicity.h: Removed.
788 + * sysdeps/powerpc/powerpc64/atomicity.h: Removed.
789 + * elf/dl-profile.c: Use atomic.h instead of atomicity.h. Adjust
790 + use of macros from atomicity.h to new names and semantics.
791 + * gmon_mcount.c: Likewise.
792 + * malloc/set-freeres.c: Likewise.
793 + * nscd/cache.c: Likewise.
794 + * stdlib/cxa_finalize.c: Likewise.
795 + * sysdeps/unix/sysv/linux/getsysstats.c: Likewise.
797 +2003-03-19 Alexandre Oliva <aoliva@redhat.com>
799 + * sysdeps/mips/ieee754.h: New file, suitable to replace both
800 + ../ieee754/ieee754.h and ../ieee754/ldbl-128/ieee754.h, kept
801 + mips-specific for now.
803 +2003-03-19 Ulrich Drepper <drepper@redhat.com>
805 + * stdlib/strtod.c (INTERNAL): While eating trailing zeros handle
806 + hexdigits correctly. Reported by Fred Tydeman <tydeman@tybor.com>.
807 + * stdlib/tst-strtod.c: Add test for the bug.
809 + * posix/tst-nice.c (do_test): Remove invalid of return value.
810 + Don't run test if initial level != 0.
812 +2003-03-19 Amos Waterland <apw@us.ibm.com>
814 + * posix/tst-nice.c: New file.
815 + * posix/Makefile (tests): Add tst-nice.
817 +2003-03-18 Roland McGrath <roland@redhat.com>
819 + * abilist: New directory of libfoo.abilist files maintained using
820 + scripts/merge-abilist.awk and "make update-abi" rules.
821 + * Makefile (distribute): Add abilist/*.abilist.
822 + * Makerules [$(build-shared) = yes] [$(subdir)] (tests):
823 + Depend on check-abi.
825 + * configure.in: Move $critic_missing check after all AC_CHECK_PROG_VER.
826 + * configure: Regenerated.
828 + * sysdeps/unix/sysv/linux/syscalls.list (posix_fadvise64): Fix name.
830 +2003-03-18 Ulrich Drepper <drepper@redhat.com>
832 + * sysdeps/posix/sysconf.c (__sysconf): Handle _SC_MONOTONIC_CLOCK
833 + correctly.
835 +2003-03-18 Steven Munroe <sjmunroe@us.ibm.com>
837 + * sysdeps/powerpc/powerpc64/memcpy.S: New file.
839 +2003-03-18 Ulrich Drepper <drepper@redhat.com>
841 + * Versions.def: Add GLIBC_2.3.3 for libpthread.
843 +2003-03-17 Ulrich Drepper <drepper@redhat.com>
845 + * sysdeps/generic/libc-start.c [!SHARED &&
846 + !LIBC_START_MAIN_AUXVEC_ARG]: Compute beginning of auxvec correctly.
848 +2003-03-17 Roland McGrath <roland@redhat.com>
850 + * include/ctype.h: Revert last change.
852 +2003-03-17 Ulrich Drepper <drepper@redhat.com>
854 + * argp/tst-argp1.c: Use test-skeleton.c.
855 + * locale/tst-C-locale.c: Likewise.
857 +2003-03-17 Alexandre Oliva <aoliva@redhat.com>
859 + * sysdeps/mips/mips64/Implies: Move wordsize-64 to...
860 + * sysdeps/mips/mips64/n64/Implies: New file.
861 + * sysdeps/mips/mips64/n64/Makefile: New file.
862 + * sysdeps/mips/mips64/n64/el/bits/endian.h: New file.
863 + * sysdeps/mips/mips64/n32/Implies: New file.
864 + * sysdeps/mips/mips64/n32/Makefile: New file.
865 + * sysdeps/mips/mips64/n32/el/bits/endian.h: New file.
866 + * sysdeps/unix/mips/mips64/n32/sysdep.h: New file.
867 + * sysdeps/unix/mips/mips64/n64/sysdep.h: New file.
868 + * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h: New file.
869 + * sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c: New file.
870 + * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h: New file.
871 + * sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h: New file.
872 + * sysdeps/unix/sysv/linux/mips/mips64/llseek.c: New file.
873 + * sysdeps/unix/sysv/linux/mips/mips64/recv.c: New file.
874 + * sysdeps/unix/sysv/linux/mips/mips64/send.c: New file.
875 + * sysdeps/unix/sysv/linux/mips/mips64/syscall.S: New file.
876 + * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list: New file.
877 + * sysdeps/unix/sysv/linux/mips/mips64/umount.c: New file.
878 + * sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S: New file.
880 + * sysdeps/unix/sysv/linux/configure.in (libc_cv_slibdir): Use
881 + lib64 for mips64/n64 and lib32 for mips64/n32.
882 + (ldd_rewrite_script): Needed for all mips64 configurations.
883 + * sysdeps/unix/sysv/linux/configure: Rebuilt.
884 + * sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed: New file.
885 + * sysdeps/unix/sysv/linux/mips/mips64/Dist: New file.
887 + * sysdeps/mips/machine-gmon.h (MCOUNT): Define for N32 and N64 as
888 + well.
890 + * sysdeps/unix/sysv/linux/mips/configure.in: New. Pre-process
891 + asm/unistd.h into asm-unistd.h.
892 + * sysdeps/unix/sysv/linux/mips/configure: Generated.
893 + * sysdeps/unix/sysv/linux/mips/Makefile: Do custom processing
894 + of syscall list.
895 + * sysdeps/unix/sysv/linux/mips/sys/syscall.h: New file.
896 + * sysdeps/unix/sysv/linux/mips/clone.S: Don't include
897 + asm/unistd.h.
899 + * sysdeps/unix/sysv/linux/mips/sys/ptrace.h: New file.
900 + * sysdeps/unix/sysv/linux/mips/ptrace.c: New file. Use long
901 + long type for registers on n32.
903 + * sysdeps/mips/bits/wordsize.h: New file, appropriate for all
904 + 3 ABIs.
905 + * sysdeps/mips/mips64/gmp-mparam.h: New file. Define
906 + BITS_PER_LONGINT to __WORDSIZE, to match all 3 ABIs.
907 + * sysdeps/mips/setjmp_aux.c (STRINGXP, REGS, PTRS): New macros.
908 + (__sigsetjmp_aux): Use them. Adjust for all 3 ABIs.
909 + * sysdeps/mips/elf/start.S: Adjust for all 3 ABIs.
910 + * sysdeps/unix/mips/brk.S: Likewise.
911 + * sysdeps/unix/mips/sysdep.S: Likewise.
912 + * sysdeps/unix/sysv/linux/mips/clone.S: Likewise.
913 + * sysdeps/mips/bits/setjmp.h (__jmp_buf): Likewise.
914 + * sysdeps/mips/sys/ucontext.h: Likewise.
915 + * sysdeps/unix/sysv/linux/mips/sys/profcs.h: Likewise.
916 + * sysdeps/unix/sysv/linux/mips/sys/ucontext.h: Likewise.
917 + * sysdeps/unix/sysv/linux/mips/kernel_stat.h: Likewise.
918 + * sysdeps/mips/mips64/bsd-_setjmp.S: Likewise.
919 + * sysdeps/mips/mips64/bsd-setjmp.S: Likewise.
920 + * sysdeps/mips/mips64/setjmp.S: Likewise.
921 + * sysdeps/mips/mips64/bits/setjmp.h: Deleted, obsolete.
922 + * sysdeps/mips/mips64/soft-fp/sfp-machine.h: Use long long for
923 + 64-bit types.
925 +2003-03-16 Ulrich Drepper <drepper@redhat.com>
927 + * sysdeps/unix/clock_settime.c (HANDLE_REALTIME): Define tv here,
928 + not at function level.
929 + * sysdeps/unix/clock_gettime.c (HANDLE_REALTIME): Likewise.
931 +2003-03-15 Roland McGrath <roland@redhat.com>
933 + * nis/nss_nis/nis-hosts.c (internal_gethostbyname2_r): int -> size_t
934 + * nis/nss_nis/nis-network.c (_nss_nis_getnetbyname_r): Likewise.
935 + * nis/nss_nis/nis-alias.c (_nss_nis_getaliasbyname_r): Likewise.
936 + * nis/nis_table.c (__create_ib_request): Likewise.
938 + * posix/fnmatch_loop.c: Add casts for signedness.
939 + * nss/nss_files/files-hosts.c: Likewise.
940 + * nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise.
941 + * gmon/gmon.c (write_call_graph): Use u_long for FROM_LEN.
942 + * nscd/nscd_getgr_r.c (nscd_getgr_r): Use nscd_ssize_t for CNT.
944 + * configure.in (libc_cv_visibility_attribute): Use AC_TRY_COMMAND,
945 + get errors into the log file.
946 + (libc_cv_broken_visibility_attribute): Likewise.
947 + (libc_cv_broken_alias_attribute): Likewise.
948 + (libc_cv_asm_weak_directive): Likewise.
949 + (libc_cv_need_minus_P): Likewise.
950 + (libc_cv_dot_text): Likewise.
951 + (libc_cv_asm_global_directive): Likewise.
952 + (libc_cv_asm_type_prefix): Likewise.
953 + * configure: Regenerated.
955 + * nscd/cache.c (cache_search): Give first arg type `request_type'.
956 + * nscd/nscd.h: Update decl.
958 + * nscd/nscd_getpw_r.c (nscd_getpw_r): Add casts for signedness.
959 + * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise.
960 + * elf/dl-close.c (_dl_close): Likewise.
961 + * sysdeps/unix/sysv/linux/powerpc/chown.c (__chown): int -> size_t
962 + * io/fts.c (fts_build): Likewise.
963 + * elf/cache.c (add_to_cache): Likewise.
964 + * locale/programs/locarchive.c (show_archive_content): Likewise.
966 + * posix/fnmatch.c (fnmatch): Tweak __builtin_expect use.
968 + * include/ctype.h (__ctype_b_loc): Tweak type punning to make gcc 3.3
969 + happy.
970 + (__ctype_toupper_loc, __ctype_tolower_loc): Likewise.
972 +2003-03-15 Ulrich Drepper <drepper@redhat.com>
974 + * sysdeps/unix/sysv/linux/ia64/system.c: Use the generic Linux
975 + code for most parts.
977 +2003-03-15 Roland McGrath <roland@redhat.com>
979 + * sysdeps/unix/sysv/linux/i386/system.c: Moved to ...
980 + * sysdeps/unix/sysv/linux/system.c: ... here.
981 + (FORK): Don't #define if already #define'd.
982 + * sysdeps/unix/sysv/linux/s390/system.c: File removed.
983 + * sysdeps/unix/sysv/linux/kernel-features.h [__powerpc__]:
984 + (__ASSUME_CLONE_THREAD_FLAGS): Define for kernel >= 2.5.64.
986 + * dlfcn/tst-dlinfo.c: New file.
987 + * dlfcn/Makefile (tests): Add tst-dlinfo.
988 + ($(objpfx)tst-dlinfo): New target.
990 + * dlfcn/dlinfo.c: New file.
991 + * dlfcn/Makefile (libdl-routines): Add it.
992 + * dlfcn/Versions (libdl: GLIBC_2.3.3): Add dlinfo.
993 + * dlfcn/dlfcn.h [__USE_GNU]: Declare dlinfo.
994 + [__USE_GNU] (RTLD_DI_*): New enum constants.
995 + [__USE_GNU] (Dl_serpath, Dl_serinfo): New types.
996 + * elf/dl-load.c (cache_rpath): New inline function.
997 + (_dl_map_object): Use it.
998 + (_dl_rtld_di_serinfo): New function.
999 + * sysdeps/generic/ldsodefs.h: Declare it.
1000 + * elf/Versions (ld: GLIBC_PRIVATE): Add it.
1002 + * sysdeps/powerpc/elf/libc-start.c (AUX_VECTOR_INIT): Define it.
1003 + (LIBC_START_MAIN, LIBC_START_MAIN_AUXVEC_ARG, MAIN_AUXVEC_ARG)
1004 + (INIT_MAIN_ARGS): Define, and #include <sysdeps/generic/libc-start.c>.
1005 + (__libc_start_main): Just call the generic one for most of the work.
1007 + * sysdeps/generic/libc-start.c [LIBC_START_MAIN]: If defined, define a
1008 + static function by that name instead of BP_SYM (__libc_start_main).
1009 + [LIBC_START_MAIN_AUXVEC_ARG]: Take AUXVEC as argument.
1010 + [MAIN_AUXVEC_ARG]: Pass 4th argument to MAIN.
1011 + [INIT_MAIN_ARGS]: Give INIT the same args as MAIN.
1013 + * sysdeps/generic/dl-sysdep.c (_dl_sysdep_start) [DL_PLATFORM_AUXV]:
1014 + Use this macro for extra AT_* cases.
1015 + * sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c (DL_PLATFORM_AUXV):
1016 + New macro, guts from ...
1017 + (__aux_init_cache): ... here, function removed.
1018 + (DL_PLATFORM_INIT): Don't define this.
1020 + * sysdeps/powerpc/powerpc32/memset.S: Put __cache_line_size in bss.
1021 + * sysdeps/powerpc/powerpc64/memset.S: Likewise.
1023 + * Versions.def (libthread_db): Add GLIBC_2.3.3 set.
1025 +2003-03-14 Roland McGrath <roland@redhat.com>
1027 + * dlfcn/dlerror.c (dlerror): If objname is "", don't put ": " after it.
1029 +2003-03-14 Jakub Jelinek <jakub@redhat.com>
1031 + * sysdeps/unix/sysv/linux/Makefile (syscall-%.h): Fix a typo.
1033 + * sysdeps/unix/sysv/linux/sparc/sparc64/pause.c: Include
1034 + sysdeps/posix/pause.c instead of sysdeps/unix/common/pause.c.
1036 +2003-03-14 Alexandre Oliva <aoliva@redhat.com>
1038 + * sysdeps/mips/fpu/bits/mathdef.h: New.
1039 + (__NO_LONG_DOUBLE_MATH): Define for o32.
1041 + * sysdeps/mips/sys/asm.h: Formatting changes.
1042 + (PTR, PTRSIZE, PTRLOG): Adjust for all 3 ABIs.
1043 + (CPADD): Define for all of them.
1044 + (SETUP_GP, SETUP_GPX, SETUP_GPX_L, SAVE_GP, SETUP_GP64,
1045 + SETUP_GPX64, SETUP_GPX64_L, RESTORE_GP64, USE_ALT_CP,
1046 + NARGSAVE): Define per ABI spec.
1047 + (END): Don't redefine.
1048 + (LONG_SLL, LONG_SLLV, LONG_SRL, LONG_SRLV, LONG_SRA,
1049 + LONG_SRAV): Remove duplicate definitions.
1050 + (PTR_ADD, PTR_ADDI, PTR_ADDU, PTR_ADDIU, PTR_SUB, PTR_SUBI,
1051 + PTR_SUBU, PTR_SUBIU, PTR_L, PTR_S, PTR_SLL, PTR_SLLV, PTR_SRL,
1052 + PTR_SRLV, PTR_SRA, PTR_SRAV, PTR_SCALESHIFT): Define for n32.
1053 + (PTR_LA): Define for all 3 ABIs.
1055 + * sysdeps/mips/dl-machine.h: Include sys/asm.h.
1056 + (elf_machine_matches_host): Prevent linking of o32 and n32
1057 + together.
1058 + (elf_machine_dynamic): Document assumption on $gp.
1059 + (STRINGXP, STRINGXV, STRINGV_): New macros.
1060 + (elf_machine_load_address): Use them to stringize PTR_LA and
1061 + PTR_SUBU.
1062 + (ELF_DL_FRAME_SIZE, ELF_DL_SAVE_ARG_REGS,
1063 + ELF_DL_RESTORE_ARG_REGS, IFABIO32): New macros used in...
1064 + (_dl_runtime_resolve): Adjust it for all 3 ABIs.
1065 + (__dl_runtime_resolve): Cast the symtab initializer to the
1066 + right type.
1067 + (RTLD_START): Use it. Adjust it for all 3 ABIs.
1068 + (elf_machine_rel): Mark as always_inline in RTLD_BOOTSTRAP.
1069 + Handle 64-bit R_MIPS_REL composite relocation and accept
1070 + R_MIPS_64 relocations to shift addend size to 64 bits.
1071 + Document assumption regarding local GOT entries. Document
1072 + backward-compatibility departing from the ABI behavior in
1073 + applying relocations that reference section symbols, no longer
1074 + used. Support relocations to mis-aligned offsets.
1075 + * sysdeps/mips/mips64/dl-machine.h: Deleted, obsolete.
1077 + * sysdeps/unix/sysv/linux/mips/readelflib.c: New file.
1079 + * sysdeps/unix/sysv/linux/mips/kernel_sigaction.h
1080 + (_KERNEL_NSIG_BPW): Define in terms of _MIPS_SZLONG.
1081 + * sysdeps/unix/sysv/linux/mips/sigaction.c: Define restore and
1082 + restore_rt functions. Use them.
1084 + * sysdeps/unix/sysv/linux/mips/sys/tas.h (_test_and_set): Don't
1085 + .set mips2 on new abis.
1087 +2003-03-13 Ulrich Drepper <drepper@redhat.com>
1089 + * posix/getconf.c: Recognize POSIX2_SYMLINKS.
1090 + * sysdeps/generic/bits/confname.h: Define _PC_2_SYMLINKS.
1091 + * sysdeps/posix/fpathconf.c: Handle _PC_2_SYMLINKS.
1092 + * sysdeps/posix/pathconf.c: Likewise.
1093 + * sysdeps/unix/sysv/linux/fpathconf.c: Likewise.
1094 + * sysdeps/unix/sysv/linux/pathconf.c: Likewise.
1095 + * sysdeps/unix/sysv/linux/pathconf.h: Define statfs_symlinks.
1097 + * sysdeps/unix/sysv/linux/linux_fsinfo.h: Define some more magic
1098 + words.
1100 +2003-03-14 Alexandre Oliva <aoliva@redhat.com>
1102 + * include/gmp.h: Include/gmp-mparam.h.
1103 + * stdlib/strtod.c: Include gmp-mparam.h before gmp.h and
1104 + gmp-impl.h.
1106 + * elf/dl-conflict.c: Don't compile _dl_resolve_conflicts if
1107 + ELF_MACHINE_NO_RELA is set.
1108 + * elf/rtld.c (dl_main): No prelink support for REL-only.
1110 + * sysdeps/generic/ldconfig.h (FLAG_MIPS64_LIBN32,
1111 + FLAG_MIPS64_LIBN64): Define.
1112 + * elf/cache.c (print_entry): Handle mips64 n32 and n64.
1114 + * sysdeps/mips/memcpy.S: Map t0-3 to a4-7 on new abis.
1115 + * sysdeps/mips/memset.S: Likewise.
1116 + * sysdeps/mips/sys/regdef.h: Alias a4-7 or t0-3 to $8-11
1117 + depending on the ABI.
1119 + * sysdeps/mips/atomicity.h (exchange_and_add, atomic_add):
1120 + Don't .set mips2 on new abi.
1121 + (compare_and_swap): Likewise. Support 64-bit longs on n64.
1123 + * stdlib/fpioconst.h: Include gmp.h with angle brackets.
1125 +2003-03-13 Roland McGrath <roland@redhat.com>
1127 + * elf/dl-load.c (_dl_map_object_from_fd): Bail if no PT_LOAD phdrs
1128 + found. Reported by Alexandre Oliva <aoliva@redhat.com>.
1130 +2003-03-13 Alexandre Oliva <aoliva@redhat.com>
1132 + * stdio-common/_itoa.c (_itoa_base_table): Make 64-bit
1133 + literals long long.
1134 + * stdlib/fpioconst.c: Likewise.
1135 + * stdlib/strtod.c: Likewise.
1137 + * sysdeps/mips/add_n.S: Use L macro for local labels.
1138 + * sysdeps/mips/addmul_1.S: Likewise.
1139 + * sysdeps/mips/lshift.S: Likewise.
1140 + * sysdeps/mips/memcpy.S: Likewise.
1141 + * sysdeps/mips/memset.S: Likewise.
1142 + * sysdeps/mips/mul_1.S: Likewise.
1143 + * sysdeps/mips/rshift.S: Likewise.
1144 + * sysdeps/mips/sub_n.S: Likewise.
1145 + * sysdeps/mips/submul_1.S: Likewise.
1146 + * sysdeps/mips/mips64/add_n.S: Likewise.
1147 + * sysdeps/mips/mips64/addmul_1.S: Likewise.
1148 + * sysdeps/mips/mips64/lshift.S: Likewise.
1149 + * sysdeps/mips/mips64/mul_1.S: Likewise.
1150 + * sysdeps/mips/mips64/rshift.S: Likewise.
1151 + * sysdeps/mips/mips64/sub_n.S: Likewise.
1152 + * sysdeps/mips/mips64/submul_1.S: Likewise.
1153 + * sysdeps/unix/mips/sysdep.h: Define L() according to ABI
1154 + conventions. Define END as in sys/asm.h.
1155 + * sysdeps/unix/mips/sysdep.S: Likewise.
1156 + * sysdeps/unix/mips/wait.S: Likewise.
1157 + * sysdeps/unix/sysv/linux/mips/clone.S: Likewise.
1159 + * sysdeps/ieee754/dbl-64/dbl2mpn.c (__mpn_extract_double):
1160 + Cast shifted values that may be too narrow to mp_limb_t.
1161 + * sysdeps/ieee754/dbl-64/mpn2dbl.c (__mpn_construct_double):
1162 + Likewise.
1163 + * sysdeps/ieee754/flt-32/mpn2flt.c (__mpn_construct_float):
1164 + Likewise.
1165 + * sysdeps/ieee754/ldbl-128/ldbl2mpn.c
1166 + (__mpn_extract_long_double): Likewise.
1167 + * sysdeps/ieee754/ldbl-128/mpn2ldbl.c
1168 + (__mpn_construct_long_double): Likewise.
1169 + * sysdeps/ieee754/ldbl-96/ldbl2mpn.c
1170 + (__mpn_extract_long_double): Likewise.
1171 + * sysdeps/ieee754/ldbl-96/mpn2ldbl.c
1172 + (__mpn_construct_long_double): Likewise.
1174 +2003-03-13 Roland McGrath <roland@redhat.com>
1176 + * elf/Makefile ($(objpfx)librtld.mk): Tweak regexp so that one-line
1177 + entries in the map file match too.
1179 +2003-03-13 Guido Guenther <agx@sigxcpu.org>
1181 + * sysdeps/unix/sysv/linux/mips/clone.S: introduce and use local
1182 + label .Lthread_start since current binutils don't allow branches
1183 + to globally visible symbols.
1185 +2003-03-13 Jakub Jelinek <jakub@redhat.com>
1187 + * sysdeps/unix/sysv/linux/ia64/sysdep.h (BREAK_INSN_1, BREAK_INSN,
1188 + ASM_OUTARGS_0, ASM_OUTARGS_1, ASM_OUTARGS_2, ASM_OUTARGS_3,
1189 + ASM_OUTARGS_4, ASM_OUTARGS_5, ASM_OUTARGS_6): Define.
1190 + (INTERNAL_SYSCALL, INLINE_SYSCALL): Use it. Make syscall arguments
1191 + clobbered by the syscall.
1192 + (ASM_ARGS_1, ASM_ARGS_2, ASM_ARGS_3, ASM_ARGS_4, ASM_ARGS_5,
1193 + ASM_ARGS_6): Change constraints from r to index of corresponding
1194 + output register.
1195 + * sysdeps/unix/sysv/linux/ia64/clone2.S (__clone2): Swap
1196 + ptid and ctid to match kernel.
1197 + * sysdeps/unix/sysv/linux/ia64/system.c (FORK): Likewise.
1199 +2003-03-12 Steven Munroe <sjmunroe@us.ibm.com>
1201 + * sysdeps/powerpc/powerpc64/elf/configure.in: Remove
1202 + AC_DEFINE(PI_STATIC_AND_HIDDEN). Not supported for PowerPC64.
1203 + * sysdeps/powerpc/powerpc64/elf/configure: Regenerated.
1205 +2003-03-11 Roland McGrath <roland@redhat.com>
1207 + * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela):
1208 + Check SYM_MAP rather than SYM as definedness check.
1209 + Handle R_PPC64_ADDR32, R_PPC64_ADDR30, and R_PPC64_REL64 relocs.
1210 + Don't handle R_PPC64_REL24 reloc.
1211 + Mostly from Steven Munroe <sjmunroe@us.ibm.com>.
1213 + * sysdeps/powerpc/powerpc64/dl-machine.h
1214 + [USE_TLS] (elf_machine_type_class): Match all the TLS relocs in a
1215 + block, so we cover all the TPREL16* flavors without 6 ||s.
1216 + [USE_TLS] (elf_machine_tprel): New function.
1217 + (elf_machine_rela) [USE_TLS]: Use elf_machine_tprel for TPREL64 reloc,
1218 + and handle TPREL16 relocs too. Return rather than break for DTPREL64.
1219 + Mostly from Steven Munroe <sjmunroe@us.ibm.com>.
1221 +2003-03-11 Ralf Baechle <ralf@linux-mips.org>
1223 + * sysdeps/unix/sysv/linux/mips/clone.S (__thread_start): Use jal
1224 + instead of jalr to invoke subroutine so restoring the $gp register
1225 + will work properly.
1227 +2003-03-11 Martin Schwidefsky <schwidefsky@de.ibm.com>
1229 + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h (__NR_pread64): Define
1230 + to __NR_pread if not defined.
1231 + (__NR_pwrite64): Define to __NR_pwrite if not defined.
1233 +2003-03-11 Jakub Jelinek <jakub@redhat.com>
1235 + * sysdeps/unix/sysv/linux/ia64/system.c: New file.
1236 + * sysdeps/unix/sysv/linux/kernel-features.h
1237 + (__ASSUME_CLONE_THREAD_FLAGS): Define for IA-64 and s390* with
1238 + kernel >= 2.5.64.
1240 +2003-03-11 Jakub Jelinek <jakub@redhat.com>
1242 + * sysdeps/generic/dl-sysdep.c (_dl_important_hwcaps): If CNT == 1,
1243 + allocate space even for the trailing '/'.
1244 + Reported by John Reiser <jreiser@BitWagon.com>.
1246 + * sysdeps/unix/sysv/linux/ia64/sysdep.h (LOAD_ARGS_6, ASM_ARGS_6,
1247 + ASM_CLOBBERS_6): Define.
1248 + (ASM_CLOBBERS_5): Use ASM_CLOBBERS_6.
1249 + * sysdeps/unix/sysv/linux/ia64/clone2.S (__clone2): Reorder arguments
1250 + to match IA-32 order.
1251 + * sysdeps/unix/sysv/linux/i386/clone.S: Fix comment.
1253 +2003-03-10 Steven Munroe <sjmunroe@us.ibm.com>
1255 + * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Don't clobber R7.
1256 + Copy extra params for NPTL to registers used in clone syscall.
1258 +2003-03-10 Martin Schwidefsky <schwidefsky@de.ibm.com>
1260 + * sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list: Correct system
1261 + call names for pread and pwrite.
1263 +2003-03-10 Roland McGrath <roland@redhat.com>
1265 + * dlfcn/Makefile (libdl-routines): Add dladdr1.
1266 + * dlfcn/dladdr1.c: New file.
1267 + * dlfcn/dlfcn.h [__USE_GNU]: Declare dladdr1.
1268 + [__USE_GNU] (RTLD_DL_SYMENT, RTLD_DL_LINKMAP): New enum constants.
1269 + * elf/dl-addr.c (_dl_addr): Take new args, a struct link_map ** and
1270 + a const ElfNN_Sym ** to fill in.
1271 + * include/dlfcn.h: Update decl. Include <link.h>.
1272 + * dlfcn/dladdr.c (dladdr): Update caller.
1273 + * malloc/mtrace.c (tr_where): Likewise.
1274 + * sysdeps/generic/elf/backtracesyms.c: Likewise.
1275 + * sysdeps/generic/elf/backtracesymsfd.c: Likewise.
1276 + * dlfcn/Versions (libdl: GLIBC_2.3.3): New set, add dladdr1.
1277 + * Versions.def (libdl): Define GLIBC_2.3.3 set.
1279 + * sysdeps/unix/make-syscalls.sh: Generate $(compile-syscall) for
1280 + assembler command.
1281 + * sysdeps/unix/Makefile (compile-syscall): New variable.
1282 + Pass -g0 to compiler for assembling syscall stubs from stdin.
1284 + * sysdeps/i386/sysdep.h [HAVE_CPP_ASM_DEBUGINFO]
1285 + (STABS_CURRENT_FILE, STABS_CURRENT_FILE1, STABS_FUN, STABS_FUN_END):
1286 + Define these to do nothing.
1288 + * configure.in: New check for -g on .S files.
1289 + * configure: Regenerated.
1290 + * config.make.in (have-cpp-asm-debuginfo): New variable.
1291 + * config.h.in (HAVE_CPP_ASM_DEBUGINFO): New #undef.
1292 + * Makeconfig (ASFLAGS): New variable, if undefined and
1293 + $(have-cpp-asm-debuginfo), take options matching -g% from $(CFLAGS).
1294 + * Makerules (compile.S, COMPILE.S): Use $(ASFLAGS).
1296 +2003-03-09 Roland McGrath <roland@redhat.com>
1298 + * sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S: Take 3 new args
1299 + used by NPTL on new kernels. From Paul Mackerras <paulus@samba.org>.
1301 +2003-03-09 Ulrich Drepper <drepper@redhat.com>
1303 + * po/fi.po: Update from translation team.
1304 + * po/ca.po: Likewise.
1305 + * po/da.po: Likewise.
1307 +2003-03-08 Ulrich Drepper <drepper@redhat.com>
1309 + * rt/tst-aio7.c (do_test): Change BYTES into a #define.
1311 +2003-03-07 Ulrich Drepper <drepper@redhat.com>
1313 + * rt/tst-aio7.c (do_test): Give BUFF permanent extent, too.
1315 + * sysdeps/powerpc/fpu/w_sqrt.c: Fix comment.
1317 +2003-03-07 Roland McGrath <roland@redhat.com>
1319 + * sysdeps/s390/s390-32/sysdep.h (L): Use .Lfoo instead of foo.
1320 + * sysdeps/s390/s390-64/sysdep.h (L): Likewise.
1322 +2003-03-04 Guido Guenther <agx@sigxcpu.org>
1324 + * sysdeps/unix/sysv/linux/mips/syscalls.list: Remove unneeded
1325 + stubs, we have INLINE_SYSCALL.
1326 + * sysdeps/unix/sysv/linux/mips/bits/mman.h: Define MAP_POPULATE,
1327 + MAP_NONBLOCK.
1329 +2003-03-06 Roland McGrath <roland@redhat.com>
1331 + * rt/tst-aio7.c (do_test): Revert last change. Instead, give CB1
1332 + permanent extent and add a comment about testing its implicit teardown.
1334 +2003-03-06 Martin Schwidefsky <schwidefsky@de.ibm.com>
1336 + * rt/tst-aio7.c (do_test): Cancel i/o on CB1 before it's out of scope.
1338 +2003-03-05 Ulrich Drepper <drepper@redhat.com>
1340 + * sysdeps/generic/dl-tls.c (_dl_allocate_tls_storage): Fix
1341 + reversed __builtin_expect expectation.
1343 +2003-03-05 Roland McGrath <roland@redhat.com>
1345 + * stdio-common/sscanf.c: Use prototype defn with ... syntax.
1346 + * libio/swscanf.c: Likewise.
1347 + * libio/swprintf.c: Likewise.
1349 +2003-03-04 Roland McGrath <roland@redhat.com>
1351 + * sysdeps/powerpc/powerpc64/dl-machine.h: Include <dl-tls.h>.
1352 + (elf_machine_rela): Always use RESOLVE_MAP, needed for
1353 + R_PPC64_JMP_SLOT as well as TLS cases.
1354 + (BIT_INSERT): Move parenthesis where it ought to have been.
1355 + Reported by Steven Munroe <sjmunroe@us.ibm.com>.
1357 + * posix/confstr.c (confstr): Correct STRING_LEN values for
1358 + _CS_GNU_LIBC_VERSION and _CS_GNU_LIBPTHREAD_VERSION, add missing
1359 + break. Reported by Alexandre Julliard <julliard@winehq.com>.
1361 +2003-03-04 Jakub Jelinek <jakub@redhat.com>
1363 + * sysdeps/ia64/fpu/libm-test-ulps: Regenerated.
1365 +2003-03-04 Ulrich Drepper <drepper@redhat.com>
1367 + * sysdeps/unix/sysv/linux/x86_64/clone.S: Add support for the new
1368 + clone parameters.
1370 + * po/sv.po: Update from translation team.
1372 +2003-03-04 Andreas Jaeger <aj@suse.de>
1373 + Ulrich Drepper <drepper@redhat.com>
1375 + * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Fix comments.
1377 +2003-03-03 Ulrich Drepper <drepper@redhat.com>
1379 + * sysdeps/generic/dl-sysdep.h: Add double include protection.
1381 + * po/tr.po: Update from translation team.
1383 + * elf/dl-load.c (_dl_map_object_from_fd): Determine whether there
1384 + are holes between the segments. Only call mprotect to set
1385 + proection to PROT_NONE if there are some.
1387 + * elf/dl-load.c (struct filebuf): Actually use FILEBUF_SIZE.
1388 + Update comment.
1390 + * include/sched.h (__clone2): Use ... instead of adding all the
1391 + new parameters.
1393 +2003-03-03 Roland McGrath <roland@redhat.com>
1395 + * elf/dl-load.c (struct filebuf): Fix typo in last change.
1397 + * sysdeps/powerpc/powerpc32/elf/configure.in: Don't define
1398 + PI_STATIC_AND_HIDDEN.
1400 +2003-03-03 Ian Wienand <ianw@gelato.unsw.edu.au>
1402 + * sysdeps/unix/sysv/linux/ia64/clone2.S: Update to take extra clone
1403 + flags.
1404 + * include/sched.h: Update clone2 prototype.
1406 +2003-03-03 Andreas Jaeger <aj@suse.de>
1408 + * math/tgmath.h (__TGMATH_UNARY_REAL_RET_ONLY): New definition.
1409 + (llrint): Use it to correct return type.
1410 + (lrint): Likewise.
1411 + (lround): Likewise.
1412 + (llround): Likewise.
1414 +2003-03-03 Ulrich Drepper <drepper@redhat.com>
1416 + * elf/dl-load.c (struct filebuf): For 64-bit platforms use 640
1417 + byte filebuf size.
1419 + * libio/fileops.c (_IO_new_file_fopen): Close stillborn descriptor
1420 + if ccs parameter isn't valid. Reported by Andreas Schwab.
1422 +2003-03-03 Martin Schwidefsky <schwidefsky@de.ibm.com>
1424 + * sysdeps/unix/sysv/linux/s390/s390-32/syscall.S (syscall): Add support
1425 + for system call numbers > 255.
1426 + * sysdeps/unix/sysv/linux/s390/s390-32/syscall.h (DO_CALL,
1427 + INLINE_SYSCALL, INTERNAL_SYSCALL_DIRECT, INTERNAL_SYSCALL_SVC0,
1428 + INTERNAL_SYSCALL): Likewise.
1429 + * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S (syscall): Likewise.
1430 + * sysdeps/unix/sysv/linux/s390/s390-64/syscall.h (DO_CALL,
1431 + INLINE_SYSCALL, INTERNAL_SYSCALL_DIRECT, INTERNAL_SYSCALL_SVC0,
1432 + INTERNAL_SYSCALL): Likewise.
1434 +2003-03-03 Martin Schwidefsky <schwidefsky@de.ibm.com>
1436 + * sysdeps/generic/dl-tls.c (_dl_deallocate_tls): Don't free the dtv
1437 + array if it is the initial dtv.
1439 +2003-03-03 Ulrich Drepper <drepper@redhat.com>
1441 + * po/es.po: Update from translation team.
1442 + * po/fr.po: Likewise.
1443 + * po/gl.po: Likewise.
1444 + * po/sk.po: Likewise.
1445 + * po/sv.po: Likewise.
1447 + * sysdeps/unix/sysv/linux/syscalls.list: Add remap_file_pages entry.
1448 + * misc/sys/mman.h: Add prototype for remap_file_pages.
1449 + * sysdeps/generic/remap_file_pages.c: New file.
1450 + * misc/Makefile (routines): Add remap_file_pages.
1451 + * misc/Versions [libc:GLIBC_2.3.3]: Add remap_file_pages.
1453 + * sysdeps/unix/sysv/linux/x86_64/bits/mman.h: Define MAP_POPULATE
1454 + and MAP_NONBLOCK.
1455 + * sysdeps/unix/sysv/linux/s390/bits/mman.h: Likewise.
1456 + * sysdeps/unix/sysv/linux/powerpc/bits/mman.h: Likewise
1457 + * sysdeps/unix/sysv/linux/m68k/bits/mman.h: Likewise.
1458 + * sysdeps/unix/sysv/linux/arm/bits/mman.h: Likewise.
1459 + * sysdeps/unix/sysv/linux/ia64/bits/mman.h: Likewise.
1460 + * sysdeps/unix/sysv/linux/hppa/bits/mman.h: Likewise.
1461 + * sysdeps/unix/sysv/linux/alpha/bits/mman.h: Likewise.
1462 + * sysdeps/unix/sysv/linux/i386/bits/mman.h: Likewise.
1464 +2003-03-03 Roland McGrath <roland@redhat.com>
1466 + * sysdeps/ia64/dl-fptr.c (__ia64_make_fptr): Revert last change.
1467 + * sysdeps/ia64/dl-machine.h: Likewise.
1468 + * sysdeps/ia64/dl-symaddr.c (_dl_symbol_address): Remove const from
1469 + argument type.
1470 + * sysdeps/ia64/dl-lookupcfg.h: Update decl.
1472 + * sysdeps/wordsize-64/strtol_l.c (strtoll_l): Define as weak alias.
1473 + * sysdeps/wordsize-64/strtoul_l.c (strtoull_l): Define as weak alias.
1474 + * locale/Versions (libc: GLIBC_2.3): Move those to ...
1475 + * sysdeps/wordsize-32/Versions (libc: GLIBC_2.3): ... here, new file.
1476 + * sysdeps/wordsize-64/Versions (libc: GLIBC_2.3.3) Likewise.
1477 + * Versions.def (libc): Add GLIBC_2.3.3 set.
1479 + * sysdeps/ia64/dl-fptr.c (__ia64_make_fptr): Add const to MAP arg.
1480 + * sysdeps/ia64/dl-machine.h: Update decl.
1482 +2003-03-03 Andreas Jaeger <aj@suse.de>
1484 + * sysdeps/unix/clock_settime.c (HANDLE_REALTIME): Add missing brace.
1486 +2003-03-02 Roland McGrath <roland@redhat.com>
1488 + * scripts/abilist.awk: Reject data items with apparent 0 size.
1490 + * scripts/merge-abilist.awk: Restore hack to elide pattern foo.*/bar
1491 + after foo.* as if it were a duplicate.
1493 + * sysdeps/unix/sysv/linux/ia64/brk.S: Add .type and .size for __curbrk.
1495 +2003-03-02 Ulrich Drepper <drepper@redhat.com>
1497 + * elf/dl-load.c (struct filebuf): Reduce buf array to 512 bytes.
1499 + * sysdeps/generic/bits/time.h: Define CLOCK_MONOTONIC.
1500 + * sysdeps/posix/clock_getres.c: Define code for CLOCK_REALTIME only
1501 + if not already defined. Use SYSDEP_GETRES to allow other files to
1502 + provide alternative implementations.
1503 + * sysdeps/unix/sysv/linux/clock_getres.c: New file
1504 + * sysdeps/unix/clock_gettime.c: Define code for CLOCK_REALTIME only
1505 + if not already defined. Use SYSDEP_GETTIME to allow other files to
1506 + provide alternative implementations.
1507 + * sysdeps/unix/sysv/linux/clock_gettime.c: New file.
1508 + * sysdeps/unix/clock_settime.c: Define code for CLOCK_REALTIME only
1509 + if not already defined. Use SYSDEP_GETTIME to allow other files to
1510 + provide alternative implementations.
1511 + * sysdeps/unix/sysv/linux/clock_settime.c: New file.
1512 + * sysdeps/unix/clock_nanosleep.c: Use SYSDEP_NANOSLEEP to allow
1513 + other files to provide alternative implementations. Rearrange
1514 + tests for invalid parameters.
1515 + * sysdeps/unix/sysv/linux/clock_nanosleep.c: New file.
1516 + * sysdeps/unix/sysv/linux/sysconf.c: New file.
1517 + * sysdeps/unix/sysv/linux/kernel-features.h: Define
1518 + __ASSUME_POSIX_TIMERS for Linux 2.5.63 and up.
1519 + * sysdeps/unix/sysv/linux/bits/posix_opt.h: Define
1520 + _POSIX_MONOTONIC_CLOCK.
1522 +2003-03-02 Roland McGrath <roland@redhat.com>
1524 + * scripts/merge-abilist.awk: More checks for bogus input.
1525 + Uniquify duplicate config names.
1527 + * scripts/abilist.awk: Don't distinguish weak symbols in normal output.
1529 + * sysdeps/powerpc/powerpc32/dl-machine.c (_dl_reloc_overflow): Renamed
1530 + from dl_reloc_overflow, make global.
1531 + (__process_machine_rela): Update callers.
1532 + * sysdeps/powerpc/powerpc32/dl-machine.h: Declare _dl_reloc_overflow.
1533 + Add attribute_hidden to __process_machine_rela decl.
1534 + (elf_machine_type_class, elf_machine_rela): Handle 16-bit TLS relocs.
1536 + * sysdeps/generic/libc-start.c (__libc_start_main): Don't assign const
1537 + variable.
1539 + * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_fixup_plt):
1540 + Don't use weak_extern for dl_rtld_map. Instead check only if [SHARED].
1541 + (elf_machine_rela): Clean up.
1543 + * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): Clean up.
1545 + PowerPC TLS support contributed by Paul Mackerras <paulus@samba.org>.
1546 + * sysdeps/powerpc/powerpc32/elf/configure.in: New file.
1547 + * sysdeps/powerpc/powerpc32/elf/configure: New generated file.
1548 + * elf/tls-macros.h [__powerpc__ && !__powerpc64__]
1549 + (TLS_LE, TLS_IE, TLS_LD, TLS_GD): Define them.
1550 + * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): Support
1551 + new relocs for TLS.
1553 + * sysdeps/powerpc/dl-tls.h (TLS_TP_OFFSET, TLS_DTV_OFFSET): Move these
1554 + macros out of [SHARED].
1555 + (TLS_TPREL_VALUE, TLS_DTPREL_VALUE): New macros.
1557 + * elf/elf.h: Define R_PPC_* relocs for TLS support.
1558 + Clean up R_PPC64_* macro definition comments.
1560 + * configure.in: In "running configure fragment for" message,
1561 + omit $srcdir from the name if we prepended it.
1562 + * configure: Regenerated.
1564 + * elf/dl-reloc.c (allocate_static_tls): Fix calculations.
1565 + From Jakub Jelinek <jakub@redhat.com>.
1567 + * sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h: Revert last change,
1568 + which duplicated the O_DIRECT defn.
1570 +2003-03-01 GOTO Masanori <gotom@debian.or.jp>
1572 + * stdlib/stdlib.h: Add missing __USE_BSD enclosure for BSD derived
1573 + random functions.
1575 +2003-03-01 Andreas Schwab <schwab@suse.de>
1577 + * resolv/Makefile (tests): Don't depend on
1578 + $(objpfx)mtrace-tst-leaks when cross compiling.
1580 + * sysdeps/m68k/dl-machine.h (_dl_start_user): Access
1581 + __libc_stack_end through GOT since it is a global symbol.
1583 2003-03-01 GOTO Masanori <gotom@debian.or.jp>
1585 * argp/argp.h: Fix a typo.
1586 diff -u -udbrN glibc-2.3.2/Makeconfig glibc-2.3.2-200304020432/Makeconfig
1587 --- glibc-2.3.2/Makeconfig Mon Jan 6 06:31:36 2003
1588 +++ glibc-2.3.2-200304020432/Makeconfig Sun Mar 23 12:17:13 2003
1589 @@ -621,7 +621,7 @@
1590 +includes = -I$(..)include -I. \
1591 $(patsubst %/,-I%,$(objpfx)) $(patsubst %/,-I%,$(..)) \
1592 $(libio-include) $(includes) \
1593 - $(+sysdep-includes) $(last-includes) $(sysincludes)
1594 + $(+sysdep-includes) $(sysincludes)
1596 # Since libio has several internal header files, we use a -I instead
1597 # of many little headers in the include directory.
1598 @@ -716,6 +716,12 @@
1599 libtype.oS = lib%_nonshared.a
1600 endif
1602 +# The assembler can generate debug information too.
1603 +ifndef ASFLAGS
1604 +ifeq ($(have-cpp-asm-debuginfo),yes)
1605 +ASFLAGS := $(filter -g%,$(CFLAGS))
1606 +endif
1607 +endif
1609 +gnu-stabs = $(shell echo>&2 '*** BARF ON ME')
1611 diff -u -udbrN glibc-2.3.2/Makefile glibc-2.3.2-200304020432/Makefile
1612 --- glibc-2.3.2/Makefile Fri Feb 21 07:22:51 2003
1613 +++ glibc-2.3.2-200304020432/Makefile Fri Mar 28 02:13:00 2003
1614 @@ -274,6 +274,7 @@
1615 include/shlib-compat.h include/pthread.h Versions.def \
1616 cppflags-iterator.mk tls.make.c \
1617 include/stubs-prologue.h include/gnu/stubs.h \
1618 + include/atomic.h bits/atomic.h \
1619 INTERFACE CONFORMANCE NAMESPACE LICENSES \
1620 $(addprefix scripts/, \
1621 rellns-sh config.sub config.guess \
1622 @@ -282,7 +283,10 @@
1623 gen-sorted.awk abi-versions.awk abilist.awk \
1624 firstversions.awk documented.sh cpp \
1625 output-format.sed gen-as-const.awk \
1626 - merge-abilist.awk extract-abilist.awk)
1627 + merge-abilist.awk extract-abilist.awk \
1628 + rpm2dynsym.sh \
1629 + ) \
1630 + $(wildcard abilist/*.abilist)
1632 distribute := $(strip $(distribute))
1633 generated := $(generated) stubs.h
1634 @@ -316,12 +320,6 @@
1635 $(MAKE) $(PARALLELMFLAGS) -C $(@D) $(@F)
1637 iconvdata/% localedata/% po/% manual/%:
1638 - $(MAKE) $(PARALLELMFLAGS) -C $(@D) $(@F)
1640 -# This is a special goal for people making binary distributions. Normally
1641 -# everybody uses the DES based crypt library but for the distribution we
1642 -# need the only-MD5 based one as well.
1643 -md5-crypt/libmd5crypt:
1644 $(MAKE) $(PARALLELMFLAGS) -C $(@D) $(@F)
1646 # glibc 2.0 contains some header files which aren't used with glibc 2.1
1647 diff -u -udbrN glibc-2.3.2/Makerules glibc-2.3.2-200304020432/Makerules
1648 --- glibc-2.3.2/Makerules Sun Feb 23 00:23:31 2003
1649 +++ glibc-2.3.2-200304020432/Makerules Thu Mar 27 10:47:53 2003
1650 @@ -396,8 +396,10 @@
1652 # GCC can grok options after the file name, and it looks nicer that way.
1653 compile.c = $(CC) $< -c $(CFLAGS) $(CPPFLAGS)
1654 -compile.S = $(CC) $< -c $(CPPFLAGS) $(S-CPPFLAGS) $(ASFLAGS-$(suffix $@))
1655 -COMPILE.S = $(CC) -c $(CPPFLAGS) $(S-CPPFLAGS) $(ASFLAGS-$(suffix $@))
1656 +compile.S = $(CC) $< -c $(CPPFLAGS) $(S-CPPFLAGS) \
1657 + $(ASFLAGS) $(ASFLAGS-$(suffix $@))
1658 +COMPILE.S = $(CC) -c $(CPPFLAGS) $(S-CPPFLAGS) \
1659 + $(ASFLAGS) $(ASFLAGS-$(suffix $@))
1660 COMPILE.s = $(filter-out -pipe,$(CC)) -c $(ASFLAGS)
1662 # If we want to generate MD5 checksums for the sources do this now.
1663 @@ -1188,15 +1190,23 @@
1664 LC_ALL=C \
1665 $(AWK) -f $< -v 'config=$(check-abi-config)' \
1666 $(filter %.abilist,$^) \
1667 - | diff -pu0 - $(filter %.symlist,$^)
1668 + | { diff -pu0 - $(filter %.symlist,$^) $(check-abi-warn) ; }
1669 endef
1670 +ifeq ($(enable-check-abi),warn)
1671 +check-abi-warn = || echo '*** WARNING: $*.so failed ABI check'
1672 +endif
1674 ifeq ($(firstword $(sysd-sorted-done) f)$(firstword $(generating) f),tf)
1675 -include $(common-objpfx)tls.make
1676 -config-tls-yes := tls
1677 -config-tls-no := notls
1678 +config-tls := notls
1679 +ifeq ($(use-tls),yes)
1680 +config-tls := tls
1681 +endif
1682 +ifeq ($(use-thread),yes)
1683 +config-tls := thread
1684 +endif
1685 check-abi-config := \
1686 - $(config-machine)-$(config-vendor)-$(config-os)/$(config-tls-$(use-thread))
1687 + $(config-machine)-$(config-vendor)-$(config-os)/$(config-tls)
1688 endif
1690 update-abi-%: $(..)scripts/merge-abilist.awk $(..)abilist/%.abilist \
1691 @@ -1211,7 +1221,7 @@
1692 endef
1693 else
1694 define update-abi
1695 -LC_ALL=C $(AWK) -v config=$(update-abi-config) -f $^ \
1696 +LC_ALL=C $(AWK) -v config='$(update-abi-config)' -f $^ \
1697 > $(..)abilist/$*.abilist.new
1698 @if cmp -s $(..)abilist/$*.abilist.new $(..)abilist/$*.abilist 2> /dev/null; \
1699 then rm -f $(..)abilist/$*.abilist.new; \
1700 @@ -1233,15 +1243,20 @@
1701 update-abi: subdir_update-abi
1702 endif
1704 -# Enable this when all the .abilist files are in place.
1705 -#tests: check-abi
1707 ifeq ($(subdir),elf)
1708 check-abi: check-abi-libc
1709 update-abi: update-abi-libc
1710 common-generated += libc.symlist
1711 endif
1713 +ifeq ($(build-shared),yes)
1714 +ifneq ($(enable-check-abi),no)
1715 +ifdef subdir
1716 +tests: check-abi
1717 +endif
1718 +endif
1719 +endif
1721 endif
1723 # There's no good place to put this - here will do.
1724 @@ -1370,13 +1385,15 @@
1725 .PHONY: stubs # The parent Makefile calls this target.
1726 stubs: $(objpfx)stubs
1727 endif
1728 -s = $(sysdep_dir)/generic
1729 $(objpfx)stubs: $(+depfiles)
1730 # Use /dev/null since `...` might expand to empty.
1731 - (s=`cd $s && $(PWD_P)`; \
1732 + (s=`cd $(sysdep_dir) && $(PWD_P)`; \
1733 $(patsubst %/,cd % &&,$(objpfx)) \
1734 sed -n 's/^stub_warning *(\([^)]*\).*$$/#define __stub_\1/p' \
1735 - `sed -n -e '\@ $s/[^ ]*\.c@{; s@^.* $s/\([^ ]*\.c\).*$$@'"$$s"'/\1@; h; }' \
1736 + `sed -n -e 's@$(sysdep_dir)/@'"$$s"'/@g' \
1737 + -e 's@\$$(common-objpfx)@$(..)@g' -e 's@\$$(objpfx)@@g' \
1738 + -e '/: *[^ ]/{s@^.*: *\([^ ]*\) .*$$@\1@; h; }' \
1739 + -e '/:$$/d' \
1740 -e '/stub-tag\.h/{; g; p; }' \
1741 $(patsubst $(objpfx)%,%,$^) /dev/null` \
1742 /dev/null) > $@T
1743 diff -u -udbrN glibc-2.3.2/NEWS glibc-2.3.2-200304020432/NEWS
1744 --- glibc-2.3.2/NEWS Mon Jan 13 10:26:13 2003
1745 +++ glibc-2.3.2-200304020432/NEWS Sun Mar 16 00:16:13 2003
1746 @@ -1,9 +1,17 @@
1747 -GNU C Library NEWS -- history of user-visible changes. 2003-1-12
1748 -Copyright (C) 1992-2002, 2003 Free Software Foundation, Inc.
1749 +GNU C Library NEWS -- history of user-visible changes. 2003-3-15
1750 +Copyright (C) 1992-2002,2003 Free Software Foundation, Inc.
1751 See the end for copying conditions.
1753 Please send GNU C library bug reports using the `glibcbug' script to
1754 <bugs@gnu.org>. Please send questions and suggestions to <bug-glibc@gnu.org>.
1756 +Version 2.3.3
1758 +* New functions `dladdr1' and `dlinfo' in <dlfcn.h> provide more ways to
1759 + interrogate the dynamic linker, compatible with the Solaris interface.
1761 +* ELF thread-local storage support (TLS) now works on PowerPC and PowerPC64;
1762 + implemented by Paul Mackerras, Steven Munroe, and Roland McGrath.
1764 Version 2.3.2
1766 diff -u -udbrN glibc-2.3.2/README-alpha glibc-2.3.2-200304020432/README-alpha
1767 --- glibc-2.3.2/README-alpha Thu Jan 1 01:00:00 1970
1768 +++ glibc-2.3.2-200304020432/README-alpha Thu May 13 12:22:39 1999
1769 @@ -0,0 +1,287 @@
1770 + GNU libc SNAPSHOT SYSTEM
1771 + (general info)
1772 + Updated 1997-9-26
1774 +WHAT ARE GNU libc SNAPSHOTS
1775 +---------------------------
1777 +Snapshots are an "image" of the main glibc development tree, captured at a
1778 +particular random instant in time. When you use the snapshots, you should be
1779 +able to maintain a local copy of libc that is no more than one day older than
1780 +the official source tree used by the libc maintainers.
1782 +The primary purpose of providing snapshots is to widen the group of motivated
1783 +developers that would like to help test, debug, and enhance glibc, by providing
1784 +you with access to the "latest and greatest" source. This has several
1785 +advantages, and several disadvantages.
1787 + First the advantages:
1789 + o Once we have a large base of motivated testers using the snapshots,
1790 + this should provide good coverage across all currently supported
1791 + glibc hosts and targets. If a new bug is introduced in glibc due to
1792 + fixing another bug or ongoing development, it should become
1793 + obvious much more quickly and get fixed before the next general
1794 + net release. This should help to reduce the chances of glibc being
1795 + released to the general public with a major bug that went unnoticed
1796 + during the release cycle testing because they are machine dependent.
1797 + We hope to greatly improve glibc's stability and reliability by
1798 + involving more people and more execution environments in the
1799 + prerelease testing.
1801 + o With access to the latest source, any diffs that you send to fix
1802 + bugs or add new features should be much easier for the glibc team
1803 + to merge into the official source base (after suitable review
1804 + of course). This encourages us to merge your changes quicker,
1805 + while they are still "fresh".
1807 + o Once your diffs are merged, you can obtain a new copy of glibc
1808 + containing your changes almost immediately. Thus you do not
1809 + have to maintain local copies of your changes for any longer
1810 + than it takes to get them merged into the official source base.
1811 + This encourages you to send in changes quicker.
1813 + And the disadvantages:
1815 + o The snapshot you get will be largely untested and of unknown quality.
1816 + It may fail to configure or compile. It may have serious bugs.
1817 + You should always keep a copy of the last known working version
1818 + before updating to the current snapshot, or at least be able to
1819 + regenerate a working version if the latest snapshot is unusable
1820 + in your environment for some reason.
1822 + If a production version of glibc has a bug and a snapshot has the fix,
1823 + and you care about stability, you should put only the fix for that
1824 + particular problem into your production version. Of course, if you
1825 + are eager to test glibc, you can use the snapshot versions in your
1826 + daily work, but users who have not been consulted about whether they
1827 + feel like testing glibc should generally have something which is at
1828 + least as bug free as the last released version.
1830 + o Providing timely response to your questions, bug reports, and
1831 + submitted patches will require the glibc development team to allocate
1832 + time from an already thin time budget. Please try to help us make
1833 + this time as productive as possible. See the section below about
1834 + how to submit changes.
1837 +WHO SHOULD TRY THE SNAPSHOTS
1838 +----------------------------
1840 +Remember, these are snapshots not tested versions. So if you use
1841 +these versions you should be able to
1843 + o make sure your system stays usable
1845 + o locate and hopefully fix problems
1847 + o to port glibc to a new target yourself
1849 +You should not use the snapshots if
1851 + o your system is needed in a production environment which needs
1852 + stability
1854 + o you expect us to fix your problems since you somehow depend on them.
1855 + You must be willing to fix the problems yourself, we don't want to
1856 + see "I have problems, fix this" messages.
1859 +HOW TO GET THE SNAPSHOTS
1860 +------------------------
1862 +At the moment we provide a full snapshot weekly (every sunday), so
1863 +that users getting a snapshot for the first time, or updating after
1864 +a long period of not updating, can get the latest version in a single
1865 +operation. Along with the full snapshot, we will provide incremental
1866 +diffs on a nearly daily basis (whenever code changes). Each daily
1867 +diff will be relative to the source tree after applying all previous
1868 +daily diffs. The daily diffs are for people who have relatively low
1869 +bandwidth ftp or uucp connections.
1871 +The files will be available via anonymous ftp from alpha.gnu.org, in
1872 +directory /gnu/libc and on linux.kernel.org in /pub/software/libs/glibc. The
1873 +directories should look something like:
1875 + libc-970921.tar.gz
1876 + libc-970917-970922.diff.gz
1877 + libc-970922-970925.diff.gz
1882 +Please note that the snapshots on alpha.gnu.org and on
1883 +linux.kernel.org are not always in sync. Patches to some files might
1884 +appear a day a diff earlier or later on alpha than on kernel.
1885 +Use always alpha or always kernel but don't mix them.
1887 +There are sometimes additionally test releases of the add-ons available in
1888 +these directories. If a new version of an add-on is available it is normally
1889 +required for the corresponding snapshot so always pay attention for these.
1891 +Note that we provide GNU gzip compressed files only. You can ftp gzip
1892 +from ftp.gnu.org in directory pub/gnu.
1894 +In some cases the dates for diffs and snapshots do not match like in the
1895 +example above. The full release is for 970921 but the patch is for
1896 +970917-970922. This only means that nothing changed between 970917 and 970922
1897 +and that you have to use this patch on top of the 970921 snapshot since the
1898 +patch is made on 970922.
1900 +Also, as the gcc developers did with their gcc snapshot system, even though we
1901 +will make the snapshots available on a publically accessible ftp area, we ask
1902 +that recipients not widely publicise their availability. The motivation for
1903 +this request is not to hoard them, but to avoid the situation where the
1904 +general glibc user base naively attempts to use the snapshots, has trouble with
1905 +them, complains publically, and the reputation of glibc declines because of a
1906 +perception of instability or lack of quality control.
1909 +GLIBC TEST SUITE
1910 +----------------
1912 +A test suite is distributed as an integral part of the snapshots. A simple
1913 +"make check" in your build directory is sufficient to run the tests. glibc
1914 +should pass all tests and if any fails, please report it. A failure might not
1915 +originate from a bug in glibc but also from bugs in the tools, e.g. with gcc
1916 +2.7.2.x the math tests fail some of the tests because of compiler bugs.
1918 +Note that the test suite is still in its infancy. The tests themselves only
1919 +cover a small portion of libc features, and where tests do exist for a feature
1920 +they are not exhaustive. New tests are welcome.
1923 +GETTING HELP, GLIBC DISCUSSIONS, etc
1924 +------------------------------------
1926 +People who want to help with glibc and who test out snapshots
1927 +regularly should get on the libc-alpha@sourceware.cygnus.com mailing
1928 +list by sending an email to libc-alpha-subscribe@sourceware.cygnus.com.
1929 +This list is meant (as the name suggests) for the discussion of test
1930 +releases and also reports for them. People who are on this list are
1931 +welcome to post questions of general interest.
1933 +People who are not only willing to test the snapshots but instead
1934 +really want to help developing glibc should contact
1935 +libc-hacker-subscribe@sourceware.cygnus.com.org to be put on the developers
1936 +mailing list. This list is really only meant for developers. No
1937 +questions about installation problems or other simple topics are
1938 +wanted nor will they be answered.
1940 +Do *not* send any questions about the snapshots or patches specific to the
1941 +snapshots to bug-glibc@gnu.org. Nobody there will have any idea what
1942 +you are talking about and it will just cause confusion.
1945 +BUG REPORTS
1946 +-----------
1948 +Send bug reports directly to Ulrich Drepper <drepper@gnu.org>. Please
1949 +do *not* use the glibcbug script for reporting bugs in the snapshots.
1950 +glibcbug should only be used for problems with the official released versions.
1951 +We don't like bug reports in the bug database because otherwise the impression
1952 +of instability or lack of quality control of glibc as a whole might manifest
1953 +in people's mind.
1955 +Note that since no testing is done on the snapshots, and snapshots may even be
1956 +made when glibc is in an inconsistent state, it may not be unusual for an
1957 +occasional snapshot to have a very obvious bug, such as failure to compile on
1958 +*any* machine. It is likely that such bugs will be fixed by the next
1959 +snapshot, so it really isn't necessary to report them unless they persist for
1960 +a couple of days.
1962 +Missing files should always be reported, since they usually mean there is a
1963 +problem with the snapshot-generating process and we won't know about them
1964 +unless someone tells us.
1966 +Bugs which are non-obvious, such as failure to compile on only a specific
1967 +machine, a new machine dependent or obscure bug (particularly one not detected
1968 +by the testsuite), etc should be reported when you discover them, or have a
1969 +suggested patch to fix them.
1972 +FORMAT FOR PATCHES
1973 +------------------
1975 +If you have a fix for a bug, or an enhancement to submit, send your patch to
1976 +Ulrich Drepper <drepper@gnu.org>. Here are some simple guidelines for
1977 +submitting patches:
1979 + o Use "unified diffs" for patches. A typical command for generating
1980 + context diffs is "diff -ru glibc-old glibc-patched".
1982 + o Use the "minimalist approach" for patches. That is, each patch
1983 + should address only one particular bug, new feature, etc. Do not
1984 + save up many unrelated changes and submit them all in one big
1985 + patch, since in general, the larger the patch the more difficult
1986 + it is for us to decide if the patch is either correct or
1987 + desirable. And if we find something about the patch that needs
1988 + to be corrected before it can be installed, we would have to reject
1989 + the entire patch, which might contain changes which otherwise would
1990 + be accepted if submitted separately.
1992 + o Submit a sample ChangeLog entry with your patch. See the existing
1993 + glibc ChangeLog for examples of what a ChangeLog entry should look
1994 + like. The emacs command ^X4A will create a ChangeLog entry header
1995 + for you.
1998 +BUILDING SNAPSHOTS
1999 +------------------
2001 +The `best' way to build glibc is to use an extra directory, e.g.:
2002 +tar xzf libc-970921.tar.gz
2003 +mkdir build-glibc
2004 +cd build-glibc
2005 +../libc-970921/configure ...
2007 +In this way you can easily clean up (since `make clean' doesn't work at
2008 +the moment) and rebuild glibc.
2011 +NECESSARY TOOLS
2012 +---------------
2014 +For the recommended versions of gcc, binutils, make, texinfo, gettext,
2015 +autoconf and other tools which might be especially needed when using patches,
2016 +please read the file INSTALL.
2019 +HOW CAN YOU HELP
2020 +----------------
2022 +It helps already a lot if you just install glibc on your system and try to
2023 +solve any problems. You might want to look at the file `PROJECTS' and help
2024 +with one of those projects, fix some bugs (see `BUGS' or the bug database),
2025 +port to an unsupported platform, ...
2028 +FURTHER DOCUMENTATION
2029 +---------------------
2031 +A lot of questions are answered in the FAQ. The files `INSTALL', `README' and
2032 +`NOTES' contain the most important documentation. Furthermore glibc has its
2033 +own 700+ pages info documentation, ...
2037 +And finally a word of caution: The libc is one of the most fundamental parts
2038 +of your system - and these snapshots are untested and come without any
2039 +guarantee or warranty. You might be lucky and everything works or you might
2040 +crash your system. If you install a glibc snapshot as primary library, you
2041 +should have a backup somewhere.
2043 +On many systems it is also a problem to replace the libc while the system is
2044 +running. In the worst case on broken OSes some systems crash. On better
2045 +systems you can move the old libc aside but removing it will cause problems
2046 +since there are still processes using this libc image and so you might have to
2047 +check the filesystem to get rid of the libc data. One good alternative (which
2048 +is also safer) is to use a chroot'ed environment.
2050 +Thanks for your help and support.
2052 +Thanks to Fred Fish from Cygnus for the original version of this text
2053 +(for GDB).
2056 +Ulrich Drepper
2057 diff -u -udbrN glibc-2.3.2/README.template glibc-2.3.2-200304020432/README.template
2058 --- glibc-2.3.2/README.template Thu Jan 1 01:00:00 1970
2059 +++ glibc-2.3.2-200304020432/README.template Wed Oct 2 23:16:42 2002
2060 @@ -0,0 +1,87 @@
2061 +This directory contains the version VERSION release of the GNU C Library.
2062 +Many bugs have been fixed since the last release.
2063 +Some bugs surely remain.
2065 +As of this release, the GNU C library is known to run on the following
2066 +configurations:
2068 + *-*-gnu GNU Hurd
2069 + i[3456]86-*-linux-gnu Linux-2.x on Intel
2070 + m68k-*-linux-gnu Linux-2.x on Motorola 680x0
2071 + alpha*-*-linux-gnu Linux-2.x on DEC Alpha
2072 + powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems
2073 + powerpc64-*-linux-gnu Linux-2.4.19+ on 64-bit PowerPC systems
2074 + sparc-*-linux-gnu Linux-2.x on SPARC
2075 + sparc64-*-linux-gnu Linux-2.x on UltraSPARC 64-bit
2076 + arm-*-none ARM standalone systems
2077 + arm-*-linux Linux-2.x on ARM
2078 + arm-*-linuxaout Linux-2.x on ARM using a.out binaries
2079 + mips*-*-linux-gnu Linux-2.x on MIPS
2080 + ia64-*-linux-gnu Linux-2.x on ia64
2081 + s390-*-linux-gnu Linux-2.x on IBM S/390
2082 + s390x-*-linux-gnu Linux-2.4+ on IBM S/390 64-bit
2083 + sh-*-linux-gnu Linux-2.x on Super Hitachi
2084 + cris-*-linux-gnu Linux-2.4+ on CRIS
2085 + x86-64-*-linux-gnu Linux-2.4+ on x86-64
2087 +Former releases of this library (version 1.09.1 and perhaps earlier
2088 +versions) used to run on the following configurations:
2090 + alpha-dec-osf1
2091 + i[3456]86-*-bsd4.3
2092 + i[3456]86-*-isc2.2
2093 + i[3456]86-*-isc3
2094 + i[3456]86-*-sco3.2
2095 + i[3456]86-*-sco3.2v4
2096 + i[3456]86-*-sysv
2097 + i[3456]86-*-sysv4
2098 + i[3456]86-force_cpu386-none
2099 + i[3456]86-sequent-bsd
2100 + i960-nindy960-none
2101 + m68k-hp-bsd4.3
2102 + m68k-mvme135-none
2103 + m68k-mvme136-none
2104 + m68k-sony-newsos3
2105 + m68k-sony-newsos4
2106 + m68k-sun-sunos4
2107 + mips-dec-ultrix4
2108 + mips-sgi-irix4
2109 + sparc-sun-solaris2
2110 + sparc-sun-sunos4
2112 +Since no one has volunteered to test and fix the above configurations,
2113 +these are not supported at the moment. It's expected that these don't
2114 +work anymore. Porting the library is not hard. If you are interested
2115 +in doing a port, please contact the glibc maintainers by sending
2116 +electronic mail to <bug-glibc@gnu.org>.
2118 +There are some add-ons which can be used together with GNU libc. They
2119 +are designed in a way to ease the installation by integrating them in
2120 +the libc source tree. Simply get the add-ons you need and use the
2121 +--enable-add-ons option of the `configure' script to tell where the
2122 +add-ons are found. Please read the FAQ file for more details.
2124 +See the file INSTALL to find out how to configure, build, install, and port
2125 +the GNU C library. You might also consider reading the WWW pages for the
2126 +GNU libc at http://www.gnu.org/software/libc/libc.html.
2128 +The GNU C Library is completely documented by the Texinfo manual found
2129 +in the `manual/' subdirectory. The manual is still being updated and
2130 +contains some known errors and omissions; we regret that we do not
2131 +have the resources to work on the manual as much as we would like.
2132 +Please send comments on the manual to <bug-glibc-manual@gnu.org>, and
2133 +not to the library bug-reporting address.
2135 +The file NOTES contains a description of the feature-test macros used
2136 +in the GNU C library, explaining how you can tell the library what
2137 +facilities you want it to make available.
2139 +We prefer to get bug reports sent using the `glibcbug' shell script which
2140 +is installed together with the rest of the GNU libc to <bugs@gnu.org>.
2141 +Simply run this shell script and fill in the information. Nevertheless
2142 +you can still send bug reports to <bug-glibc@gnu.org> as normal electronic
2143 +mails.
2145 +The GNU C Library is free software. See the file COPYING.LIB for copying
2146 +conditions, and LICENSES for notices about a few contributions that require
2147 +these additional notices to be distributed.
2148 diff -u -udbrN glibc-2.3.2/Versions.def glibc-2.3.2-200304020432/Versions.def
2149 --- glibc-2.3.2/Versions.def Tue Dec 10 20:05:17 2002
2150 +++ glibc-2.3.2-200304020432/Versions.def Tue Mar 25 21:28:24 2003
2151 @@ -18,6 +18,7 @@
2152 GLIBC_2.3
2153 GLIBC_2.3.1
2154 GLIBC_2.3.2
2155 + GLIBC_2.3.3
2156 %ifdef USE_IN_LIBIO
2157 HURD_CTHREADS_0.3
2158 %endif
2159 @@ -32,6 +33,7 @@
2160 libdl {
2161 GLIBC_2.0
2162 GLIBC_2.1
2163 + GLIBC_2.3.3
2165 libm {
2166 GLIBC_2.0
2167 @@ -71,6 +73,7 @@
2168 GLIBC_2.2.3
2169 GLIBC_2.2.6
2170 GLIBC_2.3.2
2171 + GLIBC_2.3.3
2172 GLIBC_PRIVATE
2174 libresolv {
2175 @@ -82,6 +85,7 @@
2176 GLIBC_2.1
2177 GLIBC_2.2
2178 GLIBC_2.3
2179 + GLIBC_2.3.3
2181 libutil {
2182 GLIBC_2.0
2183 @@ -96,6 +100,7 @@
2184 GLIBC_2.1.3
2185 GLIBC_2.2.3
2186 GLIBC_2.3
2187 + GLIBC_2.3.3
2189 libanl {
2190 GLIBC_2.2.3
2191 diff -u -udbrN glibc-2.3.2/abilist/ld.abilist glibc-2.3.2-200304020432/abilist/ld.abilist
2192 --- glibc-2.3.2/abilist/ld.abilist Thu Jan 1 01:00:00 1970
2193 +++ glibc-2.3.2-200304020432/abilist/ld.abilist Wed Apr 2 06:39:52 2003
2194 @@ -0,0 +1,35 @@
2195 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2196 + GLIBC_2.0 A
2197 + _r_debug D 0x14
2198 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2199 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2200 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls
2201 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2202 + __libc_memalign F
2203 + calloc F
2204 + free F
2205 + malloc F
2206 + realloc F
2207 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2208 + GLIBC_2.1 A
2209 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2210 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2211 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls
2212 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2213 + _dl_mcount F
2214 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
2215 + GLIBC_2.2.5 A
2216 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
2217 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls
2218 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2219 + _r_debug D 0x28
2220 +GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls
2221 + GLIBC_2.2 A
2222 +GLIBC_2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls x86_64-.*-linux.*/tls
2223 + GLIBC_2.3 A
2224 +GLIBC_2.3 i.86-.*-linux.*/thread i.86-.*-linux.*/tls
2225 + ___tls_get_addr F
2226 +GLIBC_2.3 i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread x86_64-.*-linux.*/tls
2227 + __tls_get_addr F
2228 +GLIBC_2.3 s390-.*-linux.*/tls s390x-.*-linux.*/tls
2229 + __tls_get_offset F
2230 diff -u -udbrN glibc-2.3.2/abilist/libBrokenLocale.abilist glibc-2.3.2-200304020432/abilist/libBrokenLocale.abilist
2231 --- glibc-2.3.2/abilist/libBrokenLocale.abilist Thu Jan 1 01:00:00 1970
2232 +++ glibc-2.3.2-200304020432/abilist/libBrokenLocale.abilist Wed Apr 2 06:39:52 2003
2233 @@ -0,0 +1,13 @@
2234 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2235 + GLIBC_2.0 A
2236 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2237 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2238 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2239 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2240 + __ctype_get_mb_cur_max F
2241 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
2242 + GLIBC_2.2.5 A
2243 +GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2244 + GLIBC_2.2 A
2245 +GLIBC_2.3 powerpc64-.*-linux.*/thread
2246 + GLIBC_2.3 A
2247 diff -u -udbrN glibc-2.3.2/abilist/libanl.abilist glibc-2.3.2-200304020432/abilist/libanl.abilist
2248 --- glibc-2.3.2/abilist/libanl.abilist Thu Jan 1 01:00:00 1970
2249 +++ glibc-2.3.2-200304020432/abilist/libanl.abilist Wed Apr 2 06:39:52 2003
2250 @@ -0,0 +1,13 @@
2251 +GLIBC_2.2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2252 + GLIBC_2.2.3 A
2253 +GLIBC_2.2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2254 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2255 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2256 + gai_cancel F
2257 + gai_error F
2258 + gai_suspend F
2259 + getaddrinfo_a F
2260 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
2261 + GLIBC_2.2.5 A
2262 +GLIBC_2.3 powerpc64-.*-linux.*/thread
2263 + GLIBC_2.3 A
2264 diff -u -udbrN glibc-2.3.2/abilist/libc.abilist glibc-2.3.2-200304020432/abilist/libc.abilist
2265 --- glibc-2.3.2/abilist/libc.abilist Thu Jan 1 01:00:00 1970
2266 +++ glibc-2.3.2-200304020432/abilist/libc.abilist Wed Apr 2 06:39:52 2003
2267 @@ -0,0 +1,2231 @@
2268 +GCC_3.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2269 + GCC_3.0 A
2270 + _Unwind_Find_FDE F
2271 + __deregister_frame_info_bases F
2272 + __register_frame_info_bases F
2273 + __register_frame_info_table_bases F
2274 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls
2275 + __fpu_control D 0x2
2276 + vm86 F
2277 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2278 + GLIBC_2.0 A
2279 + _IO_stderr_ D 0x50
2280 + _IO_stdin_ D 0x50
2281 + _IO_stdout_ D 0x50
2282 + __strtoq_internal F
2283 + __strtouq_internal F
2284 + _sys_errlist D 0x1ec
2285 + _sys_siglist D 0x80
2286 + res_init F
2287 + sys_errlist D 0x1ec
2288 + sys_sigabbrev D 0x80
2289 + sys_siglist D 0x80
2290 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2291 +| GLIBC_2.1.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2292 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2293 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2294 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2295 + getaliasbyname_r F
2296 + getaliasent_r F
2297 + getgrent_r F
2298 + getgrgid_r F
2299 + getgrnam_r F
2300 + gethostbyaddr_r F
2301 + gethostbyname2_r F
2302 + gethostbyname_r F
2303 + gethostent_r F
2304 + getnetbyaddr_r F
2305 + getnetbyname_r F
2306 + getnetent_r F
2307 + getprotobyname_r F
2308 + getprotobynumber_r F
2309 + getprotoent_r F
2310 + getpwent_r F
2311 + getpwnam_r F
2312 + getpwuid_r F
2313 + getrpcbyname_r F
2314 + getrpcbynumber_r F
2315 + getrpcent_r F
2316 + getservbyname_r F
2317 + getservbyport_r F
2318 + getservent_r F
2319 + getspent_r F
2320 + getspnam_r F
2321 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2322 +| GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2323 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2324 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2325 +| GLIBC_2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
2326 + _sys_nerr D 0x4
2327 + sys_nerr D 0x4
2328 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2329 +| GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2330 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2331 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2332 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2333 + _IO_do_write F
2334 + _IO_fclose F
2335 + _IO_fdopen F
2336 + _IO_file_attach F
2337 + _IO_file_close_it F
2338 + _IO_file_fopen F
2339 + _IO_file_init F
2340 + _IO_file_overflow F
2341 + _IO_file_seekoff F
2342 + _IO_file_setbuf F
2343 + _IO_file_sync F
2344 + _IO_file_underflow F
2345 + _IO_file_write F
2346 + _IO_file_xsputn F
2347 + _IO_fopen F
2348 + _IO_popen F
2349 + _IO_proc_close F
2350 + _IO_proc_open F
2351 + fclose F
2352 + fdopen F
2353 + fopen F
2354 + pclose F
2355 + popen F
2356 + pthread_attr_init F
2357 + tmpfile F
2358 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2359 +| GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2360 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2361 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2362 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2363 + chown F
2364 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2365 +| GLIBC_2.2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2366 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2367 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2368 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2369 + fnmatch F
2370 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2371 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2372 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2373 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2374 + _IO_fgetpos F
2375 + _IO_fsetpos F
2376 + fgetpos F
2377 + fopencookie F
2378 + fsetpos F
2379 + getrlimit F
2380 + localeconv F
2381 + msgctl F
2382 + semctl F
2383 + setrlimit F
2384 + shmctl F
2385 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2386 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2387 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2388 + re_max_failures D 0x4
2389 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2390 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2391 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2392 +| GLIBC_2.3.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
2393 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2394 + pthread_cond_broadcast F
2395 + pthread_cond_destroy F
2396 + pthread_cond_init F
2397 + pthread_cond_signal F
2398 + pthread_cond_wait F
2399 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2400 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2401 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2402 +| GLIBC_2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
2403 + realpath F
2404 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
2405 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
2406 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
2407 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
2408 + _IO_adjust_column F
2409 + _IO_default_doallocate F
2410 + _IO_default_finish F
2411 + _IO_default_pbackfail F
2412 + _IO_default_uflow F
2413 + _IO_default_xsgetn F
2414 + _IO_default_xsputn F
2415 + _IO_doallocbuf F
2416 + _IO_feof F
2417 + _IO_ferror F
2418 + _IO_fflush F
2419 + _IO_fgets F
2420 + _IO_file_close F
2421 + _IO_file_doallocate F
2422 + _IO_file_open F
2423 + _IO_file_read F
2424 + _IO_file_seek F
2425 + _IO_file_stat F
2426 + _IO_flockfile F
2427 + _IO_flush_all F
2428 + _IO_flush_all_linebuffered F
2429 + _IO_fprintf F
2430 + _IO_fputs F
2431 + _IO_fread F
2432 + _IO_free_backup_area F
2433 + _IO_ftell F
2434 + _IO_ftrylockfile F
2435 + _IO_funlockfile F
2436 + _IO_fwrite F
2437 + _IO_getc F
2438 + _IO_getline F
2439 + _IO_gets F
2440 + _IO_init F
2441 + _IO_init_marker F
2442 + _IO_link_in F
2443 + _IO_marker_delta F
2444 + _IO_marker_difference F
2445 + _IO_padn F
2446 + _IO_peekc_locked F
2447 + _IO_printf F
2448 + _IO_putc F
2449 + _IO_puts F
2450 + _IO_remove_marker F
2451 + _IO_seekmark F
2452 + _IO_seekoff F
2453 + _IO_seekpos F
2454 + _IO_setb F
2455 + _IO_setbuffer F
2456 + _IO_setvbuf F
2457 + _IO_sgetn F
2458 + _IO_sprintf F
2459 + _IO_sputbackc F
2460 + _IO_sscanf F
2461 + _IO_str_init_readonly F
2462 + _IO_str_init_static F
2463 + _IO_str_overflow F
2464 + _IO_str_pbackfail F
2465 + _IO_str_seekoff F
2466 + _IO_str_underflow F
2467 + _IO_sungetc F
2468 + _IO_switch_to_get_mode F
2469 + _IO_un_link F
2470 + _IO_ungetc F
2471 + _IO_unsave_markers F
2472 + _IO_vfprintf F
2473 + _IO_vfscanf F
2474 + _IO_vsprintf F
2475 + __adjtimex F
2476 + __argz_count F
2477 + __argz_next F
2478 + __argz_stringify F
2479 + __assert_fail F
2480 + __assert_perror_fail F
2481 + __bsd_getpgrp F
2482 + __check_rhosts_file D 0x4
2483 + __close F
2484 + __cmsg_nxthdr F
2485 + __connect F
2486 + __ctype_get_mb_cur_max F
2487 + __daylight D 0x4
2488 + __dcgettext F
2489 + __default_morecore F
2490 + __dgettext F
2491 + __dup2 F
2492 + __errno_location F
2493 + __fcntl F
2494 + __ffs F
2495 + __finite F
2496 + __finitef F
2497 + __finitel F
2498 + __fxstat F
2499 + __getdelim F
2500 + __getpagesize F
2501 + __getpgid F
2502 + __getpid F
2503 + __gettimeofday F
2504 + __gmtime_r F
2505 + __h_errno_location F
2506 + __isinf F
2507 + __isinff F
2508 + __isinfl F
2509 + __isnan F
2510 + __isnanf F
2511 + __isnanl F
2512 + __iswctype F
2513 + __ivaliduser F
2514 + __libc_calloc F
2515 + __libc_free F
2516 + __libc_init_first F
2517 + __libc_mallinfo F
2518 + __libc_malloc F
2519 + __libc_mallopt F
2520 + __libc_memalign F
2521 + __libc_pvalloc F
2522 + __libc_realloc F
2523 + __libc_start_main F
2524 + __libc_valloc F
2525 + __lseek F
2526 + __lxstat F
2527 + __mbrlen F
2528 + __mbrtowc F
2529 + __mempcpy F
2530 + __monstartup F
2531 + __nss_configure_lookup F
2532 + __nss_database_lookup F
2533 + __nss_group_lookup F
2534 + __nss_hosts_lookup F
2535 + __nss_next F
2536 + __nss_passwd_lookup F
2537 + __open F
2538 + __overflow F
2539 + __pipe F
2540 + __printf_fp F
2541 + __profile_frequency F
2542 + __read F
2543 + __res_randomid F
2544 + __sbrk F
2545 + __sched_get_priority_max F
2546 + __sched_get_priority_min F
2547 + __sched_getparam F
2548 + __sched_getscheduler F
2549 + __sched_setscheduler F
2550 + __sched_yield F
2551 + __secure_getenv F
2552 + __select F
2553 + __send F
2554 + __setpgid F
2555 + __sigaction F
2556 + __sigaddset F
2557 + __sigdelset F
2558 + __sigismember F
2559 + __sigpause F
2560 + __sigsetjmp F
2561 + __stpcpy F
2562 + __stpncpy F
2563 + __strcasecmp F
2564 + __strdup F
2565 + __strerror_r F
2566 + __strtod_internal F
2567 + __strtof_internal F
2568 + __strtok_r F
2569 + __strtol_internal F
2570 + __strtold_internal F
2571 + __strtoll_internal F
2572 + __strtoul_internal F
2573 + __strtoull_internal F
2574 + __sysv_signal F
2575 + __uflow F
2576 + __underflow F
2577 + __vfscanf F
2578 + __vsnprintf F
2579 + __vsscanf F
2580 + __wait F
2581 + __waitpid F
2582 + __wcstod_internal F
2583 + __wcstof_internal F
2584 + __wcstol_internal F
2585 + __wcstold_internal F
2586 + __wcstoll_internal F
2587 + __wcstoul_internal F
2588 + __wcstoull_internal F
2589 + __write F
2590 + __xmknod F
2591 + __xpg_basename F
2592 + __xstat F
2593 + _exit F
2594 + _libc_intl_domainname D 0x5
2595 + _longjmp F
2596 + _mcleanup F
2597 + _mcount F
2598 + _nl_msg_cat_cntr D 0x4
2599 + _obstack_allocated_p F
2600 + _obstack_begin F
2601 + _obstack_begin_1 F
2602 + _obstack_free F
2603 + _obstack_memory_used F
2604 + _obstack_newchunk F
2605 + _rpc_dtablesize F
2606 + _seterr_reply F
2607 + _setjmp F
2608 + _tolower F
2609 + _toupper F
2610 + a64l F
2611 + abort F
2612 + abs F
2613 + accept F
2614 + access F
2615 + acct F
2616 + addmntent F
2617 + adjtime F
2618 + adjtimex F
2619 + advance F
2620 + alarm F
2621 + alphasort F
2622 + argz_add F
2623 + argz_add_sep F
2624 + argz_append F
2625 + argz_count F
2626 + argz_create F
2627 + argz_create_sep F
2628 + argz_delete F
2629 + argz_extract F
2630 + argz_insert F
2631 + argz_next F
2632 + argz_replace F
2633 + argz_stringify F
2634 + asctime F
2635 + asctime_r F
2636 + asprintf F
2637 + atof F
2638 + atoi F
2639 + atol F
2640 + atoll F
2641 + authnone_create F
2642 + authunix_create F
2643 + authunix_create_default F
2644 + basename F
2645 + bcmp F
2646 + bcopy F
2647 + bdflush F
2648 + bind F
2649 + bindresvport F
2650 + bindtextdomain F
2651 + brk F
2652 + bsd_signal F
2653 + bsearch F
2654 + btowc F
2655 + bzero F
2656 + calloc F
2657 + callrpc F
2658 + canonicalize_file_name F
2659 + catclose F
2660 + catgets F
2661 + catopen F
2662 + cfgetispeed F
2663 + cfgetospeed F
2664 + cfmakeraw F
2665 + cfree F
2666 + cfsetispeed F
2667 + cfsetospeed F
2668 + cfsetspeed F
2669 + chdir F
2670 + chflags F
2671 + chmod F
2672 + chroot F
2673 + clearenv F
2674 + clearerr F
2675 + clearerr_unlocked F
2676 + clnt_broadcast F
2677 + clnt_create F
2678 + clnt_pcreateerror F
2679 + clnt_perrno F
2680 + clnt_perror F
2681 + clnt_spcreateerror F
2682 + clnt_sperrno F
2683 + clnt_sperror F
2684 + clntraw_create F
2685 + clnttcp_create F
2686 + clntudp_bufcreate F
2687 + clntudp_create F
2688 + clock F
2689 + close F
2690 + closedir F
2691 + closelog F
2692 + confstr F
2693 + connect F
2694 + copysign F
2695 + copysignf F
2696 + copysignl F
2697 + creat F
2698 + create_module F
2699 + ctermid F
2700 + ctime F
2701 + ctime_r F
2702 + cuserid F
2703 + daemon F
2704 + daylight D 0x4
2705 + dcgettext F
2706 + delete_module F
2707 + dgettext F
2708 + difftime F
2709 + dirfd F
2710 + dirname F
2711 + div F
2712 + dprintf F
2713 + drand48 F
2714 + drand48_r F
2715 + dup F
2716 + dup2 F
2717 + dysize F
2718 + ecvt F
2719 + ecvt_r F
2720 + endaliasent F
2721 + endfsent F
2722 + endgrent F
2723 + endhostent F
2724 + endmntent F
2725 + endnetent F
2726 + endnetgrent F
2727 + endprotoent F
2728 + endpwent F
2729 + endrpcent F
2730 + endservent F
2731 + endspent F
2732 + endttyent F
2733 + endusershell F
2734 + endutent F
2735 + envz_add F
2736 + envz_entry F
2737 + envz_get F
2738 + envz_merge F
2739 + envz_remove F
2740 + envz_strip F
2741 + erand48 F
2742 + erand48_r F
2743 + err F
2744 + error F
2745 + error_at_line F
2746 + error_message_count D 0x4
2747 + error_one_per_line D 0x4
2748 + errx F
2749 + ether_aton F
2750 + ether_aton_r F
2751 + ether_hostton F
2752 + ether_line F
2753 + ether_ntoa F
2754 + ether_ntoa_r F
2755 + ether_ntohost F
2756 + euidaccess F
2757 + execl F
2758 + execle F
2759 + execlp F
2760 + execv F
2761 + execve F
2762 + execvp F
2763 + exit F
2764 + fchdir F
2765 + fchflags F
2766 + fchmod F
2767 + fchown F
2768 + fcloseall F
2769 + fcntl F
2770 + fcvt F
2771 + fcvt_r F
2772 + fdatasync F
2773 + feof F
2774 + feof_unlocked F
2775 + ferror F
2776 + ferror_unlocked F
2777 + fexecve F
2778 + fflush F
2779 + fflush_unlocked F
2780 + ffs F
2781 + fgetc F
2782 + fgetgrent F
2783 + fgetgrent_r F
2784 + fgetpwent F
2785 + fgetpwent_r F
2786 + fgets F
2787 + fgetspent F
2788 + fgetspent_r F
2789 + fileno F
2790 + fileno_unlocked F
2791 + finite F
2792 + finitef F
2793 + finitel F
2794 + flock F
2795 + flockfile F
2796 + fork F
2797 + fpathconf F
2798 + fprintf F
2799 + fputc F
2800 + fputc_unlocked F
2801 + fputs F
2802 + fread F
2803 + free F
2804 + freeaddrinfo F
2805 + freopen F
2806 + frexp F
2807 + frexpf F
2808 + frexpl F
2809 + fscanf F
2810 + fseek F
2811 + fstatfs F
2812 + fsync F
2813 + ftell F
2814 + ftime F
2815 + ftok F
2816 + ftruncate F
2817 + ftrylockfile F
2818 + fts_children F
2819 + fts_close F
2820 + fts_open F
2821 + fts_read F
2822 + fts_set F
2823 + ftw F
2824 + funlockfile F
2825 + fwrite F
2826 + gcvt F
2827 + get_avphys_pages F
2828 + get_current_dir_name F
2829 + get_kernel_syms F
2830 + get_myaddress F
2831 + get_nprocs F
2832 + get_nprocs_conf F
2833 + get_phys_pages F
2834 + getaddrinfo F
2835 + getaliasbyname F
2836 + getaliasent F
2837 + getc F
2838 + getc_unlocked F
2839 + getchar F
2840 + getchar_unlocked F
2841 + getcwd F
2842 + getdelim F
2843 + getdirentries F
2844 + getdomainname F
2845 + getdtablesize F
2846 + getegid F
2847 + getenv F
2848 + geteuid F
2849 + getfsent F
2850 + getfsfile F
2851 + getfsspec F
2852 + getgid F
2853 + getgrent F
2854 + getgrgid F
2855 + getgrnam F
2856 + getgroups F
2857 + gethostbyaddr F
2858 + gethostbyname F
2859 + gethostbyname2 F
2860 + gethostent F
2861 + gethostid F
2862 + gethostname F
2863 + getitimer F
2864 + getline F
2865 + getlogin F
2866 + getlogin_r F
2867 + getmntent F
2868 + getmntent_r F
2869 + getnetbyaddr F
2870 + getnetbyname F
2871 + getnetent F
2872 + getnetgrent F
2873 + getnetgrent_r F
2874 + getopt F
2875 + getopt_long F
2876 + getopt_long_only F
2877 + getpagesize F
2878 + getpass F
2879 + getpeername F
2880 + getpgid F
2881 + getpgrp F
2882 + getpid F
2883 + getppid F
2884 + getpriority F
2885 + getprotobyname F
2886 + getprotobynumber F
2887 + getprotoent F
2888 + getpublickey F
2889 + getpw F
2890 + getpwent F
2891 + getpwnam F
2892 + getpwuid F
2893 + getresgid F
2894 + getresuid F
2895 + getrpcbyname F
2896 + getrpcbynumber F
2897 + getrpcent F
2898 + getrpcport F
2899 + getrusage F
2900 + gets F
2901 + getsecretkey F
2902 + getservbyname F
2903 + getservbyport F
2904 + getservent F
2905 + getsid F
2906 + getsockname F
2907 + getsockopt F
2908 + getspent F
2909 + getspnam F
2910 + getsubopt F
2911 + gettext F
2912 + gettimeofday F
2913 + getttyent F
2914 + getttynam F
2915 + getuid F
2916 + getusershell F
2917 + getutent F
2918 + getutent_r F
2919 + getutid F
2920 + getutid_r F
2921 + getutline F
2922 + getutline_r F
2923 + getw F
2924 + getwd F
2925 + glob F
2926 + glob_pattern_p F
2927 + globfree F
2928 + gmtime F
2929 + gmtime_r F
2930 + group_member F
2931 + gsignal F
2932 + gtty F
2933 + h_nerr D 0x4
2934 + hasmntopt F
2935 + hcreate F
2936 + hcreate_r F
2937 + hdestroy F
2938 + hdestroy_r F
2939 + herror F
2940 + hsearch F
2941 + hsearch_r F
2942 + hstrerror F
2943 + htonl F
2944 + htons F
2945 + index F
2946 + inet_addr F
2947 + inet_aton F
2948 + inet_lnaof F
2949 + inet_makeaddr F
2950 + inet_netof F
2951 + inet_network F
2952 + inet_nsap_addr F
2953 + inet_nsap_ntoa F
2954 + inet_ntoa F
2955 + inet_ntop F
2956 + inet_pton F
2957 + init_module F
2958 + initgroups F
2959 + initstate F
2960 + initstate_r F
2961 + innetgr F
2962 + insque F
2963 + ioctl F
2964 + iruserok F
2965 + isalnum F
2966 + isalpha F
2967 + isascii F
2968 + isatty F
2969 + isblank F
2970 + iscntrl F
2971 + isdigit F
2972 + isfdtype F
2973 + isgraph F
2974 + isinf F
2975 + isinff F
2976 + isinfl F
2977 + islower F
2978 + isnan F
2979 + isnanf F
2980 + isnanl F
2981 + isprint F
2982 + ispunct F
2983 + isspace F
2984 + isupper F
2985 + iswalnum F
2986 + iswalpha F
2987 + iswcntrl F
2988 + iswctype F
2989 + iswdigit F
2990 + iswgraph F
2991 + iswlower F
2992 + iswprint F
2993 + iswpunct F
2994 + iswspace F
2995 + iswupper F
2996 + iswxdigit F
2997 + isxdigit F
2998 + jrand48 F
2999 + jrand48_r F
3000 + kill F
3001 + killpg F
3002 + klogctl F
3003 + l64a F
3004 + labs F
3005 + lchown F
3006 + lckpwdf F
3007 + lcong48 F
3008 + lcong48_r F
3009 + ldexp F
3010 + ldexpf F
3011 + ldexpl F
3012 + ldiv F
3013 + lfind F
3014 + link F
3015 + listen F
3016 + llabs F
3017 + lldiv F
3018 + llseek F
3019 + localtime F
3020 + localtime_r F
3021 + lockf F
3022 + longjmp F
3023 + lrand48 F
3024 + lrand48_r F
3025 + lsearch F
3026 + lseek F
3027 + madvise F
3028 + mallinfo F
3029 + malloc F
3030 + malloc_get_state F
3031 + malloc_set_state F
3032 + malloc_stats F
3033 + malloc_trim F
3034 + malloc_usable_size F
3035 + mallopt F
3036 + mblen F
3037 + mbrlen F
3038 + mbrtowc F
3039 + mbsinit F
3040 + mbsnrtowcs F
3041 + mbsrtowcs F
3042 + mbstowcs F
3043 + mbtowc F
3044 + mcheck F
3045 + memalign F
3046 + memccpy F
3047 + memchr F
3048 + memcmp F
3049 + memcpy F
3050 + memfrob F
3051 + memmem F
3052 + memmove F
3053 + memset F
3054 + mkdir F
3055 + mkfifo F
3056 + mkstemp F
3057 + mktemp F
3058 + mktime F
3059 + mlock F
3060 + mlockall F
3061 + mmap F
3062 + modf F
3063 + modff F
3064 + modfl F
3065 + monstartup F
3066 + mount F
3067 + mprobe F
3068 + mprotect F
3069 + mrand48 F
3070 + mrand48_r F
3071 + mremap F
3072 + msgget F
3073 + msgrcv F
3074 + msgsnd F
3075 + msync F
3076 + mtrace F
3077 + munlock F
3078 + munlockall F
3079 + munmap F
3080 + muntrace F
3081 + nanosleep F
3082 + nfsservctl F
3083 + nice F
3084 + nl_langinfo F
3085 + nrand48 F
3086 + nrand48_r F
3087 + ntohl F
3088 + ntohs F
3089 + obstack_exit_failure D 0x4
3090 + obstack_free F
3091 + obstack_printf F
3092 + obstack_vprintf F
3093 + on_exit F
3094 + open F
3095 + open_memstream F
3096 + opendir F
3097 + openlog F
3098 + opterr D 0x4
3099 + optind D 0x4
3100 + optopt D 0x4
3101 + parse_printf_format F
3102 + pathconf F
3103 + pause F
3104 + perror F
3105 + personality F
3106 + pipe F
3107 + pmap_getmaps F
3108 + pmap_getport F
3109 + pmap_rmtcall F
3110 + pmap_set F
3111 + pmap_unset F
3112 + poll F
3113 + prctl F
3114 + printf F
3115 + profil F
3116 + pselect F
3117 + psignal F
3118 + pthread_attr_destroy F
3119 + pthread_attr_getdetachstate F
3120 + pthread_attr_getinheritsched F
3121 + pthread_attr_getschedparam F
3122 + pthread_attr_getschedpolicy F
3123 + pthread_attr_getscope F
3124 + pthread_attr_setdetachstate F
3125 + pthread_attr_setinheritsched F
3126 + pthread_attr_setschedparam F
3127 + pthread_attr_setschedpolicy F
3128 + pthread_attr_setscope F
3129 + pthread_condattr_destroy F
3130 + pthread_condattr_init F
3131 + pthread_equal F
3132 + pthread_exit F
3133 + pthread_getschedparam F
3134 + pthread_mutex_destroy F
3135 + pthread_mutex_init F
3136 + pthread_mutex_lock F
3137 + pthread_mutex_unlock F
3138 + pthread_self F
3139 + pthread_setcancelstate F
3140 + pthread_setcanceltype F
3141 + pthread_setschedparam F
3142 + ptrace F
3143 + putc F
3144 + putc_unlocked F
3145 + putchar F
3146 + putchar_unlocked F
3147 + putenv F
3148 + putpwent F
3149 + puts F
3150 + putspent F
3151 + pututline F
3152 + putw F
3153 + pvalloc F
3154 + qecvt F
3155 + qecvt_r F
3156 + qfcvt F
3157 + qfcvt_r F
3158 + qgcvt F
3159 + qsort F
3160 + query_module F
3161 + quotactl F
3162 + raise F
3163 + rand F
3164 + rand_r F
3165 + random F
3166 + random_r F
3167 + rcmd F
3168 + re_comp F
3169 + re_compile_fastmap F
3170 + re_compile_pattern F
3171 + re_exec F
3172 + re_match F
3173 + re_match_2 F
3174 + re_search F
3175 + re_search_2 F
3176 + re_set_registers F
3177 + re_set_syntax F
3178 + read F
3179 + readdir F
3180 + readdir_r F
3181 + readlink F
3182 + readv F
3183 + realloc F
3184 + reboot F
3185 + recv F
3186 + recvfrom F
3187 + recvmsg F
3188 + regcomp F
3189 + regerror F
3190 + regexec F
3191 + regfree F
3192 + register_printf_function F
3193 + registerrpc F
3194 + remove F
3195 + remque F
3196 + rename F
3197 + revoke F
3198 + rewind F
3199 + rewinddir F
3200 + rexec F
3201 + rexecoptions D 0x4
3202 + rindex F
3203 + rmdir F
3204 + rpmatch F
3205 + rresvport F
3206 + ruserok F
3207 + ruserpass F
3208 + sbrk F
3209 + scalbn F
3210 + scalbnf F
3211 + scalbnl F
3212 + scandir F
3213 + scanf F
3214 + sched_get_priority_max F
3215 + sched_get_priority_min F
3216 + sched_getparam F
3217 + sched_getscheduler F
3218 + sched_rr_get_interval F
3219 + sched_setparam F
3220 + sched_setscheduler F
3221 + sched_yield F
3222 + seed48 F
3223 + seed48_r F
3224 + seekdir F
3225 + select F
3226 + semget F
3227 + semop F
3228 + send F
3229 + sendmsg F
3230 + sendto F
3231 + setaliasent F
3232 + setbuf F
3233 + setbuffer F
3234 + setcontext F
3235 + setdomainname F
3236 + setegid F
3237 + setenv F
3238 + seteuid F
3239 + setfsent F
3240 + setfsgid F
3241 + setfsuid F
3242 + setgid F
3243 + setgrent F
3244 + setgroups F
3245 + sethostent F
3246 + sethostid F
3247 + sethostname F
3248 + setitimer F
3249 + setjmp F
3250 + setlinebuf F
3251 + setlocale F
3252 + setlogin F
3253 + setlogmask F
3254 + setmntent F
3255 + setnetent F
3256 + setnetgrent F
3257 + setpgid F
3258 + setpgrp F
3259 + setpriority F
3260 + setprotoent F
3261 + setpwent F
3262 + setregid F
3263 + setresgid F
3264 + setresuid F
3265 + setreuid F
3266 + setrpcent F
3267 + setservent F
3268 + setsid F
3269 + setsockopt F
3270 + setspent F
3271 + setstate F
3272 + setstate_r F
3273 + settimeofday F
3274 + setttyent F
3275 + setuid F
3276 + setusershell F
3277 + setutent F
3278 + setvbuf F
3279 + sgetspent F
3280 + sgetspent_r F
3281 + shmat F
3282 + shmdt F
3283 + shmget F
3284 + shutdown F
3285 + sigaction F
3286 + sigaddset F
3287 + sigaltstack F
3288 + sigandset F
3289 + sigblock F
3290 + sigdelset F
3291 + sigemptyset F
3292 + sigfillset F
3293 + siggetmask F
3294 + siginterrupt F
3295 + sigisemptyset F
3296 + sigismember F
3297 + siglongjmp F
3298 + signal F
3299 + sigorset F
3300 + sigpause F
3301 + sigpending F
3302 + sigprocmask F
3303 + sigreturn F
3304 + sigsetmask F
3305 + sigstack F
3306 + sigsuspend F
3307 + sigvec F
3308 + sigwait F
3309 + sleep F
3310 + snprintf F
3311 + socket F
3312 + socketpair F
3313 + sprintf F
3314 + srand F
3315 + srand48 F
3316 + srand48_r F
3317 + srandom F
3318 + srandom_r F
3319 + sscanf F
3320 + ssignal F
3321 + sstk F
3322 + statfs F
3323 + step F
3324 + stime F
3325 + stpcpy F
3326 + stpncpy F
3327 + strcasecmp F
3328 + strcat F
3329 + strchr F
3330 + strcmp F
3331 + strcoll F
3332 + strcpy F
3333 + strcspn F
3334 + strdup F
3335 + strerror F
3336 + strerror_r F
3337 + strfmon F
3338 + strfry F
3339 + strftime F
3340 + strlen F
3341 + strncasecmp F
3342 + strncat F
3343 + strncmp F
3344 + strncpy F
3345 + strndup F
3346 + strnlen F
3347 + strpbrk F
3348 + strptime F
3349 + strrchr F
3350 + strsep F
3351 + strsignal F
3352 + strspn F
3353 + strstr F
3354 + strtod F
3355 + strtof F
3356 + strtok F
3357 + strtok_r F
3358 + strtol F
3359 + strtold F
3360 + strtoll F
3361 + strtoq F
3362 + strtoul F
3363 + strtoull F
3364 + strtouq F
3365 + strxfrm F
3366 + stty F
3367 + svc_exit F
3368 + svc_fdset D 0x80
3369 + svc_getreq F
3370 + svc_getreqset F
3371 + svc_register F
3372 + svc_run F
3373 + svc_sendreply F
3374 + svc_unregister F
3375 + svcerr_auth F
3376 + svcerr_decode F
3377 + svcerr_noproc F
3378 + svcerr_noprog F
3379 + svcerr_progvers F
3380 + svcerr_systemerr F
3381 + svcerr_weakauth F
3382 + svcfd_create F
3383 + svcraw_create F
3384 + svctcp_create F
3385 + svcudp_bufcreate F
3386 + svcudp_create F
3387 + svcudp_enablecache F
3388 + swab F
3389 + swapoff F
3390 + swapon F
3391 + symlink F
3392 + sync F
3393 + syscall F
3394 + sysconf F
3395 + sysctl F
3396 + sysinfo F
3397 + syslog F
3398 + system F
3399 + tcdrain F
3400 + tcflow F
3401 + tcflush F
3402 + tcgetattr F
3403 + tcgetpgrp F
3404 + tcsendbreak F
3405 + tcsetattr F
3406 + tcsetpgrp F
3407 + tdelete F
3408 + telldir F
3409 + tempnam F
3410 + textdomain F
3411 + tfind F
3412 + time F
3413 + timegm F
3414 + timelocal F
3415 + times F
3416 + tmpnam F
3417 + tmpnam_r F
3418 + toascii F
3419 + tolower F
3420 + toupper F
3421 + towctrans F
3422 + towlower F
3423 + towupper F
3424 + tr_break F
3425 + truncate F
3426 + tsearch F
3427 + ttyname F
3428 + ttyname_r F
3429 + ttyslot F
3430 + twalk F
3431 + tzset F
3432 + ualarm F
3433 + ulckpwdf F
3434 + ulimit F
3435 + umask F
3436 + umount F
3437 + uname F
3438 + ungetc F
3439 + unlink F
3440 + unsetenv F
3441 + updwtmp F
3442 + uselib F
3443 + usleep F
3444 + ustat F
3445 + utime F
3446 + utimes F
3447 + utmpname F
3448 + valloc F
3449 + vasprintf F
3450 + vdprintf F
3451 + verr F
3452 + verrx F
3453 + vfork F
3454 + vfprintf F
3455 + vfscanf F
3456 + vhangup F
3457 + vlimit F
3458 + vprintf F
3459 + vscanf F
3460 + vsnprintf F
3461 + vsprintf F
3462 + vsscanf F
3463 + vsyslog F
3464 + vtimes F
3465 + vwarn F
3466 + vwarnx F
3467 + wait F
3468 + wait3 F
3469 + wait4 F
3470 + waitpid F
3471 + warn F
3472 + warnx F
3473 + wcpcpy F
3474 + wcpncpy F
3475 + wcrtomb F
3476 + wcscat F
3477 + wcschr F
3478 + wcscmp F
3479 + wcscoll F
3480 + wcscpy F
3481 + wcscspn F
3482 + wcsdup F
3483 + wcslen F
3484 + wcsncat F
3485 + wcsncmp F
3486 + wcsncpy F
3487 + wcsnrtombs F
3488 + wcspbrk F
3489 + wcsrchr F
3490 + wcsrtombs F
3491 + wcsspn F
3492 + wcsstr F
3493 + wcstod F
3494 + wcstof F
3495 + wcstok F
3496 + wcstol F
3497 + wcstold F
3498 + wcstombs F
3499 + wcstoq F
3500 + wcstoul F
3501 + wcstouq F
3502 + wcswidth F
3503 + wcsxfrm F
3504 + wctob F
3505 + wctomb F
3506 + wctrans F
3507 + wctype F
3508 + wcwidth F
3509 + wmemchr F
3510 + wmemcmp F
3511 + wmemcpy F
3512 + wmemmove F
3513 + wmemset F
3514 + write F
3515 + writev F
3516 + xdr_accepted_reply F
3517 + xdr_array F
3518 + xdr_authunix_parms F
3519 + xdr_bool F
3520 + xdr_bytes F
3521 + xdr_callhdr F
3522 + xdr_callmsg F
3523 + xdr_char F
3524 + xdr_cryptkeyarg F
3525 + xdr_cryptkeyarg2 F
3526 + xdr_cryptkeyres F
3527 + xdr_des_block F
3528 + xdr_double F
3529 + xdr_enum F
3530 + xdr_float F
3531 + xdr_free F
3532 + xdr_int F
3533 + xdr_key_netstarg F
3534 + xdr_key_netstres F
3535 + xdr_keybuf F
3536 + xdr_keystatus F
3537 + xdr_long F
3538 + xdr_netobj F
3539 + xdr_opaque F
3540 + xdr_opaque_auth F
3541 + xdr_pmap F
3542 + xdr_pmaplist F
3543 + xdr_pointer F
3544 + xdr_reference F
3545 + xdr_rejected_reply F
3546 + xdr_replymsg F
3547 + xdr_rmtcall_args F
3548 + xdr_rmtcallres F
3549 + xdr_short F
3550 + xdr_string F
3551 + xdr_u_char F
3552 + xdr_u_int F
3553 + xdr_u_long F
3554 + xdr_u_short F
3555 + xdr_union F
3556 + xdr_vector F
3557 + xdr_void F
3558 + xdr_wrapstring F
3559 + xdrmem_create F
3560 + xdrrec_create F
3561 + xdrrec_endofrecord F
3562 + xdrrec_eof F
3563 + xdrrec_skiprecord F
3564 + xdrstdio_create F
3565 + xencrypt F
3566 + xprt_register F
3567 + xprt_unregister F
3568 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3569 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3570 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls
3571 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3572 + __fork F
3573 + _nl_default_dirname D 0x12
3574 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3575 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3576 +| GLIBC_2.2 s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3577 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3578 + __bzero F
3579 + __clone F
3580 + clone F
3581 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3582 +| GLIBC_2.2 ia64-.*-linux.*/tls
3583 + __divdi3 F
3584 + __moddi3 F
3585 + __udivdi3 F
3586 + __umoddi3 F
3587 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3588 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3589 + atexit F
3590 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3591 +| GLIBC_2.2 s390x-.*-linux.*/tls
3592 + __deregister_frame F
3593 + __frame_state_for F
3594 + __register_frame F
3595 + __register_frame_info_table F
3596 + __register_frame_table F
3597 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3598 +| GLIBC_2.2 s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3599 + __deregister_frame_info F
3600 + __register_frame_info F
3601 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3602 +| GLIBC_2.2 sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3603 + _IO_file_jumps D 0x54
3604 + _IO_list_all D 0x4
3605 + __after_morecore_hook D 0x4
3606 + __ctype32_b D 0x4
3607 + __ctype_b D 0x4
3608 + __ctype_tolower D 0x4
3609 + __ctype_toupper D 0x4
3610 + __curbrk D 0x4
3611 + __environ D 0x4
3612 + __free_hook D 0x4
3613 + __malloc_hook D 0x4
3614 + __malloc_initialize_hook D 0x4
3615 + __memalign_hook D 0x4
3616 + __morecore D 0x4
3617 + __progname D 0x4
3618 + __progname_full D 0x4
3619 + __rcmd_errstr D 0x4
3620 + __realloc_hook D 0x4
3621 + __timezone D 0x4
3622 + __tzname D 0x8
3623 + _environ D 0x4
3624 + _nl_domain_bindings D 0x4
3625 + _null_auth D 0xc
3626 + _obstack D 0x4
3627 + environ D 0x4
3628 + error_print_progname D 0x4
3629 + h_errlist D 0x14
3630 + loc1 D 0x4
3631 + loc2 D 0x4
3632 + locs D 0x4
3633 + mallwatch D 0x4
3634 + obstack_alloc_failed_handler D 0x4
3635 + optarg D 0x4
3636 + program_invocation_name D 0x4
3637 + program_invocation_short_name D 0x4
3638 + re_syntax_options D 0x4
3639 + rpc_createerr D 0x10
3640 + stderr D 0x4
3641 + stdin D 0x4
3642 + stdout D 0x4
3643 + svcauthdes_stats D 0xc
3644 + timezone D 0x4
3645 + tzname D 0x8
3646 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls s390-.*-linux.*/tls
3647 + ___brk_addr D 0x4
3648 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls s390-.*-linux.*/tls
3649 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3650 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3651 + mcount F
3652 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls
3653 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3654 +| GLIBC_2.2 ia64-.*-linux.*/tls
3655 + ioperm F
3656 + iopl F
3657 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3658 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3659 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls
3660 + _errno D 0x4
3661 + _h_errno D 0x4
3662 + errno D 0x4
3663 + h_errno D 0x4
3664 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3665 +| GLIBC_2.2 sh[34].*-.*-linux.*/notls
3666 + _res D 0x200
3667 +GLIBC_2.0 m68.*-.*-linux.*/notls
3668 + _res D 0x1fe
3669 + cacheflush F
3670 +GLIBC_2.0 m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3671 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3672 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3673 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3674 + __fpu_control D 0x4
3675 +GLIBC_2.0 powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls
3676 + __ashldi3 F
3677 + __ashrdi3 F
3678 + __cmpdi2 F
3679 + __fixdfdi F
3680 + __fixsfdi F
3681 + __fixunsdfdi F
3682 + __fixunssfdi F
3683 + __floatdidf F
3684 + __floatdisf F
3685 + __lshrdi3 F
3686 + __ucmpdi2 F
3687 +GLIBC_2.1.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls
3688 + __memcpy_by2 F
3689 + __memcpy_by4 F
3690 + __memcpy_g F
3691 + __mempcpy_by2 F
3692 + __mempcpy_by4 F
3693 + __mempcpy_byn F
3694 + __memset_ccn_by2 F
3695 + __memset_ccn_by4 F
3696 + __memset_gcn_by2 F
3697 + __memset_gcn_by4 F
3698 + __stpcpy_g F
3699 + __strcat_c F
3700 + __strcat_g F
3701 + __strchr_c F
3702 + __strchr_g F
3703 + __strchrnul_c F
3704 + __strchrnul_g F
3705 + __strcmp_gg F
3706 + __strcpy_g F
3707 + __strcspn_cg F
3708 + __strcspn_g F
3709 + __strlen_g F
3710 + __strncat_g F
3711 + __strncmp_g F
3712 + __strncpy_by2 F
3713 + __strncpy_by4 F
3714 + __strncpy_byn F
3715 + __strncpy_gg F
3716 + __strpbrk_cg F
3717 + __strpbrk_g F
3718 + __strrchr_c F
3719 + __strrchr_g F
3720 + __strspn_cg F
3721 + __strspn_g F
3722 + __strstr_cg F
3723 + __strstr_g F
3724 +GLIBC_2.1.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3725 + GLIBC_2.1.1 A
3726 +GLIBC_2.1.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3727 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3728 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3729 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3730 + _Exit F
3731 + __mempcpy_small F
3732 + __stpcpy_small F
3733 + __strcpy_small F
3734 + __strcspn_c1 F
3735 + __strcspn_c2 F
3736 + __strcspn_c3 F
3737 + __strpbrk_c2 F
3738 + __strpbrk_c3 F
3739 + __strsep_1c F
3740 + __strsep_2c F
3741 + __strsep_3c F
3742 + __strsep_g F
3743 + __strspn_c1 F
3744 + __strspn_c2 F
3745 + __strspn_c3 F
3746 + __strtok_r_1c F
3747 + __strverscmp F
3748 + getutmp F
3749 + getutmpx F
3750 + imaxabs F
3751 + imaxdiv F
3752 + strchrnul F
3753 + xdr_hyper F
3754 + xdr_int64_t F
3755 + xdr_longlong_t F
3756 + xdr_u_hyper F
3757 + xdr_u_longlong_t F
3758 + xdr_uint64_t F
3759 +GLIBC_2.1.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3760 + GLIBC_2.1.2 A
3761 +GLIBC_2.1.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3762 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3763 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3764 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3765 + __vfork F
3766 +GLIBC_2.1.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3767 + GLIBC_2.1.3 A
3768 +GLIBC_2.1.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3769 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3770 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3771 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3772 + __cxa_atexit F
3773 + __cxa_finalize F
3774 + __sigsuspend F
3775 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls
3776 + scalbln F
3777 + scalblnf F
3778 + scalblnl F
3779 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3780 + GLIBC_2.1 A
3781 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3782 +| GLIBC_2.2.2 ia64-.*-linux.*/tls
3783 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3784 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3785 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3786 + wordexp F
3787 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3788 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3789 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3790 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3791 + _IO_fgetpos64 F
3792 + _IO_fsetpos64 F
3793 + __fxstat64 F
3794 + __lxstat64 F
3795 + __xstat64 F
3796 + fgetpos64 F
3797 + fsetpos64 F
3798 + getrlimit64 F
3799 + readdir64 F
3800 + readdir64_r F
3801 + scandir64 F
3802 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3803 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3804 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3805 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3806 + glob64 F
3807 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3808 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3809 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3810 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3811 + alphasort64 F
3812 + versionsort64 F
3813 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
3814 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
3815 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
3816 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
3817 + _IO_file_finish F
3818 + _IO_getline_info F
3819 + __asprintf F
3820 + __backtrace F
3821 + __backtrace_symbols F
3822 + __backtrace_symbols_fd F
3823 + __duplocale F
3824 + __freelocale F
3825 + __isalnum_l F
3826 + __isalpha_l F
3827 + __isascii_l F
3828 + __isblank_l F
3829 + __iscntrl_l F
3830 + __isdigit_l F
3831 + __isgraph_l F
3832 + __islower_l F
3833 + __isprint_l F
3834 + __ispunct_l F
3835 + __isspace_l F
3836 + __isupper_l F
3837 + __iswalnum_l F
3838 + __iswalpha_l F
3839 + __iswblank_l F
3840 + __iswcntrl_l F
3841 + __iswctype_l F
3842 + __iswdigit_l F
3843 + __iswgraph_l F
3844 + __iswlower_l F
3845 + __iswprint_l F
3846 + __iswpunct_l F
3847 + __iswspace_l F
3848 + __iswupper_l F
3849 + __iswxdigit_l F
3850 + __isxdigit_l F
3851 + __libc_allocate_rtsig F
3852 + __libc_current_sigrtmax F
3853 + __libc_current_sigrtmin F
3854 + __libc_freeres F
3855 + __libc_sa_len F
3856 + __newlocale F
3857 + __poll F
3858 + __pread64 F
3859 + __pwrite64 F
3860 + __rawmemchr F
3861 + __signbit F
3862 + __signbitf F
3863 + __strcasecmp_l F
3864 + __strcasestr F
3865 + __strcoll_l F
3866 + __strfmon_l F
3867 + __strncasecmp_l F
3868 + __strtod_l F
3869 + __strtof_l F
3870 + __strtol_l F
3871 + __strtold_l F
3872 + __strtoll_l F
3873 + __strtoul_l F
3874 + __strtoull_l F
3875 + __strxfrm_l F
3876 + __toascii_l F
3877 + __tolower_l F
3878 + __toupper_l F
3879 + __towctrans F
3880 + __towctrans_l F
3881 + __towlower_l F
3882 + __towupper_l F
3883 + __wcscasecmp_l F
3884 + __wcscoll_l F
3885 + __wcsncasecmp_l F
3886 + __wcstod_l F
3887 + __wcstof_l F
3888 + __wcstol_l F
3889 + __wcstold_l F
3890 + __wcstoll_l F
3891 + __wcstoul_l F
3892 + __wcstoull_l F
3893 + __wcsxfrm_l F
3894 + __wctype_l F
3895 + _argp_unlock_xxx F
3896 + _authenticate F
3897 + _dl_mcount_wrapper F
3898 + _dl_mcount_wrapper_check F
3899 + addseverity F
3900 + argp_err_exit_status D 0x4
3901 + argp_error F
3902 + argp_failure F
3903 + argp_help F
3904 + argp_parse F
3905 + argp_state_help F
3906 + argp_usage F
3907 + authdes_create F
3908 + authdes_getucred F
3909 + authdes_pk_create F
3910 + backtrace F
3911 + backtrace_symbols F
3912 + backtrace_symbols_fd F
3913 + capget F
3914 + capset F
3915 + cbc_crypt F
3916 + clntunix_create F
3917 + creat64 F
3918 + des_setparity F
3919 + ecb_crypt F
3920 + endutxent F
3921 + fattach F
3922 + fdetach F
3923 + ffsl F
3924 + ffsll F
3925 + fgetc_unlocked F
3926 + fgets_unlocked F
3927 + fmtmsg F
3928 + fopen64 F
3929 + fputs_unlocked F
3930 + fread_unlocked F
3931 + freopen64 F
3932 + fseeko F
3933 + fseeko64 F
3934 + fstatfs64 F
3935 + fstatvfs F
3936 + fstatvfs64 F
3937 + ftello F
3938 + ftello64 F
3939 + ftruncate64 F
3940 + ftw64 F
3941 + fwrite_unlocked F
3942 + gai_strerror F
3943 + getcontext F
3944 + getdate F
3945 + getdate_err D 0x4
3946 + getdate_r F
3947 + getmsg F
3948 + getnameinfo F
3949 + getnetname F
3950 + getpmsg F
3951 + getpt F
3952 + getutxent F
3953 + getutxid F
3954 + getutxline F
3955 + globfree64 F
3956 + gnu_get_libc_release F
3957 + gnu_get_libc_version F
3958 + grantpt F
3959 + host2netname F
3960 + iconv F
3961 + iconv_close F
3962 + iconv_open F
3963 + if_freenameindex F
3964 + if_indextoname F
3965 + if_nameindex F
3966 + if_nametoindex F
3967 + in6addr_any D 0x10
3968 + in6addr_loopback D 0x10
3969 + isastream F
3970 + iswblank F
3971 + key_decryptsession F
3972 + key_decryptsession_pk F
3973 + key_encryptsession F
3974 + key_encryptsession_pk F
3975 + key_gendes F
3976 + key_get_conv F
3977 + key_secretkey_is_set F
3978 + key_setnet F
3979 + key_setsecret F
3980 + lockf64 F
3981 + lseek64 F
3982 + makecontext F
3983 + mempcpy F
3984 + mmap64 F
3985 + netname2host F
3986 + netname2user F
3987 + nftw F
3988 + nftw64 F
3989 + ntp_adjtime F
3990 + ntp_gettime F
3991 + open64 F
3992 + passwd2des F
3993 + pread F
3994 + pread64 F
3995 + printf_size F
3996 + printf_size_info F
3997 + ptsname F
3998 + ptsname_r F
3999 + putgrent F
4000 + putmsg F
4001 + putpmsg F
4002 + pututxline F
4003 + pwrite F
4004 + pwrite64 F
4005 + rawmemchr F
4006 + rtime F
4007 + sendfile F
4008 + setrlimit64 F
4009 + setutxent F
4010 + sighold F
4011 + sigignore F
4012 + sigqueue F
4013 + sigrelse F
4014 + sigset F
4015 + sigtimedwait F
4016 + sigwaitinfo F
4017 + statfs64 F
4018 + statvfs F
4019 + statvfs64 F
4020 + strcasestr F
4021 + strtoimax F
4022 + strtoumax F
4023 + strverscmp F
4024 + svcunix_create F
4025 + svcunixfd_create F
4026 + swapcontext F
4027 + sysv_signal F
4028 + tcgetsid F
4029 + tdestroy F
4030 + tmpfile64 F
4031 + truncate64 F
4032 + umount2 F
4033 + unlockpt F
4034 + updwtmpx F
4035 + user2netname F
4036 + utmpxname F
4037 + versionsort F
4038 + waitid F
4039 + wcscasecmp F
4040 + wcsncasecmp F
4041 + wcsnlen F
4042 + wcstoimax F
4043 + wcstoll F
4044 + wcstoull F
4045 + wcstoumax F
4046 + wcswcs F
4047 + wordfree F
4048 + xdecrypt F
4049 + xdr_authdes_cred F
4050 + xdr_authdes_verf F
4051 + xdr_getcredres F
4052 + xdr_int16_t F
4053 + xdr_int32_t F
4054 + xdr_int8_t F
4055 + xdr_netnamestr F
4056 + xdr_sizeof F
4057 + xdr_uint16_t F
4058 + xdr_uint32_t F
4059 + xdr_uint8_t F
4060 + xdr_unixcred F
4061 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
4062 +| GLIBC_2.2 sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4063 + __key_decryptsession_pk_LOCAL D 0x4
4064 + __key_encryptsession_pk_LOCAL D 0x4
4065 + __key_gendes_LOCAL D 0x4
4066 + _sys_errlist D 0x1f4
4067 + _sys_siglist D 0x100
4068 + argp_program_bug_address D 0x4
4069 + argp_program_version D 0x4
4070 + argp_program_version_hook D 0x4
4071 + sys_errlist D 0x1f4
4072 + sys_sigabbrev D 0x100
4073 + sys_siglist D 0x100
4074 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls
4075 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4076 +| GLIBC_2.2 ia64-.*-linux.*/tls
4077 + __signbitl F
4078 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls
4079 +| GLIBC_2.2 sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4080 + _IO_2_1_stderr_ D 0x98
4081 + _IO_2_1_stdin_ D 0x98
4082 + _IO_2_1_stdout_ D 0x98
4083 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls
4084 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4085 + modify_ldt F
4086 +GLIBC_2.1 powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
4087 + _IO_2_1_stderr_ D 0xa0
4088 + _IO_2_1_stdin_ D 0xa0
4089 + _IO_2_1_stdout_ D 0xa0
4090 +GLIBC_2.1 s390-.*-linux.*/tls
4091 + __chown F
4092 +GLIBC_2.2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4093 + GLIBC_2.2.1 A
4094 +GLIBC_2.2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4095 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4096 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4097 + pivot_root F
4098 + posix_openpt F
4099 +GLIBC_2.2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4100 + GLIBC_2.2.2 A
4101 +GLIBC_2.2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4102 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4103 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4104 + __nss_hostname_digits_dots F
4105 +GLIBC_2.2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4106 + GLIBC_2.2.3 A
4107 +GLIBC_2.2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4108 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4109 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4110 + __rpc_thread_createerr F
4111 + __rpc_thread_svc_fdset F
4112 + __rpc_thread_svc_max_pollfd F
4113 + __rpc_thread_svc_pollfd F
4114 + sprofil F
4115 +GLIBC_2.2.4 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4116 + GLIBC_2.2.4 A
4117 +GLIBC_2.2.4 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4118 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4119 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4120 + dl_iterate_phdr F
4121 + getgrouplist F
4122 + sockatmark F
4123 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
4124 + GLIBC_2.2.5 A
4125 + __arch_prctl F
4126 + arch_prctl F
4127 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
4128 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4129 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4130 + _IO_adjust_wcolumn F
4131 + _IO_free_wbackup_area F
4132 + _IO_init_wmarker F
4133 + _IO_iter_begin F
4134 + _IO_iter_end F
4135 + _IO_iter_file F
4136 + _IO_iter_next F
4137 + _IO_least_wmarker F
4138 + _IO_list_lock F
4139 + _IO_list_resetlock F
4140 + _IO_list_unlock F
4141 + _IO_seekwmark F
4142 + _IO_sputbackwc F
4143 + _IO_sungetwc F
4144 + _IO_switch_to_main_wget_area F
4145 + _IO_switch_to_wbackup_area F
4146 + _IO_switch_to_wget_mode F
4147 + _IO_unsave_wmarkers F
4148 + _IO_wdefault_doallocate F
4149 + _IO_wdefault_finish F
4150 + _IO_wdefault_pbackfail F
4151 + _IO_wdefault_uflow F
4152 + _IO_wdefault_xsgetn F
4153 + _IO_wdefault_xsputn F
4154 + _IO_wdo_write F
4155 + _IO_wdoallocbuf F
4156 + _IO_wfile_overflow F
4157 + _IO_wfile_seekoff F
4158 + _IO_wfile_sync F
4159 + _IO_wfile_underflow F
4160 + _IO_wfile_xsputn F
4161 + _IO_wmarker_delta F
4162 + _IO_wsetb F
4163 + __assert F
4164 + __cyg_profile_func_enter F
4165 + __cyg_profile_func_exit F
4166 + __endmntent F
4167 + __fbufsize F
4168 + __flbf F
4169 + __fpending F
4170 + __fpurge F
4171 + __freadable F
4172 + __freading F
4173 + __fsetlocking F
4174 + __fwritable F
4175 + __fwriting F
4176 + __getmntent_r F
4177 + __nl_langinfo_l F
4178 + __open64 F
4179 + __res_init F
4180 + __res_nclose F
4181 + __res_ninit F
4182 + __res_state F
4183 + __setmntent F
4184 + __statfs F
4185 + __strndup F
4186 + __sysconf F
4187 + __sysctl F
4188 + __wctrans_l F
4189 + __woverflow F
4190 + __wuflow F
4191 + __wunderflow F
4192 + __xpg_sigpause F
4193 + _flushlbf F
4194 + bind_textdomain_codeset F
4195 + dcngettext F
4196 + dngettext F
4197 + fgetwc F
4198 + fgetwc_unlocked F
4199 + fgetws F
4200 + fgetws_unlocked F
4201 + fmemopen F
4202 + fputwc F
4203 + fputwc_unlocked F
4204 + fputws F
4205 + fputws_unlocked F
4206 + fwide F
4207 + fwprintf F
4208 + fwscanf F
4209 + getdirentries64 F
4210 + getloadavg F
4211 + getwc F
4212 + getwc_unlocked F
4213 + getwchar F
4214 + getwchar_unlocked F
4215 + iruserok_af F
4216 + mcheck_check_all F
4217 + mcheck_pedantic F
4218 + memrchr F
4219 + mincore F
4220 + mkdtemp F
4221 + mkstemp64 F
4222 + moncontrol F
4223 + ngettext F
4224 + posix_fadvise F
4225 + posix_fadvise64 F
4226 + posix_fallocate F
4227 + posix_fallocate64 F
4228 + posix_madvise F
4229 + posix_memalign F
4230 + posix_spawn F
4231 + posix_spawn_file_actions_addclose F
4232 + posix_spawn_file_actions_adddup2 F
4233 + posix_spawn_file_actions_addopen F
4234 + posix_spawn_file_actions_destroy F
4235 + posix_spawn_file_actions_init F
4236 + posix_spawnattr_destroy F
4237 + posix_spawnattr_getflags F
4238 + posix_spawnattr_getpgroup F
4239 + posix_spawnattr_getschedparam F
4240 + posix_spawnattr_getschedpolicy F
4241 + posix_spawnattr_getsigdefault F
4242 + posix_spawnattr_getsigmask F
4243 + posix_spawnattr_init F
4244 + posix_spawnattr_setflags F
4245 + posix_spawnattr_setpgroup F
4246 + posix_spawnattr_setschedparam F
4247 + posix_spawnattr_setschedpolicy F
4248 + posix_spawnattr_setsigdefault F
4249 + posix_spawnattr_setsigmask F
4250 + posix_spawnp F
4251 + putwc F
4252 + putwc_unlocked F
4253 + putwchar F
4254 + putwchar_unlocked F
4255 + rcmd_af F
4256 + rexec_af F
4257 + rresvport_af F
4258 + ruserok_af F
4259 + svc_getreq_common F
4260 + svc_getreq_poll F
4261 + svc_max_pollfd D 0x4
4262 + swprintf F
4263 + swscanf F
4264 + ungetwc F
4265 + vfwprintf F
4266 + vfwscanf F
4267 + vswprintf F
4268 + vswscanf F
4269 + vwprintf F
4270 + vwscanf F
4271 + wcschrnul F
4272 + wcsftime F
4273 + wmempcpy F
4274 + wprintf F
4275 + wscanf F
4276 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
4277 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls
4278 + __ctype32_b D 0x8
4279 + __ctype32_tolower D 0x8
4280 + __ctype32_toupper D 0x8
4281 + __ctype_b D 0x8
4282 + __ctype_tolower D 0x8
4283 + __ctype_toupper D 0x8
4284 + _res D 0x238
4285 + _sys_errlist D 0x3e8
4286 + sys_errlist D 0x3e8
4287 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
4288 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls
4289 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4290 + _IO_2_1_stderr_ D 0xe0
4291 + _IO_2_1_stdin_ D 0xe0
4292 + _IO_2_1_stdout_ D 0xe0
4293 + _IO_file_jumps D 0xa8
4294 + _IO_list_all D 0x8
4295 + _IO_wfile_jumps D 0xa8
4296 + __after_morecore_hook D 0x8
4297 + __curbrk D 0x8
4298 + __environ D 0x8
4299 + __free_hook D 0x8
4300 + __key_decryptsession_pk_LOCAL D 0x8
4301 + __key_encryptsession_pk_LOCAL D 0x8
4302 + __key_gendes_LOCAL D 0x8
4303 + __malloc_hook D 0x8
4304 + __malloc_initialize_hook D 0x8
4305 + __memalign_hook D 0x8
4306 + __morecore D 0x8
4307 + __progname D 0x8
4308 + __progname_full D 0x8
4309 + __rcmd_errstr D 0x8
4310 + __realloc_hook D 0x8
4311 + __timezone D 0x8
4312 + __tzname D 0x10
4313 + _environ D 0x8
4314 + _nl_domain_bindings D 0x8
4315 + _null_auth D 0x18
4316 + _obstack D 0x8
4317 + _res_hconf D 0x48
4318 + _sys_siglist D 0x200
4319 + argp_program_bug_address D 0x8
4320 + argp_program_version D 0x8
4321 + argp_program_version_hook D 0x8
4322 + environ D 0x8
4323 + error_print_progname D 0x8
4324 + h_errlist D 0x28
4325 + loc1 D 0x8
4326 + loc2 D 0x8
4327 + locs D 0x8
4328 + mallwatch D 0x8
4329 + obstack_alloc_failed_handler D 0x8
4330 + optarg D 0x8
4331 + program_invocation_name D 0x8
4332 + program_invocation_short_name D 0x8
4333 + re_syntax_options D 0x8
4334 + rpc_createerr D 0x20
4335 + stderr D 0x8
4336 + stdin D 0x8
4337 + stdout D 0x8
4338 + svc_pollfd D 0x8
4339 + svcauthdes_stats D 0x18
4340 + sys_sigabbrev D 0x200
4341 + sys_siglist D 0x200
4342 + timezone D 0x8
4343 + tzname D 0x10
4344 +GLIBC_2.2.6 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
4345 + GLIBC_2.2.6 A
4346 +GLIBC_2.2.6 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
4347 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4348 + __nanosleep F
4349 +GLIBC_2.2.6 ia64-.*-linux.*/tls
4350 + getunwind F
4351 +GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4352 + GLIBC_2.2 A
4353 +GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4354 + __ctype32_tolower D 0x4
4355 + __ctype32_toupper D 0x4
4356 + _res_hconf D 0x30
4357 + svc_pollfd D 0x4
4358 +GLIBC_2.2 i.86-.*-linux.*/thread i.86-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
4359 + _IO_wfile_jumps D 0x54
4360 +GLIBC_2.2 ia64-.*-linux.*/tls
4361 + __clone2 F
4362 + __divdf3 F
4363 + __divsf3 F
4364 + __divtf3 F
4365 + __multi3 F
4366 + _inb F
4367 + _inl F
4368 + _inw F
4369 + _outb F
4370 + _outl F
4371 + _outw F
4372 + inb F
4373 + inl F
4374 + inw F
4375 + outb F
4376 + outw F
4377 + pciconfig_read F
4378 + pciconfig_write F
4379 +GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls
4380 + ___brk_addr D 0x8
4381 +GLIBC_2.2 sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4382 + _nl_default_dirname D 0x20
4383 +GLIBC_2.3.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
4384 + GLIBC_2.3.2 A
4385 + __register_atfork F
4386 + lchmod F
4387 + sched_getaffinity F
4388 + sched_setaffinity F
4389 + strptime_l F
4390 +GLIBC_2.3.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls x86_64-.*-linux.*/tls
4391 + epoll_create F
4392 + epoll_ctl F
4393 + epoll_wait F
4394 +GLIBC_2.3.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
4395 + GLIBC_2.3.3 A
4396 + remap_file_pages F
4397 +GLIBC_2.3.3 i.86-.*-linux.*/thread i.86-.*-linux.*/tls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls
4398 + _sys_siglist D 0x104
4399 + sys_sigabbrev D 0x104
4400 + sys_siglist D 0x104
4401 +GLIBC_2.3.3 ia64-.*-linux.*/tls powerpc64-.*-linux.*/thread s390x-.*-linux.*/tls x86_64-.*-linux.*/tls
4402 +| GLIBC_2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4403 + strtoll_l F
4404 + strtoull_l F
4405 +GLIBC_2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
4406 + GLIBC_2.3 A
4407 + __ctype_b_loc F
4408 + __ctype_tolower_loc F
4409 + __ctype_toupper_loc F
4410 + __isctype F
4411 + __strftime_l F
4412 + __uselocale F
4413 + __wcsftime_l F
4414 + duplocale F
4415 + fgetxattr F
4416 + flistxattr F
4417 + freeifaddrs F
4418 + freelocale F
4419 + fremovexattr F
4420 + fsetxattr F
4421 + futimes F
4422 + getifaddrs F
4423 + getxattr F
4424 + isalnum_l F
4425 + isalpha_l F
4426 + isblank_l F
4427 + iscntrl_l F
4428 + isctype F
4429 + isdigit_l F
4430 + isgraph_l F
4431 + islower_l F
4432 + isprint_l F
4433 + ispunct_l F
4434 + isspace_l F
4435 + isupper_l F
4436 + iswalnum_l F
4437 + iswalpha_l F
4438 + iswblank_l F
4439 + iswcntrl_l F
4440 + iswctype_l F
4441 + iswdigit_l F
4442 + iswgraph_l F
4443 + iswlower_l F
4444 + iswprint_l F
4445 + iswpunct_l F
4446 + iswspace_l F
4447 + iswupper_l F
4448 + iswxdigit_l F
4449 + isxdigit_l F
4450 + lgetxattr F
4451 + listxattr F
4452 + llistxattr F
4453 + lremovexattr F
4454 + lsetxattr F
4455 + lutimes F
4456 + newlocale F
4457 + nl_langinfo_l F
4458 + readahead F
4459 + removexattr F
4460 + sendfile64 F
4461 + setxattr F
4462 + strcasecmp_l F
4463 + strcoll_l F
4464 + strfmon_l F
4465 + strftime_l F
4466 + strncasecmp_l F
4467 + strtod_l F
4468 + strtof_l F
4469 + strtol_l F
4470 + strtold_l F
4471 + strtoul_l F
4472 + strxfrm_l F
4473 + tolower_l F
4474 + toupper_l F
4475 + towctrans_l F
4476 + towlower_l F
4477 + towupper_l F
4478 + uselocale F
4479 + wcscasecmp_l F
4480 + wcscoll_l F
4481 + wcsftime_l F
4482 + wcsncasecmp_l F
4483 + wcstod_l F
4484 + wcstof_l F
4485 + wcstol_l F
4486 + wcstold_l F
4487 + wcstoll_l F
4488 + wcstoul_l F
4489 + wcstoull_l F
4490 + wcsxfrm_l F
4491 + wctrans_l F
4492 + wctype_l F
4493 +GLIBC_2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4494 + _sys_errlist D 0x1f8
4495 + sys_errlist D 0x1f8
4496 +GLIBC_2.3 ia64-.*-linux.*/tls powerpc64-.*-linux.*/thread s390x-.*-linux.*/tls x86_64-.*-linux.*/tls
4497 + _sys_errlist D 0x3f0
4498 + sys_errlist D 0x3f0
4499 diff -u -udbrN glibc-2.3.2/abilist/libcrypt.abilist glibc-2.3.2-200304020432/abilist/libcrypt.abilist
4500 --- glibc-2.3.2/abilist/libcrypt.abilist Thu Jan 1 01:00:00 1970
4501 +++ glibc-2.3.2-200304020432/abilist/libcrypt.abilist Wed Apr 2 06:39:52 2003
4502 @@ -0,0 +1,19 @@
4503 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4504 + GLIBC_2.0 A
4505 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4506 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4507 +| GLIBC_2.2 s390x-.*-linux.*/tls
4508 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4509 + crypt F
4510 + crypt_r F
4511 + encrypt F
4512 + encrypt_r F
4513 + fcrypt F
4514 + setkey F
4515 + setkey_r F
4516 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
4517 + GLIBC_2.2.5 A
4518 +GLIBC_2.2 s390x-.*-linux.*/tls
4519 + GLIBC_2.2 A
4520 +GLIBC_2.3 powerpc64-.*-linux.*/thread
4521 + GLIBC_2.3 A
4522 diff -u -udbrN glibc-2.3.2/abilist/libdl.abilist glibc-2.3.2-200304020432/abilist/libdl.abilist
4523 --- glibc-2.3.2/abilist/libdl.abilist Thu Jan 1 01:00:00 1970
4524 +++ glibc-2.3.2-200304020432/abilist/libdl.abilist Wed Apr 2 06:39:52 2003
4525 @@ -0,0 +1,33 @@
4526 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4527 + GLIBC_2.0 A
4528 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4529 +| GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4530 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4531 +| GLIBC_2.2 s390x-.*-linux.*/tls
4532 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4533 + dlopen F
4534 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4535 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4536 +| GLIBC_2.2 s390x-.*-linux.*/tls
4537 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4538 + dladdr F
4539 + dlclose F
4540 + dlerror F
4541 + dlsym F
4542 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4543 + GLIBC_2.1 A
4544 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4545 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4546 +| GLIBC_2.2 s390x-.*-linux.*/tls
4547 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4548 + dlvsym F
4549 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
4550 + GLIBC_2.2.5 A
4551 +GLIBC_2.2 s390x-.*-linux.*/tls
4552 + GLIBC_2.2 A
4553 +GLIBC_2.3.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
4554 + GLIBC_2.3.3 A
4555 + dladdr1 F
4556 + dlinfo F
4557 +GLIBC_2.3 powerpc64-.*-linux.*/thread
4558 + GLIBC_2.3 A
4559 diff -u -udbrN glibc-2.3.2/abilist/libm.abilist glibc-2.3.2-200304020432/abilist/libm.abilist
4560 --- glibc-2.3.2/abilist/libm.abilist Thu Jan 1 01:00:00 1970
4561 +++ glibc-2.3.2-200304020432/abilist/libm.abilist Wed Apr 2 06:39:52 2003
4562 @@ -0,0 +1,355 @@
4563 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
4564 + GLIBC_2.0 A
4565 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
4566 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4567 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4568 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4569 + _LIB_VERSION D 0x4
4570 + acos F
4571 + acosf F
4572 + acosh F
4573 + acoshf F
4574 + acoshl F
4575 + acosl F
4576 + asin F
4577 + asinf F
4578 + asinh F
4579 + asinhf F
4580 + asinhl F
4581 + asinl F
4582 + atan F
4583 + atan2 F
4584 + atan2f F
4585 + atan2l F
4586 + atanf F
4587 + atanh F
4588 + atanhf F
4589 + atanhl F
4590 + atanl F
4591 + cbrt F
4592 + cbrtf F
4593 + cbrtl F
4594 + ceil F
4595 + ceilf F
4596 + ceill F
4597 + copysign F
4598 + copysignf F
4599 + copysignl F
4600 + cos F
4601 + cosf F
4602 + cosh F
4603 + coshf F
4604 + coshl F
4605 + cosl F
4606 + drem F
4607 + dremf F
4608 + dreml F
4609 + erf F
4610 + erfc F
4611 + erfcf F
4612 + erfcl F
4613 + erff F
4614 + erfl F
4615 + exp F
4616 + expf F
4617 + expl F
4618 + expm1 F
4619 + expm1f F
4620 + expm1l F
4621 + fabs F
4622 + fabsf F
4623 + fabsl F
4624 + finite F
4625 + finitef F
4626 + finitel F
4627 + floor F
4628 + floorf F
4629 + floorl F
4630 + fmod F
4631 + fmodf F
4632 + fmodl F
4633 + frexp F
4634 + frexpf F
4635 + frexpl F
4636 + gamma F
4637 + gammaf F
4638 + gammal F
4639 + hypot F
4640 + hypotf F
4641 + hypotl F
4642 + ilogb F
4643 + ilogbf F
4644 + ilogbl F
4645 + j0 F
4646 + j0f F
4647 + j0l F
4648 + j1 F
4649 + j1f F
4650 + j1l F
4651 + jn F
4652 + jnf F
4653 + jnl F
4654 + ldexp F
4655 + ldexpf F
4656 + ldexpl F
4657 + lgamma F
4658 + lgamma_r F
4659 + lgammaf F
4660 + lgammaf_r F
4661 + lgammal F
4662 + lgammal_r F
4663 + log F
4664 + log10 F
4665 + log10f F
4666 + log10l F
4667 + log1p F
4668 + log1pf F
4669 + log1pl F
4670 + logb F
4671 + logbf F
4672 + logbl F
4673 + logf F
4674 + logl F
4675 + matherr F
4676 + modf F
4677 + modff F
4678 + modfl F
4679 + nextafter F
4680 + nextafterf F
4681 + nextafterl F
4682 + pow F
4683 + powf F
4684 + powl F
4685 + remainder F
4686 + remainderf F
4687 + remainderl F
4688 + rint F
4689 + rintf F
4690 + rintl F
4691 + scalb F
4692 + scalbf F
4693 + scalbl F
4694 + scalbn F
4695 + scalbnf F
4696 + scalbnl F
4697 + signgam D 0x4
4698 + significand F
4699 + significandf F
4700 + significandl F
4701 + sin F
4702 + sinf F
4703 + sinh F
4704 + sinhf F
4705 + sinhl F
4706 + sinl F
4707 + sqrt F
4708 + sqrtf F
4709 + sqrtl F
4710 + tan F
4711 + tanf F
4712 + tanh F
4713 + tanhf F
4714 + tanhl F
4715 + tanl F
4716 + y0 F
4717 + y0f F
4718 + y0l F
4719 + y1 F
4720 + y1f F
4721 + y1l F
4722 + yn F
4723 + ynf F
4724 + ynl F
4725 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
4726 + GLIBC_2.1 A
4727 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
4728 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4729 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4730 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4731 + feclearexcept F
4732 + fegetenv F
4733 + fegetexceptflag F
4734 + feraiseexcept F
4735 + fesetenv F
4736 + fesetexceptflag F
4737 + feupdateenv F
4738 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
4739 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4740 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4741 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4742 + __clog10 F
4743 + __clog10f F
4744 + __clog10l F
4745 + __finite F
4746 + __finitef F
4747 + __finitel F
4748 + __fpclassify F
4749 + __fpclassifyf F
4750 + __signbit F
4751 + __signbitf F
4752 + cabs F
4753 + cabsf F
4754 + cabsl F
4755 + cacos F
4756 + cacosf F
4757 + cacosh F
4758 + cacoshf F
4759 + cacoshl F
4760 + cacosl F
4761 + carg F
4762 + cargf F
4763 + cargl F
4764 + casin F
4765 + casinf F
4766 + casinh F
4767 + casinhf F
4768 + casinhl F
4769 + casinl F
4770 + catan F
4771 + catanf F
4772 + catanh F
4773 + catanhf F
4774 + catanhl F
4775 + catanl F
4776 + ccos F
4777 + ccosf F
4778 + ccosh F
4779 + ccoshf F
4780 + ccoshl F
4781 + ccosl F
4782 + cexp F
4783 + cexpf F
4784 + cexpl F
4785 + cimag F
4786 + cimagf F
4787 + cimagl F
4788 + clog F
4789 + clog10 F
4790 + clog10f F
4791 + clog10l F
4792 + clogf F
4793 + clogl F
4794 + conj F
4795 + conjf F
4796 + conjl F
4797 + cpow F
4798 + cpowf F
4799 + cpowl F
4800 + cproj F
4801 + cprojf F
4802 + cprojl F
4803 + creal F
4804 + crealf F
4805 + creall F
4806 + csin F
4807 + csinf F
4808 + csinh F
4809 + csinhf F
4810 + csinhl F
4811 + csinl F
4812 + csqrt F
4813 + csqrtf F
4814 + csqrtl F
4815 + ctan F
4816 + ctanf F
4817 + ctanh F
4818 + ctanhf F
4819 + ctanhl F
4820 + ctanl F
4821 + exp10 F
4822 + exp10f F
4823 + exp10l F
4824 + exp2 F
4825 + exp2f F
4826 + fdim F
4827 + fdimf F
4828 + fdiml F
4829 + fegetround F
4830 + feholdexcept F
4831 + fesetround F
4832 + fetestexcept F
4833 + fma F
4834 + fmaf F
4835 + fmal F
4836 + fmax F
4837 + fmaxf F
4838 + fmaxl F
4839 + fmin F
4840 + fminf F
4841 + fminl F
4842 + llrint F
4843 + llrintf F
4844 + llrintl F
4845 + llround F
4846 + llroundf F
4847 + llroundl F
4848 + log2 F
4849 + log2f F
4850 + log2l F
4851 + lrint F
4852 + lrintf F
4853 + lrintl F
4854 + lround F
4855 + lroundf F
4856 + lroundl F
4857 + nan F
4858 + nanf F
4859 + nanl F
4860 + nearbyint F
4861 + nearbyintf F
4862 + nearbyintl F
4863 + nexttoward F
4864 + nexttowardf F
4865 + nexttowardl F
4866 + pow10 F
4867 + pow10f F
4868 + pow10l F
4869 + remquo F
4870 + remquof F
4871 + remquol F
4872 + round F
4873 + roundf F
4874 + roundl F
4875 + scalbln F
4876 + scalblnf F
4877 + scalblnl F
4878 + sincos F
4879 + sincosf F
4880 + sincosl F
4881 + tgamma F
4882 + tgammaf F
4883 + tgammal F
4884 + trunc F
4885 + truncf F
4886 + truncl F
4887 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls
4888 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4889 +| GLIBC_2.2 ia64-.*-linux.*/tls
4890 + __fpclassifyl F
4891 + __signbitl F
4892 + exp2l F
4893 +GLIBC_2.1 powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls
4894 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4895 + __fe_dfl_env D 0x8
4896 + __fe_enabled_env D 0x8
4897 + __fe_nomask_env F
4898 + __fe_nonieee_env D 0x8
4899 +GLIBC_2.2.3 ia64-.*-linux.*/tls
4900 + GLIBC_2.2.3 A
4901 + matherrf F
4902 + matherrl F
4903 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
4904 + GLIBC_2.2.5 A
4905 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
4906 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4907 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4908 + fedisableexcept F
4909 + feenableexcept F
4910 + fegetexcept F
4911 +GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls
4912 + __expl F
4913 + __expm1l F
4914 +GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4915 + GLIBC_2.2 A
4916 +GLIBC_2.3 powerpc64-.*-linux.*/thread
4917 + GLIBC_2.3 A
4918 diff -u -udbrN glibc-2.3.2/abilist/libnsl.abilist glibc-2.3.2-200304020432/abilist/libnsl.abilist
4919 --- glibc-2.3.2/abilist/libnsl.abilist Thu Jan 1 01:00:00 1970
4920 +++ glibc-2.3.2-200304020432/abilist/libnsl.abilist Wed Apr 2 06:39:52 2003
4921 @@ -0,0 +1,142 @@
4922 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4923 + GLIBC_2.0 A
4924 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4925 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4926 +| GLIBC_2.2 s390x-.*-linux.*/tls
4927 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4928 + __yp_check F
4929 + xdr_domainname F
4930 + xdr_keydat F
4931 + xdr_mapname F
4932 + xdr_peername F
4933 + xdr_valdat F
4934 + xdr_yp_buf F
4935 + xdr_ypbind_binding F
4936 + xdr_ypbind_resp F
4937 + xdr_ypbind_resptype F
4938 + xdr_ypbind_setdom F
4939 + xdr_ypdelete_args F
4940 + xdr_ypmap_parms F
4941 + xdr_ypmaplist F
4942 + xdr_yppush_status F
4943 + xdr_yppushresp_xfr F
4944 + xdr_ypreq_key F
4945 + xdr_ypreq_nokey F
4946 + xdr_ypreq_xfr F
4947 + xdr_ypresp_all F
4948 + xdr_ypresp_key_val F
4949 + xdr_ypresp_maplist F
4950 + xdr_ypresp_master F
4951 + xdr_ypresp_order F
4952 + xdr_ypresp_val F
4953 + xdr_ypresp_xfr F
4954 + xdr_ypstat F
4955 + xdr_ypupdate_args F
4956 + xdr_ypxfrstat F
4957 + yp_all F
4958 + yp_bind F
4959 + yp_first F
4960 + yp_get_default_domain F
4961 + yp_maplist F
4962 + yp_master F
4963 + yp_match F
4964 + yp_next F
4965 + yp_order F
4966 + yp_unbind F
4967 + yp_update F
4968 + ypbinderr_string F
4969 + yperr_string F
4970 + ypprot_err F
4971 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4972 + GLIBC_2.1 A
4973 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
4974 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
4975 +| GLIBC_2.2 s390x-.*-linux.*/tls
4976 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
4977 + __free_fdresult F
4978 + __nis_default_access F
4979 + __nis_default_group F
4980 + __nis_default_owner F
4981 + __nis_default_ttl F
4982 + __nis_finddirectory F
4983 + __nis_hash F
4984 + __nisbind_connect F
4985 + __nisbind_create F
4986 + __nisbind_destroy F
4987 + __nisbind_next F
4988 + nis_add F
4989 + nis_add_entry F
4990 + nis_addmember F
4991 + nis_checkpoint F
4992 + nis_clone_directory F
4993 + nis_clone_object F
4994 + nis_clone_result F
4995 + nis_creategroup F
4996 + nis_destroy_object F
4997 + nis_destroygroup F
4998 + nis_dir_cmp F
4999 + nis_domain_of F
5000 + nis_domain_of_r F
5001 + nis_first_entry F
5002 + nis_free_directory F
5003 + nis_free_object F
5004 + nis_free_request F
5005 + nis_freenames F
5006 + nis_freeresult F
5007 + nis_freeservlist F
5008 + nis_freetags F
5009 + nis_getnames F
5010 + nis_getservlist F
5011 + nis_ismember F
5012 + nis_leaf_of F
5013 + nis_leaf_of_r F
5014 + nis_lerror F
5015 + nis_list F
5016 + nis_local_directory F
5017 + nis_local_group F
5018 + nis_local_host F
5019 + nis_local_principal F
5020 + nis_lookup F
5021 + nis_mkdir F
5022 + nis_modify F
5023 + nis_modify_entry F
5024 + nis_name_of F
5025 + nis_name_of_r F
5026 + nis_next_entry F
5027 + nis_perror F
5028 + nis_ping F
5029 + nis_print_directory F
5030 + nis_print_entry F
5031 + nis_print_group F
5032 + nis_print_group_entry F
5033 + nis_print_link F
5034 + nis_print_object F
5035 + nis_print_result F
5036 + nis_print_rights F
5037 + nis_print_table F
5038 + nis_read_obj F
5039 + nis_remove F
5040 + nis_remove_entry F
5041 + nis_removemember F
5042 + nis_rmdir F
5043 + nis_servstate F
5044 + nis_sperrno F
5045 + nis_sperror F
5046 + nis_sperror_r F
5047 + nis_stats F
5048 + nis_verifygroup F
5049 + nis_write_obj F
5050 + readColdStartFile F
5051 + writeColdStartFile F
5052 + xdr_cback_data F
5053 + xdr_obj_p F
5054 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5055 + GLIBC_2.2.5 A
5056 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5057 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5058 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5059 + xdr_ypall F
5060 +GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5061 + GLIBC_2.2 A
5062 +GLIBC_2.3 powerpc64-.*-linux.*/thread
5063 + GLIBC_2.3 A
5064 diff -u -udbrN glibc-2.3.2/abilist/libpthread.abilist glibc-2.3.2-200304020432/abilist/libpthread.abilist
5065 --- glibc-2.3.2/abilist/libpthread.abilist Thu Jan 1 01:00:00 1970
5066 +++ glibc-2.3.2-200304020432/abilist/libpthread.abilist Wed Apr 2 06:39:52 2003
5067 @@ -0,0 +1,256 @@
5068 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5069 + GLIBC_2.0 A
5070 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5071 +| GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5072 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5073 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5074 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5075 + pthread_attr_init F
5076 + pthread_create F
5077 + sem_destroy F
5078 + sem_getvalue F
5079 + sem_init F
5080 + sem_post F
5081 + sem_trywait F
5082 + sem_wait F
5083 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5084 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5085 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5086 + pthread_atfork F
5087 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5088 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5089 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5090 +| GLIBC_2.3.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
5091 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5092 + pthread_cond_broadcast F
5093 + pthread_cond_destroy F
5094 + pthread_cond_init F
5095 + pthread_cond_signal F
5096 + pthread_cond_timedwait F
5097 + pthread_cond_wait F
5098 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5099 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5100 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5101 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5102 + _IO_flockfile F
5103 + _IO_ftrylockfile F
5104 + _IO_funlockfile F
5105 + __close F
5106 + __connect F
5107 + __errno_location F
5108 + __fcntl F
5109 + __fork F
5110 + __h_errno_location F
5111 + __lseek F
5112 + __open F
5113 + __pthread_getspecific F
5114 + __pthread_key_create F
5115 + __pthread_mutex_destroy F
5116 + __pthread_mutex_init F
5117 + __pthread_mutex_lock F
5118 + __pthread_mutex_trylock F
5119 + __pthread_mutex_unlock F
5120 + __pthread_mutexattr_destroy F
5121 + __pthread_mutexattr_init F
5122 + __pthread_mutexattr_settype F
5123 + __pthread_once F
5124 + __pthread_setspecific F
5125 + __read F
5126 + __send F
5127 + __sigaction F
5128 + __wait F
5129 + __write F
5130 + _pthread_cleanup_pop F
5131 + _pthread_cleanup_pop_restore F
5132 + _pthread_cleanup_push F
5133 + _pthread_cleanup_push_defer F
5134 + accept F
5135 + close F
5136 + connect F
5137 + fcntl F
5138 + flockfile F
5139 + fork F
5140 + fsync F
5141 + ftrylockfile F
5142 + funlockfile F
5143 + longjmp F
5144 + lseek F
5145 + msync F
5146 + nanosleep F
5147 + open F
5148 + pause F
5149 + pthread_attr_destroy F
5150 + pthread_attr_getdetachstate F
5151 + pthread_attr_getinheritsched F
5152 + pthread_attr_getschedparam F
5153 + pthread_attr_getschedpolicy F
5154 + pthread_attr_getscope F
5155 + pthread_attr_setdetachstate F
5156 + pthread_attr_setinheritsched F
5157 + pthread_attr_setschedparam F
5158 + pthread_attr_setschedpolicy F
5159 + pthread_attr_setscope F
5160 + pthread_cancel F
5161 + pthread_condattr_destroy F
5162 + pthread_condattr_init F
5163 + pthread_detach F
5164 + pthread_equal F
5165 + pthread_exit F
5166 + pthread_getschedparam F
5167 + pthread_getspecific F
5168 + pthread_join F
5169 + pthread_key_create F
5170 + pthread_key_delete F
5171 + pthread_kill F
5172 + pthread_kill_other_threads_np F
5173 + pthread_mutex_destroy F
5174 + pthread_mutex_init F
5175 + pthread_mutex_lock F
5176 + pthread_mutex_trylock F
5177 + pthread_mutex_unlock F
5178 + pthread_mutexattr_destroy F
5179 + pthread_mutexattr_getkind_np F
5180 + pthread_mutexattr_init F
5181 + pthread_mutexattr_setkind_np F
5182 + pthread_once F
5183 + pthread_self F
5184 + pthread_setcancelstate F
5185 + pthread_setcanceltype F
5186 + pthread_setschedparam F
5187 + pthread_setspecific F
5188 + pthread_sigmask F
5189 + pthread_testcancel F
5190 + raise F
5191 + read F
5192 + recv F
5193 + recvfrom F
5194 + recvmsg F
5195 + send F
5196 + sendmsg F
5197 + sendto F
5198 + sigaction F
5199 + siglongjmp F
5200 + sigwait F
5201 + system F
5202 + tcdrain F
5203 + vfork F
5204 + wait F
5205 + waitpid F
5206 + write F
5207 +GLIBC_2.1.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5208 + GLIBC_2.1.1 A
5209 +GLIBC_2.1.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5210 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5211 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5212 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5213 + sem_close F
5214 + sem_open F
5215 + sem_unlink F
5216 +GLIBC_2.1.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5217 + GLIBC_2.1.2 A
5218 +GLIBC_2.1.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5219 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5220 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5221 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5222 + __vfork F
5223 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5224 + GLIBC_2.1 A
5225 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls
5226 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5227 +| GLIBC_2.2 ia64-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5228 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5229 + __libc_allocate_rtsig F
5230 + __libc_current_sigrtmax F
5231 + __libc_current_sigrtmin F
5232 + pthread_attr_getguardsize F
5233 + pthread_attr_getstackaddr F
5234 + pthread_attr_getstacksize F
5235 + pthread_attr_setguardsize F
5236 + pthread_attr_setstackaddr F
5237 + pthread_attr_setstacksize F
5238 + pthread_getconcurrency F
5239 + pthread_mutexattr_gettype F
5240 + pthread_mutexattr_settype F
5241 + pthread_rwlock_destroy F
5242 + pthread_rwlock_init F
5243 + pthread_rwlock_rdlock F
5244 + pthread_rwlock_tryrdlock F
5245 + pthread_rwlock_trywrlock F
5246 + pthread_rwlock_unlock F
5247 + pthread_rwlock_wrlock F
5248 + pthread_rwlockattr_destroy F
5249 + pthread_rwlockattr_getkind_np F
5250 + pthread_rwlockattr_getpshared F
5251 + pthread_rwlockattr_init F
5252 + pthread_rwlockattr_setkind_np F
5253 + pthread_rwlockattr_setpshared F
5254 + pthread_setconcurrency F
5255 +GLIBC_2.2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5256 + GLIBC_2.2.3 A
5257 +GLIBC_2.2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5258 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5259 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5260 + pthread_getattr_np F
5261 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5262 + GLIBC_2.2.5 A
5263 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5264 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5265 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5266 + __open64 F
5267 + __pread64 F
5268 + __pthread_rwlock_destroy F
5269 + __pthread_rwlock_init F
5270 + __pthread_rwlock_rdlock F
5271 + __pthread_rwlock_tryrdlock F
5272 + __pthread_rwlock_trywrlock F
5273 + __pthread_rwlock_unlock F
5274 + __pthread_rwlock_wrlock F
5275 + __pwrite64 F
5276 + __res_state F
5277 + lseek64 F
5278 + open64 F
5279 + pread F
5280 + pread64 F
5281 + pthread_attr_getstack F
5282 + pthread_attr_setstack F
5283 + pthread_barrier_destroy F
5284 + pthread_barrier_init F
5285 + pthread_barrier_wait F
5286 + pthread_barrierattr_destroy F
5287 + pthread_barrierattr_init F
5288 + pthread_barrierattr_setpshared F
5289 + pthread_condattr_getpshared F
5290 + pthread_condattr_setpshared F
5291 + pthread_getcpuclockid F
5292 + pthread_mutex_timedlock F
5293 + pthread_mutexattr_getpshared F
5294 + pthread_mutexattr_setpshared F
5295 + pthread_rwlock_timedrdlock F
5296 + pthread_rwlock_timedwrlock F
5297 + pthread_spin_destroy F
5298 + pthread_spin_init F
5299 + pthread_spin_lock F
5300 + pthread_spin_trylock F
5301 + pthread_spin_unlock F
5302 + pthread_yield F
5303 + pwrite F
5304 + pwrite64 F
5305 + sem_timedwait F
5306 +GLIBC_2.2.6 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
5307 + GLIBC_2.2.6 A
5308 +GLIBC_2.2.6 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
5309 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5310 + __nanosleep F
5311 +GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5312 + GLIBC_2.2 A
5313 +GLIBC_2.3.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
5314 + GLIBC_2.3.2 A
5315 +GLIBC_2.3.3 i.86-.*-linux.*/thread sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5316 + GLIBC_2.3.3 A
5317 + pthread_barrierattr_getpshared F
5318 + pthread_condattr_getclock F
5319 + pthread_condattr_setclock F
5320 + pthread_timedjoin_np F
5321 + pthread_tryjoin_np F
5322 +GLIBC_2.3 powerpc64-.*-linux.*/thread
5323 + GLIBC_2.3 A
5324 diff -u -udbrN glibc-2.3.2/abilist/libresolv.abilist glibc-2.3.2-200304020432/abilist/libresolv.abilist
5325 --- glibc-2.3.2/abilist/libresolv.abilist Thu Jan 1 01:00:00 1970
5326 +++ glibc-2.3.2-200304020432/abilist/libresolv.abilist Wed Apr 2 06:39:52 2003
5327 @@ -0,0 +1,95 @@
5328 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5329 + GLIBC_2.0 A
5330 + dn_expand F
5331 + res_mkquery F
5332 + res_query F
5333 + res_querydomain F
5334 + res_search F
5335 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5336 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5337 +| GLIBC_2.2 s390x-.*-linux.*/tls
5338 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5339 + __b64_ntop F
5340 + __b64_pton F
5341 + __dn_comp F
5342 + __dn_count_labels F
5343 + __dn_skipname F
5344 + __fp_nquery F
5345 + __fp_query F
5346 + __fp_resstat F
5347 + __hostalias F
5348 + __loc_aton F
5349 + __loc_ntoa F
5350 + __p_cdname F
5351 + __p_cdnname F
5352 + __p_class F
5353 + __p_fqname F
5354 + __p_fqnname F
5355 + __p_option F
5356 + __p_query F
5357 + __p_secstodate F
5358 + __p_time F
5359 + __p_type F
5360 + __putlong F
5361 + __putshort F
5362 + __res_close F
5363 + __res_dnok F
5364 + __res_hnok F
5365 + __res_isourserver F
5366 + __res_mailok F
5367 + __res_nameinquery F
5368 + __res_ownok F
5369 + __res_queriesmatch F
5370 + __res_send F
5371 + __sym_ntop F
5372 + __sym_ntos F
5373 + __sym_ston F
5374 + _gethtbyaddr F
5375 + _gethtbyname F
5376 + _gethtbyname2 F
5377 + _gethtent F
5378 + _getlong F
5379 + _getshort F
5380 + _sethtent F
5381 + inet_net_ntop F
5382 + inet_net_pton F
5383 + inet_neta F
5384 + res_gethostbyaddr F
5385 + res_gethostbyname F
5386 + res_gethostbyname2 F
5387 + res_send_setqhook F
5388 + res_send_setrhook F
5389 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5390 + __p_class_syms D 0x54
5391 + __p_type_syms D 0x21c
5392 + _res_opcodes D 0x40
5393 +GLIBC_2.0 ia64-.*-linux.*/tls
5394 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5395 +| GLIBC_2.2 s390x-.*-linux.*/tls
5396 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5397 + __p_class_syms D 0xa8
5398 + __p_type_syms D 0x438
5399 + _res_opcodes D 0x80
5400 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5401 + GLIBC_2.2.5 A
5402 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5403 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5404 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5405 + __dn_expand F
5406 + __res_hostalias F
5407 + __res_mkquery F
5408 + __res_nmkquery F
5409 + __res_nquery F
5410 + __res_nquerydomain F
5411 + __res_nsearch F
5412 + __res_nsend F
5413 + __res_query F
5414 + __res_querydomain F
5415 + __res_search F
5416 +GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5417 + GLIBC_2.2 A
5418 +GLIBC_2.3.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
5419 + GLIBC_2.3.2 A
5420 + __p_rcode F
5421 +GLIBC_2.3 powerpc64-.*-linux.*/thread
5422 + GLIBC_2.3 A
5423 diff -u -udbrN glibc-2.3.2/abilist/librt.abilist glibc-2.3.2-200304020432/abilist/librt.abilist
5424 --- glibc-2.3.2/abilist/librt.abilist Thu Jan 1 01:00:00 1970
5425 +++ glibc-2.3.2-200304020432/abilist/librt.abilist Wed Apr 2 06:39:52 2003
5426 @@ -0,0 +1,44 @@
5427 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5428 + GLIBC_2.1 A
5429 +GLIBC_2.1 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5430 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5431 +| GLIBC_2.2 s390x-.*-linux.*/tls
5432 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5433 + aio_cancel F
5434 + aio_cancel64 F
5435 + aio_error F
5436 + aio_error64 F
5437 + aio_fsync F
5438 + aio_fsync64 F
5439 + aio_init F
5440 + aio_read F
5441 + aio_read64 F
5442 + aio_return F
5443 + aio_return64 F
5444 + aio_suspend F
5445 + aio_suspend64 F
5446 + aio_write F
5447 + aio_write64 F
5448 + lio_listio F
5449 + lio_listio64 F
5450 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5451 + GLIBC_2.2.5 A
5452 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5453 +| GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5454 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5455 + clock_getcpuclockid F
5456 + clock_getres F
5457 + clock_gettime F
5458 + clock_nanosleep F
5459 + clock_settime F
5460 + shm_open F
5461 + shm_unlink F
5462 + timer_create F
5463 + timer_delete F
5464 + timer_getoverrun F
5465 + timer_gettime F
5466 + timer_settime F
5467 +GLIBC_2.2 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5468 + GLIBC_2.2 A
5469 +GLIBC_2.3 powerpc64-.*-linux.*/thread
5470 + GLIBC_2.3 A
5471 diff -u -udbrN glibc-2.3.2/abilist/libthread_db.abilist glibc-2.3.2-200304020432/abilist/libthread_db.abilist
5472 --- glibc-2.3.2/abilist/libthread_db.abilist Thu Jan 1 01:00:00 1970
5473 +++ glibc-2.3.2-200304020432/abilist/libthread_db.abilist Wed Apr 2 06:39:52 2003
5474 @@ -0,0 +1,59 @@
5475 +GLIBC_2.1.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5476 + GLIBC_2.1.3 A
5477 +GLIBC_2.1.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5478 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5479 +| GLIBC_2.2 s390x-.*-linux.*/tls
5480 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5481 + td_init F
5482 + td_log F
5483 + td_ta_clear_event F
5484 + td_ta_delete F
5485 + td_ta_enable_stats F
5486 + td_ta_event_addr F
5487 + td_ta_event_getmsg F
5488 + td_ta_get_nthreads F
5489 + td_ta_get_ph F
5490 + td_ta_get_stats F
5491 + td_ta_map_id2thr F
5492 + td_ta_map_lwp2thr F
5493 + td_ta_new F
5494 + td_ta_reset_stats F
5495 + td_ta_set_event F
5496 + td_ta_setconcurrency F
5497 + td_ta_thr_iter F
5498 + td_ta_tsd_iter F
5499 + td_thr_clear_event F
5500 + td_thr_dbresume F
5501 + td_thr_dbsuspend F
5502 + td_thr_event_enable F
5503 + td_thr_event_getmsg F
5504 + td_thr_get_info F
5505 + td_thr_getfpregs F
5506 + td_thr_getgregs F
5507 + td_thr_getxregs F
5508 + td_thr_getxregsize F
5509 + td_thr_set_event F
5510 + td_thr_setfpregs F
5511 + td_thr_setgregs F
5512 + td_thr_setprio F
5513 + td_thr_setsigpending F
5514 + td_thr_setxregs F
5515 + td_thr_sigsetmask F
5516 + td_thr_tsd F
5517 + td_thr_validate F
5518 +GLIBC_2.2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5519 + GLIBC_2.2.3 A
5520 +GLIBC_2.2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5521 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5522 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5523 + td_symbol_list F
5524 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5525 + GLIBC_2.2.5 A
5526 +GLIBC_2.2 s390x-.*-linux.*/tls
5527 + GLIBC_2.2 A
5528 +GLIBC_2.3.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
5529 + GLIBC_2.3.3 A
5530 + td_thr_tlsbase F
5531 +GLIBC_2.3 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls powerpc64-.*-linux.*/thread s390-.*-linux.*/tls s390x-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls x86_64-.*-linux.*/tls
5532 + GLIBC_2.3 A
5533 + td_thr_tls_get_addr F
5534 diff -u -udbrN glibc-2.3.2/abilist/libutil.abilist glibc-2.3.2-200304020432/abilist/libutil.abilist
5535 --- glibc-2.3.2/abilist/libutil.abilist Thu Jan 1 01:00:00 1970
5536 +++ glibc-2.3.2-200304020432/abilist/libutil.abilist Wed Apr 2 06:39:52 2003
5537 @@ -0,0 +1,18 @@
5538 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5539 + GLIBC_2.0 A
5540 +GLIBC_2.0 i.86-.*-linux.*/notls i.86-.*-linux.*/thread i.86-.*-linux.*/tls ia64-.*-linux.*/tls m68.*-.*-linux.*/notls powerpc-.*-linux.*/notls powerpc-.*-linux.*/thread powerpc-.*-linux.*/tls s390-.*-linux.*/tls sh[34].*-.*-linux.*/notls sh[34].*-.*-linux.*/thread sh[34].*-.*-linux.*/tls
5541 +| GLIBC_2.2.5 x86_64-.*-linux.*/tls
5542 +| GLIBC_2.2 s390x-.*-linux.*/tls
5543 +| GLIBC_2.3 powerpc64-.*-linux.*/thread
5544 + forkpty F
5545 + login F
5546 + login_tty F
5547 + logout F
5548 + logwtmp F
5549 + openpty F
5550 +GLIBC_2.2.5 x86_64-.*-linux.*/tls
5551 + GLIBC_2.2.5 A
5552 +GLIBC_2.2 s390x-.*-linux.*/tls
5553 + GLIBC_2.2 A
5554 +GLIBC_2.3 powerpc64-.*-linux.*/thread
5555 + GLIBC_2.3 A
5556 diff -u -udbrN glibc-2.3.2/argp/tst-argp1.c glibc-2.3.2-200304020432/argp/tst-argp1.c
5557 --- glibc-2.3.2/argp/tst-argp1.c Wed Dec 4 23:45:02 2002
5558 +++ glibc-2.3.2-200304020432/argp/tst-argp1.c Mon Mar 17 20:21:04 2003
5559 @@ -1,4 +1,4 @@
5560 -/* Copyright (C) 2002 Free Software Foundation, Inc.
5561 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
5562 This file is part of the GNU C Library.
5563 Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
5565 @@ -29,7 +29,7 @@
5566 #define OPT_TOPLEVEL 304
5569 -static const struct argp_option options[] =
5570 +static const struct argp_option test_options[] =
5572 { NULL, 0, NULL, 0, "\
5573 This is a test for threads so we allow ther user to selection the number of \
5574 @@ -89,12 +89,12 @@
5575 /* Data structure to communicate with argp functions. */
5576 static struct argp argp =
5578 - options, parse_opt
5579 + test_options, parse_opt
5583 -int
5584 -main (void)
5585 +static int
5586 +do_test (void)
5588 int argc = 2;
5589 char *argv[3] = { (char *) "tst-argp1", (char *) "--help", NULL };
5590 @@ -113,3 +113,6 @@
5592 return ARGP_ERR_UNKNOWN;
5595 +#define TEST_FUNCTION do_test ()
5596 +#include "../test-skeleton.c"
5597 diff -u -udbrN glibc-2.3.2/config.h.in glibc-2.3.2-200304020432/config.h.in
5598 --- glibc-2.3.2/config.h.in Tue Feb 4 09:35:22 2003
5599 +++ glibc-2.3.2-200304020432/config.h.in Mon Mar 10 10:10:43 2003
5600 @@ -58,6 +58,9 @@
5601 /* Define a symbol_name as a global .symbol_name for ld. */
5602 #undef HAVE_ASM_GLOBAL_DOT_NAME
5604 +/* Define if the assembler generates debugging information directly. */
5605 +#undef HAVE_CPP_ASM_DEBUGINFO
5607 /* Define if _Unwind_Find_FDE should be exported from glibc. */
5608 #undef EXPORT_UNWIND_FIND_FDE
5610 diff -u -udbrN glibc-2.3.2/config.make.in glibc-2.3.2-200304020432/config.make.in
5611 --- glibc-2.3.2/config.make.in Thu Nov 14 23:53:32 2002
5612 +++ glibc-2.3.2-200304020432/config.make.in Wed Mar 26 02:15:05 2003
5613 @@ -1,5 +1,5 @@
5614 # @configure_input@
5615 -# From $Id: config.make.in,v 1.90 2002/11/14 03:59:36 roland Exp $.
5616 +# From $Id: config.make.in,v 1.92 2003/03/26 01:15:05 roland Exp $.
5617 # Don't edit this file. Put configuration parameters in configparms instead.
5619 version = @VERSION@
5620 @@ -50,6 +50,8 @@
5621 old-glibc-headers = @old_glibc_headers@
5622 unwind-find-fde = @libc_cv_gcc_unwind_find_fde@
5623 have-initfini-array = @libc_cv_initfinit_array@
5624 +have-cpp-asm-debuginfo = @libc_cv_cpp_asm_debuginfo@
5625 +enable-check-abi = @enable_check_abi@
5627 static-libgcc = @libc_cv_gcc_static_libgcc@
5629 diff -u -udbrN glibc-2.3.2/configure glibc-2.3.2-200304020432/configure
5630 --- glibc-2.3.2/configure Wed Feb 26 10:20:48 2003
5631 +++ glibc-2.3.2-200304020432/configure Tue Apr 1 08:53:27 2003
5632 @@ -312,7 +312,7 @@
5633 # include <unistd.h>
5634 #endif"
5636 -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs oldest_abi subdirs force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os base_machine sysnames INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S PWD_P CC MAKE MSGFMT MAKEINFO SED AUTOCONF CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP AR OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD CCVERSION SYSINCLUDES libc_cv_gcc_static_libgcc BASH libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO OLD_DEBIAN_INSTALL_INFO BISON VERSIONING libc_cv_asm_protected_directive libc_cv_initfinit_array libc_cv_z_nodelete libc_cv_z_nodlopen libc_cv_z_initfirst libc_cv_Bgroup libc_cv_z_combreloc libc_cv_have_initfini no_whole_archive exceptions LIBGD EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir use_ldconfig ldd_rewrite_script gnu_ld gnu_as elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES linux_doors mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS'
5637 +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs enable_check_abi oldest_abi subdirs force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os base_machine sysnames INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP AR OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD PWD_P MAKE MSGFMT MAKEINFO SED AUTOCONF CCVERSION SYSINCLUDES libc_cv_gcc_static_libgcc BASH libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO OLD_DEBIAN_INSTALL_INFO BISON VERSIONING libc_cv_asm_protected_directive libc_cv_initfinit_array libc_cv_z_nodelete libc_cv_z_nodlopen libc_cv_z_initfirst libc_cv_Bgroup libc_cv_z_combreloc libc_cv_have_initfini libc_cv_cpp_asm_debuginfo no_whole_archive exceptions LIBGD EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir use_ldconfig ldd_rewrite_script gnu_ld gnu_as elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES linux_doors mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS'
5638 ac_subst_files=''
5640 # Initialize some variables set by options.
5641 @@ -851,6 +851,8 @@
5642 --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
5643 --disable-sanity-checks really do not use threads (should not be used except
5644 in special situations) [default=yes]
5645 + --enable-check-abi do "make check-abi" in "make check" (no/warn/yes)
5646 + [default=no]
5647 --enable-shared build shared library [default=yes if GNU ld &
5648 ELF]
5649 --enable-profile build profiled library [default=yes]
5650 @@ -1479,6 +1481,15 @@
5651 enable_sanity=yes
5655 +# Check whether --enable-check-abi or --disable-check-abi was given.
5656 +if test "${enable_check_abi+set}" = set; then
5657 + enableval="$enable_check_abi"
5658 + enable_check_abi=$enableval
5659 +else
5660 + enable_check_abi=no
5661 +fi;
5663 static=yes
5664 # Check whether --enable-shared or --disable-shared was given.
5665 if test "${enable_shared+set}" = set; then
5666 @@ -1822,8 +1833,33 @@
5667 m68k) base_machine=m68k machine=m68k/m68020 ;;
5668 m88???) base_machine=m88k machine=m88k/$machine ;;
5669 m88k) base_machine=m88k machine=m88k/m88100 ;;
5670 -mips64*) base_machine=mips64 machine=mips/mips64/$machine ;;
5671 -mips*) base_machine=mips machine=mips/$machine ;;
5672 +mips64*) base_machine=mips64
5673 + case "$CC $CPPFLAGS $CFLAGS " in
5674 + *" -mabi=n32 "*) mips_cc_abi=n32 ;;
5675 + *" -mabi=64 "*|*" -mabi=n64 "*) mips_cc_abi=64 ;;
5676 + *" -mabi=32 "*|*" -mabi=o32 "*) mips_cc_abi=32 ;;
5677 + *) mips_cc_abi=default ;;
5678 + esac
5679 + case $config_os in
5680 + *abin32*) mips_config_abi=n32 ;;
5681 + *abi64*|*abin64*) mips_config_abi=64 ;;
5682 + *abi32*|*abio32*) mips_config_abi=32 ;;
5683 + *) mips_config_abi=$mips_cc_abi ;;
5684 + esac
5685 + case $mips_config_abi in
5686 + default) machine=mips/mips64/n32 mips_config_abi=n32 ;;
5687 + n32) machine=mips/mips64/n32 ;;
5688 + 64) machine=mips/mips64/n64 ;;
5689 + 32) machine=mips/mips32/kern64 ;;
5690 + esac
5691 + machine=$machine/$config_machine
5692 + if test $mips_config_abi != $mips_cc_abi; then
5693 + # This won't make it to config.make, but we want to
5694 + # set this in case configure tests depend on it.
5695 + CPPFLAGS="$CPPFLAGS -mabi=$mips_config_abi"
5696 + fi
5697 + ;;
5698 +mips*) base_machine=mips machine=mips/mips32/$machine ;;
5699 powerpc) base_machine=powerpc machine=powerpc/powerpc32 ;;
5700 powerpc64) base_machine=powerpc machine=powerpc/powerpc64 ;;
5701 s390) base_machine=s390 machine=s390/s390-32 ;;
5702 @@ -2170,442 +2206,6 @@
5706 -# We need the physical current working directory. We cannot use the
5707 -# "pwd -P" shell builtin since that's not portable. Instead we try to
5708 -# find a pwd binary. Note that assigning to the PWD environment
5709 -# variable might have some interesting side effects, so we don't do
5710 -# that.
5711 -# Extract the first word of "pwd", so it can be a program name with args.
5712 -set dummy pwd; ac_word=$2
5713 -echo "$as_me:$LINENO: checking for $ac_word" >&5
5714 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
5715 -if test "${ac_cv_path_PWD_P+set}" = set; then
5716 - echo $ECHO_N "(cached) $ECHO_C" >&6
5717 -else
5718 - case $PWD_P in
5719 - [\\/]* | ?:[\\/]*)
5720 - ac_cv_path_PWD_P="$PWD_P" # Let the user override the test with a path.
5721 - ;;
5722 - *)
5723 - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
5724 -for as_dir in $PATH
5726 - IFS=$as_save_IFS
5727 - test -z "$as_dir" && as_dir=.
5728 - for ac_exec_ext in '' $ac_executable_extensions; do
5729 - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
5730 - ac_cv_path_PWD_P="$as_dir/$ac_word$ac_exec_ext"
5731 - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
5732 - break 2
5733 - fi
5734 -done
5735 -done
5737 - test -z "$ac_cv_path_PWD_P" && ac_cv_path_PWD_P="no"
5738 - ;;
5739 -esac
5741 -PWD_P=$ac_cv_path_PWD_P
5743 -if test -n "$PWD_P"; then
5744 - echo "$as_me:$LINENO: result: $PWD_P" >&5
5745 -echo "${ECHO_T}$PWD_P" >&6
5746 -else
5747 - echo "$as_me:$LINENO: result: no" >&5
5748 -echo "${ECHO_T}no" >&6
5751 -if test "$PWD_P" = no; then
5752 - { { echo "$as_me:$LINENO: error: *** A pwd binary could not be found." >&5
5753 -echo "$as_me: error: *** A pwd binary could not be found." >&2;}
5754 - { (exit 1); exit 1; }; }
5757 -# These programs are version sensitive.
5759 -for ac_prog in ${ac_tool_prefix}gcc ${ac_tool_prefix}cc
5761 - # Extract the first word of "$ac_prog", so it can be a program name with args.
5762 -set dummy $ac_prog; ac_word=$2
5763 -echo "$as_me:$LINENO: checking for $ac_word" >&5
5764 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
5765 -if test "${ac_cv_prog_CC+set}" = set; then
5766 - echo $ECHO_N "(cached) $ECHO_C" >&6
5767 -else
5768 - if test -n "$CC"; then
5769 - ac_cv_prog_CC="$CC" # Let the user override the test.
5770 -else
5771 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
5772 -for as_dir in $PATH
5774 - IFS=$as_save_IFS
5775 - test -z "$as_dir" && as_dir=.
5776 - for ac_exec_ext in '' $ac_executable_extensions; do
5777 - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
5778 - ac_cv_prog_CC="$ac_prog"
5779 - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
5780 - break 2
5781 - fi
5782 -done
5783 -done
5787 -CC=$ac_cv_prog_CC
5788 -if test -n "$CC"; then
5789 - echo "$as_me:$LINENO: result: $CC" >&5
5790 -echo "${ECHO_T}$CC" >&6
5791 -else
5792 - echo "$as_me:$LINENO: result: no" >&5
5793 -echo "${ECHO_T}no" >&6
5796 - test -n "$CC" && break
5797 -done
5799 -if test -z "$CC"; then
5800 - ac_verc_fail=yes
5801 -else
5802 - # Found it, now check the version.
5803 - echo "$as_me:$LINENO: checking version of $CC" >&5
5804 -echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
5805 - ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
5806 - case $ac_prog_version in
5807 - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
5808 - 3.[2-9]*)
5809 - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
5810 - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
5812 - esac
5813 - echo "$as_me:$LINENO: result: $ac_prog_version" >&5
5814 -echo "${ECHO_T}$ac_prog_version" >&6
5816 -if test $ac_verc_fail = yes; then
5817 - critic_missing="$critic_missing gcc"
5820 -for ac_prog in gnumake gmake make
5822 - # Extract the first word of "$ac_prog", so it can be a program name with args.
5823 -set dummy $ac_prog; ac_word=$2
5824 -echo "$as_me:$LINENO: checking for $ac_word" >&5
5825 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
5826 -if test "${ac_cv_prog_MAKE+set}" = set; then
5827 - echo $ECHO_N "(cached) $ECHO_C" >&6
5828 -else
5829 - if test -n "$MAKE"; then
5830 - ac_cv_prog_MAKE="$MAKE" # Let the user override the test.
5831 -else
5832 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
5833 -for as_dir in $PATH
5835 - IFS=$as_save_IFS
5836 - test -z "$as_dir" && as_dir=.
5837 - for ac_exec_ext in '' $ac_executable_extensions; do
5838 - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
5839 - ac_cv_prog_MAKE="$ac_prog"
5840 - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
5841 - break 2
5842 - fi
5843 -done
5844 -done
5848 -MAKE=$ac_cv_prog_MAKE
5849 -if test -n "$MAKE"; then
5850 - echo "$as_me:$LINENO: result: $MAKE" >&5
5851 -echo "${ECHO_T}$MAKE" >&6
5852 -else
5853 - echo "$as_me:$LINENO: result: no" >&5
5854 -echo "${ECHO_T}no" >&6
5857 - test -n "$MAKE" && break
5858 -done
5860 -if test -z "$MAKE"; then
5861 - ac_verc_fail=yes
5862 -else
5863 - # Found it, now check the version.
5864 - echo "$as_me:$LINENO: checking version of $MAKE" >&5
5865 -echo $ECHO_N "checking version of $MAKE... $ECHO_C" >&6
5866 - ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
5867 - case $ac_prog_version in
5868 - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
5869 - 3.79* | 3.[89]*)
5870 - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
5871 - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
5873 - esac
5874 - echo "$as_me:$LINENO: result: $ac_prog_version" >&5
5875 -echo "${ECHO_T}$ac_prog_version" >&6
5877 -if test $ac_verc_fail = yes; then
5878 - critic_missing="$critic_missing make"
5883 -if test -n "$critic_missing"; then
5884 -{ { echo "$as_me:$LINENO: error:
5885 -*** These critical programs are missing or too old:$critic_missing
5886 -*** Check the INSTALL file for required versions." >&5
5887 -echo "$as_me: error:
5888 -*** These critical programs are missing or too old:$critic_missing
5889 -*** Check the INSTALL file for required versions." >&2;}
5890 - { (exit 1); exit 1; }; }
5894 -for ac_prog in gnumsgfmt gmsgfmt msgfmt
5896 - # Extract the first word of "$ac_prog", so it can be a program name with args.
5897 -set dummy $ac_prog; ac_word=$2
5898 -echo "$as_me:$LINENO: checking for $ac_word" >&5
5899 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
5900 -if test "${ac_cv_prog_MSGFMT+set}" = set; then
5901 - echo $ECHO_N "(cached) $ECHO_C" >&6
5902 -else
5903 - if test -n "$MSGFMT"; then
5904 - ac_cv_prog_MSGFMT="$MSGFMT" # Let the user override the test.
5905 -else
5906 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
5907 -for as_dir in $PATH
5909 - IFS=$as_save_IFS
5910 - test -z "$as_dir" && as_dir=.
5911 - for ac_exec_ext in '' $ac_executable_extensions; do
5912 - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
5913 - ac_cv_prog_MSGFMT="$ac_prog"
5914 - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
5915 - break 2
5916 - fi
5917 -done
5918 -done
5922 -MSGFMT=$ac_cv_prog_MSGFMT
5923 -if test -n "$MSGFMT"; then
5924 - echo "$as_me:$LINENO: result: $MSGFMT" >&5
5925 -echo "${ECHO_T}$MSGFMT" >&6
5926 -else
5927 - echo "$as_me:$LINENO: result: no" >&5
5928 -echo "${ECHO_T}no" >&6
5931 - test -n "$MSGFMT" && break
5932 -done
5934 -if test -z "$MSGFMT"; then
5935 - ac_verc_fail=yes
5936 -else
5937 - # Found it, now check the version.
5938 - echo "$as_me:$LINENO: checking version of $MSGFMT" >&5
5939 -echo $ECHO_N "checking version of $MSGFMT... $ECHO_C" >&6
5940 - ac_prog_version=`$MSGFMT --version 2>&1 | sed -n 's/^.*GNU gettext.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
5941 - case $ac_prog_version in
5942 - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
5943 - 0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*)
5944 - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
5945 - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
5947 - esac
5948 - echo "$as_me:$LINENO: result: $ac_prog_version" >&5
5949 -echo "${ECHO_T}$ac_prog_version" >&6
5951 -if test $ac_verc_fail = yes; then
5952 - MSGFMT=: aux_missing="$aux_missing msgfmt"
5955 -for ac_prog in makeinfo
5957 - # Extract the first word of "$ac_prog", so it can be a program name with args.
5958 -set dummy $ac_prog; ac_word=$2
5959 -echo "$as_me:$LINENO: checking for $ac_word" >&5
5960 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
5961 -if test "${ac_cv_prog_MAKEINFO+set}" = set; then
5962 - echo $ECHO_N "(cached) $ECHO_C" >&6
5963 -else
5964 - if test -n "$MAKEINFO"; then
5965 - ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
5966 -else
5967 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
5968 -for as_dir in $PATH
5970 - IFS=$as_save_IFS
5971 - test -z "$as_dir" && as_dir=.
5972 - for ac_exec_ext in '' $ac_executable_extensions; do
5973 - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
5974 - ac_cv_prog_MAKEINFO="$ac_prog"
5975 - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
5976 - break 2
5977 - fi
5978 -done
5979 -done
5983 -MAKEINFO=$ac_cv_prog_MAKEINFO
5984 -if test -n "$MAKEINFO"; then
5985 - echo "$as_me:$LINENO: result: $MAKEINFO" >&5
5986 -echo "${ECHO_T}$MAKEINFO" >&6
5987 -else
5988 - echo "$as_me:$LINENO: result: no" >&5
5989 -echo "${ECHO_T}no" >&6
5992 - test -n "$MAKEINFO" && break
5993 -done
5995 -if test -z "$MAKEINFO"; then
5996 - ac_verc_fail=yes
5997 -else
5998 - # Found it, now check the version.
5999 - echo "$as_me:$LINENO: checking version of $MAKEINFO" >&5
6000 -echo $ECHO_N "checking version of $MAKEINFO... $ECHO_C" >&6
6001 - ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
6002 - case $ac_prog_version in
6003 - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
6004 - 4.*)
6005 - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
6006 - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
6008 - esac
6009 - echo "$as_me:$LINENO: result: $ac_prog_version" >&5
6010 -echo "${ECHO_T}$ac_prog_version" >&6
6012 -if test $ac_verc_fail = yes; then
6013 - MAKEINFO=: aux_missing="$aux_missing makeinfo"
6016 -for ac_prog in sed
6018 - # Extract the first word of "$ac_prog", so it can be a program name with args.
6019 -set dummy $ac_prog; ac_word=$2
6020 -echo "$as_me:$LINENO: checking for $ac_word" >&5
6021 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
6022 -if test "${ac_cv_prog_SED+set}" = set; then
6023 - echo $ECHO_N "(cached) $ECHO_C" >&6
6024 -else
6025 - if test -n "$SED"; then
6026 - ac_cv_prog_SED="$SED" # Let the user override the test.
6027 -else
6028 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6029 -for as_dir in $PATH
6031 - IFS=$as_save_IFS
6032 - test -z "$as_dir" && as_dir=.
6033 - for ac_exec_ext in '' $ac_executable_extensions; do
6034 - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6035 - ac_cv_prog_SED="$ac_prog"
6036 - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
6037 - break 2
6038 - fi
6039 -done
6040 -done
6044 -SED=$ac_cv_prog_SED
6045 -if test -n "$SED"; then
6046 - echo "$as_me:$LINENO: result: $SED" >&5
6047 -echo "${ECHO_T}$SED" >&6
6048 -else
6049 - echo "$as_me:$LINENO: result: no" >&5
6050 -echo "${ECHO_T}no" >&6
6053 - test -n "$SED" && break
6054 -done
6056 -if test -z "$SED"; then
6057 - ac_verc_fail=yes
6058 -else
6059 - # Found it, now check the version.
6060 - echo "$as_me:$LINENO: checking version of $SED" >&5
6061 -echo $ECHO_N "checking version of $SED... $ECHO_C" >&6
6062 - ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
6063 - case $ac_prog_version in
6064 - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
6065 - 3.0[2-9]*|3.[1-9]*|[4-9]*)
6066 - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
6067 - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
6069 - esac
6070 - echo "$as_me:$LINENO: result: $ac_prog_version" >&5
6071 -echo "${ECHO_T}$ac_prog_version" >&6
6073 -if test $ac_verc_fail = yes; then
6074 - SED=: aux_missing="$aux_missing sed"
6078 -if test "x$with_cvs" != xyes; then
6079 - for ac_prog in autoconf
6081 - # Extract the first word of "$ac_prog", so it can be a program name with args.
6082 -set dummy $ac_prog; ac_word=$2
6083 -echo "$as_me:$LINENO: checking for $ac_word" >&5
6084 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
6085 -if test "${ac_cv_prog_AUTOCONF+set}" = set; then
6086 - echo $ECHO_N "(cached) $ECHO_C" >&6
6087 -else
6088 - if test -n "$AUTOCONF"; then
6089 - ac_cv_prog_AUTOCONF="$AUTOCONF" # Let the user override the test.
6090 -else
6091 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6092 -for as_dir in $PATH
6094 - IFS=$as_save_IFS
6095 - test -z "$as_dir" && as_dir=.
6096 - for ac_exec_ext in '' $ac_executable_extensions; do
6097 - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6098 - ac_cv_prog_AUTOCONF="$ac_prog"
6099 - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
6100 - break 2
6101 - fi
6102 -done
6103 -done
6107 -AUTOCONF=$ac_cv_prog_AUTOCONF
6108 -if test -n "$AUTOCONF"; then
6109 - echo "$as_me:$LINENO: result: $AUTOCONF" >&5
6110 -echo "${ECHO_T}$AUTOCONF" >&6
6111 -else
6112 - echo "$as_me:$LINENO: result: no" >&5
6113 -echo "${ECHO_T}no" >&6
6116 - test -n "$AUTOCONF" && break
6117 -done
6118 -test -n "$AUTOCONF" || AUTOCONF="no"
6120 - case "x$AUTOCONF" in
6121 - xno|x|x:) AUTOCONF=no ;;
6122 - *)
6123 - echo "$as_me:$LINENO: checking whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works" >&5
6124 -echo $ECHO_N "checking whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works... $ECHO_C" >&6
6125 -if test "${libc_cv_autoconf_works+set}" = set; then
6126 - echo $ECHO_N "(cached) $ECHO_C" >&6
6127 -else
6128 - if (cd $srcdir; $AUTOCONF $ACFLAGS configure.in > /dev/null 2>&1); then
6129 - libc_cv_autoconf_works=yes
6130 - else
6131 - libc_cv_autoconf_works=no
6132 - fi
6134 -echo "$as_me:$LINENO: result: $libc_cv_autoconf_works" >&5
6135 -echo "${ECHO_T}$libc_cv_autoconf_works" >&6
6136 - test $libc_cv_autoconf_works = yes || AUTOCONF=no
6137 - ;;
6138 - esac
6139 - test "x$AUTOCONF" != xno || aux_missing="$aux_missing autoconf"
6142 ac_ext=c
6143 ac_cpp='$CPP $CPPFLAGS'
6144 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
6145 @@ -3801,7 +3401,7 @@
6146 echo "${ECHO_T}$ac_prog_version" >&6
6148 if test $ac_verc_fail = yes; then
6149 - AS=: critic_missing=t
6150 + AS=: critic_missing="$critic_missing as"
6153 for ac_prog in $LD
6154 @@ -3862,9 +3462,441 @@
6155 echo "${ECHO_T}$ac_prog_version" >&6
6157 if test $ac_verc_fail = yes; then
6158 - LD=: critic_missing=t
6159 + LD=: critic_missing="$critic_missing ld"
6163 +# We need the physical current working directory. We cannot use the
6164 +# "pwd -P" shell builtin since that's not portable. Instead we try to
6165 +# find a pwd binary. Note that assigning to the PWD environment
6166 +# variable might have some interesting side effects, so we don't do
6167 +# that.
6168 +# Extract the first word of "pwd", so it can be a program name with args.
6169 +set dummy pwd; ac_word=$2
6170 +echo "$as_me:$LINENO: checking for $ac_word" >&5
6171 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
6172 +if test "${ac_cv_path_PWD_P+set}" = set; then
6173 + echo $ECHO_N "(cached) $ECHO_C" >&6
6174 +else
6175 + case $PWD_P in
6176 + [\\/]* | ?:[\\/]*)
6177 + ac_cv_path_PWD_P="$PWD_P" # Let the user override the test with a path.
6178 + ;;
6179 + *)
6180 + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6181 +for as_dir in $PATH
6183 + IFS=$as_save_IFS
6184 + test -z "$as_dir" && as_dir=.
6185 + for ac_exec_ext in '' $ac_executable_extensions; do
6186 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6187 + ac_cv_path_PWD_P="$as_dir/$ac_word$ac_exec_ext"
6188 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
6189 + break 2
6190 + fi
6191 +done
6192 +done
6194 + test -z "$ac_cv_path_PWD_P" && ac_cv_path_PWD_P="no"
6195 + ;;
6196 +esac
6198 +PWD_P=$ac_cv_path_PWD_P
6200 +if test -n "$PWD_P"; then
6201 + echo "$as_me:$LINENO: result: $PWD_P" >&5
6202 +echo "${ECHO_T}$PWD_P" >&6
6203 +else
6204 + echo "$as_me:$LINENO: result: no" >&5
6205 +echo "${ECHO_T}no" >&6
6208 +if test "$PWD_P" = no; then
6209 + { { echo "$as_me:$LINENO: error: *** A pwd binary could not be found." >&5
6210 +echo "$as_me: error: *** A pwd binary could not be found." >&2;}
6211 + { (exit 1); exit 1; }; }
6214 +# These programs are version sensitive.
6216 +for ac_prog in ${ac_tool_prefix}gcc ${ac_tool_prefix}cc
6218 + # Extract the first word of "$ac_prog", so it can be a program name with args.
6219 +set dummy $ac_prog; ac_word=$2
6220 +echo "$as_me:$LINENO: checking for $ac_word" >&5
6221 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
6222 +if test "${ac_cv_prog_CC+set}" = set; then
6223 + echo $ECHO_N "(cached) $ECHO_C" >&6
6224 +else
6225 + if test -n "$CC"; then
6226 + ac_cv_prog_CC="$CC" # Let the user override the test.
6227 +else
6228 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6229 +for as_dir in $PATH
6231 + IFS=$as_save_IFS
6232 + test -z "$as_dir" && as_dir=.
6233 + for ac_exec_ext in '' $ac_executable_extensions; do
6234 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6235 + ac_cv_prog_CC="$ac_prog"
6236 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
6237 + break 2
6238 + fi
6239 +done
6240 +done
6244 +CC=$ac_cv_prog_CC
6245 +if test -n "$CC"; then
6246 + echo "$as_me:$LINENO: result: $CC" >&5
6247 +echo "${ECHO_T}$CC" >&6
6248 +else
6249 + echo "$as_me:$LINENO: result: no" >&5
6250 +echo "${ECHO_T}no" >&6
6253 + test -n "$CC" && break
6254 +done
6256 +if test -z "$CC"; then
6257 + ac_verc_fail=yes
6258 +else
6259 + # Found it, now check the version.
6260 + echo "$as_me:$LINENO: checking version of $CC" >&5
6261 +echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
6262 + ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
6263 + case $ac_prog_version in
6264 + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
6265 + 3.[2-9]*)
6266 + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
6267 + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
6269 + esac
6270 + echo "$as_me:$LINENO: result: $ac_prog_version" >&5
6271 +echo "${ECHO_T}$ac_prog_version" >&6
6273 +if test $ac_verc_fail = yes; then
6274 + critic_missing="$critic_missing gcc"
6277 +for ac_prog in gnumake gmake make
6279 + # Extract the first word of "$ac_prog", so it can be a program name with args.
6280 +set dummy $ac_prog; ac_word=$2
6281 +echo "$as_me:$LINENO: checking for $ac_word" >&5
6282 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
6283 +if test "${ac_cv_prog_MAKE+set}" = set; then
6284 + echo $ECHO_N "(cached) $ECHO_C" >&6
6285 +else
6286 + if test -n "$MAKE"; then
6287 + ac_cv_prog_MAKE="$MAKE" # Let the user override the test.
6288 +else
6289 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6290 +for as_dir in $PATH
6292 + IFS=$as_save_IFS
6293 + test -z "$as_dir" && as_dir=.
6294 + for ac_exec_ext in '' $ac_executable_extensions; do
6295 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6296 + ac_cv_prog_MAKE="$ac_prog"
6297 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
6298 + break 2
6299 + fi
6300 +done
6301 +done
6305 +MAKE=$ac_cv_prog_MAKE
6306 +if test -n "$MAKE"; then
6307 + echo "$as_me:$LINENO: result: $MAKE" >&5
6308 +echo "${ECHO_T}$MAKE" >&6
6309 +else
6310 + echo "$as_me:$LINENO: result: no" >&5
6311 +echo "${ECHO_T}no" >&6
6314 + test -n "$MAKE" && break
6315 +done
6317 +if test -z "$MAKE"; then
6318 + ac_verc_fail=yes
6319 +else
6320 + # Found it, now check the version.
6321 + echo "$as_me:$LINENO: checking version of $MAKE" >&5
6322 +echo $ECHO_N "checking version of $MAKE... $ECHO_C" >&6
6323 + ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
6324 + case $ac_prog_version in
6325 + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
6326 + 3.79* | 3.[89]*)
6327 + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
6328 + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
6330 + esac
6331 + echo "$as_me:$LINENO: result: $ac_prog_version" >&5
6332 +echo "${ECHO_T}$ac_prog_version" >&6
6334 +if test $ac_verc_fail = yes; then
6335 + critic_missing="$critic_missing make"
6339 +for ac_prog in gnumsgfmt gmsgfmt msgfmt
6341 + # Extract the first word of "$ac_prog", so it can be a program name with args.
6342 +set dummy $ac_prog; ac_word=$2
6343 +echo "$as_me:$LINENO: checking for $ac_word" >&5
6344 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
6345 +if test "${ac_cv_prog_MSGFMT+set}" = set; then
6346 + echo $ECHO_N "(cached) $ECHO_C" >&6
6347 +else
6348 + if test -n "$MSGFMT"; then
6349 + ac_cv_prog_MSGFMT="$MSGFMT" # Let the user override the test.
6350 +else
6351 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6352 +for as_dir in $PATH
6354 + IFS=$as_save_IFS
6355 + test -z "$as_dir" && as_dir=.
6356 + for ac_exec_ext in '' $ac_executable_extensions; do
6357 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6358 + ac_cv_prog_MSGFMT="$ac_prog"
6359 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
6360 + break 2
6361 + fi
6362 +done
6363 +done
6367 +MSGFMT=$ac_cv_prog_MSGFMT
6368 +if test -n "$MSGFMT"; then
6369 + echo "$as_me:$LINENO: result: $MSGFMT" >&5
6370 +echo "${ECHO_T}$MSGFMT" >&6
6371 +else
6372 + echo "$as_me:$LINENO: result: no" >&5
6373 +echo "${ECHO_T}no" >&6
6376 + test -n "$MSGFMT" && break
6377 +done
6379 +if test -z "$MSGFMT"; then
6380 + ac_verc_fail=yes
6381 +else
6382 + # Found it, now check the version.
6383 + echo "$as_me:$LINENO: checking version of $MSGFMT" >&5
6384 +echo $ECHO_N "checking version of $MSGFMT... $ECHO_C" >&6
6385 + ac_prog_version=`$MSGFMT --version 2>&1 | sed -n 's/^.*GNU gettext.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
6386 + case $ac_prog_version in
6387 + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
6388 + 0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*)
6389 + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
6390 + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
6392 + esac
6393 + echo "$as_me:$LINENO: result: $ac_prog_version" >&5
6394 +echo "${ECHO_T}$ac_prog_version" >&6
6396 +if test $ac_verc_fail = yes; then
6397 + MSGFMT=: aux_missing="$aux_missing msgfmt"
6400 +for ac_prog in makeinfo
6402 + # Extract the first word of "$ac_prog", so it can be a program name with args.
6403 +set dummy $ac_prog; ac_word=$2
6404 +echo "$as_me:$LINENO: checking for $ac_word" >&5
6405 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
6406 +if test "${ac_cv_prog_MAKEINFO+set}" = set; then
6407 + echo $ECHO_N "(cached) $ECHO_C" >&6
6408 +else
6409 + if test -n "$MAKEINFO"; then
6410 + ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
6411 +else
6412 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6413 +for as_dir in $PATH
6415 + IFS=$as_save_IFS
6416 + test -z "$as_dir" && as_dir=.
6417 + for ac_exec_ext in '' $ac_executable_extensions; do
6418 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6419 + ac_cv_prog_MAKEINFO="$ac_prog"
6420 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
6421 + break 2
6422 + fi
6423 +done
6424 +done
6428 +MAKEINFO=$ac_cv_prog_MAKEINFO
6429 +if test -n "$MAKEINFO"; then
6430 + echo "$as_me:$LINENO: result: $MAKEINFO" >&5
6431 +echo "${ECHO_T}$MAKEINFO" >&6
6432 +else
6433 + echo "$as_me:$LINENO: result: no" >&5
6434 +echo "${ECHO_T}no" >&6
6437 + test -n "$MAKEINFO" && break
6438 +done
6440 +if test -z "$MAKEINFO"; then
6441 + ac_verc_fail=yes
6442 +else
6443 + # Found it, now check the version.
6444 + echo "$as_me:$LINENO: checking version of $MAKEINFO" >&5
6445 +echo $ECHO_N "checking version of $MAKEINFO... $ECHO_C" >&6
6446 + ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
6447 + case $ac_prog_version in
6448 + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
6449 + 4.*)
6450 + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
6451 + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
6453 + esac
6454 + echo "$as_me:$LINENO: result: $ac_prog_version" >&5
6455 +echo "${ECHO_T}$ac_prog_version" >&6
6457 +if test $ac_verc_fail = yes; then
6458 + MAKEINFO=: aux_missing="$aux_missing makeinfo"
6461 +for ac_prog in sed
6463 + # Extract the first word of "$ac_prog", so it can be a program name with args.
6464 +set dummy $ac_prog; ac_word=$2
6465 +echo "$as_me:$LINENO: checking for $ac_word" >&5
6466 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
6467 +if test "${ac_cv_prog_SED+set}" = set; then
6468 + echo $ECHO_N "(cached) $ECHO_C" >&6
6469 +else
6470 + if test -n "$SED"; then
6471 + ac_cv_prog_SED="$SED" # Let the user override the test.
6472 +else
6473 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6474 +for as_dir in $PATH
6476 + IFS=$as_save_IFS
6477 + test -z "$as_dir" && as_dir=.
6478 + for ac_exec_ext in '' $ac_executable_extensions; do
6479 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6480 + ac_cv_prog_SED="$ac_prog"
6481 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
6482 + break 2
6483 + fi
6484 +done
6485 +done
6489 +SED=$ac_cv_prog_SED
6490 +if test -n "$SED"; then
6491 + echo "$as_me:$LINENO: result: $SED" >&5
6492 +echo "${ECHO_T}$SED" >&6
6493 +else
6494 + echo "$as_me:$LINENO: result: no" >&5
6495 +echo "${ECHO_T}no" >&6
6498 + test -n "$SED" && break
6499 +done
6501 +if test -z "$SED"; then
6502 + ac_verc_fail=yes
6503 +else
6504 + # Found it, now check the version.
6505 + echo "$as_me:$LINENO: checking version of $SED" >&5
6506 +echo $ECHO_N "checking version of $SED... $ECHO_C" >&6
6507 + ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
6508 + case $ac_prog_version in
6509 + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
6510 + 3.0[2-9]*|3.[1-9]*|[4-9]*)
6511 + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
6512 + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
6514 + esac
6515 + echo "$as_me:$LINENO: result: $ac_prog_version" >&5
6516 +echo "${ECHO_T}$ac_prog_version" >&6
6518 +if test $ac_verc_fail = yes; then
6519 + SED=: aux_missing="$aux_missing sed"
6523 +if test "x$with_cvs" != xyes; then
6524 + for ac_prog in autoconf
6526 + # Extract the first word of "$ac_prog", so it can be a program name with args.
6527 +set dummy $ac_prog; ac_word=$2
6528 +echo "$as_me:$LINENO: checking for $ac_word" >&5
6529 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
6530 +if test "${ac_cv_prog_AUTOCONF+set}" = set; then
6531 + echo $ECHO_N "(cached) $ECHO_C" >&6
6532 +else
6533 + if test -n "$AUTOCONF"; then
6534 + ac_cv_prog_AUTOCONF="$AUTOCONF" # Let the user override the test.
6535 +else
6536 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6537 +for as_dir in $PATH
6539 + IFS=$as_save_IFS
6540 + test -z "$as_dir" && as_dir=.
6541 + for ac_exec_ext in '' $ac_executable_extensions; do
6542 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6543 + ac_cv_prog_AUTOCONF="$ac_prog"
6544 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
6545 + break 2
6546 + fi
6547 +done
6548 +done
6552 +AUTOCONF=$ac_cv_prog_AUTOCONF
6553 +if test -n "$AUTOCONF"; then
6554 + echo "$as_me:$LINENO: result: $AUTOCONF" >&5
6555 +echo "${ECHO_T}$AUTOCONF" >&6
6556 +else
6557 + echo "$as_me:$LINENO: result: no" >&5
6558 +echo "${ECHO_T}no" >&6
6561 + test -n "$AUTOCONF" && break
6562 +done
6563 +test -n "$AUTOCONF" || AUTOCONF="no"
6565 + case "x$AUTOCONF" in
6566 + xno|x|x:) AUTOCONF=no ;;
6567 + *)
6568 + echo "$as_me:$LINENO: checking whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works" >&5
6569 +echo $ECHO_N "checking whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works... $ECHO_C" >&6
6570 +if test "${libc_cv_autoconf_works+set}" = set; then
6571 + echo $ECHO_N "(cached) $ECHO_C" >&6
6572 +else
6573 + if (cd $srcdir; $AUTOCONF $ACFLAGS configure.in > /dev/null 2>&1); then
6574 + libc_cv_autoconf_works=yes
6575 + else
6576 + libc_cv_autoconf_works=no
6577 + fi
6579 +echo "$as_me:$LINENO: result: $libc_cv_autoconf_works" >&5
6580 +echo "${ECHO_T}$libc_cv_autoconf_works" >&6
6581 + test $libc_cv_autoconf_works = yes || AUTOCONF=no
6582 + ;;
6583 + esac
6584 + test "x$AUTOCONF" != xno || aux_missing="$aux_missing autoconf"
6587 +test -n "$critic_missing" && { { echo "$as_me:$LINENO: error:
6588 +*** These critical programs are missing or too old:$critic_missing
6589 +*** Check the INSTALL file for required versions." >&5
6590 +echo "$as_me: error:
6591 +*** These critical programs are missing or too old:$critic_missing
6592 +*** Check the INSTALL file for required versions." >&2;}
6593 + { (exit 1); exit 1; }; }
6595 test -n "$aux_missing" && { echo "$as_me:$LINENO: WARNING:
6596 *** These auxiliary programs are missing or incompatible versions:$aux_missing
6597 @@ -4357,7 +4389,12 @@
6598 #include "confdefs.h"
6599 /* Nothing whatsoever. */
6601 -if ${CC-cc} $CFLAGS -c conftest.S 2>/dev/null; then
6602 +if { ac_try='${CC-cc} $CFLAGS -c conftest.S 1>&5'
6603 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6604 + (eval $ac_try) 2>&5
6605 + ac_status=$?
6606 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6607 + (exit $ac_status); }; }; then
6608 libc_cv_need_minus_P=no
6609 else
6610 libc_cv_need_minus_P=yes
6611 @@ -4380,7 +4417,12 @@
6612 .text
6614 libc_cv_dot_text=
6615 -if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
6616 +if { ac_try='${CC-cc} $CFLAGS -c conftest.s 1>&5'
6617 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6618 + (eval $ac_try) 2>&5
6619 + ac_status=$?
6620 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6621 + (exit $ac_status); }; }; then
6622 libc_cv_dot_text=.text
6624 rm -f conftest*
6625 @@ -4406,7 +4448,12 @@
6626 ${ac_globl} foo
6627 foo:
6629 - if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
6630 + if { ac_try='${CC-cc} $CFLAGS -c conftest.s 1>&5'
6631 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6632 + (eval $ac_try) 2>&5
6633 + ac_status=$?
6634 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6635 + (exit $ac_status); }; }; then
6636 libc_cv_asm_global_directive=${ac_globl}
6638 rm -f conftest*
6639 @@ -4441,9 +4488,10 @@
6640 # (but it doesn't work), so we must do a linking check to be sure.
6641 cat > conftest1.c <<\EOF
6642 extern int glibc_conftest_frobozz;
6643 -main () { printf ("%d\n", glibc_conftest_frobozz); }
6644 +void _start() { glibc_conftest_frobozz = 1; }
6646 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
6647 + -nostartfiles -nostdlib \
6648 -o conftest conftest.s conftest1.c 1>&5 2>&5; then
6649 libc_cv_asm_set_directive=yes
6650 else
6651 @@ -4475,7 +4523,12 @@
6652 foo:
6653 .byte 1
6655 - if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
6656 + if { ac_try='${CC-cc} $CFLAGS -c conftest.s 1>&5'
6657 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6658 + (eval $ac_try) 2>&5
6659 + ac_status=$?
6660 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6661 + (exit $ac_status); }; }; then
6662 libc_cv_asm_type_prefix=${ac_try_prefix}
6664 rm -f conftest*
6665 @@ -4692,7 +4745,12 @@
6666 int bar __attribute__ ((visibility ("protected"))) = 1;
6668 libc_cv_visibility_attribute=no
6669 - if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
6670 + if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5'
6671 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6672 + (eval $ac_try) 2>&5
6673 + ac_status=$?
6674 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6675 + (exit $ac_status); }; }; then
6676 if grep '\.hidden.*foo' conftest.s >/dev/null; then
6677 if grep '\.protected.*bar' conftest.s >/dev/null; then
6678 libc_cv_visibility_attribute=yes
6679 @@ -4724,7 +4782,12 @@
6680 int bar (int x) { return x; }
6682 libc_cv_broken_visibility_attribute=yes
6683 - if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
6684 + if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s1>&5'
6685 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6686 + (eval $ac_try) 2>&5
6687 + ac_status=$?
6688 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6689 + (exit $ac_status); }; }; then
6690 if grep '\.hidden[ _]foo' conftest.s >/dev/null; then
6691 libc_cv_broken_visibility_attribute=no
6693 @@ -4756,7 +4819,12 @@
6694 int dfoo = 1;
6696 libc_cv_broken_alias_attribute=yes
6697 - if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
6698 + if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5'
6699 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6700 + (eval $ac_try) 2>&5
6701 + ac_status=$?
6702 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6703 + (exit $ac_status); }; }; then
6704 if grep 'xyzzy' conftest.s >/dev/null &&
6705 grep 'abccb' conftest.s >/dev/null; then
6706 libc_cv_broken_alias_attribute=no
6707 @@ -5128,7 +5196,7 @@
6708 echo $ECHO_N "(cached) $ECHO_C" >&6
6709 else
6710 cat > conftest.$ac_ext <<EOF
6711 -#line 5131 "configure"
6712 +#line 5199 "configure"
6713 #include "confdefs.h"
6714 void underscore_test(void) {
6715 return; }
6716 @@ -5180,7 +5248,12 @@
6717 .weak foo
6718 .weak bar; bar = foo
6720 -if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
6721 +if { ac_try='${CC-cc} $CFLAGS -c conftest.s 1>&5'
6722 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6723 + (eval $ac_try) 2>&5
6724 + ac_status=$?
6725 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6726 + (exit $ac_status); }; }; then
6727 libc_cv_asm_weak_directive=yes
6728 else
6729 libc_cv_asm_weak_directive=no
6730 @@ -5205,7 +5278,12 @@
6731 ${libc_cv_asm_global_directive} baz
6732 baz:
6734 - if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
6735 + if { ac_try='${CC-cc} $CFLAGS -c conftest.s 1>&5'
6736 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6737 + (eval $ac_try) 2>&5
6738 + ac_status=$?
6739 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6740 + (exit $ac_status); }; }; then
6741 libc_cv_asm_weakext_directive=yes
6742 else
6743 libc_cv_asm_weakext_directive=no
6744 @@ -5272,6 +5350,57 @@
6746 esac
6748 +echo "$as_me:$LINENO: checking if -g produces usable source locations for assembler-with-cpp" >&5
6749 +echo $ECHO_N "checking if -g produces usable source locations for assembler-with-cpp... $ECHO_C" >&6
6750 +if test "${libc_cv_cpp_asm_debuginfo+set}" = set; then
6751 + echo $ECHO_N "(cached) $ECHO_C" >&6
6752 +else
6753 + cat > conftest.S <<EOF
6754 +#include "confdefs.h"
6756 +/* comment on
6757 + two lines */
6758 + ${libc_cv_dot_text}
6759 + ${libc_cv_asm_global_directive} foo
6760 +foo:
6761 + /* Unfortunately this test only works for a real instruction,
6762 + not for any of the machine-independent pseudo-ops.
6763 + So we just have to assume everybody has a "nop". */
6764 + nop
6765 + /* comment */
6766 + nop
6767 + /* comment */
6768 + nop
6769 +EOF
6770 +if { ac_try='${CC-cc} $CFLAGS -g -c conftest.S 1>&5'
6771 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6772 + (eval $ac_try) 2>&5
6773 + ac_status=$?
6774 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6775 + (exit $ac_status); }; } &&
6776 + ac_pattern='conftest\.S'
6777 + { ac_try='readelf --debug-dump=line conftest.o |
6778 + grep $ac_pattern 1>&5'
6779 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6780 + (eval $ac_try) 2>&5
6781 + ac_status=$?
6782 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
6783 + (exit $ac_status); }; }; then
6784 + libc_cv_cpp_asm_debuginfo=yes
6785 +else
6786 + libc_cv_cpp_asm_debuginfo=no
6788 +rm -f conftest*
6790 +echo "$as_me:$LINENO: result: $libc_cv_cpp_asm_debuginfo" >&5
6791 +echo "${ECHO_T}$libc_cv_cpp_asm_debuginfo" >&6
6792 +if test $libc_cv_cpp_asm_debuginfo = yes; then
6793 + cat >>confdefs.h <<\_ACEOF
6794 +#define HAVE_CPP_ASM_DEBUGINFO 1
6795 +_ACEOF
6799 echo "$as_me:$LINENO: checking for ld --no-whole-archive" >&5
6800 echo $ECHO_N "checking for ld --no-whole-archive... $ECHO_C" >&6
6801 if test "${libc_cv_ld_no_whole_archive+set}" = set; then
6802 @@ -5393,7 +5522,7 @@
6803 echo $ECHO_N "(cached) $ECHO_C" >&6
6804 else
6805 cat > conftest.c <<EOF
6806 -#line 5396 "configure"
6807 +#line 5525 "configure"
6808 static char *__EH_FRAME_BEGIN__;
6809 _start ()
6811 @@ -5493,7 +5622,7 @@
6812 echo $ECHO_N "(cached) $ECHO_C" >&6
6813 else
6814 cat > conftest.c <<EOF
6815 -#line 5496 "configure"
6816 +#line 5625 "configure"
6817 int foo (int a)
6819 a = __builtin_expect (a, 10);
6820 @@ -5561,7 +5690,7 @@
6821 echo $ECHO_N "(cached) $ECHO_C" >&6
6822 else
6823 cat > conftest.c <<EOF
6824 -#line 5564 "configure"
6825 +#line 5693 "configure"
6826 int foo (int a)
6828 static const int ar[] = { &&l1 - &&l1, &&l2 - &&l1 };
6829 @@ -6335,8 +6464,8 @@
6830 *) dest=$srcdir/$dir ;;
6831 esac
6832 if test -r $dest/configure; then
6833 - echo "$as_me:$LINENO: result: running configure fragment for $dest" >&5
6834 -echo "${ECHO_T}running configure fragment for $dest" >&6
6835 + echo "$as_me:$LINENO: result: running configure fragment for $dir" >&5
6836 +echo "${ECHO_T}running configure fragment for $dir" >&6
6837 . $dest/configure
6840 @@ -7176,6 +7305,7 @@
6841 s,@LIBS@,$LIBS,;t t
6842 s,@with_fp@,$with_fp,;t t
6843 s,@with_cvs@,$with_cvs,;t t
6844 +s,@enable_check_abi@,$enable_check_abi,;t t
6845 s,@oldest_abi@,$oldest_abi,;t t
6846 s,@subdirs@,$subdirs,;t t
6847 s,@force_install@,$force_install,;t t
6848 @@ -7194,13 +7324,7 @@
6849 s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
6850 s,@INSTALL_DATA@,$INSTALL_DATA,;t t
6851 s,@LN_S@,$LN_S,;t t
6852 -s,@PWD_P@,$PWD_P,;t t
6853 s,@CC@,$CC,;t t
6854 -s,@MAKE@,$MAKE,;t t
6855 -s,@MSGFMT@,$MSGFMT,;t t
6856 -s,@MAKEINFO@,$MAKEINFO,;t t
6857 -s,@SED@,$SED,;t t
6858 -s,@AUTOCONF@,$AUTOCONF,;t t
6859 s,@CFLAGS@,$CFLAGS,;t t
6860 s,@LDFLAGS@,$LDFLAGS,;t t
6861 s,@CPPFLAGS@,$CPPFLAGS,;t t
6862 @@ -7216,6 +7340,12 @@
6863 s,@MIG@,$MIG,;t t
6864 s,@AS@,$AS,;t t
6865 s,@LD@,$LD,;t t
6866 +s,@PWD_P@,$PWD_P,;t t
6867 +s,@MAKE@,$MAKE,;t t
6868 +s,@MSGFMT@,$MSGFMT,;t t
6869 +s,@MAKEINFO@,$MAKEINFO,;t t
6870 +s,@SED@,$SED,;t t
6871 +s,@AUTOCONF@,$AUTOCONF,;t t
6872 s,@CCVERSION@,$CCVERSION,;t t
6873 s,@SYSINCLUDES@,$SYSINCLUDES,;t t
6874 s,@libc_cv_gcc_static_libgcc@,$libc_cv_gcc_static_libgcc,;t t
6875 @@ -7237,6 +7367,7 @@
6876 s,@libc_cv_Bgroup@,$libc_cv_Bgroup,;t t
6877 s,@libc_cv_z_combreloc@,$libc_cv_z_combreloc,;t t
6878 s,@libc_cv_have_initfini@,$libc_cv_have_initfini,;t t
6879 +s,@libc_cv_cpp_asm_debuginfo@,$libc_cv_cpp_asm_debuginfo,;t t
6880 s,@no_whole_archive@,$no_whole_archive,;t t
6881 s,@exceptions@,$exceptions,;t t
6882 s,@LIBGD@,$LIBGD,;t t
6883 diff -u -udbrN glibc-2.3.2/configure.in glibc-2.3.2-200304020432/configure.in
6884 --- glibc-2.3.2/configure.in Wed Feb 26 01:46:31 2003
6885 +++ glibc-2.3.2-200304020432/configure.in Tue Apr 1 08:53:27 2003
6886 @@ -113,6 +113,14 @@
6887 [enable_sanity=$enableval],
6888 [enable_sanity=yes])
6890 +AC_SUBST(enable_check_abi)
6891 +AC_ARG_ENABLE([check-abi],
6892 + AC_HELP_STRING([--enable-check-abi],
6893 + [do "make check-abi" in "make check" (no/warn/yes)
6894 + @<:@default=no@:>@]),
6895 + [enable_check_abi=$enableval],
6896 + [enable_check_abi=no])
6898 dnl Arguments to enable or disable building the static, shared, profiled,
6899 dnl and -fomit-frame-pointer libraries.
6900 dnl I've disabled this for now since we cannot build glibc without static
6901 @@ -378,8 +386,33 @@
6902 m68k) base_machine=m68k machine=m68k/m68020 ;;
6903 m88???) base_machine=m88k machine=m88k/$machine ;;
6904 m88k) base_machine=m88k machine=m88k/m88100 ;;
6905 -mips64*) base_machine=mips64 machine=mips/mips64/$machine ;;
6906 -mips*) base_machine=mips machine=mips/$machine ;;
6907 +mips64*) base_machine=mips64
6908 + case "$CC $CPPFLAGS $CFLAGS " in
6909 + *" -mabi=n32 "*) mips_cc_abi=n32 ;;
6910 + *" -mabi=64 "*|*" -mabi=n64 "*) mips_cc_abi=64 ;;
6911 + *" -mabi=32 "*|*" -mabi=o32 "*) mips_cc_abi=32 ;;
6912 + *) mips_cc_abi=default ;;
6913 + esac
6914 + case $config_os in
6915 + *abin32*) mips_config_abi=n32 ;;
6916 + *abi64*|*abin64*) mips_config_abi=64 ;;
6917 + *abi32*|*abio32*) mips_config_abi=32 ;;
6918 + *) mips_config_abi=$mips_cc_abi ;;
6919 + esac
6920 + case $mips_config_abi in
6921 + default) machine=mips/mips64/n32 mips_config_abi=n32 ;;
6922 + n32) machine=mips/mips64/n32 ;;
6923 + 64) machine=mips/mips64/n64 ;;
6924 + 32) machine=mips/mips32/kern64 ;;
6925 + esac
6926 + machine=$machine/$config_machine
6927 + if test $mips_config_abi != $mips_cc_abi; then
6928 + # This won't make it to config.make, but we want to
6929 + # set this in case configure tests depend on it.
6930 + CPPFLAGS="$CPPFLAGS -mabi=$mips_config_abi"
6931 + fi
6932 + ;;
6933 +mips*) base_machine=mips machine=mips/mips32/$machine ;;
6934 powerpc) base_machine=powerpc machine=powerpc/powerpc32 ;;
6935 powerpc64) base_machine=powerpc machine=powerpc/powerpc64 ;;
6936 s390) base_machine=s390 machine=s390/s390-32 ;;
6937 @@ -637,6 +670,23 @@
6939 AC_PROG_LN_S
6941 +AC_PROG_CC
6942 +if test $host != $build; then
6943 + AC_CHECK_PROGS(BUILD_CC, gcc cc)
6945 +AC_SUBST(cross_compiling)
6946 +AC_PROG_CPP
6947 +LIBC_PROG_BINUTILS
6948 +AC_SUBST(MIG)dnl Needed by sysdeps/mach/configure.in
6950 +# Accept binutils 2.13 or newer.
6951 +AC_CHECK_PROG_VER(AS, $AS, --version,
6952 + [GNU assembler.* \([0-9]*\.[0-9.]*\)],
6953 + [2.1[3-9]*], AS=: critic_missing="$critic_missing as")
6954 +AC_CHECK_PROG_VER(LD, $LD, --version,
6955 + [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
6956 + [2.1[3-9]*], LD=: critic_missing="$critic_missing ld")
6958 # We need the physical current working directory. We cannot use the
6959 # "pwd -P" shell builtin since that's not portable. Instead we try to
6960 # find a pwd binary. Note that assigning to the PWD environment
6961 @@ -656,14 +706,6 @@
6962 [GNU Make[^0-9]*\([0-9][0-9.]*\)],
6963 [3.79* | 3.[89]*], critic_missing="$critic_missing make")
6966 -if test -n "$critic_missing"; then
6967 -AC_MSG_ERROR([
6968 -*** These critical programs are missing or too old:$critic_missing
6969 -*** Check the INSTALL file for required versions.])
6973 AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
6974 [GNU gettext.* \([0-9]*\.[0-9.]*\)],
6975 [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
6976 @@ -695,22 +737,9 @@
6977 test "x$AUTOCONF" != xno || aux_missing="$aux_missing autoconf"
6980 -AC_PROG_CC
6981 -if test $host != $build; then
6982 - AC_CHECK_PROGS(BUILD_CC, gcc cc)
6984 -AC_SUBST(cross_compiling)
6985 -AC_PROG_CPP
6986 -LIBC_PROG_BINUTILS
6987 -AC_SUBST(MIG)dnl Needed by sysdeps/mach/configure.in
6989 -# Accept binutils 2.13 or newer.
6990 -AC_CHECK_PROG_VER(AS, $AS, --version,
6991 - [GNU assembler.* \([0-9]*\.[0-9.]*\)],
6992 - [2.1[3-9]*], AS=: critic_missing=t)
6993 -AC_CHECK_PROG_VER(LD, $LD, --version,
6994 - [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
6995 - [2.1[3-9]*], LD=: critic_missing=t)
6996 +test -n "$critic_missing" && AC_MSG_ERROR([
6997 +*** These critical programs are missing or too old:$critic_missing
6998 +*** Check the INSTALL file for required versions.])
7000 test -n "$aux_missing" && AC_MSG_WARN([
7001 *** These auxiliary programs are missing or incompatible versions:$aux_missing
7002 @@ -889,7 +918,7 @@
7003 #include "confdefs.h"
7004 /* Nothing whatsoever. */
7006 -if ${CC-cc} $CFLAGS -c conftest.S 2>/dev/null; then
7007 +if AC_TRY_COMMAND(${CC-cc} $CFLAGS -c conftest.S 1>&AS_MESSAGE_LOG_FD); then
7008 libc_cv_need_minus_P=no
7009 else
7010 libc_cv_need_minus_P=yes
7011 @@ -906,7 +935,7 @@
7012 .text
7014 libc_cv_dot_text=
7015 -if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
7016 +if AC_TRY_COMMAND(${CC-cc} $CFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
7017 libc_cv_dot_text=.text
7019 rm -f conftest*])
7020 @@ -925,7 +954,7 @@
7021 ${ac_globl} foo
7022 foo:
7024 - if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
7025 + if AC_TRY_COMMAND(${CC-cc} $CFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
7026 libc_cv_asm_global_directive=${ac_globl}
7028 rm -f conftest*
7029 @@ -948,9 +977,10 @@
7030 # (but it doesn't work), so we must do a linking check to be sure.
7031 cat > conftest1.c <<\EOF
7032 extern int glibc_conftest_frobozz;
7033 -main () { printf ("%d\n", glibc_conftest_frobozz); }
7034 +void _start() { glibc_conftest_frobozz = 1; }
7036 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
7037 + -nostartfiles -nostdlib \
7038 -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
7039 libc_cv_asm_set_directive=yes
7040 else
7041 @@ -973,7 +1003,7 @@
7042 foo:
7043 .byte 1
7045 - if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
7046 + if AC_TRY_COMMAND(${CC-cc} $CFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
7047 libc_cv_asm_type_prefix=${ac_try_prefix}
7049 rm -f conftest*
7050 @@ -1111,7 +1141,7 @@
7051 int bar __attribute__ ((visibility ("protected"))) = 1;
7053 libc_cv_visibility_attribute=no
7054 - if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
7055 + if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
7056 if grep '\.hidden.*foo' conftest.s >/dev/null; then
7057 if grep '\.protected.*bar' conftest.s >/dev/null; then
7058 libc_cv_visibility_attribute=yes
7059 @@ -1134,7 +1164,7 @@
7060 int bar (int x) { return x; }
7062 libc_cv_broken_visibility_attribute=yes
7063 - if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
7064 + if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s1>&AS_MESSAGE_LOG_FD); then
7065 changequote(,)dnl
7066 if grep '\.hidden[ _]foo' conftest.s >/dev/null; then
7067 changequote([,])dnl
7068 @@ -1159,7 +1189,7 @@
7069 int dfoo = 1;
7071 libc_cv_broken_alias_attribute=yes
7072 - if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
7073 + if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
7074 if grep 'xyzzy' conftest.s >/dev/null &&
7075 grep 'abccb' conftest.s >/dev/null; then
7076 libc_cv_broken_alias_attribute=no
7077 @@ -1398,7 +1428,7 @@
7078 .weak foo
7079 .weak bar; bar = foo
7081 -if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
7082 +if AC_TRY_COMMAND(${CC-cc} $CFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
7083 libc_cv_asm_weak_directive=yes
7084 else
7085 libc_cv_asm_weak_directive=no
7086 @@ -1418,7 +1448,7 @@
7087 ${libc_cv_asm_global_directive} baz
7088 baz:
7090 - if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
7091 + if AC_TRY_COMMAND(${CC-cc} $CFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
7092 libc_cv_asm_weakext_directive=yes
7093 else
7094 libc_cv_asm_weakext_directive=no
7095 @@ -1462,6 +1492,38 @@
7097 esac
7099 +AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
7100 + libc_cv_cpp_asm_debuginfo, [dnl
7101 +cat > conftest.S <<EOF
7102 +#include "confdefs.h"
7104 +/* comment on
7105 + two lines */
7106 + ${libc_cv_dot_text}
7107 + ${libc_cv_asm_global_directive} foo
7108 +foo:
7109 + /* Unfortunately this test only works for a real instruction,
7110 + not for any of the machine-independent pseudo-ops.
7111 + So we just have to assume everybody has a "nop". */
7112 + nop
7113 + /* comment */
7114 + nop
7115 + /* comment */
7116 + nop
7117 +EOF
7118 +if AC_TRY_COMMAND([${CC-cc} $CFLAGS -g -c conftest.S 1>&AS_MESSAGE_LOG_FD]) &&
7119 + ac_pattern='conftest\.S'
7120 + AC_TRY_COMMAND([readelf --debug-dump=line conftest.o |
7121 + grep $ac_pattern 1>&AS_MESSAGE_LOG_FD]); then
7122 + libc_cv_cpp_asm_debuginfo=yes
7123 +else
7124 + libc_cv_cpp_asm_debuginfo=no
7126 +rm -f conftest*])AC_SUBST(libc_cv_cpp_asm_debuginfo)
7127 +if test $libc_cv_cpp_asm_debuginfo = yes; then
7128 + AC_DEFINE(HAVE_CPP_ASM_DEBUGINFO)
7131 AC_CACHE_CHECK(for ld --no-whole-archive, libc_cv_ld_no_whole_archive, [dnl
7132 cat > conftest.c <<\EOF
7133 _start () {}
7134 @@ -1732,7 +1794,7 @@
7135 *) dest=$srcdir/$dir ;;
7136 esac
7137 if test -r $dest/configure; then
7138 - AC_MSG_RESULT(running configure fragment for $dest)
7139 + AC_MSG_RESULT(running configure fragment for $dir)
7140 . $dest/configure
7143 diff -u -udbrN glibc-2.3.2/csu/Makefile glibc-2.3.2-200304020432/csu/Makefile
7144 --- glibc-2.3.2/csu/Makefile Tue Dec 31 23:24:37 2002
7145 +++ glibc-2.3.2-200304020432/csu/Makefile Sun Mar 23 00:00:17 2003
7146 @@ -1,5 +1,5 @@
7147 # Makefile for csu code for GNU C library.
7148 -# Copyright (C) 1995,96,97,98,99,2000,01,2002 Free Software Foundation, Inc.
7149 +# Copyright (C) 1995,96,97,98,99,2000,01,02,2003 Free Software Foundation, Inc.
7150 # This file is part of the GNU C Library.
7152 # The GNU C Library is free software; you can redistribute it and/or
7153 @@ -41,6 +41,8 @@
7154 abi-note.S init.c munch-tmpl.c
7155 generated = version-info.h
7156 before-compile = $(objpfx)version-info.h
7158 +tests := tst-atomic tst-atomic-long
7160 all: # Make this the default target; it will be defined in Rules.
7162 diff -u -udbrN glibc-2.3.2/csu/tst-atomic-long.c glibc-2.3.2-200304020432/csu/tst-atomic-long.c
7163 --- glibc-2.3.2/csu/tst-atomic-long.c Thu Jan 1 01:00:00 1970
7164 +++ glibc-2.3.2-200304020432/csu/tst-atomic-long.c Sun Mar 23 00:00:17 2003
7165 @@ -0,0 +1,28 @@
7166 +/* Tests for atomic.h macros.
7167 + Copyright (C) 2003 Free Software Foundation, Inc.
7168 + This file is part of the GNU C Library.
7169 + Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
7171 + The GNU C Library is free software; you can redistribute it and/or
7172 + modify it under the terms of the GNU Lesser General Public
7173 + License as published by the Free Software Foundation; either
7174 + version 2.1 of the License, or (at your option) any later version.
7176 + The GNU C Library is distributed in the hope that it will be useful,
7177 + but WITHOUT ANY WARRANTY; without even the implied warranty of
7178 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7179 + Lesser General Public License for more details.
7181 + You should have received a copy of the GNU Lesser General Public
7182 + License along with the GNU C Library; if not, write to the Free
7183 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
7184 + 02111-1307 USA. */
7186 +#include <bits/wordsize.h>
7188 +#define atomic_t long
7189 +#if __WORDSIZE == 64
7190 +# define TEST_ATOMIC64 1
7191 +#endif
7193 +#include "tst-atomic.c"
7194 diff -u -udbrN glibc-2.3.2/csu/tst-atomic.c glibc-2.3.2-200304020432/csu/tst-atomic.c
7195 --- glibc-2.3.2/csu/tst-atomic.c Thu Jan 1 01:00:00 1970
7196 +++ glibc-2.3.2-200304020432/csu/tst-atomic.c Wed Mar 26 05:01:47 2003
7197 @@ -0,0 +1,373 @@
7198 +/* Tests for atomic.h macros.
7199 + Copyright (C) 2003 Free Software Foundation, Inc.
7200 + This file is part of the GNU C Library.
7201 + Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
7203 + The GNU C Library is free software; you can redistribute it and/or
7204 + modify it under the terms of the GNU Lesser General Public
7205 + License as published by the Free Software Foundation; either
7206 + version 2.1 of the License, or (at your option) any later version.
7208 + The GNU C Library is distributed in the hope that it will be useful,
7209 + but WITHOUT ANY WARRANTY; without even the implied warranty of
7210 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7211 + Lesser General Public License for more details.
7213 + You should have received a copy of the GNU Lesser General Public
7214 + License along with the GNU C Library; if not, write to the Free
7215 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
7216 + 02111-1307 USA. */
7218 +#include <stdio.h>
7219 +#include <atomic.h>
7221 +#ifndef atomic_t
7222 +# define atomic_t int
7223 +#endif
7225 +/* Test various atomic.h macros. */
7226 +static int
7227 +do_test (void)
7229 + atomic_t mem;
7230 + int ret = 0;
7232 +#ifdef atomic_compare_and_exchange_val_acq
7233 + mem = 24;
7234 + if (atomic_compare_and_exchange_val_acq (&mem, 35, 24) != 24
7235 + || mem != 35)
7237 + puts ("atomic_compare_and_exchange_val_acq test 1 failed");
7238 + ret = 1;
7241 + mem = 12;
7242 + if (atomic_compare_and_exchange_val_acq (&mem, 10, 15) != 12
7243 + || mem != 12)
7245 + puts ("atomic_compare_and_exchange_val_acq test 2 failed");
7246 + ret = 1;
7249 + mem = -15;
7250 + if (atomic_compare_and_exchange_val_acq (&mem, -56, -15) != -15
7251 + || mem != -56)
7253 + puts ("atomic_compare_and_exchange_val_acq test 3 failed");
7254 + ret = 1;
7257 + mem = -1;
7258 + if (atomic_compare_and_exchange_val_acq (&mem, 17, 0) != -1
7259 + || mem != -1)
7261 + puts ("atomic_compare_and_exchange_val_acq test 4 failed");
7262 + ret = 1;
7264 +#endif
7266 + mem = 24;
7267 + if (atomic_compare_and_exchange_bool_acq (&mem, 35, 24)
7268 + || mem != 35)
7270 + puts ("atomic_compare_and_exchange_bool_acq test 1 failed");
7271 + ret = 1;
7274 + mem = 12;
7275 + if (! atomic_compare_and_exchange_bool_acq (&mem, 10, 15)
7276 + || mem != 12)
7278 + puts ("atomic_compare_and_exchange_bool_acq test 2 failed");
7279 + ret = 1;
7282 + mem = -15;
7283 + if (atomic_compare_and_exchange_bool_acq (&mem, -56, -15)
7284 + || mem != -56)
7286 + puts ("atomic_compare_and_exchange_bool_acq test 3 failed");
7287 + ret = 1;
7290 + mem = -1;
7291 + if (! atomic_compare_and_exchange_bool_acq (&mem, 17, 0)
7292 + || mem != -1)
7294 + puts ("atomic_compare_and_exchange_bool_acq test 4 failed");
7295 + ret = 1;
7298 + mem = 64;
7299 + if (atomic_exchange (&mem, 31) != 64
7300 + || mem != 31)
7302 + puts ("atomic_exchange test failed");
7303 + ret = 1;
7306 + mem = 2;
7307 + if (atomic_exchange_and_add (&mem, 11) != 2
7308 + || mem != 13)
7310 + puts ("atomic_exchange_and_add test failed");
7311 + ret = 1;
7314 + mem = -21;
7315 + atomic_add (&mem, 22);
7316 + if (mem != 1)
7318 + puts ("atomic_add test failed");
7319 + ret = 1;
7322 + mem = -1;
7323 + atomic_increment (&mem);
7324 + if (mem != 0)
7326 + puts ("atomic_increment test failed");
7327 + ret = 1;
7330 + mem = 0;
7331 + if (atomic_increment_and_test (&mem)
7332 + || mem != 1)
7334 + puts ("atomic_increment_and_test test 1 failed");
7335 + ret = 1;
7338 + mem = 35;
7339 + if (atomic_increment_and_test (&mem)
7340 + || mem != 36)
7342 + puts ("atomic_increment_and_test test 2 failed");
7343 + ret = 1;
7346 + mem = -1;
7347 + if (! atomic_increment_and_test (&mem)
7348 + || mem != 0)
7350 + puts ("atomic_increment_and_test test 3 failed");
7351 + ret = 1;
7354 + mem = 17;
7355 + atomic_decrement (&mem);
7356 + if (mem != 16)
7358 + puts ("atomic_decrement test failed");
7359 + ret = 1;
7362 + mem = 0;
7363 + if (atomic_decrement_and_test (&mem)
7364 + || mem != -1)
7366 + puts ("atomic_decrement_and_test test 1 failed");
7367 + ret = 1;
7370 + mem = 15;
7371 + if (atomic_decrement_and_test (&mem)
7372 + || mem != 14)
7374 + puts ("atomic_decrement_and_test test 2 failed");
7375 + ret = 1;
7378 + mem = 1;
7379 + if (! atomic_decrement_and_test (&mem)
7380 + || mem != 0)
7382 + puts ("atomic_decrement_and_test test 3 failed");
7383 + ret = 1;
7386 + mem = 1;
7387 + if (atomic_decrement_if_positive (&mem) != 1
7388 + || mem != 0)
7390 + puts ("atomic_decrement_if_positive test 1 failed");
7391 + ret = 1;
7394 + mem = 0;
7395 + if (atomic_decrement_if_positive (&mem) != 0
7396 + || mem != 0)
7398 + puts ("atomic_decrement_if_positive test 2 failed");
7399 + ret = 1;
7402 + mem = -1;
7403 + if (atomic_decrement_if_positive (&mem) != -1
7404 + || mem != -1)
7406 + puts ("atomic_decrement_if_positive test 3 failed");
7407 + ret = 1;
7410 + mem = -12;
7411 + if (! atomic_add_negative (&mem, 10)
7412 + || mem != -2)
7414 + puts ("atomic_add_negative test 1 failed");
7415 + ret = 1;
7418 + mem = 0;
7419 + if (atomic_add_negative (&mem, 100)
7420 + || mem != 100)
7422 + puts ("atomic_add_negative test 2 failed");
7423 + ret = 1;
7426 + mem = 15;
7427 + if (atomic_add_negative (&mem, -10)
7428 + || mem != 5)
7430 + puts ("atomic_add_negative test 3 failed");
7431 + ret = 1;
7434 + mem = -12;
7435 + if (atomic_add_negative (&mem, 14)
7436 + || mem != 2)
7438 + puts ("atomic_add_negative test 4 failed");
7439 + ret = 1;
7442 + mem = 0;
7443 + if (! atomic_add_negative (&mem, -1)
7444 + || mem != -1)
7446 + puts ("atomic_add_negative test 5 failed");
7447 + ret = 1;
7450 + mem = -31;
7451 + if (atomic_add_negative (&mem, 31)
7452 + || mem != 0)
7454 + puts ("atomic_add_negative test 6 failed");
7455 + ret = 1;
7458 + mem = -34;
7459 + if (atomic_add_zero (&mem, 31)
7460 + || mem != -3)
7462 + puts ("atomic_add_zero test 1 failed");
7463 + ret = 1;
7466 + mem = -36;
7467 + if (! atomic_add_zero (&mem, 36)
7468 + || mem != 0)
7470 + puts ("atomic_add_zero test 2 failed");
7471 + ret = 1;
7474 + mem = 113;
7475 + if (atomic_add_zero (&mem, -13)
7476 + || mem != 100)
7478 + puts ("atomic_add_zero test 3 failed");
7479 + ret = 1;
7482 + mem = -18;
7483 + if (atomic_add_zero (&mem, 20)
7484 + || mem != 2)
7486 + puts ("atomic_add_zero test 4 failed");
7487 + ret = 1;
7490 + mem = 10;
7491 + if (atomic_add_zero (&mem, -20)
7492 + || mem != -10)
7494 + puts ("atomic_add_zero test 5 failed");
7495 + ret = 1;
7498 + mem = 10;
7499 + if (! atomic_add_zero (&mem, -10)
7500 + || mem != 0)
7502 + puts ("atomic_add_zero test 6 failed");
7503 + ret = 1;
7506 + mem = 0;
7507 + atomic_bit_set (&mem, 1);
7508 + if (mem != 2)
7510 + puts ("atomic_bit_set test 1 failed");
7511 + ret = 1;
7514 + mem = 8;
7515 + atomic_bit_set (&mem, 3);
7516 + if (mem != 8)
7518 + puts ("atomic_bit_set test 2 failed");
7519 + ret = 1;
7522 +#ifdef TEST_ATOMIC64
7523 + mem = 16;
7524 + atomic_bit_set (&mem, 35);
7525 + if (mem != 0x800000010LL)
7527 + puts ("atomic_bit_set test 3 failed");
7528 + ret = 1;
7530 +#endif
7532 + mem = 0;
7533 + if (atomic_bit_test_set (&mem, 1)
7534 + || mem != 2)
7536 + puts ("atomic_bit_test_set test 1 failed");
7537 + ret = 1;
7540 + mem = 8;
7541 + if (! atomic_bit_test_set (&mem, 3)
7542 + || mem != 8)
7544 + puts ("atomic_bit_test_set test 2 failed");
7545 + ret = 1;
7548 +#ifdef TEST_ATOMIC64
7549 + mem = 16;
7550 + if (atomic_bit_test_set (&mem, 35)
7551 + || mem != 0x800000010LL)
7553 + puts ("atomic_bit_test_set test 3 failed");
7554 + ret = 1;
7557 + mem = 0x100000000LL;
7558 + if (! atomic_bit_test_set (&mem, 32)
7559 + || mem != 0x100000000LL)
7561 + puts ("atomic_bit_test_set test 4 failed");
7562 + ret = 1;
7564 +#endif
7566 + return ret;
7569 +#define TEST_FUNCTION do_test ()
7570 +#include "../test-skeleton.c"
7571 diff -u -udbrN glibc-2.3.2/dlfcn/Makefile glibc-2.3.2-200304020432/dlfcn/Makefile
7572 --- glibc-2.3.2/dlfcn/Makefile Wed Feb 26 01:46:32 2003
7573 +++ glibc-2.3.2-200304020432/dlfcn/Makefile Sun Mar 16 00:14:46 2003
7574 @@ -19,7 +19,8 @@
7575 subdir := dlfcn
7576 headers := bits/dlfcn.h dlfcn.h
7577 extra-libs := libdl
7578 -libdl-routines := dlopen dlclose dlsym dlvsym dlerror dladdr eval
7579 +libdl-routines := dlopen dlclose dlsym dlvsym dlerror dladdr dladdr1 dlinfo \
7580 + eval
7581 distribute := dlopenold.c glreflib1.c glreflib2.c failtestmod.c eval.c \
7582 defaultmod1.c defaultmod2.c errmsg1mod.c modatexit.c \
7583 modcxaatexit.c modstatic.c \
7584 @@ -37,7 +38,7 @@
7586 ifeq (yes,$(build-shared))
7587 tests = glrefmain failtest tst-dladdr default errmsg1 tstcxaatexit \
7588 - bug-dlopen1 bug-dlsym1
7589 + bug-dlopen1 bug-dlsym1 tst-dlinfo
7590 ifeq (yes,$(have-protected))
7591 tests += tstatexit
7592 endif
7593 @@ -73,6 +74,9 @@
7595 $(objpfx)tst-dladdr: $(libdl)
7596 $(objpfx)tst-dladdr.out: $(objpfx)glreflib1.so
7598 +$(objpfx)tst-dlinfo: $(libdl)
7599 +$(objpfx)tst-dlinfo.out: $(objpfx)glreflib1.so
7601 LDFLAGS-default = $(LDFLAGS-rdynamic)
7602 $(objpfx)default: $(libdl) $(objpfx)defaultmod1.so $(objpfx)defaultmod2.so
7603 diff -u -udbrN glibc-2.3.2/dlfcn/Versions glibc-2.3.2-200304020432/dlfcn/Versions
7604 --- glibc-2.3.2/dlfcn/Versions Wed Jul 7 20:25:24 1999
7605 +++ glibc-2.3.2-200304020432/dlfcn/Versions Sun Mar 16 00:14:44 2003
7606 @@ -5,4 +5,7 @@
7607 GLIBC_2.1 {
7608 dlopen; dlvsym;
7610 + GLIBC_2.3.3 {
7611 + dladdr1; dlinfo;
7614 diff -u -udbrN glibc-2.3.2/dlfcn/dladdr.c glibc-2.3.2-200304020432/dlfcn/dladdr.c
7615 --- glibc-2.3.2/dlfcn/dladdr.c Sat Jul 7 21:20:52 2001
7616 +++ glibc-2.3.2-200304020432/dlfcn/dladdr.c Mon Mar 10 10:12:11 2003
7617 @@ -1,5 +1,5 @@
7618 /* Locate the shared object symbol nearest a given address.
7619 - Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
7620 + Copyright (C) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
7621 This file is part of the GNU C Library.
7623 The GNU C Library is free software; you can redistribute it and/or
7624 @@ -22,5 +22,5 @@
7626 dladdr (const void *address, Dl_info *info)
7628 - return _dl_addr (address, info);
7629 + return _dl_addr (address, info, NULL, NULL);
7631 diff -u -udbrN glibc-2.3.2/dlfcn/dladdr1.c glibc-2.3.2-200304020432/dlfcn/dladdr1.c
7632 --- glibc-2.3.2/dlfcn/dladdr1.c Thu Jan 1 01:00:00 1970
7633 +++ glibc-2.3.2-200304020432/dlfcn/dladdr1.c Mon Mar 10 10:12:11 2003
7634 @@ -0,0 +1,35 @@
7635 +/* Locate the shared object symbol nearest a given address.
7636 + Copyright (C) 2003 Free Software Foundation, Inc.
7637 + This file is part of the GNU C Library.
7639 + The GNU C Library is free software; you can redistribute it and/or
7640 + modify it under the terms of the GNU Lesser General Public
7641 + License as published by the Free Software Foundation; either
7642 + version 2.1 of the License, or (at your option) any later version.
7644 + The GNU C Library is distributed in the hope that it will be useful,
7645 + but WITHOUT ANY WARRANTY; without even the implied warranty of
7646 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7647 + Lesser General Public License for more details.
7649 + You should have received a copy of the GNU Lesser General Public
7650 + License along with the GNU C Library; if not, write to the Free
7651 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
7652 + 02111-1307 USA. */
7654 +#include <dlfcn.h>
7656 +int
7657 +dladdr1 (const void *address, Dl_info *info, void **extra, int flags)
7659 + switch (flags)
7661 + default: /* Make this an error? */
7662 + case 0:
7663 + return _dl_addr (address, info, NULL, NULL);
7664 + case RTLD_DL_SYMENT:
7665 + return _dl_addr (address, info, NULL, (const ElfW(Sym) **) extra);
7666 + case RTLD_DL_LINKMAP:
7667 + return _dl_addr (address, info, (struct link_map **) extra, NULL);
7670 diff -u -udbrN glibc-2.3.2/dlfcn/dlerror.c glibc-2.3.2-200304020432/dlfcn/dlerror.c
7671 --- glibc-2.3.2/dlfcn/dlerror.c Tue Nov 19 07:51:37 2002
7672 +++ glibc-2.3.2-200304020432/dlfcn/dlerror.c Sat Mar 15 21:06:37 2003
7673 @@ -1,5 +1,5 @@
7674 /* Return error detail for failing <dlfcn.h> functions.
7675 - Copyright (C) 1995,1996,1997,1998,1999,2000,2002
7676 + Copyright (C) 1995,1996,1997,1998,1999,2000,2002, 2003
7677 Free Software Foundation, Inc.
7678 This file is part of the GNU C Library.
7680 @@ -69,9 +69,19 @@
7681 else if (result->errstring != NULL)
7683 buf = (char *) result->errstring;
7684 - if (__asprintf (&buf, result->errcode != 0 ? "%s: %s: %s" : "%s: %s",
7685 - result->objname, _(result->errstring),
7686 - strerror (result->errcode)) != -1)
7687 + int n;
7688 + if (result->errcode == 0)
7689 + n = __asprintf (&buf, "%s%s%s",
7690 + result->objname,
7691 + result->objname[0] == '\0' ? "" : ": ",
7692 + _(result->errstring));
7693 + else
7694 + n = __asprintf (&buf, "%s%s%s: %s",
7695 + result->objname,
7696 + result->objname[0] == '\0' ? "" : ": ",
7697 + _(result->errstring),
7698 + strerror (result->errcode));
7699 + if (n != -1)
7701 /* We don't need the error string anymore. */
7702 if (strcmp (result->errstring, "out of memory") != 0)
7703 diff -u -udbrN glibc-2.3.2/dlfcn/dlfcn.h glibc-2.3.2-200304020432/dlfcn/dlfcn.h
7704 --- glibc-2.3.2/dlfcn/dlfcn.h Sat Oct 27 01:58:28 2001
7705 +++ glibc-2.3.2-200304020432/dlfcn/dlfcn.h Sun Mar 16 00:14:44 2003
7706 @@ -1,5 +1,5 @@
7707 /* User functions for run-time dynamic loading.
7708 - Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
7709 + Copyright (C) 1995-1999,2000,2001,2003 Free Software Foundation, Inc.
7710 This file is part of the GNU C Library.
7712 The GNU C Library is free software; you can redistribute it and/or
7713 @@ -21,6 +21,8 @@
7714 #define _DLFCN_H 1
7716 #include <features.h>
7717 +#define __need_size_t
7718 +#include <stddef.h>
7720 /* Collect various system dependent definitions and declarations. */
7721 #include <bits/dlfcn.h>
7722 @@ -83,7 +85,74 @@
7723 /* Fill in *INFO with the following information about ADDRESS.
7724 Returns 0 iff no shared object's segments contain that address. */
7725 extern int dladdr (__const void *__address, Dl_info *__info) __THROW;
7726 -#endif
7728 +/* Same as `dladdr', but additionally sets *EXTRA_INFO according to FLAGS. */
7729 +extern int dladdr1 (__const void *__address, Dl_info *__info,
7730 + void **__extra_info, int __flags) __THROW;
7732 +/* These are the possible values for the FLAGS argument to `dladdr1'.
7733 + This indicates what extra information is stored at *EXTRA_INFO.
7734 + It may also be zero, in which case the EXTRA_INFO argument is not used. */
7735 +enum
7737 + /* Matching symbol table entry (const ElfNN_Sym *). */
7738 + RTLD_DL_SYMENT = 1,
7740 + /* The object containing the address (struct link_map *). */
7741 + RTLD_DL_LINKMAP = 2
7742 + };
7745 +/* Get information about the shared object HANDLE refers to.
7746 + REQUEST is from among the values below, and determines the use of ARG.
7748 + On success, returns zero. On failure, returns -1 and records an error
7749 + message to be fetched with `dlerror'. */
7750 +extern int dlinfo (void *__restrict __handle,
7751 + int __request, void *__restrict __arg);
7753 +/* These are the possible values for the REQUEST argument to `dlinfo'. */
7754 +enum
7756 + /* Treat ARG as `struct link_map **';
7757 + store the `struct link_map *' for HANDLE there. */
7758 + RTLD_DI_LINKMAP = 2,
7760 + /* Treat ARG as `Dl_serinfo *' (see below), and fill in to describe the
7761 + directories that will be searched for dependencies of this object.
7762 + RTLD_DI_SERINFOSIZE fills in just the `dls_cnt' and `dls_size'
7763 + entries to indicate the size of the buffer that must be passed to
7764 + RTLD_DI_SERINFO to fill in the full information. */
7765 + RTLD_DI_SERINFO = 4,
7766 + RTLD_DI_SERINFOSIZE = 5,
7768 + /* Treat ARG as `char *', and store there the directory name used to
7769 + expand $ORIGIN in this shared object's dependency file names. */
7770 + RTLD_DI_ORIGIN = 6,
7772 + RTLD_DI_LMID = 1, /* Unsupported, defined by Solaris. */
7773 + RTLD_DI_CONFIGADDR = 3 /* Unsupported, defined by Solaris. */
7774 + };
7777 +/* This is the type of elements in `Dl_serinfo', below.
7778 + The `dls_name' member points to space in the buffer passed to `dlinfo'. */
7779 +typedef struct
7781 + char *dls_name; /* Name of library search path directory. */
7782 + unsigned int dls_flags; /* Indicates where this directory came from. */
7783 +} Dl_serpath;
7785 +/* This is the structure that must be passed (by reference) to `dlinfo' for
7786 + the RTLD_DI_SERINFO and RTLD_DI_SERINFOSIZE requests. */
7787 +typedef struct
7789 + size_t dls_size; /* Size in bytes of the whole buffer. */
7790 + unsigned int dls_cnt; /* Number of elements in `dls_serpath'. */
7791 + Dl_serpath dls_serpath[1]; /* Actually longer, dls_cnt elements. */
7792 +} Dl_serinfo;
7793 +#endif /* __USE_GNU */
7796 __END_DECLS
7798 diff -u -udbrN glibc-2.3.2/dlfcn/dlinfo.c glibc-2.3.2-200304020432/dlfcn/dlinfo.c
7799 --- glibc-2.3.2/dlfcn/dlinfo.c Thu Jan 1 01:00:00 1970
7800 +++ glibc-2.3.2-200304020432/dlfcn/dlinfo.c Sun Mar 16 00:14:44 2003
7801 @@ -0,0 +1,87 @@
7802 +/* dlinfo -- Get information from the dynamic linker.
7803 + Copyright (C) 2003 Free Software Foundation, Inc.
7804 + This file is part of the GNU C Library.
7806 + The GNU C Library is free software; you can redistribute it and/or
7807 + modify it under the terms of the GNU Lesser General Public
7808 + License as published by the Free Software Foundation; either
7809 + version 2.1 of the License, or (at your option) any later version.
7811 + The GNU C Library is distributed in the hope that it will be useful,
7812 + but WITHOUT ANY WARRANTY; without even the implied warranty of
7813 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7814 + Lesser General Public License for more details.
7816 + You should have received a copy of the GNU Lesser General Public
7817 + License along with the GNU C Library; if not, write to the Free
7818 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
7819 + 02111-1307 USA. */
7821 +#include <dlfcn.h>
7822 +#include <link.h>
7823 +#include <ldsodefs.h>
7824 +#include <libintl.h>
7826 +struct dlinfo_args
7828 + ElfW(Addr) caller;
7829 + void *handle;
7830 + int request;
7831 + void *arg;
7834 +static void
7835 +dlinfo_doit (void *argsblock)
7837 + struct dlinfo_args *const args = argsblock;
7838 + struct link_map *l = args->handle;
7840 +#if 0
7841 + if (args->handle == RTLD_SELF)
7844 + /* Find the highest-addressed object that CALLER is not below. */
7845 + for (l = GL(dl_loaded); l != NULL; l = l->l_next)
7846 + if (caller >= l->l_map_start && caller < l->l_map_end)
7847 + /* There must be exactly one DSO for the range of the virtual
7848 + memory. Otherwise something is really broken. */
7849 + break;
7851 + if (l == NULL)
7852 + _dl_signal_error (0, NULL, NULL, N_("\
7853 +RTLD_SELF used in code not dynamically loaded"));
7855 +#endif
7857 + switch (args->request)
7859 + case RTLD_DI_LMID:
7860 + case RTLD_DI_CONFIGADDR:
7861 + default:
7862 + _dl_signal_error (0, NULL, NULL, N_("unsupported dlinfo request"));
7863 + break;
7865 + case RTLD_DI_LINKMAP:
7866 + *(struct link_map **) args->arg = l;
7867 + break;
7869 + case RTLD_DI_SERINFO:
7870 + _dl_rtld_di_serinfo (l, args->arg, false);
7871 + break;
7872 + case RTLD_DI_SERINFOSIZE:
7873 + _dl_rtld_di_serinfo (l, args->arg, true);
7874 + break;
7876 + case RTLD_DI_ORIGIN:
7877 + strcpy (args->arg, l->l_origin);
7878 + break;
7882 +int
7883 +dlinfo (void *handle, int request, void *arg)
7885 + struct dlinfo_args args = { (ElfW(Addr)) RETURN_ADDRESS (0),
7886 + handle, request, arg };
7887 + return _dlerror_run (&dlinfo_doit, &args) ? -1 : 0;
7889 diff -u -udbrN glibc-2.3.2/dlfcn/tst-dlinfo.c glibc-2.3.2-200304020432/dlfcn/tst-dlinfo.c
7890 --- glibc-2.3.2/dlfcn/tst-dlinfo.c Thu Jan 1 01:00:00 1970
7891 +++ glibc-2.3.2-200304020432/dlfcn/tst-dlinfo.c Sun Mar 16 00:14:48 2003
7892 @@ -0,0 +1,96 @@
7893 +/* Test for dlinfo.
7894 + Copyright (C) 2003 Free Software Foundation, Inc.
7895 + This file is part of the GNU C Library.
7897 + The GNU C Library is free software; you can redistribute it and/or
7898 + modify it under the terms of the GNU Lesser General Public
7899 + License as published by the Free Software Foundation; either
7900 + version 2.1 of the License, or (at your option) any later version.
7902 + The GNU C Library is distributed in the hope that it will be useful,
7903 + but WITHOUT ANY WARRANTY; without even the implied warranty of
7904 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7905 + Lesser General Public License for more details.
7907 + You should have received a copy of the GNU Lesser General Public
7908 + License along with the GNU C Library; if not, write to the Free
7909 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
7910 + 02111-1307 USA. */
7912 +#include <dlfcn.h>
7913 +#include <stdio.h>
7914 +#include <stdlib.h>
7915 +#include <error.h>
7917 +#define TEST_FUNCTION do_test ()
7919 +static int
7920 +do_test (void)
7922 + int status = 0;
7924 + void *handle = dlopen ("glreflib1.so", RTLD_NOW);
7925 + if (handle == NULL)
7926 + error (EXIT_FAILURE, 0, "cannot load: glreflib1.so: %s", dlerror ());
7928 +#define TRY(req, arg) \
7929 + if (dlinfo (handle, req, arg) != 0) \
7930 + { \
7931 + printf ("dlinfo failed for %s: %s\n", #req, dlerror ()); \
7932 + status = 1; \
7933 + } \
7934 + else
7936 + struct link_map *l;
7937 + TRY (RTLD_DI_LINKMAP, &l)
7939 + if (l != handle)
7941 + printf ("bogus link_map? %p != %p\n", l, handle);
7942 + status = 1;
7946 + char origin[8192]; /* >= PATH_MAX, in theory */
7947 + TRY (RTLD_DI_ORIGIN, origin)
7949 + printf ("origin: %s\n", origin);
7952 + Dl_serinfo counts;
7953 + TRY (RTLD_DI_SERINFOSIZE, &counts)
7955 + Dl_serinfo *buf = alloca (counts.dls_size);
7956 + buf->dls_cnt = counts.dls_cnt;
7957 + buf->dls_size = counts.dls_size;
7958 + printf ("%u library directories\n", buf->dls_cnt);
7959 + TRY (RTLD_DI_SERINFO, buf)
7961 + if (counts.dls_cnt != buf->dls_cnt)
7963 + printf ("??? became %u library directories\n", buf->dls_cnt);
7964 + status = 1;
7966 + for (unsigned int i = 0; i < buf->dls_cnt; ++i)
7967 + printf ("\t%#02x\t%s\n",
7968 + buf->dls_serpath[i].dls_flags,
7969 + buf->dls_serpath[i].dls_name);
7973 + unsigned long int lmid = 0xdeadbeefUL;
7974 + if (dlinfo (handle, RTLD_DI_LMID, &lmid) != 0)
7975 + printf ("dlinfo refuses RTLD_DI_LMID: %s\n", dlerror ());
7976 + else
7978 + printf ("dlinfo RTLD_DI_LMID worked? %#lx\n", lmid);
7979 + status = lmid == 0xdeadbeefUL;
7982 +#undef TRY
7983 + dlclose (handle);
7985 + return status;
7988 +#include "../test-skeleton.c"
7989 diff -u -udbrN glibc-2.3.2/elf/Makefile glibc-2.3.2-200304020432/elf/Makefile
7990 --- glibc-2.3.2/elf/Makefile Fri Feb 21 07:28:09 2003
7991 +++ glibc-2.3.2-200304020432/elf/Makefile Thu Mar 27 10:47:28 2003
7992 @@ -181,6 +181,9 @@
7994 include ../Rules
7996 +check-abi: check-abi-ld
7997 +update-abi: update-abi-ld
7999 ifeq (yes,$(build-shared))
8000 # Make sure these things are built in the `make lib' pass so they can be used
8001 # to run programs during the `make others' pass.
8002 @@ -210,7 +213,8 @@
8003 mv -f $@T $@
8005 $(objpfx)librtld.mk: $(objpfx)librtld.map Makefile
8006 - sed -n 's@^$(common-objpfx)\([^(]*\)(\([^)]*\.os\))$$@\1 \2@p' $< | \
8007 + sed -n 's@^$(common-objpfx)\([^(]*\)(\([^)]*\.os\)) *.*$$@\1 \2@p' \
8008 + $< | \
8009 while read lib file; do \
8010 case $$lib in \
8011 libc_pic.a) \
8012 diff -u -udbrN glibc-2.3.2/elf/Versions glibc-2.3.2-200304020432/elf/Versions
8013 --- glibc-2.3.2/elf/Versions Wed Dec 4 19:22:02 2002
8014 +++ glibc-2.3.2-200304020432/elf/Versions Sun Mar 16 00:14:44 2003
8015 @@ -51,6 +51,6 @@
8016 _dl_unload_cache;
8017 _rtld_global; _dl_tls_symaddr; _dl_allocate_tls; _dl_deallocate_tls;
8018 _dl_get_tls_static_info; _dl_allocate_tls_init;
8019 - _dl_get_origin; _dl_tls_setup;
8020 + _dl_get_origin; _dl_tls_setup; _dl_rtld_di_serinfo;
8023 diff -u -udbrN glibc-2.3.2/elf/cache.c glibc-2.3.2-200304020432/elf/cache.c
8024 --- glibc-2.3.2/elf/cache.c Sun Dec 29 20:14:59 2002
8025 +++ glibc-2.3.2-200304020432/elf/cache.c Sun Mar 16 02:03:52 2003
8026 @@ -1,4 +1,5 @@
8027 -/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
8028 +/* Copyright (C) 1999, 2000, 2001, 2002, 2003
8029 + Free Software Foundation, Inc.
8030 This file is part of the GNU C Library.
8031 Contributed by Andreas Jaeger <aj@suse.de>, 1999.
8033 @@ -86,6 +87,11 @@
8034 case FLAG_POWERPC_LIB64:
8035 fputs(",64bit", stdout);
8036 break;
8037 + case FLAG_MIPS64_LIBN32:
8038 + fputs(",N32", stdout);
8039 + break;
8040 + case FLAG_MIPS64_LIBN64:
8041 + fputs(",64bit", stdout);
8042 case 0:
8043 break;
8044 default:
8045 @@ -458,7 +464,7 @@
8047 struct cache_entry *new_entry, *ptr, *prev;
8048 char *full_path;
8049 - int len, i;
8050 + size_t len, i;
8052 new_entry = (struct cache_entry *) xmalloc (sizeof (struct cache_entry));
8054 diff -u -udbrN glibc-2.3.2/elf/dl-addr.c glibc-2.3.2-200304020432/elf/dl-addr.c
8055 --- glibc-2.3.2/elf/dl-addr.c Sat Sep 28 05:35:22 2002
8056 +++ glibc-2.3.2-200304020432/elf/dl-addr.c Mon Mar 10 10:12:11 2003
8057 @@ -1,5 +1,5 @@
8058 /* Locate the shared object symbol nearest a given address.
8059 - Copyright (C) 1996-2000, 2001, 2002 Free Software Foundation, Inc.
8060 + Copyright (C) 1996-2000,2001,2002,2003 Free Software Foundation, Inc.
8061 This file is part of the GNU C Library.
8063 The GNU C Library is free software; you can redistribute it and/or
8064 @@ -24,7 +24,8 @@
8067 internal_function
8068 -_dl_addr (const void *address, Dl_info *info)
8069 +_dl_addr (const void *address, Dl_info *info,
8070 + struct link_map **mapp, const ElfW(Sym) **symbolp)
8072 const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address);
8073 struct link_map *l, *match;
8074 @@ -92,6 +93,11 @@
8075 && (ELFW(ST_BIND) (symtab->st_info) == STB_GLOBAL
8076 || ELFW(ST_BIND) (symtab->st_info) == STB_WEAK))
8077 matchsym = (ElfW(Sym) *) symtab;
8079 + if (mapp)
8080 + *mapp = match;
8081 + if (symbolp)
8082 + *symbolp = matchsym;
8084 if (matchsym)
8086 diff -u -udbrN glibc-2.3.2/elf/dl-close.c glibc-2.3.2-200304020432/elf/dl-close.c
8087 --- glibc-2.3.2/elf/dl-close.c Mon Jan 27 21:44:03 2003
8088 +++ glibc-2.3.2-200304020432/elf/dl-close.c Sun Mar 16 02:03:52 2003
8089 @@ -371,7 +371,7 @@
8090 this search list, going in either direction. When the
8091 whole chunk is at the end of the used area then we can
8092 reclaim it. */
8093 - if (imap->l_tls_offset == tls_free_end)
8094 + if ((size_t) imap->l_tls_offset == tls_free_end)
8095 /* Extend the contiguous chunk being reclaimed. */
8096 tls_free_end += imap->l_tls_blocksize;
8097 else if (imap->l_tls_offset + imap->l_tls_blocksize
8098 diff -u -udbrN glibc-2.3.2/elf/dl-conflict.c glibc-2.3.2-200304020432/elf/dl-conflict.c
8099 --- glibc-2.3.2/elf/dl-conflict.c Thu Oct 17 19:05:51 2002
8100 +++ glibc-2.3.2-200304020432/elf/dl-conflict.c Fri Mar 14 06:34:36 2003
8101 @@ -1,5 +1,5 @@
8102 /* Resolve conflicts against already prelinked libraries.
8103 - Copyright (C) 2001, 2002 Free Software Foundation, Inc.
8104 + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
8105 This file is part of the GNU C Library.
8106 Contributed by Jakub Jelinek <jakub@redhat.com>, 2001.
8108 @@ -28,7 +28,7 @@
8109 #include <sys/types.h>
8110 #include "dynamic-link.h"
8113 +#if ! ELF_MACHINE_NO_RELA
8114 void
8115 _dl_resolve_conflicts (struct link_map *l, ElfW(Rela) *conflict,
8116 ElfW(Rela) *conflictend)
8117 @@ -65,3 +65,4 @@
8118 elf_machine_rela (l, conflict, NULL, NULL, (void *) conflict->r_offset);
8121 +#endif
8122 diff -u -udbrN glibc-2.3.2/elf/dl-load.c glibc-2.3.2-200304020432/elf/dl-load.c
8123 --- glibc-2.3.2/elf/dl-load.c Thu Jan 16 19:14:41 2003
8124 +++ glibc-2.3.2-200304020432/elf/dl-load.c Sun Mar 16 00:14:44 2003
8125 @@ -1,5 +1,5 @@
8126 /* Map in a shared object's segments from the file.
8127 - Copyright (C) 1995,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc.
8128 + Copyright (C) 1995-2002, 2003 Free Software Foundation, Inc.
8129 This file is part of the GNU C Library.
8131 The GNU C Library is free software; you can redistribute it and/or
8132 @@ -26,6 +26,7 @@
8133 #include <string.h>
8134 #include <unistd.h>
8135 #include <ldsodefs.h>
8136 +#include <bits/wordsize.h>
8137 #include <sys/mman.h>
8138 #include <sys/param.h>
8139 #include <sys/stat.h>
8140 @@ -97,19 +98,26 @@
8141 /* Type for the buffer we put the ELF header and hopefully the program
8142 header. This buffer does not really have to be too large. In most
8143 cases the program header follows the ELF header directly. If this
8144 - is not the case all bets are off and we can make the header arbitrarily
8145 - large and still won't get it read. This means the only question is
8146 - how large are the ELF and program header combined. The ELF header
8147 - in 64-bit files is 56 bytes long. Each program header entry is again
8148 - 56 bytes long. I.e., even with a file which has 17 program header
8149 - entries we only have to read 1kB. And 17 program header entries is
8150 - plenty, normal files have < 10. If this heuristic should really fail
8151 - for some file the code in `_dl_map_object_from_fd' knows how to
8152 - recover. */
8153 + is not the case all bets are off and we can make the header
8154 + arbitrarily large and still won't get it read. This means the only
8155 + question is how large are the ELF and program header combined. The
8156 + ELF header 32-bit files is 52 bytes long and in 64-bit files is 64
8157 + bytes long. Each program header entry is again 32 and 56 bytes
8158 + long respectively. I.e., even with a file which has 7 program
8159 + header entries we only have to read 512B. Add to this a bit of
8160 + margin for program notes and reading 512B and 640B for 32-bit and
8161 + 64-bit files respecitvely is enough. If this heuristic should
8162 + really fail for some file the code in `_dl_map_object_from_fd'
8163 + knows how to recover. */
8164 struct filebuf
8166 ssize_t len;
8167 - char buf[1024] __attribute__ ((aligned (__alignof (ElfW(Ehdr)))));
8168 +#if __WORDSIZE == 32
8169 +# define FILEBUF_SIZE 512
8170 +#else
8171 +# define FILEBUF_SIZE 640
8172 +#endif
8173 + char buf[FILEBUF_SIZE] __attribute__ ((aligned (__alignof (ElfW(Ehdr)))));
8176 /* This is the decomposed LD_LIBRARY_PATH search path. */
8177 @@ -568,6 +576,34 @@
8178 sps->malloced = 1;
8181 +/* Make sure cached path information is stored in *SP
8182 + and return true if there are any paths to search there. */
8183 +static inline bool
8184 +cache_rpath (struct link_map *l,
8185 + struct r_search_path_struct *sp,
8186 + int tag,
8187 + const char *what)
8189 + if (sp->dirs == (void *) -1)
8190 + return false;
8192 + if (sp->dirs != NULL)
8193 + return true;
8195 + if (l->l_info[tag] == NULL)
8197 + /* There is no path. */
8198 + sp->dirs = (void *) -1;
8199 + return false;
8202 + /* Make sure the cache information is available. */
8203 + decompose_rpath (sp, (const char *) (D_PTR (l, l_info[DT_STRTAB])
8204 + + l->l_info[tag]->d_un.d_val),
8205 + l, what);
8206 + return true;
8210 void
8211 internal_function
8212 @@ -877,6 +913,7 @@
8213 int prot;
8214 } loadcmds[l->l_phnum], *c;
8215 size_t nloadcmds = 0;
8216 + bool has_holes = false;
8218 /* The struct is initialized to zero so this is not necessary:
8219 l->l_ld = 0;
8220 @@ -922,6 +959,11 @@
8221 c->allocend = ph->p_vaddr + ph->p_memsz;
8222 c->mapoff = ph->p_offset & ~(ph->p_align - 1);
8224 + /* Determine whether there is a gap between the last segment
8225 + and this one. */
8226 + if (nloadcmds > 1 && c[-1].mapend != c->mapstart)
8227 + has_holes = true;
8229 /* Optimize a common case. */
8230 #if (PF_R | PF_W | PF_X) == 7 && (PROT_READ | PROT_WRITE | PROT_EXEC) == 7
8231 c->prot = (PF_TO_PROT
8232 @@ -1014,6 +1056,15 @@
8233 break;
8236 + if (__builtin_expect (nloadcmds == 0, 0))
8238 + /* This only happens for a bogus object that will be caught with
8239 + another error below. But we don't want to go through the
8240 + calculations below using NLOADCMDS - 1. */
8241 + errstring = N_("object file has no loadable segments");
8242 + goto call_lose;
8245 /* Now process the load commands and map segments into memory. */
8246 c = loadcmds;
8248 @@ -1051,6 +1102,7 @@
8249 l->l_map_end = l->l_map_start + maplength;
8250 l->l_addr = l->l_map_start - c->mapstart;
8252 + if (has_holes)
8253 /* Change protection on the excess portion to disallow all access;
8254 the portions we do not remap later will be inaccessible as if
8255 unallocated. Then jump into the normal segment-mapping loop to
8256 @@ -1118,23 +1170,18 @@
8257 if (zeropage > zero)
8259 /* Zero the final part of the last page of the segment. */
8260 - if ((c->prot & PROT_WRITE) == 0)
8261 + if (__builtin_expect ((c->prot & PROT_WRITE) == 0, 0))
8263 /* Dag nab it. */
8264 - if (__builtin_expect (__mprotect ((caddr_t)
8265 - (zero
8266 - & ~(GL(dl_pagesize)
8267 - - 1)),
8268 - GL(dl_pagesize),
8269 - c->prot|PROT_WRITE) < 0,
8270 - 0))
8271 + if (__mprotect ((caddr_t) (zero & ~(GL(dl_pagesize) - 1)),
8272 + GL(dl_pagesize), c->prot|PROT_WRITE) < 0)
8274 errstring = N_("cannot change memory protections");
8275 goto call_lose_errno;
8278 memset ((void *) zero, '\0', zeropage - zero);
8279 - if ((c->prot & PROT_WRITE) == 0)
8280 + if (__builtin_expect ((c->prot & PROT_WRITE) == 0, 0))
8281 __mprotect ((caddr_t) (zero & ~(GL(dl_pagesize) - 1)),
8282 GL(dl_pagesize), c->prot);
8284 @@ -1728,29 +1775,9 @@
8285 /* First try the DT_RPATH of the dependent object that caused NAME
8286 to be loaded. Then that object's dependent, and on up. */
8287 for (l = loader; fd == -1 && l; l = l->l_loader)
8289 - if (l->l_rpath_dirs.dirs == NULL)
8291 - if (l->l_info[DT_RPATH] == NULL)
8293 - /* There is no path. */
8294 - l->l_rpath_dirs.dirs = (void *) -1;
8295 - continue;
8297 - else
8299 - /* Make sure the cache information is available. */
8300 - size_t ptrval = (D_PTR (l, l_info[DT_STRTAB])
8301 - + l->l_info[DT_RPATH]->d_un.d_val);
8302 - decompose_rpath (&l->l_rpath_dirs,
8303 - (const char *) ptrval, l, "RPATH");
8307 - if (l->l_rpath_dirs.dirs != (void *) -1)
8308 + if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH"))
8309 fd = open_path (name, namelen, preloaded, &l->l_rpath_dirs,
8310 &realname, &fb);
8313 /* If dynamically linked, try the DT_RPATH of the executable
8314 itself. */
8315 @@ -1766,37 +1793,12 @@
8316 fd = open_path (name, namelen, preloaded, &env_path_list,
8317 &realname, &fb);
8319 - /* Look at the RUNPATH information for this binary.
8321 - Note that this is no real loop. 'while' is used only to enable
8322 - us to use 'break' instead of a 'goto' to jump to the end. The
8323 - loop is always left after the first round. */
8324 - while (fd == -1 && loader != NULL
8325 - && loader->l_runpath_dirs.dirs != (void *) -1)
8327 - if (loader->l_runpath_dirs.dirs == NULL)
8329 - if (loader->l_info[DT_RUNPATH] == NULL)
8331 - /* No RUNPATH. */
8332 - loader->l_runpath_dirs.dirs = (void *) -1;
8333 - break;
8335 - else
8337 - /* Make sure the cache information is available. */
8338 - size_t ptrval = (D_PTR (loader, l_info[DT_STRTAB])
8339 - + loader->l_info[DT_RUNPATH]->d_un.d_val);
8340 - decompose_rpath (&loader->l_runpath_dirs,
8341 - (const char *) ptrval, loader, "RUNPATH");
8345 - if (loader->l_runpath_dirs.dirs != (void *) -1)
8346 + /* Look at the RUNPATH information for this binary. */
8347 + if (fd == -1 && loader != NULL
8348 + && cache_rpath (loader, &loader->l_runpath_dirs,
8349 + DT_RUNPATH, "RUNPATH"))
8350 fd = open_path (name, namelen, preloaded,
8351 &loader->l_runpath_dirs, &realname, &fb);
8352 - break;
8355 if (fd == -1
8356 && (__builtin_expect (! preloaded, 1)
8357 @@ -1920,3 +1922,87 @@
8358 return _dl_map_object_from_fd (name, fd, &fb, realname, loader, type, mode);
8360 INTDEF (_dl_map_object)
8362 +void
8363 +internal_function
8364 +_dl_rtld_di_serinfo (struct link_map *loader, Dl_serinfo *si, bool counting)
8366 + if (counting)
8368 + si->dls_cnt = 0;
8369 + si->dls_size = 0;
8372 + unsigned int idx = 0;
8373 + char *allocptr = (char *) &si->dls_serpath[si->dls_cnt];
8374 + inline void add_path (const struct r_search_path_struct *sps,
8375 + unsigned int flags)
8376 +# define add_path(sps, flags) add_path(sps, 0) /* XXX */
8378 + if (sps->dirs != (void *) -1)
8380 + struct r_search_path_elem **dirs = sps->dirs;
8381 + do
8383 + const struct r_search_path_elem *const r = *dirs++;
8384 + if (counting)
8386 + si->dls_cnt++;
8387 + si->dls_size += r->dirnamelen;
8389 + else
8391 + Dl_serpath *const sp = &si->dls_serpath[idx++];
8392 + sp->dls_name = allocptr;
8393 + allocptr = __mempcpy (allocptr,
8394 + r->dirname, r->dirnamelen - 1);
8395 + *allocptr++ = '\0';
8396 + sp->dls_flags = flags;
8399 + while (*dirs != NULL);
8403 + /* When the object has the RUNPATH information we don't use any RPATHs. */
8404 + if (loader->l_info[DT_RUNPATH] == NULL)
8406 + /* First try the DT_RPATH of the dependent object that caused NAME
8407 + to be loaded. Then that object's dependent, and on up. */
8409 + struct link_map *l = loader;
8410 + do
8412 + if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH"))
8413 + add_path (&l->l_rpath_dirs, XXX_RPATH);
8414 + l = l->l_loader;
8416 + while (l != NULL);
8418 + /* If dynamically linked, try the DT_RPATH of the executable itself. */
8419 + l = GL(dl_loaded);
8420 + if (l != NULL && l->l_type != lt_loaded && l != loader)
8421 + if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH"))
8422 + add_path (&l->l_rpath_dirs, XXX_RPATH);
8425 + /* Try the LD_LIBRARY_PATH environment variable. */
8426 + add_path (&env_path_list, XXX_ENV);
8428 + /* Look at the RUNPATH information for this binary. */
8429 + if (cache_rpath (loader, &loader->l_runpath_dirs, DT_RUNPATH, "RUNPATH"))
8430 + add_path (&loader->l_runpath_dirs, XXX_RUNPATH);
8432 + /* XXX
8433 + Here is where ld.so.cache gets checked, but we don't have
8434 + a way to indicate that in the results for Dl_serinfo. */
8436 + /* Finally, try the default path. */
8437 + if (!(loader->l_flags_1 & DF_1_NODEFLIB))
8438 + add_path (&rtld_search_dirs, XXX_default);
8440 + if (counting)
8441 + /* Count the struct size before the string area, which we didn't
8442 + know before we completed dls_cnt. */
8443 + si->dls_size += (char *) &si->dls_serpath[si->dls_cnt] - (char *) si;
8445 diff -u -udbrN glibc-2.3.2/elf/dl-lookup.c glibc-2.3.2-200304020432/elf/dl-lookup.c
8446 --- glibc-2.3.2/elf/dl-lookup.c Sat Jan 11 10:51:49 2003
8447 +++ glibc-2.3.2-200304020432/elf/dl-lookup.c Wed Mar 26 06:51:33 2003
8448 @@ -273,19 +273,32 @@
8450 /* It is very tricky. We need to figure out what value to
8451 return for the protected symbol. */
8452 + if (type_class == ELF_RTYPE_CLASS_PLT)
8454 + if (current_value.s != NULL && current_value.m != undef_map)
8456 + current_value.s = *ref;
8457 + current_value.m = undef_map;
8460 + else
8462 struct sym_val protected_value = { NULL, NULL };
8464 for (scope = symbol_scope; *scope; ++scope)
8465 - if (_dl_do_lookup (undef_name, hash, *ref, &protected_value, *scope,
8466 - 0, flags, NULL, ELF_RTYPE_CLASS_PLT))
8467 + if (_dl_do_lookup (undef_name, hash, *ref,
8468 + &protected_value, *scope, 0, flags,
8469 + NULL, ELF_RTYPE_CLASS_PLT))
8470 break;
8472 - if (protected_value.s != NULL && protected_value.m != undef_map)
8473 + if (protected_value.s != NULL
8474 + && protected_value.m != undef_map)
8476 current_value.s = *ref;
8477 current_value.m = undef_map;
8482 /* We have to check whether this would bind UNDEF_MAP to an object
8483 in the global scope which was dynamically loaded. In this case
8484 @@ -465,18 +478,31 @@
8486 /* It is very tricky. We need to figure out what value to
8487 return for the protected symbol. */
8488 + if (type_class == ELF_RTYPE_CLASS_PLT)
8490 + if (current_value.s != NULL && current_value.m != undef_map)
8492 + current_value.s = *ref;
8493 + current_value.m = undef_map;
8496 + else
8498 struct sym_val protected_value = { NULL, NULL };
8500 for (scope = symbol_scope; *scope; ++scope)
8501 - if (_dl_do_lookup_versioned (undef_name, hash, *ref, &protected_value,
8502 + if (_dl_do_lookup_versioned (undef_name, hash, *ref,
8503 + &protected_value,
8504 *scope, 0, version, NULL,
8505 ELF_RTYPE_CLASS_PLT))
8506 break;
8508 - if (protected_value.s != NULL && protected_value.m != undef_map)
8509 + if (protected_value.s != NULL
8510 + && protected_value.m != undef_map)
8512 current_value.s = *ref;
8513 current_value.m = undef_map;
8518 diff -u -udbrN glibc-2.3.2/elf/dl-profile.c glibc-2.3.2-200304020432/elf/dl-profile.c
8519 --- glibc-2.3.2/elf/dl-profile.c Fri Aug 2 23:46:57 2002
8520 +++ glibc-2.3.2-200304020432/elf/dl-profile.c Thu Mar 20 08:07:22 2003
8521 @@ -1,5 +1,5 @@
8522 /* Profiling of shared libraries.
8523 - Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
8524 + Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
8525 This file is part of the GNU C Library.
8526 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
8527 Based on the BSD mcount implementation.
8528 @@ -34,7 +34,7 @@
8529 #include <sys/mman.h>
8530 #include <sys/param.h>
8531 #include <sys/stat.h>
8532 -#include <atomicity.h>
8533 +#include <atomic.h>
8535 /* The LD_PROFILE feature has to be implemented different to the
8536 normal profiling using the gmon/ functions. The problem is that an
8537 @@ -516,24 +516,24 @@
8538 size_t newfromidx;
8539 to_index = (data[narcs].self_pc
8540 / (hashfraction * sizeof (*tos)));
8541 - newfromidx = exchange_and_add (&fromidx, 1) + 1;
8542 + newfromidx = atomic_exchange_and_add (&fromidx, 1) + 1;
8543 froms[newfromidx].here = &data[narcs];
8544 froms[newfromidx].link = tos[to_index];
8545 tos[to_index] = newfromidx;
8546 - atomic_add (&narcs, 1);
8547 + atomic_increment (&narcs);
8550 /* If we still have no entry stop searching and insert. */
8551 if (*topcindex == 0)
8553 - uint_fast32_t newarc = exchange_and_add (narcsp, 1);
8554 + uint_fast32_t newarc = atomic_exchange_and_add (narcsp, 1);
8556 /* In rare cases it could happen that all entries in FROMS are
8557 occupied. So we cannot count this anymore. */
8558 if (newarc >= fromlimit)
8559 goto done;
8561 - *topcindex = exchange_and_add (&fromidx, 1) + 1;
8562 + *topcindex = atomic_exchange_and_add (&fromidx, 1) + 1;
8563 fromp = &froms[*topcindex];
8565 fromp->here = &data[newarc];
8566 @@ -541,7 +541,7 @@
8567 data[newarc].self_pc = selfpc;
8568 data[newarc].count = 0;
8569 fromp->link = 0;
8570 - atomic_add (&narcs, 1);
8571 + atomic_increment (&narcs);
8573 break;
8575 @@ -554,7 +554,7 @@
8578 /* Increment the counter. */
8579 - atomic_add (&fromp->here->count, 1);
8580 + atomic_increment (&fromp->here->count);
8582 done:
8584 diff -u -udbrN glibc-2.3.2/elf/dl-reloc.c glibc-2.3.2-200304020432/elf/dl-reloc.c
8585 --- glibc-2.3.2/elf/dl-reloc.c Thu Jan 30 18:35:50 2003
8586 +++ glibc-2.3.2-200304020432/elf/dl-reloc.c Sat Mar 1 23:31:52 2003
8587 @@ -44,23 +44,31 @@
8588 static void __attribute_noinline__
8589 allocate_static_tls (struct link_map *map)
8591 - size_t offset = roundup (GL(dl_tls_static_used), map->l_tls_align);
8592 - if (offset + map->l_tls_blocksize
8593 + size_t offset, used, check;
8595 # if TLS_TCB_AT_TP
8596 - + TLS_TCB_SIZE
8597 + offset = roundup (GL(dl_tls_static_used) + map->l_tls_blocksize,
8598 + map->l_tls_align);
8599 + used = offset;
8600 + check = offset + TLS_TCB_SIZE;
8601 # elif TLS_DTV_AT_TP
8602 + offset = roundup (GL(dl_tls_static_used), map->l_tls_align);
8603 + used = offset + map->l_tls_blocksize;
8604 + check = used;
8605 /* dl_tls_static_used includes the TCB at the beginning. */
8606 # else
8607 # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
8608 # endif
8609 - > GL(dl_tls_static_size))
8611 + if (check > GL(dl_tls_static_size))
8613 const char *errstring = N_("\
8614 shared object cannot be dlopen()ed: static TLS memory too small");
8615 INTUSE(_dl_signal_error) (0, (map)->l_name, NULL, errstring);
8618 map->l_tls_offset = offset;
8619 - GL(dl_tls_static_used) = offset + map->l_tls_blocksize;
8620 + GL(dl_tls_static_used) = used;
8622 #endif
8624 diff -u -udbrN glibc-2.3.2/elf/elf.h glibc-2.3.2-200304020432/elf/elf.h
8625 --- glibc-2.3.2/elf/elf.h Wed Feb 26 00:40:08 2003
8626 +++ glibc-2.3.2-200304020432/elf/elf.h Sun Mar 2 12:41:51 2003
8627 @@ -1,5 +1,5 @@
8628 /* This file defines standard ELF types, structures, and macros.
8629 - Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
8630 + Copyright (C) 1995-1999,2000,2001,2002,2003 Free Software Foundation, Inc.
8631 This file is part of the GNU C Library.
8633 The GNU C Library is free software; you can redistribute it and/or
8634 @@ -1881,22 +1881,85 @@
8635 #define R_PPC_SECTOFF_LO 34
8636 #define R_PPC_SECTOFF_HI 35
8637 #define R_PPC_SECTOFF_HA 36
8639 +/* PowerPC relocations defined for the TLS access ABI. */
8640 +#define R_PPC_TLS 67 /* none (sym+add)@tls */
8641 +#define R_PPC_DTPMOD32 68 /* word32 (sym+add)@dtpmod */
8642 +#define R_PPC_TPREL16 69 /* half16* (sym+add)@tprel */
8643 +#define R_PPC_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */
8644 +#define R_PPC_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */
8645 +#define R_PPC_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */
8646 +#define R_PPC_TPREL32 73 /* word32 (sym+add)@tprel */
8647 +#define R_PPC_DTPREL16 74 /* half16* (sym+add)@dtprel */
8648 +#define R_PPC_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */
8649 +#define R_PPC_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */
8650 +#define R_PPC_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */
8651 +#define R_PPC_DTPREL32 78 /* word32 (sym+add)@dtprel */
8652 +#define R_PPC_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */
8653 +#define R_PPC_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */
8654 +#define R_PPC_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */
8655 +#define R_PPC_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */
8656 +#define R_PPC_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */
8657 +#define R_PPC_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */
8658 +#define R_PPC_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */
8659 +#define R_PPC_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */
8660 +#define R_PPC_GOT_TPREL16 87 /* half16* (sym+add)@got@tprel */
8661 +#define R_PPC_GOT_TPREL16_LO 88 /* half16 (sym+add)@got@tprel@l */
8662 +#define R_PPC_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */
8663 +#define R_PPC_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */
8664 +#define R_PPC_GOT_DTPREL16 91 /* half16* (sym+add)@got@dtprel */
8665 +#define R_PPC_GOT_DTPREL16_LO 92 /* half16* (sym+add)@got@dtprel@l */
8666 +#define R_PPC_GOT_DTPREL16_HI 93 /* half16* (sym+add)@got@dtprel@h */
8667 +#define R_PPC_GOT_DTPREL16_HA 94 /* half16* (sym+add)@got@dtprel@ha */
8669 /* Keep this the last entry. */
8670 -#define R_PPC_NUM 37
8671 +#define R_PPC_NUM 95
8673 +/* The remaining relocs are from the Embedded ELF ABI, and are not
8674 + in the SVR4 ELF ABI. */
8675 +#define R_PPC_EMB_NADDR32 101
8676 +#define R_PPC_EMB_NADDR16 102
8677 +#define R_PPC_EMB_NADDR16_LO 103
8678 +#define R_PPC_EMB_NADDR16_HI 104
8679 +#define R_PPC_EMB_NADDR16_HA 105
8680 +#define R_PPC_EMB_SDAI16 106
8681 +#define R_PPC_EMB_SDA2I16 107
8682 +#define R_PPC_EMB_SDA2REL 108
8683 +#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */
8684 +#define R_PPC_EMB_MRKREF 110
8685 +#define R_PPC_EMB_RELSEC16 111
8686 +#define R_PPC_EMB_RELST_LO 112
8687 +#define R_PPC_EMB_RELST_HI 113
8688 +#define R_PPC_EMB_RELST_HA 114
8689 +#define R_PPC_EMB_BIT_FLD 115
8690 +#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */
8692 +/* Diab tool relocations. */
8693 +#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */
8694 +#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */
8695 +#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */
8696 +#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */
8697 +#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */
8698 +#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */
8700 +/* This is a phony reloc to handle any old fashioned TOC16 references
8701 + that may still be in object files. */
8702 +#define R_PPC_TOC16 255
8705 /* PowerPC64 relocations defined by the ABIs */
8706 #define R_PPC64_NONE R_PPC_NONE
8707 -#define R_PPC64_ADDR32 R_PPC_ADDR32 /* 32bit absolute address. */
8708 -#define R_PPC64_ADDR24 R_PPC_ADDR24 /* 26bit address, word aligned. */
8709 -#define R_PPC64_ADDR16 R_PPC_ADDR16 /* 16bit absolute address. */
8710 -#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO /* lower 16bits of abs. address. */
8711 -#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI /* high 16bits of abs. address. */
8712 +#define R_PPC64_ADDR32 R_PPC_ADDR32 /* 32bit absolute address */
8713 +#define R_PPC64_ADDR24 R_PPC_ADDR24 /* 26bit address, word aligned */
8714 +#define R_PPC64_ADDR16 R_PPC_ADDR16 /* 16bit absolute address */
8715 +#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO /* lower 16bits of address */
8716 +#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI /* high 16bits of address. */
8717 #define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA /* adjusted high 16bits. */
8718 -#define R_PPC64_ADDR14 R_PPC_ADDR14 /* 16bit address, word aligned. */
8719 +#define R_PPC64_ADDR14 R_PPC_ADDR14 /* 16bit address, word aligned */
8720 #define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN
8721 #define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN
8722 -#define R_PPC64_REL24 R_PPC_REL24 /* PC relative 26 bit, word aligned. */
8723 -#define R_PPC64_REL14 R_PPC_REL14 /* PC relative 16 bit. */
8724 +#define R_PPC64_REL24 R_PPC_REL24 /* PC-rel. 26 bit, word aligned */
8725 +#define R_PPC64_REL14 R_PPC_REL14 /* PC relative 16 bit */
8726 #define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN
8727 #define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN
8728 #define R_PPC64_GOT16 R_PPC_GOT16
8729 @@ -1922,116 +1985,87 @@
8730 #define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO
8731 #define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI
8732 #define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA
8733 -#define R_PPC64_ADDR30 37 /* word30 (S + A - P) >> 2. */
8734 -#define R_PPC64_ADDR64 38 /* doubleword64 S + A. */
8735 -#define R_PPC64_ADDR16_HIGHER 39 /* half16 #higher(S + A). */
8736 -#define R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A). */
8737 -#define R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A). */
8738 -#define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A). */
8739 -#define R_PPC64_UADDR64 43 /* doubleword64 S + A. */
8740 -#define R_PPC64_REL64 44 /* doubleword64 S + A - P. */
8741 -#define R_PPC64_PLT64 45 /* doubleword64 L + A. */
8742 -#define R_PPC64_PLTREL64 46 /* doubleword64 L + A - P. */
8743 -#define R_PPC64_TOC16 47 /* half16* S + A - .TOC. */
8744 -#define R_PPC64_TOC16_LO 48 /* half16 #lo(S + A - .TOC.). */
8745 -#define R_PPC64_TOC16_HI 49 /* half16 #hi(S + A - .TOC.). */
8746 -#define R_PPC64_TOC16_HA 50 /* half16 #ha(S + A - .TOC.). */
8747 -#define R_PPC64_TOC 51 /* doubleword64 .TOC. */
8748 -#define R_PPC64_PLTGOT16 52 /* half16* M + A. */
8749 -#define R_PPC64_PLTGOT16_LO 53 /* half16 #lo(M + A). */
8750 -#define R_PPC64_PLTGOT16_HI 54 /* half16 #hi(M + A). */
8751 -#define R_PPC64_PLTGOT16_HA 55 /* half16 #ha(M + A). */
8752 +#define R_PPC64_ADDR30 37 /* word30 (S + A - P) >> 2 */
8753 +#define R_PPC64_ADDR64 38 /* doubleword64 S + A */
8754 +#define R_PPC64_ADDR16_HIGHER 39 /* half16 #higher(S + A) */
8755 +#define R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A) */
8756 +#define R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A) */
8757 +#define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A) */
8758 +#define R_PPC64_UADDR64 43 /* doubleword64 S + A */
8759 +#define R_PPC64_REL64 44 /* doubleword64 S + A - P */
8760 +#define R_PPC64_PLT64 45 /* doubleword64 L + A */
8761 +#define R_PPC64_PLTREL64 46 /* doubleword64 L + A - P */
8762 +#define R_PPC64_TOC16 47 /* half16* S + A - .TOC */
8763 +#define R_PPC64_TOC16_LO 48 /* half16 #lo(S + A - .TOC.) */
8764 +#define R_PPC64_TOC16_HI 49 /* half16 #hi(S + A - .TOC.) */
8765 +#define R_PPC64_TOC16_HA 50 /* half16 #ha(S + A - .TOC.) */
8766 +#define R_PPC64_TOC 51 /* doubleword64 .TOC */
8767 +#define R_PPC64_PLTGOT16 52 /* half16* M + A */
8768 +#define R_PPC64_PLTGOT16_LO 53 /* half16 #lo(M + A) */
8769 +#define R_PPC64_PLTGOT16_HI 54 /* half16 #hi(M + A) */
8770 +#define R_PPC64_PLTGOT16_HA 55 /* half16 #ha(M + A) */
8772 -#define R_PPC64_ADDR16_DS 56 /* half16ds* (S + A) >> 2. */
8773 -#define R_PPC64_ADDR16_LO_DS 57 /* half16ds #lo(S + A) >> 2. */
8774 -#define R_PPC64_GOT16_DS 58 /* half16ds* (G + A) >> 2. */
8775 -#define R_PPC64_GOT16_LO_DS 59 /* half16ds #lo(G + A) >> 2. */
8776 -#define R_PPC64_PLT16_LO_DS 60 /* half16ds #lo(L + A) >> 2. */
8777 -#define R_PPC64_SECTOFF_DS 61 /* half16ds* (R + A) >> 2. */
8778 -#define R_PPC64_SECTOFF_LO_DS 62 /* half16ds #lo(R + A) >> 2. */
8779 -#define R_PPC64_TOC16_DS 63 /* half16ds* (S + A - .TOC.) >> 2. */
8780 -#define R_PPC64_TOC16_LO_DS 64 /* half16ds #lo(S + A - .TOC.) >> 2. */
8781 -#define R_PPC64_PLTGOT16_DS 65 /* half16ds* (M + A) >> 2. */
8782 -#define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds #lo(M + A) >> 2. */
8783 +#define R_PPC64_ADDR16_DS 56 /* half16ds* (S + A) >> 2 */
8784 +#define R_PPC64_ADDR16_LO_DS 57 /* half16ds #lo(S + A) >> 2 */
8785 +#define R_PPC64_GOT16_DS 58 /* half16ds* (G + A) >> 2 */
8786 +#define R_PPC64_GOT16_LO_DS 59 /* half16ds #lo(G + A) >> 2 */
8787 +#define R_PPC64_PLT16_LO_DS 60 /* half16ds #lo(L + A) >> 2 */
8788 +#define R_PPC64_SECTOFF_DS 61 /* half16ds* (R + A) >> 2 */
8789 +#define R_PPC64_SECTOFF_LO_DS 62 /* half16ds #lo(R + A) >> 2 */
8790 +#define R_PPC64_TOC16_DS 63 /* half16ds* (S + A - .TOC.) >> 2 */
8791 +#define R_PPC64_TOC16_LO_DS 64 /* half16ds #lo(S + A - .TOC.) >> 2 */
8792 +#define R_PPC64_PLTGOT16_DS 65 /* half16ds* (M + A) >> 2 */
8793 +#define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds #lo(M + A) >> 2 */
8795 /* PowerPC64 relocations defined for the TLS access ABI. */
8796 -#define R_PPC64_TLS 67 /* none (sym+add)@tls. */
8797 -#define R_PPC64_DTPMOD64 68 /* doubleword64 (sym+add)@dtpmod. */
8798 -#define R_PPC64_TPREL16 69 /* half16* (sym+add)@tprel. */
8799 -#define R_PPC64_TPREL16_LO 60 /* half16 (sym+add)@tprel@l. */
8800 -#define R_PPC64_TPREL16_HI 71 /* half16 (sym+add)@tprel@h. */
8801 -#define R_PPC64_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha. */
8802 -#define R_PPC64_TPREL64 73 /* doubleword64 (sym+add)@tprel. */
8803 -#define R_PPC64_DTPREL16 74 /* half16* (sym+add)@dtprel. */
8804 -#define R_PPC64_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l. */
8805 -#define R_PPC64_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h. */
8806 -#define R_PPC64_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha. */
8807 -#define R_PPC64_DTPREL64 78 /* doubleword64 (sym+add)@dtprel. */
8808 -#define R_PPC64_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd. */
8809 -#define R_PPC64_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l. */
8810 -#define R_PPC64_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h. */
8811 -#define R_PPC64_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha. */
8812 -#define R_PPC64_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld. */
8813 -#define R_PPC64_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l. */
8814 -#define R_PPC64_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h. */
8815 -#define R_PPC64_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha. */
8816 -#define R_PPC64_GOT_TPREL16_DS 87 /* half16ds* (sym+add)@got@tprel. */
8817 -#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l. */
8818 -#define R_PPC64_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h. */
8819 -#define R_PPC64_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha. */
8820 -#define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel. */
8821 -#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l. */
8822 -#define R_PPC64_GOT_DTPREL16_HI 93 /* half16 (sym+add)@got@dtprel@h. */
8823 -#define R_PPC64_GOT_DTPREL16_HA 94 /* half16 (sym+add)@got@dtprel@ha. */
8824 -#define R_PPC64_TPREL16_DS 95 /* half16ds* (sym+add)@tprel. */
8825 -#define R_PPC64_TPREL16_LO_DS 96 /* half16ds (sym+add)@tprel@l. */
8826 -#define R_PPC64_TPREL16_HIGHER 97 /* half16 (sym+add)@tprel@higher. */
8827 -#define R_PPC64_TPREL16_HIGHERA 98 /* half16 (sym+add)@tprel@highera. */
8828 -#define R_PPC64_TPREL16_HIGHEST 99 /* half16 (sym+add)@tprel@highest. */
8829 -#define R_PPC64_TPREL16_HIGHESTA 100 /* half16 (sym+add)@tprel@highesta. */
8830 -#define R_PPC64_DTPREL16_DS 101 /* half16ds* (sym+add)@dtprel. */
8831 -#define R_PPC64_DTPREL16_LO_DS 102 /* half16ds (sym+add)@dtprel@l. */
8832 -#define R_PPC64_DTPREL16_HIGHER 103 /* half16 (sym+add)@dtprel@higher. */
8833 -#define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera. */
8834 -#define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest. */
8835 -#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta. */
8836 +#define R_PPC64_TLS 67 /* none (sym+add)@tls */
8837 +#define R_PPC64_DTPMOD64 68 /* doubleword64 (sym+add)@dtpmod */
8838 +#define R_PPC64_TPREL16 69 /* half16* (sym+add)@tprel */
8839 +#define R_PPC64_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */
8840 +#define R_PPC64_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */
8841 +#define R_PPC64_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */
8842 +#define R_PPC64_TPREL64 73 /* doubleword64 (sym+add)@tprel */
8843 +#define R_PPC64_DTPREL16 74 /* half16* (sym+add)@dtprel */
8844 +#define R_PPC64_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */
8845 +#define R_PPC64_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */
8846 +#define R_PPC64_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */
8847 +#define R_PPC64_DTPREL64 78 /* doubleword64 (sym+add)@dtprel */
8848 +#define R_PPC64_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */
8849 +#define R_PPC64_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */
8850 +#define R_PPC64_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */
8851 +#define R_PPC64_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */
8852 +#define R_PPC64_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */
8853 +#define R_PPC64_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */
8854 +#define R_PPC64_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */
8855 +#define R_PPC64_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */
8856 +#define R_PPC64_GOT_TPREL16_DS 87 /* half16ds* (sym+add)@got@tprel */
8857 +#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */
8858 +#define R_PPC64_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */
8859 +#define R_PPC64_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */
8860 +#define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel */
8861 +#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */
8862 +#define R_PPC64_GOT_DTPREL16_HI 93 /* half16 (sym+add)@got@dtprel@h */
8863 +#define R_PPC64_GOT_DTPREL16_HA 94 /* half16 (sym+add)@got@dtprel@ha */
8864 +#define R_PPC64_TPREL16_DS 95 /* half16ds* (sym+add)@tprel */
8865 +#define R_PPC64_TPREL16_LO_DS 96 /* half16ds (sym+add)@tprel@l */
8866 +#define R_PPC64_TPREL16_HIGHER 97 /* half16 (sym+add)@tprel@higher */
8867 +#define R_PPC64_TPREL16_HIGHERA 98 /* half16 (sym+add)@tprel@highera */
8868 +#define R_PPC64_TPREL16_HIGHEST 99 /* half16 (sym+add)@tprel@highest */
8869 +#define R_PPC64_TPREL16_HIGHESTA 100 /* half16 (sym+add)@tprel@highesta */
8870 +#define R_PPC64_DTPREL16_DS 101 /* half16ds* (sym+add)@dtprel */
8871 +#define R_PPC64_DTPREL16_LO_DS 102 /* half16ds (sym+add)@dtprel@l */
8872 +#define R_PPC64_DTPREL16_HIGHER 103 /* half16 (sym+add)@dtprel@higher */
8873 +#define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */
8874 +#define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */
8875 +#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */
8877 /* Keep this the last entry. */
8878 #define R_PPC64_NUM 107
8880 -/* The remaining relocs are from the Embedded ELF ABI, and are not
8881 - in the SVR4 ELF ABI. */
8882 -#define R_PPC_EMB_NADDR32 101
8883 -#define R_PPC_EMB_NADDR16 102
8884 -#define R_PPC_EMB_NADDR16_LO 103
8885 -#define R_PPC_EMB_NADDR16_HI 104
8886 -#define R_PPC_EMB_NADDR16_HA 105
8887 -#define R_PPC_EMB_SDAI16 106
8888 -#define R_PPC_EMB_SDA2I16 107
8889 -#define R_PPC_EMB_SDA2REL 108
8890 -#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */
8891 -#define R_PPC_EMB_MRKREF 110
8892 -#define R_PPC_EMB_RELSEC16 111
8893 -#define R_PPC_EMB_RELST_LO 112
8894 -#define R_PPC_EMB_RELST_HI 113
8895 -#define R_PPC_EMB_RELST_HA 114
8896 -#define R_PPC_EMB_BIT_FLD 115
8897 -#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */
8899 -/* Diab tool relocations. */
8900 -#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */
8901 -#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */
8902 -#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */
8903 -#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */
8904 -#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */
8905 -#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */
8907 -/* This is a phony reloc to handle any old fashioned TOC16 references
8908 - that may still be in object files. */
8909 -#define R_PPC_TOC16 255
8911 /* PowerPC64 specific values for the Dyn d_tag field. */
8912 #define DT_PPC64_GLINK (DT_LOPROC + 0)
8913 #define DT_PPC64_NUM 1
8916 /* ARM specific declarations */
8918 diff -u -udbrN glibc-2.3.2/elf/rtld.c glibc-2.3.2-200304020432/elf/rtld.c
8919 --- glibc-2.3.2/elf/rtld.c Tue Jan 7 19:47:35 2003
8920 +++ glibc-2.3.2-200304020432/elf/rtld.c Fri Mar 14 06:34:36 2003
8921 @@ -1444,6 +1444,7 @@
8922 _dl_printf ("\nprelink checking: %s\n", prelinked ? "ok" : "failed");
8925 +#if ! ELF_MACHINE_NO_RELA /* We don't REL-only prelink. */
8926 if (prelinked)
8928 struct link_map *l;
8929 @@ -1476,6 +1477,7 @@
8930 _dl_sysdep_start_cleanup ();
8932 else
8933 +#endif
8935 /* Now we have all the objects loaded. Relocate them all except for
8936 the dynamic linker itself. We do this in reverse order so that copy
8937 diff -u -udbrN glibc-2.3.2/elf/tls-macros.h glibc-2.3.2-200304020432/elf/tls-macros.h
8938 --- glibc-2.3.2/elf/tls-macros.h Wed Feb 26 00:40:08 2003
8939 +++ glibc-2.3.2-200304020432/elf/tls-macros.h Tue Apr 1 22:10:05 2003
8940 @@ -316,13 +316,14 @@
8942 # define TLS_IE(x) \
8943 ({ void *__l; \
8944 + register long __gp asm ("gp"); \
8945 asm (";;\n\t" \
8946 "addl r16=@ltoff(@tprel(" #x ")),gp\n\t" \
8947 ";;\n\t" \
8948 "ld8 r17=[r16]\n\t" \
8949 ";;\n\t" \
8950 "add %0=r13,r17\n\t" \
8951 - : "=r" (__l) : : "r16", "r17" ); __l; })
8952 + : "=r" (__l) : "r" (__gp) : "r16", "r17" ); __l; })
8954 # define __TLS_CALL_CLOBBERS \
8955 "r2", "r3", "r8", "r9", "r10", "r11", "r14", "r15", "r16", "r17", \
8956 @@ -335,6 +336,7 @@
8958 # define TLS_LD(x) \
8959 ({ void *__l; \
8960 + register long __gp asm ("gp"); \
8961 asm (";;\n\t" \
8962 "mov loc0=gp\n\t" \
8963 "addl r16=@ltoff(@dtpmod(" #x ")),gp\n\t" \
8964 @@ -345,11 +347,12 @@
8965 ";;\n\t" \
8966 "mov gp=loc0\n\t" \
8967 "mov %0=r8\n\t" \
8968 - : "=r" (__l) : : "loc0", __TLS_CALL_CLOBBERS); \
8969 + : "=r" (__l) : "r" (__gp) : "loc0", __TLS_CALL_CLOBBERS); \
8970 __l; })
8972 # define TLS_GD(x) \
8973 ({ void *__l; \
8974 + register long __gp asm ("gp"); \
8975 asm (";;\n\t" \
8976 "mov loc0=gp\n\t" \
8977 "addl r16=@ltoff(@dtpmod(" #x ")),gp\n\t" \
8978 @@ -361,7 +364,7 @@
8979 ";;\n\t" \
8980 "mov gp=loc0\n\t" \
8981 "mov %0=r8\n\t" \
8982 - : "=r" (__l) : : "loc0", __TLS_CALL_CLOBBERS); \
8983 + : "=r" (__l) : "r" (__gp) : "loc0", __TLS_CALL_CLOBBERS); \
8984 __l; })
8986 #elif defined __sparc__ && !defined __arch64__
8987 @@ -622,6 +625,53 @@
8988 : "=&a" (__offset) : : "cc", "0", "1", "2", "3", "4", "5", "12" ); \
8989 (int *) (__builtin_thread_pointer() + __offset); })
8990 # endif
8992 +#elif defined __powerpc__ && !defined __powerpc64__
8994 +# define __TLS_CALL_CLOBBERS \
8995 + "0", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", \
8996 + "lr", "ctr", "cr0", "cr1", "cr5", "cr6", "cr7"
8998 +/* PowerPC32 Local Exec TLS access. */
8999 +# define TLS_LE(x) \
9000 + ({ int *__result; \
9001 + asm ("addi %0,2," #x "@tprel" \
9002 + : "=r" (__result)); \
9003 + __result; })
9005 +/* PowerPC32 Initial Exec TLS access. */
9006 +# define TLS_IE(x) \
9007 + ({ int *__result; \
9008 + asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \
9009 + "mflr %0\n\t" \
9010 + "lwz %0," #x "@got@tprel(%0)\n\t" \
9011 + "add %0,%0," #x "@tls" \
9012 + : "=b" (__result) : \
9013 + : "lr"); \
9014 + __result; })
9016 +/* PowerPC32 Local Dynamic TLS access. */
9017 +# define TLS_LD(x) \
9018 + ({ int *__result; \
9019 + asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \
9020 + "mflr 3\n\t" \
9021 + "addi 3,3," #x "@got@tlsld\n\t" \
9022 + "bl __tls_get_addr@plt\n\t" \
9023 + "addi %0,3," #x "@dtprel" \
9024 + : "=r" (__result) : \
9025 + : __TLS_CALL_CLOBBERS); \
9026 + __result; })
9028 +/* PowerPC32 General Dynamic TLS access. */
9029 +# define TLS_GD(x) \
9030 + ({ register int *__result __asm__ ("r3"); \
9031 + asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \
9032 + "mflr 3\n\t" \
9033 + "addi 3,3," #x "@got@tlsgd\n\t" \
9034 + "bl __tls_get_addr@plt" \
9035 + : : \
9036 + : __TLS_CALL_CLOBBERS); \
9037 + __result; })
9039 #elif defined __powerpc__ && defined __powerpc64__
9041 diff -u -udbrN glibc-2.3.2/elf/vismain.c glibc-2.3.2-200304020432/elf/vismain.c
9042 --- glibc-2.3.2/elf/vismain.c Sat Jul 7 21:20:53 2001
9043 +++ glibc-2.3.2-200304020432/elf/vismain.c Sat Mar 29 07:49:46 2003
9044 @@ -1,4 +1,4 @@
9045 -/* Copyright (C) 2000 Free Software Foundation, Inc.
9046 +/* Copyright (C) 2000, 2003 Free Software Foundation, Inc.
9047 This file is part of the GNU C Library.
9049 The GNU C Library is free software; you can redistribute it and/or
9050 @@ -86,7 +86,8 @@
9051 first DSO. */
9052 if (protinmod != getinmod1 ())
9054 - puts ("`protinmod' in main and mod1 don't have same address");
9055 + printf ("&protinmod in main (%p) != &protinmod in mod1 (%p)\n",
9056 + protinmod, getinmod1 ());
9057 res = 1;
9059 if (protinmod == getinmod2 ())
9060 @@ -116,7 +117,8 @@
9061 one intercepts the references from the main object. */
9062 if (protitcpt != getitcpt3 ())
9064 - puts ("`protitcpt' in main and mod3 don't have same address");
9065 + printf ("&protitcpt in main (%p) != &protitcpt in mod3 (%p)\n",
9066 + &protitcpt, getitcpt3 ());
9067 res = 1;
9069 if (protitcpt == getitcpt1 ())
9070 @@ -150,12 +152,12 @@
9072 /* Now look at variables. First a variable which is available
9073 everywhere. We must have three different addresses. */
9074 - if (protvarlocal == getvarlocal1 ())
9075 + if (&protvarlocal == getvarlocal1 ())
9077 puts ("`protvarlocal' in main and mod1 have same address");
9078 res = 1;
9080 - if (protvarlocal == getvarlocal2 ())
9081 + if (&protvarlocal == getvarlocal2 ())
9083 puts ("`protvarlocal' in main and mod2 have same address");
9084 res = 1;
9085 @@ -170,54 +172,58 @@
9086 puts ("`protvarlocal in main has wrong value");
9087 res = 1;
9089 - if (strcmp (getvarlocal1 (), "vismod1.c") != 0)
9090 + if (strcmp (*getvarlocal1 (), "vismod1.c") != 0)
9092 puts ("`getvarlocal1' returns wrong value");
9093 res = 1;
9095 - if (strcmp (getvarlocal2 (), "vismod2.c") != 0)
9096 + if (strcmp (*getvarlocal2 (), "vismod2.c") != 0)
9098 puts ("`getvarlocal2' returns wrong value");
9099 res = 1;
9102 /* Now the case where there is no local definition. */
9103 - if (protvarinmod != getvarinmod1 ())
9104 + if (&protvarinmod != getvarinmod1 ())
9106 - puts ("`protvarinmod' in main and mod1 have not same address");
9107 - res = 1;
9108 + printf ("&protvarinmod in main (%p) != &protitcpt in mod1 (%p)\n",
9109 + &protvarinmod, getvarinmod1 ());
9110 + // XXX Possibly enable once fixed.
9111 + // res = 1;
9113 - if (protvarinmod == getvarinmod2 ())
9114 + if (&protvarinmod == getvarinmod2 ())
9116 puts ("`protvarinmod' in main and mod2 have same address");
9117 res = 1;
9119 - if (strcmp (getvarinmod1 (), "vismod1.c") != 0)
9120 + if (strcmp (*getvarinmod1 (), "vismod1.c") != 0)
9122 puts ("`getvarinmod1' returns wrong value");
9123 res = 1;
9125 - if (strcmp (getvarinmod2 (), "vismod2.c") != 0)
9126 + if (strcmp (*getvarinmod2 (), "vismod2.c") != 0)
9128 puts ("`getvarinmod2' returns wrong value");
9129 res = 1;
9132 /* And a test where a variable definition is intercepted. */
9133 - if (protvaritcpt == getvaritcpt1 ())
9134 + if (&protvaritcpt == getvaritcpt1 ())
9136 puts ("`protvaritcpt' in main and mod1 have same address");
9137 res = 1;
9139 - if (protvaritcpt == getvaritcpt2 ())
9140 + if (&protvaritcpt == getvaritcpt2 ())
9142 puts ("`protvaritcpt' in main and mod2 have same address");
9143 res = 1;
9145 - if (protvaritcpt != getvaritcpt3 ())
9146 + if (&protvaritcpt != getvaritcpt3 ())
9148 - puts ("`protvaritcpt' in main and mod3 have not same address");
9149 - res = 1;
9150 + printf ("&protvaritcpt in main (%p) != &protvaritcpt in mod3 (%p)\n",
9151 + &protvaritcpt, getvaritcpt3 ());
9152 + // XXX Possibly enable once fixed.
9153 + // res = 1;
9155 if (getvaritcpt1 () == getvaritcpt2 ())
9157 @@ -229,12 +235,12 @@
9158 puts ("`protvaritcpt in main has wrong value");
9159 res = 1;
9161 - if (strcmp (getvaritcpt1 (), "vismod1.c") != 0)
9162 + if (strcmp (*getvaritcpt1 (), "vismod1.c") != 0)
9164 puts ("`getvaritcpt1' returns wrong value");
9165 res = 1;
9167 - if (strcmp (getvaritcpt2 (), "vismod2.c") != 0)
9168 + if (strcmp (*getvaritcpt2 (), "vismod2.c") != 0)
9170 puts ("`getvaritcpt2' returns wrong value");
9171 res = 1;
9172 diff -u -udbrN glibc-2.3.2/elf/vismod.h glibc-2.3.2-200304020432/elf/vismod.h
9173 --- glibc-2.3.2/elf/vismod.h Sun Dec 17 18:07:45 2000
9174 +++ glibc-2.3.2-200304020432/elf/vismod.h Sat Mar 29 04:46:03 2003
9175 @@ -5,21 +5,21 @@
9176 extern int (*getinmod1 (void)) (void);
9177 extern int callitcpt1 (void);
9178 extern int (*getitcpt1 (void)) (void);
9179 -extern const char *getvarlocal1 (void);
9180 -extern const char *getvarinmod1 (void);
9181 -extern const char *getvaritcpt1 (void);
9182 +extern const char **getvarlocal1 (void);
9183 +extern const char **getvarinmod1 (void);
9184 +extern const char **getvaritcpt1 (void);
9185 extern int calllocal2 (void);
9186 extern int (*getlocal2 (void)) (void);
9187 extern int callinmod2 (void);
9188 extern int (*getinmod2 (void)) (void);
9189 extern int callitcpt2 (void);
9190 extern int (*getitcpt2 (void)) (void);
9191 -extern const char *getvarlocal2 (void);
9192 -extern const char *getvarinmod2 (void);
9193 -extern const char *getvaritcpt2 (void);
9194 +extern const char **getvarlocal2 (void);
9195 +extern const char **getvarinmod2 (void);
9196 +extern const char **getvaritcpt2 (void);
9197 extern int callitcpt3 (void);
9198 extern int (*getitcpt3 (void)) (void);
9199 -extern const char *getvaritcpt3 (void);
9200 +extern const char **getvaritcpt3 (void);
9202 extern int protinmod (void);
9203 extern int protitcpt (void);
9204 diff -u -udbrN glibc-2.3.2/elf/vismod1.c glibc-2.3.2-200304020432/elf/vismod1.c
9205 --- glibc-2.3.2/elf/vismod1.c Sat Jul 7 21:20:53 2001
9206 +++ glibc-2.3.2-200304020432/elf/vismod1.c Sat Mar 29 04:46:03 2003
9207 @@ -79,26 +79,26 @@
9208 const char *protvarlocal = __FILE__;
9209 asm (".protected protvarlocal");
9211 -const char *
9212 +const char **
9213 getvarlocal1 (void)
9215 - return protvarlocal;
9216 + return &protvarlocal;
9219 const char *protvarinmod = __FILE__;
9220 asm (".protected protvarinmod");
9222 -const char *
9223 +const char **
9224 getvarinmod1 (void)
9226 - return protvarinmod;
9227 + return &protvarinmod;
9230 const char *protvaritcpt = __FILE__;
9231 asm (".protected protvaritcpt");
9233 -const char *
9234 +const char **
9235 getvaritcpt1 (void)
9237 - return protvaritcpt;
9238 + return &protvaritcpt;
9240 diff -u -udbrN glibc-2.3.2/elf/vismod2.c glibc-2.3.2-200304020432/elf/vismod2.c
9241 --- glibc-2.3.2/elf/vismod2.c Sat Jul 7 21:20:53 2001
9242 +++ glibc-2.3.2-200304020432/elf/vismod2.c Sat Mar 29 04:46:03 2003
9243 @@ -80,28 +80,28 @@
9244 const char *protvarlocal = __FILE__;
9245 asm (".protected protvarlocal");
9247 -const char *
9248 +const char **
9249 getvarlocal2 (void)
9251 - return protvarlocal;
9252 + return &protvarlocal;
9255 const char *protvarinmod = __FILE__;
9256 asm (".protected protvarinmod");
9258 -const char *
9259 +const char **
9260 getvarinmod2 (void)
9262 - return protvarinmod;
9263 + return &protvarinmod;
9266 const char *protvaritcpt = __FILE__;
9267 asm (".protected protvaritcpt");
9269 -const char *
9270 +const char **
9271 getvaritcpt2 (void)
9273 - return protvaritcpt;
9274 + return &protvaritcpt;
9277 /* We must never call these functions. */
9278 @@ -117,7 +117,7 @@
9279 abort ();
9282 -const char *
9283 +const char **
9284 getvaritcpt3 (void)
9286 abort ();
9287 diff -u -udbrN glibc-2.3.2/elf/vismod3.c glibc-2.3.2-200304020432/elf/vismod3.c
9288 --- glibc-2.3.2/elf/vismod3.c Sat Jul 7 21:20:53 2001
9289 +++ glibc-2.3.2-200304020432/elf/vismod3.c Sat Mar 29 04:46:03 2003
9290 @@ -40,8 +40,8 @@
9291 const char *protvaritcpt = __FILE__;
9292 asm (".protected protvaritcpt");
9294 -const char *
9295 +const char **
9296 getvaritcpt3 (void)
9298 - return protvaritcpt;
9299 + return &protvaritcpt;
9301 diff -u -udbrN glibc-2.3.2/gmon/gmon.c glibc-2.3.2-200304020432/gmon/gmon.c
9302 --- glibc-2.3.2/gmon/gmon.c Wed Jan 8 04:49:47 2003
9303 +++ glibc-2.3.2-200304020432/gmon/gmon.c Sun Mar 16 04:22:23 2003
9304 @@ -213,7 +213,7 @@
9305 struct gmon_cg_arc_record raw_arc[NARCS_PER_WRITEV]
9306 __attribute__ ((aligned (__alignof__ (char*))));
9307 ARCINDEX from_index, to_index;
9308 - int from_len;
9309 + u_long from_len;
9310 u_long frompc;
9311 struct iovec iov[2 * NARCS_PER_WRITEV];
9312 int nfilled;
9313 diff -u -udbrN glibc-2.3.2/gmon/mcount.c glibc-2.3.2-200304020432/gmon/mcount.c
9314 --- glibc-2.3.2/gmon/mcount.c Thu Aug 29 11:25:51 2002
9315 +++ glibc-2.3.2-200304020432/gmon/mcount.c Fri Mar 21 08:45:54 2003
9316 @@ -39,7 +39,7 @@
9317 and MCOUNT macros. */
9318 #include "machine-gmon.h"
9320 -#include <atomicity.h>
9321 +#include <atomic.h>
9324 * mcount is called on entry to each function compiled with the profiling
9325 @@ -69,7 +69,8 @@
9326 * check that we are profiling
9327 * and that we aren't recursively invoked.
9329 - if (! compare_and_swap (&p->state, GMON_PROF_ON, GMON_PROF_BUSY))
9330 + if (atomic_compare_and_exchange_bool_acq (&p->state, GMON_PROF_BUSY,
9331 + GMON_PROF_ON))
9332 return;
9335 diff -u -udbrN glibc-2.3.2/iconvdata/Makefile glibc-2.3.2-200304020432/iconvdata/Makefile
9336 --- glibc-2.3.2/iconvdata/Makefile Sat Feb 22 02:01:16 2003
9337 +++ glibc-2.3.2-200304020432/iconvdata/Makefile Wed Mar 26 09:11:21 2003
9338 @@ -58,7 +58,7 @@
9339 include ../Makeconfig
9341 ifeq (yes,$(build-shared))
9342 -tests = bug-iconv1 bug-iconv2 tst-loading tst-e2big tst-iconv4
9343 +tests = bug-iconv1 bug-iconv2 tst-loading tst-e2big tst-iconv4 bug-iconv4
9344 ifeq ($(have-thread-library),yes)
9345 tests += bug-iconv3
9346 endif
9347 diff -u -udbrN glibc-2.3.2/iconvdata/bug-iconv4.c glibc-2.3.2-200304020432/iconvdata/bug-iconv4.c
9348 --- glibc-2.3.2/iconvdata/bug-iconv4.c Thu Jan 1 01:00:00 1970
9349 +++ glibc-2.3.2-200304020432/iconvdata/bug-iconv4.c Wed Mar 26 09:10:58 2003
9350 @@ -0,0 +1,78 @@
9351 +/* Contributed by Jiro SEKIBA <jir@yamato.ibm.com>. */
9352 +#include <errno.h>
9353 +#include <iconv.h>
9354 +#include <stdbool.h>
9355 +#include <stdio.h>
9356 +#include <stdlib.h>
9357 +#include <string.h>
9359 +#define UCS_STR "\x4e\x8c" /* EUC-TW 0xa2a2, EUC-JP 0x */
9361 +static const char *to_code;
9363 +static bool
9364 +xiconv (iconv_t cd, int out_size)
9366 + unsigned char euc[4];
9367 + char *inp = (char *) UCS_STR;
9368 + char *outp = euc;
9369 + size_t inbytesleft = strlen (UCS_STR);
9370 + size_t outbytesleft = out_size;
9371 + size_t ret;
9372 + bool fail = false;
9374 + errno = 0;
9375 + ret = iconv (cd, &inp, &inbytesleft, &outp, &outbytesleft);
9376 + if (errno || ret == (size_t) -1)
9378 + fail = out_size == 4 || errno != E2BIG;
9379 + printf ("expected %d (E2BIG), got %d (%m)\n", E2BIG, errno);
9381 + else
9383 + printf ("%s: 0x%02x%02x\n", to_code, euc[0], euc[1]);
9384 + if (out_size == 1)
9385 + fail = true;
9388 + return fail;
9392 +static iconv_t
9393 +xiconv_open (const char *code)
9395 + iconv_t cd;
9396 + to_code = code;
9397 + errno = 0;
9398 + if (errno || (cd = iconv_open (to_code, "UCS-2BE")) == (iconv_t) -1)
9400 + puts ("Can't open converter");
9401 + exit (1);
9403 + return cd;
9407 +int
9408 +main (void)
9410 + iconv_t cd;
9411 + int result = 0;
9413 + cd = xiconv_open ("EUC-TW");
9414 + result |= xiconv (cd, 4) == true;
9415 + puts ("---");
9416 + result |= xiconv (cd, 1) == true;
9417 + puts ("---");
9418 + iconv_close (cd);
9420 + cd = xiconv_open ("EUC-JP");
9421 + result |= xiconv (cd, 4) == true;
9422 + puts ("---");
9423 + result |= xiconv (cd, 1) == true;
9424 + puts ("---");
9425 + iconv_close (cd);
9427 + return result;
9429 diff -u -udbrN glibc-2.3.2/iconvdata/euc-tw.c glibc-2.3.2-200304020432/iconvdata/euc-tw.c
9430 --- glibc-2.3.2/iconvdata/euc-tw.c Mon Dec 2 22:26:10 2002
9431 +++ glibc-2.3.2-200304020432/iconvdata/euc-tw.c Wed Mar 26 08:58:49 2003
9432 @@ -1,5 +1,5 @@
9433 /* Mapping tables for EUC-TW handling.
9434 - Copyright (C) 1998, 1999, 2000-2002 Free Software Foundation, Inc.
9435 + Copyright (C) 1998, 1999, 2000-2002, 2003 Free Software Foundation, Inc.
9436 This file is part of the GNU C Library.
9437 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
9439 @@ -143,7 +143,7 @@
9440 if (__builtin_expect (found, 1) == 0) \
9442 /* We ran out of space. */ \
9443 - result = __GCONV_INCOMPLETE_INPUT; \
9444 + result = __GCONV_FULL_OUTPUT; \
9445 break; \
9447 if (__builtin_expect (found, 1) != __UNKNOWN_10646_CHAR) \
9448 @@ -160,7 +160,7 @@
9449 if (__builtin_expect (found, 1) == 0) \
9451 /* We ran out of space. */ \
9452 - result = __GCONV_INCOMPLETE_INPUT; \
9453 + result = __GCONV_FULL_OUTPUT; \
9454 break; \
9456 if (__builtin_expect (found, 0) == __UNKNOWN_10646_CHAR) \
9457 diff -u -udbrN glibc-2.3.2/iconvdata/testdata/IBM1160.~1~ glibc-2.3.2-200304020432/iconvdata/testdata/IBM1160.~1~
9458 --- glibc-2.3.2/iconvdata/testdata/IBM1160.~1~ Thu Sep 20 07:06:15 2001
9459 +++ glibc-2.3.2-200304020432/iconvdata/testdata/IBM1160.~1~ Thu Jan 1 01:00:00 1970
9460 @@ -1,14 +0,0 @@
9461 - ! " # $ % & ' ( ) * + , - . / 0
9462 -1 2 3 4 5 6 7 8 9 : ; < = > ? @ A
9463 -B C D E F G H I J K L M N O P Q R
9464 -S T U V W X Y Z [ \ ] ^ _ ` a b c
9465 -d e f g h i j k l m n o p q r s t
9466 -u v w x y z { | } ~ \x7f € � ‚ ƒ „ …
9467 -† ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • –
9468 -— ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ §
9469 -¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸
9470 -¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É
9471 -Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú
9472 -Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë
9473 -ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü
9474 -ý þ ÿ
9475 diff -u -udbrN glibc-2.3.2/include/atomic.h glibc-2.3.2-200304020432/include/atomic.h
9476 --- glibc-2.3.2/include/atomic.h Thu Jan 1 01:00:00 1970
9477 +++ glibc-2.3.2-200304020432/include/atomic.h Wed Mar 26 05:01:47 2003
9478 @@ -0,0 +1,242 @@
9479 +/* Internal macros for atomic operations for GNU C Library.
9480 + Copyright (C) 2002, 2003 Free Software Foundation, Inc.
9481 + This file is part of the GNU C Library.
9482 + Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
9484 + The GNU C Library is free software; you can redistribute it and/or
9485 + modify it under the terms of the GNU Lesser General Public
9486 + License as published by the Free Software Foundation; either
9487 + version 2.1 of the License, or (at your option) any later version.
9489 + The GNU C Library is distributed in the hope that it will be useful,
9490 + but WITHOUT ANY WARRANTY; without even the implied warranty of
9491 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9492 + Lesser General Public License for more details.
9494 + You should have received a copy of the GNU Lesser General Public
9495 + License along with the GNU C Library; if not, write to the Free
9496 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
9497 + 02111-1307 USA. */
9499 +#ifndef _ATOMIC_H
9500 +#define _ATOMIC_H 1
9502 +#include <stdlib.h>
9504 +#include <bits/atomic.h>
9506 +/* Wrapper macros to call pre_NN_post (mem, ...) where NN is the
9507 + bit width of *MEM. The calling macro puts parens around MEM
9508 + and following args. */
9509 +#define __atomic_val_bysize(pre, post, mem, ...) \
9510 + ({ \
9511 + __typeof (*mem) __result; \
9512 + if (sizeof (*mem) == 1) \
9513 + __result = pre##_8_##post (mem, __VA_ARGS__); \
9514 + else if (sizeof (*mem) == 2) \
9515 + __result = pre##_16_##post (mem, __VA_ARGS__); \
9516 + else if (sizeof (*mem) == 4) \
9517 + __result = pre##_32_##post (mem, __VA_ARGS__); \
9518 + else if (sizeof (*mem) == 8) \
9519 + __result = pre##_64_##post (mem, __VA_ARGS__); \
9520 + else \
9521 + abort (); \
9522 + __result; \
9523 + })
9524 +#define __atomic_bool_bysize(pre, post, mem, ...) \
9525 + ({ \
9526 + int __result; \
9527 + if (sizeof (*mem) == 1) \
9528 + __result = pre##_8_##post (mem, __VA_ARGS__); \
9529 + else if (sizeof (*mem) == 2) \
9530 + __result = pre##_16_##post (mem, __VA_ARGS__); \
9531 + else if (sizeof (*mem) == 4) \
9532 + __result = pre##_32_##post (mem, __VA_ARGS__); \
9533 + else if (sizeof (*mem) == 8) \
9534 + __result = pre##_64_##post (mem, __VA_ARGS__); \
9535 + else \
9536 + abort (); \
9537 + __result; \
9538 + })
9541 +/* Atomically store NEWVAL in *MEM if *MEM is equal to OLDVAL.
9542 + Return the old *MEM value. */
9543 +#if !defined atomic_compare_and_exchange_val_acq \
9544 + && defined __arch_compare_and_exchange_val_32_acq
9545 +# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
9546 + __atomic_val_bysize (__arch_compare_and_exchange_val,acq, \
9547 + (mem), (newval), (oldval))
9548 +#endif
9551 +#ifndef atomic_compare_and_exchange_val_rel
9552 +# define atomic_compare_and_exchange_val_rel(mem, oldval, newval) \
9553 + atomic_compare_and_exchange_val_acq ((mem), (oldval), (newval))
9554 +#endif
9557 +/* Atomically store NEWVAL in *MEM if *MEM is equal to OLDVAL.
9558 + Return zero if *MEM was changed or non-zero if no exchange happened. */
9559 +#ifndef atomic_compare_and_exchange_bool_acq
9560 +# ifdef __arch_compare_and_exchange_bool_32_acq
9561 +# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
9562 + __atomic_bool_bysize (__arch_compare_and_exchange_bool,acq, \
9563 + (mem), (newval), (oldval))
9564 +# else
9565 +# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
9566 + ({ /* Cannot use __oldval here, because macros later in this file might \
9567 + call this macro with __oldval argument. */ \
9568 + __typeof (oldval) __old = (oldval); \
9569 + atomic_compare_and_exchange_val_acq ((mem), (newval), __old) != __old; \
9570 + })
9571 +# endif
9572 +#endif
9575 +#ifndef atomic_compare_and_exchange_bool_rel
9576 +# define atomic_compare_and_exchange_bool_rel(mem, oldval, newval) \
9577 + atomic_compare_and_exchange_bool_acq ((mem), (oldval), (newval))
9578 +#endif
9581 +/* Store NEWVALUE in *MEM and return the old value. */
9582 +#ifndef atomic_exchange
9583 +# define atomic_exchange(mem, newvalue) \
9584 + ({ __typeof (*(mem)) __oldval; \
9585 + __typeof (mem) __memp = (mem); \
9586 + __typeof (*(mem)) __value = (newvalue); \
9588 + do \
9589 + __oldval = (*__memp); \
9590 + while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \
9591 + __value, \
9592 + __oldval),\
9593 + 0)); \
9595 + __oldval; })
9596 +#endif
9599 +/* Add VALUE to *MEM and return the old value of *MEM. */
9600 +#ifndef atomic_exchange_and_add
9601 +# define atomic_exchange_and_add(mem, value) \
9602 + ({ __typeof (*(mem)) __oldval; \
9603 + __typeof (mem) __memp = (mem); \
9604 + __typeof (*(mem)) __value = (value); \
9606 + do \
9607 + __oldval = (*__memp); \
9608 + while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \
9609 + __oldval \
9610 + + __value,\
9611 + __oldval),\
9612 + 0)); \
9614 + __oldval; })
9615 +#endif
9618 +#ifndef atomic_add
9619 +# define atomic_add(mem, value) (void) atomic_exchange_and_add ((mem), (value))
9620 +#endif
9623 +#ifndef atomic_increment
9624 +# define atomic_increment(mem) atomic_add ((mem), 1)
9625 +#endif
9628 +/* Add one to *MEM and return true iff it's now zero. */
9629 +#ifndef atomic_increment_and_test
9630 +# define atomic_increment_and_test(mem) \
9631 + (atomic_exchange_and_add ((mem), 1) + 1 == 0)
9632 +#endif
9635 +#ifndef atomic_decrement
9636 +# define atomic_decrement(mem) atomic_add ((mem), -1)
9637 +#endif
9640 +/* Subtract 1 from *MEM and return true iff it's now zero. */
9641 +#ifndef atomic_decrement_and_test
9642 +# define atomic_decrement_and_test(mem) \
9643 + (atomic_exchange_and_add ((mem), -1) == 1)
9644 +#endif
9647 +/* Decrement *MEM if it is > 0, and return the old value. */
9648 +#ifndef atomic_decrement_if_positive
9649 +# define atomic_decrement_if_positive(mem) \
9650 + ({ __typeof (*(mem)) __oldval; \
9651 + __typeof (mem) __memp = (mem); \
9653 + do \
9654 + { \
9655 + __oldval = *__memp; \
9656 + if (__builtin_expect (__oldval <= 0, 0)) \
9657 + break; \
9658 + } \
9659 + while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \
9660 + __oldval \
9661 + - 1, \
9662 + __oldval),\
9663 + 0));\
9664 + __oldval; })
9665 +#endif
9668 +#ifndef atomic_add_negative
9669 +# define atomic_add_negative(mem, value) \
9670 + ({ __typeof (value) __aan_value = (value); \
9671 + atomic_exchange_and_add ((mem), __aan_value) < -__aan_value; })
9672 +#endif
9675 +#ifndef atomic_add_zero
9676 +# define atomic_add_zero(mem, value) \
9677 + ({ __typeof (value) __aaz_value = (value); \
9678 + atomic_exchange_and_add ((mem), __aaz_value) == -__aaz_value; })
9679 +#endif
9682 +#ifndef atomic_bit_set
9683 +# define atomic_bit_set(mem, bit) \
9684 + (void) atomic_bit_test_set((mem), (bit))
9685 +#endif
9688 +#ifndef atomic_bit_test_set
9689 +# define atomic_bit_test_set(mem, bit) \
9690 + ({ __typeof (*(mem)) __oldval; \
9691 + __typeof (mem) __memp = (mem); \
9692 + __typeof (*(mem)) __mask = ((__typeof (*(mem))) 1 << (bit)); \
9694 + do \
9695 + __oldval = (*__memp); \
9696 + while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \
9697 + __oldval \
9698 + | __mask, \
9699 + __oldval),\
9700 + 0)); \
9702 + __oldval & __mask; })
9703 +#endif
9706 +#ifndef atomic_full_barrier
9707 +# define atomic_full_barrier() __asm ("" ::: "memory")
9708 +#endif
9711 +#ifndef atomic_read_barrier
9712 +# define atomic_read_barrier() atomic_full_barrier()
9713 +#endif
9716 +#ifndef atomic_write_barrier
9717 +# define atomic_write_barrier() atomic_full_barrier()
9718 +#endif
9720 +#endif /* atomic.h */
9721 diff -u -udbrN glibc-2.3.2/include/dlfcn.h glibc-2.3.2-200304020432/include/dlfcn.h
9722 --- glibc-2.3.2/include/dlfcn.h Tue Nov 19 09:18:00 2002
9723 +++ glibc-2.3.2-200304020432/include/dlfcn.h Mon Mar 10 10:12:11 2003
9724 @@ -1,5 +1,6 @@
9725 #ifndef _DLFCN_H
9726 #include <dlfcn/dlfcn.h>
9727 +#include <link.h> /* For ElfW. */
9729 /* Internally used flag. */
9730 #define __RTLD_DLOPEN 0x80000000
9731 @@ -15,9 +16,12 @@
9732 extern int __libc_dlclose (void *__map);
9734 /* Locate shared object containing the given address. */
9735 -extern int _dl_addr (const void *address, Dl_info *info)
9736 +#ifdef ElfW
9737 +extern int _dl_addr (const void *address, Dl_info *info,
9738 + struct link_map **mapp, const ElfW(Sym) **symbolp)
9739 internal_function;
9740 libc_hidden_proto (_dl_addr)
9741 +#endif
9743 /* Open the shared object NAME, relocate it, and run its initializer if it
9744 hasn't already been run. MODE is as for `dlopen' (see <dlfcn.h>). If
9745 diff -u -udbrN glibc-2.3.2/include/gmp.h glibc-2.3.2-200304020432/include/gmp.h
9746 --- glibc-2.3.2/include/gmp.h Tue Dec 5 18:28:08 2000
9747 +++ glibc-2.3.2-200304020432/include/gmp.h Fri Mar 14 06:48:18 2003
9748 @@ -1,3 +1,7 @@
9749 +/* Include gmp-mparam.h first, such that definitions of _SHORT_LIMB
9750 + and _LONG_LONG_LIMB in it can take effect into gmp.h. */
9751 +#include <gmp-mparam.h>
9753 #ifndef __GMP_H__
9755 #include <stdlib/gmp.h>
9756 diff -u -udbrN glibc-2.3.2/include/sched.h glibc-2.3.2-200304020432/include/sched.h
9757 --- glibc-2.3.2/include/sched.h Thu Aug 15 07:39:03 2002
9758 +++ glibc-2.3.2-200304020432/include/sched.h Mon Mar 3 22:32:45 2003
9759 @@ -18,5 +18,5 @@
9760 extern int __clone (int (*__fn) (void *__arg), void *__child_stack,
9761 int __flags, void *__arg, ...);
9762 extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base,
9763 - size_t __child_stack_size, int __flags, void *__arg);
9764 + size_t __child_stack_size, int __flags, void *__arg, ...);
9765 #endif
9766 diff -u -udbrN glibc-2.3.2/inet/netinet/in.h glibc-2.3.2-200304020432/inet/netinet/in.h
9767 --- glibc-2.3.2/inet/netinet/in.h Sat Jul 7 21:21:03 2001
9768 +++ glibc-2.3.2-200304020432/inet/netinet/in.h Tue Mar 25 00:52:04 2003
9769 @@ -1,4 +1,4 @@
9770 -/* Copyright (C) 1991-1999, 2000, 2001 Free Software Foundation, Inc.
9771 +/* Copyright (C) 1991-1999, 2000, 2001, 2003 Free Software Foundation, Inc.
9772 This file is part of the GNU C Library.
9774 The GNU C Library is free software; you can redistribute it and/or
9775 @@ -79,6 +79,8 @@
9776 #define IPPROTO_PIM IPPROTO_PIM
9777 IPPROTO_COMP = 108, /* Compression Header Protocol. */
9778 #define IPPROTO_COMP IPPROTO_COMP
9779 + IPPROTO_SCTP = 132, /* Stream Control Transmission Protocol. */
9780 +#define IPPROTO_SCTP IPPROTO_SCTP
9781 IPPROTO_RAW = 255, /* Raw IP packets. */
9782 #define IPPROTO_RAW IPPROTO_RAW
9783 IPPROTO_MAX
9784 diff -u -udbrN glibc-2.3.2/inet/test-ifaddrs.c glibc-2.3.2-200304020432/inet/test-ifaddrs.c
9785 --- glibc-2.3.2/inet/test-ifaddrs.c Mon Dec 2 23:36:09 2002
9786 +++ glibc-2.3.2-200304020432/inet/test-ifaddrs.c Sat Mar 29 08:25:19 2003
9787 @@ -69,6 +69,10 @@
9788 #endif
9789 case AF_UNSPEC:
9790 return "---";
9792 + case AF_PACKET:
9793 + return "<packet>";
9795 default:
9796 ++failures;
9797 printf ("sa_family=%d %08x\n", sa->sa_family,
9798 diff -u -udbrN glibc-2.3.2/intl/po2test.sed glibc-2.3.2-200304020432/intl/po2test.sed
9799 --- glibc-2.3.2/intl/po2test.sed Sat Jan 22 06:43:54 2000
9800 +++ glibc-2.3.2-200304020432/intl/po2test.sed Sun Mar 30 23:55:45 2003
9801 @@ -1,5 +1,5 @@
9802 # po2test.sed - Convert Uniforum style .po file to C code for testing.
9803 -# Copyright (C) 2000 Free Software Foundation, Inc.
9804 +# Copyright (C) 2000,2003 Free Software Foundation, Inc.
9805 # Ulrich Drepper <drepper@cygnus.com>, 2000.
9807 # This program is free software; you can redistribute it and/or modify
9808 @@ -16,55 +16,37 @@
9809 # along with this program; if not, write to the Free Software
9810 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
9814 # We copy the original message as a comment into the .msg file. But enclose
9815 # them with INPUT ( ).
9817 -/^msgid/ {
9818 - s/msgid[ ]*"\(.*\)"/INPUT ("\1")/
9819 -# Clear flag from last substitution.
9820 - tb
9821 -# Append the next line.
9822 - :b
9824 -# Look whether second part is a continuation line.
9825 - s/\(.*\)")\(\n\)"\(.*\)"/\1\\\2\3")/
9826 -# Yes, then branch.
9827 - ta
9830 -# Note that `D' includes a jump to the start!!
9831 -# We found a continuation line. But before printing insert '\'.
9832 - :a
9833 - s/\(.*\)")\(\n.*\)/\1\\\2/
9835 -# We cannot use the sed command `D' here
9836 - s/.*\n\(.*\)/\1/
9837 - tb
9839 +s/^msgid[ ]*"\(.*\)"/INPUT ("\1")/
9840 +# Clear flag from last substitution and jump if matching
9844 # Copy the translations as well and enclose them with OUTPUT ( ).
9846 -/^msgstr/ {
9847 - s/msgstr[ ]*"\(.*\)"/OUTPUT ("\1")/
9848 -# Clear flag from last substitution.
9849 - tb
9850 +s/^msgstr[ ]*"\(.*\)"/OUTPUT ("\1")/
9851 +# Clear flag from last substitution and jump if matching
9857 # Append the next line.
9858 - :b
9860 -# Look whether second part is a continuation line.
9861 - s/\(.*\)")\(\n\)"\(.*\)"/\1\\\2\3")/
9862 -# Yes, then branch.
9863 - ta
9866 -# Note that `D' includes a jump to the start!!
9867 -# We found a continuation line. But before printing insert '\'.
9868 - :a
9869 - s/\(.*\)")\(\n.*\)/\1\\\2/
9871 +$!N
9872 +# Check whether second part is a continuation line. If so, before printing
9873 +# insert '\'.
9874 +s/\(.*\)")\(\n\)"\(.*\)"/\1\\\2\3")/
9877 +# No, go to the top and process it. Note that `D' includes a jump to the start!!
9879 +# Yes, we found a continuation line.
9881 # We cannot use the sed command `D' here
9882 - s/.*\n\(.*\)/\1/
9883 - tb
9886 +s/[^\n]*\n//
9887 +# Clear the substitution flag and do the next line.
9889 diff -u -udbrN glibc-2.3.2/io/fts.c glibc-2.3.2-200304020432/io/fts.c
9890 --- glibc-2.3.2/io/fts.c Mon Apr 8 09:02:07 2002
9891 +++ glibc-2.3.2-200304020432/io/fts.c Sun Mar 16 02:03:52 2003
9892 @@ -581,8 +581,9 @@
9893 FTSENT *cur, *tail;
9894 DIR *dirp;
9895 void *oldaddr;
9896 - int cderrno, descend, len, level, maxlen, nlinks, saved_errno,
9897 + int cderrno, descend, len, level, nlinks, saved_errno,
9898 nostat, doadjust;
9899 + size_t maxlen;
9900 char *cp;
9902 /* Set current node pointer. */
9903 diff -u -udbrN glibc-2.3.2/libio/fileops.c glibc-2.3.2-200304020432/libio/fileops.c
9904 --- glibc-2.3.2/libio/fileops.c Wed Jan 8 06:18:32 2003
9905 +++ glibc-2.3.2-200304020432/libio/fileops.c Thu Mar 27 12:53:59 2003
9906 @@ -353,6 +353,7 @@
9907 /* Something went wrong, we cannot load the conversion modules.
9908 This means we cannot proceed since the user explicitly asked
9909 for these. */
9910 + (void) INTUSE(_IO_file_close_it) (fp);
9911 __set_errno (EINVAL);
9912 return NULL;
9914 @@ -456,7 +457,7 @@
9915 _IO_FILE *result;
9917 /* Change the function table. */
9918 - _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &INTUSE(_IO_file_jumps);
9919 + _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_file_jumps;
9920 fp->_wide_data->_wide_vtable = &_IO_wfile_jumps;
9922 /* And perform the normal operation. */
9923 @@ -708,7 +709,7 @@
9924 fp->_IO_buf_base = fp->_IO_buf_end = NULL;
9925 _IO_setg (fp, NULL, NULL, NULL);
9926 if (fp->_mode <= 0)
9927 - _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &INTUSE(_IO_file_jumps);
9928 + _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_file_jumps;
9929 else
9930 _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_wfile_jumps;
9931 fp->_wide_data->_wide_vtable = &_IO_wfile_jumps;
9932 @@ -801,7 +802,7 @@
9933 /* We couldn't use mmap, so revert to the vanilla file operations. */
9935 if (fp->_mode <= 0)
9936 - _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &INTUSE(_IO_file_jumps);
9937 + _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_file_jumps;
9938 else
9939 _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_wfile_jumps;
9940 fp->_wide_data->_wide_vtable = &_IO_wfile_jumps;
9941 @@ -1586,7 +1587,7 @@
9942 JUMP_INIT(showmanyc, _IO_default_showmanyc),
9943 JUMP_INIT(imbue, _IO_default_imbue)
9945 -INTVARDEF(_IO_file_jumps)
9946 +libc_hidden_data_def (_IO_file_jumps)
9948 struct _IO_jump_t _IO_file_jumps_mmap =
9950 diff -u -udbrN glibc-2.3.2/libio/freopen.c glibc-2.3.2-200304020432/libio/freopen.c
9951 --- glibc-2.3.2/libio/freopen.c Thu Oct 3 10:11:25 2002
9952 +++ glibc-2.3.2-200304020432/libio/freopen.c Thu Mar 27 12:53:59 2003
9953 @@ -1,4 +1,5 @@
9954 -/* Copyright (C) 1993,95,96,97,98,2000,2001,2002 Free Software Foundation, Inc.
9955 +/* Copyright (C) 1993,95,96,97,98,2000,2001,2002,2003
9956 + Free Software Foundation, Inc.
9957 This file is part of the GNU C Library.
9959 The GNU C Library is free software; you can redistribute it and/or
9960 @@ -67,9 +68,9 @@
9961 #endif
9963 INTUSE(_IO_file_close_it) (fp);
9964 - _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &INTUSE(_IO_file_jumps);
9965 + _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_file_jumps;
9966 if (fp->_vtable_offset == 0 && fp->_wide_data != NULL)
9967 - fp->_wide_data->_wide_vtable = &INTUSE(_IO_wfile_jumps);
9968 + fp->_wide_data->_wide_vtable = &_IO_wfile_jumps;
9969 result = INTUSE(_IO_file_fopen) (fp, filename, mode, 1);
9970 if (result != NULL)
9971 result = __fopen_maybe_mmap (result);
9972 diff -u -udbrN glibc-2.3.2/libio/freopen64.c glibc-2.3.2-200304020432/libio/freopen64.c
9973 --- glibc-2.3.2/libio/freopen64.c Thu Oct 3 10:11:32 2002
9974 +++ glibc-2.3.2-200304020432/libio/freopen64.c Thu Mar 27 12:53:59 2003
9975 @@ -1,4 +1,4 @@
9976 -/* Copyright (C) 1993,1995,1996,1997,1998,2000,2001,2002
9977 +/* Copyright (C) 1993,1995,1996,1997,1998,2000,2001,2002, 2003
9978 Free Software Foundation, Inc.
9979 This file is part of the GNU C Library.
9981 @@ -53,9 +53,9 @@
9982 filename = fd_to_filename (fd);
9984 INTUSE(_IO_file_close_it) (fp);
9985 - _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &INTUSE(_IO_file_jumps);
9986 + _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_file_jumps;
9987 if (fp->_vtable_offset == 0 && fp->_wide_data != NULL)
9988 - fp->_wide_data->_wide_vtable = &INTUSE(_IO_wfile_jumps);
9989 + fp->_wide_data->_wide_vtable = &_IO_wfile_jumps;
9990 result = INTUSE(_IO_file_fopen) (fp, filename, mode, 0);
9991 if (result != NULL)
9992 result = __fopen_maybe_mmap (result);
9993 diff -u -udbrN glibc-2.3.2/libio/iofdopen.c glibc-2.3.2-200304020432/libio/iofdopen.c
9994 --- glibc-2.3.2/libio/iofdopen.c Fri Aug 30 08:56:29 2002
9995 +++ glibc-2.3.2-200304020432/libio/iofdopen.c Thu Mar 27 12:53:59 2003
9996 @@ -1,4 +1,5 @@
9997 -/* Copyright (C) 1993,1994,1997-1999,2000,2002 Free Software Foundation, Inc.
9998 +/* Copyright (C) 1993,1994,1997,1998,1999,2000,2002,2003
9999 + Free Software Foundation, Inc.
10000 This file is part of the GNU C Library.
10002 The GNU C Library is free software; you can redistribute it and/or
10003 @@ -152,12 +153,12 @@
10004 (use_mmap && (read_write & _IO_NO_WRITES))
10005 ? &_IO_wfile_jumps_maybe_mmap :
10006 #endif
10007 - &INTUSE(_IO_wfile_jumps));
10008 + &_IO_wfile_jumps);
10009 _IO_JUMPS (&new_f->fp) =
10010 #ifdef _G_HAVE_MMAP
10011 (use_mmap && (read_write & _IO_NO_WRITES)) ? &_IO_file_jumps_maybe_mmap :
10012 #endif
10013 - &INTUSE(_IO_file_jumps);
10014 + &_IO_file_jumps;
10015 INTUSE(_IO_file_init) (&new_f->fp);
10016 #if !_IO_UNIFIED_JUMPTABLES
10017 new_f->fp.vtable = NULL;
10018 diff -u -udbrN glibc-2.3.2/libio/iofopen.c glibc-2.3.2-200304020432/libio/iofopen.c
10019 --- glibc-2.3.2/libio/iofopen.c Fri Aug 30 08:45:05 2002
10020 +++ glibc-2.3.2-200304020432/libio/iofopen.c Thu Mar 27 12:53:59 2003
10021 @@ -1,4 +1,5 @@
10022 -/* Copyright (C) 1993,1997,1998,1999,2000,2002 Free Software Foundation, Inc.
10023 +/* Copyright (C) 1993,1997,1998,1999,2000,2002,2003
10024 + Free Software Foundation, Inc.
10025 This file is part of the GNU C Library.
10027 The GNU C Library is free software; you can redistribute it and/or
10028 @@ -80,11 +81,11 @@
10029 new_f->fp.file._lock = &new_f->lock;
10030 #endif
10031 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
10032 - _IO_no_init (&new_f->fp.file, 0, 0, &new_f->wd, &INTUSE(_IO_wfile_jumps));
10033 + _IO_no_init (&new_f->fp.file, 0, 0, &new_f->wd, &_IO_wfile_jumps);
10034 #else
10035 _IO_no_init (&new_f->fp.file, 1, 0, NULL, NULL);
10036 #endif
10037 - _IO_JUMPS (&new_f->fp) = &INTUSE(_IO_file_jumps);
10038 + _IO_JUMPS (&new_f->fp) = &_IO_file_jumps;
10039 INTUSE(_IO_file_init) (&new_f->fp);
10040 #if !_IO_UNIFIED_JUMPTABLES
10041 new_f->fp.vtable = NULL;
10042 diff -u -udbrN glibc-2.3.2/libio/iovdprintf.c glibc-2.3.2-200304020432/libio/iovdprintf.c
10043 --- glibc-2.3.2/libio/iovdprintf.c Fri Aug 2 23:46:58 2002
10044 +++ glibc-2.3.2-200304020432/libio/iovdprintf.c Thu Mar 27 12:53:59 2003
10045 @@ -1,4 +1,4 @@
10046 -/* Copyright (C) 1995, 1997-2000, 2001, 2002 Free Software Foundation, Inc.
10047 +/* Copyright (C) 1995,1997-2000,2001,2002,2003 Free Software Foundation, Inc.
10048 This file is part of the GNU C Library.
10050 The GNU C Library is free software; you can redistribute it and/or
10051 @@ -41,8 +41,8 @@
10052 #ifdef _IO_MTSAFE_IO
10053 tmpfil.file._lock = NULL;
10054 #endif
10055 - _IO_no_init (&tmpfil.file, _IO_USER_LOCK, 0, &wd, &INTUSE(_IO_wfile_jumps));
10056 - _IO_JUMPS (&tmpfil) = &INTUSE(_IO_file_jumps);
10057 + _IO_no_init (&tmpfil.file, _IO_USER_LOCK, 0, &wd, &_IO_wfile_jumps);
10058 + _IO_JUMPS (&tmpfil) = &_IO_file_jumps;
10059 INTUSE(_IO_file_init) (&tmpfil);
10060 #if !_IO_UNIFIED_JUMPTABLES
10061 tmpfil.vtable = NULL;
10062 diff -u -udbrN glibc-2.3.2/libio/libioP.h glibc-2.3.2-200304020432/libio/libioP.h
10063 --- glibc-2.3.2/libio/libioP.h Wed Jan 8 06:18:05 2003
10064 +++ glibc-2.3.2-200304020432/libio/libioP.h Thu Mar 27 12:53:59 2003
10065 @@ -450,9 +450,11 @@
10066 extern void _IO_default_imbue __P ((_IO_FILE *, void *));
10068 extern struct _IO_jump_t _IO_file_jumps;
10069 +libc_hidden_proto (_IO_file_jumps)
10070 extern struct _IO_jump_t _IO_file_jumps_mmap attribute_hidden;
10071 extern struct _IO_jump_t _IO_file_jumps_maybe_mmap attribute_hidden;
10072 -extern struct _IO_jump_t _IO_wfile_jumps attribute_hidden;
10073 +extern struct _IO_jump_t _IO_wfile_jumps;
10074 +libc_hidden_proto (_IO_wfile_jumps)
10075 extern struct _IO_jump_t _IO_wfile_jumps_mmap attribute_hidden;
10076 extern struct _IO_jump_t _IO_wfile_jumps_maybe_mmap attribute_hidden;
10077 extern struct _IO_jump_t _IO_old_file_jumps attribute_hidden;
10078 diff -u -udbrN glibc-2.3.2/libio/stdfiles.c glibc-2.3.2-200304020432/libio/stdfiles.c
10079 --- glibc-2.3.2/libio/stdfiles.c Wed Mar 13 02:05:41 2002
10080 +++ glibc-2.3.2-200304020432/libio/stdfiles.c Thu Mar 27 12:53:59 2003
10081 @@ -1,4 +1,4 @@
10082 -/* Copyright (C) 1993-1997,1999,2000,2002 Free Software Foundation, Inc.
10083 +/* Copyright (C) 1993-1997,1999,2000,2002,2003 Free Software Foundation, Inc.
10084 This file is part of the GNU C Library.
10086 The GNU C Library is free software; you can redistribute it and/or
10087 @@ -39,30 +39,30 @@
10088 # define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
10089 static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
10090 static struct _IO_wide_data _IO_wide_data_##FD \
10091 - = { ._wide_vtable = &INTUSE(_IO_wfile_jumps) }; \
10092 + = { ._wide_vtable = &_IO_wfile_jumps }; \
10093 struct _IO_FILE_plus NAME \
10094 = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, &_IO_wide_data_##FD), \
10095 - &INTUSE(_IO_file_jumps)};
10096 + &_IO_file_jumps};
10097 # else
10098 # define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
10099 static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
10100 struct _IO_FILE_plus NAME \
10101 = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), \
10102 - &INTUSE(_IO_file_jumps)};
10103 + &_IO_file_jumps};
10104 # endif
10105 #else
10106 # if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
10107 # define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
10108 static struct _IO_wide_data _IO_wide_data_##FD \
10109 - = { ._wide_vtable = &INTUSE(_IO_wfile_jumps) }; \
10110 + = { ._wide_vtable = &_IO_wfile_jumps }; \
10111 struct _IO_FILE_plus NAME \
10112 = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, &_IO_wide_data_##FD), \
10113 - &INTUSE(_IO_file_jumps)};
10114 + &_IO_file_jumps};
10115 # else
10116 # define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
10117 struct _IO_FILE_plus NAME \
10118 = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), \
10119 - &INTUSE(_IO_file_jumps)};
10120 + &_IO_file_jumps};
10121 # endif
10122 #endif
10124 diff -u -udbrN glibc-2.3.2/libio/swprintf.c glibc-2.3.2-200304020432/libio/swprintf.c
10125 --- glibc-2.3.2/libio/swprintf.c Sat Jul 7 21:21:03 2001
10126 +++ glibc-2.3.2-200304020432/libio/swprintf.c Wed Mar 5 20:58:03 2003
10127 @@ -1,4 +1,5 @@
10128 -/* Copyright (C) 1991,1995,1997,1998,1999,2000 Free Software Foundation, Inc.
10129 +/* Copyright (C) 1991,1995,1997,1998,1999,2000,2003
10130 + Free Software Foundation, Inc.
10131 This file is part of the GNU C Library.
10133 The GNU C Library is free software; you can redistribute it and/or
10134 @@ -22,10 +23,7 @@
10135 /* Write formatted output into S, according to the format string FORMAT. */
10136 /* VARARGS3 */
10138 -swprintf (s, n, format)
10139 - wchar_t *s;
10140 - size_t n;
10141 - const wchar_t *format;
10142 +swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
10144 va_list arg;
10145 int done;
10146 diff -u -udbrN glibc-2.3.2/libio/swscanf.c glibc-2.3.2-200304020432/libio/swscanf.c
10147 --- glibc-2.3.2/libio/swscanf.c Sat Jul 7 21:21:03 2001
10148 +++ glibc-2.3.2-200304020432/libio/swscanf.c Wed Mar 5 20:58:03 2003
10149 @@ -1,4 +1,4 @@
10150 -/* Copyright (C) 1991, 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
10151 +/* Copyright (C) 1991,1995,1996,1998,1999,2003 Free Software Foundation, Inc.
10152 This file is part of the GNU C Library.
10154 The GNU C Library is free software; you can redistribute it and/or
10155 @@ -22,9 +22,7 @@
10156 /* Read formatted input from S, according to the format string FORMAT. */
10157 /* VARARGS2 */
10159 -swscanf (s, format)
10160 - const wchar_t *s;
10161 - const wchar_t *format;
10162 +swscanf (const wchar_t *s, const wchar_t *format, ...)
10164 va_list arg;
10165 int done;
10166 diff -u -udbrN glibc-2.3.2/libio/wfileops.c glibc-2.3.2-200304020432/libio/wfileops.c
10167 --- glibc-2.3.2/libio/wfileops.c Tue Nov 5 08:28:51 2002
10168 +++ glibc-2.3.2-200304020432/libio/wfileops.c Thu Mar 27 12:53:59 2003
10169 @@ -1,4 +1,4 @@
10170 -/* Copyright (C) 1993,95,97,98,99,2000,2001,2002 Free Software Foundation, Inc.
10171 +/* Copyright (C) 1993,95,97,98,99,2000,2001,2002, 2003 Free Software Foundation, Inc.
10172 This file is part of the GNU C Library.
10173 Written by Ulrich Drepper <drepper@cygnus.com>.
10174 Based on the single byte version by Per Bothner <bothner@cygnus.com>.
10175 @@ -879,7 +879,7 @@
10176 JUMP_INIT(showmanyc, _IO_default_showmanyc),
10177 JUMP_INIT(imbue, _IO_default_imbue)
10179 -INTVARDEF(_IO_wfile_jumps)
10180 +libc_hidden_data_def (_IO_wfile_jumps)
10183 struct _IO_jump_t _IO_wfile_jumps_mmap =
10184 diff -u -udbrN glibc-2.3.2/linuxthreads/Banner glibc-2.3.2-200304020432/linuxthreads/Banner
10185 diff -u -udbrN glibc-2.3.2/linuxthreads/ChangeLog glibc-2.3.2-200304020432/linuxthreads/ChangeLog
10186 diff -u -udbrN glibc-2.3.2/linuxthreads/Changes glibc-2.3.2-200304020432/linuxthreads/Changes
10187 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/Makefile glibc-2.3.2-200304020432/linuxthreads/Examples/Makefile
10188 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex1.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex1.c
10189 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex10.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex10.c
10190 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex11.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex11.c
10191 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex12.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex12.c
10192 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex13.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex13.c
10193 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex14.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex14.c
10194 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex15.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex15.c
10195 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex16.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex16.c
10196 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex17.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex17.c
10197 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex18.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex18.c
10198 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex2.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex2.c
10199 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex3.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex3.c
10200 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex4.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex4.c
10201 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex5.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex5.c
10202 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex6.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex6.c
10203 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex7.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex7.c
10204 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex8.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex8.c
10205 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/ex9.c glibc-2.3.2-200304020432/linuxthreads/Examples/ex9.c
10206 diff -u -udbrN glibc-2.3.2/linuxthreads/Examples/tststatic.c glibc-2.3.2-200304020432/linuxthreads/Examples/tststatic.c
10207 diff -u -udbrN glibc-2.3.2/linuxthreads/FAQ.html glibc-2.3.2-200304020432/linuxthreads/FAQ.html
10208 diff -u -udbrN glibc-2.3.2/linuxthreads/LICENSE glibc-2.3.2-200304020432/linuxthreads/LICENSE
10209 diff -u -udbrN glibc-2.3.2/linuxthreads/Makeconfig glibc-2.3.2-200304020432/linuxthreads/Makeconfig
10210 diff -u -udbrN glibc-2.3.2/linuxthreads/Makefile glibc-2.3.2-200304020432/linuxthreads/Makefile
10211 diff -u -udbrN glibc-2.3.2/linuxthreads/README glibc-2.3.2-200304020432/linuxthreads/README
10212 diff -u -udbrN glibc-2.3.2/linuxthreads/README.Xfree3.2 glibc-2.3.2-200304020432/linuxthreads/README.Xfree3.2
10213 diff -u -udbrN glibc-2.3.2/linuxthreads/Versions glibc-2.3.2-200304020432/linuxthreads/Versions
10214 diff -u -udbrN glibc-2.3.2/linuxthreads/alloca_cutoff.c glibc-2.3.2-200304020432/linuxthreads/alloca_cutoff.c
10215 diff -u -udbrN glibc-2.3.2/linuxthreads/attr.c glibc-2.3.2-200304020432/linuxthreads/attr.c
10216 diff -u -udbrN glibc-2.3.2/linuxthreads/barrier.c glibc-2.3.2-200304020432/linuxthreads/barrier.c
10217 diff -u -udbrN glibc-2.3.2/linuxthreads/bug-sleep.c glibc-2.3.2-200304020432/linuxthreads/bug-sleep.c
10218 diff -u -udbrN glibc-2.3.2/linuxthreads/cancel.c glibc-2.3.2-200304020432/linuxthreads/cancel.c
10219 diff -u -udbrN glibc-2.3.2/linuxthreads/condvar.c glibc-2.3.2-200304020432/linuxthreads/condvar.c
10220 diff -u -udbrN glibc-2.3.2/linuxthreads/configure glibc-2.3.2-200304020432/linuxthreads/configure
10221 diff -u -udbrN glibc-2.3.2/linuxthreads/descr.h glibc-2.3.2-200304020432/linuxthreads/descr.h
10222 diff -u -udbrN glibc-2.3.2/linuxthreads/ecmutex.c glibc-2.3.2-200304020432/linuxthreads/ecmutex.c
10223 diff -u -udbrN glibc-2.3.2/linuxthreads/errno.c glibc-2.3.2-200304020432/linuxthreads/errno.c
10224 diff -u -udbrN glibc-2.3.2/linuxthreads/events.c glibc-2.3.2-200304020432/linuxthreads/events.c
10225 diff -u -udbrN glibc-2.3.2/linuxthreads/forward.c glibc-2.3.2-200304020432/linuxthreads/forward.c
10226 diff -u -udbrN glibc-2.3.2/linuxthreads/internals.h glibc-2.3.2-200304020432/linuxthreads/internals.h
10227 diff -u -udbrN glibc-2.3.2/linuxthreads/join.c glibc-2.3.2-200304020432/linuxthreads/join.c
10228 diff -u -udbrN glibc-2.3.2/linuxthreads/joinrace.c glibc-2.3.2-200304020432/linuxthreads/joinrace.c
10229 diff -u -udbrN glibc-2.3.2/linuxthreads/libc-cancellation.c glibc-2.3.2-200304020432/linuxthreads/libc-cancellation.c
10230 diff -u -udbrN glibc-2.3.2/linuxthreads/libc-tls-loc.c glibc-2.3.2-200304020432/linuxthreads/libc-tls-loc.c
10231 diff -u -udbrN glibc-2.3.2/linuxthreads/libc-tsd.c glibc-2.3.2-200304020432/linuxthreads/libc-tsd.c
10232 diff -u -udbrN glibc-2.3.2/linuxthreads/libc_pthread_init.c glibc-2.3.2-200304020432/linuxthreads/libc_pthread_init.c
10233 diff -u -udbrN glibc-2.3.2/linuxthreads/linuxthreads.texi glibc-2.3.2-200304020432/linuxthreads/linuxthreads.texi
10234 diff -u -udbrN glibc-2.3.2/linuxthreads/lockfile.c glibc-2.3.2-200304020432/linuxthreads/lockfile.c
10235 diff -u -udbrN glibc-2.3.2/linuxthreads/man/Makefile glibc-2.3.2-200304020432/linuxthreads/man/Makefile
10236 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_atfork.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_atfork.man
10237 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_attr_init.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_attr_init.man
10238 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_cancel.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_cancel.man
10239 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_cleanup_push.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_cleanup_push.man
10240 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_cond_init.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_cond_init.man
10241 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_condattr_init.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_condattr_init.man
10242 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_create.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_create.man
10243 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_detach.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_detach.man
10244 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_equal.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_equal.man
10245 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_exit.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_exit.man
10246 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_join.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_join.man
10247 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_key_create.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_key_create.man
10248 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_kill_other_threads_np.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_kill_other_threads_np.man
10249 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_mutex_init.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_mutex_init.man
10250 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_mutexattr_init.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_mutexattr_init.man
10251 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_mutexattr_setkind_np.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_mutexattr_setkind_np.man
10252 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_once.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_once.man
10253 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_self.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_self.man
10254 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_setschedparam.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_setschedparam.man
10255 diff -u -udbrN glibc-2.3.2/linuxthreads/man/pthread_sigmask.man glibc-2.3.2-200304020432/linuxthreads/man/pthread_sigmask.man
10256 diff -u -udbrN glibc-2.3.2/linuxthreads/man/sem_init.man glibc-2.3.2-200304020432/linuxthreads/man/sem_init.man
10257 diff -u -udbrN glibc-2.3.2/linuxthreads/man/troffprepro glibc-2.3.2-200304020432/linuxthreads/man/troffprepro
10258 diff -u -udbrN glibc-2.3.2/linuxthreads/manager.c glibc-2.3.2-200304020432/linuxthreads/manager.c
10259 diff -u -udbrN glibc-2.3.2/linuxthreads/mutex.c glibc-2.3.2-200304020432/linuxthreads/mutex.c
10260 diff -u -udbrN glibc-2.3.2/linuxthreads/old_pthread_atfork.c glibc-2.3.2-200304020432/linuxthreads/old_pthread_atfork.c
10261 diff -u -udbrN glibc-2.3.2/linuxthreads/oldsemaphore.c glibc-2.3.2-200304020432/linuxthreads/oldsemaphore.c
10262 diff -u -udbrN glibc-2.3.2/linuxthreads/pt-allocrtsig.c glibc-2.3.2-200304020432/linuxthreads/pt-allocrtsig.c
10263 diff -u -udbrN glibc-2.3.2/linuxthreads/pt-machine.c glibc-2.3.2-200304020432/linuxthreads/pt-machine.c
10264 diff -u -udbrN glibc-2.3.2/linuxthreads/pt-system.c glibc-2.3.2-200304020432/linuxthreads/pt-system.c
10265 diff -u -udbrN glibc-2.3.2/linuxthreads/ptclock_gettime.c glibc-2.3.2-200304020432/linuxthreads/ptclock_gettime.c
10266 diff -u -udbrN glibc-2.3.2/linuxthreads/ptclock_settime.c glibc-2.3.2-200304020432/linuxthreads/ptclock_settime.c
10267 diff -u -udbrN glibc-2.3.2/linuxthreads/ptfork.c glibc-2.3.2-200304020432/linuxthreads/ptfork.c
10268 diff -u -udbrN glibc-2.3.2/linuxthreads/pthandles.c glibc-2.3.2-200304020432/linuxthreads/pthandles.c
10269 diff -u -udbrN glibc-2.3.2/linuxthreads/pthread.c glibc-2.3.2-200304020432/linuxthreads/pthread.c
10270 diff -u -udbrN glibc-2.3.2/linuxthreads/pthread_atfork.c glibc-2.3.2-200304020432/linuxthreads/pthread_atfork.c
10271 diff -u -udbrN glibc-2.3.2/linuxthreads/ptlongjmp.c glibc-2.3.2-200304020432/linuxthreads/ptlongjmp.c
10272 diff -u -udbrN glibc-2.3.2/linuxthreads/queue.h glibc-2.3.2-200304020432/linuxthreads/queue.h
10273 diff -u -udbrN glibc-2.3.2/linuxthreads/restart.h glibc-2.3.2-200304020432/linuxthreads/restart.h
10274 diff -u -udbrN glibc-2.3.2/linuxthreads/rwlock.c glibc-2.3.2-200304020432/linuxthreads/rwlock.c
10275 diff -u -udbrN glibc-2.3.2/linuxthreads/semaphore.c glibc-2.3.2-200304020432/linuxthreads/semaphore.c
10276 diff -u -udbrN glibc-2.3.2/linuxthreads/semaphore.h glibc-2.3.2-200304020432/linuxthreads/semaphore.h
10277 diff -u -udbrN glibc-2.3.2/linuxthreads/shlib-versions glibc-2.3.2-200304020432/linuxthreads/shlib-versions
10278 diff -u -udbrN glibc-2.3.2/linuxthreads/sighandler.c glibc-2.3.2-200304020432/linuxthreads/sighandler.c
10279 diff -u -udbrN glibc-2.3.2/linuxthreads/signals.c glibc-2.3.2-200304020432/linuxthreads/signals.c
10280 diff -u -udbrN glibc-2.3.2/linuxthreads/specific.c glibc-2.3.2-200304020432/linuxthreads/specific.c
10281 diff -u -udbrN glibc-2.3.2/linuxthreads/spinlock.c glibc-2.3.2-200304020432/linuxthreads/spinlock.c
10282 diff -u -udbrN glibc-2.3.2/linuxthreads/spinlock.h glibc-2.3.2-200304020432/linuxthreads/spinlock.h
10283 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/alpha/elf/pt-initfini.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/alpha/elf/pt-initfini.c
10284 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/alpha/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/alpha/pspinlock.c
10285 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/alpha/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/alpha/pt-machine.h
10286 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/alpha/tls.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/alpha/tls.h
10287 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/arm/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/arm/pspinlock.c
10288 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/arm/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/arm/pt-machine.h
10289 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/cris/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/cris/pspinlock.c
10290 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/cris/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/cris/pt-machine.h
10291 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/hppa/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/hppa/pspinlock.c
10292 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/hppa/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/hppa/pt-machine.h
10293 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/i386/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/i386/Makefile
10294 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/i386/i586/Versions glibc-2.3.2-200304020432/linuxthreads/sysdeps/i386/i586/Versions
10295 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/i386/i686/Versions glibc-2.3.2-200304020432/linuxthreads/sysdeps/i386/i686/Versions
10296 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/i386/i686/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/i386/i686/pt-machine.h
10297 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/i386/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/i386/pspinlock.c
10298 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/i386/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/i386/pt-machine.h
10299 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/i386/tcb-offsets.sym glibc-2.3.2-200304020432/linuxthreads/sysdeps/i386/tcb-offsets.sym
10300 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/i386/tls.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/i386/tls.h
10301 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/i386/useldt.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/i386/useldt.h
10302 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/ia64/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/ia64/Makefile
10303 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/ia64/Versions glibc-2.3.2-200304020432/linuxthreads/sysdeps/ia64/Versions
10304 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/ia64/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/ia64/pspinlock.c
10305 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/ia64/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/ia64/pt-machine.h
10306 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/ia64/tcb-offsets.sym glibc-2.3.2-200304020432/linuxthreads/sysdeps/ia64/tcb-offsets.sym
10307 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/ia64/tls.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/ia64/tls.h
10308 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/m68k/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/m68k/Makefile
10309 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/m68k/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/m68k/pspinlock.c
10310 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/m68k/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/m68k/pt-machine.h
10311 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/mips/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/mips/pspinlock.c
10312 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/mips/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/mips/pt-machine.h
10313 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/powerpc/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/powerpc/Makefile
10314 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/powerpc/powerpc32/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/powerpc/powerpc32/pt-machine.h
10315 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/powerpc/powerpc64/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/powerpc/powerpc64/pt-machine.h
10316 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/powerpc/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/powerpc/pspinlock.c
10317 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/powerpc/tcb-offsets.sym glibc-2.3.2-200304020432/linuxthreads/sysdeps/powerpc/tcb-offsets.sym
10318 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/powerpc/tls.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/powerpc/tls.h
10319 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/Makefile
10320 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/Subdirs glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/Subdirs
10321 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/bits/initspin.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/bits/initspin.h
10322 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/bits/libc-lock.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/bits/libc-lock.h
10323 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/bits/libc-tsd.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/bits/libc-tsd.h
10324 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h
10325 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/bits/typesizes.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/bits/typesizes.h
10326 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/errno-loc.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/errno-loc.c
10327 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/flockfile.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/flockfile.c
10328 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/ftrylockfile.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/ftrylockfile.c
10329 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/funlockfile.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/funlockfile.c
10330 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/getcpuclockid.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/getcpuclockid.c
10331 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/herrno-loc.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/herrno-loc.c
10332 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/list.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/list.h
10333 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/posix-timer.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/posix-timer.h
10334 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/pt-initfini.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/pt-initfini.c
10335 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/pthread.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/pthread.h
10336 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/res-state.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/res-state.c
10337 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/semaphore.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/semaphore.h
10338 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/sigaction.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/sigaction.c
10339 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/tcb-offsets.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/tcb-offsets.h
10340 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/timer_create.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/timer_create.c
10341 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/timer_delete.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/timer_delete.c
10342 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/timer_getoverr.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/timer_getoverr.c
10343 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/timer_gettime.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/timer_gettime.c
10344 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/timer_routines.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/timer_routines.c
10345 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/timer_settime.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/timer_settime.c
10346 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/pthread/tst-timer.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/pthread/tst-timer.c
10347 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/s390/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/s390/Makefile
10348 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/s390/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/s390/pspinlock.c
10349 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/s390/s390-32/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/s390/s390-32/pt-machine.h
10350 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/s390/s390-64/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/s390/s390-64/pt-machine.h
10351 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/s390/tcb-offsets.sym glibc-2.3.2-200304020432/linuxthreads/sysdeps/s390/tcb-offsets.sym
10352 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/s390/tls.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/s390/tls.h
10353 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sh/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/sh/Makefile
10354 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sh/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/sh/pspinlock.c
10355 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sh/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/sh/pt-machine.h
10356 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sh/tcb-offsets.sym glibc-2.3.2-200304020432/linuxthreads/sysdeps/sh/tcb-offsets.sym
10357 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sh/tls.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/sh/tls.h
10358 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/Makefile
10359 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c
10360 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h
10361 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/sparc32/sparcv9/Versions glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/sparc32/sparcv9/Versions
10362 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c
10363 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/sparc64/Versions glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/sparc64/Versions
10364 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c
10365 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h
10366 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/tcb-offsets.sym glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/tcb-offsets.sym
10367 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/sparc/tls.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/sparc/tls.h
10368 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/Implies glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/Implies
10369 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/Makefile
10370 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/Versions glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/Versions
10371 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/allocalim.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/allocalim.h
10372 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/allocrtsig.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/allocrtsig.c
10373 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/alpha/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/alpha/Makefile
10374 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/alpha/aio_cancel.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/alpha/aio_cancel.c
10375 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
10376 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/alpha/pt-sigsuspend.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/alpha/pt-sigsuspend.S
10377 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
10378 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S
10379 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
10380 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S
10381 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/bits/local_lim.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/bits/local_lim.h
10382 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/bits/posix_opt.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/bits/posix_opt.h
10383 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/bits/sigthread.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/bits/sigthread.h
10384 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/execve.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/execve.c
10385 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/fork.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/fork.c
10386 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/fork.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/fork.h
10387 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/hppa/aio_cancel.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/hppa/aio_cancel.c
10388 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h
10389 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c
10390 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h
10391 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/i386/dl-sysdep.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/i386/dl-sysdep.h
10392 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
10393 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S
10394 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/ia64/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/ia64/Makefile
10395 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/ia64/fork.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/ia64/fork.h
10396 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c
10397 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-sigsuspend.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-sigsuspend.c
10398 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
10399 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/ia64/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/ia64/vfork.S
10400 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/jmp-unwind.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/jmp-unwind.c
10401 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
10402 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/m68k/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/m68k/vfork.S
10403 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/mips/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/mips/Makefile
10404 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
10405 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/powerpc/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/powerpc/Makefile
10406 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
10407 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S
10408 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
10409 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S
10410 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/pt-sigsuspend.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/pt-sigsuspend.c
10411 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/raise.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/raise.c
10412 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/register-atfork.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/register-atfork.c
10413 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
10414 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
10415 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S
10416 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
10417 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c
10418 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
10419 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
10420 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sh/pt-initfini.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sh/pt-initfini.c
10421 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sh/smp.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sh/smp.h
10422 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
10423 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S
10424 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c
10425 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/smp.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/smp.h
10426 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/Makefile
10427 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/aio_cancel.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/aio_cancel.c
10428 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
10429 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/fork.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/fork.h
10430 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
10431 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S
10432 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
10433 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c
10434 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
10435 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S
10436 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/unregister-atfork.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/unregister-atfork.c
10437 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/x86_64/Makefile glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/x86_64/Makefile
10438 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/x86_64/pt-sigsuspend.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/x86_64/pt-sigsuspend.c
10439 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
10440 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S glibc-2.3.2-200304020432/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S
10441 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/x86_64/pspinlock.c glibc-2.3.2-200304020432/linuxthreads/sysdeps/x86_64/pspinlock.c
10442 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/x86_64/pt-machine.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/x86_64/pt-machine.h
10443 diff -u -udbrN glibc-2.3.2/linuxthreads/sysdeps/x86_64/tls.h glibc-2.3.2-200304020432/linuxthreads/sysdeps/x86_64/tls.h
10444 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel-static.c glibc-2.3.2-200304020432/linuxthreads/tst-cancel-static.c
10445 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel-wrappers.sh glibc-2.3.2-200304020432/linuxthreads/tst-cancel-wrappers.sh
10446 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel.c glibc-2.3.2-200304020432/linuxthreads/tst-cancel.c
10447 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel1.c glibc-2.3.2-200304020432/linuxthreads/tst-cancel1.c
10448 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel2.c glibc-2.3.2-200304020432/linuxthreads/tst-cancel2.c
10449 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel3.c glibc-2.3.2-200304020432/linuxthreads/tst-cancel3.c
10450 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel4.c glibc-2.3.2-200304020432/linuxthreads/tst-cancel4.c
10451 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel5.c glibc-2.3.2-200304020432/linuxthreads/tst-cancel5.c
10452 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel6.c glibc-2.3.2-200304020432/linuxthreads/tst-cancel6.c
10453 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-cancel7.c glibc-2.3.2-200304020432/linuxthreads/tst-cancel7.c
10454 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-context.c glibc-2.3.2-200304020432/linuxthreads/tst-context.c
10455 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-popen.c glibc-2.3.2-200304020432/linuxthreads/tst-popen.c
10456 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-popen2.c glibc-2.3.2-200304020432/linuxthreads/tst-popen2.c
10457 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-signal.c glibc-2.3.2-200304020432/linuxthreads/tst-signal.c
10458 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-signal.sh glibc-2.3.2-200304020432/linuxthreads/tst-signal.sh
10459 diff -u -udbrN glibc-2.3.2/linuxthreads/tst-static-locale.c glibc-2.3.2-200304020432/linuxthreads/tst-static-locale.c
10460 diff -u -udbrN glibc-2.3.2/linuxthreads/tststack.c glibc-2.3.2-200304020432/linuxthreads/tststack.c
10461 diff -u -udbrN glibc-2.3.2/linuxthreads/unload.c glibc-2.3.2-200304020432/linuxthreads/unload.c
10462 diff -u -udbrN glibc-2.3.2/linuxthreads_db/Banner glibc-2.3.2-200304020432/linuxthreads_db/Banner
10463 diff -u -udbrN glibc-2.3.2/linuxthreads_db/ChangeLog glibc-2.3.2-200304020432/linuxthreads_db/ChangeLog
10464 diff -u -udbrN glibc-2.3.2/linuxthreads_db/Makefile glibc-2.3.2-200304020432/linuxthreads_db/Makefile
10465 diff -u -udbrN glibc-2.3.2/linuxthreads_db/Versions glibc-2.3.2-200304020432/linuxthreads_db/Versions
10466 diff -u -udbrN glibc-2.3.2/linuxthreads_db/proc_service.h glibc-2.3.2-200304020432/linuxthreads_db/proc_service.h
10467 diff -u -udbrN glibc-2.3.2/linuxthreads_db/shlib-versions glibc-2.3.2-200304020432/linuxthreads_db/shlib-versions
10468 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_init.c glibc-2.3.2-200304020432/linuxthreads_db/td_init.c
10469 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_log.c glibc-2.3.2-200304020432/linuxthreads_db/td_log.c
10470 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_symbol_list.c glibc-2.3.2-200304020432/linuxthreads_db/td_symbol_list.c
10471 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_clear_event.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_clear_event.c
10472 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_delete.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_delete.c
10473 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_enable_stats.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_enable_stats.c
10474 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_event_addr.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_event_addr.c
10475 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_event_getmsg.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_event_getmsg.c
10476 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_get_nthreads.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_get_nthreads.c
10477 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_get_ph.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_get_ph.c
10478 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_get_stats.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_get_stats.c
10479 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_map_id2thr.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_map_id2thr.c
10480 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_map_lwp2thr.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_map_lwp2thr.c
10481 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_new.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_new.c
10482 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_reset_stats.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_reset_stats.c
10483 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_set_event.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_set_event.c
10484 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_setconcurrency.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_setconcurrency.c
10485 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_thr_iter.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_thr_iter.c
10486 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_ta_tsd_iter.c glibc-2.3.2-200304020432/linuxthreads_db/td_ta_tsd_iter.c
10487 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_clear_event.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_clear_event.c
10488 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_dbresume.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_dbresume.c
10489 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_dbsuspend.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_dbsuspend.c
10490 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_event_enable.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_event_enable.c
10491 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_event_getmsg.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_event_getmsg.c
10492 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_get_info.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_get_info.c
10493 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_getfpregs.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_getfpregs.c
10494 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_getgregs.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_getgregs.c
10495 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_getxregs.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_getxregs.c
10496 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_getxregsize.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_getxregsize.c
10497 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_set_event.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_set_event.c
10498 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_setfpregs.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_setfpregs.c
10499 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_setgregs.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_setgregs.c
10500 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_setprio.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_setprio.c
10501 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_setsigpending.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_setsigpending.c
10502 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_setxregs.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_setxregs.c
10503 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_sigsetmask.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_sigsetmask.c
10504 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_tls_get_addr.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_tls_get_addr.c
10505 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_tlsbase.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_tlsbase.c
10506 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_tsd.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_tsd.c
10507 diff -u -udbrN glibc-2.3.2/linuxthreads_db/td_thr_validate.c glibc-2.3.2-200304020432/linuxthreads_db/td_thr_validate.c
10508 diff -u -udbrN glibc-2.3.2/linuxthreads_db/thread_db.h glibc-2.3.2-200304020432/linuxthreads_db/thread_db.h
10509 diff -u -udbrN glibc-2.3.2/linuxthreads_db/thread_dbP.h glibc-2.3.2-200304020432/linuxthreads_db/thread_dbP.h
10510 diff -u -udbrN glibc-2.3.2/locale/Versions glibc-2.3.2-200304020432/locale/Versions
10511 --- glibc-2.3.2/locale/Versions Wed Aug 28 03:04:45 2002
10512 +++ glibc-2.3.2-200304020432/locale/Versions Mon Mar 3 10:45:12 2003
10513 @@ -59,13 +59,12 @@
10514 iswcntrl_l; iswctype_l; iswdigit_l; iswgraph_l; iswlower_l;
10515 iswprint_l; iswpunct_l; iswspace_l; iswupper_l; iswxdigit_l;
10516 isxdigit_l; strcasecmp_l; strcoll_l; strfmon_l; strncasecmp_l;
10517 - strtod_l; strtof_l; strtol_l; strtold_l; strtoll_l; strtoul_l;
10518 - strtoull_l; strxfrm_l; toascii_l; tolower_l; toupper_l;
10519 + strtod_l; strtof_l; strtol_l; strtold_l; strtoul_l;
10520 + strxfrm_l; toascii_l; tolower_l; toupper_l;
10521 towctrans_l; towlower_l; towupper_l; wcscasecmp_l; wcscoll_l;
10522 wcsncasecmp_l; wcstod_l; wcstof_l; wcstol_l; wcstold_l;
10523 wcstoll_l; wcstoul_l; wcstoull_l; wcsxfrm_l; wctype_l;
10524 wctrans_l; nl_langinfo_l;
10527 GLIBC_PRIVATE {
10528 # global variables
10529 diff -u -udbrN glibc-2.3.2/locale/programs/locarchive.c glibc-2.3.2-200304020432/locale/programs/locarchive.c
10530 --- glibc-2.3.2/locale/programs/locarchive.c Wed Oct 23 08:21:17 2002
10531 +++ glibc-2.3.2-200304020432/locale/programs/locarchive.c Sun Mar 16 02:03:52 2003
10532 @@ -1,4 +1,4 @@
10533 -/* Copyright (C) 2002 Free Software Foundation, Inc.
10534 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
10535 This file is part of the GNU C Library.
10536 Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
10538 @@ -1402,8 +1402,7 @@
10539 struct locarhead *head;
10540 struct namehashent *namehashtab;
10541 struct nameent *names;
10542 - int cnt;
10543 - int used;
10544 + size_t cnt, used;
10546 /* Open the archive. This call never returns if we cannot
10547 successfully open the archive. */
10548 diff -u -udbrN glibc-2.3.2/locale/tst-C-locale.c glibc-2.3.2-200304020432/locale/tst-C-locale.c
10549 --- glibc-2.3.2/locale/tst-C-locale.c Tue Sep 3 20:39:41 2002
10550 +++ glibc-2.3.2-200304020432/locale/tst-C-locale.c Mon Mar 17 20:11:36 2003
10551 @@ -1,5 +1,5 @@
10552 /* Tests of C and POSIX locale contents.
10553 - Copyright (C) 2000,01,02 Free Software Foundation, Inc.
10554 + Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
10555 This file is part of the GNU C Library.
10556 Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
10558 @@ -450,8 +450,8 @@
10562 -int
10563 -main (void)
10564 +static int
10565 +do_test (void)
10567 int result;
10569 @@ -475,3 +475,6 @@
10571 return result;
10574 +#define TEST_FUNCTION do_test ()
10575 +#include "../test-skeleton.c"
10576 diff -u -udbrN glibc-2.3.2/localedata/ChangeLog glibc-2.3.2-200304020432/localedata/ChangeLog
10577 --- glibc-2.3.2/localedata/ChangeLog Thu Jan 30 21:21:47 2003
10578 +++ glibc-2.3.2-200304020432/localedata/ChangeLog Mon Mar 17 11:16:36 2003
10579 @@ -1,3 +1,17 @@
10580 +2003-03-17 Ulrich Drepper <drepper@redhat.com>
10582 + * localedata/en_ZA: Changed %x for LC_TIME to use dd/mm/ccyy.
10583 + Added ^ to LC_MESSAGES regex "^[yY].*".
10584 + Confirmed LC_PAPER adn LC_MEASUREMENT settings.
10585 + Added country and language names to LC_ADDRESS.
10586 + Added missing info for LC_TELEPHONE.
10587 + Patch by Dwayne Bailey <dwayne@obsidian.co.za>.
10589 +2003-03-14 Ulrich Drepper <drepper@redhat.com>
10591 + * localedata/mn_MN: New file.
10592 + Contributed by Sanlig Badral <badral@chinggis.com>.
10594 2003-01-30 Ulrich Drepper <drepper@redhat.com>
10596 * Makefile (LOCALES): Add vi_VN.TCVN5712-1.
10597 diff -u -udbrN glibc-2.3.2/localedata/locales/en_ZA glibc-2.3.2-200304020432/localedata/locales/en_ZA
10598 --- glibc-2.3.2/localedata/locales/en_ZA Thu Oct 26 19:48:46 2000
10599 +++ glibc-2.3.2-200304020432/localedata/locales/en_ZA Mon Mar 17 11:08:52 2003
10600 @@ -2,44 +2,54 @@
10601 comment_char %
10603 % English language locale for South Africa
10604 -% Source: RAP
10605 -% Email: nic@sig.co.za
10606 -% Tel: +27 83 7659503
10607 -% Fax: +27 12 3478098
10608 +% Source: Zuza Software Foundation
10609 +% Email: dwayne@translate.org.za
10610 +% Tel: +27 21 4487827
10611 +% Fax: +27 21 4489574
10612 % Language: en
10613 % Territory: ZA
10614 -% Revision: 1.0
10615 -% Date: 1999-03-28
10616 +% Revision: 1.1
10617 +% Date: 2003-03-14
10618 % Users: general
10619 % Repertoiremap: mnemonic,ds
10620 % Charset: ISO-8859-1
10621 % Distribution and use is free, also
10622 % for commercial purposes.
10624 +% Changelog
10625 +% 1.1 (2003-03-14):
10626 +% - Updated maintainer to Zuza Sofware Foundation
10627 +% - Changed %x for LC_TIME to use dd/mm/ccyy
10628 +% - Added ^ to LC_MESSAGES regex "^[yY].*"
10629 +% - Confirmed LC_PAPER and LC_MEASUREMENT settings
10630 +% - Added country and language names to LC_ADDRESS
10631 +% - Added missing info for LC_TELEPHONE
10633 LC_IDENTIFICATION
10634 title "English locale for South Africa"
10635 -source "RAP"
10636 -address ""
10637 -contact ""
10638 -email "bug-glibc@gnu.org"
10639 -tel ""
10640 -fax ""
10641 +source "Zuza Software Foundation"
10642 +address "Box 13412, Mowbray, 7701, South Africa"
10643 +contact "Dwayne Bailey"
10644 +email "dwayne@translate.org.za"
10645 +tel "+27 21 448 7827"
10646 +fax "+27 21 448 9574"
10647 language "English"
10648 territory "South Africa"
10649 -revision "1.0"
10650 -date "2000-06-29"
10651 +revision "1.1"
10652 +date "2003-03-14"
10654 -category "en_ZA:2000";LC_IDENTIFICATION
10655 +category "en_ZA:2003";LC_IDENTIFICATION
10656 category "en_ZA:2000";LC_CTYPE
10657 category "en_ZA:2000";LC_COLLATE
10658 -category "en_ZA:2000";LC_TIME
10659 +category "en_ZA:2003";LC_TIME
10660 category "en_ZA:2000";LC_NUMERIC
10661 category "en_ZA:2000";LC_MONETARY
10662 -category "en_ZA:2000";LC_MESSAGES
10663 +category "en_ZA:2003";LC_MESSAGES
10664 category "en_ZA:2000";LC_PAPER
10665 +category "en_ZA:2000";LC_MEASUREMENT
10666 category "en_ZA:2000";LC_NAME
10667 -category "en_ZA:2000";LC_ADDRESS
10668 -category "en_ZA:2000";LC_TELEPHONE
10669 +category "en_ZA:2003";LC_ADDRESS
10670 +category "en_ZA:2003";LC_TELEPHONE
10672 END LC_IDENTIFICATION
10674 @@ -106,7 +116,7 @@
10675 "<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";/
10676 "<U0044><U0065><U0063><U0065><U006D><U0062><U0065><U0072>"
10677 d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
10678 -d_fmt "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
10679 +d_fmt "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0059>"
10680 t_fmt "<U0025><U0054>"
10681 am_pm "";""
10682 t_fmt_ampm ""
10683 @@ -116,25 +126,25 @@
10684 END LC_TIME
10686 LC_MESSAGES
10687 -yesexpr "<U005B><U0079><U0059><U005D><U002E><U002A>"
10688 -noexpr "<U005B><U006E><U004E><U005D><U002E><U002A>"
10689 +yesexpr "<U005E><U005B><U0079><U0059><U005D><U002E><U002A>"
10690 +noexpr "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
10691 END LC_MESSAGES
10693 LC_PAPER
10694 -% FIXME
10695 height 297
10696 -% FIXME
10697 width 210
10698 END LC_PAPER
10700 LC_TELEPHONE
10701 tel_int_fmt "<U002B><U0025><U0063><U0020><U0025><U0061><U0020><U0025>/
10702 <U006C>"
10703 +tel_dom_fmt "<U0028><U0025><U0041><U0029><U0020><U0025><U006C>"
10704 +int_select "<U0030><U0039>"
10705 int_prefix "<U0032><U0037>"
10707 END LC_TELEPHONE
10709 LC_MEASUREMENT
10710 -% FIXME
10711 measurement 1
10712 END LC_MEASUREMENT
10714 @@ -149,4 +159,7 @@
10715 <U0020><U0025><U0068><U0020><U0025><U0065><U0020><U0025><U0072><U0025>/
10716 <U004E><U0025><U0025><U007A><U0020><U0025><U0054><U0025>/
10717 <U004E><U0025><U0063><U0025><U004E>"
10718 +country_name "<U0053><U006F><U0075><U0074><U0068><U0020>/
10719 +<U0041><U0066><U0072><U0069><U0063><U0061>"
10720 +lang_name "<U0045><U006E><U0067><U006C><U0069><U0073><U0068>"
10721 END LC_ADDRESS
10722 diff -u -udbrN glibc-2.3.2/localedata/locales/mn_MN glibc-2.3.2-200304020432/localedata/locales/mn_MN
10723 --- glibc-2.3.2/localedata/locales/mn_MN Thu Jan 1 01:00:00 1970
10724 +++ glibc-2.3.2-200304020432/localedata/locales/mn_MN Fri Mar 14 22:26:23 2003
10725 @@ -0,0 +1,196 @@
10726 +comment_char %
10727 +escape_char /
10728 +% Mongolian language (cyrillic) locale for Mongolia
10729 +% Sanlig Badral <badral@chinggis.com>
10730 +% Revision: 0.9 (2003-2-27)
10731 +% Charsets: UTF-8
10732 +% Distribution and use is free, also
10733 +% for commercial purposes.
10735 +LC_IDENTIFICATION
10736 +title "Mongolian locale for Mongolia"
10737 +source "OPENMN"
10738 +address ""
10739 +contact ""
10740 +email "bug-glibc@gnu.org"
10741 +tel ""
10742 +fax ""
10743 +language "Mongolian"
10744 +territory "Mongolia"
10745 +revision "0.9"
10746 +date "2003-02-27"
10748 +category "mn_MN:2000";LC_IDENTIFICATION
10749 +category "mn_MN:2000";LC_CTYPE
10750 +category "mn_MN:2000";LC_COLLATE
10751 +category "mn_MN:2000";LC_TIME
10752 +category "mn_MN:2000";LC_NUMERIC
10753 +category "mn_MN:2000";LC_MONETARY
10754 +category "mn_MN:2000";LC_MESSAGES
10755 +category "mn_MN:2000";LC_PAPER
10756 +category "mn_MN:2000";LC_NAME
10757 +category "mn_MN:2000";LC_ADDRESS
10758 +category "mn_MN:2000";LC_TELEPHONE
10760 +END LC_IDENTIFICATION
10762 +LC_COLLATE
10763 +copy "iso14651_t1"
10765 +% iso14651_t1 is missing Mongolian ue(straight u), oe(barred o)
10766 +% like russian, but with <o-=> (<barred-o>) after <o=> and
10767 +% <u'=>(straight u) after <u=>
10769 +collating-symbol <o-=>
10770 +collating-symbol <u'=>
10772 +reorder-after <CYR-O>
10773 +<o-=>
10774 +reorder-after <CYR-OUBRE>
10775 +<u'=>
10777 +reorder-after <U043E>
10778 +<U04E9> <o-=>;<PCL>;<MIN>;IGNORE
10779 +reorder-after <U041E>
10780 +<U04E8> <o-=>;<PCL>;<CAP>;IGNORE
10782 +reorder-after <U0443>
10783 +<U04AF> <u'=>;<PCL>;<MIN>;IGNORE
10784 +reorder-after <U0423>
10785 +<U04AE> <u'=>;<PCL>;<CAP>;IGNORE
10787 +reorder-end
10788 +END LC_COLLATE
10790 +LC_CTYPE
10791 +copy "i18n"
10792 +END LC_CTYPE
10794 +LC_MONETARY
10795 +int_curr_symbol "<U004D><U004E><U0054><U0020>"
10796 +currency_symbol "<U20AE>"
10797 +mon_decimal_point "<U002E>"
10798 +mon_thousands_sep "<U0020>"
10799 +mon_grouping 3;3
10800 +positive_sign ""
10801 +negative_sign "<U002D>"
10802 +int_frac_digits 2
10803 +frac_digits 2
10804 +p_cs_precedes 0
10805 +p_sep_by_space 1
10806 +n_cs_precedes 0
10807 +n_sep_by_space 1
10808 +p_sign_posn 1
10809 +n_sign_posn 1
10811 +END LC_MONETARY
10813 +LC_NUMERIC
10814 +decimal_point "<U002C>"
10815 +thousands_sep "<U002E>"
10816 +grouping 3;3
10817 +END LC_NUMERIC
10819 +LC_TIME
10820 +% Abbreviated weekday names (%a)
10821 +abday "<U041D><U044F>";"<U0414><U0430>";/
10822 + "<U041C><U044F>";"<U041B><U0445>";/
10823 + "<U041F><U04AF>";"<U0411><U0430>";/
10824 + "<U0411><U044F>"
10825 +% Full weekday names (%A)
10826 +day "<U041D><U044F><U043C>";/
10827 + "<U0414><U0430><U0432><U0430><U0430>";/
10828 + "<U041C><U044F><U0433><U043C><U0430><U0440>";/
10829 + "<U041B><U0445><U0430><U0433><U0432><U0430>";/
10830 + "<U041F><U04AF><U0440><U044D><U0432>";/
10831 + "<U0411><U0430><U0430><U0441><U0430><U043D>";/
10832 + "<U0411><U044F><U043C><U0431><U0430>"
10833 +% Abbreviated month names (%b)
10834 +abmon "<U0031><U002D><U0440>";"<U0032><U002D><U0440>";/
10835 + "<U0033><U002D><U0440>";"<U0034><U002D><U0440>";/
10836 + "<U0035><U002D><U0440>";"<U0036><U002D><U0440>";/
10837 + "<U0037><U002D><U0440>";"<U0038><U002D><U0440>";/
10838 + "<U0039><U002D><U0440>";"<U0031><U0030><U002D><U0440>";/
10839 + "<U0031><U0031><U002D><U0440>";"<U0031><U0032><U002D><U0440>"
10840 +% Full month names (%B)
10841 +mon "<U041D><U044D><U0433><U0434><U04AF><U0433><U044D><U044D><U0440><U0020><U0441><U0430><U0440>";/
10842 + "<U0425><U043E><U0451><U0440><U0434><U0443><U0433><U0430><U0430><U0440><U0020><U0441><U0430><U0440>";/
10843 + "<U0413><U0443><U0440><U0430><U0432><U0434><U0443><U0433><U0430><U0430><U0440><U0020><U0441><U0430><U0440>";/
10844 + "<U0414><U04E9><U0440><U04E9><U0432><U0434><U04AF><U0433><U044D><U044D><U0440><U0020><U0441><U0430><U0440>";/
10845 + "<U0422><U0430><U0432><U0434><U0443><U0433><U0430><U0430><U0440><U0020><U0441><U0430><U0440>";/
10846 + "<U0417><U0443><U0440><U0433><U0430><U0430><U0434><U0443><U0433><U0430><U0440><U0020><U0441><U0430><U0440>";/
10847 + "<U0414><U043E><U043B><U043E><U043E><U0434><U0443><U0433><U0430><U0430><U0440><U0020><U0441><U0430><U0440>";/
10848 + "<U041D><U0430><U0439><U043C><U0434><U0443><U0433><U0430><U0430><U0440><U0020><U0441><U0430><U0440>";/
10849 + "<U0415><U0441><U0434><U04AF><U0433><U044D><U044D><U0440><U0020><U0441><U0430><U0440>";/
10850 + "<U0410><U0440><U0430><U0432><U0434><U0443><U0433><U0430><U0430><U0440><U0020><U0441><U0430><U0440>";/
10851 + "<U0410><U0440><U0432><U0430><U043D><U043D><U044D><U0433><U0434><U04AF><U0433><U044D><U044D><U0440><U0020><U0441><U0430><U0440>";/
10852 + "<U0410><U0440><U0432><U0430><U043D><U0445><U043E><U0451><U0440><U0434><U0433><U0430><U0430><U0440><U0020><U0441><U0430><U0440>"
10853 +% Appropriate date and time representation
10854 +% "%a %d %b %Y %T %Z"
10855 +d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
10857 +% Appropriate date representation
10858 +% "%Y.%m.%d"
10859 +d_fmt "<U0025><U0059><U002E><U0025><U006D><U002E><U0025><U0064>"
10860 +% Appropriate time representation
10861 +% "%T"
10862 +t_fmt "<U0025><U0054>"
10863 +% Appropriate 12 h time representation (%r)
10864 +am_pm "";""
10865 +t_fmt_ampm ""
10866 +% Full date and time representation
10867 +% "%a %b %e %H:%M:%S %Z %Y"
10868 +date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U0020><U0025><U0059>"
10869 +END LC_TIME
10871 +LC_MESSAGES
10872 +yesexpr "<U005E><U005B><U0442><U0422><U0079><U0059><U005D><U002E><U002A>"
10873 +noexpr "<U005E><U005B><U04AF><U04AE><U006E><U004E><U005D><U002E><U002A>"
10874 +END LC_MESSAGES
10876 +% Paper format
10877 +LC_PAPER
10878 +height 297
10879 +width 210
10880 +END LC_PAPER
10882 +LC_NAME
10883 +name_fmt "<U0025><U0064><U0025><U0074><U0025><U0067><U0025><U0074>/
10884 +<U0025><U006D><U0025><U0074><U0025><U0066>"
10886 +name_miss "<U0425><U0430><U0442><U0430><U0433><U0442><U0430><U0439>"
10887 +name_mr "<U041D><U043E><U0451><U043D>"
10888 +name_mrs "<U0425><U0430><U0442><U0430><U0433><U0442><U0430><U0439>"
10889 +name_ms "<U0425><U0430><U0442><U0430><U0433><U0442><U0430><U0439>"
10890 +END LC_NAME
10892 +LC_ADDRESS
10893 +postal_fmt "<U0025><U0066><U0025><U004E><U0025><U0061><U0025><U004E>/
10894 +<U0025><U0064><U0025><U004E><U0025><U0062><U0025><U004E><U0025><U0073>/
10895 +<U0020><U0025><U0068><U0020><U0025><U0065><U0020><U0025><U0072><U0025>/
10896 +<U004E><U0025><U0025><U007A><U0020><U0025><U0054><U0025>/
10897 +<U004E><U0025><U0063><U0025><U004E>"
10899 +country_name "<U004D><U006F><U006E><U0067><U006F><U006C><U0069><U0061>"
10900 +country_post "<U004D><U006E>"
10901 +country_ab2 "<U004D><U006E>"
10902 +country_ab3 "<U004D><U004E><U0047>"
10903 +country_num 496
10904 +country_car "<U004D><U0047><U004C>"
10905 +country_isbn 99929
10906 +lang_name "<U004D><U006F><U006E><U0067><U006F><U006C><U0069><U0061><U006E>"
10907 +lang_ab "<U006D><U006E>"
10908 +lang_term "<U006D><U006F><U006E>"
10909 +lang_lib "<U006D><U006F><U006E>"
10910 +END LC_ADDRESS
10912 +LC_TELEPHONE
10913 +tel_int_fmt "<U0028><U002B><U0025><U0063><U0020><U0025><U0061><U0029><U0020><U0025><U006C>"
10914 +tel_dom_fmt "<U0028><U0030><U0025><U0061><U0029><U0020><U0025><U006C>"
10915 +int_select "<U0030><U0030>"
10916 +int_prefix "<U0039><U0037><U0036>"
10917 +END LC_TELEPHONE
10919 +LC_MEASUREMENT
10920 +measurement 1
10921 +END LC_MEASUREMENT
10922 diff -u -udbrN glibc-2.3.2/malloc/memusagestat.c glibc-2.3.2-200304020432/malloc/memusagestat.c
10923 --- glibc-2.3.2/malloc/memusagestat.c Sat Jul 7 21:21:06 2001
10924 +++ glibc-2.3.2-200304020432/malloc/memusagestat.c Sun Mar 23 00:00:25 2003
10925 @@ -405,7 +405,7 @@
10929 - snprintf (buf, sizeof (buf), "%llu", total);
10930 + snprintf (buf, sizeof (buf), "%llu", (unsigned long long) total);
10931 gdImageString (im_out, gdFontSmall, xsize - 50, ysize - 14, buf, blue);
10933 if (!time_based)
10934 diff -u -udbrN glibc-2.3.2/malloc/mtrace.c glibc-2.3.2-200304020432/malloc/mtrace.c
10935 --- glibc-2.3.2/malloc/mtrace.c Tue Dec 31 22:18:43 2002
10936 +++ glibc-2.3.2-200304020432/malloc/mtrace.c Mon Mar 10 10:12:11 2003
10937 @@ -1,5 +1,5 @@
10938 /* More debugging hooks for `malloc'.
10939 - Copyright (C) 1991-1994,1996-2001,2002 Free Software Foundation, Inc.
10940 + Copyright (C) 1991-1994,1996-2001,2002, 2003 Free Software Foundation, Inc.
10941 This file is part of the GNU C Library.
10942 Written April 2, 1991 by John Gilmore of Cygnus Support.
10943 Based on mcheck.c by Mike Haertel.
10944 @@ -103,7 +103,7 @@
10946 #ifdef HAVE_ELF
10947 Dl_info info;
10948 - if (_dl_addr (caller, &info))
10949 + if (_dl_addr (caller, &info, NULL, NULL))
10951 char *buf = (char *) "";
10952 if (info.dli_sname != NULL)
10953 diff -u -udbrN glibc-2.3.2/malloc/set-freeres.c glibc-2.3.2-200304020432/malloc/set-freeres.c
10954 --- glibc-2.3.2/malloc/set-freeres.c Sat Nov 2 03:15:52 2002
10955 +++ glibc-2.3.2-200304020432/malloc/set-freeres.c Fri Mar 21 08:45:55 2003
10956 @@ -1,4 +1,4 @@
10957 -/* Copyright (C) 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
10958 +/* Copyright (C) 1997,1999,2000,2001,2002,2003 Free Software Foundation, Inc.
10959 This file is part of the GNU C Library.
10961 The GNU C Library is free software; you can redistribute it and/or
10962 @@ -16,7 +16,7 @@
10963 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
10964 02111-1307 USA. */
10966 -#include <atomicity.h>
10967 +#include <atomic.h>
10968 #include <stdlib.h>
10969 #include <set-hooks.h>
10970 #include <libc-internal.h>
10971 @@ -36,7 +36,7 @@
10972 protect for multiple executions since these are fatal. */
10973 static long int already_called;
10975 - if (compare_and_swap (&already_called, 0, 1))
10976 + if (! atomic_compare_and_exchange_bool_acq (&already_called, 1, 0))
10978 void * const *p;
10980 diff -u -udbrN glibc-2.3.2/manual/add.c.texi glibc-2.3.2-200304020432/manual/add.c.texi
10981 --- glibc-2.3.2/manual/add.c.texi Wed Dec 9 23:51:54 1998
10982 +++ glibc-2.3.2-200304020432/manual/add.c.texi Thu Jan 1 01:00:00 1970
10983 @@ -1,30 +0,0 @@
10984 -#include <stdarg.h>
10985 -#include <stdio.h>
10987 -int
10988 -add_em_up (int count,...)
10990 - va_list ap;
10991 - int i, sum;
10993 - va_start (ap, count); /* @r{Initialize the argument list.} */
10995 - sum = 0;
10996 - for (i = 0; i < count; i++)
10997 - sum += va_arg (ap, int); /* @r{Get the next argument value.} */
10999 - va_end (ap); /* @r{Clean up.} */
11000 - return sum;
11003 -int
11004 -main (void)
11006 - /* @r{This call prints 16.} */
11007 - printf ("%d\n", add_em_up (3, 5, 5, 6));
11009 - /* @r{This call prints 55.} */
11010 - printf ("%d\n", add_em_up (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
11012 - return 0;
11014 diff -u -udbrN glibc-2.3.2/manual/argp-ex1.c.texi glibc-2.3.2-200304020432/manual/argp-ex1.c.texi
11015 --- glibc-2.3.2/manual/argp-ex1.c.texi Wed Dec 9 23:51:53 1998
11016 +++ glibc-2.3.2-200304020432/manual/argp-ex1.c.texi Thu Jan 1 01:00:00 1970
11017 @@ -1,14 +0,0 @@
11018 -/* @r{Argp example #1 -- a minimal program using argp} */
11020 -/* @r{This is (probably) the smallest possible program that
11021 - uses argp. It won't do much except give an error
11022 - messages and exit when there are any arguments, and print
11023 - a (rather pointless) messages for --help.} */
11025 -#include <argp.h>
11027 -int main (int argc, char **argv)
11029 - argp_parse (0, argc, argv, 0, 0, 0);
11030 - exit (0);
11032 diff -u -udbrN glibc-2.3.2/manual/argp-ex2.c.texi glibc-2.3.2-200304020432/manual/argp-ex2.c.texi
11033 --- glibc-2.3.2/manual/argp-ex2.c.texi Mon Nov 5 21:54:48 2001
11034 +++ glibc-2.3.2-200304020432/manual/argp-ex2.c.texi Thu Jan 1 01:00:00 1970
11035 @@ -1,44 +0,0 @@
11036 -/* @r{Argp example #2 -- a pretty minimal program using argp} */
11038 -/* @r{This program doesn't use any options or arguments, but uses
11039 - argp to be compliant with the GNU standard command line
11040 - format.
11042 - In addition to making sure no arguments are given, and
11043 - implementing a --help option, this example will have a
11044 - --version option, and will put the given documentation string
11045 - and bug address in the --help output, as per GNU standards.
11047 - The variable ARGP contains the argument parser specification;
11048 - adding fields to this structure is the way most parameters are
11049 - passed to argp_parse (the first three fields are usually used,
11050 - but not in this small program). There are also two global
11051 - variables that argp knows about defined here,
11052 - ARGP_PROGRAM_VERSION and ARGP_PROGRAM_BUG_ADDRESS (they are
11053 - global variables because they will almost always be constant
11054 - for a given program, even if it uses different argument
11055 - parsers for various tasks).} */
11057 -#include <argp.h>
11059 -const char *argp_program_version =
11060 - "argp-ex2 1.0";
11061 -const char *argp_program_bug_address =
11062 - "<bug-gnu-utils@@gnu.org>";
11064 -/* @r{Program documentation.} */
11065 -static char doc[] =
11066 - "Argp example #2 -- a pretty minimal program using argp";
11068 -/* @r{Our argument parser. The @code{options}, @code{parser}, and
11069 - @code{args_doc} fields are zero because we have neither options or
11070 - arguments; @code{doc} and @code{argp_program_bug_address} will be
11071 - used in the output for @samp{--help}, and the @samp{--version}
11072 - option will print out @code{argp_program_version}.} */
11073 -static struct argp argp = @{ 0, 0, 0, doc @};
11075 -int main (int argc, char **argv)
11077 - argp_parse (&argp, argc, argv, 0, 0, 0);
11078 - exit (0);
11080 diff -u -udbrN glibc-2.3.2/manual/argp-ex3.c.texi glibc-2.3.2-200304020432/manual/argp-ex3.c.texi
11081 --- glibc-2.3.2/manual/argp-ex3.c.texi Tue Feb 22 09:35:05 2000
11082 +++ glibc-2.3.2-200304020432/manual/argp-ex3.c.texi Thu Jan 1 01:00:00 1970
11083 @@ -1,152 +0,0 @@
11084 -/* @r{Argp example #3 -- a program with options and arguments using argp} */
11086 -/* @r{This program uses the same features as example 2, and uses options and
11087 - arguments.
11089 - We now use the first four fields in ARGP, so here's a description of them:
11090 - OPTIONS -- A pointer to a vector of struct argp_option (see below)
11091 - PARSER -- A function to parse a single option, called by argp
11092 - ARGS_DOC -- A string describing how the non-option arguments should look
11093 - DOC -- A descriptive string about this program; if it contains a
11094 - vertical tab character (\v), the part after it will be
11095 - printed *following* the options
11097 - The function PARSER takes the following arguments:
11098 - KEY -- An integer specifying which option this is (taken
11099 - from the KEY field in each struct argp_option), or
11100 - a special key specifying something else; the only
11101 - special keys we use here are ARGP_KEY_ARG, meaning
11102 - a non-option argument, and ARGP_KEY_END, meaning
11103 - that all arguments have been parsed
11104 - ARG -- For an option KEY, the string value of its
11105 - argument, or NULL if it has none
11106 - STATE-- A pointer to a struct argp_state, containing
11107 - various useful information about the parsing state; used here
11108 - are the INPUT field, which reflects the INPUT argument to
11109 - argp_parse, and the ARG_NUM field, which is the number of the
11110 - current non-option argument being parsed
11111 - It should return either 0, meaning success, ARGP_ERR_UNKNOWN, meaning the
11112 - given KEY wasn't recognized, or an errno value indicating some other
11113 - error.
11115 - Note that in this example, main uses a structure to communicate with the
11116 - parse_opt function, a pointer to which it passes in the INPUT argument to
11117 - argp_parse. Of course, it's also possible to use global variables
11118 - instead, but this is somewhat more flexible.
11120 - The OPTIONS field contains a pointer to a vector of struct argp_option's;
11121 - that structure has the following fields (if you assign your option
11122 - structures using array initialization like this example, unspecified
11123 - fields will be defaulted to 0, and need not be specified):
11124 - NAME -- The name of this option's long option (may be zero)
11125 - KEY -- The KEY to pass to the PARSER function when parsing this option,
11126 - *and* the name of this option's short option, if it is a
11127 - printable ascii character
11128 - ARG -- The name of this option's argument, if any
11129 - FLAGS -- Flags describing this option; some of them are:
11130 - OPTION_ARG_OPTIONAL -- The argument to this option is optional
11131 - OPTION_ALIAS -- This option is an alias for the
11132 - previous option
11133 - OPTION_HIDDEN -- Don't show this option in --help output
11134 - DOC -- A documentation string for this option, shown in --help output
11136 - An options vector should be terminated by an option with all fields zero.} */
11138 -#include <argp.h>
11140 -const char *argp_program_version =
11141 - "argp-ex3 1.0";
11142 -const char *argp_program_bug_address =
11143 - "<bug-gnu-utils@@gnu.org>";
11145 -/* @r{Program documentation.} */
11146 -static char doc[] =
11147 - "Argp example #3 -- a program with options and arguments using argp";
11149 -/* @r{A description of the arguments we accept.} */
11150 -static char args_doc[] = "ARG1 ARG2";
11152 -/* @r{The options we understand.} */
11153 -static struct argp_option options[] = @{
11154 - @{"verbose", 'v', 0, 0, "Produce verbose output" @},
11155 - @{"quiet", 'q', 0, 0, "Don't produce any output" @},
11156 - @{"silent", 's', 0, OPTION_ALIAS @},
11157 - @{"output", 'o', "FILE", 0,
11158 - "Output to FILE instead of standard output" @},
11159 - @{ 0 @}
11160 -@};
11162 -/* @r{Used by @code{main} to communicate with @code{parse_opt}.} */
11163 -struct arguments
11165 - char *args[2]; /* @r{@var{arg1} & @var{arg2}} */
11166 - int silent, verbose;
11167 - char *output_file;
11168 -@};
11170 -/* @r{Parse a single option.} */
11171 -static error_t
11172 -parse_opt (int key, char *arg, struct argp_state *state)
11174 - /* @r{Get the @var{input} argument from @code{argp_parse}, which we
11175 - know is a pointer to our arguments structure.} */
11176 - struct arguments *arguments = state->input;
11178 - switch (key)
11179 - @{
11180 - case 'q': case 's':
11181 - arguments->silent = 1;
11182 - break;
11183 - case 'v':
11184 - arguments->verbose = 1;
11185 - break;
11186 - case 'o':
11187 - arguments->output_file = arg;
11188 - break;
11190 - case ARGP_KEY_ARG:
11191 - if (state->arg_num >= 2)
11192 - /* @r{Too many arguments.} */
11193 - argp_usage (state);
11195 - arguments->args[state->arg_num] = arg;
11197 - break;
11199 - case ARGP_KEY_END:
11200 - if (state->arg_num < 2)
11201 - /* @r{Not enough arguments.} */
11202 - argp_usage (state);
11203 - break;
11205 - default:
11206 - return ARGP_ERR_UNKNOWN;
11207 - @}
11208 - return 0;
11211 -/* @r{Our argp parser.} */
11212 -static struct argp argp = @{ options, parse_opt, args_doc, doc @};
11214 -int main (int argc, char **argv)
11216 - struct arguments arguments;
11218 - /* @r{Default values.} */
11219 - arguments.silent = 0;
11220 - arguments.verbose = 0;
11221 - arguments.output_file = "-";
11223 - /* @r{Parse our arguments; every option seen by @code{parse_opt} will
11224 - be reflected in @code{arguments}.} */
11225 - argp_parse (&argp, argc, argv, 0, 0, &arguments);
11227 - printf ("ARG1 = %s\nARG2 = %s\nOUTPUT_FILE = %s\n"
11228 - "VERBOSE = %s\nSILENT = %s\n",
11229 - arguments.args[0], arguments.args[1],
11230 - arguments.output_file,
11231 - arguments.verbose ? "yes" : "no",
11232 - arguments.silent ? "yes" : "no");
11234 - exit (0);
11236 diff -u -udbrN glibc-2.3.2/manual/argp-ex4.c.texi glibc-2.3.2-200304020432/manual/argp-ex4.c.texi
11237 --- glibc-2.3.2/manual/argp-ex4.c.texi Tue Feb 22 09:35:05 2000
11238 +++ glibc-2.3.2-200304020432/manual/argp-ex4.c.texi Thu Jan 1 01:00:00 1970
11239 @@ -1,167 +0,0 @@
11240 -/* @r{Argp example #4 -- a program with somewhat more complicated options} */
11242 -/* @r{This program uses the same features as example 3, but has more
11243 - options, and somewhat more structure in the -help output. It
11244 - also shows how you can `steal' the remainder of the input
11245 - arguments past a certain point, for programs that accept a
11246 - list of items. It also shows the special argp KEY value
11247 - ARGP_KEY_NO_ARGS, which is only given if no non-option
11248 - arguments were supplied to the program.
11250 - For structuring the help output, two features are used,
11251 - *headers* which are entries in the options vector with the
11252 - first four fields being zero, and a two part documentation
11253 - string (in the variable DOC), which allows documentation both
11254 - before and after the options; the two parts of DOC are
11255 - separated by a vertical-tab character ('\v', or '\013'). By
11256 - convention, the documentation before the options is just a
11257 - short string saying what the program does, and that afterwards
11258 - is longer, describing the behavior in more detail. All
11259 - documentation strings are automatically filled for output,
11260 - although newlines may be included to force a line break at a
11261 - particular point. All documentation strings are also passed to
11262 - the `gettext' function, for possible translation into the
11263 - current locale.} */
11265 -#include <stdlib.h>
11266 -#include <error.h>
11267 -#include <argp.h>
11269 -const char *argp_program_version =
11270 - "argp-ex4 1.0";
11271 -const char *argp_program_bug_address =
11272 - "<bug-gnu-utils@@prep.ai.mit.edu>";
11274 -/* @r{Program documentation.} */
11275 -static char doc[] =
11276 - "Argp example #4 -- a program with somewhat more complicated\
11277 -options\
11278 -\vThis part of the documentation comes *after* the options;\
11279 - note that the text is automatically filled, but it's possible\
11280 - to force a line-break, e.g.\n<-- here.";
11282 -/* @r{A description of the arguments we accept.} */
11283 -static char args_doc[] = "ARG1 [STRING...]";
11285 -/* @r{Keys for options without short-options.} */
11286 -#define OPT_ABORT 1 /* @r{--abort} */
11288 -/* @r{The options we understand.} */
11289 -static struct argp_option options[] = @{
11290 - @{"verbose", 'v', 0, 0, "Produce verbose output" @},
11291 - @{"quiet", 'q', 0, 0, "Don't produce any output" @},
11292 - @{"silent", 's', 0, OPTION_ALIAS @},
11293 - @{"output", 'o', "FILE", 0,
11294 - "Output to FILE instead of standard output" @},
11296 - @{0,0,0,0, "The following options should be grouped together:" @},
11297 - @{"repeat", 'r', "COUNT", OPTION_ARG_OPTIONAL,
11298 - "Repeat the output COUNT (default 10) times"@},
11299 - @{"abort", OPT_ABORT, 0, 0, "Abort before showing any output"@},
11301 - @{ 0 @}
11302 -@};
11304 -/* @r{Used by @code{main} to communicate with @code{parse_opt}.} */
11305 -struct arguments
11307 - char *arg1; /* @r{@var{arg1}} */
11308 - char **strings; /* @r{[@var{string}@dots{}]} */
11309 - int silent, verbose, abort; /* @r{@samp{-s}, @samp{-v}, @samp{--abort}} */
11310 - char *output_file; /* @r{@var{file} arg to @samp{--output}} */
11311 - int repeat_count; /* @r{@var{count} arg to @samp{--repeat}} */
11312 -@};
11314 -/* @r{Parse a single option.} */
11315 -static error_t
11316 -parse_opt (int key, char *arg, struct argp_state *state)
11318 - /* @r{Get the @code{input} argument from @code{argp_parse}, which we
11319 - know is a pointer to our arguments structure.} */
11320 - struct arguments *arguments = state->input;
11322 - switch (key)
11323 - @{
11324 - case 'q': case 's':
11325 - arguments->silent = 1;
11326 - break;
11327 - case 'v':
11328 - arguments->verbose = 1;
11329 - break;
11330 - case 'o':
11331 - arguments->output_file = arg;
11332 - break;
11333 - case 'r':
11334 - arguments->repeat_count = arg ? atoi (arg) : 10;
11335 - break;
11336 - case OPT_ABORT:
11337 - arguments->abort = 1;
11338 - break;
11340 - case ARGP_KEY_NO_ARGS:
11341 - argp_usage (state);
11343 - case ARGP_KEY_ARG:
11344 - /* @r{Here we know that @code{state->arg_num == 0}, since we
11345 - force argument parsing to end before any more arguments can
11346 - get here.} */
11347 - arguments->arg1 = arg;
11349 - /* @r{Now we consume all the rest of the arguments.
11350 - @code{state->next} is the index in @code{state->argv} of the
11351 - next argument to be parsed, which is the first @var{string}
11352 - we're interested in, so we can just use
11353 - @code{&state->argv[state->next]} as the value for
11354 - arguments->strings.
11356 - @emph{In addition}, by setting @code{state->next} to the end
11357 - of the arguments, we can force argp to stop parsing here and
11358 - return.} */
11359 - arguments->strings = &state->argv[state->next];
11360 - state->next = state->argc;
11362 - break;
11364 - default:
11365 - return ARGP_ERR_UNKNOWN;
11366 - @}
11367 - return 0;
11370 -/* @r{Our argp parser.} */
11371 -static struct argp argp = @{ options, parse_opt, args_doc, doc @};
11373 -int main (int argc, char **argv)
11375 - int i, j;
11376 - struct arguments arguments;
11378 - /* @r{Default values.} */
11379 - arguments.silent = 0;
11380 - arguments.verbose = 0;
11381 - arguments.output_file = "-";
11382 - arguments.repeat_count = 1;
11383 - arguments.abort = 0;
11385 - /* @r{Parse our arguments; every option seen by @code{parse_opt} will be
11386 - reflected in @code{arguments}.} */
11387 - argp_parse (&argp, argc, argv, 0, 0, &arguments);
11389 - if (arguments.abort)
11390 - error (10, 0, "ABORTED");
11392 - for (i = 0; i < arguments.repeat_count; i++)
11393 - @{
11394 - printf ("ARG1 = %s\n", arguments.arg1);
11395 - printf ("STRINGS = ");
11396 - for (j = 0; arguments.strings[j]; j++)
11397 - printf (j == 0 ? "%s" : ", %s", arguments.strings[j]);
11398 - printf ("\n");
11399 - printf ("OUTPUT_FILE = %s\nVERBOSE = %s\nSILENT = %s\n",
11400 - arguments.output_file,
11401 - arguments.verbose ? "yes" : "no",
11402 - arguments.silent ? "yes" : "no");
11403 - @}
11405 - exit (0);
11407 diff -u -udbrN glibc-2.3.2/manual/atexit.c.texi glibc-2.3.2-200304020432/manual/atexit.c.texi
11408 --- glibc-2.3.2/manual/atexit.c.texi Wed Dec 9 23:51:54 1998
11409 +++ glibc-2.3.2-200304020432/manual/atexit.c.texi Thu Jan 1 01:00:00 1970
11410 @@ -1,15 +0,0 @@
11411 -#include <stdio.h>
11412 -#include <stdlib.h>
11414 -void
11415 -bye (void)
11417 - puts ("Goodbye, cruel world....");
11420 -int
11421 -main (void)
11423 - atexit (bye);
11424 - exit (EXIT_SUCCESS);
11426 diff -u -udbrN glibc-2.3.2/manual/db.c.texi glibc-2.3.2-200304020432/manual/db.c.texi
11427 --- glibc-2.3.2/manual/db.c.texi Wed Dec 9 23:51:54 1998
11428 +++ glibc-2.3.2-200304020432/manual/db.c.texi Thu Jan 1 01:00:00 1970
11429 @@ -1,52 +0,0 @@
11430 -#include <grp.h>
11431 -#include <pwd.h>
11432 -#include <sys/types.h>
11433 -#include <unistd.h>
11434 -#include <stdlib.h>
11436 -int
11437 -main (void)
11439 - uid_t me;
11440 - struct passwd *my_passwd;
11441 - struct group *my_group;
11442 - char **members;
11444 - /* @r{Get information about the user ID.} */
11445 - me = getuid ();
11446 - my_passwd = getpwuid (me);
11447 - if (!my_passwd)
11448 - @{
11449 - printf ("Couldn't find out about user %d.\n", (int) me);
11450 - exit (EXIT_FAILURE);
11451 - @}
11453 - /* @r{Print the information.} */
11454 - printf ("I am %s.\n", my_passwd->pw_gecos);
11455 - printf ("My login name is %s.\n", my_passwd->pw_name);
11456 - printf ("My uid is %d.\n", (int) (my_passwd->pw_uid));
11457 - printf ("My home directory is %s.\n", my_passwd->pw_dir);
11458 - printf ("My default shell is %s.\n", my_passwd->pw_shell);
11460 - /* @r{Get information about the default group ID.} */
11461 - my_group = getgrgid (my_passwd->pw_gid);
11462 - if (!my_group)
11463 - @{
11464 - printf ("Couldn't find out about group %d.\n",
11465 - (int) my_passwd->pw_gid);
11466 - exit (EXIT_FAILURE);
11467 - @}
11469 - /* @r{Print the information.} */
11470 - printf ("My default group is %s (%d).\n",
11471 - my_group->gr_name, (int) (my_passwd->pw_gid));
11472 - printf ("The members of this group are:\n");
11473 - members = my_group->gr_mem;
11474 - while (*members)
11475 - @{
11476 - printf (" %s\n", *(members));
11477 - members++;
11478 - @}
11480 - return EXIT_SUCCESS;
11482 diff -u -udbrN glibc-2.3.2/manual/dir-add.info glibc-2.3.2-200304020432/manual/dir-add.info
11483 --- glibc-2.3.2/manual/dir-add.info Sat Mar 1 02:39:41 2003
11484 +++ glibc-2.3.2-200304020432/manual/dir-add.info Thu Jan 1 01:00:00 1970
11485 @@ -1,1707 +0,0 @@
11486 -INFO-DIR-SECTION GNU C library functions
11487 -START-INFO-DIR-ENTRY
11488 -* ALTWERASE: (libc)Local Modes.
11489 -* ARGP_ERR_UNKNOWN: (libc)Argp Parser Functions.
11490 -* ARG_MAX: (libc)General Limits.
11491 -* BC_BASE_MAX: (libc)Utility Limits.
11492 -* BC_DIM_MAX: (libc)Utility Limits.
11493 -* BC_SCALE_MAX: (libc)Utility Limits.
11494 -* BC_STRING_MAX: (libc)Utility Limits.
11495 -* BRKINT: (libc)Input Modes.
11496 -* BUFSIZ: (libc)Controlling Buffering.
11497 -* CCTS_OFLOW: (libc)Control Modes.
11498 -* CHILD_MAX: (libc)General Limits.
11499 -* CIGNORE: (libc)Control Modes.
11500 -* CLK_TCK: (libc)CPU Time.
11501 -* CLOCAL: (libc)Control Modes.
11502 -* CLOCKS_PER_SEC: (libc)CPU Time.
11503 -* COLL_WEIGHTS_MAX: (libc)Utility Limits.
11504 -* CREAD: (libc)Control Modes.
11505 -* CRTS_IFLOW: (libc)Control Modes.
11506 -* CS5: (libc)Control Modes.
11507 -* CS6: (libc)Control Modes.
11508 -* CS7: (libc)Control Modes.
11509 -* CS8: (libc)Control Modes.
11510 -* CSIZE: (libc)Control Modes.
11511 -* CSTOPB: (libc)Control Modes.
11512 -* DES_FAILED: (libc)DES Encryption.
11513 -* DTTOIF: (libc)Directory Entries.
11514 -* E2BIG: (libc)Error Codes.
11515 -* EACCES: (libc)Error Codes.
11516 -* EADDRINUSE: (libc)Error Codes.
11517 -* EADDRNOTAVAIL: (libc)Error Codes.
11518 -* EADV: (libc)Error Codes.
11519 -* EAFNOSUPPORT: (libc)Error Codes.
11520 -* EAGAIN: (libc)Error Codes.
11521 -* EALREADY: (libc)Error Codes.
11522 -* EAUTH: (libc)Error Codes.
11523 -* EBACKGROUND: (libc)Error Codes.
11524 -* EBADE: (libc)Error Codes.
11525 -* EBADF: (libc)Error Codes.
11526 -* EBADFD: (libc)Error Codes.
11527 -* EBADMSG: (libc)Error Codes.
11528 -* EBADR: (libc)Error Codes.
11529 -* EBADRPC: (libc)Error Codes.
11530 -* EBADRQC: (libc)Error Codes.
11531 -* EBADSLT: (libc)Error Codes.
11532 -* EBFONT: (libc)Error Codes.
11533 -* EBUSY: (libc)Error Codes.
11534 -* ECANCELED: (libc)Error Codes.
11535 -* ECHILD: (libc)Error Codes.
11536 -* ECHO: (libc)Local Modes.
11537 -* ECHOCTL: (libc)Local Modes.
11538 -* ECHOE: (libc)Local Modes.
11539 -* ECHOK: (libc)Local Modes.
11540 -* ECHOKE: (libc)Local Modes.
11541 -* ECHONL: (libc)Local Modes.
11542 -* ECHOPRT: (libc)Local Modes.
11543 -* ECHRNG: (libc)Error Codes.
11544 -* ECOMM: (libc)Error Codes.
11545 -* ECONNABORTED: (libc)Error Codes.
11546 -* ECONNREFUSED: (libc)Error Codes.
11547 -* ECONNRESET: (libc)Error Codes.
11548 -* ED: (libc)Error Codes.
11549 -* EDEADLK: (libc)Error Codes.
11550 -* EDEADLOCK: (libc)Error Codes.
11551 -* EDESTADDRREQ: (libc)Error Codes.
11552 -* EDIED: (libc)Error Codes.
11553 -* EDOM: (libc)Error Codes.
11554 -* EDOTDOT: (libc)Error Codes.
11555 -* EDQUOT: (libc)Error Codes.
11556 -* EEXIST: (libc)Error Codes.
11557 -* EFAULT: (libc)Error Codes.
11558 -* EFBIG: (libc)Error Codes.
11559 -* EFTYPE: (libc)Error Codes.
11560 -* EGRATUITOUS: (libc)Error Codes.
11561 -* EGREGIOUS: (libc)Error Codes.
11562 -* EHOSTDOWN: (libc)Error Codes.
11563 -* EHOSTUNREACH: (libc)Error Codes.
11564 -* EIDRM: (libc)Error Codes.
11565 -* EIEIO: (libc)Error Codes.
11566 -* EILSEQ: (libc)Error Codes.
11567 -* EINPROGRESS: (libc)Error Codes.
11568 -* EINTR: (libc)Error Codes.
11569 -* EINVAL: (libc)Error Codes.
11570 -* EIO: (libc)Error Codes.
11571 -* EISCONN: (libc)Error Codes.
11572 -* EISDIR: (libc)Error Codes.
11573 -* EISNAM: (libc)Error Codes.
11574 -* EL2HLT: (libc)Error Codes.
11575 -* EL2NSYNC: (libc)Error Codes.
11576 -* EL3HLT: (libc)Error Codes.
11577 -* EL3RST: (libc)Error Codes.
11578 -* ELIBACC: (libc)Error Codes.
11579 -* ELIBBAD: (libc)Error Codes.
11580 -* ELIBEXEC: (libc)Error Codes.
11581 -* ELIBMAX: (libc)Error Codes.
11582 -* ELIBSCN: (libc)Error Codes.
11583 -* ELNRNG: (libc)Error Codes.
11584 -* ELOOP: (libc)Error Codes.
11585 -* EMEDIUMTYPE: (libc)Error Codes.
11586 -* EMFILE: (libc)Error Codes.
11587 -* EMLINK: (libc)Error Codes.
11588 -* EMSGSIZE: (libc)Error Codes.
11589 -* EMULTIHOP: (libc)Error Codes.
11590 -* ENAMETOOLONG: (libc)Error Codes.
11591 -* ENAVAIL: (libc)Error Codes.
11592 -* ENEEDAUTH: (libc)Error Codes.
11593 -* ENETDOWN: (libc)Error Codes.
11594 -* ENETRESET: (libc)Error Codes.
11595 -* ENETUNREACH: (libc)Error Codes.
11596 -* ENFILE: (libc)Error Codes.
11597 -* ENOANO: (libc)Error Codes.
11598 -* ENOBUFS: (libc)Error Codes.
11599 -* ENOCSI: (libc)Error Codes.
11600 -* ENODATA: (libc)Error Codes.
11601 -* ENODEV: (libc)Error Codes.
11602 -* ENOENT: (libc)Error Codes.
11603 -* ENOEXEC: (libc)Error Codes.
11604 -* ENOLCK: (libc)Error Codes.
11605 -* ENOLINK: (libc)Error Codes.
11606 -* ENOMEDIUM: (libc)Error Codes.
11607 -* ENOMEM: (libc)Error Codes.
11608 -* ENOMSG: (libc)Error Codes.
11609 -* ENONET: (libc)Error Codes.
11610 -* ENOPKG: (libc)Error Codes.
11611 -* ENOPROTOOPT: (libc)Error Codes.
11612 -* ENOSPC: (libc)Error Codes.
11613 -* ENOSR: (libc)Error Codes.
11614 -* ENOSTR: (libc)Error Codes.
11615 -* ENOSYS: (libc)Error Codes.
11616 -* ENOTBLK: (libc)Error Codes.
11617 -* ENOTCONN: (libc)Error Codes.
11618 -* ENOTDIR: (libc)Error Codes.
11619 -* ENOTEMPTY: (libc)Error Codes.
11620 -* ENOTNAM: (libc)Error Codes.
11621 -* ENOTSOCK: (libc)Error Codes.
11622 -* ENOTSUP: (libc)Error Codes.
11623 -* ENOTTY: (libc)Error Codes.
11624 -* ENOTUNIQ: (libc)Error Codes.
11625 -* ENXIO: (libc)Error Codes.
11626 -* EOF: (libc)EOF and Errors.
11627 -* EOPNOTSUPP: (libc)Error Codes.
11628 -* EOVERFLOW: (libc)Error Codes.
11629 -* EPERM: (libc)Error Codes.
11630 -* EPFNOSUPPORT: (libc)Error Codes.
11631 -* EPIPE: (libc)Error Codes.
11632 -* EPROCLIM: (libc)Error Codes.
11633 -* EPROCUNAVAIL: (libc)Error Codes.
11634 -* EPROGMISMATCH: (libc)Error Codes.
11635 -* EPROGUNAVAIL: (libc)Error Codes.
11636 -* EPROTO: (libc)Error Codes.
11637 -* EPROTONOSUPPORT: (libc)Error Codes.
11638 -* EPROTOTYPE: (libc)Error Codes.
11639 -* EQUIV_CLASS_MAX: (libc)Utility Limits.
11640 -* ERANGE: (libc)Error Codes.
11641 -* EREMCHG: (libc)Error Codes.
11642 -* EREMOTE: (libc)Error Codes.
11643 -* EREMOTEIO: (libc)Error Codes.
11644 -* ERESTART: (libc)Error Codes.
11645 -* EROFS: (libc)Error Codes.
11646 -* ERPCMISMATCH: (libc)Error Codes.
11647 -* ESHUTDOWN: (libc)Error Codes.
11648 -* ESOCKTNOSUPPORT: (libc)Error Codes.
11649 -* ESPIPE: (libc)Error Codes.
11650 -* ESRCH: (libc)Error Codes.
11651 -* ESRMNT: (libc)Error Codes.
11652 -* ESTALE: (libc)Error Codes.
11653 -* ESTRPIPE: (libc)Error Codes.
11654 -* ETIME: (libc)Error Codes.
11655 -* ETIMEDOUT: (libc)Error Codes.
11656 -* ETOOMANYREFS: (libc)Error Codes.
11657 -* ETXTBSY: (libc)Error Codes.
11658 -* EUCLEAN: (libc)Error Codes.
11659 -* EUNATCH: (libc)Error Codes.
11660 -* EUSERS: (libc)Error Codes.
11661 -* EWOULDBLOCK: (libc)Error Codes.
11662 -* EXDEV: (libc)Error Codes.
11663 -* EXFULL: (libc)Error Codes.
11664 -* EXIT_FAILURE: (libc)Exit Status.
11665 -* EXIT_SUCCESS: (libc)Exit Status.
11666 -* EXPR_NEST_MAX: (libc)Utility Limits.
11667 -* FD_CLOEXEC: (libc)Descriptor Flags.
11668 -* FD_CLR: (libc)Waiting for I/O.
11669 -* FD_ISSET: (libc)Waiting for I/O.
11670 -* FD_SET: (libc)Waiting for I/O.
11671 -* FD_SETSIZE: (libc)Waiting for I/O.
11672 -* FD_ZERO: (libc)Waiting for I/O.
11673 -* FILENAME_MAX: (libc)Limits for Files.
11674 -* FLUSHO: (libc)Local Modes.
11675 -* FOPEN_MAX: (libc)Opening Streams.
11676 -* FP_ILOGB0: (libc)Exponents and Logarithms.
11677 -* FP_ILOGBNAN: (libc)Exponents and Logarithms.
11678 -* F_DUPFD: (libc)Duplicating Descriptors.
11679 -* F_GETFD: (libc)Descriptor Flags.
11680 -* F_GETFL: (libc)Getting File Status Flags.
11681 -* F_GETLK: (libc)File Locks.
11682 -* F_GETOWN: (libc)Interrupt Input.
11683 -* F_OK: (libc)Testing File Access.
11684 -* F_SETFD: (libc)Descriptor Flags.
11685 -* F_SETFL: (libc)Getting File Status Flags.
11686 -* F_SETLK: (libc)File Locks.
11687 -* F_SETLKW: (libc)File Locks.
11688 -* F_SETOWN: (libc)Interrupt Input.
11689 -* HUGE_VAL: (libc)Math Error Reporting.
11690 -* HUGE_VALF: (libc)Math Error Reporting.
11691 -* HUGE_VALL: (libc)Math Error Reporting.
11692 -* HUPCL: (libc)Control Modes.
11693 -* I: (libc)Complex Numbers.
11694 -* ICANON: (libc)Local Modes.
11695 -* ICRNL: (libc)Input Modes.
11696 -* IEXTEN: (libc)Local Modes.
11697 -* IFNAMSIZ: (libc)Interface Naming.
11698 -* IFTODT: (libc)Directory Entries.
11699 -* IGNBRK: (libc)Input Modes.
11700 -* IGNCR: (libc)Input Modes.
11701 -* IGNPAR: (libc)Input Modes.
11702 -* IMAXBEL: (libc)Input Modes.
11703 -* INADDR_ANY: (libc)Host Address Data Type.
11704 -* INADDR_BROADCAST: (libc)Host Address Data Type.
11705 -* INADDR_LOOPBACK: (libc)Host Address Data Type.
11706 -* INADDR_NONE: (libc)Host Address Data Type.
11707 -* INFINITY: (libc)Infinity and NaN.
11708 -* INLCR: (libc)Input Modes.
11709 -* INPCK: (libc)Input Modes.
11710 -* IPPORT_RESERVED: (libc)Ports.
11711 -* IPPORT_USERRESERVED: (libc)Ports.
11712 -* ISIG: (libc)Local Modes.
11713 -* ISTRIP: (libc)Input Modes.
11714 -* IXANY: (libc)Input Modes.
11715 -* IXOFF: (libc)Input Modes.
11716 -* IXON: (libc)Input Modes.
11717 -* LINE_MAX: (libc)Utility Limits.
11718 -* LINK_MAX: (libc)Limits for Files.
11719 -* L_ctermid: (libc)Identifying the Terminal.
11720 -* L_cuserid: (libc)Who Logged In.
11721 -* L_tmpnam: (libc)Temporary Files.
11722 -* MAXNAMLEN: (libc)Limits for Files.
11723 -* MAXSYMLINKS: (libc)Symbolic Links.
11724 -* MAX_CANON: (libc)Limits for Files.
11725 -* MAX_INPUT: (libc)Limits for Files.
11726 -* MB_CUR_MAX: (libc)Selecting the Conversion.
11727 -* MB_LEN_MAX: (libc)Selecting the Conversion.
11728 -* MDMBUF: (libc)Control Modes.
11729 -* MSG_DONTROUTE: (libc)Socket Data Options.
11730 -* MSG_OOB: (libc)Socket Data Options.
11731 -* MSG_PEEK: (libc)Socket Data Options.
11732 -* NAME_MAX: (libc)Limits for Files.
11733 -* NAN: (libc)Infinity and NaN.
11734 -* NCCS: (libc)Mode Data Types.
11735 -* NGROUPS_MAX: (libc)General Limits.
11736 -* NOFLSH: (libc)Local Modes.
11737 -* NOKERNINFO: (libc)Local Modes.
11738 -* NSIG: (libc)Standard Signals.
11739 -* NULL: (libc)Null Pointer Constant.
11740 -* ONLCR: (libc)Output Modes.
11741 -* ONOEOT: (libc)Output Modes.
11742 -* OPEN_MAX: (libc)General Limits.
11743 -* OPOST: (libc)Output Modes.
11744 -* OXTABS: (libc)Output Modes.
11745 -* O_ACCMODE: (libc)Access Modes.
11746 -* O_APPEND: (libc)Operating Modes.
11747 -* O_ASYNC: (libc)Operating Modes.
11748 -* O_CREAT: (libc)Open-time Flags.
11749 -* O_EXCL: (libc)Open-time Flags.
11750 -* O_EXEC: (libc)Access Modes.
11751 -* O_EXLOCK: (libc)Open-time Flags.
11752 -* O_FSYNC: (libc)Operating Modes.
11753 -* O_IGNORE_CTTY: (libc)Open-time Flags.
11754 -* O_NDELAY: (libc)Operating Modes.
11755 -* O_NOATIME: (libc)Operating Modes.
11756 -* O_NOCTTY: (libc)Open-time Flags.
11757 -* O_NOLINK: (libc)Open-time Flags.
11758 -* O_NONBLOCK: (libc)Open-time Flags.
11759 -* O_NONBLOCK: (libc)Operating Modes.
11760 -* O_NOTRANS: (libc)Open-time Flags.
11761 -* O_RDONLY: (libc)Access Modes.
11762 -* O_RDWR: (libc)Access Modes.
11763 -* O_READ: (libc)Access Modes.
11764 -* O_SHLOCK: (libc)Open-time Flags.
11765 -* O_SYNC: (libc)Operating Modes.
11766 -* O_TRUNC: (libc)Open-time Flags.
11767 -* O_WRITE: (libc)Access Modes.
11768 -* O_WRONLY: (libc)Access Modes.
11769 -* PARENB: (libc)Control Modes.
11770 -* PARMRK: (libc)Input Modes.
11771 -* PARODD: (libc)Control Modes.
11772 -* PATH_MAX: (libc)Limits for Files.
11773 -* PA_FLAG_MASK: (libc)Parsing a Template String.
11774 -* PENDIN: (libc)Local Modes.
11775 -* PF_FILE: (libc)Local Namespace Details.
11776 -* PF_INET6: (libc)Internet Namespace.
11777 -* PF_INET: (libc)Internet Namespace.
11778 -* PF_LOCAL: (libc)Local Namespace Details.
11779 -* PF_UNIX: (libc)Local Namespace Details.
11780 -* PIPE_BUF: (libc)Limits for Files.
11781 -* P_tmpdir: (libc)Temporary Files.
11782 -* RAND_MAX: (libc)ISO Random.
11783 -* RE_DUP_MAX: (libc)General Limits.
11784 -* RLIM_INFINITY: (libc)Limits on Resources.
11785 -* R_OK: (libc)Testing File Access.
11786 -* SA_NOCLDSTOP: (libc)Flags for Sigaction.
11787 -* SA_ONSTACK: (libc)Flags for Sigaction.
11788 -* SA_RESTART: (libc)Flags for Sigaction.
11789 -* SEEK_CUR: (libc)File Positioning.
11790 -* SEEK_END: (libc)File Positioning.
11791 -* SEEK_SET: (libc)File Positioning.
11792 -* SIGABRT: (libc)Program Error Signals.
11793 -* SIGALRM: (libc)Alarm Signals.
11794 -* SIGBUS: (libc)Program Error Signals.
11795 -* SIGCHLD: (libc)Job Control Signals.
11796 -* SIGCLD: (libc)Job Control Signals.
11797 -* SIGCONT: (libc)Job Control Signals.
11798 -* SIGEMT: (libc)Program Error Signals.
11799 -* SIGFPE: (libc)Program Error Signals.
11800 -* SIGHUP: (libc)Termination Signals.
11801 -* SIGILL: (libc)Program Error Signals.
11802 -* SIGINFO: (libc)Miscellaneous Signals.
11803 -* SIGINT: (libc)Termination Signals.
11804 -* SIGIO: (libc)Asynchronous I/O Signals.
11805 -* SIGIOT: (libc)Program Error Signals.
11806 -* SIGKILL: (libc)Termination Signals.
11807 -* SIGLOST: (libc)Operation Error Signals.
11808 -* SIGPIPE: (libc)Operation Error Signals.
11809 -* SIGPOLL: (libc)Asynchronous I/O Signals.
11810 -* SIGPROF: (libc)Alarm Signals.
11811 -* SIGQUIT: (libc)Termination Signals.
11812 -* SIGSEGV: (libc)Program Error Signals.
11813 -* SIGSTOP: (libc)Job Control Signals.
11814 -* SIGSYS: (libc)Program Error Signals.
11815 -* SIGTERM: (libc)Termination Signals.
11816 -* SIGTRAP: (libc)Program Error Signals.
11817 -* SIGTSTP: (libc)Job Control Signals.
11818 -* SIGTTIN: (libc)Job Control Signals.
11819 -* SIGTTOU: (libc)Job Control Signals.
11820 -* SIGURG: (libc)Asynchronous I/O Signals.
11821 -* SIGUSR1: (libc)Miscellaneous Signals.
11822 -* SIGUSR2: (libc)Miscellaneous Signals.
11823 -* SIGVTALRM: (libc)Alarm Signals.
11824 -* SIGWINCH: (libc)Miscellaneous Signals.
11825 -* SIGXCPU: (libc)Operation Error Signals.
11826 -* SIGXFSZ: (libc)Operation Error Signals.
11827 -* SIG_ERR: (libc)Basic Signal Handling.
11828 -* SOCK_DGRAM: (libc)Communication Styles.
11829 -* SOCK_RAW: (libc)Communication Styles.
11830 -* SOCK_RDM: (libc)Communication Styles.
11831 -* SOCK_SEQPACKET: (libc)Communication Styles.
11832 -* SOCK_STREAM: (libc)Communication Styles.
11833 -* SOL_SOCKET: (libc)Socket-Level Options.
11834 -* SSIZE_MAX: (libc)General Limits.
11835 -* STREAM_MAX: (libc)General Limits.
11836 -* SUN_LEN: (libc)Local Namespace Details.
11837 -* SV_INTERRUPT: (libc)BSD Handler.
11838 -* SV_ONSTACK: (libc)BSD Handler.
11839 -* SV_RESETHAND: (libc)BSD Handler.
11840 -* S_IFMT: (libc)Testing File Type.
11841 -* S_ISBLK: (libc)Testing File Type.
11842 -* S_ISCHR: (libc)Testing File Type.
11843 -* S_ISDIR: (libc)Testing File Type.
11844 -* S_ISFIFO: (libc)Testing File Type.
11845 -* S_ISLNK: (libc)Testing File Type.
11846 -* S_ISREG: (libc)Testing File Type.
11847 -* S_ISSOCK: (libc)Testing File Type.
11848 -* S_TYPEISMQ: (libc)Testing File Type.
11849 -* S_TYPEISSEM: (libc)Testing File Type.
11850 -* S_TYPEISSHM: (libc)Testing File Type.
11851 -* TMP_MAX: (libc)Temporary Files.
11852 -* TOSTOP: (libc)Local Modes.
11853 -* TZNAME_MAX: (libc)General Limits.
11854 -* VDISCARD: (libc)Other Special.
11855 -* VDSUSP: (libc)Signal Characters.
11856 -* VEOF: (libc)Editing Characters.
11857 -* VEOL2: (libc)Editing Characters.
11858 -* VEOL: (libc)Editing Characters.
11859 -* VERASE: (libc)Editing Characters.
11860 -* VINTR: (libc)Signal Characters.
11861 -* VKILL: (libc)Editing Characters.
11862 -* VLNEXT: (libc)Other Special.
11863 -* VMIN: (libc)Noncanonical Input.
11864 -* VQUIT: (libc)Signal Characters.
11865 -* VREPRINT: (libc)Editing Characters.
11866 -* VSTART: (libc)Start/Stop Characters.
11867 -* VSTATUS: (libc)Other Special.
11868 -* VSTOP: (libc)Start/Stop Characters.
11869 -* VSUSP: (libc)Signal Characters.
11870 -* VTIME: (libc)Noncanonical Input.
11871 -* VWERASE: (libc)Editing Characters.
11872 -* WCHAR_MAX: (libc)Extended Char Intro.
11873 -* WCHAR_MIN: (libc)Extended Char Intro.
11874 -* WCOREDUMP: (libc)Process Completion Status.
11875 -* WEOF: (libc)EOF and Errors.
11876 -* WEOF: (libc)Extended Char Intro.
11877 -* WEXITSTATUS: (libc)Process Completion Status.
11878 -* WIFEXITED: (libc)Process Completion Status.
11879 -* WIFSIGNALED: (libc)Process Completion Status.
11880 -* WIFSTOPPED: (libc)Process Completion Status.
11881 -* WSTOPSIG: (libc)Process Completion Status.
11882 -* WTERMSIG: (libc)Process Completion Status.
11883 -* W_OK: (libc)Testing File Access.
11884 -* X_OK: (libc)Testing File Access.
11885 -* _Complex_I: (libc)Complex Numbers.
11886 -* _Exit: (libc)Termination Internals.
11887 -* _IOFBF: (libc)Controlling Buffering.
11888 -* _IOLBF: (libc)Controlling Buffering.
11889 -* _IONBF: (libc)Controlling Buffering.
11890 -* _Imaginary_I: (libc)Complex Numbers.
11891 -* _PATH_UTMP: (libc)Manipulating the Database.
11892 -* _PATH_WTMP: (libc)Manipulating the Database.
11893 -* _POSIX2_C_DEV: (libc)System Options.
11894 -* _POSIX2_C_VERSION: (libc)Version Supported.
11895 -* _POSIX2_FORT_DEV: (libc)System Options.
11896 -* _POSIX2_FORT_RUN: (libc)System Options.
11897 -* _POSIX2_LOCALEDEF: (libc)System Options.
11898 -* _POSIX2_SW_DEV: (libc)System Options.
11899 -* _POSIX_CHOWN_RESTRICTED: (libc)Options for Files.
11900 -* _POSIX_JOB_CONTROL: (libc)System Options.
11901 -* _POSIX_NO_TRUNC: (libc)Options for Files.
11902 -* _POSIX_SAVED_IDS: (libc)System Options.
11903 -* _POSIX_VDISABLE: (libc)Options for Files.
11904 -* _POSIX_VERSION: (libc)Version Supported.
11905 -* __fbufsize: (libc)Controlling Buffering.
11906 -* __flbf: (libc)Controlling Buffering.
11907 -* __fpending: (libc)Controlling Buffering.
11908 -* __fpurge: (libc)Flushing Buffers.
11909 -* __freadable: (libc)Opening Streams.
11910 -* __freading: (libc)Opening Streams.
11911 -* __fsetlocking: (libc)Streams and Threads.
11912 -* __fwritable: (libc)Opening Streams.
11913 -* __fwriting: (libc)Opening Streams.
11914 -* __va_copy: (libc)Argument Macros.
11915 -* _exit: (libc)Termination Internals.
11916 -* _flushlbf: (libc)Flushing Buffers.
11917 -* _tolower: (libc)Case Conversion.
11918 -* _toupper: (libc)Case Conversion.
11919 -* a64l: (libc)Encode Binary Data.
11920 -* abort: (libc)Aborting a Program.
11921 -* abs: (libc)Absolute Value.
11922 -* accept: (libc)Accepting Connections.
11923 -* access: (libc)Testing File Access.
11924 -* acos: (libc)Inverse Trig Functions.
11925 -* acosf: (libc)Inverse Trig Functions.
11926 -* acosh: (libc)Hyperbolic Functions.
11927 -* acoshf: (libc)Hyperbolic Functions.
11928 -* acoshl: (libc)Hyperbolic Functions.
11929 -* acosl: (libc)Inverse Trig Functions.
11930 -* addmntent: (libc)mtab.
11931 -* addseverity: (libc)Adding Severity Classes.
11932 -* adjtime: (libc)High-Resolution Calendar.
11933 -* adjtimex: (libc)High-Resolution Calendar.
11934 -* aio_cancel64: (libc)Cancel AIO Operations.
11935 -* aio_cancel: (libc)Cancel AIO Operations.
11936 -* aio_error64: (libc)Status of AIO Operations.
11937 -* aio_error: (libc)Status of AIO Operations.
11938 -* aio_fsync64: (libc)Synchronizing AIO Operations.
11939 -* aio_fsync: (libc)Synchronizing AIO Operations.
11940 -* aio_init: (libc)Configuration of AIO.
11941 -* aio_read64: (libc)Asynchronous Reads/Writes.
11942 -* aio_read: (libc)Asynchronous Reads/Writes.
11943 -* aio_return64: (libc)Status of AIO Operations.
11944 -* aio_return: (libc)Status of AIO Operations.
11945 -* aio_suspend64: (libc)Synchronizing AIO Operations.
11946 -* aio_suspend: (libc)Synchronizing AIO Operations.
11947 -* aio_write64: (libc)Asynchronous Reads/Writes.
11948 -* aio_write: (libc)Asynchronous Reads/Writes.
11949 -* alarm: (libc)Setting an Alarm.
11950 -* alloca: (libc)Variable Size Automatic.
11951 -* alphasort64: (libc)Scanning Directory Content.
11952 -* alphasort: (libc)Scanning Directory Content.
11953 -* argp_error: (libc)Argp Helper Functions.
11954 -* argp_failure: (libc)Argp Helper Functions.
11955 -* argp_help: (libc)Argp Help.
11956 -* argp_parse: (libc)Argp.
11957 -* argp_state_help: (libc)Argp Helper Functions.
11958 -* argp_usage: (libc)Argp Helper Functions.
11959 -* argz_add: (libc)Argz Functions.
11960 -* argz_add_sep: (libc)Argz Functions.
11961 -* argz_append: (libc)Argz Functions.
11962 -* argz_count: (libc)Argz Functions.
11963 -* argz_create: (libc)Argz Functions.
11964 -* argz_create_sep: (libc)Argz Functions.
11965 -* argz_delete: (libc)Argz Functions.
11966 -* argz_extract: (libc)Argz Functions.
11967 -* argz_insert: (libc)Argz Functions.
11968 -* argz_next: (libc)Argz Functions.
11969 -* argz_replace: (libc)Argz Functions.
11970 -* argz_stringify: (libc)Argz Functions.
11971 -* asctime: (libc)Formatting Calendar Time.
11972 -* asctime_r: (libc)Formatting Calendar Time.
11973 -* asin: (libc)Inverse Trig Functions.
11974 -* asinf: (libc)Inverse Trig Functions.
11975 -* asinh: (libc)Hyperbolic Functions.
11976 -* asinhf: (libc)Hyperbolic Functions.
11977 -* asinhl: (libc)Hyperbolic Functions.
11978 -* asinl: (libc)Inverse Trig Functions.
11979 -* asprintf: (libc)Dynamic Output.
11980 -* assert: (libc)Consistency Checking.
11981 -* assert_perror: (libc)Consistency Checking.
11982 -* atan2: (libc)Inverse Trig Functions.
11983 -* atan2f: (libc)Inverse Trig Functions.
11984 -* atan2l: (libc)Inverse Trig Functions.
11985 -* atan: (libc)Inverse Trig Functions.
11986 -* atanf: (libc)Inverse Trig Functions.
11987 -* atanh: (libc)Hyperbolic Functions.
11988 -* atanhf: (libc)Hyperbolic Functions.
11989 -* atanhl: (libc)Hyperbolic Functions.
11990 -* atanl: (libc)Inverse Trig Functions.
11991 -* atexit: (libc)Cleanups on Exit.
11992 -* atof: (libc)Parsing of Floats.
11993 -* atoi: (libc)Parsing of Integers.
11994 -* atol: (libc)Parsing of Integers.
11995 -* atoll: (libc)Parsing of Integers.
11996 -* backtrace: (libc)Backtraces.
11997 -* backtrace_symbols: (libc)Backtraces.
11998 -* backtrace_symbols_fd: (libc)Backtraces.
11999 -* basename: (libc)Finding Tokens in a String.
12000 -* basename: (libc)Finding Tokens in a String.
12001 -* bcmp: (libc)String/Array Comparison.
12002 -* bcopy: (libc)Copying and Concatenation.
12003 -* bind: (libc)Setting Address.
12004 -* bind_textdomain_codeset: (libc)Charset conversion in gettext.
12005 -* bindtextdomain: (libc)Locating gettext catalog.
12006 -* brk: (libc)Resizing the Data Segment.
12007 -* bsearch: (libc)Array Search Function.
12008 -* btowc: (libc)Converting a Character.
12009 -* bzero: (libc)Copying and Concatenation.
12010 -* cabs: (libc)Absolute Value.
12011 -* cabsf: (libc)Absolute Value.
12012 -* cabsl: (libc)Absolute Value.
12013 -* cacos: (libc)Inverse Trig Functions.
12014 -* cacosf: (libc)Inverse Trig Functions.
12015 -* cacosh: (libc)Hyperbolic Functions.
12016 -* cacoshf: (libc)Hyperbolic Functions.
12017 -* cacoshl: (libc)Hyperbolic Functions.
12018 -* cacosl: (libc)Inverse Trig Functions.
12019 -* calloc: (libc)Allocating Cleared Space.
12020 -* canonicalize_file_name: (libc)Symbolic Links.
12021 -* carg: (libc)Operations on Complex.
12022 -* cargf: (libc)Operations on Complex.
12023 -* cargl: (libc)Operations on Complex.
12024 -* casin: (libc)Inverse Trig Functions.
12025 -* casinf: (libc)Inverse Trig Functions.
12026 -* casinh: (libc)Hyperbolic Functions.
12027 -* casinhf: (libc)Hyperbolic Functions.
12028 -* casinhl: (libc)Hyperbolic Functions.
12029 -* casinl: (libc)Inverse Trig Functions.
12030 -* catan: (libc)Inverse Trig Functions.
12031 -* catanf: (libc)Inverse Trig Functions.
12032 -* catanh: (libc)Hyperbolic Functions.
12033 -* catanhf: (libc)Hyperbolic Functions.
12034 -* catanhl: (libc)Hyperbolic Functions.
12035 -* catanl: (libc)Inverse Trig Functions.
12036 -* catclose: (libc)The catgets Functions.
12037 -* catgets: (libc)The catgets Functions.
12038 -* catopen: (libc)The catgets Functions.
12039 -* cbc_crypt: (libc)DES Encryption.
12040 -* cbrt: (libc)Exponents and Logarithms.
12041 -* cbrtf: (libc)Exponents and Logarithms.
12042 -* cbrtl: (libc)Exponents and Logarithms.
12043 -* ccos: (libc)Trig Functions.
12044 -* ccosf: (libc)Trig Functions.
12045 -* ccosh: (libc)Hyperbolic Functions.
12046 -* ccoshf: (libc)Hyperbolic Functions.
12047 -* ccoshl: (libc)Hyperbolic Functions.
12048 -* ccosl: (libc)Trig Functions.
12049 -* ceil: (libc)Rounding Functions.
12050 -* ceilf: (libc)Rounding Functions.
12051 -* ceill: (libc)Rounding Functions.
12052 -* cexp: (libc)Exponents and Logarithms.
12053 -* cexpf: (libc)Exponents and Logarithms.
12054 -* cexpl: (libc)Exponents and Logarithms.
12055 -* cfgetispeed: (libc)Line Speed.
12056 -* cfgetospeed: (libc)Line Speed.
12057 -* cfmakeraw: (libc)Noncanonical Input.
12058 -* cfree: (libc)Freeing after Malloc.
12059 -* cfsetispeed: (libc)Line Speed.
12060 -* cfsetospeed: (libc)Line Speed.
12061 -* cfsetspeed: (libc)Line Speed.
12062 -* chdir: (libc)Working Directory.
12063 -* chmod: (libc)Setting Permissions.
12064 -* chown: (libc)File Owner.
12065 -* cimag: (libc)Operations on Complex.
12066 -* cimagf: (libc)Operations on Complex.
12067 -* cimagl: (libc)Operations on Complex.
12068 -* clearenv: (libc)Environment Access.
12069 -* clearerr: (libc)Error Recovery.
12070 -* clearerr_unlocked: (libc)Error Recovery.
12071 -* clock: (libc)CPU Time.
12072 -* clog10: (libc)Exponents and Logarithms.
12073 -* clog10f: (libc)Exponents and Logarithms.
12074 -* clog10l: (libc)Exponents and Logarithms.
12075 -* clog: (libc)Exponents and Logarithms.
12076 -* clogf: (libc)Exponents and Logarithms.
12077 -* clogl: (libc)Exponents and Logarithms.
12078 -* close: (libc)Opening and Closing Files.
12079 -* closedir: (libc)Reading/Closing Directory.
12080 -* closelog: (libc)closelog.
12081 -* confstr: (libc)String Parameters.
12082 -* conj: (libc)Operations on Complex.
12083 -* conjf: (libc)Operations on Complex.
12084 -* conjl: (libc)Operations on Complex.
12085 -* connect: (libc)Connecting.
12086 -* copysign: (libc)FP Bit Twiddling.
12087 -* copysignf: (libc)FP Bit Twiddling.
12088 -* copysignl: (libc)FP Bit Twiddling.
12089 -* cos: (libc)Trig Functions.
12090 -* cosf: (libc)Trig Functions.
12091 -* cosh: (libc)Hyperbolic Functions.
12092 -* coshf: (libc)Hyperbolic Functions.
12093 -* coshl: (libc)Hyperbolic Functions.
12094 -* cosl: (libc)Trig Functions.
12095 -* cpow: (libc)Exponents and Logarithms.
12096 -* cpowf: (libc)Exponents and Logarithms.
12097 -* cpowl: (libc)Exponents and Logarithms.
12098 -* cproj: (libc)Operations on Complex.
12099 -* cprojf: (libc)Operations on Complex.
12100 -* cprojl: (libc)Operations on Complex.
12101 -* creal: (libc)Operations on Complex.
12102 -* crealf: (libc)Operations on Complex.
12103 -* creall: (libc)Operations on Complex.
12104 -* creat64: (libc)Opening and Closing Files.
12105 -* creat: (libc)Opening and Closing Files.
12106 -* crypt: (libc)crypt.
12107 -* crypt_r: (libc)crypt.
12108 -* csin: (libc)Trig Functions.
12109 -* csinf: (libc)Trig Functions.
12110 -* csinh: (libc)Hyperbolic Functions.
12111 -* csinhf: (libc)Hyperbolic Functions.
12112 -* csinhl: (libc)Hyperbolic Functions.
12113 -* csinl: (libc)Trig Functions.
12114 -* csqrt: (libc)Exponents and Logarithms.
12115 -* csqrtf: (libc)Exponents and Logarithms.
12116 -* csqrtl: (libc)Exponents and Logarithms.
12117 -* ctan: (libc)Trig Functions.
12118 -* ctanf: (libc)Trig Functions.
12119 -* ctanh: (libc)Hyperbolic Functions.
12120 -* ctanhf: (libc)Hyperbolic Functions.
12121 -* ctanhl: (libc)Hyperbolic Functions.
12122 -* ctanl: (libc)Trig Functions.
12123 -* ctermid: (libc)Identifying the Terminal.
12124 -* ctime: (libc)Formatting Calendar Time.
12125 -* ctime_r: (libc)Formatting Calendar Time.
12126 -* cuserid: (libc)Who Logged In.
12127 -* dcgettext: (libc)Translation with gettext.
12128 -* dcngettext: (libc)Advanced gettext functions.
12129 -* des_setparity: (libc)DES Encryption.
12130 -* dgettext: (libc)Translation with gettext.
12131 -* difftime: (libc)Elapsed Time.
12132 -* dirfd: (libc)Opening a Directory.
12133 -* dirname: (libc)Finding Tokens in a String.
12134 -* div: (libc)Integer Division.
12135 -* dngettext: (libc)Advanced gettext functions.
12136 -* drand48: (libc)SVID Random.
12137 -* drand48_r: (libc)SVID Random.
12138 -* drem: (libc)Remainder Functions.
12139 -* dremf: (libc)Remainder Functions.
12140 -* dreml: (libc)Remainder Functions.
12141 -* dup2: (libc)Duplicating Descriptors.
12142 -* dup: (libc)Duplicating Descriptors.
12143 -* ecb_crypt: (libc)DES Encryption.
12144 -* ecvt: (libc)System V Number Conversion.
12145 -* ecvt_r: (libc)System V Number Conversion.
12146 -* encrypt: (libc)DES Encryption.
12147 -* encrypt_r: (libc)DES Encryption.
12148 -* endfsent: (libc)fstab.
12149 -* endgrent: (libc)Scanning All Groups.
12150 -* endhostent: (libc)Host Names.
12151 -* endmntent: (libc)mtab.
12152 -* endnetent: (libc)Networks Database.
12153 -* endnetgrent: (libc)Lookup Netgroup.
12154 -* endprotoent: (libc)Protocols Database.
12155 -* endpwent: (libc)Scanning All Users.
12156 -* endservent: (libc)Services Database.
12157 -* endutent: (libc)Manipulating the Database.
12158 -* endutxent: (libc)XPG Functions.
12159 -* envz_add: (libc)Envz Functions.
12160 -* envz_entry: (libc)Envz Functions.
12161 -* envz_get: (libc)Envz Functions.
12162 -* envz_merge: (libc)Envz Functions.
12163 -* envz_strip: (libc)Envz Functions.
12164 -* erand48: (libc)SVID Random.
12165 -* erand48_r: (libc)SVID Random.
12166 -* erf: (libc)Special Functions.
12167 -* erfc: (libc)Special Functions.
12168 -* erfcf: (libc)Special Functions.
12169 -* erfcl: (libc)Special Functions.
12170 -* erff: (libc)Special Functions.
12171 -* erfl: (libc)Special Functions.
12172 -* err: (libc)Error Messages.
12173 -* errno: (libc)Checking for Errors.
12174 -* error: (libc)Error Messages.
12175 -* error_at_line: (libc)Error Messages.
12176 -* errx: (libc)Error Messages.
12177 -* execl: (libc)Executing a File.
12178 -* execle: (libc)Executing a File.
12179 -* execlp: (libc)Executing a File.
12180 -* execv: (libc)Executing a File.
12181 -* execve: (libc)Executing a File.
12182 -* execvp: (libc)Executing a File.
12183 -* exit: (libc)Normal Termination.
12184 -* exp10: (libc)Exponents and Logarithms.
12185 -* exp10f: (libc)Exponents and Logarithms.
12186 -* exp10l: (libc)Exponents and Logarithms.
12187 -* exp2: (libc)Exponents and Logarithms.
12188 -* exp2f: (libc)Exponents and Logarithms.
12189 -* exp2l: (libc)Exponents and Logarithms.
12190 -* exp: (libc)Exponents and Logarithms.
12191 -* expf: (libc)Exponents and Logarithms.
12192 -* expl: (libc)Exponents and Logarithms.
12193 -* expm1: (libc)Exponents and Logarithms.
12194 -* expm1f: (libc)Exponents and Logarithms.
12195 -* expm1l: (libc)Exponents and Logarithms.
12196 -* fabs: (libc)Absolute Value.
12197 -* fabsf: (libc)Absolute Value.
12198 -* fabsl: (libc)Absolute Value.
12199 -* fchdir: (libc)Working Directory.
12200 -* fchmod: (libc)Setting Permissions.
12201 -* fchown: (libc)File Owner.
12202 -* fclean: (libc)Cleaning Streams.
12203 -* fclose: (libc)Closing Streams.
12204 -* fcloseall: (libc)Closing Streams.
12205 -* fcntl: (libc)Control Operations.
12206 -* fcvt: (libc)System V Number Conversion.
12207 -* fcvt_r: (libc)System V Number Conversion.
12208 -* fdatasync: (libc)Synchronizing I/O.
12209 -* fdim: (libc)Misc FP Arithmetic.
12210 -* fdimf: (libc)Misc FP Arithmetic.
12211 -* fdiml: (libc)Misc FP Arithmetic.
12212 -* fdopen: (libc)Descriptors and Streams.
12213 -* feclearexcept: (libc)Status bit operations.
12214 -* fedisableexcept: (libc)Control Functions.
12215 -* feenableexcept: (libc)Control Functions.
12216 -* fegetenv: (libc)Control Functions.
12217 -* fegetexcept: (libc)Control Functions.
12218 -* fegetexceptflag: (libc)Status bit operations.
12219 -* fegetround: (libc)Rounding.
12220 -* feholdexcept: (libc)Control Functions.
12221 -* feof: (libc)EOF and Errors.
12222 -* feof_unlocked: (libc)EOF and Errors.
12223 -* feraiseexcept: (libc)Status bit operations.
12224 -* ferror: (libc)EOF and Errors.
12225 -* ferror_unlocked: (libc)EOF and Errors.
12226 -* fesetenv: (libc)Control Functions.
12227 -* fesetexceptflag: (libc)Status bit operations.
12228 -* fesetround: (libc)Rounding.
12229 -* fetestexcept: (libc)Status bit operations.
12230 -* feupdateenv: (libc)Control Functions.
12231 -* fflush: (libc)Flushing Buffers.
12232 -* fflush_unlocked: (libc)Flushing Buffers.
12233 -* fgetc: (libc)Character Input.
12234 -* fgetc_unlocked: (libc)Character Input.
12235 -* fgetgrent: (libc)Scanning All Groups.
12236 -* fgetgrent_r: (libc)Scanning All Groups.
12237 -* fgetpos64: (libc)Portable Positioning.
12238 -* fgetpos: (libc)Portable Positioning.
12239 -* fgetpwent: (libc)Scanning All Users.
12240 -* fgetpwent_r: (libc)Scanning All Users.
12241 -* fgets: (libc)Line Input.
12242 -* fgets_unlocked: (libc)Line Input.
12243 -* fgetwc: (libc)Character Input.
12244 -* fgetwc_unlocked: (libc)Character Input.
12245 -* fgetws: (libc)Line Input.
12246 -* fgetws_unlocked: (libc)Line Input.
12247 -* fileno: (libc)Descriptors and Streams.
12248 -* fileno_unlocked: (libc)Descriptors and Streams.
12249 -* finite: (libc)Floating Point Classes.
12250 -* finitef: (libc)Floating Point Classes.
12251 -* finitel: (libc)Floating Point Classes.
12252 -* flockfile: (libc)Streams and Threads.
12253 -* floor: (libc)Rounding Functions.
12254 -* floorf: (libc)Rounding Functions.
12255 -* floorl: (libc)Rounding Functions.
12256 -* fma: (libc)Misc FP Arithmetic.
12257 -* fmaf: (libc)Misc FP Arithmetic.
12258 -* fmal: (libc)Misc FP Arithmetic.
12259 -* fmax: (libc)Misc FP Arithmetic.
12260 -* fmaxf: (libc)Misc FP Arithmetic.
12261 -* fmaxl: (libc)Misc FP Arithmetic.
12262 -* fmemopen: (libc)String Streams.
12263 -* fmin: (libc)Misc FP Arithmetic.
12264 -* fminf: (libc)Misc FP Arithmetic.
12265 -* fminl: (libc)Misc FP Arithmetic.
12266 -* fmod: (libc)Remainder Functions.
12267 -* fmodf: (libc)Remainder Functions.
12268 -* fmodl: (libc)Remainder Functions.
12269 -* fmtmsg: (libc)Printing Formatted Messages.
12270 -* fnmatch: (libc)Wildcard Matching.
12271 -* fopen64: (libc)Opening Streams.
12272 -* fopen: (libc)Opening Streams.
12273 -* fopencookie: (libc)Streams and Cookies.
12274 -* fork: (libc)Creating a Process.
12275 -* forkpty: (libc)Pseudo-Terminal Pairs.
12276 -* fpathconf: (libc)Pathconf.
12277 -* fpclassify: (libc)Floating Point Classes.
12278 -* fprintf: (libc)Formatted Output Functions.
12279 -* fputc: (libc)Simple Output.
12280 -* fputc_unlocked: (libc)Simple Output.
12281 -* fputs: (libc)Simple Output.
12282 -* fputs_unlocked: (libc)Simple Output.
12283 -* fputwc: (libc)Simple Output.
12284 -* fputwc_unlocked: (libc)Simple Output.
12285 -* fputws: (libc)Simple Output.
12286 -* fputws_unlocked: (libc)Simple Output.
12287 -* fread: (libc)Block Input/Output.
12288 -* fread_unlocked: (libc)Block Input/Output.
12289 -* free: (libc)Freeing after Malloc.
12290 -* freopen64: (libc)Opening Streams.
12291 -* freopen: (libc)Opening Streams.
12292 -* frexp: (libc)Normalization Functions.
12293 -* frexpf: (libc)Normalization Functions.
12294 -* frexpl: (libc)Normalization Functions.
12295 -* fscanf: (libc)Formatted Input Functions.
12296 -* fseek: (libc)File Positioning.
12297 -* fseeko64: (libc)File Positioning.
12298 -* fseeko: (libc)File Positioning.
12299 -* fsetpos64: (libc)Portable Positioning.
12300 -* fsetpos: (libc)Portable Positioning.
12301 -* fstat64: (libc)Reading Attributes.
12302 -* fstat: (libc)Reading Attributes.
12303 -* fsync: (libc)Synchronizing I/O.
12304 -* ftell: (libc)File Positioning.
12305 -* ftello64: (libc)File Positioning.
12306 -* ftello: (libc)File Positioning.
12307 -* ftruncate64: (libc)File Size.
12308 -* ftruncate: (libc)File Size.
12309 -* ftrylockfile: (libc)Streams and Threads.
12310 -* ftw64: (libc)Working with Directory Trees.
12311 -* ftw: (libc)Working with Directory Trees.
12312 -* funlockfile: (libc)Streams and Threads.
12313 -* futimes: (libc)File Times.
12314 -* fwide: (libc)Streams and I18N.
12315 -* fwprintf: (libc)Formatted Output Functions.
12316 -* fwrite: (libc)Block Input/Output.
12317 -* fwrite_unlocked: (libc)Block Input/Output.
12318 -* fwscanf: (libc)Formatted Input Functions.
12319 -* gamma: (libc)Special Functions.
12320 -* gammaf: (libc)Special Functions.
12321 -* gammal: (libc)Special Functions.
12322 -* gcvt: (libc)System V Number Conversion.
12323 -* get_avphys_pages: (libc)Query Memory Parameters.
12324 -* get_current_dir_name: (libc)Working Directory.
12325 -* get_nprocs: (libc)Processor Resources.
12326 -* get_nprocs_conf: (libc)Processor Resources.
12327 -* get_phys_pages: (libc)Query Memory Parameters.
12328 -* getc: (libc)Character Input.
12329 -* getc_unlocked: (libc)Character Input.
12330 -* getchar: (libc)Character Input.
12331 -* getchar_unlocked: (libc)Character Input.
12332 -* getcontext: (libc)System V contexts.
12333 -* getcwd: (libc)Working Directory.
12334 -* getdate: (libc)General Time String Parsing.
12335 -* getdate_r: (libc)General Time String Parsing.
12336 -* getdelim: (libc)Line Input.
12337 -* getdomainnname: (libc)Host Identification.
12338 -* getegid: (libc)Reading Persona.
12339 -* getenv: (libc)Environment Access.
12340 -* geteuid: (libc)Reading Persona.
12341 -* getfsent: (libc)fstab.
12342 -* getfsfile: (libc)fstab.
12343 -* getfsspec: (libc)fstab.
12344 -* getgid: (libc)Reading Persona.
12345 -* getgrent: (libc)Scanning All Groups.
12346 -* getgrent_r: (libc)Scanning All Groups.
12347 -* getgrgid: (libc)Lookup Group.
12348 -* getgrgid_r: (libc)Lookup Group.
12349 -* getgrnam: (libc)Lookup Group.
12350 -* getgrnam_r: (libc)Lookup Group.
12351 -* getgrouplist: (libc)Setting Groups.
12352 -* getgroups: (libc)Reading Persona.
12353 -* gethostbyaddr: (libc)Host Names.
12354 -* gethostbyaddr_r: (libc)Host Names.
12355 -* gethostbyname2: (libc)Host Names.
12356 -* gethostbyname2_r: (libc)Host Names.
12357 -* gethostbyname: (libc)Host Names.
12358 -* gethostbyname_r: (libc)Host Names.
12359 -* gethostent: (libc)Host Names.
12360 -* gethostid: (libc)Host Identification.
12361 -* gethostname: (libc)Host Identification.
12362 -* getitimer: (libc)Setting an Alarm.
12363 -* getline: (libc)Line Input.
12364 -* getloadavg: (libc)Processor Resources.
12365 -* getlogin: (libc)Who Logged In.
12366 -* getmntent: (libc)mtab.
12367 -* getmntent_r: (libc)mtab.
12368 -* getnetbyaddr: (libc)Networks Database.
12369 -* getnetbyname: (libc)Networks Database.
12370 -* getnetent: (libc)Networks Database.
12371 -* getnetgrent: (libc)Lookup Netgroup.
12372 -* getnetgrent_r: (libc)Lookup Netgroup.
12373 -* getopt: (libc)Using Getopt.
12374 -* getopt_long: (libc)Getopt Long Options.
12375 -* getopt_long_only: (libc)Getopt Long Options.
12376 -* getpagesize: (libc)Query Memory Parameters.
12377 -* getpass: (libc)getpass.
12378 -* getpeername: (libc)Who is Connected.
12379 -* getpgid: (libc)Process Group Functions.
12380 -* getpgrp: (libc)Process Group Functions.
12381 -* getpgrp: (libc)Process Group Functions.
12382 -* getpid: (libc)Process Identification.
12383 -* getppid: (libc)Process Identification.
12384 -* getpriority: (libc)Traditional Scheduling Functions.
12385 -* getprotobyname: (libc)Protocols Database.
12386 -* getprotobynumber: (libc)Protocols Database.
12387 -* getprotoent: (libc)Protocols Database.
12388 -* getpt: (libc)Allocation.
12389 -* getpwent: (libc)Scanning All Users.
12390 -* getpwent_r: (libc)Scanning All Users.
12391 -* getpwnam: (libc)Lookup User.
12392 -* getpwnam_r: (libc)Lookup User.
12393 -* getpwuid: (libc)Lookup User.
12394 -* getpwuid_r: (libc)Lookup User.
12395 -* getrlimit64: (libc)Limits on Resources.
12396 -* getrlimit: (libc)Limits on Resources.
12397 -* getrusage: (libc)Resource Usage.
12398 -* gets: (libc)Line Input.
12399 -* getservbyname: (libc)Services Database.
12400 -* getservbyport: (libc)Services Database.
12401 -* getservent: (libc)Services Database.
12402 -* getsid: (libc)Process Group Functions.
12403 -* getsockname: (libc)Reading Address.
12404 -* getsockopt: (libc)Socket Option Functions.
12405 -* getsubopt: (libc)Suboptions.
12406 -* gettext: (libc)Translation with gettext.
12407 -* gettimeofday: (libc)High-Resolution Calendar.
12408 -* getuid: (libc)Reading Persona.
12409 -* getumask: (libc)Setting Permissions.
12410 -* getutent: (libc)Manipulating the Database.
12411 -* getutent_r: (libc)Manipulating the Database.
12412 -* getutid: (libc)Manipulating the Database.
12413 -* getutid_r: (libc)Manipulating the Database.
12414 -* getutline: (libc)Manipulating the Database.
12415 -* getutline_r: (libc)Manipulating the Database.
12416 -* getutmp: (libc)XPG Functions.
12417 -* getutmpx: (libc)XPG Functions.
12418 -* getutxent: (libc)XPG Functions.
12419 -* getutxid: (libc)XPG Functions.
12420 -* getutxline: (libc)XPG Functions.
12421 -* getw: (libc)Character Input.
12422 -* getwc: (libc)Character Input.
12423 -* getwc_unlocked: (libc)Character Input.
12424 -* getwchar: (libc)Character Input.
12425 -* getwchar_unlocked: (libc)Character Input.
12426 -* getwd: (libc)Working Directory.
12427 -* glob64: (libc)Calling Glob.
12428 -* glob: (libc)Calling Glob.
12429 -* globfree64: (libc)More Flags for Globbing.
12430 -* globfree: (libc)More Flags for Globbing.
12431 -* gmtime: (libc)Broken-down Time.
12432 -* gmtime_r: (libc)Broken-down Time.
12433 -* grantpt: (libc)Allocation.
12434 -* gsignal: (libc)Signaling Yourself.
12435 -* gtty: (libc)BSD Terminal Modes.
12436 -* hasmntopt: (libc)mtab.
12437 -* hcreate: (libc)Hash Search Function.
12438 -* hcreate_r: (libc)Hash Search Function.
12439 -* hdestroy: (libc)Hash Search Function.
12440 -* hdestroy_r: (libc)Hash Search Function.
12441 -* hsearch: (libc)Hash Search Function.
12442 -* hsearch_r: (libc)Hash Search Function.
12443 -* htonl: (libc)Byte Order.
12444 -* htons: (libc)Byte Order.
12445 -* hypot: (libc)Exponents and Logarithms.
12446 -* hypotf: (libc)Exponents and Logarithms.
12447 -* hypotl: (libc)Exponents and Logarithms.
12448 -* iconv: (libc)Generic Conversion Interface.
12449 -* iconv_close: (libc)Generic Conversion Interface.
12450 -* iconv_open: (libc)Generic Conversion Interface.
12451 -* if_freenameindex: (libc)Interface Naming.
12452 -* if_indextoname: (libc)Interface Naming.
12453 -* if_nameindex: (libc)Interface Naming.
12454 -* if_nametoindex: (libc)Interface Naming.
12455 -* ilogb: (libc)Exponents and Logarithms.
12456 -* ilogbf: (libc)Exponents and Logarithms.
12457 -* ilogbl: (libc)Exponents and Logarithms.
12458 -* imaxabs: (libc)Absolute Value.
12459 -* imaxdiv: (libc)Integer Division.
12460 -* in6addr_any: (libc)Host Address Data Type.
12461 -* in6addr_loopback: (libc)Host Address Data Type.
12462 -* index: (libc)Search Functions.
12463 -* inet_addr: (libc)Host Address Functions.
12464 -* inet_aton: (libc)Host Address Functions.
12465 -* inet_lnaof: (libc)Host Address Functions.
12466 -* inet_makeaddr: (libc)Host Address Functions.
12467 -* inet_netof: (libc)Host Address Functions.
12468 -* inet_network: (libc)Host Address Functions.
12469 -* inet_ntoa: (libc)Host Address Functions.
12470 -* inet_ntop: (libc)Host Address Functions.
12471 -* inet_pton: (libc)Host Address Functions.
12472 -* initgroups: (libc)Setting Groups.
12473 -* initstate: (libc)BSD Random.
12474 -* initstate_r: (libc)BSD Random.
12475 -* innetgr: (libc)Netgroup Membership.
12476 -* ioctl: (libc)IOCTLs.
12477 -* isalnum: (libc)Classification of Characters.
12478 -* isalpha: (libc)Classification of Characters.
12479 -* isascii: (libc)Classification of Characters.
12480 -* isatty: (libc)Is It a Terminal.
12481 -* isblank: (libc)Classification of Characters.
12482 -* iscntrl: (libc)Classification of Characters.
12483 -* isdigit: (libc)Classification of Characters.
12484 -* isfinite: (libc)Floating Point Classes.
12485 -* isgraph: (libc)Classification of Characters.
12486 -* isgreater: (libc)FP Comparison Functions.
12487 -* isgreaterequal: (libc)FP Comparison Functions.
12488 -* isinf: (libc)Floating Point Classes.
12489 -* isinff: (libc)Floating Point Classes.
12490 -* isinfl: (libc)Floating Point Classes.
12491 -* isless: (libc)FP Comparison Functions.
12492 -* islessequal: (libc)FP Comparison Functions.
12493 -* islessgreater: (libc)FP Comparison Functions.
12494 -* islower: (libc)Classification of Characters.
12495 -* isnan: (libc)Floating Point Classes.
12496 -* isnan: (libc)Floating Point Classes.
12497 -* isnanf: (libc)Floating Point Classes.
12498 -* isnanl: (libc)Floating Point Classes.
12499 -* isnormal: (libc)Floating Point Classes.
12500 -* isprint: (libc)Classification of Characters.
12501 -* ispunct: (libc)Classification of Characters.
12502 -* isspace: (libc)Classification of Characters.
12503 -* isunordered: (libc)FP Comparison Functions.
12504 -* isupper: (libc)Classification of Characters.
12505 -* iswalnum: (libc)Classification of Wide Characters.
12506 -* iswalpha: (libc)Classification of Wide Characters.
12507 -* iswblank: (libc)Classification of Wide Characters.
12508 -* iswcntrl: (libc)Classification of Wide Characters.
12509 -* iswctype: (libc)Classification of Wide Characters.
12510 -* iswdigit: (libc)Classification of Wide Characters.
12511 -* iswgraph: (libc)Classification of Wide Characters.
12512 -* iswlower: (libc)Classification of Wide Characters.
12513 -* iswprint: (libc)Classification of Wide Characters.
12514 -* iswpunct: (libc)Classification of Wide Characters.
12515 -* iswspace: (libc)Classification of Wide Characters.
12516 -* iswupper: (libc)Classification of Wide Characters.
12517 -* iswxdigit: (libc)Classification of Wide Characters.
12518 -* isxdigit: (libc)Classification of Characters.
12519 -* j0: (libc)Special Functions.
12520 -* j0f: (libc)Special Functions.
12521 -* j0l: (libc)Special Functions.
12522 -* j1: (libc)Special Functions.
12523 -* j1f: (libc)Special Functions.
12524 -* j1l: (libc)Special Functions.
12525 -* jn: (libc)Special Functions.
12526 -* jnf: (libc)Special Functions.
12527 -* jnl: (libc)Special Functions.
12528 -* jrand48: (libc)SVID Random.
12529 -* jrand48_r: (libc)SVID Random.
12530 -* kill: (libc)Signaling Another Process.
12531 -* killpg: (libc)Signaling Another Process.
12532 -* l64a: (libc)Encode Binary Data.
12533 -* labs: (libc)Absolute Value.
12534 -* lcong48: (libc)SVID Random.
12535 -* lcong48_r: (libc)SVID Random.
12536 -* ldexp: (libc)Normalization Functions.
12537 -* ldexpf: (libc)Normalization Functions.
12538 -* ldexpl: (libc)Normalization Functions.
12539 -* ldiv: (libc)Integer Division.
12540 -* lfind: (libc)Array Search Function.
12541 -* lgamma: (libc)Special Functions.
12542 -* lgamma_r: (libc)Special Functions.
12543 -* lgammaf: (libc)Special Functions.
12544 -* lgammaf_r: (libc)Special Functions.
12545 -* lgammal: (libc)Special Functions.
12546 -* lgammal_r: (libc)Special Functions.
12547 -* link: (libc)Hard Links.
12548 -* lio_listio64: (libc)Asynchronous Reads/Writes.
12549 -* lio_listio: (libc)Asynchronous Reads/Writes.
12550 -* listen: (libc)Listening.
12551 -* llabs: (libc)Absolute Value.
12552 -* lldiv: (libc)Integer Division.
12553 -* llrint: (libc)Rounding Functions.
12554 -* llrintf: (libc)Rounding Functions.
12555 -* llrintl: (libc)Rounding Functions.
12556 -* llround: (libc)Rounding Functions.
12557 -* llroundf: (libc)Rounding Functions.
12558 -* llroundl: (libc)Rounding Functions.
12559 -* localeconv: (libc)The Lame Way to Locale Data.
12560 -* localtime: (libc)Broken-down Time.
12561 -* localtime_r: (libc)Broken-down Time.
12562 -* log10: (libc)Exponents and Logarithms.
12563 -* log10f: (libc)Exponents and Logarithms.
12564 -* log10l: (libc)Exponents and Logarithms.
12565 -* log1p: (libc)Exponents and Logarithms.
12566 -* log1pf: (libc)Exponents and Logarithms.
12567 -* log1pl: (libc)Exponents and Logarithms.
12568 -* log2: (libc)Exponents and Logarithms.
12569 -* log2f: (libc)Exponents and Logarithms.
12570 -* log2l: (libc)Exponents and Logarithms.
12571 -* log: (libc)Exponents and Logarithms.
12572 -* logb: (libc)Exponents and Logarithms.
12573 -* logbf: (libc)Exponents and Logarithms.
12574 -* logbl: (libc)Exponents and Logarithms.
12575 -* logf: (libc)Exponents and Logarithms.
12576 -* login: (libc)Logging In and Out.
12577 -* login_tty: (libc)Logging In and Out.
12578 -* logl: (libc)Exponents and Logarithms.
12579 -* logout: (libc)Logging In and Out.
12580 -* logwtmp: (libc)Logging In and Out.
12581 -* longjmp: (libc)Non-Local Details.
12582 -* lrand48: (libc)SVID Random.
12583 -* lrand48_r: (libc)SVID Random.
12584 -* lrint: (libc)Rounding Functions.
12585 -* lrintf: (libc)Rounding Functions.
12586 -* lrintl: (libc)Rounding Functions.
12587 -* lround: (libc)Rounding Functions.
12588 -* lroundf: (libc)Rounding Functions.
12589 -* lroundl: (libc)Rounding Functions.
12590 -* lsearch: (libc)Array Search Function.
12591 -* lseek64: (libc)File Position Primitive.
12592 -* lseek: (libc)File Position Primitive.
12593 -* lstat64: (libc)Reading Attributes.
12594 -* lstat: (libc)Reading Attributes.
12595 -* lutimes: (libc)File Times.
12596 -* madvise: (libc)Memory-mapped I/O.
12597 -* makecontext: (libc)System V contexts.
12598 -* mallinfo: (libc)Statistics of Malloc.
12599 -* malloc: (libc)Basic Allocation.
12600 -* mallopt: (libc)Malloc Tunable Parameters.
12601 -* mblen: (libc)Non-reentrant Character Conversion.
12602 -* mbrlen: (libc)Converting a Character.
12603 -* mbrtowc: (libc)Converting a Character.
12604 -* mbsinit: (libc)Keeping the state.
12605 -* mbsnrtowcs: (libc)Converting Strings.
12606 -* mbsrtowcs: (libc)Converting Strings.
12607 -* mbstowcs: (libc)Non-reentrant String Conversion.
12608 -* mbtowc: (libc)Non-reentrant Character Conversion.
12609 -* mcheck: (libc)Heap Consistency Checking.
12610 -* memalign: (libc)Aligned Memory Blocks.
12611 -* memccpy: (libc)Copying and Concatenation.
12612 -* memchr: (libc)Search Functions.
12613 -* memcmp: (libc)String/Array Comparison.
12614 -* memcpy: (libc)Copying and Concatenation.
12615 -* memfrob: (libc)Trivial Encryption.
12616 -* memmem: (libc)Search Functions.
12617 -* memmove: (libc)Copying and Concatenation.
12618 -* mempcpy: (libc)Copying and Concatenation.
12619 -* memrchr: (libc)Search Functions.
12620 -* memset: (libc)Copying and Concatenation.
12621 -* mkdir: (libc)Creating Directories.
12622 -* mkdtemp: (libc)Temporary Files.
12623 -* mkfifo: (libc)FIFO Special Files.
12624 -* mknod: (libc)Making Special Files.
12625 -* mkstemp: (libc)Temporary Files.
12626 -* mktemp: (libc)Temporary Files.
12627 -* mktime: (libc)Broken-down Time.
12628 -* mlock: (libc)Page Lock Functions.
12629 -* mlockall: (libc)Page Lock Functions.
12630 -* mmap64: (libc)Memory-mapped I/O.
12631 -* mmap: (libc)Memory-mapped I/O.
12632 -* modf: (libc)Rounding Functions.
12633 -* modff: (libc)Rounding Functions.
12634 -* modfl: (libc)Rounding Functions.
12635 -* mount: (libc)Mount-Unmount-Remount.
12636 -* mprobe: (libc)Heap Consistency Checking.
12637 -* mrand48: (libc)SVID Random.
12638 -* mrand48_r: (libc)SVID Random.
12639 -* mremap: (libc)Memory-mapped I/O.
12640 -* msync: (libc)Memory-mapped I/O.
12641 -* mtrace: (libc)Tracing malloc.
12642 -* munlock: (libc)Page Lock Functions.
12643 -* munlockall: (libc)Page Lock Functions.
12644 -* munmap: (libc)Memory-mapped I/O.
12645 -* muntrace: (libc)Tracing malloc.
12646 -* nan: (libc)FP Bit Twiddling.
12647 -* nanf: (libc)FP Bit Twiddling.
12648 -* nanl: (libc)FP Bit Twiddling.
12649 -* nanosleep: (libc)Sleeping.
12650 -* nearbyint: (libc)Rounding Functions.
12651 -* nearbyintf: (libc)Rounding Functions.
12652 -* nearbyintl: (libc)Rounding Functions.
12653 -* nextafter: (libc)FP Bit Twiddling.
12654 -* nextafterf: (libc)FP Bit Twiddling.
12655 -* nextafterl: (libc)FP Bit Twiddling.
12656 -* nexttoward: (libc)FP Bit Twiddling.
12657 -* nexttowardf: (libc)FP Bit Twiddling.
12658 -* nexttowardl: (libc)FP Bit Twiddling.
12659 -* nftw64: (libc)Working with Directory Trees.
12660 -* nftw: (libc)Working with Directory Trees.
12661 -* ngettext: (libc)Advanced gettext functions.
12662 -* nice: (libc)Traditional Scheduling Functions.
12663 -* nl_langinfo: (libc)The Elegant and Fast Way.
12664 -* nrand48: (libc)SVID Random.
12665 -* nrand48_r: (libc)SVID Random.
12666 -* ntohl: (libc)Byte Order.
12667 -* ntohs: (libc)Byte Order.
12668 -* ntp_adjtime: (libc)High Accuracy Clock.
12669 -* ntp_gettime: (libc)High Accuracy Clock.
12670 -* obstack_1grow: (libc)Growing Objects.
12671 -* obstack_1grow_fast: (libc)Extra Fast Growing.
12672 -* obstack_alignment_mask: (libc)Obstacks Data Alignment.
12673 -* obstack_alloc: (libc)Allocation in an Obstack.
12674 -* obstack_base: (libc)Status of an Obstack.
12675 -* obstack_blank: (libc)Growing Objects.
12676 -* obstack_blank_fast: (libc)Extra Fast Growing.
12677 -* obstack_chunk_size: (libc)Obstack Chunks.
12678 -* obstack_copy0: (libc)Allocation in an Obstack.
12679 -* obstack_copy: (libc)Allocation in an Obstack.
12680 -* obstack_finish: (libc)Growing Objects.
12681 -* obstack_free: (libc)Freeing Obstack Objects.
12682 -* obstack_grow0: (libc)Growing Objects.
12683 -* obstack_grow: (libc)Growing Objects.
12684 -* obstack_init: (libc)Preparing for Obstacks.
12685 -* obstack_int_grow: (libc)Growing Objects.
12686 -* obstack_int_grow_fast: (libc)Extra Fast Growing.
12687 -* obstack_next_free: (libc)Status of an Obstack.
12688 -* obstack_object_size: (libc)Growing Objects.
12689 -* obstack_object_size: (libc)Status of an Obstack.
12690 -* obstack_printf: (libc)Dynamic Output.
12691 -* obstack_ptr_grow: (libc)Growing Objects.
12692 -* obstack_ptr_grow_fast: (libc)Extra Fast Growing.
12693 -* obstack_room: (libc)Extra Fast Growing.
12694 -* obstack_vprintf: (libc)Variable Arguments Output.
12695 -* offsetof: (libc)Structure Measurement.
12696 -* on_exit: (libc)Cleanups on Exit.
12697 -* open64: (libc)Opening and Closing Files.
12698 -* open: (libc)Opening and Closing Files.
12699 -* open_memstream: (libc)String Streams.
12700 -* open_obstack_stream: (libc)Obstack Streams.
12701 -* opendir: (libc)Opening a Directory.
12702 -* openlog: (libc)openlog.
12703 -* openpty: (libc)Pseudo-Terminal Pairs.
12704 -* parse_printf_format: (libc)Parsing a Template String.
12705 -* pathconf: (libc)Pathconf.
12706 -* pause: (libc)Using Pause.
12707 -* pclose: (libc)Pipe to a Subprocess.
12708 -* perror: (libc)Error Messages.
12709 -* pipe: (libc)Creating a Pipe.
12710 -* popen: (libc)Pipe to a Subprocess.
12711 -* posix_memalign: (libc)Aligned Memory Blocks.
12712 -* pow10: (libc)Exponents and Logarithms.
12713 -* pow10f: (libc)Exponents and Logarithms.
12714 -* pow10l: (libc)Exponents and Logarithms.
12715 -* pow: (libc)Exponents and Logarithms.
12716 -* powf: (libc)Exponents and Logarithms.
12717 -* powl: (libc)Exponents and Logarithms.
12718 -* pread64: (libc)I/O Primitives.
12719 -* pread: (libc)I/O Primitives.
12720 -* printf: (libc)Formatted Output Functions.
12721 -* printf_size: (libc)Predefined Printf Handlers.
12722 -* printf_size_info: (libc)Predefined Printf Handlers.
12723 -* psignal: (libc)Signal Messages.
12724 -* pthread_atfork: (libc)Threads and Fork.
12725 -* pthread_attr_destroy: (libc)Thread Attributes.
12726 -* pthread_attr_getattr: (libc)Thread Attributes.
12727 -* pthread_attr_init: (libc)Thread Attributes.
12728 -* pthread_attr_setattr: (libc)Thread Attributes.
12729 -* pthread_cancel: (libc)Basic Thread Operations.
12730 -* pthread_cleanup_pop: (libc)Cleanup Handlers.
12731 -* pthread_cleanup_pop_restore_np: (libc)Cleanup Handlers.
12732 -* pthread_cleanup_push: (libc)Cleanup Handlers.
12733 -* pthread_cleanup_push_defer_np: (libc)Cleanup Handlers.
12734 -* pthread_cond_broadcast: (libc)Condition Variables.
12735 -* pthread_cond_destroy: (libc)Condition Variables.
12736 -* pthread_cond_init: (libc)Condition Variables.
12737 -* pthread_cond_signal: (libc)Condition Variables.
12738 -* pthread_cond_timedwait: (libc)Condition Variables.
12739 -* pthread_cond_wait: (libc)Condition Variables.
12740 -* pthread_condattr_destroy: (libc)Condition Variables.
12741 -* pthread_condattr_init: (libc)Condition Variables.
12742 -* pthread_create: (libc)Basic Thread Operations.
12743 -* pthread_detach: (libc)Miscellaneous Thread Functions.
12744 -* pthread_equal: (libc)Miscellaneous Thread Functions.
12745 -* pthread_exit: (libc)Basic Thread Operations.
12746 -* pthread_getconcurrency: (libc)Miscellaneous Thread Functions.
12747 -* pthread_getschedparam: (libc)Miscellaneous Thread Functions.
12748 -* pthread_getspecific: (libc)Thread-Specific Data.
12749 -* pthread_join: (libc)Basic Thread Operations.
12750 -* pthread_key_create: (libc)Thread-Specific Data.
12751 -* pthread_key_delete: (libc)Thread-Specific Data.
12752 -* pthread_kill: (libc)Threads and Signal Handling.
12753 -* pthread_kill_other_threads_np: (libc)Miscellaneous Thread Functions.
12754 -* pthread_mutex_destroy: (libc)Mutexes.
12755 -* pthread_mutex_init: (libc)Mutexes.
12756 -* pthread_mutex_lock: (libc)Mutexes.
12757 -* pthread_mutex_timedlock: (libc)Mutexes.
12758 -* pthread_mutex_trylock: (libc)Mutexes.
12759 -* pthread_mutex_unlock: (libc)Mutexes.
12760 -* pthread_mutexattr_destroy: (libc)Mutexes.
12761 -* pthread_mutexattr_gettype: (libc)Mutexes.
12762 -* pthread_mutexattr_init: (libc)Mutexes.
12763 -* pthread_mutexattr_settype: (libc)Mutexes.
12764 -* pthread_once: (libc)Miscellaneous Thread Functions.
12765 -* pthread_self: (libc)Miscellaneous Thread Functions.
12766 -* pthread_setcancelstate: (libc)Cancellation.
12767 -* pthread_setcanceltype: (libc)Cancellation.
12768 -* pthread_setconcurrency: (libc)Miscellaneous Thread Functions.
12769 -* pthread_setschedparam: (libc)Miscellaneous Thread Functions.
12770 -* pthread_setspecific: (libc)Thread-Specific Data.
12771 -* pthread_sigmask: (libc)Threads and Signal Handling.
12772 -* pthread_testcancel: (libc)Cancellation.
12773 -* ptsname: (libc)Allocation.
12774 -* ptsname_r: (libc)Allocation.
12775 -* putc: (libc)Simple Output.
12776 -* putc_unlocked: (libc)Simple Output.
12777 -* putchar: (libc)Simple Output.
12778 -* putchar_unlocked: (libc)Simple Output.
12779 -* putenv: (libc)Environment Access.
12780 -* putpwent: (libc)Writing a User Entry.
12781 -* puts: (libc)Simple Output.
12782 -* pututline: (libc)Manipulating the Database.
12783 -* pututxline: (libc)XPG Functions.
12784 -* putw: (libc)Simple Output.
12785 -* putwc: (libc)Simple Output.
12786 -* putwc_unlocked: (libc)Simple Output.
12787 -* putwchar: (libc)Simple Output.
12788 -* putwchar_unlocked: (libc)Simple Output.
12789 -* pwrite64: (libc)I/O Primitives.
12790 -* pwrite: (libc)I/O Primitives.
12791 -* qecvt: (libc)System V Number Conversion.
12792 -* qecvt_r: (libc)System V Number Conversion.
12793 -* qfcvt: (libc)System V Number Conversion.
12794 -* qfcvt_r: (libc)System V Number Conversion.
12795 -* qgcvt: (libc)System V Number Conversion.
12796 -* qsort: (libc)Array Sort Function.
12797 -* raise: (libc)Signaling Yourself.
12798 -* rand: (libc)ISO Random.
12799 -* rand_r: (libc)ISO Random.
12800 -* random: (libc)BSD Random.
12801 -* random_r: (libc)BSD Random.
12802 -* rawmemchr: (libc)Search Functions.
12803 -* read: (libc)I/O Primitives.
12804 -* readdir64: (libc)Reading/Closing Directory.
12805 -* readdir64_r: (libc)Reading/Closing Directory.
12806 -* readdir: (libc)Reading/Closing Directory.
12807 -* readdir_r: (libc)Reading/Closing Directory.
12808 -* readlink: (libc)Symbolic Links.
12809 -* readv: (libc)Scatter-Gather.
12810 -* realloc: (libc)Changing Block Size.
12811 -* realpath: (libc)Symbolic Links.
12812 -* recv: (libc)Receiving Data.
12813 -* recvfrom: (libc)Receiving Datagrams.
12814 -* recvmsg: (libc)Receiving Datagrams.
12815 -* regcomp: (libc)POSIX Regexp Compilation.
12816 -* regerror: (libc)Regexp Cleanup.
12817 -* regexec: (libc)Matching POSIX Regexps.
12818 -* regfree: (libc)Regexp Cleanup.
12819 -* register_printf_function: (libc)Registering New Conversions.
12820 -* remainder: (libc)Remainder Functions.
12821 -* remainderf: (libc)Remainder Functions.
12822 -* remainderl: (libc)Remainder Functions.
12823 -* remove: (libc)Deleting Files.
12824 -* rename: (libc)Renaming Files.
12825 -* rewind: (libc)File Positioning.
12826 -* rewinddir: (libc)Random Access Directory.
12827 -* rindex: (libc)Search Functions.
12828 -* rint: (libc)Rounding Functions.
12829 -* rintf: (libc)Rounding Functions.
12830 -* rintl: (libc)Rounding Functions.
12831 -* rmdir: (libc)Deleting Files.
12832 -* round: (libc)Rounding Functions.
12833 -* roundf: (libc)Rounding Functions.
12834 -* roundl: (libc)Rounding Functions.
12835 -* rpmatch: (libc)Yes-or-No Questions.
12836 -* sbrk: (libc)Resizing the Data Segment.
12837 -* scalb: (libc)Normalization Functions.
12838 -* scalbf: (libc)Normalization Functions.
12839 -* scalbl: (libc)Normalization Functions.
12840 -* scalbln: (libc)Normalization Functions.
12841 -* scalblnf: (libc)Normalization Functions.
12842 -* scalblnl: (libc)Normalization Functions.
12843 -* scalbn: (libc)Normalization Functions.
12844 -* scalbnf: (libc)Normalization Functions.
12845 -* scalbnl: (libc)Normalization Functions.
12846 -* scandir64: (libc)Scanning Directory Content.
12847 -* scandir: (libc)Scanning Directory Content.
12848 -* scanf: (libc)Formatted Input Functions.
12849 -* sched_get_priority_max: (libc)Basic Scheduling Functions.
12850 -* sched_get_priority_min: (libc)Basic Scheduling Functions.
12851 -* sched_getparam: (libc)Basic Scheduling Functions.
12852 -* sched_getscheduler: (libc)Basic Scheduling Functions.
12853 -* sched_rr_get_interval: (libc)Basic Scheduling Functions.
12854 -* sched_setparam: (libc)Basic Scheduling Functions.
12855 -* sched_setscheduler: (libc)Basic Scheduling Functions.
12856 -* sched_yield: (libc)Basic Scheduling Functions.
12857 -* seed48: (libc)SVID Random.
12858 -* seed48_r: (libc)SVID Random.
12859 -* seekdir: (libc)Random Access Directory.
12860 -* select: (libc)Waiting for I/O.
12861 -* sem_destroy: (libc)POSIX Semaphores.
12862 -* sem_getvalue: (libc)POSIX Semaphores.
12863 -* sem_init: (libc)POSIX Semaphores.
12864 -* sem_post: (libc)POSIX Semaphores.
12865 -* sem_trywait: (libc)POSIX Semaphores.
12866 -* sem_wait: (libc)POSIX Semaphores.
12867 -* send: (libc)Sending Data.
12868 -* sendmsg: (libc)Receiving Datagrams.
12869 -* sendto: (libc)Sending Datagrams.
12870 -* setbuf: (libc)Controlling Buffering.
12871 -* setbuffer: (libc)Controlling Buffering.
12872 -* setcontext: (libc)System V contexts.
12873 -* setdomainname: (libc)Host Identification.
12874 -* setegid: (libc)Setting Groups.
12875 -* setenv: (libc)Environment Access.
12876 -* seteuid: (libc)Setting User ID.
12877 -* setfsent: (libc)fstab.
12878 -* setgid: (libc)Setting Groups.
12879 -* setgrent: (libc)Scanning All Groups.
12880 -* setgroups: (libc)Setting Groups.
12881 -* sethostent: (libc)Host Names.
12882 -* sethostid: (libc)Host Identification.
12883 -* sethostname: (libc)Host Identification.
12884 -* setitimer: (libc)Setting an Alarm.
12885 -* setjmp: (libc)Non-Local Details.
12886 -* setkey: (libc)DES Encryption.
12887 -* setkey_r: (libc)DES Encryption.
12888 -* setlinebuf: (libc)Controlling Buffering.
12889 -* setlocale: (libc)Setting the Locale.
12890 -* setlogmask: (libc)setlogmask.
12891 -* setmntent: (libc)mtab.
12892 -* setnetent: (libc)Networks Database.
12893 -* setnetgrent: (libc)Lookup Netgroup.
12894 -* setpgid: (libc)Process Group Functions.
12895 -* setpgrp: (libc)Process Group Functions.
12896 -* setpriority: (libc)Traditional Scheduling Functions.
12897 -* setprotoent: (libc)Protocols Database.
12898 -* setpwent: (libc)Scanning All Users.
12899 -* setregid: (libc)Setting Groups.
12900 -* setreuid: (libc)Setting User ID.
12901 -* setrlimit64: (libc)Limits on Resources.
12902 -* setrlimit: (libc)Limits on Resources.
12903 -* setservent: (libc)Services Database.
12904 -* setsid: (libc)Process Group Functions.
12905 -* setsockopt: (libc)Socket Option Functions.
12906 -* setstate: (libc)BSD Random.
12907 -* setstate_r: (libc)BSD Random.
12908 -* settimeofday: (libc)High-Resolution Calendar.
12909 -* setuid: (libc)Setting User ID.
12910 -* setutent: (libc)Manipulating the Database.
12911 -* setutxent: (libc)XPG Functions.
12912 -* setvbuf: (libc)Controlling Buffering.
12913 -* shutdown: (libc)Closing a Socket.
12914 -* sigaction: (libc)Advanced Signal Handling.
12915 -* sigaddset: (libc)Signal Sets.
12916 -* sigaltstack: (libc)Signal Stack.
12917 -* sigblock: (libc)Blocking in BSD.
12918 -* sigdelset: (libc)Signal Sets.
12919 -* sigemptyset: (libc)Signal Sets.
12920 -* sigfillset: (libc)Signal Sets.
12921 -* siginterrupt: (libc)BSD Handler.
12922 -* sigismember: (libc)Signal Sets.
12923 -* siglongjmp: (libc)Non-Local Exits and Signals.
12924 -* sigmask: (libc)Blocking in BSD.
12925 -* signal: (libc)Basic Signal Handling.
12926 -* signbit: (libc)FP Bit Twiddling.
12927 -* significand: (libc)Normalization Functions.
12928 -* significandf: (libc)Normalization Functions.
12929 -* significandl: (libc)Normalization Functions.
12930 -* sigpause: (libc)Blocking in BSD.
12931 -* sigpending: (libc)Checking for Pending Signals.
12932 -* sigprocmask: (libc)Process Signal Mask.
12933 -* sigsetjmp: (libc)Non-Local Exits and Signals.
12934 -* sigsetmask: (libc)Blocking in BSD.
12935 -* sigstack: (libc)Signal Stack.
12936 -* sigsuspend: (libc)Sigsuspend.
12937 -* sigvec: (libc)BSD Handler.
12938 -* sigwait: (libc)Threads and Signal Handling.
12939 -* sin: (libc)Trig Functions.
12940 -* sincos: (libc)Trig Functions.
12941 -* sincosf: (libc)Trig Functions.
12942 -* sincosl: (libc)Trig Functions.
12943 -* sinf: (libc)Trig Functions.
12944 -* sinh: (libc)Hyperbolic Functions.
12945 -* sinhf: (libc)Hyperbolic Functions.
12946 -* sinhl: (libc)Hyperbolic Functions.
12947 -* sinl: (libc)Trig Functions.
12948 -* sleep: (libc)Sleeping.
12949 -* snprintf: (libc)Formatted Output Functions.
12950 -* socket: (libc)Creating a Socket.
12951 -* socketpair: (libc)Socket Pairs.
12952 -* sprintf: (libc)Formatted Output Functions.
12953 -* sqrt: (libc)Exponents and Logarithms.
12954 -* sqrtf: (libc)Exponents and Logarithms.
12955 -* sqrtl: (libc)Exponents and Logarithms.
12956 -* srand48: (libc)SVID Random.
12957 -* srand48_r: (libc)SVID Random.
12958 -* srand: (libc)ISO Random.
12959 -* srandom: (libc)BSD Random.
12960 -* srandom_r: (libc)BSD Random.
12961 -* sscanf: (libc)Formatted Input Functions.
12962 -* ssignal: (libc)Basic Signal Handling.
12963 -* stat64: (libc)Reading Attributes.
12964 -* stat: (libc)Reading Attributes.
12965 -* stime: (libc)Simple Calendar Time.
12966 -* stpcpy: (libc)Copying and Concatenation.
12967 -* stpncpy: (libc)Copying and Concatenation.
12968 -* strcasecmp: (libc)String/Array Comparison.
12969 -* strcasestr: (libc)Search Functions.
12970 -* strcat: (libc)Copying and Concatenation.
12971 -* strchr: (libc)Search Functions.
12972 -* strchrnul: (libc)Search Functions.
12973 -* strcmp: (libc)String/Array Comparison.
12974 -* strcoll: (libc)Collation Functions.
12975 -* strcpy: (libc)Copying and Concatenation.
12976 -* strcspn: (libc)Search Functions.
12977 -* strdup: (libc)Copying and Concatenation.
12978 -* strdupa: (libc)Copying and Concatenation.
12979 -* strerror: (libc)Error Messages.
12980 -* strerror_r: (libc)Error Messages.
12981 -* strfmon: (libc)Formatting Numbers.
12982 -* strfry: (libc)strfry.
12983 -* strftime: (libc)Formatting Calendar Time.
12984 -* strlen: (libc)String Length.
12985 -* strncasecmp: (libc)String/Array Comparison.
12986 -* strncat: (libc)Copying and Concatenation.
12987 -* strncmp: (libc)String/Array Comparison.
12988 -* strncpy: (libc)Copying and Concatenation.
12989 -* strndup: (libc)Copying and Concatenation.
12990 -* strndupa: (libc)Copying and Concatenation.
12991 -* strnlen: (libc)String Length.
12992 -* strpbrk: (libc)Search Functions.
12993 -* strptime: (libc)Low-Level Time String Parsing.
12994 -* strrchr: (libc)Search Functions.
12995 -* strsep: (libc)Finding Tokens in a String.
12996 -* strsignal: (libc)Signal Messages.
12997 -* strspn: (libc)Search Functions.
12998 -* strstr: (libc)Search Functions.
12999 -* strtod: (libc)Parsing of Floats.
13000 -* strtof: (libc)Parsing of Floats.
13001 -* strtoimax: (libc)Parsing of Integers.
13002 -* strtok: (libc)Finding Tokens in a String.
13003 -* strtok_r: (libc)Finding Tokens in a String.
13004 -* strtol: (libc)Parsing of Integers.
13005 -* strtold: (libc)Parsing of Floats.
13006 -* strtoll: (libc)Parsing of Integers.
13007 -* strtoq: (libc)Parsing of Integers.
13008 -* strtoul: (libc)Parsing of Integers.
13009 -* strtoull: (libc)Parsing of Integers.
13010 -* strtoumax: (libc)Parsing of Integers.
13011 -* strtouq: (libc)Parsing of Integers.
13012 -* strverscmp: (libc)String/Array Comparison.
13013 -* strxfrm: (libc)Collation Functions.
13014 -* stty: (libc)BSD Terminal Modes.
13015 -* swapcontext: (libc)System V contexts.
13016 -* swprintf: (libc)Formatted Output Functions.
13017 -* swscanf: (libc)Formatted Input Functions.
13018 -* symlink: (libc)Symbolic Links.
13019 -* sync: (libc)Synchronizing I/O.
13020 -* syscall: (libc)System Calls.
13021 -* sysconf: (libc)Sysconf Definition.
13022 -* sysctl: (libc)System Parameters.
13023 -* syslog: (libc)syslog; vsyslog.
13024 -* system: (libc)Running a Command.
13025 -* sysv_signal: (libc)Basic Signal Handling.
13026 -* tan: (libc)Trig Functions.
13027 -* tanf: (libc)Trig Functions.
13028 -* tanh: (libc)Hyperbolic Functions.
13029 -* tanhf: (libc)Hyperbolic Functions.
13030 -* tanhl: (libc)Hyperbolic Functions.
13031 -* tanl: (libc)Trig Functions.
13032 -* tcdrain: (libc)Line Control.
13033 -* tcflow: (libc)Line Control.
13034 -* tcflush: (libc)Line Control.
13035 -* tcgetattr: (libc)Mode Functions.
13036 -* tcgetpgrp: (libc)Terminal Access Functions.
13037 -* tcgetsid: (libc)Terminal Access Functions.
13038 -* tcsendbreak: (libc)Line Control.
13039 -* tcsetattr: (libc)Mode Functions.
13040 -* tcsetpgrp: (libc)Terminal Access Functions.
13041 -* tdelete: (libc)Tree Search Function.
13042 -* tdestroy: (libc)Tree Search Function.
13043 -* telldir: (libc)Random Access Directory.
13044 -* tempnam: (libc)Temporary Files.
13045 -* textdomain: (libc)Locating gettext catalog.
13046 -* tfind: (libc)Tree Search Function.
13047 -* tgamma: (libc)Special Functions.
13048 -* tgammaf: (libc)Special Functions.
13049 -* tgammal: (libc)Special Functions.
13050 -* time: (libc)Simple Calendar Time.
13051 -* timegm: (libc)Broken-down Time.
13052 -* timelocal: (libc)Broken-down Time.
13053 -* times: (libc)Processor Time.
13054 -* tmpfile64: (libc)Temporary Files.
13055 -* tmpfile: (libc)Temporary Files.
13056 -* tmpnam: (libc)Temporary Files.
13057 -* tmpnam_r: (libc)Temporary Files.
13058 -* toascii: (libc)Case Conversion.
13059 -* tolower: (libc)Case Conversion.
13060 -* toupper: (libc)Case Conversion.
13061 -* towctrans: (libc)Wide Character Case Conversion.
13062 -* towlower: (libc)Wide Character Case Conversion.
13063 -* towupper: (libc)Wide Character Case Conversion.
13064 -* trunc: (libc)Rounding Functions.
13065 -* truncate64: (libc)File Size.
13066 -* truncate: (libc)File Size.
13067 -* truncf: (libc)Rounding Functions.
13068 -* truncl: (libc)Rounding Functions.
13069 -* tsearch: (libc)Tree Search Function.
13070 -* ttyname: (libc)Is It a Terminal.
13071 -* ttyname_r: (libc)Is It a Terminal.
13072 -* twalk: (libc)Tree Search Function.
13073 -* tzset: (libc)Time Zone Functions.
13074 -* ulimit: (libc)Limits on Resources.
13075 -* umask: (libc)Setting Permissions.
13076 -* umount2: (libc)Mount-Unmount-Remount.
13077 -* umount: (libc)Mount-Unmount-Remount.
13078 -* uname: (libc)Platform Type.
13079 -* ungetc: (libc)How Unread.
13080 -* ungetwc: (libc)How Unread.
13081 -* unlink: (libc)Deleting Files.
13082 -* unlockpt: (libc)Allocation.
13083 -* unsetenv: (libc)Environment Access.
13084 -* updwtmp: (libc)Manipulating the Database.
13085 -* utime: (libc)File Times.
13086 -* utimes: (libc)File Times.
13087 -* utmpname: (libc)Manipulating the Database.
13088 -* utmpxname: (libc)XPG Functions.
13089 -* va_arg: (libc)Argument Macros.
13090 -* va_end: (libc)Argument Macros.
13091 -* va_start: (libc)Argument Macros.
13092 -* va_start: (libc)Old Varargs.
13093 -* valloc: (libc)Aligned Memory Blocks.
13094 -* vasprintf: (libc)Variable Arguments Output.
13095 -* verr: (libc)Error Messages.
13096 -* verrx: (libc)Error Messages.
13097 -* versionsort64: (libc)Scanning Directory Content.
13098 -* versionsort: (libc)Scanning Directory Content.
13099 -* vfork: (libc)Creating a Process.
13100 -* vfprintf: (libc)Variable Arguments Output.
13101 -* vfscanf: (libc)Variable Arguments Input.
13102 -* vfwprintf: (libc)Variable Arguments Output.
13103 -* vfwscanf: (libc)Variable Arguments Input.
13104 -* vlimit: (libc)Limits on Resources.
13105 -* vprintf: (libc)Variable Arguments Output.
13106 -* vscanf: (libc)Variable Arguments Input.
13107 -* vsnprintf: (libc)Variable Arguments Output.
13108 -* vsprintf: (libc)Variable Arguments Output.
13109 -* vsscanf: (libc)Variable Arguments Input.
13110 -* vswprintf: (libc)Variable Arguments Output.
13111 -* vswscanf: (libc)Variable Arguments Input.
13112 -* vsyslog: (libc)syslog; vsyslog.
13113 -* vtimes: (libc)Resource Usage.
13114 -* vwarn: (libc)Error Messages.
13115 -* vwarnx: (libc)Error Messages.
13116 -* vwprintf: (libc)Variable Arguments Output.
13117 -* vwscanf: (libc)Variable Arguments Input.
13118 -* wait3: (libc)BSD Wait Functions.
13119 -* wait4: (libc)Process Completion.
13120 -* wait: (libc)Process Completion.
13121 -* waitpid: (libc)Process Completion.
13122 -* warn: (libc)Error Messages.
13123 -* warnx: (libc)Error Messages.
13124 -* wcpcpy: (libc)Copying and Concatenation.
13125 -* wcpncpy: (libc)Copying and Concatenation.
13126 -* wcrtomb: (libc)Converting a Character.
13127 -* wcscasecmp: (libc)String/Array Comparison.
13128 -* wcscat: (libc)Copying and Concatenation.
13129 -* wcschr: (libc)Search Functions.
13130 -* wcschrnul: (libc)Search Functions.
13131 -* wcscmp: (libc)String/Array Comparison.
13132 -* wcscoll: (libc)Collation Functions.
13133 -* wcscpy: (libc)Copying and Concatenation.
13134 -* wcscspn: (libc)Search Functions.
13135 -* wcsdup: (libc)Copying and Concatenation.
13136 -* wcsftime: (libc)Formatting Calendar Time.
13137 -* wcslen: (libc)String Length.
13138 -* wcsncasecmp: (libc)String/Array Comparison.
13139 -* wcsncat: (libc)Copying and Concatenation.
13140 -* wcsncmp: (libc)String/Array Comparison.
13141 -* wcsncpy: (libc)Copying and Concatenation.
13142 -* wcsnlen: (libc)String Length.
13143 -* wcsnrtombs: (libc)Converting Strings.
13144 -* wcspbrk: (libc)Search Functions.
13145 -* wcsrchr: (libc)Search Functions.
13146 -* wcsrtombs: (libc)Converting Strings.
13147 -* wcsspn: (libc)Search Functions.
13148 -* wcsstr: (libc)Search Functions.
13149 -* wcstod: (libc)Parsing of Floats.
13150 -* wcstof: (libc)Parsing of Floats.
13151 -* wcstoimax: (libc)Parsing of Integers.
13152 -* wcstok: (libc)Finding Tokens in a String.
13153 -* wcstol: (libc)Parsing of Integers.
13154 -* wcstold: (libc)Parsing of Floats.
13155 -* wcstoll: (libc)Parsing of Integers.
13156 -* wcstombs: (libc)Non-reentrant String Conversion.
13157 -* wcstoq: (libc)Parsing of Integers.
13158 -* wcstoul: (libc)Parsing of Integers.
13159 -* wcstoull: (libc)Parsing of Integers.
13160 -* wcstoumax: (libc)Parsing of Integers.
13161 -* wcstouq: (libc)Parsing of Integers.
13162 -* wcswcs: (libc)Search Functions.
13163 -* wcsxfrm: (libc)Collation Functions.
13164 -* wctob: (libc)Converting a Character.
13165 -* wctomb: (libc)Non-reentrant Character Conversion.
13166 -* wctrans: (libc)Wide Character Case Conversion.
13167 -* wctype: (libc)Classification of Wide Characters.
13168 -* wmemchr: (libc)Search Functions.
13169 -* wmemcmp: (libc)String/Array Comparison.
13170 -* wmemcpy: (libc)Copying and Concatenation.
13171 -* wmemmove: (libc)Copying and Concatenation.
13172 -* wmempcpy: (libc)Copying and Concatenation.
13173 -* wmemset: (libc)Copying and Concatenation.
13174 -* wordexp: (libc)Calling Wordexp.
13175 -* wordfree: (libc)Calling Wordexp.
13176 -* wprintf: (libc)Formatted Output Functions.
13177 -* write: (libc)I/O Primitives.
13178 -* writev: (libc)Scatter-Gather.
13179 -* wscanf: (libc)Formatted Input Functions.
13180 -* y0: (libc)Special Functions.
13181 -* y0f: (libc)Special Functions.
13182 -* y0l: (libc)Special Functions.
13183 -* y1: (libc)Special Functions.
13184 -* y1f: (libc)Special Functions.
13185 -* y1l: (libc)Special Functions.
13186 -* yn: (libc)Special Functions.
13187 -* ynf: (libc)Special Functions.
13188 -* ynl: (libc)Special Functions.
13189 -* {(*__gconv_end_fct)}: (libc)glibc iconv Implementation.
13190 -* {(*__gconv_fct)}: (libc)glibc iconv Implementation.
13191 -* {(*__gconv_init_fct)}: (libc)glibc iconv Implementation.
13192 -END-INFO-DIR-ENTRY
13193 diff -u -udbrN glibc-2.3.2/manual/dir.c.texi glibc-2.3.2-200304020432/manual/dir.c.texi
13194 --- glibc-2.3.2/manual/dir.c.texi Mon Nov 18 20:37:19 2002
13195 +++ glibc-2.3.2-200304020432/manual/dir.c.texi Thu Jan 1 01:00:00 1970
13196 @@ -1,24 +0,0 @@
13197 -@group
13198 -#include <stdio.h>
13199 -#include <sys/types.h>
13200 -#include <dirent.h>
13201 -@end group
13203 -int
13204 -main (void)
13206 - DIR *dp;
13207 - struct dirent *ep;
13209 - dp = opendir ("./");
13210 - if (dp != NULL)
13211 - @{
13212 - while (ep = readdir (dp))
13213 - puts (ep->d_name);
13214 - (void) closedir (dp);
13215 - @}
13216 - else
13217 - perror ("Couldn't open the directory");
13219 - return 0;
13221 diff -u -udbrN glibc-2.3.2/manual/dir2.c.texi glibc-2.3.2-200304020432/manual/dir2.c.texi
13222 --- glibc-2.3.2/manual/dir2.c.texi Wed Dec 9 23:51:53 1998
13223 +++ glibc-2.3.2-200304020432/manual/dir2.c.texi Thu Jan 1 01:00:00 1970
13224 @@ -1,29 +0,0 @@
13225 -@group
13226 -#include <stdio.h>
13227 -#include <dirent.h>
13228 -@end group
13230 -static int
13231 -one (struct dirent *unused)
13233 - return 1;
13236 -int
13237 -main (void)
13239 - struct dirent **eps;
13240 - int n;
13242 - n = scandir ("./", &eps, one, alphasort);
13243 - if (n >= 0)
13244 - @{
13245 - int cnt;
13246 - for (cnt = 0; cnt < n; ++cnt)
13247 - puts (eps[cnt]->d_name);
13248 - @}
13249 - else
13250 - perror ("Couldn't open the directory");
13252 - return 0;
13254 diff -u -udbrN glibc-2.3.2/manual/execinfo.c.texi glibc-2.3.2-200304020432/manual/execinfo.c.texi
13255 --- glibc-2.3.2/manual/execinfo.c.texi Wed Jan 17 17:41:01 2001
13256 +++ glibc-2.3.2-200304020432/manual/execinfo.c.texi Thu Jan 1 01:00:00 1970
13257 @@ -1,37 +0,0 @@
13258 -#include <execinfo.h>
13259 -#include <stdio.h>
13260 -#include <stdlib.h>
13262 -/* @r{Obtain a backtrace and print it to @code{stdout}.} */
13263 -void
13264 -print_trace (void)
13266 - void *array[10];
13267 - size_t size;
13268 - char **strings;
13269 - size_t i;
13271 - size = backtrace (array, 10);
13272 - strings = backtrace_symbols (array, size);
13274 - printf ("Obtained %zd stack frames.\n", size);
13276 - for (i = 0; i < size; i++)
13277 - printf ("%s\n", strings[i]);
13279 - free (strings);
13282 -/* @r{A dummy function to make the backtrace more interesting.} */
13283 -void
13284 -dummy_function (void)
13286 - print_trace ();
13289 -int
13290 -main (void)
13292 - dummy_function ();
13293 - return 0;
13295 diff -u -udbrN glibc-2.3.2/manual/filecli.c.texi glibc-2.3.2-200304020432/manual/filecli.c.texi
13296 --- glibc-2.3.2/manual/filecli.c.texi Wed Dec 9 23:51:53 1998
13297 +++ glibc-2.3.2-200304020432/manual/filecli.c.texi Thu Jan 1 01:00:00 1970
13298 @@ -1,54 +0,0 @@
13299 -#include <stdio.h>
13300 -#include <errno.h>
13301 -#include <unistd.h>
13302 -#include <stdlib.h>
13303 -#include <sys/socket.h>
13304 -#include <sys/un.h>
13306 -#define SERVER "/tmp/serversocket"
13307 -#define CLIENT "/tmp/mysocket"
13308 -#define MAXMSG 512
13309 -#define MESSAGE "Yow!!! Are we having fun yet?!?"
13311 -int
13312 -main (void)
13314 - extern int make_named_socket (const char *name);
13315 - int sock;
13316 - char message[MAXMSG];
13317 - struct sockaddr_un name;
13318 - size_t size;
13319 - int nbytes;
13321 - /* @r{Make the socket.} */
13322 - sock = make_named_socket (CLIENT);
13324 - /* @r{Initialize the server socket address.} */
13325 - name.sun_family = AF_LOCAL;
13326 - strcpy (name.sun_path, SERVER);
13327 - size = strlen (name.sun_path) + sizeof (name.sun_family);
13329 - /* @r{Send the datagram.} */
13330 - nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0,
13331 - (struct sockaddr *) & name, size);
13332 - if (nbytes < 0)
13333 - @{
13334 - perror ("sendto (client)");
13335 - exit (EXIT_FAILURE);
13336 - @}
13338 - /* @r{Wait for a reply.} */
13339 - nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0);
13340 - if (nbytes < 0)
13341 - @{
13342 - perror ("recfrom (client)");
13343 - exit (EXIT_FAILURE);
13344 - @}
13346 - /* @r{Print a diagnostic message.} */
13347 - fprintf (stderr, "Client: got message: %s\n", message);
13349 - /* @r{Clean up.} */
13350 - remove (CLIENT);
13351 - close (sock);
13353 diff -u -udbrN glibc-2.3.2/manual/filesrv.c.texi glibc-2.3.2-200304020432/manual/filesrv.c.texi
13354 --- glibc-2.3.2/manual/filesrv.c.texi Wed Dec 9 23:51:53 1998
13355 +++ glibc-2.3.2-200304020432/manual/filesrv.c.texi Thu Jan 1 01:00:00 1970
13356 @@ -1,48 +0,0 @@
13357 -#include <stdio.h>
13358 -#include <errno.h>
13359 -#include <stdlib.h>
13360 -#include <sys/socket.h>
13361 -#include <sys/un.h>
13363 -#define SERVER "/tmp/serversocket"
13364 -#define MAXMSG 512
13366 -int
13367 -main (void)
13369 - int sock;
13370 - char message[MAXMSG];
13371 - struct sockaddr_un name;
13372 - size_t size;
13373 - int nbytes;
13375 - /* @r{Remove the filename first, it's ok if the call fails} */
13376 - unlink (SERVER);
13378 - /* @r{Make the socket, then loop endlessly.} */
13379 - sock = make_named_socket (SERVER);
13380 - while (1)
13381 - @{
13382 - /* @r{Wait for a datagram.} */
13383 - size = sizeof (name);
13384 - nbytes = recvfrom (sock, message, MAXMSG, 0,
13385 - (struct sockaddr *) & name, &size);
13386 - if (nbytes < 0)
13387 - @{
13388 - perror ("recfrom (server)");
13389 - exit (EXIT_FAILURE);
13390 - @}
13392 - /* @r{Give a diagnostic message.} */
13393 - fprintf (stderr, "Server: got message: %s\n", message);
13395 - /* @r{Bounce the message back to the sender.} */
13396 - nbytes = sendto (sock, message, nbytes, 0,
13397 - (struct sockaddr *) & name, size);
13398 - if (nbytes < 0)
13399 - @{
13400 - perror ("sendto (server)");
13401 - exit (EXIT_FAILURE);
13402 - @}
13403 - @}
13405 diff -u -udbrN glibc-2.3.2/manual/fmtmsgexpl.c.texi glibc-2.3.2-200304020432/manual/fmtmsgexpl.c.texi
13406 --- glibc-2.3.2/manual/fmtmsgexpl.c.texi Wed Dec 9 23:51:53 1998
13407 +++ glibc-2.3.2-200304020432/manual/fmtmsgexpl.c.texi Thu Jan 1 01:00:00 1970
13408 @@ -1,12 +0,0 @@
13409 -#include <fmtmsg.h>
13411 -int
13412 -main (void)
13414 - addseverity (5, "NOTE2");
13415 - fmtmsg (MM_PRINT, "only1field", MM_INFO, "text2", "action2", "tag2");
13416 - fmtmsg (MM_PRINT, "UX:cat", 5, "invalid syntax", "refer to manual",
13417 - "UX:cat:001");
13418 - fmtmsg (MM_PRINT, "label:foo", 6, "text", "action", "tag");
13419 - return 0;
13421 diff -u -udbrN glibc-2.3.2/manual/genpass.c.texi glibc-2.3.2-200304020432/manual/genpass.c.texi
13422 --- glibc-2.3.2/manual/genpass.c.texi Tue Apr 18 06:13:59 2000
13423 +++ glibc-2.3.2-200304020432/manual/genpass.c.texi Thu Jan 1 01:00:00 1970
13424 @@ -1,32 +0,0 @@
13425 -#include <stdio.h>
13426 -#include <time.h>
13427 -#include <unistd.h>
13428 -#include <crypt.h>
13430 -int
13431 -main(void)
13433 - unsigned long seed[2];
13434 - char salt[] = "$1$........";
13435 - const char *const seedchars =
13436 - "./0123456789ABCDEFGHIJKLMNOPQRST"
13437 - "UVWXYZabcdefghijklmnopqrstuvwxyz";
13438 - char *password;
13439 - int i;
13441 - /* @r{Generate a (not very) random seed.
13442 - You should do it better than this...} */
13443 - seed[0] = time(NULL);
13444 - seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);
13446 - /* @r{Turn it into printable characters from `seedchars'.} */
13447 - for (i = 0; i < 8; i++)
13448 - salt[3+i] = seedchars[(seed[i/5] >> (i%5)*6) & 0x3f];
13450 - /* @r{Read in the user's password and encrypt it.} */
13451 - password = crypt(getpass("Password:"), salt);
13453 - /* @r{Print the results.} */
13454 - puts(password);
13455 - return 0;
13457 diff -u -udbrN glibc-2.3.2/manual/inetcli.c.texi glibc-2.3.2-200304020432/manual/inetcli.c.texi
13458 --- glibc-2.3.2/manual/inetcli.c.texi Wed Dec 9 23:51:53 1998
13459 +++ glibc-2.3.2-200304020432/manual/inetcli.c.texi Thu Jan 1 01:00:00 1970
13460 @@ -1,59 +0,0 @@
13461 -#include <stdio.h>
13462 -#include <errno.h>
13463 -#include <stdlib.h>
13464 -#include <unistd.h>
13465 -#include <sys/types.h>
13466 -#include <sys/socket.h>
13467 -#include <netinet/in.h>
13468 -#include <netdb.h>
13470 -#define PORT 5555
13471 -#define MESSAGE "Yow!!! Are we having fun yet?!?"
13472 -#define SERVERHOST "mescaline.gnu.org"
13474 -void
13475 -write_to_server (int filedes)
13477 - int nbytes;
13479 - nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1);
13480 - if (nbytes < 0)
13481 - @{
13482 - perror ("write");
13483 - exit (EXIT_FAILURE);
13484 - @}
13488 -int
13489 -main (void)
13491 - extern void init_sockaddr (struct sockaddr_in *name,
13492 - const char *hostname,
13493 - uint16_t port);
13494 - int sock;
13495 - struct sockaddr_in servername;
13497 - /* @r{Create the socket.} */
13498 - sock = socket (PF_INET, SOCK_STREAM, 0);
13499 - if (sock < 0)
13500 - @{
13501 - perror ("socket (client)");
13502 - exit (EXIT_FAILURE);
13503 - @}
13505 - /* @r{Connect to the server.} */
13506 - init_sockaddr (&servername, SERVERHOST, PORT);
13507 - if (0 > connect (sock,
13508 - (struct sockaddr *) &servername,
13509 - sizeof (servername)))
13510 - @{
13511 - perror ("connect (client)");
13512 - exit (EXIT_FAILURE);
13513 - @}
13515 - /* @r{Send data to the server.} */
13516 - write_to_server (sock);
13517 - close (sock);
13518 - exit (EXIT_SUCCESS);
13520 diff -u -udbrN glibc-2.3.2/manual/inetsrv.c.texi glibc-2.3.2-200304020432/manual/inetsrv.c.texi
13521 --- glibc-2.3.2/manual/inetsrv.c.texi Wed Dec 9 23:51:53 1998
13522 +++ glibc-2.3.2-200304020432/manual/inetsrv.c.texi Thu Jan 1 01:00:00 1970
13523 @@ -1,103 +0,0 @@
13524 -#include <stdio.h>
13525 -#include <errno.h>
13526 -#include <stdlib.h>
13527 -#include <unistd.h>
13528 -#include <sys/types.h>
13529 -#include <sys/socket.h>
13530 -#include <netinet/in.h>
13531 -#include <netdb.h>
13533 -#define PORT 5555
13534 -#define MAXMSG 512
13536 -int
13537 -read_from_client (int filedes)
13539 - char buffer[MAXMSG];
13540 - int nbytes;
13542 - nbytes = read (filedes, buffer, MAXMSG);
13543 - if (nbytes < 0)
13544 - @{
13545 - /* @r{Read error.} */
13546 - perror ("read");
13547 - exit (EXIT_FAILURE);
13548 - @}
13549 - else if (nbytes == 0)
13550 - /* @r{End-of-file.} */
13551 - return -1;
13552 - else
13553 - @{
13554 - /* @r{Data read.} */
13555 - fprintf (stderr, "Server: got message: `%s'\n", buffer);
13556 - return 0;
13557 - @}
13560 -int
13561 -main (void)
13563 - extern int make_socket (uint16_t port);
13564 - int sock;
13565 - fd_set active_fd_set, read_fd_set;
13566 - int i;
13567 - struct sockaddr_in clientname;
13568 - size_t size;
13570 - /* @r{Create the socket and set it up to accept connections.} */
13571 - sock = make_socket (PORT);
13572 - if (listen (sock, 1) < 0)
13573 - @{
13574 - perror ("listen");
13575 - exit (EXIT_FAILURE);
13576 - @}
13578 - /* @r{Initialize the set of active sockets.} */
13579 - FD_ZERO (&active_fd_set);
13580 - FD_SET (sock, &active_fd_set);
13582 - while (1)
13583 - @{
13584 - /* @r{Block until input arrives on one or more active sockets.} */
13585 - read_fd_set = active_fd_set;
13586 - if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, NULL) < 0)
13587 - @{
13588 - perror ("select");
13589 - exit (EXIT_FAILURE);
13590 - @}
13592 - /* @r{Service all the sockets with input pending.} */
13593 - for (i = 0; i < FD_SETSIZE; ++i)
13594 - if (FD_ISSET (i, &read_fd_set))
13595 - @{
13596 - if (i == sock)
13597 - @{
13598 - /* @r{Connection request on original socket.} */
13599 - int new;
13600 - size = sizeof (clientname);
13601 - new = accept (sock,
13602 - (struct sockaddr *) &clientname,
13603 - &size);
13604 - if (new < 0)
13605 - @{
13606 - perror ("accept");
13607 - exit (EXIT_FAILURE);
13608 - @}
13609 - fprintf (stderr,
13610 - "Server: connect from host %s, port %hd.\n",
13611 - inet_ntoa (clientname.sin_addr),
13612 - ntohs (clientname.sin_port));
13613 - FD_SET (new, &active_fd_set);
13614 - @}
13615 - else
13616 - @{
13617 - /* @r{Data arriving on an already-connected socket.} */
13618 - if (read_from_client (i) < 0)
13619 - @{
13620 - close (i);
13621 - FD_CLR (i, &active_fd_set);
13622 - @}
13623 - @}
13624 - @}
13625 - @}
13627 diff -u -udbrN glibc-2.3.2/manual/isockad.c.texi glibc-2.3.2-200304020432/manual/isockad.c.texi
13628 --- glibc-2.3.2/manual/isockad.c.texi Wed Dec 9 23:51:53 1998
13629 +++ glibc-2.3.2-200304020432/manual/isockad.c.texi Thu Jan 1 01:00:00 1970
13630 @@ -1,23 +0,0 @@
13631 -#include <stdio.h>
13632 -#include <stdlib.h>
13633 -#include <sys/socket.h>
13634 -#include <netinet/in.h>
13635 -#include <netdb.h>
13637 -void
13638 -init_sockaddr (struct sockaddr_in *name,
13639 - const char *hostname,
13640 - uint16_t port)
13642 - struct hostent *hostinfo;
13644 - name->sin_family = AF_INET;
13645 - name->sin_port = htons (port);
13646 - hostinfo = gethostbyname (hostname);
13647 - if (hostinfo == NULL)
13648 - @{
13649 - fprintf (stderr, "Unknown host %s.\n", hostname);
13650 - exit (EXIT_FAILURE);
13651 - @}
13652 - name->sin_addr = *(struct in_addr *) hostinfo->h_addr;
13654 diff -u -udbrN glibc-2.3.2/manual/libc.cp glibc-2.3.2-200304020432/manual/libc.cp
13655 --- glibc-2.3.2/manual/libc.cp Tue Feb 25 11:35:07 2003
13656 +++ glibc-2.3.2-200304020432/manual/libc.cp Thu Jan 1 01:00:00 1970
13657 @@ -1,1058 +0,0 @@
13658 -\entry{library}{1}{library}
13659 -\entry{standards}{1}{standards}
13660 -\entry{ISO C}{2}{ISO C}
13661 -\entry{POSIX}{2}{POSIX}
13662 -\entry{POSIX.1}{2}{POSIX.1}
13663 -\entry{IEEE Std 1003.1}{2}{IEEE Std 1003.1}
13664 -\entry{ISO/IEC 9945-1}{2}{ISO/IEC 9945-1}
13665 -\entry{POSIX.2}{2}{POSIX.2}
13666 -\entry{IEEE Std 1003.2}{2}{IEEE Std 1003.2}
13667 -\entry{ISO/IEC 9945-2}{2}{ISO/IEC 9945-2}
13668 -\entry{BSD Unix}{3}{BSD Unix}
13669 -\entry{4.n BSD Unix}{3}{4.\var {n} BSD Unix}
13670 -\entry{Berkeley Unix}{3}{Berkeley Unix}
13671 -\entry{SunOS}{3}{SunOS}
13672 -\entry{Unix, Berkeley}{3}{Unix, Berkeley}
13673 -\entry{SVID}{3}{SVID}
13674 -\entry{System V Unix}{3}{System V Unix}
13675 -\entry{Unix, System V}{3}{Unix, System V}
13676 -\entry{header files}{4}{header files}
13677 -\entry{definition (compared to declaration)}{4}{definition (compared to declaration)}
13678 -\entry{declaration (compared to definition)}{4}{declaration (compared to definition)}
13679 -\entry{shadowing functions with macros}{5}{shadowing functions with macros}
13680 -\entry{removing macros that shadow functions}{5}{removing macros that shadow functions}
13681 -\entry{undefining macros that shadow functions}{5}{undefining macros that shadow functions}
13682 -\entry{reserved names}{6}{reserved names}
13683 -\entry{name space}{6}{name space}
13684 -\entry{feature test macros}{7}{feature test macros}
13685 -\entry{BSD compatibility library.}{8}{BSD compatibility library.}
13686 -\entry{error reporting}{15}{error reporting}
13687 -\entry{reporting errors}{15}{reporting errors}
13688 -\entry{error codes}{15}{error codes}
13689 -\entry{status codes}{15}{status codes}
13690 -\entry{program name}{27}{program name}
13691 -\entry{name of running program}{27}{name of running program}
13692 -\entry{memory allocation}{31}{memory allocation}
13693 -\entry{storage allocation}{31}{storage allocation}
13694 -\entry{page frame}{31}{page frame}
13695 -\entry{frame, real memory}{31}{frame, real memory}
13696 -\entry{swap space}{31}{swap space}
13697 -\entry{page, virtual memory}{31}{page, virtual memory}
13698 -\entry{page fault}{31}{page fault}
13699 -\entry{paging}{31}{paging}
13700 -\entry{executable}{32}{executable}
13701 -\entry{literals}{32}{literals}
13702 -\entry{constants}{32}{constants}
13703 -\entry{memory mapped I/O}{32}{memory mapped I/O}
13704 -\entry{memory mapped file}{32}{memory mapped file}
13705 -\entry{files, accessing}{32}{files, accessing}
13706 -\entry{execing a program}{32}{execing a program}
13707 -\entry{freeing memory}{32}{freeing memory}
13708 -\entry{exiting a program}{32}{exiting a program}
13709 -\entry{static memory allocation}{33}{static memory allocation}
13710 -\entry{static storage class}{33}{static storage class}
13711 -\entry{automatic memory allocation}{33}{automatic memory allocation}
13712 -\entry{automatic storage class}{33}{automatic storage class}
13713 -\entry{dynamic memory allocation}{33}{dynamic memory allocation}
13714 -\entry{dynamic memory allocation}{33}{dynamic memory allocation}
13715 -\entry{unconstrained memory allocation}{34}{unconstrained memory allocation}
13716 -\entry{malloc function}{34}{\code {malloc} function}
13717 -\entry{heap, dynamic allocation from}{34}{heap, dynamic allocation from}
13718 -\entry{allocation of memory with malloc}{34}{allocation of memory with \code {malloc}}
13719 -\entry{freeing memory allocated with malloc}{35}{freeing memory allocated with \code {malloc}}
13720 -\entry{heap, freeing memory from}{35}{heap, freeing memory from}
13721 -\entry{changing the size of a block (malloc)}{36}{changing the size of a block (\code {malloc})}
13722 -\entry{efficiency and malloc}{37}{efficiency and \code {malloc}}
13723 -\entry{page boundary}{38}{page boundary}
13724 -\entry{alignment (with malloc)}{38}{alignment (with \code {malloc})}
13725 -\entry{heap consistency checking}{39}{heap consistency checking}
13726 -\entry{consistency checking, of heap}{39}{consistency checking, of heap}
13727 -\entry{allocation hooks, for malloc}{41}{allocation hooks, for \code {malloc}}
13728 -\entry{allocation statistics}{43}{allocation statistics}
13729 -\entry{allocation debugging}{45}{allocation debugging}
13730 -\entry{malloc debugger}{45}{malloc debugger}
13731 -\entry{obstacks}{49}{obstacks}
13732 -\entry{allocation (obstacks)}{51}{allocation (obstacks)}
13733 -\entry{freeing (obstacks)}{52}{freeing (obstacks)}
13734 -\entry{macros}{52}{macros}
13735 -\entry{growing objects (in obstacks)}{53}{growing objects (in obstacks)}
13736 -\entry{changing the size of a block (obstacks)}{53}{changing the size of a block (obstacks)}
13737 -\entry{shrinking objects}{54}{shrinking objects}
13738 -\entry{efficiency and obstacks}{55}{efficiency and obstacks}
13739 -\entry{obstack status}{56}{obstack status}
13740 -\entry{status of obstack}{56}{status of obstack}
13741 -\entry{alignment (in obstacks)}{56}{alignment (in obstacks)}
13742 -\entry{efficiency of chunks}{57}{efficiency of chunks}
13743 -\entry{chunks}{57}{chunks}
13744 -\entry{automatic freeing}{59}{automatic freeing}
13745 -\entry{alloca function}{59}{\code {alloca} function}
13746 -\entry{automatic storage with variable size}{59}{automatic storage with variable size}
13747 -\entry{longjmp}{60}{longjmp}
13748 -\entry{alloca disadvantages}{61}{\code {alloca} disadvantages}
13749 -\entry{disadvantages of alloca}{61}{disadvantages of \code {alloca}}
13750 -\entry{variable-sized arrays}{61}{variable-sized arrays}
13751 -\entry{locking pages}{62}{locking pages}
13752 -\entry{memory lock}{62}{memory lock}
13753 -\entry{paging}{62}{paging}
13754 -\entry{realtime processing}{62}{realtime processing}
13755 -\entry{speed of execution}{62}{speed of execution}
13756 -\entry{copy-on-write page fault}{63}{copy-on-write page fault}
13757 -\entry{page fault, copy-on-write}{63}{page fault, copy-on-write}
13758 -\entry{character testing}{67}{character testing}
13759 -\entry{classification of characters}{67}{classification of characters}
13760 -\entry{predicates on characters}{67}{predicates on characters}
13761 -\entry{character predicates}{67}{character predicates}
13762 -\entry{lower-case character}{67}{lower-case character}
13763 -\entry{upper-case character}{67}{upper-case character}
13764 -\entry{alphabetic character}{67}{alphabetic character}
13765 -\entry{digit character}{67}{digit character}
13766 -\entry{decimal digit character}{67}{decimal digit character}
13767 -\entry{alphanumeric character}{68}{alphanumeric character}
13768 -\entry{hexadecimal digit character}{68}{hexadecimal digit character}
13769 -\entry{punctuation character}{68}{punctuation character}
13770 -\entry{whitespace character}{68}{whitespace character}
13771 -\entry{blank character}{68}{blank character}
13772 -\entry{graphic character}{68}{graphic character}
13773 -\entry{printing character}{68}{printing character}
13774 -\entry{control character}{68}{control character}
13775 -\entry{ASCII character}{68}{ASCII character}
13776 -\entry{character case conversion}{69}{character case conversion}
13777 -\entry{case conversion of characters}{69}{case conversion of characters}
13778 -\entry{converting case of characters}{69}{converting case of characters}
13779 -\entry{alphanumeric character}{70}{alphanumeric character}
13780 -\entry{alphabetic character}{70}{alphabetic character}
13781 -\entry{control character}{71}{control character}
13782 -\entry{digit character}{71}{digit character}
13783 -\entry{graphic character}{71}{graphic character}
13784 -\entry{lower-case character}{71}{lower-case character}
13785 -\entry{printing character}{71}{printing character}
13786 -\entry{punctuation character}{72}{punctuation character}
13787 -\entry{whitespace character}{72}{whitespace character}
13788 -\entry{upper-case character}{72}{upper-case character}
13789 -\entry{hexadecimal digit character}{72}{hexadecimal digit character}
13790 -\entry{blank character}{72}{blank character}
13791 -\entry{string, representation of}{75}{string, representation of}
13792 -\entry{string}{75}{string}
13793 -\entry{multibyte character string}{75}{multibyte character string}
13794 -\entry{wide character string}{75}{wide character string}
13795 -\entry{null character}{75}{null character}
13796 -\entry{null wide character}{75}{null wide character}
13797 -\entry{string literal}{75}{string literal}
13798 -\entry{length of string}{76}{length of string}
13799 -\entry{allocation size of string}{76}{allocation size of string}
13800 -\entry{size of string}{76}{size of string}
13801 -\entry{string length}{76}{string length}
13802 -\entry{string allocation}{76}{string allocation}
13803 -\entry{single-byte string}{76}{single-byte string}
13804 -\entry{multibyte string}{76}{multibyte string}
13805 -\entry{wide character string}{76}{wide character string}
13806 -\entry{wint_t}{77}{wint_t}
13807 -\entry{parameter promotion}{77}{parameter promotion}
13808 -\entry{copying strings and arrays}{79}{copying strings and arrays}
13809 -\entry{string copy functions}{79}{string copy functions}
13810 -\entry{array copy functions}{79}{array copy functions}
13811 -\entry{concatenating strings}{79}{concatenating strings}
13812 -\entry{string concatenation functions}{79}{string concatenation functions}
13813 -\entry{__va_copy}{85}{__va_copy}
13814 -\entry{va_copy}{85}{va_copy}
13815 -\entry{comparing strings and arrays}{89}{comparing strings and arrays}
13816 -\entry{string comparison functions}{89}{string comparison functions}
13817 -\entry{array comparison functions}{89}{array comparison functions}
13818 -\entry{predicates on strings}{89}{predicates on strings}
13819 -\entry{predicates on arrays}{89}{predicates on arrays}
13820 -\entry{collating strings}{92}{collating strings}
13821 -\entry{string collation functions}{92}{string collation functions}
13822 -\entry{converting string to collation order}{93}{converting string to collation order}
13823 -\entry{search functions (for strings)}{96}{search functions (for strings)}
13824 -\entry{string search functions}{96}{string search functions}
13825 -\entry{tokenizing strings}{100}{tokenizing strings}
13826 -\entry{breaking a string into tokens}{100}{breaking a string into tokens}
13827 -\entry{parsing tokens from a string}{100}{parsing tokens from a string}
13828 -\entry{encryption}{105}{encryption}
13829 -\entry{Rot13}{105}{Rot13}
13830 -\entry{argz vectors (string vectors)}{107}{argz vectors (string vectors)}
13831 -\entry{string vectors, null-character separated}{107}{string vectors, null-character separated}
13832 -\entry{argument vectors, null-character separated}{107}{argument vectors, null-character separated}
13833 -\entry{envz vectors (environment vectors)}{107}{envz vectors (environment vectors)}
13834 -\entry{environment vectors, null-character separated}{107}{environment vectors, null-character separated}
13835 -\entry{internal representation}{111}{internal representation}
13836 -\entry{wide character}{111}{wide character}
13837 -\entry{Unicode}{111}{Unicode}
13838 -\entry{ISO 10646}{111}{ISO 10646}
13839 -\entry{UCS-2}{111}{UCS-2}
13840 -\entry{UCS-4}{111}{UCS-4}
13841 -\entry{UTF-8}{111}{UTF-8}
13842 -\entry{UTF-16}{111}{UTF-16}
13843 -\entry{multibyte character}{113}{multibyte character}
13844 -\entry{EBCDIC}{113}{EBCDIC}
13845 -\entry{ISO 2022}{113}{ISO 2022}
13846 -\entry{EUC}{113}{EUC}
13847 -\entry{Shift_JIS}{113}{Shift_JIS}
13848 -\entry{SJIS}{113}{SJIS}
13849 -\entry{ISO 6937}{114}{ISO 6937}
13850 -\entry{UTF-8}{114}{UTF-8}
13851 -\entry{UTF-7}{114}{UTF-7}
13852 -\entry{stateful}{116}{stateful}
13853 -\entry{shift state}{116}{shift state}
13854 -\entry{stateful}{119}{stateful}
13855 -\entry{stateful}{124}{stateful}
13856 -\entry{stateful}{134}{stateful}
13857 -\entry{stateful}{136}{stateful}
13858 -\entry{triangulation}{139}{triangulation}
13859 -\entry{ISO-2022-JP}{139}{ISO-2022-JP}
13860 -\entry{EUC-JP}{139}{EUC-JP}
13861 -\entry{stateful}{148}{stateful}
13862 -\entry{internationalization}{153}{internationalization}
13863 -\entry{locales}{153}{locales}
13864 -\entry{combining locales}{154}{combining locales}
13865 -\entry{categories for locales}{154}{categories for locales}
13866 -\entry{locale categories}{154}{locale categories}
13867 -\entry{changing the locale}{155}{changing the locale}
13868 -\entry{locale, changing}{155}{locale, changing}
13869 -\entry{monetary value formatting}{158}{monetary value formatting}
13870 -\entry{numeric value formatting}{158}{numeric value formatting}
13871 -\entry{decimal-point separator}{158}{decimal-point separator}
13872 -\entry{grouping of digits}{158}{grouping of digits}
13873 -\entry{currency symbols}{159}{currency symbols}
13874 -\entry{NLSPATH environment variable}{172}{NLSPATH environment variable}
13875 -\entry{LC_ALL environment variable}{173}{LC_ALL environment variable}
13876 -\entry{LC_MESSAGES environment variable}{173}{LC_MESSAGES environment variable}
13877 -\entry{LANG environment variable}{173}{LANG environment variable}
13878 -\entry{gencat}{176}{gencat}
13879 -\entry{sgettext}{190}{sgettext}
13880 -\entry{sgettext}{190}{sgettext}
13881 -\entry{Comparison Function}{195}{Comparison Function}
13882 -\entry{search function (for arrays)}{195}{search function (for arrays)}
13883 -\entry{binary search function (for arrays)}{195}{binary search function (for arrays)}
13884 -\entry{array search function}{195}{array search function}
13885 -\entry{sort function (for arrays)}{196}{sort function (for arrays)}
13886 -\entry{quick sort function (for arrays)}{196}{quick sort function (for arrays)}
13887 -\entry{array sort function}{196}{array sort function}
13888 -\entry{stable sorting}{196}{stable sorting}
13889 -\entry{Kermit the frog}{199}{Kermit the frog}
13890 -\entry{Korn Shell}{206}{Korn Shell}
13891 -\entry{globbing}{206}{globbing}
13892 -\entry{word expansion}{218}{word expansion}
13893 -\entry{expansion of shell words}{218}{expansion of shell words}
13894 -\entry{tilde expansion}{219}{tilde expansion}
13895 -\entry{variable substitution}{219}{variable substitution}
13896 -\entry{substitution of variables and commands}{219}{substitution of variables and commands}
13897 -\entry{command substitution}{219}{command substitution}
13898 -\entry{arithmetic expansion}{219}{arithmetic expansion}
13899 -\entry{field splitting}{219}{field splitting}
13900 -\entry{wildcard expansion}{219}{wildcard expansion}
13901 -\entry{quote removal}{219}{quote removal}
13902 -\entry{removal of quotes}{219}{removal of quotes}
13903 -\entry{opening a file}{225}{opening a file}
13904 -\entry{file position}{226}{file position}
13905 -\entry{sequential-access files}{226}{sequential-access files}
13906 -\entry{random-access files}{226}{random-access files}
13907 -\entry{append-access files}{227}{append-access files}
13908 -\entry{file name}{227}{file name}
13909 -\entry{directory}{227}{directory}
13910 -\entry{link}{227}{link}
13911 -\entry{directory entry}{227}{directory entry}
13912 -\entry{file name component}{227}{file name component}
13913 -\entry{file name resolution}{228}{file name resolution}
13914 -\entry{root directory}{228}{root directory}
13915 -\entry{absolute file name}{228}{absolute file name}
13916 -\entry{relative file name}{228}{relative file name}
13917 -\entry{parent directory}{228}{parent directory}
13918 -\entry{file name errors}{229}{file name errors}
13919 -\entry{usual file name errors}{229}{usual file name errors}
13920 -\entry{file pointer}{231}{file pointer}
13921 -\entry{standard streams}{231}{standard streams}
13922 -\entry{streams, standard}{231}{streams, standard}
13923 -\entry{standard input stream}{231}{standard input stream}
13924 -\entry{standard output stream}{231}{standard output stream}
13925 -\entry{standard error stream}{232}{standard error stream}
13926 -\entry{opening a stream}{232}{opening a stream}
13927 -\entry{stream orientation}{233}{stream orientation}
13928 -\entry{orientation, stream}{233}{orientation, stream}
13929 -\entry{closing a stream}{235}{closing a stream}
13930 -\entry{threads}{236}{threads}
13931 -\entry{multi-threaded application}{236}{multi-threaded application}
13932 -\entry{C++ streams}{239}{C++ streams}
13933 -\entry{streams, C++}{239}{streams, C++}
13934 -\entry{orientation, stream}{240}{orientation, stream}
13935 -\entry{stream orientation}{240}{stream orientation}
13936 -\entry{writing to a stream, by characters}{241}{writing to a stream, by characters}
13937 -\entry{reading from a stream, by characters}{243}{reading from a stream, by characters}
13938 -\entry{peeking at input}{247}{peeking at input}
13939 -\entry{unreading characters}{247}{unreading characters}
13940 -\entry{pushing input back}{247}{pushing input back}
13941 -\entry{binary I/O to a stream}{249}{binary I/O to a stream}
13942 -\entry{block I/O to a stream}{249}{block I/O to a stream}
13943 -\entry{reading from a stream, by blocks}{249}{reading from a stream, by blocks}
13944 -\entry{writing to a stream, by blocks}{249}{writing to a stream, by blocks}
13945 -\entry{format string, for printf}{250}{format string, for \code {printf}}
13946 -\entry{template, for printf}{250}{template, for \code {printf}}
13947 -\entry{formatted output to a stream}{250}{formatted output to a stream}
13948 -\entry{writing to a stream, formatted}{250}{writing to a stream, formatted}
13949 -\entry{conversion specifications (printf)}{250}{conversion specifications (\code {printf})}
13950 -\entry{flag character (printf)}{252}{flag character (\code {printf})}
13951 -\entry{minimum field width (printf)}{252}{minimum field width (\code {printf})}
13952 -\entry{precision (printf)}{252}{precision (\code {printf})}
13953 -\entry{type modifier character (printf)}{252}{type modifier character (\code {printf})}
13954 -\entry{output conversions, for printf}{252}{output conversions, for \code {printf}}
13955 -\entry{parsing a template string}{263}{parsing a template string}
13956 -\entry{customizing printf}{266}{customizing \code {printf}}
13957 -\entry{defining new printf conversions}{266}{defining new \code {printf} conversions}
13958 -\entry{extending printf}{266}{extending \code {printf}}
13959 -\entry{formatted input from a stream}{272}{formatted input from a stream}
13960 -\entry{reading from a stream, formatted}{272}{reading from a stream, formatted}
13961 -\entry{format string, for scanf}{272}{format string, for \code {scanf}}
13962 -\entry{template, for scanf}{272}{template, for \code {scanf}}
13963 -\entry{conversion specifications (scanf)}{272}{conversion specifications (\code {scanf})}
13964 -\entry{matching failure, in scanf}{272}{matching failure, in \code {scanf}}
13965 -\entry{flag character (scanf)}{273}{flag character (\code {scanf})}
13966 -\entry{maximum field width (scanf)}{273}{maximum field width (\code {scanf})}
13967 -\entry{type modifier character (scanf)}{273}{type modifier character (\code {scanf})}
13968 -\entry{input conversions, for scanf}{274}{input conversions, for \code {scanf}}
13969 -\entry{end of file, on a stream}{281}{end of file, on a stream}
13970 -\entry{text stream}{283}{text stream}
13971 -\entry{binary stream}{283}{binary stream}
13972 -\entry{lines (in a text file)}{283}{lines (in a text file)}
13973 -\entry{file positioning on a stream}{284}{file positioning on a stream}
13974 -\entry{positioning a stream}{284}{positioning a stream}
13975 -\entry{seeking on a stream}{284}{seeking on a stream}
13976 -\entry{buffering of streams}{288}{buffering of streams}
13977 -\entry{unbuffered stream}{288}{unbuffered stream}
13978 -\entry{line buffered stream}{288}{line buffered stream}
13979 -\entry{fully buffered stream}{288}{fully buffered stream}
13980 -\entry{flushing a stream}{289}{flushing a stream}
13981 -\entry{buffering, controlling}{290}{buffering, controlling}
13982 -\entry{stream, for I/O to a string}{292}{stream, for I/O to a string}
13983 -\entry{string stream}{292}{string stream}
13984 -\entry{custom streams}{295}{custom streams}
13985 -\entry{programming your own streams}{295}{programming your own streams}
13986 -\entry{cookie, for custom stream}{295}{cookie, for custom stream}
13987 -\entry{hook functions (of custom streams)}{296}{hook functions (of custom streams)}
13988 -\entry{formatted messages}{297}{formatted messages}
13989 -\entry{severity class}{298}{severity class}
13990 -\entry{severity class}{300}{severity class}
13991 -\entry{opening a file descriptor}{303}{opening a file descriptor}
13992 -\entry{closing a file descriptor}{303}{closing a file descriptor}
13993 -\entry{reading from a file descriptor}{306}{reading from a file descriptor}
13994 -\entry{end-of-file, on a file descriptor}{306}{end-of-file, on a file descriptor}
13995 -\entry{writing to a file descriptor}{308}{writing to a file descriptor}
13996 -\entry{file positioning on a file descriptor}{310}{file positioning on a file descriptor}
13997 -\entry{positioning a file descriptor}{310}{positioning a file descriptor}
13998 -\entry{seeking on a file descriptor}{310}{seeking on a file descriptor}
13999 -\entry{sparse files}{311}{sparse files}
14000 -\entry{holes in files}{311}{holes in files}
14001 -\entry{streams, and file descriptors}{313}{streams, and file descriptors}
14002 -\entry{converting file descriptor to stream}{313}{converting file descriptor to stream}
14003 -\entry{extracting file descriptor from stream}{313}{extracting file descriptor from stream}
14004 -\entry{standard file descriptors}{313}{standard file descriptors}
14005 -\entry{file descriptors, standard}{313}{file descriptors, standard}
14006 -\entry{standard input file descriptor}{313}{standard input file descriptor}
14007 -\entry{standard output file descriptor}{313}{standard output file descriptor}
14008 -\entry{standard error file descriptor}{313}{standard error file descriptor}
14009 -\entry{channels}{314}{channels}
14010 -\entry{streams and descriptors}{314}{streams and descriptors}
14011 -\entry{descriptors and streams}{314}{descriptors and streams}
14012 -\entry{mixing descriptors and streams}{314}{mixing descriptors and streams}
14013 -\entry{linked channels}{314}{linked channels}
14014 -\entry{cleaning up a stream}{314}{cleaning up a stream}
14015 -\entry{independent channels}{314}{independent channels}
14016 -\entry{scatter-gather}{315}{scatter-gather}
14017 -\entry{waiting for input or output}{321}{waiting for input or output}
14018 -\entry{multiplexing input}{321}{multiplexing input}
14019 -\entry{input from multiple files}{321}{input from multiple files}
14020 -\entry{file descriptor sets, for select}{321}{file descriptor sets, for \code {select}}
14021 -\entry{synchronizing}{323}{synchronizing}
14022 -\entry{synchronizing}{332}{synchronizing}
14023 -\entry{control operations on files}{336}{control operations on files}
14024 -\entry{fcntl function}{336}{\code {fcntl} function}
14025 -\entry{duplicating file descriptors}{337}{duplicating file descriptors}
14026 -\entry{redirecting input and output}{337}{redirecting input and output}
14027 -\entry{file descriptor flags}{339}{file descriptor flags}
14028 -\entry{close-on-exec (file descriptor flag)}{339}{close-on-exec (file descriptor flag)}
14029 -\entry{file status flags}{340}{file status flags}
14030 -\entry{file name translation flags}{341}{file name translation flags}
14031 -\entry{flags, file name translation}{341}{flags, file name translation}
14032 -\entry{open-time action flags}{342}{open-time action flags}
14033 -\entry{flags, open-time action}{342}{flags, open-time action}
14034 -\entry{create on open (file status flag)}{342}{create on open (file status flag)}
14035 -\entry{non-blocking open}{342}{non-blocking open}
14036 -\entry{controlling terminal, setting}{342}{controlling terminal, setting}
14037 -\entry{symbolic link, opening}{342}{symbolic link, opening}
14038 -\entry{file locks}{345}{file locks}
14039 -\entry{record locking}{345}{record locking}
14040 -\entry{exclusive lock}{345}{exclusive lock}
14041 -\entry{write lock}{345}{write lock}
14042 -\entry{shared lock}{345}{shared lock}
14043 -\entry{read lock}{345}{read lock}
14044 -\entry{interrupt-driven input}{348}{interrupt-driven input}
14045 -\entry{generic i/o control operations}{349}{generic i/o control operations}
14046 -\entry{IOCTLs}{349}{IOCTLs}
14047 -\entry{current working directory}{351}{current working directory}
14048 -\entry{working directory}{351}{working directory}
14049 -\entry{change working directory}{351}{change working directory}
14050 -\entry{accessing directories}{353}{accessing directories}
14051 -\entry{reading from a directory}{353}{reading from a directory}
14052 -\entry{directories, accessing}{353}{directories, accessing}
14053 -\entry{directory stream}{353}{directory stream}
14054 -\entry{directory hierarchy}{360}{directory hierarchy}
14055 -\entry{hierarchy, directory}{360}{hierarchy, directory}
14056 -\entry{tree, directory}{360}{tree, directory}
14057 -\entry{hard link}{363}{hard link}
14058 -\entry{link, hard}{363}{link, hard}
14059 -\entry{multiple names for one file}{363}{multiple names for one file}
14060 -\entry{file names, multiple}{363}{file names, multiple}
14061 -\entry{soft link}{364}{soft link}
14062 -\entry{link, soft}{364}{link, soft}
14063 -\entry{symbolic link}{364}{symbolic link}
14064 -\entry{link, symbolic}{364}{link, symbolic}
14065 -\entry{deleting a file}{367}{deleting a file}
14066 -\entry{removing a file}{367}{removing a file}
14067 -\entry{unlinking a file}{367}{unlinking a file}
14068 -\entry{directories, deleting}{368}{directories, deleting}
14069 -\entry{deleting a directory}{368}{deleting a directory}
14070 -\entry{renaming a file}{368}{renaming a file}
14071 -\entry{creating a directory}{369}{creating a directory}
14072 -\entry{directories, creating}{369}{directories, creating}
14073 -\entry{status of a file}{370}{status of a file}
14074 -\entry{attributes of a file}{370}{attributes of a file}
14075 -\entry{file attributes}{370}{file attributes}
14076 -\entry{inode number}{373}{inode number}
14077 -\entry{file owner}{377}{file owner}
14078 -\entry{owner of a file}{377}{owner of a file}
14079 -\entry{group owner of a file}{377}{group owner of a file}
14080 -\entry{file permission bits}{378}{file permission bits}
14081 -\entry{sticky bit}{379}{sticky bit}
14082 -\entry{permission to access a file}{380}{permission to access a file}
14083 -\entry{access permission for a file}{380}{access permission for a file}
14084 -\entry{file access permission}{380}{file access permission}
14085 -\entry{file creation mask}{380}{file creation mask}
14086 -\entry{umask}{380}{umask}
14087 -\entry{testing access permission}{382}{testing access permission}
14088 -\entry{access, testing for}{382}{access, testing for}
14089 -\entry{setuid programs and file access}{382}{setuid programs and file access}
14090 -\entry{file access time}{383}{file access time}
14091 -\entry{file modification time}{383}{file modification time}
14092 -\entry{file attribute modification time}{383}{file attribute modification time}
14093 -\entry{creating special files}{388}{creating special files}
14094 -\entry{special files}{388}{special files}
14095 -\entry{TMPDIR environment variable}{390}{TMPDIR environment variable}
14096 -\entry{pipe}{393}{pipe}
14097 -\entry{FIFO special file}{393}{FIFO special file}
14098 -\entry{creating a pipe}{393}{creating a pipe}
14099 -\entry{opening a pipe}{393}{opening a pipe}
14100 -\entry{interprocess communication, with pipes}{393}{interprocess communication, with pipes}
14101 -\entry{creating a pipe to a subprocess}{395}{creating a pipe to a subprocess}
14102 -\entry{pipe to a subprocess}{395}{pipe to a subprocess}
14103 -\entry{filtering i/o through subprocess}{395}{filtering i/o through subprocess}
14104 -\entry{creating a FIFO special file}{396}{creating a FIFO special file}
14105 -\entry{interprocess communication, with FIFO}{396}{interprocess communication, with FIFO}
14106 -\entry{socket}{399}{socket}
14107 -\entry{interprocess communication, with sockets}{399}{interprocess communication, with sockets}
14108 -\entry{communication style (of a socket)}{399}{communication style (of a socket)}
14109 -\entry{style of communication (of a socket)}{399}{style of communication (of a socket)}
14110 -\entry{packet}{399}{packet}
14111 -\entry{byte stream}{399}{byte stream}
14112 -\entry{stream (sockets)}{399}{stream (sockets)}
14113 -\entry{loss of data on sockets}{399}{loss of data on sockets}
14114 -\entry{data loss on sockets}{399}{data loss on sockets}
14115 -\entry{namespace (of socket)}{399}{namespace (of socket)}
14116 -\entry{domain (of socket)}{399}{domain (of socket)}
14117 -\entry{socket namespace}{399}{socket namespace}
14118 -\entry{socket domain}{399}{socket domain}
14119 -\entry{network protocol}{399}{network protocol}
14120 -\entry{protocol (of socket)}{399}{protocol (of socket)}
14121 -\entry{socket protocol}{399}{socket protocol}
14122 -\entry{protocol family}{399}{protocol family}
14123 -\entry{address of socket}{401}{address of socket}
14124 -\entry{name of socket}{401}{name of socket}
14125 -\entry{binding a socket address}{401}{binding a socket address}
14126 -\entry{socket address (name) binding}{401}{socket address (name) binding}
14127 -\entry{local namespace, for sockets}{405}{local namespace, for sockets}
14128 -\entry{Internet namespace, for sockets}{407}{Internet namespace, for sockets}
14129 -\entry{host address, Internet}{409}{host address, Internet}
14130 -\entry{Internet host address}{409}{Internet host address}
14131 -\entry{network number}{409}{network number}
14132 -\entry{local network address number}{409}{local network address number}
14133 -\entry{standard dot notation, for Internet addresses}{409}{standard dot notation, for Internet addresses}
14134 -\entry{dot notation, for Internet addresses}{409}{dot notation, for Internet addresses}
14135 -\entry{hosts database}{413}{hosts database}
14136 -\entry{converting host name to address}{413}{converting host name to address}
14137 -\entry{converting host address to name}{413}{converting host address to name}
14138 -\entry{port number}{416}{port number}
14139 -\entry{services database}{417}{services database}
14140 -\entry{converting service name to port number}{417}{converting service name to port number}
14141 -\entry{converting port number to service name}{417}{converting port number to service name}
14142 -\entry{byte order conversion, for socket}{418}{byte order conversion, for socket}
14143 -\entry{converting byte order}{418}{converting byte order}
14144 -\entry{big-endian}{418}{big-endian}
14145 -\entry{little-endian}{418}{little-endian}
14146 -\entry{network byte order}{418}{network byte order}
14147 -\entry{protocols database}{419}{protocols database}
14148 -\entry{TCP (Internet protocol)}{419}{TCP (Internet protocol)}
14149 -\entry{creating a socket}{422}{creating a socket}
14150 -\entry{socket, creating}{422}{socket, creating}
14151 -\entry{opening a socket}{422}{opening a socket}
14152 -\entry{socket, closing}{422}{socket, closing}
14153 -\entry{closing a socket}{422}{closing a socket}
14154 -\entry{shutting down a socket}{422}{shutting down a socket}
14155 -\entry{socket shutdown}{422}{socket shutdown}
14156 -\entry{creating a socket pair}{423}{creating a socket pair}
14157 -\entry{socket pair}{423}{socket pair}
14158 -\entry{opening a socket pair}{423}{opening a socket pair}
14159 -\entry{connection}{424}{connection}
14160 -\entry{client}{424}{client}
14161 -\entry{server}{424}{server}
14162 -\entry{connecting a socket}{424}{connecting a socket}
14163 -\entry{socket, connecting}{424}{socket, connecting}
14164 -\entry{socket, initiating a connection}{424}{socket, initiating a connection}
14165 -\entry{socket, client actions}{424}{socket, client actions}
14166 -\entry{listening (sockets)}{425}{listening (sockets)}
14167 -\entry{sockets, server actions}{425}{sockets, server actions}
14168 -\entry{sockets, listening}{425}{sockets, listening}
14169 -\entry{sockets, accepting connections}{426}{sockets, accepting connections}
14170 -\entry{accepting connections}{426}{accepting connections}
14171 -\entry{reading from a socket}{427}{reading from a socket}
14172 -\entry{writing to a socket}{427}{writing to a socket}
14173 -\entry{out-of-band data}{433}{out-of-band data}
14174 -\entry{high-priority data}{433}{high-priority data}
14175 -\entry{urgent socket condition}{433}{urgent socket condition}
14176 -\entry{datagram socket}{435}{datagram socket}
14177 -\entry{sending a datagram}{436}{sending a datagram}
14178 -\entry{transmitting datagrams}{436}{transmitting datagrams}
14179 -\entry{datagrams, transmitting}{436}{datagrams, transmitting}
14180 -\entry{receiving datagrams}{436}{receiving datagrams}
14181 -\entry{socket options}{441}{socket options}
14182 -\entry{level, for socket options}{441}{level, for socket options}
14183 -\entry{socket option level}{441}{socket option level}
14184 -\entry{networks database}{443}{networks database}
14185 -\entry{converting network number to network name}{443}{converting network number to network name}
14186 -\entry{converting network name to network number}{443}{converting network name to network number}
14187 -\entry{terminal identification}{445}{terminal identification}
14188 -\entry{identifying terminals}{445}{identifying terminals}
14189 -\entry{terminal input queue}{446}{terminal input queue}
14190 -\entry{typeahead buffer}{446}{typeahead buffer}
14191 -\entry{terminal output queue}{446}{terminal output queue}
14192 -\entry{canonical input processing}{446}{canonical input processing}
14193 -\entry{noncanonical input processing}{446}{noncanonical input processing}
14194 -\entry{terminal mode data types}{447}{terminal mode data types}
14195 -\entry{terminal mode functions}{448}{terminal mode functions}
14196 -\entry{parity checking}{450}{parity checking}
14197 -\entry{break condition, detecting}{451}{break condition, detecting}
14198 -\entry{modem status lines}{453}{modem status lines}
14199 -\entry{carrier detect}{453}{carrier detect}
14200 -\entry{modem disconnect}{453}{modem disconnect}
14201 -\entry{echo of terminal input}{455}{echo of terminal input}
14202 -\entry{interactive signals, from terminal}{456}{interactive signals, from terminal}
14203 -\entry{line speed}{457}{line speed}
14204 -\entry{baud rate}{457}{baud rate}
14205 -\entry{terminal line speed}{457}{terminal line speed}
14206 -\entry{terminal line speed}{457}{terminal line speed}
14207 -\entry{EOF character}{458}{EOF character}
14208 -\entry{EOL character}{459}{EOL character}
14209 -\entry{EOL2 character}{459}{EOL2 character}
14210 -\entry{ERASE character}{459}{ERASE character}
14211 -\entry{WERASE character}{459}{WERASE character}
14212 -\entry{KILL character}{460}{KILL character}
14213 -\entry{REPRINT character}{460}{REPRINT character}
14214 -\entry{INTR character}{460}{INTR character}
14215 -\entry{interrupt character}{460}{interrupt character}
14216 -\entry{QUIT character}{460}{QUIT character}
14217 -\entry{SUSP character}{460}{SUSP character}
14218 -\entry{suspend character}{460}{suspend character}
14219 -\entry{DSUSP character}{461}{DSUSP character}
14220 -\entry{delayed suspend character}{461}{delayed suspend character}
14221 -\entry{START character}{461}{START character}
14222 -\entry{STOP character}{461}{STOP character}
14223 -\entry{LNEXT character}{462}{LNEXT character}
14224 -\entry{DISCARD character}{462}{DISCARD character}
14225 -\entry{STATUS character}{462}{STATUS character}
14226 -\entry{MIN termios slot}{463}{MIN termios slot}
14227 -\entry{TIME termios slot}{463}{TIME termios slot}
14228 -\entry{terminal modes, BSD}{464}{terminal modes, BSD}
14229 -\entry{terminal line control functions}{465}{terminal line control functions}
14230 -\entry{break condition, generating}{465}{break condition, generating}
14231 -\entry{flushing terminal output queue}{465}{flushing terminal output queue}
14232 -\entry{terminal output queue, flushing}{465}{terminal output queue, flushing}
14233 -\entry{clearing terminal input queue}{465}{clearing terminal input queue}
14234 -\entry{terminal input queue, clearing}{465}{terminal input queue, clearing}
14235 -\entry{flow control, terminal}{466}{flow control, terminal}
14236 -\entry{terminal flow control}{466}{terminal flow control}
14237 -\entry{pseudo-terminals}{468}{pseudo-terminals}
14238 -\entry{allocating pseudo-terminals}{468}{allocating pseudo-terminals}
14239 -\entry{opening a pseudo-terminal pair}{470}{opening a pseudo-terminal pair}
14240 -\entry{constants}{479}{constants}
14241 -\entry{mathematical constants}{479}{mathematical constants}
14242 -\entry{trigonometric functions}{480}{trigonometric functions}
14243 -\entry{pi (trigonometric constant)}{480}{pi (trigonometric constant)}
14244 -\entry{complex trigonometric functions}{481}{complex trigonometric functions}
14245 -\entry{inverse trigonometric functions}{481}{inverse trigonometric functions}
14246 -\entry{inverse complex trigonometric functions}{482}{inverse complex trigonometric functions}
14247 -\entry{exponentiation functions}{483}{exponentiation functions}
14248 -\entry{power functions}{483}{power functions}
14249 -\entry{logarithm functions}{483}{logarithm functions}
14250 -\entry{square root function}{485}{square root function}
14251 -\entry{cube root function}{485}{cube root function}
14252 -\entry{complex exponentiation functions}{485}{complex exponentiation functions}
14253 -\entry{complex logarithm functions}{485}{complex logarithm functions}
14254 -\entry{hyperbolic functions}{486}{hyperbolic functions}
14255 -\entry{hyperbolic functions}{487}{hyperbolic functions}
14256 -\entry{inverse hyperbolic functions}{487}{inverse hyperbolic functions}
14257 -\entry{inverse complex hyperbolic functions}{487}{inverse complex hyperbolic functions}
14258 -\entry{special functions}{488}{special functions}
14259 -\entry{Bessel functions}{488}{Bessel functions}
14260 -\entry{gamma function}{488}{gamma function}
14261 -\entry{math errors}{490}{math errors}
14262 -\entry{ulps}{490}{ulps}
14263 -\entry{random numbers}{508}{random numbers}
14264 -\entry{pseudo-random numbers}{508}{pseudo-random numbers}
14265 -\entry{seed (for random numbers)}{508}{seed (for random numbers)}
14266 -\entry{Optimization}{515}{Optimization}
14267 -\entry{integer}{517}{integer}
14268 -\entry{signedness}{517}{signedness}
14269 -\entry{maximum possible integer}{518}{maximum possible integer}
14270 -\entry{minimum possible integer}{518}{minimum possible integer}
14271 -\entry{integer division functions}{518}{integer division functions}
14272 -\entry{floating point}{520}{floating point}
14273 -\entry{IEEE 754}{520}{IEEE 754}
14274 -\entry{IEEE floating point}{520}{IEEE floating point}
14275 -\entry{floating-point classes}{520}{floating-point classes}
14276 -\entry{classes, floating-point}{520}{classes, floating-point}
14277 -\entry{exception}{522}{exception}
14278 -\entry{signal}{522}{signal}
14279 -\entry{zero divide}{522}{zero divide}
14280 -\entry{division by zero}{522}{division by zero}
14281 -\entry{inexact exception}{522}{inexact exception}
14282 -\entry{invalid exception}{522}{invalid exception}
14283 -\entry{overflow exception}{522}{overflow exception}
14284 -\entry{underflow exception}{522}{underflow exception}
14285 -\entry{infinity}{524}{infinity}
14286 -\entry{not a number}{524}{not a number}
14287 -\entry{NaN}{524}{NaN}
14288 -\entry{errors, mathematical}{526}{errors, mathematical}
14289 -\entry{domain error}{526}{domain error}
14290 -\entry{range error}{526}{range error}
14291 -\entry{absolute value functions}{530}{absolute value functions}
14292 -\entry{normalization functions (floating-point)}{531}{normalization functions (floating-point)}
14293 -\entry{converting floats to integers}{532}{converting floats to integers}
14294 -\entry{FP arithmetic}{535}{FP arithmetic}
14295 -\entry{NaN}{536}{NaN}
14296 -\entry{unordered comparison}{536}{unordered comparison}
14297 -\entry{minimum}{537}{minimum}
14298 -\entry{maximum}{537}{maximum}
14299 -\entry{positive difference}{537}{positive difference}
14300 -\entry{multiply-add}{537}{multiply-add}
14301 -\entry{butterfly}{538}{butterfly}
14302 -\entry{complex numbers}{538}{complex numbers}
14303 -\entry{project complex numbers}{539}{project complex numbers}
14304 -\entry{conjugate complex numbers}{539}{conjugate complex numbers}
14305 -\entry{decompose complex numbers}{539}{decompose complex numbers}
14306 -\entry{parsing numbers (in formatted input)}{539}{parsing numbers (in formatted input)}
14307 -\entry{converting strings to numbers}{539}{converting strings to numbers}
14308 -\entry{number syntax, parsing}{539}{number syntax, parsing}
14309 -\entry{syntax, for reading numbers}{539}{syntax, for reading numbers}
14310 -\entry{gcvt_r}{546}{gcvt_r}
14311 -\entry{time}{549}{time}
14312 -\entry{calendar time}{549}{calendar time}
14313 -\entry{date}{549}{date}
14314 -\entry{interval}{549}{interval}
14315 -\entry{elapsed time}{549}{elapsed time}
14316 -\entry{time, elapsed}{549}{time, elapsed}
14317 -\entry{period of time}{549}{period of time}
14318 -\entry{CPU time}{549}{CPU time}
14319 -\entry{processor time}{549}{processor time}
14320 -\entry{elapsed time}{549}{elapsed time}
14321 -\entry{timeval}{550}{timeval}
14322 -\entry{timespec}{550}{timespec}
14323 -\entry{CPU time}{551}{CPU time}
14324 -\entry{clock ticks}{551}{clock ticks}
14325 -\entry{ticks, clock}{551}{ticks, clock}
14326 -\entry{processor time}{552}{processor time}
14327 -\entry{CPU time}{552}{CPU time}
14328 -\entry{child process}{552}{child process}
14329 -\entry{simple time}{553}{simple time}
14330 -\entry{high-resolution time}{553}{high-resolution time}
14331 -\entry{local time}{553}{local time}
14332 -\entry{broken-down time}{553}{broken-down time}
14333 -\entry{Gregorian calendar}{553}{Gregorian calendar}
14334 -\entry{calendar, Gregorian}{553}{calendar, Gregorian}
14335 -\entry{epoch}{553}{epoch}
14336 -\entry{broken-down time}{556}{broken-down time}
14337 -\entry{calendar time and broken-down time}{556}{calendar time and broken-down time}
14338 -\entry{leap second}{556}{leap second}
14339 -\entry{Daylight Saving Time}{557}{Daylight Saving Time}
14340 -\entry{summer time}{557}{summer time}
14341 -\entry{time, high precision}{559}{time, high precision}
14342 -\entry{clock, high accuracy}{559}{clock, high accuracy}
14343 -\entry{time zone}{575}{time zone}
14344 -\entry{time zone database}{576}{time zone database}
14345 -\entry{setting an alarm}{578}{setting an alarm}
14346 -\entry{interval timer, setting}{578}{interval timer, setting}
14347 -\entry{alarms, setting}{578}{alarms, setting}
14348 -\entry{timers, setting}{578}{timers, setting}
14349 -\entry{real-time timer}{578}{real-time timer}
14350 -\entry{timer, real-time}{578}{timer, real-time}
14351 -\entry{virtual timer}{578}{virtual timer}
14352 -\entry{timer, virtual}{578}{timer, virtual}
14353 -\entry{profiling timer}{578}{profiling timer}
14354 -\entry{timer, profiling}{578}{timer, profiling}
14355 -\entry{resource limits}{585}{resource limits}
14356 -\entry{limits on resource usage}{585}{limits on resource usage}
14357 -\entry{usage limits}{585}{usage limits}
14358 -\entry{limit}{585}{limit}
14359 -\entry{current limit}{585}{current limit}
14360 -\entry{soft limit}{585}{soft limit}
14361 -\entry{maximum limit}{585}{maximum limit}
14362 -\entry{hard limit}{585}{hard limit}
14363 -\entry{process priority}{589}{process priority}
14364 -\entry{cpu priority}{589}{cpu priority}
14365 -\entry{priority of a process}{589}{priority of a process}
14366 -\entry{absolute priority}{589}{absolute priority}
14367 -\entry{priority, absolute}{589}{priority, absolute}
14368 -\entry{realtime CPU scheduling}{589}{realtime CPU scheduling}
14369 -\entry{ready to run}{590}{ready to run}
14370 -\entry{preemptive scheduling}{590}{preemptive scheduling}
14371 -\entry{runnable process}{590}{runnable process}
14372 -\entry{realtime scheduling}{591}{realtime scheduling}
14373 -\entry{scheduling, traditional}{595}{scheduling, traditional}
14374 -\entry{address space}{598}{address space}
14375 -\entry{physical memory}{598}{physical memory}
14376 -\entry{physical address}{598}{physical address}
14377 -\entry{shared memory}{598}{shared memory}
14378 -\entry{thrashing}{598}{thrashing}
14379 -\entry{memory page}{598}{memory page}
14380 -\entry{page, memory}{598}{page, memory}
14381 -\entry{sysconf}{599}{sysconf}
14382 -\entry{sysconf}{599}{sysconf}
14383 -\entry{sysconf}{600}{sysconf}
14384 -\entry{sysconf}{600}{sysconf}
14385 -\entry{load average}{600}{load average}
14386 -\entry{non-local exits}{601}{non-local exits}
14387 -\entry{long jumps}{601}{long jumps}
14388 -\entry{signal}{611}{signal}
14389 -\entry{generation of signals}{612}{generation of signals}
14390 -\entry{delivery of signals}{612}{delivery of signals}
14391 -\entry{pending signals}{612}{pending signals}
14392 -\entry{blocked signals}{612}{blocked signals}
14393 -\entry{specified action (for a signal)}{612}{specified action (for a signal)}
14394 -\entry{default action (for a signal)}{612}{default action (for a signal)}
14395 -\entry{signal action}{612}{signal action}
14396 -\entry{catching signals}{612}{catching signals}
14397 -\entry{signal names}{613}{signal names}
14398 -\entry{names of signals}{613}{names of signals}
14399 -\entry{signal number}{613}{signal number}
14400 -\entry{program error signals}{613}{program error signals}
14401 -\entry{exception}{614}{exception}
14402 -\entry{floating-point exception}{614}{floating-point exception}
14403 -\entry{illegal instruction}{615}{illegal instruction}
14404 -\entry{segmentation violation}{615}{segmentation violation}
14405 -\entry{bus error}{616}{bus error}
14406 -\entry{abort signal}{616}{abort signal}
14407 -\entry{program termination signals}{616}{program termination signals}
14408 -\entry{termination signal}{616}{termination signal}
14409 -\entry{interrupt signal}{616}{interrupt signal}
14410 -\entry{quit signal}{616}{quit signal}
14411 -\entry{quit signal}{616}{quit signal}
14412 -\entry{kill signal}{617}{kill signal}
14413 -\entry{hangup signal}{617}{hangup signal}
14414 -\entry{alarm signal}{617}{alarm signal}
14415 -\entry{virtual time alarm signal}{618}{virtual time alarm signal}
14416 -\entry{profiling alarm signal}{618}{profiling alarm signal}
14417 -\entry{input available signal}{618}{input available signal}
14418 -\entry{output possible signal}{618}{output possible signal}
14419 -\entry{urgent data signal}{618}{urgent data signal}
14420 -\entry{job control signals}{618}{job control signals}
14421 -\entry{child process signal}{618}{child process signal}
14422 -\entry{continue signal}{619}{continue signal}
14423 -\entry{stop signal}{619}{stop signal}
14424 -\entry{interactive stop signal}{619}{interactive stop signal}
14425 -\entry{terminal input signal}{619}{terminal input signal}
14426 -\entry{terminal output signal}{619}{terminal output signal}
14427 -\entry{pipe signal}{620}{pipe signal}
14428 -\entry{broken pipe signal}{620}{broken pipe signal}
14429 -\entry{lost resource signal}{620}{lost resource signal}
14430 -\entry{user signals}{621}{user signals}
14431 -\entry{signal messages}{621}{signal messages}
14432 -\entry{signal actions}{622}{signal actions}
14433 -\entry{establishing a handler}{622}{establishing a handler}
14434 -\entry{signal function}{622}{\code {signal} function}
14435 -\entry{default action for a signal}{622}{default action for a signal}
14436 -\entry{ignore action for a signal}{622}{ignore action for a signal}
14437 -\entry{sigaction function}{624}{\code {sigaction} function}
14438 -\entry{signal flags}{627}{signal flags}
14439 -\entry{flags for sigaction}{627}{flags for \code {sigaction}}
14440 -\entry{sigaction flags}{627}{\code {sigaction} flags}
14441 -\entry{initial signal actions}{627}{initial signal actions}
14442 -\entry{signal handler function}{628}{signal handler function}
14443 -\entry{non-local exit, from signal handler}{630}{non-local exit, from signal handler}
14444 -\entry{race conditions, relating to signals}{631}{race conditions, relating to signals}
14445 -\entry{handling multiple signals}{632}{handling multiple signals}
14446 -\entry{successive signals}{632}{successive signals}
14447 -\entry{merging of signals}{632}{merging of signals}
14448 -\entry{restrictions on signal handler functions}{634}{restrictions on signal handler functions}
14449 -\entry{volatile declarations}{634}{\code {volatile} declarations}
14450 -\entry{reentrant functions}{635}{reentrant functions}
14451 -\entry{EINTR, and restarting interrupted primitives}{639}{EINTR, and restarting interrupted primitives}
14452 -\entry{restarting interrupted primitives}{639}{restarting interrupted primitives}
14453 -\entry{interrupting primitives}{639}{interrupting primitives}
14454 -\entry{primitives, interrupting}{639}{primitives, interrupting}
14455 -\entry{sending signals}{639}{sending signals}
14456 -\entry{raising signals}{639}{raising signals}
14457 -\entry{signals, generating}{639}{signals, generating}
14458 -\entry{killing a process}{640}{killing a process}
14459 -\entry{interprocess communication, with signals}{642}{interprocess communication, with signals}
14460 -\entry{blocking signals}{643}{blocking signals}
14461 -\entry{signal set}{644}{signal set}
14462 -\entry{signal mask}{645}{signal mask}
14463 -\entry{process signal mask}{645}{process signal mask}
14464 -\entry{blocking signals, in a handler}{646}{blocking signals, in a handler}
14465 -\entry{pending signals, checking for}{647}{pending signals, checking for}
14466 -\entry{blocked signals, checking for}{647}{blocked signals, checking for}
14467 -\entry{checking for pending signals}{647}{checking for pending signals}
14468 -\entry{timing error in signal handling}{649}{timing error in signal handling}
14469 -\entry{waiting for a signal}{650}{waiting for a signal}
14470 -\entry{pause function}{650}{\code {pause} function}
14471 -\entry{process}{657}{process}
14472 -\entry{program}{657}{program}
14473 -\entry{address space}{657}{address space}
14474 -\entry{thread of control}{657}{thread of control}
14475 -\entry{program arguments}{657}{program arguments}
14476 -\entry{command line arguments}{657}{command line arguments}
14477 -\entry{arguments, to program}{657}{arguments, to program}
14478 -\entry{program startup}{657}{program startup}
14479 -\entry{startup of program}{657}{startup of program}
14480 -\entry{invocation of program}{657}{invocation of program}
14481 -\entry{main function}{657}{\code {main} function}
14482 -\entry{argc (program argument count)}{657}{argc (program argument count)}
14483 -\entry{argv (program argument vector)}{657}{argv (program argument vector)}
14484 -\entry{program argument syntax}{658}{program argument syntax}
14485 -\entry{syntax, for program arguments}{658}{syntax, for program arguments}
14486 -\entry{command argument syntax}{658}{command argument syntax}
14487 -\entry{long-named options}{658}{long-named options}
14488 -\entry{program arguments, parsing}{659}{program arguments, parsing}
14489 -\entry{command arguments, parsing}{659}{command arguments, parsing}
14490 -\entry{parsing program arguments}{659}{parsing program arguments}
14491 -\entry{argp (program argument parser)}{666}{argp (program argument parser)}
14492 -\entry{argument parsing with argp}{666}{argument parsing with argp}
14493 -\entry{option parsing with argp}{666}{option parsing with argp}
14494 -\entry{argp parser functions}{671}{argp parser functions}
14495 -\entry{usage messages, in argp}{673}{usage messages, in argp}
14496 -\entry{syntax error messages, in argp}{674}{syntax error messages, in argp}
14497 -\entry{error messages, in argp}{674}{error messages, in argp}
14498 -\entry{ARGP_HELP_FMT environment variable}{688}{ARGP_HELP_FMT environment variable}
14499 -\entry{environment variable}{691}{environment variable}
14500 -\entry{environment}{691}{environment}
14501 -\entry{environment access}{691}{environment access}
14502 -\entry{environment representation}{691}{environment representation}
14503 -\entry{standard environment variables}{693}{standard environment variables}
14504 -\entry{HOME environment variable}{693}{\code {HOME} environment variable}
14505 -\entry{home directory}{693}{home directory}
14506 -\entry{LOGNAME environment variable}{693}{\code {LOGNAME} environment variable}
14507 -\entry{PATH environment variable}{693}{\code {PATH} environment variable}
14508 -\entry{TERM environment variable}{694}{\code {TERM} environment variable}
14509 -\entry{TZ environment variable}{694}{\code {TZ} environment variable}
14510 -\entry{LANG environment variable}{694}{\code {LANG} environment variable}
14511 -\entry{LC_ALL environment variable}{694}{\code {LC_ALL} environment variable}
14512 -\entry{LC_COLLATE environment variable}{694}{\code {LC_COLLATE} environment variable}
14513 -\entry{LC_CTYPE environment variable}{694}{\code {LC_CTYPE} environment variable}
14514 -\entry{LC_MESSAGES environment variable}{694}{\code {LC_MESSAGES} environment variable}
14515 -\entry{LC_MONETARY environment variable}{694}{\code {LC_MONETARY} environment variable}
14516 -\entry{LC_NUMERIC environment variable}{694}{\code {LC_NUMERIC} environment variable}
14517 -\entry{LC_TIME environment variable}{694}{\code {LC_TIME} environment variable}
14518 -\entry{NLSPATH environment variable}{694}{\code {NLSPATH} environment variable}
14519 -\entry{_POSIX_OPTION_ORDER environment variable.}{695}{\code {_POSIX_OPTION_ORDER} environment variable.}
14520 -\entry{system call}{695}{system call}
14521 -\entry{kernel call}{695}{kernel call}
14522 -\entry{system call number}{695}{system call number}
14523 -\entry{errno}{695}{errno}
14524 -\entry{program termination}{696}{program termination}
14525 -\entry{process termination}{696}{process termination}
14526 -\entry{exit status value}{696}{exit status value}
14527 -\entry{exit status}{697}{exit status}
14528 -\entry{aborting a program}{699}{aborting a program}
14529 -\entry{process}{701}{process}
14530 -\entry{child process}{701}{child process}
14531 -\entry{parent process}{701}{parent process}
14532 -\entry{running a command}{701}{running a command}
14533 -\entry{process ID}{702}{process ID}
14534 -\entry{process lifetime}{702}{process lifetime}
14535 -\entry{creating a process}{702}{creating a process}
14536 -\entry{forking a process}{702}{forking a process}
14537 -\entry{child process}{702}{child process}
14538 -\entry{parent process}{702}{parent process}
14539 -\entry{process image}{702}{process image}
14540 -\entry{executing a file}{704}{executing a file}
14541 -\entry{exec functions}{704}{\code {exec} functions}
14542 -\entry{process completion}{706}{process completion}
14543 -\entry{waiting for completion of child process}{706}{waiting for completion of child process}
14544 -\entry{testing exit status of child process}{706}{testing exit status of child process}
14545 -\entry{process groups}{713}{process groups}
14546 -\entry{job control}{713}{job control}
14547 -\entry{job}{713}{job}
14548 -\entry{session}{713}{session}
14549 -\entry{shell}{713}{shell}
14550 -\entry{session}{713}{session}
14551 -\entry{session leader}{713}{session leader}
14552 -\entry{controlling terminal}{713}{controlling terminal}
14553 -\entry{foreground job}{713}{foreground job}
14554 -\entry{background job}{713}{background job}
14555 -\entry{stopped job}{714}{stopped job}
14556 -\entry{job control is optional}{714}{job control is optional}
14557 -\entry{controlling process}{714}{controlling process}
14558 -\entry{controlling terminal, access to}{714}{controlling terminal, access to}
14559 -\entry{SIGTTIN, from background job}{714}{\code {SIGTTIN}, from background job}
14560 -\entry{SIGTTOU, from background job}{715}{\code {SIGTTOU}, from background job}
14561 -\entry{orphaned process group}{715}{orphaned process group}
14562 -\entry{job control, enabling}{717}{job control, enabling}
14563 -\entry{subshell}{717}{subshell}
14564 -\entry{job control, enabling}{717}{job control, enabling}
14565 -\entry{launching jobs}{718}{launching jobs}
14566 -\entry{process group leader}{719}{process group leader}
14567 -\entry{process group ID}{719}{process group ID}
14568 -\entry{race conditions, relating to job control}{719}{race conditions, relating to job control}
14569 -\entry{foreground job, launching}{722}{foreground job, launching}
14570 -\entry{background job, launching}{722}{background job, launching}
14571 -\entry{stopped jobs, detecting}{723}{stopped jobs, detecting}
14572 -\entry{terminated jobs, detecting}{723}{terminated jobs, detecting}
14573 -\entry{SIGCHLD, handling of}{723}{\code {SIGCHLD}, handling of}
14574 -\entry{stopped jobs, continuing}{726}{stopped jobs, continuing}
14575 -\entry{process group functions}{728}{process group functions}
14576 -\entry{job control functions}{728}{job control functions}
14577 -\entry{controlling terminal, determining}{728}{controlling terminal, determining}
14578 -\entry{BSD compatibility library}{729}{BSD compatibility library}
14579 -\entry{Name Service Switch}{733}{Name Service Switch}
14580 -\entry{NSS}{733}{NSS}
14581 -\entry{databases}{733}{databases}
14582 -\entry{ethers}{733}{ethers}
14583 -\entry{group}{733}{group}
14584 -\entry{hosts}{733}{hosts}
14585 -\entry{netgroup}{733}{netgroup}
14586 -\entry{networks}{733}{networks}
14587 -\entry{protocols}{733}{protocols}
14588 -\entry{passwd}{733}{passwd}
14589 -\entry{rpc}{733}{rpc}
14590 -\entry{services}{733}{services}
14591 -\entry{shadow}{733}{shadow}
14592 -\entry{/etc/nsswitch.conf}{734}{\file {/etc/nsswitch.conf}}
14593 -\entry{nsswitch.conf}{734}{\file {nsswitch.conf}}
14594 -\entry{DNS server unavailable}{735}{DNS server unavailable}
14595 -\entry{nisplus, and completeness}{735}{nisplus, and completeness}
14596 -\entry{nisplus, and booting}{735}{nisplus, and booting}
14597 -\entry{bootstrapping, and services}{735}{bootstrapping, and services}
14598 -\entry{default value, and NSS}{736}{default value, and NSS}
14599 -\entry{optimizing NSS}{736}{optimizing NSS}
14600 -\entry{reentrant NSS functions}{737}{reentrant NSS functions}
14601 -\entry{login name}{743}{login name}
14602 -\entry{user name}{743}{user name}
14603 -\entry{user ID}{743}{user ID}
14604 -\entry{group name}{743}{group name}
14605 -\entry{group ID}{743}{group ID}
14606 -\entry{persona}{743}{persona}
14607 -\entry{effective user ID}{743}{effective user ID}
14608 -\entry{effective group ID}{743}{effective group ID}
14609 -\entry{supplementary group IDs}{743}{supplementary group IDs}
14610 -\entry{real user ID}{743}{real user ID}
14611 -\entry{real group ID}{743}{real group ID}
14612 -\entry{setuid programs}{744}{\code {setuid} programs}
14613 -\entry{saved set-user-ID}{744}{saved set-user-ID}
14614 -\entry{saved set-group-ID}{744}{saved set-group-ID}
14615 -\entry{_POSIX_SAVED_IDS}{744}{\code {_POSIX_SAVED_IDS}}
14616 -\entry{login name, determining}{753}{login name, determining}
14617 -\entry{user ID, determining}{753}{user ID, determining}
14618 -\entry{user accounting database}{753}{user accounting database}
14619 -\entry{user database}{761}{user database}
14620 -\entry{password database}{761}{password database}
14621 -\entry{converting user ID to user name}{762}{converting user ID to user name}
14622 -\entry{converting user name to user ID}{762}{converting user name to user ID}
14623 -\entry{scanning the user list}{762}{scanning the user list}
14624 -\entry{group database}{764}{group database}
14625 -\entry{converting group name to group ID}{764}{converting group name to group ID}
14626 -\entry{converting group ID to group name}{764}{converting group ID to group name}
14627 -\entry{scanning the group list}{765}{scanning the group list}
14628 -\entry{Netgroup}{767}{Netgroup}
14629 -\entry{host name}{771}{host name}
14630 -\entry{DNS}{771}{DNS}
14631 -\entry{Domain Name System}{771}{Domain Name System}
14632 -\entry{hostname}{771}{hostname}
14633 -\entry{domain name}{771}{domain name}
14634 -\entry{FQDN}{771}{FQDN}
14635 -\entry{YP}{771}{YP}
14636 -\entry{NIS}{771}{NIS}
14637 -\entry{NIS domain name}{771}{NIS domain name}
14638 -\entry{YP domain name}{771}{YP domain name}
14639 -\entry{/etc/hostname}{772}{/etc/hostname}
14640 -\entry{NIS domain name}{772}{NIS domain name}
14641 -\entry{YP domain name}{772}{YP domain name}
14642 -\entry{NIS domain name}{772}{NIS domain name}
14643 -\entry{YP domain name}{772}{YP domain name}
14644 -\entry{POSIX capacity limits}{787}{POSIX capacity limits}
14645 -\entry{limits, POSIX}{787}{limits, POSIX}
14646 -\entry{capacity limits, POSIX}{787}{capacity limits, POSIX}
14647 -\entry{limits, program argument size}{787}{limits, program argument size}
14648 -\entry{limits, number of processes}{787}{limits, number of processes}
14649 -\entry{limits, number of open files}{787}{limits, number of open files}
14650 -\entry{limits, time zone name length}{787}{limits, time zone name length}
14651 -\entry{limits, number of supplementary group IDs}{787}{limits, number of supplementary group IDs}
14652 -\entry{POSIX optional features}{788}{POSIX optional features}
14653 -\entry{optional POSIX features}{788}{optional POSIX features}
14654 -\entry{limits, link count of files}{799}{limits, link count of files}
14655 -\entry{limits, terminal input queue}{799}{limits, terminal input queue}
14656 -\entry{limits, file name length}{800}{limits, file name length}
14657 -\entry{limits, pipe buffer size}{800}{limits, pipe buffer size}
14658 -\entry{backtrace}{817}{backtrace}
14659 -\entry{backtrace_symbols}{817}{backtrace_symbols}
14660 -\entry{backtrace_fd}{817}{backtrace_fd}
14661 -\entry{consistency checking}{841}{consistency checking}
14662 -\entry{impossible events}{841}{impossible events}
14663 -\entry{assertions}{841}{assertions}
14664 -\entry{variable number of arguments}{842}{variable number of arguments}
14665 -\entry{variadic functions}{842}{variadic functions}
14666 -\entry{optional arguments}{842}{optional arguments}
14667 -\entry{function prototypes (variadic)}{843}{function prototypes (variadic)}
14668 -\entry{prototypes for variadic functions}{843}{prototypes for variadic functions}
14669 -\entry{variadic function prototypes}{843}{variadic function prototypes}
14670 -\entry{variadic function argument access}{844}{variadic function argument access}
14671 -\entry{arguments (variadic functions)}{844}{arguments (variadic functions)}
14672 -\entry{number of arguments passed}{844}{number of arguments passed}
14673 -\entry{how many arguments}{844}{how many arguments}
14674 -\entry{arguments, how many}{844}{arguments, how many}
14675 -\entry{variadic functions, calling}{845}{variadic functions, calling}
14676 -\entry{calling variadic functions}{845}{calling variadic functions}
14677 -\entry{declaring variadic functions}{845}{declaring variadic functions}
14678 -\entry{default argument promotions}{845}{default argument promotions}
14679 -\entry{argument promotion}{845}{argument promotion}
14680 -\entry{null pointer constant}{848}{null pointer constant}
14681 -\entry{integer type width}{850}{integer type width}
14682 -\entry{width of integer type}{850}{width of integer type}
14683 -\entry{type measurements, integer}{850}{type measurements, integer}
14684 -\entry{integer type range}{850}{integer type range}
14685 -\entry{range of integer type}{850}{range of integer type}
14686 -\entry{limits, integer types}{850}{limits, integer types}
14687 -\entry{floating type measurements}{851}{floating type measurements}
14688 -\entry{measurements of floating types}{851}{measurements of floating types}
14689 -\entry{type measurements, floating}{851}{type measurements, floating}
14690 -\entry{limits, floating types}{851}{limits, floating types}
14691 -\entry{sign (of floating point number)}{852}{sign (of floating point number)}
14692 -\entry{base (of floating point number)}{852}{base (of floating point number)}
14693 -\entry{radix (of floating point number)}{852}{radix (of floating point number)}
14694 -\entry{exponent (of floating point number)}{852}{exponent (of floating point number)}
14695 -\entry{bias (of floating point number exponent)}{852}{bias (of floating point number exponent)}
14696 -\entry{mantissa (of floating point number)}{852}{mantissa (of floating point number)}
14697 -\entry{significand (of floating point number)}{852}{significand (of floating point number)}
14698 -\entry{precision (of floating point number)}{852}{precision (of floating point number)}
14699 -\entry{hidden bit (of floating point number mantissa)}{852}{hidden bit (of floating point number mantissa)}
14700 -\entry{normalized floating point number}{852}{normalized floating point number}
14701 -\entry{IEEE floating point representation}{856}{IEEE floating point representation}
14702 -\entry{floating point, IEEE}{856}{floating point, IEEE}
14703 -\entry{configuring}{993}{configuring}
14704 -\entry{compiling}{993}{compiling}
14705 -\entry{installing}{996}{installing}
14706 -\entry{installation tools}{997}{installation tools}
14707 -\entry{tools, for installing library}{997}{tools, for installing library}
14708 -\entry{configurations, all supported}{998}{configurations, all supported}
14709 -\entry{upgrading from libc5}{999}{upgrading from libc5}
14710 -\entry{kernel header files}{999}{kernel header files}
14711 -\entry{reporting bugs}{1000}{reporting bugs}
14712 -\entry{bugs, reporting}{1000}{bugs, reporting}
14713 -\entry{free documentation}{1015}{free documentation}
14714 -\entry{LGPL, Lesser General Public License}{1017}{LGPL, Lesser General Public License}
14715 -\entry{FDL, GNU Free Documentation License}{1027}{FDL, GNU Free Documentation License}
14716 diff -u -udbrN glibc-2.3.2/manual/libc.cps glibc-2.3.2-200304020432/manual/libc.cps
14717 --- glibc-2.3.2/manual/libc.cps Tue Feb 25 11:34:58 2003
14718 +++ glibc-2.3.2-200304020432/manual/libc.cps Thu Jan 1 01:00:00 1970
14719 @@ -1,1034 +0,0 @@
14720 -\initial {/}
14721 -\entry {/etc/hostname}{772}
14722 -\entry {\file {/etc/nsswitch.conf}}{734}
14723 -\initial {_}
14724 -\entry {__va_copy}{85}
14725 -\entry {\code {_POSIX_OPTION_ORDER} environment variable.}{695}
14726 -\entry {\code {_POSIX_SAVED_IDS}}{744}
14727 -\initial {4}
14728 -\entry {4.\var {n} BSD Unix}{3}
14729 -\initial {A}
14730 -\entry {abort signal}{616}
14731 -\entry {aborting a program}{699}
14732 -\entry {absolute file name}{228}
14733 -\entry {absolute priority}{589}
14734 -\entry {absolute value functions}{530}
14735 -\entry {accepting connections}{426}
14736 -\entry {access permission for a file}{380}
14737 -\entry {access, testing for}{382}
14738 -\entry {accessing directories}{353}
14739 -\entry {address of socket}{401}
14740 -\entry {address space}{598, 657}
14741 -\entry {alarm signal}{617}
14742 -\entry {alarms, setting}{578}
14743 -\entry {alignment (in obstacks)}{56}
14744 -\entry {alignment (with \code {malloc})}{38}
14745 -\entry {\code {alloca} disadvantages}{61}
14746 -\entry {\code {alloca} function}{59}
14747 -\entry {allocating pseudo-terminals}{468}
14748 -\entry {allocation (obstacks)}{51}
14749 -\entry {allocation debugging}{45}
14750 -\entry {allocation hooks, for \code {malloc}}{41}
14751 -\entry {allocation of memory with \code {malloc}}{34}
14752 -\entry {allocation size of string}{76}
14753 -\entry {allocation statistics}{43}
14754 -\entry {alphabetic character}{67, 70}
14755 -\entry {alphanumeric character}{68, 70}
14756 -\entry {append-access files}{227}
14757 -\entry {argc (program argument count)}{657}
14758 -\entry {argp (program argument parser)}{666}
14759 -\entry {argp parser functions}{671}
14760 -\entry {ARGP_HELP_FMT environment variable}{688}
14761 -\entry {argument parsing with argp}{666}
14762 -\entry {argument promotion}{845}
14763 -\entry {argument vectors, null-character separated}{107}
14764 -\entry {arguments (variadic functions)}{844}
14765 -\entry {arguments, how many}{844}
14766 -\entry {arguments, to program}{657}
14767 -\entry {argv (program argument vector)}{657}
14768 -\entry {argz vectors (string vectors)}{107}
14769 -\entry {arithmetic expansion}{219}
14770 -\entry {array comparison functions}{89}
14771 -\entry {array copy functions}{79}
14772 -\entry {array search function}{195}
14773 -\entry {array sort function}{196}
14774 -\entry {ASCII character}{68}
14775 -\entry {assertions}{841}
14776 -\entry {attributes of a file}{370}
14777 -\entry {automatic freeing}{59}
14778 -\entry {automatic memory allocation}{33}
14779 -\entry {automatic storage class}{33}
14780 -\entry {automatic storage with variable size}{59}
14781 -\initial {B}
14782 -\entry {background job}{713}
14783 -\entry {background job, launching}{722}
14784 -\entry {backtrace}{817}
14785 -\entry {backtrace_fd}{817}
14786 -\entry {backtrace_symbols}{817}
14787 -\entry {base (of floating point number)}{852}
14788 -\entry {baud rate}{457}
14789 -\entry {Berkeley Unix}{3}
14790 -\entry {Bessel functions}{488}
14791 -\entry {bias (of floating point number exponent)}{852}
14792 -\entry {big-endian}{418}
14793 -\entry {binary I/O to a stream}{249}
14794 -\entry {binary search function (for arrays)}{195}
14795 -\entry {binary stream}{283}
14796 -\entry {binding a socket address}{401}
14797 -\entry {blank character}{68, 72}
14798 -\entry {block I/O to a stream}{249}
14799 -\entry {blocked signals}{612}
14800 -\entry {blocked signals, checking for}{647}
14801 -\entry {blocking signals}{643}
14802 -\entry {blocking signals, in a handler}{646}
14803 -\entry {bootstrapping, and services}{735}
14804 -\entry {break condition, detecting}{451}
14805 -\entry {break condition, generating}{465}
14806 -\entry {breaking a string into tokens}{100}
14807 -\entry {broken pipe signal}{620}
14808 -\entry {broken-down time}{553, 556}
14809 -\entry {BSD compatibility library}{729}
14810 -\entry {BSD compatibility library.}{8}
14811 -\entry {BSD Unix}{3}
14812 -\entry {buffering of streams}{288}
14813 -\entry {buffering, controlling}{290}
14814 -\entry {bugs, reporting}{1000}
14815 -\entry {bus error}{616}
14816 -\entry {butterfly}{538}
14817 -\entry {byte order conversion, for socket}{418}
14818 -\entry {byte stream}{399}
14819 -\initial {C}
14820 -\entry {C++ streams}{239}
14821 -\entry {calendar time}{549}
14822 -\entry {calendar time and broken-down time}{556}
14823 -\entry {calendar, Gregorian}{553}
14824 -\entry {calling variadic functions}{845}
14825 -\entry {canonical input processing}{446}
14826 -\entry {capacity limits, POSIX}{787}
14827 -\entry {carrier detect}{453}
14828 -\entry {case conversion of characters}{69}
14829 -\entry {catching signals}{612}
14830 -\entry {categories for locales}{154}
14831 -\entry {change working directory}{351}
14832 -\entry {changing the locale}{155}
14833 -\entry {changing the size of a block (\code {malloc})}{36}
14834 -\entry {changing the size of a block (obstacks)}{53}
14835 -\entry {channels}{314}
14836 -\entry {character case conversion}{69}
14837 -\entry {character predicates}{67}
14838 -\entry {character testing}{67}
14839 -\entry {checking for pending signals}{647}
14840 -\entry {child process}{552, 701, 702}
14841 -\entry {child process signal}{618}
14842 -\entry {chunks}{57}
14843 -\entry {classes, floating-point}{520}
14844 -\entry {classification of characters}{67}
14845 -\entry {cleaning up a stream}{314}
14846 -\entry {clearing terminal input queue}{465}
14847 -\entry {client}{424}
14848 -\entry {clock ticks}{551}
14849 -\entry {clock, high accuracy}{559}
14850 -\entry {close-on-exec (file descriptor flag)}{339}
14851 -\entry {closing a file descriptor}{303}
14852 -\entry {closing a socket}{422}
14853 -\entry {closing a stream}{235}
14854 -\entry {collating strings}{92}
14855 -\entry {combining locales}{154}
14856 -\entry {command argument syntax}{658}
14857 -\entry {command arguments, parsing}{659}
14858 -\entry {command line arguments}{657}
14859 -\entry {command substitution}{219}
14860 -\entry {communication style (of a socket)}{399}
14861 -\entry {comparing strings and arrays}{89}
14862 -\entry {Comparison Function}{195}
14863 -\entry {compiling}{993}
14864 -\entry {complex exponentiation functions}{485}
14865 -\entry {complex logarithm functions}{485}
14866 -\entry {complex numbers}{538}
14867 -\entry {complex trigonometric functions}{481}
14868 -\entry {concatenating strings}{79}
14869 -\entry {configurations, all supported}{998}
14870 -\entry {configuring}{993}
14871 -\entry {conjugate complex numbers}{539}
14872 -\entry {connecting a socket}{424}
14873 -\entry {connection}{424}
14874 -\entry {consistency checking}{841}
14875 -\entry {consistency checking, of heap}{39}
14876 -\entry {constants}{32, 479}
14877 -\entry {continue signal}{619}
14878 -\entry {control character}{68, 71}
14879 -\entry {control operations on files}{336}
14880 -\entry {controlling process}{714}
14881 -\entry {controlling terminal}{713}
14882 -\entry {controlling terminal, access to}{714}
14883 -\entry {controlling terminal, determining}{728}
14884 -\entry {controlling terminal, setting}{342}
14885 -\entry {conversion specifications (\code {printf})}{250}
14886 -\entry {conversion specifications (\code {scanf})}{272}
14887 -\entry {converting byte order}{418}
14888 -\entry {converting case of characters}{69}
14889 -\entry {converting file descriptor to stream}{313}
14890 -\entry {converting floats to integers}{532}
14891 -\entry {converting group ID to group name}{764}
14892 -\entry {converting group name to group ID}{764}
14893 -\entry {converting host address to name}{413}
14894 -\entry {converting host name to address}{413}
14895 -\entry {converting network name to network number}{443}
14896 -\entry {converting network number to network name}{443}
14897 -\entry {converting port number to service name}{417}
14898 -\entry {converting service name to port number}{417}
14899 -\entry {converting string to collation order}{93}
14900 -\entry {converting strings to numbers}{539}
14901 -\entry {converting user ID to user name}{762}
14902 -\entry {converting user name to user ID}{762}
14903 -\entry {cookie, for custom stream}{295}
14904 -\entry {copy-on-write page fault}{63}
14905 -\entry {copying strings and arrays}{79}
14906 -\entry {cpu priority}{589}
14907 -\entry {CPU time}{549, 551, 552}
14908 -\entry {create on open (file status flag)}{342}
14909 -\entry {creating a directory}{369}
14910 -\entry {creating a FIFO special file}{396}
14911 -\entry {creating a pipe}{393}
14912 -\entry {creating a pipe to a subprocess}{395}
14913 -\entry {creating a process}{702}
14914 -\entry {creating a socket}{422}
14915 -\entry {creating a socket pair}{423}
14916 -\entry {creating special files}{388}
14917 -\entry {cube root function}{485}
14918 -\entry {currency symbols}{159}
14919 -\entry {current limit}{585}
14920 -\entry {current working directory}{351}
14921 -\entry {custom streams}{295}
14922 -\entry {customizing \code {printf}}{266}
14923 -\initial {D}
14924 -\entry {data loss on sockets}{399}
14925 -\entry {databases}{733}
14926 -\entry {datagram socket}{435}
14927 -\entry {datagrams, transmitting}{436}
14928 -\entry {date}{549}
14929 -\entry {Daylight Saving Time}{557}
14930 -\entry {decimal digit character}{67}
14931 -\entry {decimal-point separator}{158}
14932 -\entry {declaration (compared to definition)}{4}
14933 -\entry {declaring variadic functions}{845}
14934 -\entry {decompose complex numbers}{539}
14935 -\entry {default action (for a signal)}{612}
14936 -\entry {default action for a signal}{622}
14937 -\entry {default argument promotions}{845}
14938 -\entry {default value, and NSS}{736}
14939 -\entry {defining new \code {printf} conversions}{266}
14940 -\entry {definition (compared to declaration)}{4}
14941 -\entry {delayed suspend character}{461}
14942 -\entry {deleting a directory}{368}
14943 -\entry {deleting a file}{367}
14944 -\entry {delivery of signals}{612}
14945 -\entry {descriptors and streams}{314}
14946 -\entry {digit character}{67, 71}
14947 -\entry {directories, accessing}{353}
14948 -\entry {directories, creating}{369}
14949 -\entry {directories, deleting}{368}
14950 -\entry {directory}{227}
14951 -\entry {directory entry}{227}
14952 -\entry {directory hierarchy}{360}
14953 -\entry {directory stream}{353}
14954 -\entry {disadvantages of \code {alloca}}{61}
14955 -\entry {DISCARD character}{462}
14956 -\entry {division by zero}{522}
14957 -\entry {DNS}{771}
14958 -\entry {DNS server unavailable}{735}
14959 -\entry {domain (of socket)}{399}
14960 -\entry {domain error}{526}
14961 -\entry {domain name}{771}
14962 -\entry {Domain Name System}{771}
14963 -\entry {dot notation, for Internet addresses}{409}
14964 -\entry {DSUSP character}{461}
14965 -\entry {duplicating file descriptors}{337}
14966 -\entry {dynamic memory allocation}{33}
14967 -\initial {E}
14968 -\entry {EBCDIC}{113}
14969 -\entry {echo of terminal input}{455}
14970 -\entry {effective group ID}{743}
14971 -\entry {effective user ID}{743}
14972 -\entry {efficiency and \code {malloc}}{37}
14973 -\entry {efficiency and obstacks}{55}
14974 -\entry {efficiency of chunks}{57}
14975 -\entry {EINTR, and restarting interrupted primitives}{639}
14976 -\entry {elapsed time}{549}
14977 -\entry {encryption}{105}
14978 -\entry {end of file, on a stream}{281}
14979 -\entry {end-of-file, on a file descriptor}{306}
14980 -\entry {environment}{691}
14981 -\entry {environment access}{691}
14982 -\entry {environment representation}{691}
14983 -\entry {environment variable}{691}
14984 -\entry {environment vectors, null-character separated}{107}
14985 -\entry {envz vectors (environment vectors)}{107}
14986 -\entry {EOF character}{458}
14987 -\entry {EOL character}{459}
14988 -\entry {EOL2 character}{459}
14989 -\entry {epoch}{553}
14990 -\entry {ERASE character}{459}
14991 -\entry {errno}{695}
14992 -\entry {error codes}{15}
14993 -\entry {error messages, in argp}{674}
14994 -\entry {error reporting}{15}
14995 -\entry {errors, mathematical}{526}
14996 -\entry {establishing a handler}{622}
14997 -\entry {ethers}{733}
14998 -\entry {EUC}{113}
14999 -\entry {EUC-JP}{139}
15000 -\entry {exception}{522, 614}
15001 -\entry {exclusive lock}{345}
15002 -\entry {\code {exec} functions}{704}
15003 -\entry {execing a program}{32}
15004 -\entry {executable}{32}
15005 -\entry {executing a file}{704}
15006 -\entry {exit status}{697}
15007 -\entry {exit status value}{696}
15008 -\entry {exiting a program}{32}
15009 -\entry {expansion of shell words}{218}
15010 -\entry {exponent (of floating point number)}{852}
15011 -\entry {exponentiation functions}{483}
15012 -\entry {extending \code {printf}}{266}
15013 -\entry {extracting file descriptor from stream}{313}
15014 -\initial {F}
15015 -\entry {\code {fcntl} function}{336}
15016 -\entry {FDL, GNU Free Documentation License}{1027}
15017 -\entry {feature test macros}{7}
15018 -\entry {field splitting}{219}
15019 -\entry {FIFO special file}{393}
15020 -\entry {file access permission}{380}
15021 -\entry {file access time}{383}
15022 -\entry {file attribute modification time}{383}
15023 -\entry {file attributes}{370}
15024 -\entry {file creation mask}{380}
15025 -\entry {file descriptor flags}{339}
15026 -\entry {file descriptor sets, for \code {select}}{321}
15027 -\entry {file descriptors, standard}{313}
15028 -\entry {file locks}{345}
15029 -\entry {file modification time}{383}
15030 -\entry {file name}{227}
15031 -\entry {file name component}{227}
15032 -\entry {file name errors}{229}
15033 -\entry {file name resolution}{228}
15034 -\entry {file name translation flags}{341}
15035 -\entry {file names, multiple}{363}
15036 -\entry {file owner}{377}
15037 -\entry {file permission bits}{378}
15038 -\entry {file pointer}{231}
15039 -\entry {file position}{226}
15040 -\entry {file positioning on a file descriptor}{310}
15041 -\entry {file positioning on a stream}{284}
15042 -\entry {file status flags}{340}
15043 -\entry {files, accessing}{32}
15044 -\entry {filtering i/o through subprocess}{395}
15045 -\entry {flag character (\code {printf})}{252}
15046 -\entry {flag character (\code {scanf})}{273}
15047 -\entry {flags for \code {sigaction}}{627}
15048 -\entry {flags, file name translation}{341}
15049 -\entry {flags, open-time action}{342}
15050 -\entry {floating point}{520}
15051 -\entry {floating point, IEEE}{856}
15052 -\entry {floating type measurements}{851}
15053 -\entry {floating-point classes}{520}
15054 -\entry {floating-point exception}{614}
15055 -\entry {flow control, terminal}{466}
15056 -\entry {flushing a stream}{289}
15057 -\entry {flushing terminal output queue}{465}
15058 -\entry {foreground job}{713}
15059 -\entry {foreground job, launching}{722}
15060 -\entry {forking a process}{702}
15061 -\entry {format string, for \code {printf}}{250}
15062 -\entry {format string, for \code {scanf}}{272}
15063 -\entry {formatted input from a stream}{272}
15064 -\entry {formatted messages}{297}
15065 -\entry {formatted output to a stream}{250}
15066 -\entry {FP arithmetic}{535}
15067 -\entry {FQDN}{771}
15068 -\entry {frame, real memory}{31}
15069 -\entry {free documentation}{1015}
15070 -\entry {freeing (obstacks)}{52}
15071 -\entry {freeing memory}{32}
15072 -\entry {freeing memory allocated with \code {malloc}}{35}
15073 -\entry {fully buffered stream}{288}
15074 -\entry {function prototypes (variadic)}{843}
15075 -\initial {G}
15076 -\entry {gamma function}{488}
15077 -\entry {gcvt_r}{546}
15078 -\entry {gencat}{176}
15079 -\entry {generation of signals}{612}
15080 -\entry {generic i/o control operations}{349}
15081 -\entry {globbing}{206}
15082 -\entry {graphic character}{68, 71}
15083 -\entry {Gregorian calendar}{553}
15084 -\entry {group}{733}
15085 -\entry {group database}{764}
15086 -\entry {group ID}{743}
15087 -\entry {group name}{743}
15088 -\entry {group owner of a file}{377}
15089 -\entry {grouping of digits}{158}
15090 -\entry {growing objects (in obstacks)}{53}
15091 -\initial {H}
15092 -\entry {handling multiple signals}{632}
15093 -\entry {hangup signal}{617}
15094 -\entry {hard limit}{585}
15095 -\entry {hard link}{363}
15096 -\entry {header files}{4}
15097 -\entry {heap consistency checking}{39}
15098 -\entry {heap, dynamic allocation from}{34}
15099 -\entry {heap, freeing memory from}{35}
15100 -\entry {hexadecimal digit character}{68, 72}
15101 -\entry {hidden bit (of floating point number mantissa)}{852}
15102 -\entry {hierarchy, directory}{360}
15103 -\entry {high-priority data}{433}
15104 -\entry {high-resolution time}{553}
15105 -\entry {holes in files}{311}
15106 -\entry {home directory}{693}
15107 -\entry {\code {HOME} environment variable}{693}
15108 -\entry {hook functions (of custom streams)}{296}
15109 -\entry {host address, Internet}{409}
15110 -\entry {host name}{771}
15111 -\entry {hostname}{771}
15112 -\entry {hosts}{733}
15113 -\entry {hosts database}{413}
15114 -\entry {how many arguments}{844}
15115 -\entry {hyperbolic functions}{486, 487}
15116 -\initial {I}
15117 -\entry {identifying terminals}{445}
15118 -\entry {IEEE 754}{520}
15119 -\entry {IEEE floating point}{520}
15120 -\entry {IEEE floating point representation}{856}
15121 -\entry {IEEE Std 1003.1}{2}
15122 -\entry {IEEE Std 1003.2}{2}
15123 -\entry {ignore action for a signal}{622}
15124 -\entry {illegal instruction}{615}
15125 -\entry {impossible events}{841}
15126 -\entry {independent channels}{314}
15127 -\entry {inexact exception}{522}
15128 -\entry {infinity}{524}
15129 -\entry {initial signal actions}{627}
15130 -\entry {inode number}{373}
15131 -\entry {input available signal}{618}
15132 -\entry {input conversions, for \code {scanf}}{274}
15133 -\entry {input from multiple files}{321}
15134 -\entry {installation tools}{997}
15135 -\entry {installing}{996}
15136 -\entry {integer}{517}
15137 -\entry {integer division functions}{518}
15138 -\entry {integer type range}{850}
15139 -\entry {integer type width}{850}
15140 -\entry {interactive signals, from terminal}{456}
15141 -\entry {interactive stop signal}{619}
15142 -\entry {internal representation}{111}
15143 -\entry {internationalization}{153}
15144 -\entry {Internet host address}{409}
15145 -\entry {Internet namespace, for sockets}{407}
15146 -\entry {interprocess communication, with FIFO}{396}
15147 -\entry {interprocess communication, with pipes}{393}
15148 -\entry {interprocess communication, with signals}{642}
15149 -\entry {interprocess communication, with sockets}{399}
15150 -\entry {interrupt character}{460}
15151 -\entry {interrupt signal}{616}
15152 -\entry {interrupt-driven input}{348}
15153 -\entry {interrupting primitives}{639}
15154 -\entry {interval}{549}
15155 -\entry {interval timer, setting}{578}
15156 -\entry {INTR character}{460}
15157 -\entry {invalid exception}{522}
15158 -\entry {inverse complex hyperbolic functions}{487}
15159 -\entry {inverse complex trigonometric functions}{482}
15160 -\entry {inverse hyperbolic functions}{487}
15161 -\entry {inverse trigonometric functions}{481}
15162 -\entry {invocation of program}{657}
15163 -\entry {IOCTLs}{349}
15164 -\entry {ISO 10646}{111}
15165 -\entry {ISO 2022}{113}
15166 -\entry {ISO 6937}{114}
15167 -\entry {ISO C}{2}
15168 -\entry {ISO-2022-JP}{139}
15169 -\entry {ISO/IEC 9945-1}{2}
15170 -\entry {ISO/IEC 9945-2}{2}
15171 -\initial {J}
15172 -\entry {job}{713}
15173 -\entry {job control}{713}
15174 -\entry {job control functions}{728}
15175 -\entry {job control is optional}{714}
15176 -\entry {job control signals}{618}
15177 -\entry {job control, enabling}{717}
15178 -\initial {K}
15179 -\entry {Kermit the frog}{199}
15180 -\entry {kernel call}{695}
15181 -\entry {kernel header files}{999}
15182 -\entry {KILL character}{460}
15183 -\entry {kill signal}{617}
15184 -\entry {killing a process}{640}
15185 -\entry {Korn Shell}{206}
15186 -\initial {L}
15187 -\entry {LANG environment variable}{173}
15188 -\entry {\code {LANG} environment variable}{694}
15189 -\entry {launching jobs}{718}
15190 -\entry {LC_ALL environment variable}{173}
15191 -\entry {\code {LC_ALL} environment variable}{694}
15192 -\entry {\code {LC_COLLATE} environment variable}{694}
15193 -\entry {\code {LC_CTYPE} environment variable}{694}
15194 -\entry {LC_MESSAGES environment variable}{173}
15195 -\entry {\code {LC_MESSAGES} environment variable}{694}
15196 -\entry {\code {LC_MONETARY} environment variable}{694}
15197 -\entry {\code {LC_NUMERIC} environment variable}{694}
15198 -\entry {\code {LC_TIME} environment variable}{694}
15199 -\entry {leap second}{556}
15200 -\entry {length of string}{76}
15201 -\entry {level, for socket options}{441}
15202 -\entry {LGPL, Lesser General Public License}{1017}
15203 -\entry {library}{1}
15204 -\entry {limit}{585}
15205 -\entry {limits on resource usage}{585}
15206 -\entry {limits, file name length}{800}
15207 -\entry {limits, floating types}{851}
15208 -\entry {limits, integer types}{850}
15209 -\entry {limits, link count of files}{799}
15210 -\entry {limits, number of open files}{787}
15211 -\entry {limits, number of processes}{787}
15212 -\entry {limits, number of supplementary group IDs}{787}
15213 -\entry {limits, pipe buffer size}{800}
15214 -\entry {limits, POSIX}{787}
15215 -\entry {limits, program argument size}{787}
15216 -\entry {limits, terminal input queue}{799}
15217 -\entry {limits, time zone name length}{787}
15218 -\entry {line buffered stream}{288}
15219 -\entry {line speed}{457}
15220 -\entry {lines (in a text file)}{283}
15221 -\entry {link}{227}
15222 -\entry {link, hard}{363}
15223 -\entry {link, soft}{364}
15224 -\entry {link, symbolic}{364}
15225 -\entry {linked channels}{314}
15226 -\entry {listening (sockets)}{425}
15227 -\entry {literals}{32}
15228 -\entry {little-endian}{418}
15229 -\entry {LNEXT character}{462}
15230 -\entry {load average}{600}
15231 -\entry {local namespace, for sockets}{405}
15232 -\entry {local network address number}{409}
15233 -\entry {local time}{553}
15234 -\entry {locale categories}{154}
15235 -\entry {locale, changing}{155}
15236 -\entry {locales}{153}
15237 -\entry {locking pages}{62}
15238 -\entry {logarithm functions}{483}
15239 -\entry {login name}{743}
15240 -\entry {login name, determining}{753}
15241 -\entry {\code {LOGNAME} environment variable}{693}
15242 -\entry {long jumps}{601}
15243 -\entry {long-named options}{658}
15244 -\entry {longjmp}{60}
15245 -\entry {loss of data on sockets}{399}
15246 -\entry {lost resource signal}{620}
15247 -\entry {lower-case character}{67, 71}
15248 -\initial {M}
15249 -\entry {macros}{52}
15250 -\entry {\code {main} function}{657}
15251 -\entry {malloc debugger}{45}
15252 -\entry {\code {malloc} function}{34}
15253 -\entry {mantissa (of floating point number)}{852}
15254 -\entry {matching failure, in \code {scanf}}{272}
15255 -\entry {math errors}{490}
15256 -\entry {mathematical constants}{479}
15257 -\entry {maximum}{537}
15258 -\entry {maximum field width (\code {scanf})}{273}
15259 -\entry {maximum limit}{585}
15260 -\entry {maximum possible integer}{518}
15261 -\entry {measurements of floating types}{851}
15262 -\entry {memory allocation}{31}
15263 -\entry {memory lock}{62}
15264 -\entry {memory mapped file}{32}
15265 -\entry {memory mapped I/O}{32}
15266 -\entry {memory page}{598}
15267 -\entry {merging of signals}{632}
15268 -\entry {MIN termios slot}{463}
15269 -\entry {minimum}{537}
15270 -\entry {minimum field width (\code {printf})}{252}
15271 -\entry {minimum possible integer}{518}
15272 -\entry {mixing descriptors and streams}{314}
15273 -\entry {modem disconnect}{453}
15274 -\entry {modem status lines}{453}
15275 -\entry {monetary value formatting}{158}
15276 -\entry {multi-threaded application}{236}
15277 -\entry {multibyte character}{113}
15278 -\entry {multibyte character string}{75}
15279 -\entry {multibyte string}{76}
15280 -\entry {multiple names for one file}{363}
15281 -\entry {multiplexing input}{321}
15282 -\entry {multiply-add}{537}
15283 -\initial {N}
15284 -\entry {name of running program}{27}
15285 -\entry {name of socket}{401}
15286 -\entry {Name Service Switch}{733}
15287 -\entry {name space}{6}
15288 -\entry {names of signals}{613}
15289 -\entry {namespace (of socket)}{399}
15290 -\entry {NaN}{524, 536}
15291 -\entry {netgroup}{733}
15292 -\entry {Netgroup}{767}
15293 -\entry {network byte order}{418}
15294 -\entry {network number}{409}
15295 -\entry {network protocol}{399}
15296 -\entry {networks}{733}
15297 -\entry {networks database}{443}
15298 -\entry {NIS}{771}
15299 -\entry {NIS domain name}{771, 772}
15300 -\entry {nisplus, and booting}{735}
15301 -\entry {nisplus, and completeness}{735}
15302 -\entry {NLSPATH environment variable}{172}
15303 -\entry {\code {NLSPATH} environment variable}{694}
15304 -\entry {non-blocking open}{342}
15305 -\entry {non-local exit, from signal handler}{630}
15306 -\entry {non-local exits}{601}
15307 -\entry {noncanonical input processing}{446}
15308 -\entry {normalization functions (floating-point)}{531}
15309 -\entry {normalized floating point number}{852}
15310 -\entry {not a number}{524}
15311 -\entry {NSS}{733}
15312 -\entry {\file {nsswitch.conf}}{734}
15313 -\entry {null character}{75}
15314 -\entry {null pointer constant}{848}
15315 -\entry {null wide character}{75}
15316 -\entry {number of arguments passed}{844}
15317 -\entry {number syntax, parsing}{539}
15318 -\entry {numeric value formatting}{158}
15319 -\initial {O}
15320 -\entry {obstack status}{56}
15321 -\entry {obstacks}{49}
15322 -\entry {open-time action flags}{342}
15323 -\entry {opening a file}{225}
15324 -\entry {opening a file descriptor}{303}
15325 -\entry {opening a pipe}{393}
15326 -\entry {opening a pseudo-terminal pair}{470}
15327 -\entry {opening a socket}{422}
15328 -\entry {opening a socket pair}{423}
15329 -\entry {opening a stream}{232}
15330 -\entry {Optimization}{515}
15331 -\entry {optimizing NSS}{736}
15332 -\entry {option parsing with argp}{666}
15333 -\entry {optional arguments}{842}
15334 -\entry {optional POSIX features}{788}
15335 -\entry {orientation, stream}{233, 240}
15336 -\entry {orphaned process group}{715}
15337 -\entry {out-of-band data}{433}
15338 -\entry {output conversions, for \code {printf}}{252}
15339 -\entry {output possible signal}{618}
15340 -\entry {overflow exception}{522}
15341 -\entry {owner of a file}{377}
15342 -\initial {P}
15343 -\entry {packet}{399}
15344 -\entry {page boundary}{38}
15345 -\entry {page fault}{31}
15346 -\entry {page fault, copy-on-write}{63}
15347 -\entry {page frame}{31}
15348 -\entry {page, memory}{598}
15349 -\entry {page, virtual memory}{31}
15350 -\entry {paging}{31, 62}
15351 -\entry {parameter promotion}{77}
15352 -\entry {parent directory}{228}
15353 -\entry {parent process}{701, 702}
15354 -\entry {parity checking}{450}
15355 -\entry {parsing a template string}{263}
15356 -\entry {parsing numbers (in formatted input)}{539}
15357 -\entry {parsing program arguments}{659}
15358 -\entry {parsing tokens from a string}{100}
15359 -\entry {passwd}{733}
15360 -\entry {password database}{761}
15361 -\entry {\code {PATH} environment variable}{693}
15362 -\entry {\code {pause} function}{650}
15363 -\entry {peeking at input}{247}
15364 -\entry {pending signals}{612}
15365 -\entry {pending signals, checking for}{647}
15366 -\entry {period of time}{549}
15367 -\entry {permission to access a file}{380}
15368 -\entry {persona}{743}
15369 -\entry {physical address}{598}
15370 -\entry {physical memory}{598}
15371 -\entry {pi (trigonometric constant)}{480}
15372 -\entry {pipe}{393}
15373 -\entry {pipe signal}{620}
15374 -\entry {pipe to a subprocess}{395}
15375 -\entry {port number}{416}
15376 -\entry {positioning a file descriptor}{310}
15377 -\entry {positioning a stream}{284}
15378 -\entry {positive difference}{537}
15379 -\entry {POSIX}{2}
15380 -\entry {POSIX capacity limits}{787}
15381 -\entry {POSIX optional features}{788}
15382 -\entry {POSIX.1}{2}
15383 -\entry {POSIX.2}{2}
15384 -\entry {power functions}{483}
15385 -\entry {precision (of floating point number)}{852}
15386 -\entry {precision (\code {printf})}{252}
15387 -\entry {predicates on arrays}{89}
15388 -\entry {predicates on characters}{67}
15389 -\entry {predicates on strings}{89}
15390 -\entry {preemptive scheduling}{590}
15391 -\entry {primitives, interrupting}{639}
15392 -\entry {printing character}{68, 71}
15393 -\entry {priority of a process}{589}
15394 -\entry {priority, absolute}{589}
15395 -\entry {process}{657, 701}
15396 -\entry {process completion}{706}
15397 -\entry {process group functions}{728}
15398 -\entry {process group ID}{719}
15399 -\entry {process group leader}{719}
15400 -\entry {process groups}{713}
15401 -\entry {process ID}{702}
15402 -\entry {process image}{702}
15403 -\entry {process lifetime}{702}
15404 -\entry {process priority}{589}
15405 -\entry {process signal mask}{645}
15406 -\entry {process termination}{696}
15407 -\entry {processor time}{549, 552}
15408 -\entry {profiling alarm signal}{618}
15409 -\entry {profiling timer}{578}
15410 -\entry {program}{657}
15411 -\entry {program argument syntax}{658}
15412 -\entry {program arguments}{657}
15413 -\entry {program arguments, parsing}{659}
15414 -\entry {program error signals}{613}
15415 -\entry {program name}{27}
15416 -\entry {program startup}{657}
15417 -\entry {program termination}{696}
15418 -\entry {program termination signals}{616}
15419 -\entry {programming your own streams}{295}
15420 -\entry {project complex numbers}{539}
15421 -\entry {protocol (of socket)}{399}
15422 -\entry {protocol family}{399}
15423 -\entry {protocols}{733}
15424 -\entry {protocols database}{419}
15425 -\entry {prototypes for variadic functions}{843}
15426 -\entry {pseudo-random numbers}{508}
15427 -\entry {pseudo-terminals}{468}
15428 -\entry {punctuation character}{68, 72}
15429 -\entry {pushing input back}{247}
15430 -\initial {Q}
15431 -\entry {quick sort function (for arrays)}{196}
15432 -\entry {QUIT character}{460}
15433 -\entry {quit signal}{616}
15434 -\entry {quote removal}{219}
15435 -\initial {R}
15436 -\entry {race conditions, relating to job control}{719}
15437 -\entry {race conditions, relating to signals}{631}
15438 -\entry {radix (of floating point number)}{852}
15439 -\entry {raising signals}{639}
15440 -\entry {random numbers}{508}
15441 -\entry {random-access files}{226}
15442 -\entry {range error}{526}
15443 -\entry {range of integer type}{850}
15444 -\entry {read lock}{345}
15445 -\entry {reading from a directory}{353}
15446 -\entry {reading from a file descriptor}{306}
15447 -\entry {reading from a socket}{427}
15448 -\entry {reading from a stream, by blocks}{249}
15449 -\entry {reading from a stream, by characters}{243}
15450 -\entry {reading from a stream, formatted}{272}
15451 -\entry {ready to run}{590}
15452 -\entry {real group ID}{743}
15453 -\entry {real user ID}{743}
15454 -\entry {real-time timer}{578}
15455 -\entry {realtime CPU scheduling}{589}
15456 -\entry {realtime processing}{62}
15457 -\entry {realtime scheduling}{591}
15458 -\entry {receiving datagrams}{436}
15459 -\entry {record locking}{345}
15460 -\entry {redirecting input and output}{337}
15461 -\entry {reentrant functions}{635}
15462 -\entry {reentrant NSS functions}{737}
15463 -\entry {relative file name}{228}
15464 -\entry {removal of quotes}{219}
15465 -\entry {removing a file}{367}
15466 -\entry {removing macros that shadow functions}{5}
15467 -\entry {renaming a file}{368}
15468 -\entry {reporting bugs}{1000}
15469 -\entry {reporting errors}{15}
15470 -\entry {REPRINT character}{460}
15471 -\entry {reserved names}{6}
15472 -\entry {resource limits}{585}
15473 -\entry {restarting interrupted primitives}{639}
15474 -\entry {restrictions on signal handler functions}{634}
15475 -\entry {root directory}{228}
15476 -\entry {Rot13}{105}
15477 -\entry {rpc}{733}
15478 -\entry {runnable process}{590}
15479 -\entry {running a command}{701}
15480 -\initial {S}
15481 -\entry {saved set-group-ID}{744}
15482 -\entry {saved set-user-ID}{744}
15483 -\entry {scanning the group list}{765}
15484 -\entry {scanning the user list}{762}
15485 -\entry {scatter-gather}{315}
15486 -\entry {scheduling, traditional}{595}
15487 -\entry {search function (for arrays)}{195}
15488 -\entry {search functions (for strings)}{96}
15489 -\entry {seed (for random numbers)}{508}
15490 -\entry {seeking on a file descriptor}{310}
15491 -\entry {seeking on a stream}{284}
15492 -\entry {segmentation violation}{615}
15493 -\entry {sending a datagram}{436}
15494 -\entry {sending signals}{639}
15495 -\entry {sequential-access files}{226}
15496 -\entry {server}{424}
15497 -\entry {services}{733}
15498 -\entry {services database}{417}
15499 -\entry {session}{713}
15500 -\entry {session leader}{713}
15501 -\entry {setting an alarm}{578}
15502 -\entry {\code {setuid} programs}{744}
15503 -\entry {setuid programs and file access}{382}
15504 -\entry {severity class}{298, 300}
15505 -\entry {sgettext}{190}
15506 -\entry {shadow}{733}
15507 -\entry {shadowing functions with macros}{5}
15508 -\entry {shared lock}{345}
15509 -\entry {shared memory}{598}
15510 -\entry {shell}{713}
15511 -\entry {shift state}{116}
15512 -\entry {Shift_JIS}{113}
15513 -\entry {shrinking objects}{54}
15514 -\entry {shutting down a socket}{422}
15515 -\entry {\code {sigaction} flags}{627}
15516 -\entry {\code {sigaction} function}{624}
15517 -\entry {\code {SIGCHLD}, handling of}{723}
15518 -\entry {sign (of floating point number)}{852}
15519 -\entry {signal}{522, 611}
15520 -\entry {signal action}{612}
15521 -\entry {signal actions}{622}
15522 -\entry {signal flags}{627}
15523 -\entry {\code {signal} function}{622}
15524 -\entry {signal handler function}{628}
15525 -\entry {signal mask}{645}
15526 -\entry {signal messages}{621}
15527 -\entry {signal names}{613}
15528 -\entry {signal number}{613}
15529 -\entry {signal set}{644}
15530 -\entry {signals, generating}{639}
15531 -\entry {signedness}{517}
15532 -\entry {significand (of floating point number)}{852}
15533 -\entry {\code {SIGTTIN}, from background job}{714}
15534 -\entry {\code {SIGTTOU}, from background job}{715}
15535 -\entry {simple time}{553}
15536 -\entry {single-byte string}{76}
15537 -\entry {size of string}{76}
15538 -\entry {SJIS}{113}
15539 -\entry {socket}{399}
15540 -\entry {socket address (name) binding}{401}
15541 -\entry {socket domain}{399}
15542 -\entry {socket namespace}{399}
15543 -\entry {socket option level}{441}
15544 -\entry {socket options}{441}
15545 -\entry {socket pair}{423}
15546 -\entry {socket protocol}{399}
15547 -\entry {socket shutdown}{422}
15548 -\entry {socket, client actions}{424}
15549 -\entry {socket, closing}{422}
15550 -\entry {socket, connecting}{424}
15551 -\entry {socket, creating}{422}
15552 -\entry {socket, initiating a connection}{424}
15553 -\entry {sockets, accepting connections}{426}
15554 -\entry {sockets, listening}{425}
15555 -\entry {sockets, server actions}{425}
15556 -\entry {soft limit}{585}
15557 -\entry {soft link}{364}
15558 -\entry {sort function (for arrays)}{196}
15559 -\entry {sparse files}{311}
15560 -\entry {special files}{388}
15561 -\entry {special functions}{488}
15562 -\entry {specified action (for a signal)}{612}
15563 -\entry {speed of execution}{62}
15564 -\entry {square root function}{485}
15565 -\entry {stable sorting}{196}
15566 -\entry {standard dot notation, for Internet addresses}{409}
15567 -\entry {standard environment variables}{693}
15568 -\entry {standard error file descriptor}{313}
15569 -\entry {standard error stream}{232}
15570 -\entry {standard file descriptors}{313}
15571 -\entry {standard input file descriptor}{313}
15572 -\entry {standard input stream}{231}
15573 -\entry {standard output file descriptor}{313}
15574 -\entry {standard output stream}{231}
15575 -\entry {standard streams}{231}
15576 -\entry {standards}{1}
15577 -\entry {START character}{461}
15578 -\entry {startup of program}{657}
15579 -\entry {stateful}{116, 119, 124, 134, 136, 148}
15580 -\entry {static memory allocation}{33}
15581 -\entry {static storage class}{33}
15582 -\entry {STATUS character}{462}
15583 -\entry {status codes}{15}
15584 -\entry {status of a file}{370}
15585 -\entry {status of obstack}{56}
15586 -\entry {sticky bit}{379}
15587 -\entry {STOP character}{461}
15588 -\entry {stop signal}{619}
15589 -\entry {stopped job}{714}
15590 -\entry {stopped jobs, continuing}{726}
15591 -\entry {stopped jobs, detecting}{723}
15592 -\entry {storage allocation}{31}
15593 -\entry {stream (sockets)}{399}
15594 -\entry {stream orientation}{233, 240}
15595 -\entry {stream, for I/O to a string}{292}
15596 -\entry {streams and descriptors}{314}
15597 -\entry {streams, and file descriptors}{313}
15598 -\entry {streams, C++}{239}
15599 -\entry {streams, standard}{231}
15600 -\entry {string}{75}
15601 -\entry {string allocation}{76}
15602 -\entry {string collation functions}{92}
15603 -\entry {string comparison functions}{89}
15604 -\entry {string concatenation functions}{79}
15605 -\entry {string copy functions}{79}
15606 -\entry {string length}{76}
15607 -\entry {string literal}{75}
15608 -\entry {string search functions}{96}
15609 -\entry {string stream}{292}
15610 -\entry {string vectors, null-character separated}{107}
15611 -\entry {string, representation of}{75}
15612 -\entry {style of communication (of a socket)}{399}
15613 -\entry {subshell}{717}
15614 -\entry {substitution of variables and commands}{219}
15615 -\entry {successive signals}{632}
15616 -\entry {summer time}{557}
15617 -\entry {SunOS}{3}
15618 -\entry {supplementary group IDs}{743}
15619 -\entry {SUSP character}{460}
15620 -\entry {suspend character}{460}
15621 -\entry {SVID}{3}
15622 -\entry {swap space}{31}
15623 -\entry {symbolic link}{364}
15624 -\entry {symbolic link, opening}{342}
15625 -\entry {synchronizing}{323, 332}
15626 -\entry {syntax error messages, in argp}{674}
15627 -\entry {syntax, for program arguments}{658}
15628 -\entry {syntax, for reading numbers}{539}
15629 -\entry {sysconf}{599, 600}
15630 -\entry {system call}{695}
15631 -\entry {system call number}{695}
15632 -\entry {System V Unix}{3}
15633 -\initial {T}
15634 -\entry {TCP (Internet protocol)}{419}
15635 -\entry {template, for \code {printf}}{250}
15636 -\entry {template, for \code {scanf}}{272}
15637 -\entry {\code {TERM} environment variable}{694}
15638 -\entry {terminal flow control}{466}
15639 -\entry {terminal identification}{445}
15640 -\entry {terminal input queue}{446}
15641 -\entry {terminal input queue, clearing}{465}
15642 -\entry {terminal input signal}{619}
15643 -\entry {terminal line control functions}{465}
15644 -\entry {terminal line speed}{457}
15645 -\entry {terminal mode data types}{447}
15646 -\entry {terminal mode functions}{448}
15647 -\entry {terminal modes, BSD}{464}
15648 -\entry {terminal output queue}{446}
15649 -\entry {terminal output queue, flushing}{465}
15650 -\entry {terminal output signal}{619}
15651 -\entry {terminated jobs, detecting}{723}
15652 -\entry {termination signal}{616}
15653 -\entry {testing access permission}{382}
15654 -\entry {testing exit status of child process}{706}
15655 -\entry {text stream}{283}
15656 -\entry {thrashing}{598}
15657 -\entry {thread of control}{657}
15658 -\entry {threads}{236}
15659 -\entry {ticks, clock}{551}
15660 -\entry {tilde expansion}{219}
15661 -\entry {time}{549}
15662 -\entry {TIME termios slot}{463}
15663 -\entry {time zone}{575}
15664 -\entry {time zone database}{576}
15665 -\entry {time, elapsed}{549}
15666 -\entry {time, high precision}{559}
15667 -\entry {timer, profiling}{578}
15668 -\entry {timer, real-time}{578}
15669 -\entry {timer, virtual}{578}
15670 -\entry {timers, setting}{578}
15671 -\entry {timespec}{550}
15672 -\entry {timeval}{550}
15673 -\entry {timing error in signal handling}{649}
15674 -\entry {TMPDIR environment variable}{390}
15675 -\entry {tokenizing strings}{100}
15676 -\entry {tools, for installing library}{997}
15677 -\entry {transmitting datagrams}{436}
15678 -\entry {tree, directory}{360}
15679 -\entry {triangulation}{139}
15680 -\entry {trigonometric functions}{480}
15681 -\entry {type measurements, floating}{851}
15682 -\entry {type measurements, integer}{850}
15683 -\entry {type modifier character (\code {printf})}{252}
15684 -\entry {type modifier character (\code {scanf})}{273}
15685 -\entry {typeahead buffer}{446}
15686 -\entry {\code {TZ} environment variable}{694}
15687 -\initial {U}
15688 -\entry {UCS-2}{111}
15689 -\entry {UCS-4}{111}
15690 -\entry {ulps}{490}
15691 -\entry {umask}{380}
15692 -\entry {unbuffered stream}{288}
15693 -\entry {unconstrained memory allocation}{34}
15694 -\entry {undefining macros that shadow functions}{5}
15695 -\entry {underflow exception}{522}
15696 -\entry {Unicode}{111}
15697 -\entry {Unix, Berkeley}{3}
15698 -\entry {Unix, System V}{3}
15699 -\entry {unlinking a file}{367}
15700 -\entry {unordered comparison}{536}
15701 -\entry {unreading characters}{247}
15702 -\entry {upgrading from libc5}{999}
15703 -\entry {upper-case character}{67, 72}
15704 -\entry {urgent data signal}{618}
15705 -\entry {urgent socket condition}{433}
15706 -\entry {usage limits}{585}
15707 -\entry {usage messages, in argp}{673}
15708 -\entry {user accounting database}{753}
15709 -\entry {user database}{761}
15710 -\entry {user ID}{743}
15711 -\entry {user ID, determining}{753}
15712 -\entry {user name}{743}
15713 -\entry {user signals}{621}
15714 -\entry {usual file name errors}{229}
15715 -\entry {UTF-16}{111}
15716 -\entry {UTF-7}{114}
15717 -\entry {UTF-8}{111, 114}
15718 -\initial {V}
15719 -\entry {va_copy}{85}
15720 -\entry {variable number of arguments}{842}
15721 -\entry {variable substitution}{219}
15722 -\entry {variable-sized arrays}{61}
15723 -\entry {variadic function argument access}{844}
15724 -\entry {variadic function prototypes}{843}
15725 -\entry {variadic functions}{842}
15726 -\entry {variadic functions, calling}{845}
15727 -\entry {virtual time alarm signal}{618}
15728 -\entry {virtual timer}{578}
15729 -\entry {\code {volatile} declarations}{634}
15730 -\initial {W}
15731 -\entry {waiting for a signal}{650}
15732 -\entry {waiting for completion of child process}{706}
15733 -\entry {waiting for input or output}{321}
15734 -\entry {WERASE character}{459}
15735 -\entry {whitespace character}{68, 72}
15736 -\entry {wide character}{111}
15737 -\entry {wide character string}{75, 76}
15738 -\entry {width of integer type}{850}
15739 -\entry {wildcard expansion}{219}
15740 -\entry {wint_t}{77}
15741 -\entry {word expansion}{218}
15742 -\entry {working directory}{351}
15743 -\entry {write lock}{345}
15744 -\entry {writing to a file descriptor}{308}
15745 -\entry {writing to a socket}{427}
15746 -\entry {writing to a stream, by blocks}{249}
15747 -\entry {writing to a stream, by characters}{241}
15748 -\entry {writing to a stream, formatted}{250}
15749 -\initial {Y}
15750 -\entry {YP}{771}
15751 -\entry {YP domain name}{771, 772}
15752 -\initial {Z}
15753 -\entry {zero divide}{522}
15754 diff -u -udbrN glibc-2.3.2/manual/libc.fn glibc-2.3.2-200304020432/manual/libc.fn
15755 --- glibc-2.3.2/manual/libc.fn Tue Feb 25 11:35:07 2003
15756 +++ glibc-2.3.2-200304020432/manual/libc.fn Thu Jan 1 01:00:00 1970
15757 @@ -1,1335 +0,0 @@
15758 -\entry{strerror}{26}{\code {strerror}}
15759 -\entry{strerror_r}{26}{\code {strerror_r}}
15760 -\entry{perror}{26}{\code {perror}}
15761 -\entry{error}{28}{\code {error}}
15762 -\entry{error_at_line}{28}{\code {error_at_line}}
15763 -\entry{warn}{30}{\code {warn}}
15764 -\entry{vwarn}{30}{\code {vwarn}}
15765 -\entry{warnx}{30}{\code {warnx}}
15766 -\entry{vwarnx}{30}{\code {vwarnx}}
15767 -\entry{err}{30}{\code {err}}
15768 -\entry{verr}{30}{\code {verr}}
15769 -\entry{errx}{30}{\code {errx}}
15770 -\entry{verrx}{30}{\code {verrx}}
15771 -\entry{malloc}{34}{\code {malloc}}
15772 -\entry{free}{35}{\code {free}}
15773 -\entry{cfree}{36}{\code {cfree}}
15774 -\entry{realloc}{36}{\code {realloc}}
15775 -\entry{calloc}{37}{\code {calloc}}
15776 -\entry{memalign}{38}{\code {memalign}}
15777 -\entry{posix_memalign}{38}{\code {posix_memalign}}
15778 -\entry{valloc}{38}{\code {valloc}}
15779 -\entry{mallopt}{39}{\code {mallopt}}
15780 -\entry{mcheck}{39}{\code {mcheck}}
15781 -\entry{mprobe}{40}{\code {mprobe}}
15782 -\entry{mallinfo}{44}{\code {mallinfo}}
15783 -\entry{mtrace}{45}{\code {mtrace}}
15784 -\entry{muntrace}{46}{\code {muntrace}}
15785 -\entry{obstack_chunk_alloc}{50}{\code {obstack_chunk_alloc}}
15786 -\entry{obstack_chunk_free}{50}{\code {obstack_chunk_free}}
15787 -\entry{obstack_init}{50}{\code {obstack_init}}
15788 -\entry{obstack_alloc}{51}{\code {obstack_alloc}}
15789 -\entry{obstack_copy}{51}{\code {obstack_copy}}
15790 -\entry{obstack_copy0}{52}{\code {obstack_copy0}}
15791 -\entry{obstack_free}{52}{\code {obstack_free}}
15792 -\entry{obstack_blank}{53}{\code {obstack_blank}}
15793 -\entry{obstack_grow}{53}{\code {obstack_grow}}
15794 -\entry{obstack_grow0}{54}{\code {obstack_grow0}}
15795 -\entry{obstack_1grow}{54}{\code {obstack_1grow}}
15796 -\entry{obstack_ptr_grow}{54}{\code {obstack_ptr_grow}}
15797 -\entry{obstack_int_grow}{54}{\code {obstack_int_grow}}
15798 -\entry{obstack_finish}{54}{\code {obstack_finish}}
15799 -\entry{obstack_object_size}{54}{\code {obstack_object_size}}
15800 -\entry{obstack_room}{55}{\code {obstack_room}}
15801 -\entry{obstack_1grow_fast}{55}{\code {obstack_1grow_fast}}
15802 -\entry{obstack_ptr_grow_fast}{55}{\code {obstack_ptr_grow_fast}}
15803 -\entry{obstack_int_grow_fast}{55}{\code {obstack_int_grow_fast}}
15804 -\entry{obstack_blank_fast}{55}{\code {obstack_blank_fast}}
15805 -\entry{obstack_base}{56}{\code {obstack_base}}
15806 -\entry{obstack_next_free}{56}{\code {obstack_next_free}}
15807 -\entry{obstack_object_size}{56}{\code {obstack_object_size}}
15808 -\entry{obstack_alignment_mask}{57}{\code {obstack_alignment_mask}}
15809 -\entry{obstack_chunk_size}{57}{\code {obstack_chunk_size}}
15810 -\entry{alloca}{59}{\code {alloca}}
15811 -\entry{brk}{62}{\code {brk}}
15812 -\entry{sbrk}{62}{\code {sbrk}}
15813 -\entry{mlock}{64}{\code {mlock}}
15814 -\entry{munlock}{64}{\code {munlock}}
15815 -\entry{mlockall}{64}{\code {mlockall}}
15816 -\entry{munlockall}{65}{\code {munlockall}}
15817 -\entry{islower}{67}{\code {islower}}
15818 -\entry{isupper}{67}{\code {isupper}}
15819 -\entry{isalpha}{67}{\code {isalpha}}
15820 -\entry{isdigit}{68}{\code {isdigit}}
15821 -\entry{isalnum}{68}{\code {isalnum}}
15822 -\entry{isxdigit}{68}{\code {isxdigit}}
15823 -\entry{ispunct}{68}{\code {ispunct}}
15824 -\entry{isspace}{68}{\code {isspace}}
15825 -\entry{isblank}{68}{\code {isblank}}
15826 -\entry{isgraph}{68}{\code {isgraph}}
15827 -\entry{isprint}{68}{\code {isprint}}
15828 -\entry{iscntrl}{68}{\code {iscntrl}}
15829 -\entry{isascii}{68}{\code {isascii}}
15830 -\entry{tolower}{69}{\code {tolower}}
15831 -\entry{toupper}{69}{\code {toupper}}
15832 -\entry{toascii}{69}{\code {toascii}}
15833 -\entry{_tolower}{69}{\code {_tolower}}
15834 -\entry{_toupper}{69}{\code {_toupper}}
15835 -\entry{wctype}{70}{\code {wctype}}
15836 -\entry{iswctype}{70}{\code {iswctype}}
15837 -\entry{iswalnum}{70}{\code {iswalnum}}
15838 -\entry{iswalpha}{70}{\code {iswalpha}}
15839 -\entry{iswcntrl}{71}{\code {iswcntrl}}
15840 -\entry{iswdigit}{71}{\code {iswdigit}}
15841 -\entry{iswgraph}{71}{\code {iswgraph}}
15842 -\entry{iswlower}{71}{\code {iswlower}}
15843 -\entry{iswprint}{71}{\code {iswprint}}
15844 -\entry{iswpunct}{72}{\code {iswpunct}}
15845 -\entry{iswspace}{72}{\code {iswspace}}
15846 -\entry{iswupper}{72}{\code {iswupper}}
15847 -\entry{iswxdigit}{72}{\code {iswxdigit}}
15848 -\entry{iswblank}{72}{\code {iswblank}}
15849 -\entry{wctrans}{74}{\code {wctrans}}
15850 -\entry{towctrans}{74}{\code {towctrans}}
15851 -\entry{towlower}{74}{\code {towlower}}
15852 -\entry{towupper}{74}{\code {towupper}}
15853 -\entry{strlen}{77}{\code {strlen}}
15854 -\entry{wcslen}{78}{\code {wcslen}}
15855 -\entry{strnlen}{78}{\code {strnlen}}
15856 -\entry{wcsnlen}{79}{\code {wcsnlen}}
15857 -\entry{memcpy}{79}{\code {memcpy}}
15858 -\entry{wmemcpy}{79}{\code {wmemcpy}}
15859 -\entry{mempcpy}{80}{\code {mempcpy}}
15860 -\entry{wmempcpy}{80}{\code {wmempcpy}}
15861 -\entry{memmove}{80}{\code {memmove}}
15862 -\entry{wmemmove}{81}{\code {wmemmove}}
15863 -\entry{memccpy}{81}{\code {memccpy}}
15864 -\entry{memset}{81}{\code {memset}}
15865 -\entry{wmemset}{81}{\code {wmemset}}
15866 -\entry{strcpy}{81}{\code {strcpy}}
15867 -\entry{wcscpy}{81}{\code {wcscpy}}
15868 -\entry{strncpy}{81}{\code {strncpy}}
15869 -\entry{wcsncpy}{82}{\code {wcsncpy}}
15870 -\entry{strdup}{82}{\code {strdup}}
15871 -\entry{wcsdup}{82}{\code {wcsdup}}
15872 -\entry{strndup}{82}{\code {strndup}}
15873 -\entry{stpcpy}{83}{\code {stpcpy}}
15874 -\entry{wcpcpy}{83}{\code {wcpcpy}}
15875 -\entry{stpncpy}{83}{\code {stpncpy}}
15876 -\entry{wcpncpy}{84}{\code {wcpncpy}}
15877 -\entry{strdupa}{84}{\code {strdupa}}
15878 -\entry{strndupa}{85}{\code {strndupa}}
15879 -\entry{strcat}{85}{\code {strcat}}
15880 -\entry{wcscat}{85}{\code {wcscat}}
15881 -\entry{strncat}{87}{\code {strncat}}
15882 -\entry{wcsncat}{88}{\code {wcsncat}}
15883 -\entry{bcopy}{88}{\code {bcopy}}
15884 -\entry{bzero}{89}{\code {bzero}}
15885 -\entry{memcmp}{89}{\code {memcmp}}
15886 -\entry{wmemcmp}{89}{\code {wmemcmp}}
15887 -\entry{strcmp}{90}{\code {strcmp}}
15888 -\entry{wcscmp}{90}{\code {wcscmp}}
15889 -\entry{strcasecmp}{90}{\code {strcasecmp}}
15890 -\entry{wcscasecmp}{90}{\code {wcscasecmp}}
15891 -\entry{strncmp}{91}{\code {strncmp}}
15892 -\entry{wcsncmp}{91}{\code {wcsncmp}}
15893 -\entry{strncasecmp}{91}{\code {strncasecmp}}
15894 -\entry{wcsncasecmp}{91}{\code {wcsncasecmp}}
15895 -\entry{strverscmp}{91}{\code {strverscmp}}
15896 -\entry{bcmp}{92}{\code {bcmp}}
15897 -\entry{strcoll}{93}{\code {strcoll}}
15898 -\entry{wcscoll}{93}{\code {wcscoll}}
15899 -\entry{strxfrm}{93}{\code {strxfrm}}
15900 -\entry{wcsxfrm}{94}{\code {wcsxfrm}}
15901 -\entry{memchr}{96}{\code {memchr}}
15902 -\entry{wmemchr}{96}{\code {wmemchr}}
15903 -\entry{rawmemchr}{96}{\code {rawmemchr}}
15904 -\entry{memrchr}{97}{\code {memrchr}}
15905 -\entry{strchr}{97}{\code {strchr}}
15906 -\entry{wcschr}{97}{\code {wcschr}}
15907 -\entry{strchrnul}{97}{\code {strchrnul}}
15908 -\entry{wcschrnul}{97}{\code {wcschrnul}}
15909 -\entry{strrchr}{98}{\code {strrchr}}
15910 -\entry{wcsrchr}{98}{\code {wcsrchr}}
15911 -\entry{strstr}{98}{\code {strstr}}
15912 -\entry{wcsstr}{98}{\code {wcsstr}}
15913 -\entry{wcswcs}{98}{\code {wcswcs}}
15914 -\entry{strcasestr}{98}{\code {strcasestr}}
15915 -\entry{memmem}{99}{\code {memmem}}
15916 -\entry{strspn}{99}{\code {strspn}}
15917 -\entry{wcsspn}{99}{\code {wcsspn}}
15918 -\entry{strcspn}{99}{\code {strcspn}}
15919 -\entry{wcscspn}{99}{\code {wcscspn}}
15920 -\entry{strpbrk}{99}{\code {strpbrk}}
15921 -\entry{wcspbrk}{100}{\code {wcspbrk}}
15922 -\entry{index}{100}{\code {index}}
15923 -\entry{rindex}{100}{\code {rindex}}
15924 -\entry{strtok}{100}{\code {strtok}}
15925 -\entry{wcstok}{101}{\code {wcstok}}
15926 -\entry{strtok_r}{102}{\code {strtok_r}}
15927 -\entry{strsep}{102}{\code {strsep}}
15928 -\entry{basename}{103}{\code {basename}}
15929 -\entry{basename}{104}{\code {basename}}
15930 -\entry{dirname}{104}{\code {dirname}}
15931 -\entry{strfry}{105}{\code {strfry}}
15932 -\entry{memfrob}{105}{\code {memfrob}}
15933 -\entry{l64a}{105}{\code {l64a}}
15934 -\entry{a64l}{106}{\code {a64l}}
15935 -\entry{argz_create}{108}{\code {argz_create}}
15936 -\entry{argz_create_sep}{108}{\code {argz_create_sep}}
15937 -\entry{argz_count}{108}{\code {argz_count}}
15938 -\entry{argz_extract}{108}{\code {argz_extract}}
15939 -\entry{argz_stringify}{108}{\code {argz_stringify}}
15940 -\entry{argz_add}{108}{\code {argz_add}}
15941 -\entry{argz_add_sep}{108}{\code {argz_add_sep}}
15942 -\entry{argz_append}{108}{\code {argz_append}}
15943 -\entry{argz_delete}{109}{\code {argz_delete}}
15944 -\entry{argz_insert}{109}{\code {argz_insert}}
15945 -\entry{argz_next}{109}{\code {argz_next}}
15946 -\entry{argz_replace}{109}{\code {argz_replace}}
15947 -\entry{envz_entry}{110}{\code {envz_entry}}
15948 -\entry{envz_get}{110}{\code {envz_get}}
15949 -\entry{envz_add}{110}{\code {envz_add}}
15950 -\entry{envz_merge}{110}{\code {envz_merge}}
15951 -\entry{envz_strip}{110}{\code {envz_strip}}
15952 -\entry{mbsinit}{117}{\code {mbsinit}}
15953 -\entry{btowc}{118}{\code {btowc}}
15954 -\entry{wctob}{118}{\code {wctob}}
15955 -\entry{mbrtowc}{119}{\code {mbrtowc}}
15956 -\entry{mbrlen}{120}{\code {mbrlen}}
15957 -\entry{wcrtomb}{121}{\code {wcrtomb}}
15958 -\entry{mbsrtowcs}{123}{\code {mbsrtowcs}}
15959 -\entry{wcsrtombs}{124}{\code {wcsrtombs}}
15960 -\entry{mbsnrtowcs}{125}{\code {mbsnrtowcs}}
15961 -\entry{wcsnrtombs}{126}{\code {wcsnrtombs}}
15962 -\entry{mbtowc}{128}{\code {mbtowc}}
15963 -\entry{wctomb}{128}{\code {wctomb}}
15964 -\entry{mblen}{129}{\code {mblen}}
15965 -\entry{mbstowcs}{129}{\code {mbstowcs}}
15966 -\entry{wcstombs}{130}{\code {wcstombs}}
15967 -\entry{iconv_open}{132}{\code {iconv_open}}
15968 -\entry{iconv_close}{133}{\code {iconv_close}}
15969 -\entry{iconv}{134}{\code {iconv}}
15970 -\entry{setlocale}{155}{\code {setlocale}}
15971 -\entry{localeconv}{158}{\code {localeconv}}
15972 -\entry{nl_langinfo}{161}{\code {nl_langinfo}}
15973 -\entry{strfmon}{167}{\code {strfmon}}
15974 -\entry{rpmatch}{170}{\code {rpmatch}}
15975 -\entry{catopen}{171}{\code {catopen}}
15976 -\entry{catgets}{174}{\code {catgets}}
15977 -\entry{catclose}{174}{\code {catclose}}
15978 -\entry{gettext}{181}{\code {gettext}}
15979 -\entry{dgettext}{182}{\code {dgettext}}
15980 -\entry{dcgettext}{182}{\code {dcgettext}}
15981 -\entry{textdomain}{184}{\code {textdomain}}
15982 -\entry{bindtextdomain}{184}{\code {bindtextdomain}}
15983 -\entry{ngettext}{186}{\code {ngettext}}
15984 -\entry{dngettext}{186}{\code {dngettext}}
15985 -\entry{dcngettext}{186}{\code {dcngettext}}
15986 -\entry{bind_textdomain_codeset}{189}{\code {bind_textdomain_codeset}}
15987 -\entry{lfind}{195}{\code {lfind}}
15988 -\entry{lsearch}{196}{\code {lsearch}}
15989 -\entry{bsearch}{196}{\code {bsearch}}
15990 -\entry{qsort}{196}{\code {qsort}}
15991 -\entry{hcreate}{199}{\code {hcreate}}
15992 -\entry{hdestroy}{200}{\code {hdestroy}}
15993 -\entry{hsearch}{200}{\code {hsearch}}
15994 -\entry{hcreate_r}{201}{\code {hcreate_r}}
15995 -\entry{hdestroy_r}{201}{\code {hdestroy_r}}
15996 -\entry{hsearch_r}{201}{\code {hsearch_r}}
15997 -\entry{tsearch}{202}{\code {tsearch}}
15998 -\entry{tfind}{202}{\code {tfind}}
15999 -\entry{tdelete}{202}{\code {tdelete}}
16000 -\entry{tdestroy}{203}{\code {tdestroy}}
16001 -\entry{twalk}{203}{\code {twalk}}
16002 -\entry{fnmatch}{205}{\code {fnmatch}}
16003 -\entry{glob}{209}{\code {glob}}
16004 -\entry{glob64}{209}{\code {glob64}}
16005 -\entry{globfree}{213}{\code {globfree}}
16006 -\entry{globfree64}{213}{\code {globfree64}}
16007 -\entry{regcomp}{214}{\code {regcomp}}
16008 -\entry{regexec}{216}{\code {regexec}}
16009 -\entry{regfree}{218}{\code {regfree}}
16010 -\entry{regerror}{218}{\code {regerror}}
16011 -\entry{wordexp}{220}{\code {wordexp}}
16012 -\entry{wordfree}{220}{\code {wordfree}}
16013 -\entry{fopen}{232}{\code {fopen}}
16014 -\entry{fopen64}{233}{\code {fopen64}}
16015 -\entry{freopen}{234}{\code {freopen}}
16016 -\entry{freopen64}{234}{\code {freopen64}}
16017 -\entry{__freadable}{235}{\code {__freadable}}
16018 -\entry{__fwritable}{235}{\code {__fwritable}}
16019 -\entry{__freading}{235}{\code {__freading}}
16020 -\entry{__fwriting}{235}{\code {__fwriting}}
16021 -\entry{fclose}{235}{\code {fclose}}
16022 -\entry{fcloseall}{236}{\code {fcloseall}}
16023 -\entry{flockfile}{236}{\code {flockfile}}
16024 -\entry{ftrylockfile}{237}{\code {ftrylockfile}}
16025 -\entry{funlockfile}{237}{\code {funlockfile}}
16026 -\entry{__fsetlocking}{238}{\code {__fsetlocking}}
16027 -\entry{fwide}{240}{\code {fwide}}
16028 -\entry{fputc}{241}{\code {fputc}}
16029 -\entry{fputwc}{241}{\code {fputwc}}
16030 -\entry{fputc_unlocked}{241}{\code {fputc_unlocked}}
16031 -\entry{fputwc_unlocked}{241}{\code {fputwc_unlocked}}
16032 -\entry{putc}{241}{\code {putc}}
16033 -\entry{putwc}{242}{\code {putwc}}
16034 -\entry{putc_unlocked}{242}{\code {putc_unlocked}}
16035 -\entry{putwc_unlocked}{242}{\code {putwc_unlocked}}
16036 -\entry{putchar}{242}{\code {putchar}}
16037 -\entry{putwchar}{242}{\code {putwchar}}
16038 -\entry{putchar_unlocked}{242}{\code {putchar_unlocked}}
16039 -\entry{putwchar_unlocked}{242}{\code {putwchar_unlocked}}
16040 -\entry{fputs}{242}{\code {fputs}}
16041 -\entry{fputws}{242}{\code {fputws}}
16042 -\entry{fputs_unlocked}{243}{\code {fputs_unlocked}}
16043 -\entry{fputws_unlocked}{243}{\code {fputws_unlocked}}
16044 -\entry{puts}{243}{\code {puts}}
16045 -\entry{putw}{243}{\code {putw}}
16046 -\entry{fgetc}{243}{\code {fgetc}}
16047 -\entry{fgetwc}{243}{\code {fgetwc}}
16048 -\entry{fgetc_unlocked}{244}{\code {fgetc_unlocked}}
16049 -\entry{fgetwc_unlocked}{244}{\code {fgetwc_unlocked}}
16050 -\entry{getc}{244}{\code {getc}}
16051 -\entry{getwc}{244}{\code {getwc}}
16052 -\entry{getc_unlocked}{244}{\code {getc_unlocked}}
16053 -\entry{getwc_unlocked}{244}{\code {getwc_unlocked}}
16054 -\entry{getchar}{244}{\code {getchar}}
16055 -\entry{getwchar}{244}{\code {getwchar}}
16056 -\entry{getchar_unlocked}{244}{\code {getchar_unlocked}}
16057 -\entry{getwchar_unlocked}{244}{\code {getwchar_unlocked}}
16058 -\entry{getw}{245}{\code {getw}}
16059 -\entry{getline}{245}{\code {getline}}
16060 -\entry{getdelim}{246}{\code {getdelim}}
16061 -\entry{fgets}{246}{\code {fgets}}
16062 -\entry{fgetws}{246}{\code {fgetws}}
16063 -\entry{fgets_unlocked}{247}{\code {fgets_unlocked}}
16064 -\entry{fgetws_unlocked}{247}{\code {fgetws_unlocked}}
16065 -\entry{gets}{247}{\code {gets}}
16066 -\entry{ungetc}{248}{\code {ungetc}}
16067 -\entry{ungetwc}{248}{\code {ungetwc}}
16068 -\entry{fread}{249}{\code {fread}}
16069 -\entry{fread_unlocked}{249}{\code {fread_unlocked}}
16070 -\entry{fwrite}{250}{\code {fwrite}}
16071 -\entry{fwrite_unlocked}{250}{\code {fwrite_unlocked}}
16072 -\entry{printf}{259}{\code {printf}}
16073 -\entry{wprintf}{259}{\code {wprintf}}
16074 -\entry{fprintf}{259}{\code {fprintf}}
16075 -\entry{fwprintf}{259}{\code {fwprintf}}
16076 -\entry{sprintf}{259}{\code {sprintf}}
16077 -\entry{swprintf}{259}{\code {swprintf}}
16078 -\entry{snprintf}{260}{\code {snprintf}}
16079 -\entry{asprintf}{261}{\code {asprintf}}
16080 -\entry{obstack_printf}{261}{\code {obstack_printf}}
16081 -\entry{vprintf}{262}{\code {vprintf}}
16082 -\entry{vwprintf}{262}{\code {vwprintf}}
16083 -\entry{vfprintf}{262}{\code {vfprintf}}
16084 -\entry{vfwprintf}{262}{\code {vfwprintf}}
16085 -\entry{vsprintf}{262}{\code {vsprintf}}
16086 -\entry{vswprintf}{262}{\code {vswprintf}}
16087 -\entry{vsnprintf}{263}{\code {vsnprintf}}
16088 -\entry{vasprintf}{263}{\code {vasprintf}}
16089 -\entry{obstack_vprintf}{263}{\code {obstack_vprintf}}
16090 -\entry{parse_printf_format}{264}{\code {parse_printf_format}}
16091 -\entry{register_printf_function}{267}{\code {register_printf_function}}
16092 -\entry{printf_size}{271}{\code {printf_size}}
16093 -\entry{printf_size_info}{271}{\code {printf_size_info}}
16094 -\entry{scanf}{279}{\code {scanf}}
16095 -\entry{wscanf}{280}{\code {wscanf}}
16096 -\entry{fscanf}{280}{\code {fscanf}}
16097 -\entry{fwscanf}{280}{\code {fwscanf}}
16098 -\entry{sscanf}{280}{\code {sscanf}}
16099 -\entry{swscanf}{280}{\code {swscanf}}
16100 -\entry{vscanf}{281}{\code {vscanf}}
16101 -\entry{vwscanf}{281}{\code {vwscanf}}
16102 -\entry{vfscanf}{281}{\code {vfscanf}}
16103 -\entry{vfwscanf}{281}{\code {vfwscanf}}
16104 -\entry{vsscanf}{281}{\code {vsscanf}}
16105 -\entry{vswscanf}{281}{\code {vswscanf}}
16106 -\entry{feof}{282}{\code {feof}}
16107 -\entry{feof_unlocked}{282}{\code {feof_unlocked}}
16108 -\entry{ferror}{282}{\code {ferror}}
16109 -\entry{ferror_unlocked}{282}{\code {ferror_unlocked}}
16110 -\entry{clearerr}{282}{\code {clearerr}}
16111 -\entry{clearerr_unlocked}{283}{\code {clearerr_unlocked}}
16112 -\entry{ftell}{284}{\code {ftell}}
16113 -\entry{ftello}{284}{\code {ftello}}
16114 -\entry{ftello64}{285}{\code {ftello64}}
16115 -\entry{fseek}{285}{\code {fseek}}
16116 -\entry{fseeko}{285}{\code {fseeko}}
16117 -\entry{fseeko64}{285}{\code {fseeko64}}
16118 -\entry{rewind}{286}{\code {rewind}}
16119 -\entry{fgetpos}{287}{\code {fgetpos}}
16120 -\entry{fgetpos64}{287}{\code {fgetpos64}}
16121 -\entry{fsetpos}{288}{\code {fsetpos}}
16122 -\entry{fsetpos64}{288}{\code {fsetpos64}}
16123 -\entry{fflush}{289}{\code {fflush}}
16124 -\entry{fflush_unlocked}{289}{\code {fflush_unlocked}}
16125 -\entry{_flushlbf}{289}{\code {_flushlbf}}
16126 -\entry{__fpurge}{290}{\code {__fpurge}}
16127 -\entry{setvbuf}{290}{\code {setvbuf}}
16128 -\entry{setbuf}{291}{\code {setbuf}}
16129 -\entry{setbuffer}{291}{\code {setbuffer}}
16130 -\entry{setlinebuf}{291}{\code {setlinebuf}}
16131 -\entry{__flbf}{291}{\code {__flbf}}
16132 -\entry{__fbufsize}{292}{\code {__fbufsize}}
16133 -\entry{__fpending}{292}{\code {__fpending}}
16134 -\entry{fmemopen}{292}{\code {fmemopen}}
16135 -\entry{open_memstream}{293}{\code {open_memstream}}
16136 -\entry{open_obstack_stream}{294}{\code {open_obstack_stream}}
16137 -\entry{fopencookie}{296}{\code {fopencookie}}
16138 -\entry{fmtmsg}{298}{\code {fmtmsg}}
16139 -\entry{addseverity}{300}{\code {addseverity}}
16140 -\entry{open}{303}{\code {open}}
16141 -\entry{open64}{304}{\code {open64}}
16142 -\entry{creat}{304}{\code {creat}}
16143 -\entry{creat64}{305}{\code {creat64}}
16144 -\entry{close}{305}{\code {close}}
16145 -\entry{read}{306}{\code {read}}
16146 -\entry{pread}{307}{\code {pread}}
16147 -\entry{pread64}{307}{\code {pread64}}
16148 -\entry{write}{308}{\code {write}}
16149 -\entry{pwrite}{309}{\code {pwrite}}
16150 -\entry{pwrite64}{310}{\code {pwrite64}}
16151 -\entry{lseek}{310}{\code {lseek}}
16152 -\entry{lseek64}{311}{\code {lseek64}}
16153 -\entry{fdopen}{313}{\code {fdopen}}
16154 -\entry{fileno}{313}{\code {fileno}}
16155 -\entry{fileno_unlocked}{313}{\code {fileno_unlocked}}
16156 -\entry{fclean}{315}{\code {fclean}}
16157 -\entry{readv}{316}{\code {readv}}
16158 -\entry{writev}{316}{\code {writev}}
16159 -\entry{mmap}{317}{\code {mmap}}
16160 -\entry{mmap64}{318}{\code {mmap64}}
16161 -\entry{munmap}{318}{\code {munmap}}
16162 -\entry{msync}{319}{\code {msync}}
16163 -\entry{mremap}{319}{\code {mremap}}
16164 -\entry{madvise}{320}{\code {madvise}}
16165 -\entry{FD_ZERO}{321}{\code {FD_ZERO}}
16166 -\entry{FD_SET}{321}{\code {FD_SET}}
16167 -\entry{FD_CLR}{321}{\code {FD_CLR}}
16168 -\entry{FD_ISSET}{322}{\code {FD_ISSET}}
16169 -\entry{select}{322}{\code {select}}
16170 -\entry{sync}{323}{\code {sync}}
16171 -\entry{fsync}{324}{\code {fsync}}
16172 -\entry{fdatasync}{324}{\code {fdatasync}}
16173 -\entry{aio_read}{327}{\code {aio_read}}
16174 -\entry{aio_read64}{328}{\code {aio_read64}}
16175 -\entry{aio_write}{328}{\code {aio_write}}
16176 -\entry{aio_write64}{329}{\code {aio_write64}}
16177 -\entry{lio_listio}{330}{\code {lio_listio}}
16178 -\entry{lio_listio64}{331}{\code {lio_listio64}}
16179 -\entry{aio_error}{331}{\code {aio_error}}
16180 -\entry{aio_error64}{331}{\code {aio_error64}}
16181 -\entry{aio_return}{332}{\code {aio_return}}
16182 -\entry{aio_return64}{332}{\code {aio_return64}}
16183 -\entry{aio_fsync}{332}{\code {aio_fsync}}
16184 -\entry{aio_fsync64}{333}{\code {aio_fsync64}}
16185 -\entry{aio_suspend}{333}{\code {aio_suspend}}
16186 -\entry{aio_suspend64}{334}{\code {aio_suspend64}}
16187 -\entry{aio_cancel}{334}{\code {aio_cancel}}
16188 -\entry{aio_cancel64}{335}{\code {aio_cancel64}}
16189 -\entry{aio_init}{336}{\code {aio_init}}
16190 -\entry{fcntl}{336}{\code {fcntl}}
16191 -\entry{dup}{337}{\code {dup}}
16192 -\entry{dup2}{337}{\code {dup2}}
16193 -\entry{ioctl}{349}{\code {ioctl}}
16194 -\entry{getcwd}{351}{\code {getcwd}}
16195 -\entry{getwd}{352}{\code {getwd}}
16196 -\entry{get_current_dir_name}{352}{\code {get_current_dir_name}}
16197 -\entry{chdir}{352}{\code {chdir}}
16198 -\entry{fchdir}{352}{\code {fchdir}}
16199 -\entry{IFTODT}{354}{\code {IFTODT}}
16200 -\entry{DTTOIF}{354}{\code {DTTOIF}}
16201 -\entry{opendir}{354}{\code {opendir}}
16202 -\entry{dirfd}{355}{\code {dirfd}}
16203 -\entry{readdir}{355}{\code {readdir}}
16204 -\entry{readdir_r}{355}{\code {readdir_r}}
16205 -\entry{readdir64}{356}{\code {readdir64}}
16206 -\entry{readdir64_r}{356}{\code {readdir64_r}}
16207 -\entry{closedir}{356}{\code {closedir}}
16208 -\entry{rewinddir}{357}{\code {rewinddir}}
16209 -\entry{telldir}{357}{\code {telldir}}
16210 -\entry{seekdir}{357}{\code {seekdir}}
16211 -\entry{scandir}{358}{\code {scandir}}
16212 -\entry{alphasort}{358}{\code {alphasort}}
16213 -\entry{versionsort}{358}{\code {versionsort}}
16214 -\entry{scandir64}{358}{\code {scandir64}}
16215 -\entry{alphasort64}{359}{\code {alphasort64}}
16216 -\entry{versionsort64}{359}{\code {versionsort64}}
16217 -\entry{ftw}{361}{\code {ftw}}
16218 -\entry{ftw64}{362}{\code {ftw64}}
16219 -\entry{nftw}{362}{\code {nftw}}
16220 -\entry{nftw64}{363}{\code {nftw64}}
16221 -\entry{link}{364}{\code {link}}
16222 -\entry{symlink}{365}{\code {symlink}}
16223 -\entry{readlink}{365}{\code {readlink}}
16224 -\entry{canonicalize_file_name}{366}{\code {canonicalize_file_name}}
16225 -\entry{realpath}{367}{\code {realpath}}
16226 -\entry{unlink}{367}{\code {unlink}}
16227 -\entry{rmdir}{368}{\code {rmdir}}
16228 -\entry{remove}{368}{\code {remove}}
16229 -\entry{rename}{368}{\code {rename}}
16230 -\entry{mkdir}{369}{\code {mkdir}}
16231 -\entry{stat}{374}{\code {stat}}
16232 -\entry{stat64}{374}{\code {stat64}}
16233 -\entry{fstat}{375}{\code {fstat}}
16234 -\entry{fstat64}{375}{\code {fstat64}}
16235 -\entry{lstat}{375}{\code {lstat}}
16236 -\entry{lstat64}{375}{\code {lstat64}}
16237 -\entry{S_ISDIR}{376}{\code {S_ISDIR}}
16238 -\entry{S_ISCHR}{376}{\code {S_ISCHR}}
16239 -\entry{S_ISBLK}{376}{\code {S_ISBLK}}
16240 -\entry{S_ISREG}{376}{\code {S_ISREG}}
16241 -\entry{S_ISFIFO}{376}{\code {S_ISFIFO}}
16242 -\entry{S_ISLNK}{376}{\code {S_ISLNK}}
16243 -\entry{S_ISSOCK}{376}{\code {S_ISSOCK}}
16244 -\entry{S_TYPEISMQ}{377}{\code {S_TYPEISMQ}}
16245 -\entry{S_TYPEISSEM}{377}{\code {S_TYPEISSEM}}
16246 -\entry{S_TYPEISSHM}{377}{\code {S_TYPEISSHM}}
16247 -\entry{chown}{377}{\code {chown}}
16248 -\entry{fchown}{378}{\code {fchown}}
16249 -\entry{chmod}{381}{\code {chmod}}
16250 -\entry{umask}{381}{\code {umask}}
16251 -\entry{getumask}{381}{\code {getumask}}
16252 -\entry{chmod}{381}{\code {chmod}}
16253 -\entry{fchmod}{382}{\code {fchmod}}
16254 -\entry{access}{383}{\code {access}}
16255 -\entry{utime}{384}{\code {utime}}
16256 -\entry{utimes}{385}{\code {utimes}}
16257 -\entry{lutimes}{385}{\code {lutimes}}
16258 -\entry{futimes}{385}{\code {futimes}}
16259 -\entry{truncate}{386}{\code {truncate}}
16260 -\entry{truncate64}{386}{\code {truncate64}}
16261 -\entry{ftruncate}{386}{\code {ftruncate}}
16262 -\entry{ftruncate64}{387}{\code {ftruncate64}}
16263 -\entry{mknod}{388}{\code {mknod}}
16264 -\entry{tmpfile}{389}{\code {tmpfile}}
16265 -\entry{tmpfile64}{389}{\code {tmpfile64}}
16266 -\entry{tmpnam}{389}{\code {tmpnam}}
16267 -\entry{tmpnam_r}{389}{\code {tmpnam_r}}
16268 -\entry{tempnam}{390}{\code {tempnam}}
16269 -\entry{mktemp}{390}{\code {mktemp}}
16270 -\entry{mkstemp}{391}{\code {mkstemp}}
16271 -\entry{mkdtemp}{391}{\code {mkdtemp}}
16272 -\entry{pipe}{393}{\code {pipe}}
16273 -\entry{popen}{395}{\code {popen}}
16274 -\entry{pclose}{395}{\code {pclose}}
16275 -\entry{mkfifo}{396}{\code {mkfifo}}
16276 -\entry{bind}{403}{\code {bind}}
16277 -\entry{getsockname}{403}{\code {getsockname}}
16278 -\entry{if_nametoindex}{404}{\code {if_nametoindex}}
16279 -\entry{if_indextoname}{404}{\code {if_indextoname}}
16280 -\entry{if_nameindex}{405}{\code {if_nameindex}}
16281 -\entry{if_freenameindex}{405}{\code {if_freenameindex}}
16282 -\entry{SUN_LEN}{406}{\code {SUN_LEN}}
16283 -\entry{inet_aton}{412}{\code {inet_aton}}
16284 -\entry{inet_addr}{412}{\code {inet_addr}}
16285 -\entry{inet_network}{412}{\code {inet_network}}
16286 -\entry{inet_ntoa}{412}{\code {inet_ntoa}}
16287 -\entry{inet_makeaddr}{412}{\code {inet_makeaddr}}
16288 -\entry{inet_lnaof}{412}{\code {inet_lnaof}}
16289 -\entry{inet_netof}{412}{\code {inet_netof}}
16290 -\entry{inet_pton}{412}{\code {inet_pton}}
16291 -\entry{inet_ntop}{413}{\code {inet_ntop}}
16292 -\entry{gethostbyname}{414}{\code {gethostbyname}}
16293 -\entry{gethostbyname2}{414}{\code {gethostbyname2}}
16294 -\entry{gethostbyaddr}{414}{\code {gethostbyaddr}}
16295 -\entry{gethostbyname_r}{415}{\code {gethostbyname_r}}
16296 -\entry{gethostbyname2_r}{415}{\code {gethostbyname2_r}}
16297 -\entry{gethostbyaddr_r}{415}{\code {gethostbyaddr_r}}
16298 -\entry{sethostent}{416}{\code {sethostent}}
16299 -\entry{gethostent}{416}{\code {gethostent}}
16300 -\entry{endhostent}{416}{\code {endhostent}}
16301 -\entry{getservbyname}{417}{\code {getservbyname}}
16302 -\entry{getservbyport}{418}{\code {getservbyport}}
16303 -\entry{setservent}{418}{\code {setservent}}
16304 -\entry{getservent}{418}{\code {getservent}}
16305 -\entry{endservent}{418}{\code {endservent}}
16306 -\entry{htons}{418}{\code {htons}}
16307 -\entry{ntohs}{419}{\code {ntohs}}
16308 -\entry{htonl}{419}{\code {htonl}}
16309 -\entry{ntohl}{419}{\code {ntohl}}
16310 -\entry{getprotobyname}{420}{\code {getprotobyname}}
16311 -\entry{getprotobynumber}{420}{\code {getprotobynumber}}
16312 -\entry{setprotoent}{420}{\code {setprotoent}}
16313 -\entry{getprotoent}{420}{\code {getprotoent}}
16314 -\entry{endprotoent}{420}{\code {endprotoent}}
16315 -\entry{socket}{422}{\code {socket}}
16316 -\entry{shutdown}{422}{\code {shutdown}}
16317 -\entry{socketpair}{423}{\code {socketpair}}
16318 -\entry{connect}{424}{\code {connect}}
16319 -\entry{listen}{425}{\code {listen}}
16320 -\entry{accept}{426}{\code {accept}}
16321 -\entry{getpeername}{427}{\code {getpeername}}
16322 -\entry{send}{428}{\code {send}}
16323 -\entry{recv}{429}{\code {recv}}
16324 -\entry{sendto}{436}{\code {sendto}}
16325 -\entry{recvfrom}{436}{\code {recvfrom}}
16326 -\entry{getsockopt}{441}{\code {getsockopt}}
16327 -\entry{setsockopt}{441}{\code {setsockopt}}
16328 -\entry{getnetbyname}{443}{\code {getnetbyname}}
16329 -\entry{getnetbyaddr}{444}{\code {getnetbyaddr}}
16330 -\entry{setnetent}{444}{\code {setnetent}}
16331 -\entry{getnetent}{444}{\code {getnetent}}
16332 -\entry{endnetent}{444}{\code {endnetent}}
16333 -\entry{isatty}{445}{\code {isatty}}
16334 -\entry{ttyname}{445}{\code {ttyname}}
16335 -\entry{ttyname_r}{445}{\code {ttyname_r}}
16336 -\entry{tcgetattr}{448}{\code {tcgetattr}}
16337 -\entry{tcsetattr}{448}{\code {tcsetattr}}
16338 -\entry{cfgetospeed}{457}{\code {cfgetospeed}}
16339 -\entry{cfgetispeed}{457}{\code {cfgetispeed}}
16340 -\entry{cfsetospeed}{457}{\code {cfsetospeed}}
16341 -\entry{cfsetispeed}{457}{\code {cfsetispeed}}
16342 -\entry{cfsetspeed}{457}{\code {cfsetspeed}}
16343 -\entry{cfmakeraw}{464}{\code {cfmakeraw}}
16344 -\entry{gtty}{464}{\code {gtty}}
16345 -\entry{stty}{464}{\code {stty}}
16346 -\entry{tcsendbreak}{465}{\code {tcsendbreak}}
16347 -\entry{tcdrain}{465}{\code {tcdrain}}
16348 -\entry{tcflush}{465}{\code {tcflush}}
16349 -\entry{tcflow}{466}{\code {tcflow}}
16350 -\entry{getpt}{468}{\code {getpt}}
16351 -\entry{grantpt}{468}{\code {grantpt}}
16352 -\entry{unlockpt}{469}{\code {unlockpt}}
16353 -\entry{ptsname}{469}{\code {ptsname}}
16354 -\entry{ptsname_r}{469}{\code {ptsname_r}}
16355 -\entry{openpty}{470}{\code {openpty}}
16356 -\entry{forkpty}{470}{\code {forkpty}}
16357 -\entry{openlog}{472}{\code {openlog}}
16358 -\entry{syslog}{474}{\code {syslog}}
16359 -\entry{vsyslog}{476}{\code {vsyslog}}
16360 -\entry{closelog}{476}{\code {closelog}}
16361 -\entry{setlogmask}{477}{\code {setlogmask}}
16362 -\entry{sin}{480}{\code {sin}}
16363 -\entry{sinf}{480}{\code {sinf}}
16364 -\entry{sinl}{480}{\code {sinl}}
16365 -\entry{cos}{480}{\code {cos}}
16366 -\entry{cosf}{480}{\code {cosf}}
16367 -\entry{cosl}{480}{\code {cosl}}
16368 -\entry{tan}{480}{\code {tan}}
16369 -\entry{tanf}{480}{\code {tanf}}
16370 -\entry{tanl}{480}{\code {tanl}}
16371 -\entry{sincos}{480}{\code {sincos}}
16372 -\entry{sincosf}{480}{\code {sincosf}}
16373 -\entry{sincosl}{480}{\code {sincosl}}
16374 -\entry{csin}{481}{\code {csin}}
16375 -\entry{csinf}{481}{\code {csinf}}
16376 -\entry{csinl}{481}{\code {csinl}}
16377 -\entry{ccos}{481}{\code {ccos}}
16378 -\entry{ccosf}{481}{\code {ccosf}}
16379 -\entry{ccosl}{481}{\code {ccosl}}
16380 -\entry{ctan}{481}{\code {ctan}}
16381 -\entry{ctanf}{481}{\code {ctanf}}
16382 -\entry{ctanl}{481}{\code {ctanl}}
16383 -\entry{asin}{481}{\code {asin}}
16384 -\entry{asinf}{481}{\code {asinf}}
16385 -\entry{asinl}{481}{\code {asinl}}
16386 -\entry{acos}{482}{\code {acos}}
16387 -\entry{acosf}{482}{\code {acosf}}
16388 -\entry{acosl}{482}{\code {acosl}}
16389 -\entry{atan}{482}{\code {atan}}
16390 -\entry{atanf}{482}{\code {atanf}}
16391 -\entry{atanl}{482}{\code {atanl}}
16392 -\entry{atan2}{482}{\code {atan2}}
16393 -\entry{atan2f}{482}{\code {atan2f}}
16394 -\entry{atan2l}{482}{\code {atan2l}}
16395 -\entry{casin}{482}{\code {casin}}
16396 -\entry{casinf}{482}{\code {casinf}}
16397 -\entry{casinl}{482}{\code {casinl}}
16398 -\entry{cacos}{482}{\code {cacos}}
16399 -\entry{cacosf}{482}{\code {cacosf}}
16400 -\entry{cacosl}{482}{\code {cacosl}}
16401 -\entry{catan}{482}{\code {catan}}
16402 -\entry{catanf}{482}{\code {catanf}}
16403 -\entry{catanl}{482}{\code {catanl}}
16404 -\entry{exp}{483}{\code {exp}}
16405 -\entry{expf}{483}{\code {expf}}
16406 -\entry{expl}{483}{\code {expl}}
16407 -\entry{exp2}{483}{\code {exp2}}
16408 -\entry{exp2f}{483}{\code {exp2f}}
16409 -\entry{exp2l}{483}{\code {exp2l}}
16410 -\entry{exp10}{483}{\code {exp10}}
16411 -\entry{exp10f}{483}{\code {exp10f}}
16412 -\entry{exp10l}{483}{\code {exp10l}}
16413 -\entry{pow10}{483}{\code {pow10}}
16414 -\entry{pow10f}{483}{\code {pow10f}}
16415 -\entry{pow10l}{483}{\code {pow10l}}
16416 -\entry{log}{483}{\code {log}}
16417 -\entry{logf}{483}{\code {logf}}
16418 -\entry{logl}{483}{\code {logl}}
16419 -\entry{log10}{483}{\code {log10}}
16420 -\entry{log10f}{483}{\code {log10f}}
16421 -\entry{log10l}{483}{\code {log10l}}
16422 -\entry{log2}{483}{\code {log2}}
16423 -\entry{log2f}{483}{\code {log2f}}
16424 -\entry{log2l}{483}{\code {log2l}}
16425 -\entry{logb}{483}{\code {logb}}
16426 -\entry{logbf}{484}{\code {logbf}}
16427 -\entry{logbl}{484}{\code {logbl}}
16428 -\entry{ilogb}{484}{\code {ilogb}}
16429 -\entry{ilogbf}{484}{\code {ilogbf}}
16430 -\entry{ilogbl}{484}{\code {ilogbl}}
16431 -\entry{pow}{484}{\code {pow}}
16432 -\entry{powf}{484}{\code {powf}}
16433 -\entry{powl}{484}{\code {powl}}
16434 -\entry{sqrt}{485}{\code {sqrt}}
16435 -\entry{sqrtf}{485}{\code {sqrtf}}
16436 -\entry{sqrtl}{485}{\code {sqrtl}}
16437 -\entry{cbrt}{485}{\code {cbrt}}
16438 -\entry{cbrtf}{485}{\code {cbrtf}}
16439 -\entry{cbrtl}{485}{\code {cbrtl}}
16440 -\entry{hypot}{485}{\code {hypot}}
16441 -\entry{hypotf}{485}{\code {hypotf}}
16442 -\entry{hypotl}{485}{\code {hypotl}}
16443 -\entry{expm1}{485}{\code {expm1}}
16444 -\entry{expm1f}{485}{\code {expm1f}}
16445 -\entry{expm1l}{485}{\code {expm1l}}
16446 -\entry{log1p}{485}{\code {log1p}}
16447 -\entry{log1pf}{485}{\code {log1pf}}
16448 -\entry{log1pl}{485}{\code {log1pl}}
16449 -\entry{cexp}{485}{\code {cexp}}
16450 -\entry{cexpf}{485}{\code {cexpf}}
16451 -\entry{cexpl}{485}{\code {cexpl}}
16452 -\entry{clog}{485}{\code {clog}}
16453 -\entry{clogf}{486}{\code {clogf}}
16454 -\entry{clogl}{486}{\code {clogl}}
16455 -\entry{clog10}{486}{\code {clog10}}
16456 -\entry{clog10f}{486}{\code {clog10f}}
16457 -\entry{clog10l}{486}{\code {clog10l}}
16458 -\entry{csqrt}{486}{\code {csqrt}}
16459 -\entry{csqrtf}{486}{\code {csqrtf}}
16460 -\entry{csqrtl}{486}{\code {csqrtl}}
16461 -\entry{cpow}{486}{\code {cpow}}
16462 -\entry{cpowf}{486}{\code {cpowf}}
16463 -\entry{cpowl}{486}{\code {cpowl}}
16464 -\entry{sinh}{486}{\code {sinh}}
16465 -\entry{sinhf}{486}{\code {sinhf}}
16466 -\entry{sinhl}{486}{\code {sinhl}}
16467 -\entry{cosh}{486}{\code {cosh}}
16468 -\entry{coshf}{486}{\code {coshf}}
16469 -\entry{coshl}{486}{\code {coshl}}
16470 -\entry{tanh}{487}{\code {tanh}}
16471 -\entry{tanhf}{487}{\code {tanhf}}
16472 -\entry{tanhl}{487}{\code {tanhl}}
16473 -\entry{csinh}{487}{\code {csinh}}
16474 -\entry{csinhf}{487}{\code {csinhf}}
16475 -\entry{csinhl}{487}{\code {csinhl}}
16476 -\entry{ccosh}{487}{\code {ccosh}}
16477 -\entry{ccoshf}{487}{\code {ccoshf}}
16478 -\entry{ccoshl}{487}{\code {ccoshl}}
16479 -\entry{ctanh}{487}{\code {ctanh}}
16480 -\entry{ctanhf}{487}{\code {ctanhf}}
16481 -\entry{ctanhl}{487}{\code {ctanhl}}
16482 -\entry{asinh}{487}{\code {asinh}}
16483 -\entry{asinhf}{487}{\code {asinhf}}
16484 -\entry{asinhl}{487}{\code {asinhl}}
16485 -\entry{acosh}{487}{\code {acosh}}
16486 -\entry{acoshf}{487}{\code {acoshf}}
16487 -\entry{acoshl}{487}{\code {acoshl}}
16488 -\entry{atanh}{487}{\code {atanh}}
16489 -\entry{atanhf}{487}{\code {atanhf}}
16490 -\entry{atanhl}{487}{\code {atanhl}}
16491 -\entry{casinh}{487}{\code {casinh}}
16492 -\entry{casinhf}{487}{\code {casinhf}}
16493 -\entry{casinhl}{487}{\code {casinhl}}
16494 -\entry{cacosh}{488}{\code {cacosh}}
16495 -\entry{cacoshf}{488}{\code {cacoshf}}
16496 -\entry{cacoshl}{488}{\code {cacoshl}}
16497 -\entry{catanh}{488}{\code {catanh}}
16498 -\entry{catanhf}{488}{\code {catanhf}}
16499 -\entry{catanhl}{488}{\code {catanhl}}
16500 -\entry{erf}{488}{\code {erf}}
16501 -\entry{erff}{488}{\code {erff}}
16502 -\entry{erfl}{488}{\code {erfl}}
16503 -\entry{erfc}{488}{\code {erfc}}
16504 -\entry{erfcf}{488}{\code {erfcf}}
16505 -\entry{erfcl}{488}{\code {erfcl}}
16506 -\entry{lgamma}{488}{\code {lgamma}}
16507 -\entry{lgammaf}{488}{\code {lgammaf}}
16508 -\entry{lgammal}{488}{\code {lgammal}}
16509 -\entry{lgamma_r}{489}{\code {lgamma_r}}
16510 -\entry{lgammaf_r}{489}{\code {lgammaf_r}}
16511 -\entry{lgammal_r}{489}{\code {lgammal_r}}
16512 -\entry{gamma}{489}{\code {gamma}}
16513 -\entry{gammaf}{489}{\code {gammaf}}
16514 -\entry{gammal}{489}{\code {gammal}}
16515 -\entry{tgamma}{489}{\code {tgamma}}
16516 -\entry{tgammaf}{489}{\code {tgammaf}}
16517 -\entry{tgammal}{489}{\code {tgammal}}
16518 -\entry{j0}{489}{\code {j0}}
16519 -\entry{j0f}{489}{\code {j0f}}
16520 -\entry{j0l}{489}{\code {j0l}}
16521 -\entry{j1}{489}{\code {j1}}
16522 -\entry{j1f}{489}{\code {j1f}}
16523 -\entry{j1l}{489}{\code {j1l}}
16524 -\entry{jn}{489}{\code {jn}}
16525 -\entry{jnf}{489}{\code {jnf}}
16526 -\entry{jnl}{489}{\code {jnl}}
16527 -\entry{y0}{489}{\code {y0}}
16528 -\entry{y0f}{489}{\code {y0f}}
16529 -\entry{y0l}{489}{\code {y0l}}
16530 -\entry{y1}{490}{\code {y1}}
16531 -\entry{y1f}{490}{\code {y1f}}
16532 -\entry{y1l}{490}{\code {y1l}}
16533 -\entry{yn}{490}{\code {yn}}
16534 -\entry{ynf}{490}{\code {ynf}}
16535 -\entry{ynl}{490}{\code {ynl}}
16536 -\entry{rand}{508}{\code {rand}}
16537 -\entry{srand}{508}{\code {srand}}
16538 -\entry{rand_r}{509}{\code {rand_r}}
16539 -\entry{random}{509}{\code {random}}
16540 -\entry{srandom}{509}{\code {srandom}}
16541 -\entry{initstate}{509}{\code {initstate}}
16542 -\entry{setstate}{509}{\code {setstate}}
16543 -\entry{random_r}{510}{\code {random_r}}
16544 -\entry{srandom_r}{510}{\code {srandom_r}}
16545 -\entry{initstate_r}{510}{\code {initstate_r}}
16546 -\entry{setstate_r}{510}{\code {setstate_r}}
16547 -\entry{drand48}{511}{\code {drand48}}
16548 -\entry{erand48}{511}{\code {erand48}}
16549 -\entry{lrand48}{511}{\code {lrand48}}
16550 -\entry{nrand48}{511}{\code {nrand48}}
16551 -\entry{mrand48}{511}{\code {mrand48}}
16552 -\entry{jrand48}{512}{\code {jrand48}}
16553 -\entry{srand48}{512}{\code {srand48}}
16554 -\entry{seed48}{512}{\code {seed48}}
16555 -\entry{lcong48}{512}{\code {lcong48}}
16556 -\entry{drand48_r}{513}{\code {drand48_r}}
16557 -\entry{erand48_r}{513}{\code {erand48_r}}
16558 -\entry{lrand48_r}{513}{\code {lrand48_r}}
16559 -\entry{nrand48_r}{513}{\code {nrand48_r}}
16560 -\entry{mrand48_r}{514}{\code {mrand48_r}}
16561 -\entry{jrand48_r}{514}{\code {jrand48_r}}
16562 -\entry{srand48_r}{514}{\code {srand48_r}}
16563 -\entry{seed48_r}{514}{\code {seed48_r}}
16564 -\entry{lcong48_r}{515}{\code {lcong48_r}}
16565 -\entry{div}{519}{\code {div}}
16566 -\entry{ldiv}{519}{\code {ldiv}}
16567 -\entry{lldiv}{519}{\code {lldiv}}
16568 -\entry{imaxdiv}{520}{\code {imaxdiv}}
16569 -\entry{fpclassify}{520}{\code {fpclassify}}
16570 -\entry{isfinite}{521}{\code {isfinite}}
16571 -\entry{isnormal}{521}{\code {isnormal}}
16572 -\entry{isnan}{521}{\code {isnan}}
16573 -\entry{isinf}{521}{\code {isinf}}
16574 -\entry{isinff}{521}{\code {isinff}}
16575 -\entry{isinfl}{521}{\code {isinfl}}
16576 -\entry{isnan}{522}{\code {isnan}}
16577 -\entry{isnanf}{522}{\code {isnanf}}
16578 -\entry{isnanl}{522}{\code {isnanl}}
16579 -\entry{finite}{522}{\code {finite}}
16580 -\entry{finitef}{522}{\code {finitef}}
16581 -\entry{finitel}{522}{\code {finitel}}
16582 -\entry{matherr}{522}{\code {matherr}}
16583 -\entry{feclearexcept}{525}{\code {feclearexcept}}
16584 -\entry{feraiseexcept}{525}{\code {feraiseexcept}}
16585 -\entry{fetestexcept}{526}{\code {fetestexcept}}
16586 -\entry{fegetexceptflag}{526}{\code {fegetexceptflag}}
16587 -\entry{fesetexceptflag}{526}{\code {fesetexceptflag}}
16588 -\entry{fegetround}{528}{\code {fegetround}}
16589 -\entry{fesetround}{528}{\code {fesetround}}
16590 -\entry{fegetenv}{529}{\code {fegetenv}}
16591 -\entry{feholdexcept}{529}{\code {feholdexcept}}
16592 -\entry{fesetenv}{529}{\code {fesetenv}}
16593 -\entry{feupdateenv}{530}{\code {feupdateenv}}
16594 -\entry{feenableexcept}{530}{\code {feenableexcept}}
16595 -\entry{fedisableexcept}{530}{\code {fedisableexcept}}
16596 -\entry{fegetexcept}{530}{\code {fegetexcept}}
16597 -\entry{abs}{531}{\code {abs}}
16598 -\entry{labs}{531}{\code {labs}}
16599 -\entry{llabs}{531}{\code {llabs}}
16600 -\entry{imaxabs}{531}{\code {imaxabs}}
16601 -\entry{fabs}{531}{\code {fabs}}
16602 -\entry{fabsf}{531}{\code {fabsf}}
16603 -\entry{fabsl}{531}{\code {fabsl}}
16604 -\entry{cabs}{531}{\code {cabs}}
16605 -\entry{cabsf}{531}{\code {cabsf}}
16606 -\entry{cabsl}{531}{\code {cabsl}}
16607 -\entry{frexp}{531}{\code {frexp}}
16608 -\entry{frexpf}{531}{\code {frexpf}}
16609 -\entry{frexpl}{531}{\code {frexpl}}
16610 -\entry{ldexp}{532}{\code {ldexp}}
16611 -\entry{ldexpf}{532}{\code {ldexpf}}
16612 -\entry{ldexpl}{532}{\code {ldexpl}}
16613 -\entry{scalb}{532}{\code {scalb}}
16614 -\entry{scalbf}{532}{\code {scalbf}}
16615 -\entry{scalbl}{532}{\code {scalbl}}
16616 -\entry{scalbn}{532}{\code {scalbn}}
16617 -\entry{scalbnf}{532}{\code {scalbnf}}
16618 -\entry{scalbnl}{532}{\code {scalbnl}}
16619 -\entry{scalbln}{532}{\code {scalbln}}
16620 -\entry{scalblnf}{532}{\code {scalblnf}}
16621 -\entry{scalblnl}{532}{\code {scalblnl}}
16622 -\entry{significand}{532}{\code {significand}}
16623 -\entry{significandf}{532}{\code {significandf}}
16624 -\entry{significandl}{532}{\code {significandl}}
16625 -\entry{ceil}{533}{\code {ceil}}
16626 -\entry{ceilf}{533}{\code {ceilf}}
16627 -\entry{ceill}{533}{\code {ceill}}
16628 -\entry{floor}{533}{\code {floor}}
16629 -\entry{floorf}{533}{\code {floorf}}
16630 -\entry{floorl}{533}{\code {floorl}}
16631 -\entry{trunc}{533}{\code {trunc}}
16632 -\entry{truncf}{533}{\code {truncf}}
16633 -\entry{truncl}{533}{\code {truncl}}
16634 -\entry{rint}{533}{\code {rint}}
16635 -\entry{rintf}{533}{\code {rintf}}
16636 -\entry{rintl}{533}{\code {rintl}}
16637 -\entry{nearbyint}{533}{\code {nearbyint}}
16638 -\entry{nearbyintf}{533}{\code {nearbyintf}}
16639 -\entry{nearbyintl}{533}{\code {nearbyintl}}
16640 -\entry{round}{533}{\code {round}}
16641 -\entry{roundf}{533}{\code {roundf}}
16642 -\entry{roundl}{533}{\code {roundl}}
16643 -\entry{lrint}{533}{\code {lrint}}
16644 -\entry{lrintf}{533}{\code {lrintf}}
16645 -\entry{lrintl}{533}{\code {lrintl}}
16646 -\entry{llrint}{533}{\code {llrint}}
16647 -\entry{llrintf}{534}{\code {llrintf}}
16648 -\entry{llrintl}{534}{\code {llrintl}}
16649 -\entry{lround}{534}{\code {lround}}
16650 -\entry{lroundf}{534}{\code {lroundf}}
16651 -\entry{lroundl}{534}{\code {lroundl}}
16652 -\entry{llround}{534}{\code {llround}}
16653 -\entry{llroundf}{534}{\code {llroundf}}
16654 -\entry{llroundl}{534}{\code {llroundl}}
16655 -\entry{modf}{534}{\code {modf}}
16656 -\entry{modff}{534}{\code {modff}}
16657 -\entry{modfl}{534}{\code {modfl}}
16658 -\entry{fmod}{534}{\code {fmod}}
16659 -\entry{fmodf}{534}{\code {fmodf}}
16660 -\entry{fmodl}{534}{\code {fmodl}}
16661 -\entry{drem}{534}{\code {drem}}
16662 -\entry{dremf}{535}{\code {dremf}}
16663 -\entry{dreml}{535}{\code {dreml}}
16664 -\entry{remainder}{535}{\code {remainder}}
16665 -\entry{remainderf}{535}{\code {remainderf}}
16666 -\entry{remainderl}{535}{\code {remainderl}}
16667 -\entry{copysign}{535}{\code {copysign}}
16668 -\entry{copysignf}{535}{\code {copysignf}}
16669 -\entry{copysignl}{535}{\code {copysignl}}
16670 -\entry{signbit}{535}{\code {signbit}}
16671 -\entry{nextafter}{535}{\code {nextafter}}
16672 -\entry{nextafterf}{535}{\code {nextafterf}}
16673 -\entry{nextafterl}{535}{\code {nextafterl}}
16674 -\entry{nexttoward}{536}{\code {nexttoward}}
16675 -\entry{nexttowardf}{536}{\code {nexttowardf}}
16676 -\entry{nexttowardl}{536}{\code {nexttowardl}}
16677 -\entry{nan}{536}{\code {nan}}
16678 -\entry{nanf}{536}{\code {nanf}}
16679 -\entry{nanl}{536}{\code {nanl}}
16680 -\entry{isgreater}{536}{\code {isgreater}}
16681 -\entry{isgreaterequal}{536}{\code {isgreaterequal}}
16682 -\entry{isless}{536}{\code {isless}}
16683 -\entry{islessequal}{537}{\code {islessequal}}
16684 -\entry{islessgreater}{537}{\code {islessgreater}}
16685 -\entry{isunordered}{537}{\code {isunordered}}
16686 -\entry{fmin}{537}{\code {fmin}}
16687 -\entry{fminf}{537}{\code {fminf}}
16688 -\entry{fminl}{537}{\code {fminl}}
16689 -\entry{fmax}{537}{\code {fmax}}
16690 -\entry{fmaxf}{537}{\code {fmaxf}}
16691 -\entry{fmaxl}{537}{\code {fmaxl}}
16692 -\entry{fdim}{537}{\code {fdim}}
16693 -\entry{fdimf}{537}{\code {fdimf}}
16694 -\entry{fdiml}{537}{\code {fdiml}}
16695 -\entry{fma}{538}{\code {fma}}
16696 -\entry{fmaf}{538}{\code {fmaf}}
16697 -\entry{fmal}{538}{\code {fmal}}
16698 -\entry{creal}{539}{\code {creal}}
16699 -\entry{crealf}{539}{\code {crealf}}
16700 -\entry{creall}{539}{\code {creall}}
16701 -\entry{cimag}{539}{\code {cimag}}
16702 -\entry{cimagf}{539}{\code {cimagf}}
16703 -\entry{cimagl}{539}{\code {cimagl}}
16704 -\entry{conj}{539}{\code {conj}}
16705 -\entry{conjf}{539}{\code {conjf}}
16706 -\entry{conjl}{539}{\code {conjl}}
16707 -\entry{carg}{539}{\code {carg}}
16708 -\entry{cargf}{539}{\code {cargf}}
16709 -\entry{cargl}{539}{\code {cargl}}
16710 -\entry{cproj}{539}{\code {cproj}}
16711 -\entry{cprojf}{539}{\code {cprojf}}
16712 -\entry{cprojl}{539}{\code {cprojl}}
16713 -\entry{strtol}{540}{\code {strtol}}
16714 -\entry{wcstol}{540}{\code {wcstol}}
16715 -\entry{strtoul}{541}{\code {strtoul}}
16716 -\entry{wcstoul}{541}{\code {wcstoul}}
16717 -\entry{strtoll}{541}{\code {strtoll}}
16718 -\entry{wcstoll}{541}{\code {wcstoll}}
16719 -\entry{strtoq}{541}{\code {strtoq}}
16720 -\entry{wcstoq}{541}{\code {wcstoq}}
16721 -\entry{strtoull}{542}{\code {strtoull}}
16722 -\entry{wcstoull}{542}{\code {wcstoull}}
16723 -\entry{strtouq}{542}{\code {strtouq}}
16724 -\entry{wcstouq}{542}{\code {wcstouq}}
16725 -\entry{strtoimax}{542}{\code {strtoimax}}
16726 -\entry{wcstoimax}{542}{\code {wcstoimax}}
16727 -\entry{strtoumax}{542}{\code {strtoumax}}
16728 -\entry{wcstoumax}{543}{\code {wcstoumax}}
16729 -\entry{atol}{543}{\code {atol}}
16730 -\entry{atoi}{543}{\code {atoi}}
16731 -\entry{atoll}{543}{\code {atoll}}
16732 -\entry{strtod}{544}{\code {strtod}}
16733 -\entry{strtof}{545}{\code {strtof}}
16734 -\entry{strtold}{545}{\code {strtold}}
16735 -\entry{wcstod}{545}{\code {wcstod}}
16736 -\entry{wcstof}{545}{\code {wcstof}}
16737 -\entry{wcstold}{545}{\code {wcstold}}
16738 -\entry{atof}{545}{\code {atof}}
16739 -\entry{ecvt}{546}{\code {ecvt}}
16740 -\entry{fcvt}{546}{\code {fcvt}}
16741 -\entry{gcvt}{546}{\code {gcvt}}
16742 -\entry{qecvt}{546}{\code {qecvt}}
16743 -\entry{qfcvt}{546}{\code {qfcvt}}
16744 -\entry{qgcvt}{546}{\code {qgcvt}}
16745 -\entry{ecvt_r}{547}{\code {ecvt_r}}
16746 -\entry{fcvt_r}{547}{\code {fcvt_r}}
16747 -\entry{qecvt_r}{547}{\code {qecvt_r}}
16748 -\entry{qfcvt_r}{547}{\code {qfcvt_r}}
16749 -\entry{difftime}{549}{\code {difftime}}
16750 -\entry{clock}{552}{\code {clock}}
16751 -\entry{times}{553}{\code {times}}
16752 -\entry{time}{554}{\code {time}}
16753 -\entry{stime}{554}{\code {stime}}
16754 -\entry{gettimeofday}{555}{\code {gettimeofday}}
16755 -\entry{settimeofday}{555}{\code {settimeofday}}
16756 -\entry{adjtime}{555}{\code {adjtime}}
16757 -\entry{adjtimex}{556}{\code {adjtimex}}
16758 -\entry{localtime}{557}{\code {localtime}}
16759 -\entry{localtime_r}{558}{\code {localtime_r}}
16760 -\entry{gmtime}{558}{\code {gmtime}}
16761 -\entry{gmtime_r}{558}{\code {gmtime_r}}
16762 -\entry{mktime}{558}{\code {mktime}}
16763 -\entry{timelocal}{558}{\code {timelocal}}
16764 -\entry{timegm}{559}{\code {timegm}}
16765 -\entry{ntp_gettime}{559}{\code {ntp_gettime}}
16766 -\entry{ntp_adjtime}{561}{\code {ntp_adjtime}}
16767 -\entry{asctime}{562}{\code {asctime}}
16768 -\entry{asctime_r}{562}{\code {asctime_r}}
16769 -\entry{ctime}{562}{\code {ctime}}
16770 -\entry{ctime_r}{562}{\code {ctime_r}}
16771 -\entry{strftime}{563}{\code {strftime}}
16772 -\entry{wcsftime}{567}{\code {wcsftime}}
16773 -\entry{strptime}{567}{\code {strptime}}
16774 -\entry{getdate}{573}{\code {getdate}}
16775 -\entry{getdate_r}{574}{\code {getdate_r}}
16776 -\entry{tzset}{577}{\code {tzset}}
16777 -\entry{setitimer}{579}{\code {setitimer}}
16778 -\entry{getitimer}{579}{\code {getitimer}}
16779 -\entry{alarm}{579}{\code {alarm}}
16780 -\entry{sleep}{580}{\code {sleep}}
16781 -\entry{nanosleep}{581}{\code {nanosleep}}
16782 -\entry{getrusage}{583}{\code {getrusage}}
16783 -\entry{vtimes}{584}{\code {vtimes}}
16784 -\entry{getrlimit}{586}{\code {getrlimit}}
16785 -\entry{getrlimit64}{586}{\code {getrlimit64}}
16786 -\entry{setrlimit}{586}{\code {setrlimit}}
16787 -\entry{setrlimit64}{586}{\code {setrlimit64}}
16788 -\entry{ulimit}{588}{\code {ulimit}}
16789 -\entry{vlimit}{588}{\code {vlimit}}
16790 -\entry{sched_setscheduler}{593}{\code {sched_setscheduler}}
16791 -\entry{sched_getscheduler}{593}{\code {sched_getscheduler}}
16792 -\entry{sched_setparam}{594}{\code {sched_setparam}}
16793 -\entry{sched_getparam}{594}{\code {sched_getparam}}
16794 -\entry{sched_get_priority_min}{594}{\code {sched_get_priority_min}}
16795 -\entry{sched_get_priority_max}{594}{\code {sched_get_priority_max}}
16796 -\entry{sched_rr_get_interval}{594}{\code {sched_rr_get_interval}}
16797 -\entry{sched_yield}{594}{\code {sched_yield}}
16798 -\entry{getpriority}{597}{\code {getpriority}}
16799 -\entry{setpriority}{597}{\code {setpriority}}
16800 -\entry{nice}{597}{\code {nice}}
16801 -\entry{getpagesize}{599}{\code {getpagesize}}
16802 -\entry{get_phys_pages}{599}{\code {get_phys_pages}}
16803 -\entry{get_avphys_pages}{600}{\code {get_avphys_pages}}
16804 -\entry{get_nprocs_conf}{600}{\code {get_nprocs_conf}}
16805 -\entry{get_nprocs}{600}{\code {get_nprocs}}
16806 -\entry{getloadavg}{600}{\code {getloadavg}}
16807 -\entry{setjmp}{602}{\code {setjmp}}
16808 -\entry{longjmp}{602}{\code {longjmp}}
16809 -\entry{sigsetjmp}{603}{\code {sigsetjmp}}
16810 -\entry{siglongjmp}{604}{\code {siglongjmp}}
16811 -\entry{getcontext}{604}{\code {getcontext}}
16812 -\entry{makecontext}{605}{\code {makecontext}}
16813 -\entry{setcontext}{605}{\code {setcontext}}
16814 -\entry{swapcontext}{606}{\code {swapcontext}}
16815 -\entry{strsignal}{621}{\code {strsignal}}
16816 -\entry{psignal}{621}{\code {psignal}}
16817 -\entry{signal}{622}{\code {signal}}
16818 -\entry{sysv_signal}{624}{\code {sysv_signal}}
16819 -\entry{ssignal}{624}{\code {ssignal}}
16820 -\entry{sigaction}{625}{\code {sigaction}}
16821 -\entry{TEMP_FAILURE_RETRY}{638}{\code {TEMP_FAILURE_RETRY}}
16822 -\entry{raise}{639}{\code {raise}}
16823 -\entry{gsignal}{639}{\code {gsignal}}
16824 -\entry{kill}{640}{\code {kill}}
16825 -\entry{killpg}{641}{\code {killpg}}
16826 -\entry{sigemptyset}{644}{\code {sigemptyset}}
16827 -\entry{sigfillset}{644}{\code {sigfillset}}
16828 -\entry{sigaddset}{644}{\code {sigaddset}}
16829 -\entry{sigdelset}{644}{\code {sigdelset}}
16830 -\entry{sigismember}{645}{\code {sigismember}}
16831 -\entry{sigprocmask}{645}{\code {sigprocmask}}
16832 -\entry{sigpending}{647}{\code {sigpending}}
16833 -\entry{pause}{650}{\code {pause}}
16834 -\entry{sigsuspend}{651}{\code {sigsuspend}}
16835 -\entry{sigaltstack}{653}{\code {sigaltstack}}
16836 -\entry{sigstack}{653}{\code {sigstack}}
16837 -\entry{sigvec}{655}{\code {sigvec}}
16838 -\entry{siginterrupt}{655}{\code {siginterrupt}}
16839 -\entry{sigmask}{655}{\code {sigmask}}
16840 -\entry{sigblock}{655}{\code {sigblock}}
16841 -\entry{sigsetmask}{655}{\code {sigsetmask}}
16842 -\entry{sigpause}{656}{\code {sigpause}}
16843 -\entry{main}{657}{\code {main}}
16844 -\entry{getopt}{659}{\code {getopt}}
16845 -\entry{getopt_long}{663}{\code {getopt_long}}
16846 -\entry{getopt_long_only}{663}{\code {getopt_long_only}}
16847 -\entry{argp_parse}{666}{\code {argp_parse}}
16848 -\entry{argp_usage}{674}{\code {argp_usage}}
16849 -\entry{argp_error}{674}{\code {argp_error}}
16850 -\entry{argp_failure}{674}{\code {argp_failure}}
16851 -\entry{argp_state_help}{674}{\code {argp_state_help}}
16852 -\entry{argp_help}{679}{\code {argp_help}}
16853 -\entry{getsubopt}{689}{\code {getsubopt}}
16854 -\entry{getenv}{691}{\code {getenv}}
16855 -\entry{putenv}{692}{\code {putenv}}
16856 -\entry{setenv}{692}{\code {setenv}}
16857 -\entry{unsetenv}{692}{\code {unsetenv}}
16858 -\entry{clearenv}{692}{\code {clearenv}}
16859 -\entry{syscall}{695}{\code {syscall}}
16860 -\entry{exit}{696}{\code {exit}}
16861 -\entry{atexit}{698}{\code {atexit}}
16862 -\entry{on_exit}{698}{\code {on_exit}}
16863 -\entry{abort}{699}{\code {abort}}
16864 -\entry{_exit}{699}{\code {_exit}}
16865 -\entry{_Exit}{699}{\code {_Exit}}
16866 -\entry{system}{701}{\code {system}}
16867 -\entry{getpid}{702}{\code {getpid}}
16868 -\entry{getppid}{702}{\code {getppid}}
16869 -\entry{fork}{703}{\code {fork}}
16870 -\entry{vfork}{703}{\code {vfork}}
16871 -\entry{execv}{704}{\code {execv}}
16872 -\entry{execl}{704}{\code {execl}}
16873 -\entry{execve}{704}{\code {execve}}
16874 -\entry{execle}{704}{\code {execle}}
16875 -\entry{execvp}{705}{\code {execvp}}
16876 -\entry{execlp}{705}{\code {execlp}}
16877 -\entry{waitpid}{706}{\code {waitpid}}
16878 -\entry{wait}{708}{\code {wait}}
16879 -\entry{wait4}{708}{\code {wait4}}
16880 -\entry{WIFEXITED}{709}{\code {WIFEXITED}}
16881 -\entry{WEXITSTATUS}{709}{\code {WEXITSTATUS}}
16882 -\entry{WIFSIGNALED}{709}{\code {WIFSIGNALED}}
16883 -\entry{WTERMSIG}{709}{\code {WTERMSIG}}
16884 -\entry{WCOREDUMP}{709}{\code {WCOREDUMP}}
16885 -\entry{WIFSTOPPED}{709}{\code {WIFSTOPPED}}
16886 -\entry{WSTOPSIG}{709}{\code {WSTOPSIG}}
16887 -\entry{wait3}{710}{\code {wait3}}
16888 -\entry{ctermid}{728}{\code {ctermid}}
16889 -\entry{setsid}{728}{\code {setsid}}
16890 -\entry{getsid}{729}{\code {getsid}}
16891 -\entry{getpgrp}{729}{\code {getpgrp}}
16892 -\entry{getpgrp}{729}{\code {getpgrp}}
16893 -\entry{getpgid}{729}{\code {getpgid}}
16894 -\entry{setpgid}{729}{\code {setpgid}}
16895 -\entry{setpgrp}{730}{\code {setpgrp}}
16896 -\entry{tcgetpgrp}{730}{\code {tcgetpgrp}}
16897 -\entry{tcsetpgrp}{730}{\code {tcsetpgrp}}
16898 -\entry{tcgetsid}{731}{\code {tcgetsid}}
16899 -\entry{success}{735}{\code {success}}
16900 -\entry{notfound}{735}{\code {notfound}}
16901 -\entry{unavail}{735}{\code {unavail}}
16902 -\entry{tryagain}{735}{\code {tryagain}}
16903 -\entry{getuid}{745}{\code {getuid}}
16904 -\entry{getgid}{745}{\code {getgid}}
16905 -\entry{geteuid}{745}{\code {geteuid}}
16906 -\entry{getegid}{745}{\code {getegid}}
16907 -\entry{getgroups}{745}{\code {getgroups}}
16908 -\entry{seteuid}{746}{\code {seteuid}}
16909 -\entry{setuid}{746}{\code {setuid}}
16910 -\entry{setreuid}{746}{\code {setreuid}}
16911 -\entry{setegid}{747}{\code {setegid}}
16912 -\entry{setgid}{747}{\code {setgid}}
16913 -\entry{setregid}{747}{\code {setregid}}
16914 -\entry{setgroups}{748}{\code {setgroups}}
16915 -\entry{initgroups}{748}{\code {initgroups}}
16916 -\entry{getgrouplist}{748}{\code {getgrouplist}}
16917 -\entry{getlogin}{753}{\code {getlogin}}
16918 -\entry{cuserid}{753}{\code {cuserid}}
16919 -\entry{setutent}{755}{\code {setutent}}
16920 -\entry{getutent}{755}{\code {getutent}}
16921 -\entry{endutent}{756}{\code {endutent}}
16922 -\entry{getutid}{756}{\code {getutid}}
16923 -\entry{getutline}{756}{\code {getutline}}
16924 -\entry{pututline}{756}{\code {pututline}}
16925 -\entry{getutent_r}{757}{\code {getutent_r}}
16926 -\entry{getutid_r}{757}{\code {getutid_r}}
16927 -\entry{getutline_r}{757}{\code {getutline_r}}
16928 -\entry{utmpname}{757}{\code {utmpname}}
16929 -\entry{updwtmp}{758}{\code {updwtmp}}
16930 -\entry{setutxent}{759}{\code {setutxent}}
16931 -\entry{getutxent}{759}{\code {getutxent}}
16932 -\entry{endutxent}{759}{\code {endutxent}}
16933 -\entry{getutxid}{759}{\code {getutxid}}
16934 -\entry{getutxline}{760}{\code {getutxline}}
16935 -\entry{pututxline}{760}{\code {pututxline}}
16936 -\entry{utmpxname}{760}{\code {utmpxname}}
16937 -\entry{getutmp}{760}{\code {getutmp}}
16938 -\entry{getutmpx}{760}{\code {getutmpx}}
16939 -\entry{login_tty}{760}{\code {login_tty}}
16940 -\entry{login}{760}{\code {login}}
16941 -\entry{logout}{761}{\code {logout}}
16942 -\entry{logwtmp}{761}{\code {logwtmp}}
16943 -\entry{getpwuid}{762}{\code {getpwuid}}
16944 -\entry{getpwuid_r}{762}{\code {getpwuid_r}}
16945 -\entry{getpwnam}{762}{\code {getpwnam}}
16946 -\entry{getpwnam_r}{762}{\code {getpwnam_r}}
16947 -\entry{fgetpwent}{762}{\code {fgetpwent}}
16948 -\entry{fgetpwent_r}{763}{\code {fgetpwent_r}}
16949 -\entry{setpwent}{763}{\code {setpwent}}
16950 -\entry{getpwent}{763}{\code {getpwent}}
16951 -\entry{getpwent_r}{763}{\code {getpwent_r}}
16952 -\entry{endpwent}{763}{\code {endpwent}}
16953 -\entry{putpwent}{763}{\code {putpwent}}
16954 -\entry{getgrgid}{764}{\code {getgrgid}}
16955 -\entry{getgrgid_r}{764}{\code {getgrgid_r}}
16956 -\entry{getgrnam}{765}{\code {getgrnam}}
16957 -\entry{getgrnam_r}{765}{\code {getgrnam_r}}
16958 -\entry{fgetgrent}{765}{\code {fgetgrent}}
16959 -\entry{fgetgrent_r}{765}{\code {fgetgrent_r}}
16960 -\entry{setgrent}{766}{\code {setgrent}}
16961 -\entry{getgrent}{766}{\code {getgrent}}
16962 -\entry{getgrent_r}{766}{\code {getgrent_r}}
16963 -\entry{endgrent}{766}{\code {endgrent}}
16964 -\entry{setnetgrent}{768}{\code {setnetgrent}}
16965 -\entry{getnetgrent}{768}{\code {getnetgrent}}
16966 -\entry{getnetgrent_r}{769}{\code {getnetgrent_r}}
16967 -\entry{endnetgrent}{769}{\code {endnetgrent}}
16968 -\entry{innetgr}{769}{\code {innetgr}}
16969 -\entry{gethostname}{771}{\code {gethostname}}
16970 -\entry{sethostname}{772}{\code {sethostname}}
16971 -\entry{getdomainnname}{772}{\code {getdomainnname}}
16972 -\entry{setdomainname}{772}{\code {setdomainname}}
16973 -\entry{gethostid}{772}{\code {gethostid}}
16974 -\entry{sethostid}{773}{\code {sethostid}}
16975 -\entry{uname}{774}{\code {uname}}
16976 -\entry{setfsent}{776}{\code {setfsent}}
16977 -\entry{endfsent}{776}{\code {endfsent}}
16978 -\entry{getfsent}{777}{\code {getfsent}}
16979 -\entry{getfsspec}{777}{\code {getfsspec}}
16980 -\entry{getfsfile}{777}{\code {getfsfile}}
16981 -\entry{setmntent}{779}{\code {setmntent}}
16982 -\entry{endmntent}{779}{\code {endmntent}}
16983 -\entry{getmntent}{779}{\code {getmntent}}
16984 -\entry{getmntent_r}{780}{\code {getmntent_r}}
16985 -\entry{addmntent}{780}{\code {addmntent}}
16986 -\entry{hasmntopt}{780}{\code {hasmntopt}}
16987 -\entry{mount}{781}{\code {mount}}
16988 -\entry{umount2}{783}{\code {umount2}}
16989 -\entry{umount}{784}{\code {umount}}
16990 -\entry{sysctl}{784}{\code {sysctl}}
16991 -\entry{sysconf}{790}{\code {sysconf}}
16992 -\entry{pathconf}{802}{\code {pathconf}}
16993 -\entry{fpathconf}{803}{\code {fpathconf}}
16994 -\entry{confstr}{805}{\code {confstr}}
16995 -\entry{getpass}{810}{\code {getpass}}
16996 -\entry{crypt}{811}{\code {crypt}}
16997 -\entry{crypt_r}{812}{\code {crypt_r}}
16998 -\entry{setkey}{813}{\code {setkey}}
16999 -\entry{encrypt}{813}{\code {encrypt}}
17000 -\entry{setkey_r}{813}{\code {setkey_r}}
17001 -\entry{encrypt_r}{813}{\code {encrypt_r}}
17002 -\entry{ecb_crypt}{814}{\code {ecb_crypt}}
17003 -\entry{DES_FAILED}{814}{\code {DES_FAILED}}
17004 -\entry{cbc_crypt}{814}{\code {cbc_crypt}}
17005 -\entry{des_setparity}{815}{\code {des_setparity}}
17006 -\entry{backtrace}{817}{\code {backtrace}}
17007 -\entry{backtrace_symbols}{817}{\code {backtrace_symbols}}
17008 -\entry{backtrace_symbols_fd}{818}{\code {backtrace_symbols_fd}}
17009 -\entry{pthread_create}{819}{\code {pthread_create}}
17010 -\entry{pthread_exit}{819}{\code {pthread_exit}}
17011 -\entry{pthread_cancel}{819}{\code {pthread_cancel}}
17012 -\entry{pthread_join}{820}{\code {pthread_join}}
17013 -\entry{pthread_attr_init}{820}{\code {pthread_attr_init}}
17014 -\entry{pthread_attr_destroy}{821}{\code {pthread_attr_destroy}}
17015 -\entry{pthread_attr_setdetachstate}{821}{\code {pthread_attr_setdetachstate}}
17016 -\entry{pthread_attr_setguardsize}{821}{\code {pthread_attr_setguardsize}}
17017 -\entry{pthread_attr_setinheritsched}{821}{\code {pthread_attr_setinheritsched}}
17018 -\entry{pthread_attr_setschedparam}{821}{\code {pthread_attr_setschedparam}}
17019 -\entry{pthread_attr_setschedpolicy}{821}{\code {pthread_attr_setschedpolicy}}
17020 -\entry{pthread_attr_setscope}{821}{\code {pthread_attr_setscope}}
17021 -\entry{pthread_attr_setstack}{821}{\code {pthread_attr_setstack}}
17022 -\entry{pthread_attr_setstackaddr}{821}{\code {pthread_attr_setstackaddr}}
17023 -\entry{pthread_attr_setstacksize}{821}{\code {pthread_attr_setstacksize}}
17024 -\entry{pthread_attr_setattr}{821}{\code {pthread_attr_setattr}}
17025 -\entry{pthread_attr_getdetachstate}{821}{\code {pthread_attr_getdetachstate}}
17026 -\entry{pthread_attr_getguardsize}{821}{\code {pthread_attr_getguardsize}}
17027 -\entry{pthread_attr_getinheritsched}{821}{\code {pthread_attr_getinheritsched}}
17028 -\entry{pthread_attr_getschedparam}{821}{\code {pthread_attr_getschedparam}}
17029 -\entry{pthread_attr_getschedpolicy}{821}{\code {pthread_attr_getschedpolicy}}
17030 -\entry{pthread_attr_getscope}{821}{\code {pthread_attr_getscope}}
17031 -\entry{pthread_attr_getstack}{821}{\code {pthread_attr_getstack}}
17032 -\entry{pthread_attr_getstackaddr}{821}{\code {pthread_attr_getstackaddr}}
17033 -\entry{pthread_attr_getstacksize}{821}{\code {pthread_attr_getstacksize}}
17034 -\entry{pthread_attr_getattr}{821}{\code {pthread_attr_getattr}}
17035 -\entry{pthread_setcancelstate}{823}{\code {pthread_setcancelstate}}
17036 -\entry{pthread_setcanceltype}{823}{\code {pthread_setcanceltype}}
17037 -\entry{pthread_testcancel}{824}{\code {pthread_testcancel}}
17038 -\entry{pthread_cleanup_push}{825}{\code {pthread_cleanup_push}}
17039 -\entry{pthread_cleanup_pop}{825}{\code {pthread_cleanup_pop}}
17040 -\entry{pthread_cleanup_push_defer_np}{825}{\code {pthread_cleanup_push_defer_np}}
17041 -\entry{pthread_cleanup_pop_restore_np}{825}{\code {pthread_cleanup_pop_restore_np}}
17042 -\entry{pthread_mutex_init}{826}{\code {pthread_mutex_init}}
17043 -\entry{pthread_mutex_lock}{826}{\code {pthread_mutex_lock}}
17044 -\entry{pthread_mutex_trylock}{827}{\code {pthread_mutex_trylock}}
17045 -\entry{pthread_mutex_timedlock}{827}{\code {pthread_mutex_timedlock}}
17046 -\entry{pthread_mutex_unlock}{827}{\code {pthread_mutex_unlock}}
17047 -\entry{pthread_mutex_destroy}{827}{\code {pthread_mutex_destroy}}
17048 -\entry{pthread_mutexattr_init}{828}{\code {pthread_mutexattr_init}}
17049 -\entry{pthread_mutexattr_destroy}{828}{\code {pthread_mutexattr_destroy}}
17050 -\entry{pthread_mutexattr_settype}{828}{\code {pthread_mutexattr_settype}}
17051 -\entry{pthread_mutexattr_gettype}{829}{\code {pthread_mutexattr_gettype}}
17052 -\entry{pthread_cond_init}{829}{\code {pthread_cond_init}}
17053 -\entry{pthread_cond_signal}{829}{\code {pthread_cond_signal}}
17054 -\entry{pthread_cond_broadcast}{829}{\code {pthread_cond_broadcast}}
17055 -\entry{pthread_cond_wait}{829}{\code {pthread_cond_wait}}
17056 -\entry{pthread_cond_timedwait}{830}{\code {pthread_cond_timedwait}}
17057 -\entry{pthread_cond_destroy}{830}{\code {pthread_cond_destroy}}
17058 -\entry{pthread_condattr_init}{831}{\code {pthread_condattr_init}}
17059 -\entry{pthread_condattr_destroy}{831}{\code {pthread_condattr_destroy}}
17060 -\entry{sem_init}{832}{\code {sem_init}}
17061 -\entry{sem_destroy}{832}{\code {sem_destroy}}
17062 -\entry{sem_wait}{832}{\code {sem_wait}}
17063 -\entry{sem_trywait}{832}{\code {sem_trywait}}
17064 -\entry{sem_post}{832}{\code {sem_post}}
17065 -\entry{sem_getvalue}{833}{\code {sem_getvalue}}
17066 -\entry{pthread_key_create}{833}{\code {pthread_key_create}}
17067 -\entry{pthread_key_delete}{833}{\code {pthread_key_delete}}
17068 -\entry{pthread_setspecific}{834}{\code {pthread_setspecific}}
17069 -\entry{pthread_getspecific}{834}{\code {pthread_getspecific}}
17070 -\entry{pthread_sigmask}{834}{\code {pthread_sigmask}}
17071 -\entry{pthread_kill}{835}{\code {pthread_kill}}
17072 -\entry{sigwait}{835}{\code {sigwait}}
17073 -\entry{pthread_atfork}{836}{\code {pthread_atfork}}
17074 -\entry{pthread_self}{838}{\code {pthread_self}}
17075 -\entry{pthread_equal}{838}{\code {pthread_equal}}
17076 -\entry{pthread_detach}{838}{\code {pthread_detach}}
17077 -\entry{pthread_kill_other_threads_np}{838}{\code {pthread_kill_other_threads_np}}
17078 -\entry{pthread_once}{839}{\code {pthread_once}}
17079 -\entry{pthread_setschedparam}{839}{\code {pthread_setschedparam}}
17080 -\entry{pthread_getschedparam}{839}{\code {pthread_getschedparam}}
17081 -\entry{pthread_setconcurrency}{840}{\code {pthread_setconcurrency}}
17082 -\entry{pthread_getconcurrency}{840}{\code {pthread_getconcurrency}}
17083 -\entry{assert}{841}{\code {assert}}
17084 -\entry{assert_perror}{842}{\code {assert_perror}}
17085 -\entry{va_start}{846}{\code {va_start}}
17086 -\entry{va_arg}{846}{\code {va_arg}}
17087 -\entry{va_end}{846}{\code {va_end}}
17088 -\entry{__va_copy}{846}{\code {__va_copy}}
17089 -\entry{va_alist}{848}{\code {va_alist}}
17090 -\entry{va_dcl}{848}{\code {va_dcl}}
17091 -\entry{va_start}{848}{\code {va_start}}
17092 -\entry{offsetof}{857}{\code {offsetof}}
17093 diff -u -udbrN glibc-2.3.2/manual/libc.fns glibc-2.3.2-200304020432/manual/libc.fns
17094 --- glibc-2.3.2/manual/libc.fns Tue Feb 25 11:34:58 2003
17095 +++ glibc-2.3.2-200304020432/manual/libc.fns Thu Jan 1 01:00:00 1970
17096 @@ -1,1354 +0,0 @@
17097 -\initial {_}
17098 -\entry {\code {__fbufsize}}{292}
17099 -\entry {\code {__flbf}}{291}
17100 -\entry {\code {__fpending}}{292}
17101 -\entry {\code {__fpurge}}{290}
17102 -\entry {\code {__freadable}}{235}
17103 -\entry {\code {__freading}}{235}
17104 -\entry {\code {__fsetlocking}}{238}
17105 -\entry {\code {__fwritable}}{235}
17106 -\entry {\code {__fwriting}}{235}
17107 -\entry {\code {__va_copy}}{846}
17108 -\entry {\code {_exit}}{699}
17109 -\entry {\code {_Exit}}{699}
17110 -\entry {\code {_flushlbf}}{289}
17111 -\entry {\code {_tolower}}{69}
17112 -\entry {\code {_toupper}}{69}
17113 -\initial {A}
17114 -\entry {\code {a64l}}{106}
17115 -\entry {\code {abort}}{699}
17116 -\entry {\code {abs}}{531}
17117 -\entry {\code {accept}}{426}
17118 -\entry {\code {access}}{383}
17119 -\entry {\code {acos}}{482}
17120 -\entry {\code {acosf}}{482}
17121 -\entry {\code {acosh}}{487}
17122 -\entry {\code {acoshf}}{487}
17123 -\entry {\code {acoshl}}{487}
17124 -\entry {\code {acosl}}{482}
17125 -\entry {\code {addmntent}}{780}
17126 -\entry {\code {addseverity}}{300}
17127 -\entry {\code {adjtime}}{555}
17128 -\entry {\code {adjtimex}}{556}
17129 -\entry {\code {aio_cancel}}{334}
17130 -\entry {\code {aio_cancel64}}{335}
17131 -\entry {\code {aio_error}}{331}
17132 -\entry {\code {aio_error64}}{331}
17133 -\entry {\code {aio_fsync}}{332}
17134 -\entry {\code {aio_fsync64}}{333}
17135 -\entry {\code {aio_init}}{336}
17136 -\entry {\code {aio_read}}{327}
17137 -\entry {\code {aio_read64}}{328}
17138 -\entry {\code {aio_return}}{332}
17139 -\entry {\code {aio_return64}}{332}
17140 -\entry {\code {aio_suspend}}{333}
17141 -\entry {\code {aio_suspend64}}{334}
17142 -\entry {\code {aio_write}}{328}
17143 -\entry {\code {aio_write64}}{329}
17144 -\entry {\code {alarm}}{579}
17145 -\entry {\code {alloca}}{59}
17146 -\entry {\code {alphasort}}{358}
17147 -\entry {\code {alphasort64}}{359}
17148 -\entry {\code {argp_error}}{674}
17149 -\entry {\code {argp_failure}}{674}
17150 -\entry {\code {argp_help}}{679}
17151 -\entry {\code {argp_parse}}{666}
17152 -\entry {\code {argp_state_help}}{674}
17153 -\entry {\code {argp_usage}}{674}
17154 -\entry {\code {argz_add}}{108}
17155 -\entry {\code {argz_add_sep}}{108}
17156 -\entry {\code {argz_append}}{108}
17157 -\entry {\code {argz_count}}{108}
17158 -\entry {\code {argz_create}}{108}
17159 -\entry {\code {argz_create_sep}}{108}
17160 -\entry {\code {argz_delete}}{109}
17161 -\entry {\code {argz_extract}}{108}
17162 -\entry {\code {argz_insert}}{109}
17163 -\entry {\code {argz_next}}{109}
17164 -\entry {\code {argz_replace}}{109}
17165 -\entry {\code {argz_stringify}}{108}
17166 -\entry {\code {asctime}}{562}
17167 -\entry {\code {asctime_r}}{562}
17168 -\entry {\code {asin}}{481}
17169 -\entry {\code {asinf}}{481}
17170 -\entry {\code {asinh}}{487}
17171 -\entry {\code {asinhf}}{487}
17172 -\entry {\code {asinhl}}{487}
17173 -\entry {\code {asinl}}{481}
17174 -\entry {\code {asprintf}}{261}
17175 -\entry {\code {assert}}{841}
17176 -\entry {\code {assert_perror}}{842}
17177 -\entry {\code {atan}}{482}
17178 -\entry {\code {atan2}}{482}
17179 -\entry {\code {atan2f}}{482}
17180 -\entry {\code {atan2l}}{482}
17181 -\entry {\code {atanf}}{482}
17182 -\entry {\code {atanh}}{487}
17183 -\entry {\code {atanhf}}{487}
17184 -\entry {\code {atanhl}}{487}
17185 -\entry {\code {atanl}}{482}
17186 -\entry {\code {atexit}}{698}
17187 -\entry {\code {atof}}{545}
17188 -\entry {\code {atoi}}{543}
17189 -\entry {\code {atol}}{543}
17190 -\entry {\code {atoll}}{543}
17191 -\initial {B}
17192 -\entry {\code {backtrace}}{817}
17193 -\entry {\code {backtrace_symbols}}{817}
17194 -\entry {\code {backtrace_symbols_fd}}{818}
17195 -\entry {\code {basename}}{103, 104}
17196 -\entry {\code {bcmp}}{92}
17197 -\entry {\code {bcopy}}{88}
17198 -\entry {\code {bind}}{403}
17199 -\entry {\code {bind_textdomain_codeset}}{189}
17200 -\entry {\code {bindtextdomain}}{184}
17201 -\entry {\code {brk}}{62}
17202 -\entry {\code {bsearch}}{196}
17203 -\entry {\code {btowc}}{118}
17204 -\entry {\code {bzero}}{89}
17205 -\initial {C}
17206 -\entry {\code {cabs}}{531}
17207 -\entry {\code {cabsf}}{531}
17208 -\entry {\code {cabsl}}{531}
17209 -\entry {\code {cacos}}{482}
17210 -\entry {\code {cacosf}}{482}
17211 -\entry {\code {cacosh}}{488}
17212 -\entry {\code {cacoshf}}{488}
17213 -\entry {\code {cacoshl}}{488}
17214 -\entry {\code {cacosl}}{482}
17215 -\entry {\code {calloc}}{37}
17216 -\entry {\code {canonicalize_file_name}}{366}
17217 -\entry {\code {carg}}{539}
17218 -\entry {\code {cargf}}{539}
17219 -\entry {\code {cargl}}{539}
17220 -\entry {\code {casin}}{482}
17221 -\entry {\code {casinf}}{482}
17222 -\entry {\code {casinh}}{487}
17223 -\entry {\code {casinhf}}{487}
17224 -\entry {\code {casinhl}}{487}
17225 -\entry {\code {casinl}}{482}
17226 -\entry {\code {catan}}{482}
17227 -\entry {\code {catanf}}{482}
17228 -\entry {\code {catanh}}{488}
17229 -\entry {\code {catanhf}}{488}
17230 -\entry {\code {catanhl}}{488}
17231 -\entry {\code {catanl}}{482}
17232 -\entry {\code {catclose}}{174}
17233 -\entry {\code {catgets}}{174}
17234 -\entry {\code {catopen}}{171}
17235 -\entry {\code {cbc_crypt}}{814}
17236 -\entry {\code {cbrt}}{485}
17237 -\entry {\code {cbrtf}}{485}
17238 -\entry {\code {cbrtl}}{485}
17239 -\entry {\code {ccos}}{481}
17240 -\entry {\code {ccosf}}{481}
17241 -\entry {\code {ccosh}}{487}
17242 -\entry {\code {ccoshf}}{487}
17243 -\entry {\code {ccoshl}}{487}
17244 -\entry {\code {ccosl}}{481}
17245 -\entry {\code {ceil}}{533}
17246 -\entry {\code {ceilf}}{533}
17247 -\entry {\code {ceill}}{533}
17248 -\entry {\code {cexp}}{485}
17249 -\entry {\code {cexpf}}{485}
17250 -\entry {\code {cexpl}}{485}
17251 -\entry {\code {cfgetispeed}}{457}
17252 -\entry {\code {cfgetospeed}}{457}
17253 -\entry {\code {cfmakeraw}}{464}
17254 -\entry {\code {cfree}}{36}
17255 -\entry {\code {cfsetispeed}}{457}
17256 -\entry {\code {cfsetospeed}}{457}
17257 -\entry {\code {cfsetspeed}}{457}
17258 -\entry {\code {chdir}}{352}
17259 -\entry {\code {chmod}}{381}
17260 -\entry {\code {chown}}{377}
17261 -\entry {\code {cimag}}{539}
17262 -\entry {\code {cimagf}}{539}
17263 -\entry {\code {cimagl}}{539}
17264 -\entry {\code {clearenv}}{692}
17265 -\entry {\code {clearerr}}{282}
17266 -\entry {\code {clearerr_unlocked}}{283}
17267 -\entry {\code {clock}}{552}
17268 -\entry {\code {clog}}{485}
17269 -\entry {\code {clog10}}{486}
17270 -\entry {\code {clog10f}}{486}
17271 -\entry {\code {clog10l}}{486}
17272 -\entry {\code {clogf}}{486}
17273 -\entry {\code {clogl}}{486}
17274 -\entry {\code {close}}{305}
17275 -\entry {\code {closedir}}{356}
17276 -\entry {\code {closelog}}{476}
17277 -\entry {\code {confstr}}{805}
17278 -\entry {\code {conj}}{539}
17279 -\entry {\code {conjf}}{539}
17280 -\entry {\code {conjl}}{539}
17281 -\entry {\code {connect}}{424}
17282 -\entry {\code {copysign}}{535}
17283 -\entry {\code {copysignf}}{535}
17284 -\entry {\code {copysignl}}{535}
17285 -\entry {\code {cos}}{480}
17286 -\entry {\code {cosf}}{480}
17287 -\entry {\code {cosh}}{486}
17288 -\entry {\code {coshf}}{486}
17289 -\entry {\code {coshl}}{486}
17290 -\entry {\code {cosl}}{480}
17291 -\entry {\code {cpow}}{486}
17292 -\entry {\code {cpowf}}{486}
17293 -\entry {\code {cpowl}}{486}
17294 -\entry {\code {cproj}}{539}
17295 -\entry {\code {cprojf}}{539}
17296 -\entry {\code {cprojl}}{539}
17297 -\entry {\code {creal}}{539}
17298 -\entry {\code {crealf}}{539}
17299 -\entry {\code {creall}}{539}
17300 -\entry {\code {creat}}{304}
17301 -\entry {\code {creat64}}{305}
17302 -\entry {\code {crypt}}{811}
17303 -\entry {\code {crypt_r}}{812}
17304 -\entry {\code {csin}}{481}
17305 -\entry {\code {csinf}}{481}
17306 -\entry {\code {csinh}}{487}
17307 -\entry {\code {csinhf}}{487}
17308 -\entry {\code {csinhl}}{487}
17309 -\entry {\code {csinl}}{481}
17310 -\entry {\code {csqrt}}{486}
17311 -\entry {\code {csqrtf}}{486}
17312 -\entry {\code {csqrtl}}{486}
17313 -\entry {\code {ctan}}{481}
17314 -\entry {\code {ctanf}}{481}
17315 -\entry {\code {ctanh}}{487}
17316 -\entry {\code {ctanhf}}{487}
17317 -\entry {\code {ctanhl}}{487}
17318 -\entry {\code {ctanl}}{481}
17319 -\entry {\code {ctermid}}{728}
17320 -\entry {\code {ctime}}{562}
17321 -\entry {\code {ctime_r}}{562}
17322 -\entry {\code {cuserid}}{753}
17323 -\initial {D}
17324 -\entry {\code {dcgettext}}{182}
17325 -\entry {\code {dcngettext}}{186}
17326 -\entry {\code {DES_FAILED}}{814}
17327 -\entry {\code {des_setparity}}{815}
17328 -\entry {\code {dgettext}}{182}
17329 -\entry {\code {difftime}}{549}
17330 -\entry {\code {dirfd}}{355}
17331 -\entry {\code {dirname}}{104}
17332 -\entry {\code {div}}{519}
17333 -\entry {\code {dngettext}}{186}
17334 -\entry {\code {drand48}}{511}
17335 -\entry {\code {drand48_r}}{513}
17336 -\entry {\code {drem}}{534}
17337 -\entry {\code {dremf}}{535}
17338 -\entry {\code {dreml}}{535}
17339 -\entry {\code {DTTOIF}}{354}
17340 -\entry {\code {dup}}{337}
17341 -\entry {\code {dup2}}{337}
17342 -\initial {E}
17343 -\entry {\code {ecb_crypt}}{814}
17344 -\entry {\code {ecvt}}{546}
17345 -\entry {\code {ecvt_r}}{547}
17346 -\entry {\code {encrypt}}{813}
17347 -\entry {\code {encrypt_r}}{813}
17348 -\entry {\code {endfsent}}{776}
17349 -\entry {\code {endgrent}}{766}
17350 -\entry {\code {endhostent}}{416}
17351 -\entry {\code {endmntent}}{779}
17352 -\entry {\code {endnetent}}{444}
17353 -\entry {\code {endnetgrent}}{769}
17354 -\entry {\code {endprotoent}}{420}
17355 -\entry {\code {endpwent}}{763}
17356 -\entry {\code {endservent}}{418}
17357 -\entry {\code {endutent}}{756}
17358 -\entry {\code {endutxent}}{759}
17359 -\entry {\code {envz_add}}{110}
17360 -\entry {\code {envz_entry}}{110}
17361 -\entry {\code {envz_get}}{110}
17362 -\entry {\code {envz_merge}}{110}
17363 -\entry {\code {envz_strip}}{110}
17364 -\entry {\code {erand48}}{511}
17365 -\entry {\code {erand48_r}}{513}
17366 -\entry {\code {erf}}{488}
17367 -\entry {\code {erfc}}{488}
17368 -\entry {\code {erfcf}}{488}
17369 -\entry {\code {erfcl}}{488}
17370 -\entry {\code {erff}}{488}
17371 -\entry {\code {erfl}}{488}
17372 -\entry {\code {err}}{30}
17373 -\entry {\code {error}}{28}
17374 -\entry {\code {error_at_line}}{28}
17375 -\entry {\code {errx}}{30}
17376 -\entry {\code {execl}}{704}
17377 -\entry {\code {execle}}{704}
17378 -\entry {\code {execlp}}{705}
17379 -\entry {\code {execv}}{704}
17380 -\entry {\code {execve}}{704}
17381 -\entry {\code {execvp}}{705}
17382 -\entry {\code {exit}}{696}
17383 -\entry {\code {exp}}{483}
17384 -\entry {\code {exp10}}{483}
17385 -\entry {\code {exp10f}}{483}
17386 -\entry {\code {exp10l}}{483}
17387 -\entry {\code {exp2}}{483}
17388 -\entry {\code {exp2f}}{483}
17389 -\entry {\code {exp2l}}{483}
17390 -\entry {\code {expf}}{483}
17391 -\entry {\code {expl}}{483}
17392 -\entry {\code {expm1}}{485}
17393 -\entry {\code {expm1f}}{485}
17394 -\entry {\code {expm1l}}{485}
17395 -\initial {F}
17396 -\entry {\code {fabs}}{531}
17397 -\entry {\code {fabsf}}{531}
17398 -\entry {\code {fabsl}}{531}
17399 -\entry {\code {fchdir}}{352}
17400 -\entry {\code {fchmod}}{382}
17401 -\entry {\code {fchown}}{378}
17402 -\entry {\code {fclean}}{315}
17403 -\entry {\code {fclose}}{235}
17404 -\entry {\code {fcloseall}}{236}
17405 -\entry {\code {fcntl}}{336}
17406 -\entry {\code {fcvt}}{546}
17407 -\entry {\code {fcvt_r}}{547}
17408 -\entry {\code {FD_CLR}}{321}
17409 -\entry {\code {FD_ISSET}}{322}
17410 -\entry {\code {FD_SET}}{321}
17411 -\entry {\code {FD_ZERO}}{321}
17412 -\entry {\code {fdatasync}}{324}
17413 -\entry {\code {fdim}}{537}
17414 -\entry {\code {fdimf}}{537}
17415 -\entry {\code {fdiml}}{537}
17416 -\entry {\code {fdopen}}{313}
17417 -\entry {\code {feclearexcept}}{525}
17418 -\entry {\code {fedisableexcept}}{530}
17419 -\entry {\code {feenableexcept}}{530}
17420 -\entry {\code {fegetenv}}{529}
17421 -\entry {\code {fegetexcept}}{530}
17422 -\entry {\code {fegetexceptflag}}{526}
17423 -\entry {\code {fegetround}}{528}
17424 -\entry {\code {feholdexcept}}{529}
17425 -\entry {\code {feof}}{282}
17426 -\entry {\code {feof_unlocked}}{282}
17427 -\entry {\code {feraiseexcept}}{525}
17428 -\entry {\code {ferror}}{282}
17429 -\entry {\code {ferror_unlocked}}{282}
17430 -\entry {\code {fesetenv}}{529}
17431 -\entry {\code {fesetexceptflag}}{526}
17432 -\entry {\code {fesetround}}{528}
17433 -\entry {\code {fetestexcept}}{526}
17434 -\entry {\code {feupdateenv}}{530}
17435 -\entry {\code {fflush}}{289}
17436 -\entry {\code {fflush_unlocked}}{289}
17437 -\entry {\code {fgetc}}{243}
17438 -\entry {\code {fgetc_unlocked}}{244}
17439 -\entry {\code {fgetgrent}}{765}
17440 -\entry {\code {fgetgrent_r}}{765}
17441 -\entry {\code {fgetpos}}{287}
17442 -\entry {\code {fgetpos64}}{287}
17443 -\entry {\code {fgetpwent}}{762}
17444 -\entry {\code {fgetpwent_r}}{763}
17445 -\entry {\code {fgets}}{246}
17446 -\entry {\code {fgets_unlocked}}{247}
17447 -\entry {\code {fgetwc}}{243}
17448 -\entry {\code {fgetwc_unlocked}}{244}
17449 -\entry {\code {fgetws}}{246}
17450 -\entry {\code {fgetws_unlocked}}{247}
17451 -\entry {\code {fileno}}{313}
17452 -\entry {\code {fileno_unlocked}}{313}
17453 -\entry {\code {finite}}{522}
17454 -\entry {\code {finitef}}{522}
17455 -\entry {\code {finitel}}{522}
17456 -\entry {\code {flockfile}}{236}
17457 -\entry {\code {floor}}{533}
17458 -\entry {\code {floorf}}{533}
17459 -\entry {\code {floorl}}{533}
17460 -\entry {\code {fma}}{538}
17461 -\entry {\code {fmaf}}{538}
17462 -\entry {\code {fmal}}{538}
17463 -\entry {\code {fmax}}{537}
17464 -\entry {\code {fmaxf}}{537}
17465 -\entry {\code {fmaxl}}{537}
17466 -\entry {\code {fmemopen}}{292}
17467 -\entry {\code {fmin}}{537}
17468 -\entry {\code {fminf}}{537}
17469 -\entry {\code {fminl}}{537}
17470 -\entry {\code {fmod}}{534}
17471 -\entry {\code {fmodf}}{534}
17472 -\entry {\code {fmodl}}{534}
17473 -\entry {\code {fmtmsg}}{298}
17474 -\entry {\code {fnmatch}}{205}
17475 -\entry {\code {fopen}}{232}
17476 -\entry {\code {fopen64}}{233}
17477 -\entry {\code {fopencookie}}{296}
17478 -\entry {\code {fork}}{703}
17479 -\entry {\code {forkpty}}{470}
17480 -\entry {\code {fpathconf}}{803}
17481 -\entry {\code {fpclassify}}{520}
17482 -\entry {\code {fprintf}}{259}
17483 -\entry {\code {fputc}}{241}
17484 -\entry {\code {fputc_unlocked}}{241}
17485 -\entry {\code {fputs}}{242}
17486 -\entry {\code {fputs_unlocked}}{243}
17487 -\entry {\code {fputwc}}{241}
17488 -\entry {\code {fputwc_unlocked}}{241}
17489 -\entry {\code {fputws}}{242}
17490 -\entry {\code {fputws_unlocked}}{243}
17491 -\entry {\code {fread}}{249}
17492 -\entry {\code {fread_unlocked}}{249}
17493 -\entry {\code {free}}{35}
17494 -\entry {\code {freopen}}{234}
17495 -\entry {\code {freopen64}}{234}
17496 -\entry {\code {frexp}}{531}
17497 -\entry {\code {frexpf}}{531}
17498 -\entry {\code {frexpl}}{531}
17499 -\entry {\code {fscanf}}{280}
17500 -\entry {\code {fseek}}{285}
17501 -\entry {\code {fseeko}}{285}
17502 -\entry {\code {fseeko64}}{285}
17503 -\entry {\code {fsetpos}}{288}
17504 -\entry {\code {fsetpos64}}{288}
17505 -\entry {\code {fstat}}{375}
17506 -\entry {\code {fstat64}}{375}
17507 -\entry {\code {fsync}}{324}
17508 -\entry {\code {ftell}}{284}
17509 -\entry {\code {ftello}}{284}
17510 -\entry {\code {ftello64}}{285}
17511 -\entry {\code {ftruncate}}{386}
17512 -\entry {\code {ftruncate64}}{387}
17513 -\entry {\code {ftrylockfile}}{237}
17514 -\entry {\code {ftw}}{361}
17515 -\entry {\code {ftw64}}{362}
17516 -\entry {\code {funlockfile}}{237}
17517 -\entry {\code {futimes}}{385}
17518 -\entry {\code {fwide}}{240}
17519 -\entry {\code {fwprintf}}{259}
17520 -\entry {\code {fwrite}}{250}
17521 -\entry {\code {fwrite_unlocked}}{250}
17522 -\entry {\code {fwscanf}}{280}
17523 -\initial {G}
17524 -\entry {\code {gamma}}{489}
17525 -\entry {\code {gammaf}}{489}
17526 -\entry {\code {gammal}}{489}
17527 -\entry {\code {gcvt}}{546}
17528 -\entry {\code {get_avphys_pages}}{600}
17529 -\entry {\code {get_current_dir_name}}{352}
17530 -\entry {\code {get_nprocs}}{600}
17531 -\entry {\code {get_nprocs_conf}}{600}
17532 -\entry {\code {get_phys_pages}}{599}
17533 -\entry {\code {getc}}{244}
17534 -\entry {\code {getc_unlocked}}{244}
17535 -\entry {\code {getchar}}{244}
17536 -\entry {\code {getchar_unlocked}}{244}
17537 -\entry {\code {getcontext}}{604}
17538 -\entry {\code {getcwd}}{351}
17539 -\entry {\code {getdate}}{573}
17540 -\entry {\code {getdate_r}}{574}
17541 -\entry {\code {getdelim}}{246}
17542 -\entry {\code {getdomainnname}}{772}
17543 -\entry {\code {getegid}}{745}
17544 -\entry {\code {getenv}}{691}
17545 -\entry {\code {geteuid}}{745}
17546 -\entry {\code {getfsent}}{777}
17547 -\entry {\code {getfsfile}}{777}
17548 -\entry {\code {getfsspec}}{777}
17549 -\entry {\code {getgid}}{745}
17550 -\entry {\code {getgrent}}{766}
17551 -\entry {\code {getgrent_r}}{766}
17552 -\entry {\code {getgrgid}}{764}
17553 -\entry {\code {getgrgid_r}}{764}
17554 -\entry {\code {getgrnam}}{765}
17555 -\entry {\code {getgrnam_r}}{765}
17556 -\entry {\code {getgrouplist}}{748}
17557 -\entry {\code {getgroups}}{745}
17558 -\entry {\code {gethostbyaddr}}{414}
17559 -\entry {\code {gethostbyaddr_r}}{415}
17560 -\entry {\code {gethostbyname}}{414}
17561 -\entry {\code {gethostbyname_r}}{415}
17562 -\entry {\code {gethostbyname2}}{414}
17563 -\entry {\code {gethostbyname2_r}}{415}
17564 -\entry {\code {gethostent}}{416}
17565 -\entry {\code {gethostid}}{772}
17566 -\entry {\code {gethostname}}{771}
17567 -\entry {\code {getitimer}}{579}
17568 -\entry {\code {getline}}{245}
17569 -\entry {\code {getloadavg}}{600}
17570 -\entry {\code {getlogin}}{753}
17571 -\entry {\code {getmntent}}{779}
17572 -\entry {\code {getmntent_r}}{780}
17573 -\entry {\code {getnetbyaddr}}{444}
17574 -\entry {\code {getnetbyname}}{443}
17575 -\entry {\code {getnetent}}{444}
17576 -\entry {\code {getnetgrent}}{768}
17577 -\entry {\code {getnetgrent_r}}{769}
17578 -\entry {\code {getopt}}{659}
17579 -\entry {\code {getopt_long}}{663}
17580 -\entry {\code {getopt_long_only}}{663}
17581 -\entry {\code {getpagesize}}{599}
17582 -\entry {\code {getpass}}{810}
17583 -\entry {\code {getpeername}}{427}
17584 -\entry {\code {getpgid}}{729}
17585 -\entry {\code {getpgrp}}{729}
17586 -\entry {\code {getpid}}{702}
17587 -\entry {\code {getppid}}{702}
17588 -\entry {\code {getpriority}}{597}
17589 -\entry {\code {getprotobyname}}{420}
17590 -\entry {\code {getprotobynumber}}{420}
17591 -\entry {\code {getprotoent}}{420}
17592 -\entry {\code {getpt}}{468}
17593 -\entry {\code {getpwent}}{763}
17594 -\entry {\code {getpwent_r}}{763}
17595 -\entry {\code {getpwnam}}{762}
17596 -\entry {\code {getpwnam_r}}{762}
17597 -\entry {\code {getpwuid}}{762}
17598 -\entry {\code {getpwuid_r}}{762}
17599 -\entry {\code {getrlimit}}{586}
17600 -\entry {\code {getrlimit64}}{586}
17601 -\entry {\code {getrusage}}{583}
17602 -\entry {\code {gets}}{247}
17603 -\entry {\code {getservbyname}}{417}
17604 -\entry {\code {getservbyport}}{418}
17605 -\entry {\code {getservent}}{418}
17606 -\entry {\code {getsid}}{729}
17607 -\entry {\code {getsockname}}{403}
17608 -\entry {\code {getsockopt}}{441}
17609 -\entry {\code {getsubopt}}{689}
17610 -\entry {\code {gettext}}{181}
17611 -\entry {\code {gettimeofday}}{555}
17612 -\entry {\code {getuid}}{745}
17613 -\entry {\code {getumask}}{381}
17614 -\entry {\code {getutent}}{755}
17615 -\entry {\code {getutent_r}}{757}
17616 -\entry {\code {getutid}}{756}
17617 -\entry {\code {getutid_r}}{757}
17618 -\entry {\code {getutline}}{756}
17619 -\entry {\code {getutline_r}}{757}
17620 -\entry {\code {getutmp}}{760}
17621 -\entry {\code {getutmpx}}{760}
17622 -\entry {\code {getutxent}}{759}
17623 -\entry {\code {getutxid}}{759}
17624 -\entry {\code {getutxline}}{760}
17625 -\entry {\code {getw}}{245}
17626 -\entry {\code {getwc}}{244}
17627 -\entry {\code {getwc_unlocked}}{244}
17628 -\entry {\code {getwchar}}{244}
17629 -\entry {\code {getwchar_unlocked}}{244}
17630 -\entry {\code {getwd}}{352}
17631 -\entry {\code {glob}}{209}
17632 -\entry {\code {glob64}}{209}
17633 -\entry {\code {globfree}}{213}
17634 -\entry {\code {globfree64}}{213}
17635 -\entry {\code {gmtime}}{558}
17636 -\entry {\code {gmtime_r}}{558}
17637 -\entry {\code {grantpt}}{468}
17638 -\entry {\code {gsignal}}{639}
17639 -\entry {\code {gtty}}{464}
17640 -\initial {H}
17641 -\entry {\code {hasmntopt}}{780}
17642 -\entry {\code {hcreate}}{199}
17643 -\entry {\code {hcreate_r}}{201}
17644 -\entry {\code {hdestroy}}{200}
17645 -\entry {\code {hdestroy_r}}{201}
17646 -\entry {\code {hsearch}}{200}
17647 -\entry {\code {hsearch_r}}{201}
17648 -\entry {\code {htonl}}{419}
17649 -\entry {\code {htons}}{418}
17650 -\entry {\code {hypot}}{485}
17651 -\entry {\code {hypotf}}{485}
17652 -\entry {\code {hypotl}}{485}
17653 -\initial {I}
17654 -\entry {\code {iconv}}{134}
17655 -\entry {\code {iconv_close}}{133}
17656 -\entry {\code {iconv_open}}{132}
17657 -\entry {\code {if_freenameindex}}{405}
17658 -\entry {\code {if_indextoname}}{404}
17659 -\entry {\code {if_nameindex}}{405}
17660 -\entry {\code {if_nametoindex}}{404}
17661 -\entry {\code {IFTODT}}{354}
17662 -\entry {\code {ilogb}}{484}
17663 -\entry {\code {ilogbf}}{484}
17664 -\entry {\code {ilogbl}}{484}
17665 -\entry {\code {imaxabs}}{531}
17666 -\entry {\code {imaxdiv}}{520}
17667 -\entry {\code {index}}{100}
17668 -\entry {\code {inet_addr}}{412}
17669 -\entry {\code {inet_aton}}{412}
17670 -\entry {\code {inet_lnaof}}{412}
17671 -\entry {\code {inet_makeaddr}}{412}
17672 -\entry {\code {inet_netof}}{412}
17673 -\entry {\code {inet_network}}{412}
17674 -\entry {\code {inet_ntoa}}{412}
17675 -\entry {\code {inet_ntop}}{413}
17676 -\entry {\code {inet_pton}}{412}
17677 -\entry {\code {initgroups}}{748}
17678 -\entry {\code {initstate}}{509}
17679 -\entry {\code {initstate_r}}{510}
17680 -\entry {\code {innetgr}}{769}
17681 -\entry {\code {ioctl}}{349}
17682 -\entry {\code {isalnum}}{68}
17683 -\entry {\code {isalpha}}{67}
17684 -\entry {\code {isascii}}{68}
17685 -\entry {\code {isatty}}{445}
17686 -\entry {\code {isblank}}{68}
17687 -\entry {\code {iscntrl}}{68}
17688 -\entry {\code {isdigit}}{68}
17689 -\entry {\code {isfinite}}{521}
17690 -\entry {\code {isgraph}}{68}
17691 -\entry {\code {isgreater}}{536}
17692 -\entry {\code {isgreaterequal}}{536}
17693 -\entry {\code {isinf}}{521}
17694 -\entry {\code {isinff}}{521}
17695 -\entry {\code {isinfl}}{521}
17696 -\entry {\code {isless}}{536}
17697 -\entry {\code {islessequal}}{537}
17698 -\entry {\code {islessgreater}}{537}
17699 -\entry {\code {islower}}{67}
17700 -\entry {\code {isnan}}{521, 522}
17701 -\entry {\code {isnanf}}{522}
17702 -\entry {\code {isnanl}}{522}
17703 -\entry {\code {isnormal}}{521}
17704 -\entry {\code {isprint}}{68}
17705 -\entry {\code {ispunct}}{68}
17706 -\entry {\code {isspace}}{68}
17707 -\entry {\code {isunordered}}{537}
17708 -\entry {\code {isupper}}{67}
17709 -\entry {\code {iswalnum}}{70}
17710 -\entry {\code {iswalpha}}{70}
17711 -\entry {\code {iswblank}}{72}
17712 -\entry {\code {iswcntrl}}{71}
17713 -\entry {\code {iswctype}}{70}
17714 -\entry {\code {iswdigit}}{71}
17715 -\entry {\code {iswgraph}}{71}
17716 -\entry {\code {iswlower}}{71}
17717 -\entry {\code {iswprint}}{71}
17718 -\entry {\code {iswpunct}}{72}
17719 -\entry {\code {iswspace}}{72}
17720 -\entry {\code {iswupper}}{72}
17721 -\entry {\code {iswxdigit}}{72}
17722 -\entry {\code {isxdigit}}{68}
17723 -\initial {J}
17724 -\entry {\code {j0}}{489}
17725 -\entry {\code {j0f}}{489}
17726 -\entry {\code {j0l}}{489}
17727 -\entry {\code {j1}}{489}
17728 -\entry {\code {j1f}}{489}
17729 -\entry {\code {j1l}}{489}
17730 -\entry {\code {jn}}{489}
17731 -\entry {\code {jnf}}{489}
17732 -\entry {\code {jnl}}{489}
17733 -\entry {\code {jrand48}}{512}
17734 -\entry {\code {jrand48_r}}{514}
17735 -\initial {K}
17736 -\entry {\code {kill}}{640}
17737 -\entry {\code {killpg}}{641}
17738 -\initial {L}
17739 -\entry {\code {l64a}}{105}
17740 -\entry {\code {labs}}{531}
17741 -\entry {\code {lcong48}}{512}
17742 -\entry {\code {lcong48_r}}{515}
17743 -\entry {\code {ldexp}}{532}
17744 -\entry {\code {ldexpf}}{532}
17745 -\entry {\code {ldexpl}}{532}
17746 -\entry {\code {ldiv}}{519}
17747 -\entry {\code {lfind}}{195}
17748 -\entry {\code {lgamma}}{488}
17749 -\entry {\code {lgamma_r}}{489}
17750 -\entry {\code {lgammaf}}{488}
17751 -\entry {\code {lgammaf_r}}{489}
17752 -\entry {\code {lgammal}}{488}
17753 -\entry {\code {lgammal_r}}{489}
17754 -\entry {\code {link}}{364}
17755 -\entry {\code {lio_listio}}{330}
17756 -\entry {\code {lio_listio64}}{331}
17757 -\entry {\code {listen}}{425}
17758 -\entry {\code {llabs}}{531}
17759 -\entry {\code {lldiv}}{519}
17760 -\entry {\code {llrint}}{533}
17761 -\entry {\code {llrintf}}{534}
17762 -\entry {\code {llrintl}}{534}
17763 -\entry {\code {llround}}{534}
17764 -\entry {\code {llroundf}}{534}
17765 -\entry {\code {llroundl}}{534}
17766 -\entry {\code {localeconv}}{158}
17767 -\entry {\code {localtime}}{557}
17768 -\entry {\code {localtime_r}}{558}
17769 -\entry {\code {log}}{483}
17770 -\entry {\code {log10}}{483}
17771 -\entry {\code {log10f}}{483}
17772 -\entry {\code {log10l}}{483}
17773 -\entry {\code {log1p}}{485}
17774 -\entry {\code {log1pf}}{485}
17775 -\entry {\code {log1pl}}{485}
17776 -\entry {\code {log2}}{483}
17777 -\entry {\code {log2f}}{483}
17778 -\entry {\code {log2l}}{483}
17779 -\entry {\code {logb}}{483}
17780 -\entry {\code {logbf}}{484}
17781 -\entry {\code {logbl}}{484}
17782 -\entry {\code {logf}}{483}
17783 -\entry {\code {login}}{760}
17784 -\entry {\code {login_tty}}{760}
17785 -\entry {\code {logl}}{483}
17786 -\entry {\code {logout}}{761}
17787 -\entry {\code {logwtmp}}{761}
17788 -\entry {\code {longjmp}}{602}
17789 -\entry {\code {lrand48}}{511}
17790 -\entry {\code {lrand48_r}}{513}
17791 -\entry {\code {lrint}}{533}
17792 -\entry {\code {lrintf}}{533}
17793 -\entry {\code {lrintl}}{533}
17794 -\entry {\code {lround}}{534}
17795 -\entry {\code {lroundf}}{534}
17796 -\entry {\code {lroundl}}{534}
17797 -\entry {\code {lsearch}}{196}
17798 -\entry {\code {lseek}}{310}
17799 -\entry {\code {lseek64}}{311}
17800 -\entry {\code {lstat}}{375}
17801 -\entry {\code {lstat64}}{375}
17802 -\entry {\code {lutimes}}{385}
17803 -\initial {M}
17804 -\entry {\code {madvise}}{320}
17805 -\entry {\code {main}}{657}
17806 -\entry {\code {makecontext}}{605}
17807 -\entry {\code {mallinfo}}{44}
17808 -\entry {\code {malloc}}{34}
17809 -\entry {\code {mallopt}}{39}
17810 -\entry {\code {matherr}}{522}
17811 -\entry {\code {mblen}}{129}
17812 -\entry {\code {mbrlen}}{120}
17813 -\entry {\code {mbrtowc}}{119}
17814 -\entry {\code {mbsinit}}{117}
17815 -\entry {\code {mbsnrtowcs}}{125}
17816 -\entry {\code {mbsrtowcs}}{123}
17817 -\entry {\code {mbstowcs}}{129}
17818 -\entry {\code {mbtowc}}{128}
17819 -\entry {\code {mcheck}}{39}
17820 -\entry {\code {memalign}}{38}
17821 -\entry {\code {memccpy}}{81}
17822 -\entry {\code {memchr}}{96}
17823 -\entry {\code {memcmp}}{89}
17824 -\entry {\code {memcpy}}{79}
17825 -\entry {\code {memfrob}}{105}
17826 -\entry {\code {memmem}}{99}
17827 -\entry {\code {memmove}}{80}
17828 -\entry {\code {mempcpy}}{80}
17829 -\entry {\code {memrchr}}{97}
17830 -\entry {\code {memset}}{81}
17831 -\entry {\code {mkdir}}{369}
17832 -\entry {\code {mkdtemp}}{391}
17833 -\entry {\code {mkfifo}}{396}
17834 -\entry {\code {mknod}}{388}
17835 -\entry {\code {mkstemp}}{391}
17836 -\entry {\code {mktemp}}{390}
17837 -\entry {\code {mktime}}{558}
17838 -\entry {\code {mlock}}{64}
17839 -\entry {\code {mlockall}}{64}
17840 -\entry {\code {mmap}}{317}
17841 -\entry {\code {mmap64}}{318}
17842 -\entry {\code {modf}}{534}
17843 -\entry {\code {modff}}{534}
17844 -\entry {\code {modfl}}{534}
17845 -\entry {\code {mount}}{781}
17846 -\entry {\code {mprobe}}{40}
17847 -\entry {\code {mrand48}}{511}
17848 -\entry {\code {mrand48_r}}{514}
17849 -\entry {\code {mremap}}{319}
17850 -\entry {\code {msync}}{319}
17851 -\entry {\code {mtrace}}{45}
17852 -\entry {\code {munlock}}{64}
17853 -\entry {\code {munlockall}}{65}
17854 -\entry {\code {munmap}}{318}
17855 -\entry {\code {muntrace}}{46}
17856 -\initial {N}
17857 -\entry {\code {nan}}{536}
17858 -\entry {\code {nanf}}{536}
17859 -\entry {\code {nanl}}{536}
17860 -\entry {\code {nanosleep}}{581}
17861 -\entry {\code {nearbyint}}{533}
17862 -\entry {\code {nearbyintf}}{533}
17863 -\entry {\code {nearbyintl}}{533}
17864 -\entry {\code {nextafter}}{535}
17865 -\entry {\code {nextafterf}}{535}
17866 -\entry {\code {nextafterl}}{535}
17867 -\entry {\code {nexttoward}}{536}
17868 -\entry {\code {nexttowardf}}{536}
17869 -\entry {\code {nexttowardl}}{536}
17870 -\entry {\code {nftw}}{362}
17871 -\entry {\code {nftw64}}{363}
17872 -\entry {\code {ngettext}}{186}
17873 -\entry {\code {nice}}{597}
17874 -\entry {\code {nl_langinfo}}{161}
17875 -\entry {\code {notfound}}{735}
17876 -\entry {\code {nrand48}}{511}
17877 -\entry {\code {nrand48_r}}{513}
17878 -\entry {\code {ntohl}}{419}
17879 -\entry {\code {ntohs}}{419}
17880 -\entry {\code {ntp_adjtime}}{561}
17881 -\entry {\code {ntp_gettime}}{559}
17882 -\initial {O}
17883 -\entry {\code {obstack_1grow}}{54}
17884 -\entry {\code {obstack_1grow_fast}}{55}
17885 -\entry {\code {obstack_alignment_mask}}{57}
17886 -\entry {\code {obstack_alloc}}{51}
17887 -\entry {\code {obstack_base}}{56}
17888 -\entry {\code {obstack_blank}}{53}
17889 -\entry {\code {obstack_blank_fast}}{55}
17890 -\entry {\code {obstack_chunk_alloc}}{50}
17891 -\entry {\code {obstack_chunk_free}}{50}
17892 -\entry {\code {obstack_chunk_size}}{57}
17893 -\entry {\code {obstack_copy}}{51}
17894 -\entry {\code {obstack_copy0}}{52}
17895 -\entry {\code {obstack_finish}}{54}
17896 -\entry {\code {obstack_free}}{52}
17897 -\entry {\code {obstack_grow}}{53}
17898 -\entry {\code {obstack_grow0}}{54}
17899 -\entry {\code {obstack_init}}{50}
17900 -\entry {\code {obstack_int_grow}}{54}
17901 -\entry {\code {obstack_int_grow_fast}}{55}
17902 -\entry {\code {obstack_next_free}}{56}
17903 -\entry {\code {obstack_object_size}}{54, 56}
17904 -\entry {\code {obstack_printf}}{261}
17905 -\entry {\code {obstack_ptr_grow}}{54}
17906 -\entry {\code {obstack_ptr_grow_fast}}{55}
17907 -\entry {\code {obstack_room}}{55}
17908 -\entry {\code {obstack_vprintf}}{263}
17909 -\entry {\code {offsetof}}{857}
17910 -\entry {\code {on_exit}}{698}
17911 -\entry {\code {open}}{303}
17912 -\entry {\code {open_memstream}}{293}
17913 -\entry {\code {open_obstack_stream}}{294}
17914 -\entry {\code {open64}}{304}
17915 -\entry {\code {opendir}}{354}
17916 -\entry {\code {openlog}}{472}
17917 -\entry {\code {openpty}}{470}
17918 -\initial {P}
17919 -\entry {\code {parse_printf_format}}{264}
17920 -\entry {\code {pathconf}}{802}
17921 -\entry {\code {pause}}{650}
17922 -\entry {\code {pclose}}{395}
17923 -\entry {\code {perror}}{26}
17924 -\entry {\code {pipe}}{393}
17925 -\entry {\code {popen}}{395}
17926 -\entry {\code {posix_memalign}}{38}
17927 -\entry {\code {pow}}{484}
17928 -\entry {\code {pow10}}{483}
17929 -\entry {\code {pow10f}}{483}
17930 -\entry {\code {pow10l}}{483}
17931 -\entry {\code {powf}}{484}
17932 -\entry {\code {powl}}{484}
17933 -\entry {\code {pread}}{307}
17934 -\entry {\code {pread64}}{307}
17935 -\entry {\code {printf}}{259}
17936 -\entry {\code {printf_size}}{271}
17937 -\entry {\code {printf_size_info}}{271}
17938 -\entry {\code {psignal}}{621}
17939 -\entry {\code {pthread_atfork}}{836}
17940 -\entry {\code {pthread_attr_destroy}}{821}
17941 -\entry {\code {pthread_attr_getattr}}{821}
17942 -\entry {\code {pthread_attr_getdetachstate}}{821}
17943 -\entry {\code {pthread_attr_getguardsize}}{821}
17944 -\entry {\code {pthread_attr_getinheritsched}}{821}
17945 -\entry {\code {pthread_attr_getschedparam}}{821}
17946 -\entry {\code {pthread_attr_getschedpolicy}}{821}
17947 -\entry {\code {pthread_attr_getscope}}{821}
17948 -\entry {\code {pthread_attr_getstack}}{821}
17949 -\entry {\code {pthread_attr_getstackaddr}}{821}
17950 -\entry {\code {pthread_attr_getstacksize}}{821}
17951 -\entry {\code {pthread_attr_init}}{820}
17952 -\entry {\code {pthread_attr_setattr}}{821}
17953 -\entry {\code {pthread_attr_setdetachstate}}{821}
17954 -\entry {\code {pthread_attr_setguardsize}}{821}
17955 -\entry {\code {pthread_attr_setinheritsched}}{821}
17956 -\entry {\code {pthread_attr_setschedparam}}{821}
17957 -\entry {\code {pthread_attr_setschedpolicy}}{821}
17958 -\entry {\code {pthread_attr_setscope}}{821}
17959 -\entry {\code {pthread_attr_setstack}}{821}
17960 -\entry {\code {pthread_attr_setstackaddr}}{821}
17961 -\entry {\code {pthread_attr_setstacksize}}{821}
17962 -\entry {\code {pthread_cancel}}{819}
17963 -\entry {\code {pthread_cleanup_pop}}{825}
17964 -\entry {\code {pthread_cleanup_pop_restore_np}}{825}
17965 -\entry {\code {pthread_cleanup_push}}{825}
17966 -\entry {\code {pthread_cleanup_push_defer_np}}{825}
17967 -\entry {\code {pthread_cond_broadcast}}{829}
17968 -\entry {\code {pthread_cond_destroy}}{830}
17969 -\entry {\code {pthread_cond_init}}{829}
17970 -\entry {\code {pthread_cond_signal}}{829}
17971 -\entry {\code {pthread_cond_timedwait}}{830}
17972 -\entry {\code {pthread_cond_wait}}{829}
17973 -\entry {\code {pthread_condattr_destroy}}{831}
17974 -\entry {\code {pthread_condattr_init}}{831}
17975 -\entry {\code {pthread_create}}{819}
17976 -\entry {\code {pthread_detach}}{838}
17977 -\entry {\code {pthread_equal}}{838}
17978 -\entry {\code {pthread_exit}}{819}
17979 -\entry {\code {pthread_getconcurrency}}{840}
17980 -\entry {\code {pthread_getschedparam}}{839}
17981 -\entry {\code {pthread_getspecific}}{834}
17982 -\entry {\code {pthread_join}}{820}
17983 -\entry {\code {pthread_key_create}}{833}
17984 -\entry {\code {pthread_key_delete}}{833}
17985 -\entry {\code {pthread_kill}}{835}
17986 -\entry {\code {pthread_kill_other_threads_np}}{838}
17987 -\entry {\code {pthread_mutex_destroy}}{827}
17988 -\entry {\code {pthread_mutex_init}}{826}
17989 -\entry {\code {pthread_mutex_lock}}{826}
17990 -\entry {\code {pthread_mutex_timedlock}}{827}
17991 -\entry {\code {pthread_mutex_trylock}}{827}
17992 -\entry {\code {pthread_mutex_unlock}}{827}
17993 -\entry {\code {pthread_mutexattr_destroy}}{828}
17994 -\entry {\code {pthread_mutexattr_gettype}}{829}
17995 -\entry {\code {pthread_mutexattr_init}}{828}
17996 -\entry {\code {pthread_mutexattr_settype}}{828}
17997 -\entry {\code {pthread_once}}{839}
17998 -\entry {\code {pthread_self}}{838}
17999 -\entry {\code {pthread_setcancelstate}}{823}
18000 -\entry {\code {pthread_setcanceltype}}{823}
18001 -\entry {\code {pthread_setconcurrency}}{840}
18002 -\entry {\code {pthread_setschedparam}}{839}
18003 -\entry {\code {pthread_setspecific}}{834}
18004 -\entry {\code {pthread_sigmask}}{834}
18005 -\entry {\code {pthread_testcancel}}{824}
18006 -\entry {\code {ptsname}}{469}
18007 -\entry {\code {ptsname_r}}{469}
18008 -\entry {\code {putc}}{241}
18009 -\entry {\code {putc_unlocked}}{242}
18010 -\entry {\code {putchar}}{242}
18011 -\entry {\code {putchar_unlocked}}{242}
18012 -\entry {\code {putenv}}{692}
18013 -\entry {\code {putpwent}}{763}
18014 -\entry {\code {puts}}{243}
18015 -\entry {\code {pututline}}{756}
18016 -\entry {\code {pututxline}}{760}
18017 -\entry {\code {putw}}{243}
18018 -\entry {\code {putwc}}{242}
18019 -\entry {\code {putwc_unlocked}}{242}
18020 -\entry {\code {putwchar}}{242}
18021 -\entry {\code {putwchar_unlocked}}{242}
18022 -\entry {\code {pwrite}}{309}
18023 -\entry {\code {pwrite64}}{310}
18024 -\initial {Q}
18025 -\entry {\code {qecvt}}{546}
18026 -\entry {\code {qecvt_r}}{547}
18027 -\entry {\code {qfcvt}}{546}
18028 -\entry {\code {qfcvt_r}}{547}
18029 -\entry {\code {qgcvt}}{546}
18030 -\entry {\code {qsort}}{196}
18031 -\initial {R}
18032 -\entry {\code {raise}}{639}
18033 -\entry {\code {rand}}{508}
18034 -\entry {\code {rand_r}}{509}
18035 -\entry {\code {random}}{509}
18036 -\entry {\code {random_r}}{510}
18037 -\entry {\code {rawmemchr}}{96}
18038 -\entry {\code {read}}{306}
18039 -\entry {\code {readdir}}{355}
18040 -\entry {\code {readdir_r}}{355}
18041 -\entry {\code {readdir64}}{356}
18042 -\entry {\code {readdir64_r}}{356}
18043 -\entry {\code {readlink}}{365}
18044 -\entry {\code {readv}}{316}
18045 -\entry {\code {realloc}}{36}
18046 -\entry {\code {realpath}}{367}
18047 -\entry {\code {recv}}{429}
18048 -\entry {\code {recvfrom}}{436}
18049 -\entry {\code {regcomp}}{214}
18050 -\entry {\code {regerror}}{218}
18051 -\entry {\code {regexec}}{216}
18052 -\entry {\code {regfree}}{218}
18053 -\entry {\code {register_printf_function}}{267}
18054 -\entry {\code {remainder}}{535}
18055 -\entry {\code {remainderf}}{535}
18056 -\entry {\code {remainderl}}{535}
18057 -\entry {\code {remove}}{368}
18058 -\entry {\code {rename}}{368}
18059 -\entry {\code {rewind}}{286}
18060 -\entry {\code {rewinddir}}{357}
18061 -\entry {\code {rindex}}{100}
18062 -\entry {\code {rint}}{533}
18063 -\entry {\code {rintf}}{533}
18064 -\entry {\code {rintl}}{533}
18065 -\entry {\code {rmdir}}{368}
18066 -\entry {\code {round}}{533}
18067 -\entry {\code {roundf}}{533}
18068 -\entry {\code {roundl}}{533}
18069 -\entry {\code {rpmatch}}{170}
18070 -\initial {S}
18071 -\entry {\code {S_ISBLK}}{376}
18072 -\entry {\code {S_ISCHR}}{376}
18073 -\entry {\code {S_ISDIR}}{376}
18074 -\entry {\code {S_ISFIFO}}{376}
18075 -\entry {\code {S_ISLNK}}{376}
18076 -\entry {\code {S_ISREG}}{376}
18077 -\entry {\code {S_ISSOCK}}{376}
18078 -\entry {\code {S_TYPEISMQ}}{377}
18079 -\entry {\code {S_TYPEISSEM}}{377}
18080 -\entry {\code {S_TYPEISSHM}}{377}
18081 -\entry {\code {sbrk}}{62}
18082 -\entry {\code {scalb}}{532}
18083 -\entry {\code {scalbf}}{532}
18084 -\entry {\code {scalbl}}{532}
18085 -\entry {\code {scalbln}}{532}
18086 -\entry {\code {scalblnf}}{532}
18087 -\entry {\code {scalblnl}}{532}
18088 -\entry {\code {scalbn}}{532}
18089 -\entry {\code {scalbnf}}{532}
18090 -\entry {\code {scalbnl}}{532}
18091 -\entry {\code {scandir}}{358}
18092 -\entry {\code {scandir64}}{358}
18093 -\entry {\code {scanf}}{279}
18094 -\entry {\code {sched_get_priority_max}}{594}
18095 -\entry {\code {sched_get_priority_min}}{594}
18096 -\entry {\code {sched_getparam}}{594}
18097 -\entry {\code {sched_getscheduler}}{593}
18098 -\entry {\code {sched_rr_get_interval}}{594}
18099 -\entry {\code {sched_setparam}}{594}
18100 -\entry {\code {sched_setscheduler}}{593}
18101 -\entry {\code {sched_yield}}{594}
18102 -\entry {\code {seed48}}{512}
18103 -\entry {\code {seed48_r}}{514}
18104 -\entry {\code {seekdir}}{357}
18105 -\entry {\code {select}}{322}
18106 -\entry {\code {sem_destroy}}{832}
18107 -\entry {\code {sem_getvalue}}{833}
18108 -\entry {\code {sem_init}}{832}
18109 -\entry {\code {sem_post}}{832}
18110 -\entry {\code {sem_trywait}}{832}
18111 -\entry {\code {sem_wait}}{832}
18112 -\entry {\code {send}}{428}
18113 -\entry {\code {sendto}}{436}
18114 -\entry {\code {setbuf}}{291}
18115 -\entry {\code {setbuffer}}{291}
18116 -\entry {\code {setcontext}}{605}
18117 -\entry {\code {setdomainname}}{772}
18118 -\entry {\code {setegid}}{747}
18119 -\entry {\code {setenv}}{692}
18120 -\entry {\code {seteuid}}{746}
18121 -\entry {\code {setfsent}}{776}
18122 -\entry {\code {setgid}}{747}
18123 -\entry {\code {setgrent}}{766}
18124 -\entry {\code {setgroups}}{748}
18125 -\entry {\code {sethostent}}{416}
18126 -\entry {\code {sethostid}}{773}
18127 -\entry {\code {sethostname}}{772}
18128 -\entry {\code {setitimer}}{579}
18129 -\entry {\code {setjmp}}{602}
18130 -\entry {\code {setkey}}{813}
18131 -\entry {\code {setkey_r}}{813}
18132 -\entry {\code {setlinebuf}}{291}
18133 -\entry {\code {setlocale}}{155}
18134 -\entry {\code {setlogmask}}{477}
18135 -\entry {\code {setmntent}}{779}
18136 -\entry {\code {setnetent}}{444}
18137 -\entry {\code {setnetgrent}}{768}
18138 -\entry {\code {setpgid}}{729}
18139 -\entry {\code {setpgrp}}{730}
18140 -\entry {\code {setpriority}}{597}
18141 -\entry {\code {setprotoent}}{420}
18142 -\entry {\code {setpwent}}{763}
18143 -\entry {\code {setregid}}{747}
18144 -\entry {\code {setreuid}}{746}
18145 -\entry {\code {setrlimit}}{586}
18146 -\entry {\code {setrlimit64}}{586}
18147 -\entry {\code {setservent}}{418}
18148 -\entry {\code {setsid}}{728}
18149 -\entry {\code {setsockopt}}{441}
18150 -\entry {\code {setstate}}{509}
18151 -\entry {\code {setstate_r}}{510}
18152 -\entry {\code {settimeofday}}{555}
18153 -\entry {\code {setuid}}{746}
18154 -\entry {\code {setutent}}{755}
18155 -\entry {\code {setutxent}}{759}
18156 -\entry {\code {setvbuf}}{290}
18157 -\entry {\code {shutdown}}{422}
18158 -\entry {\code {sigaction}}{625}
18159 -\entry {\code {sigaddset}}{644}
18160 -\entry {\code {sigaltstack}}{653}
18161 -\entry {\code {sigblock}}{655}
18162 -\entry {\code {sigdelset}}{644}
18163 -\entry {\code {sigemptyset}}{644}
18164 -\entry {\code {sigfillset}}{644}
18165 -\entry {\code {siginterrupt}}{655}
18166 -\entry {\code {sigismember}}{645}
18167 -\entry {\code {siglongjmp}}{604}
18168 -\entry {\code {sigmask}}{655}
18169 -\entry {\code {signal}}{622}
18170 -\entry {\code {signbit}}{535}
18171 -\entry {\code {significand}}{532}
18172 -\entry {\code {significandf}}{532}
18173 -\entry {\code {significandl}}{532}
18174 -\entry {\code {sigpause}}{656}
18175 -\entry {\code {sigpending}}{647}
18176 -\entry {\code {sigprocmask}}{645}
18177 -\entry {\code {sigsetjmp}}{603}
18178 -\entry {\code {sigsetmask}}{655}
18179 -\entry {\code {sigstack}}{653}
18180 -\entry {\code {sigsuspend}}{651}
18181 -\entry {\code {sigvec}}{655}
18182 -\entry {\code {sigwait}}{835}
18183 -\entry {\code {sin}}{480}
18184 -\entry {\code {sincos}}{480}
18185 -\entry {\code {sincosf}}{480}
18186 -\entry {\code {sincosl}}{480}
18187 -\entry {\code {sinf}}{480}
18188 -\entry {\code {sinh}}{486}
18189 -\entry {\code {sinhf}}{486}
18190 -\entry {\code {sinhl}}{486}
18191 -\entry {\code {sinl}}{480}
18192 -\entry {\code {sleep}}{580}
18193 -\entry {\code {snprintf}}{260}
18194 -\entry {\code {socket}}{422}
18195 -\entry {\code {socketpair}}{423}
18196 -\entry {\code {sprintf}}{259}
18197 -\entry {\code {sqrt}}{485}
18198 -\entry {\code {sqrtf}}{485}
18199 -\entry {\code {sqrtl}}{485}
18200 -\entry {\code {srand}}{508}
18201 -\entry {\code {srand48}}{512}
18202 -\entry {\code {srand48_r}}{514}
18203 -\entry {\code {srandom}}{509}
18204 -\entry {\code {srandom_r}}{510}
18205 -\entry {\code {sscanf}}{280}
18206 -\entry {\code {ssignal}}{624}
18207 -\entry {\code {stat}}{374}
18208 -\entry {\code {stat64}}{374}
18209 -\entry {\code {stime}}{554}
18210 -\entry {\code {stpcpy}}{83}
18211 -\entry {\code {stpncpy}}{83}
18212 -\entry {\code {strcasecmp}}{90}
18213 -\entry {\code {strcasestr}}{98}
18214 -\entry {\code {strcat}}{85}
18215 -\entry {\code {strchr}}{97}
18216 -\entry {\code {strchrnul}}{97}
18217 -\entry {\code {strcmp}}{90}
18218 -\entry {\code {strcoll}}{93}
18219 -\entry {\code {strcpy}}{81}
18220 -\entry {\code {strcspn}}{99}
18221 -\entry {\code {strdup}}{82}
18222 -\entry {\code {strdupa}}{84}
18223 -\entry {\code {strerror}}{26}
18224 -\entry {\code {strerror_r}}{26}
18225 -\entry {\code {strfmon}}{167}
18226 -\entry {\code {strfry}}{105}
18227 -\entry {\code {strftime}}{563}
18228 -\entry {\code {strlen}}{77}
18229 -\entry {\code {strncasecmp}}{91}
18230 -\entry {\code {strncat}}{87}
18231 -\entry {\code {strncmp}}{91}
18232 -\entry {\code {strncpy}}{81}
18233 -\entry {\code {strndup}}{82}
18234 -\entry {\code {strndupa}}{85}
18235 -\entry {\code {strnlen}}{78}
18236 -\entry {\code {strpbrk}}{99}
18237 -\entry {\code {strptime}}{567}
18238 -\entry {\code {strrchr}}{98}
18239 -\entry {\code {strsep}}{102}
18240 -\entry {\code {strsignal}}{621}
18241 -\entry {\code {strspn}}{99}
18242 -\entry {\code {strstr}}{98}
18243 -\entry {\code {strtod}}{544}
18244 -\entry {\code {strtof}}{545}
18245 -\entry {\code {strtoimax}}{542}
18246 -\entry {\code {strtok}}{100}
18247 -\entry {\code {strtok_r}}{102}
18248 -\entry {\code {strtol}}{540}
18249 -\entry {\code {strtold}}{545}
18250 -\entry {\code {strtoll}}{541}
18251 -\entry {\code {strtoq}}{541}
18252 -\entry {\code {strtoul}}{541}
18253 -\entry {\code {strtoull}}{542}
18254 -\entry {\code {strtoumax}}{542}
18255 -\entry {\code {strtouq}}{542}
18256 -\entry {\code {strverscmp}}{91}
18257 -\entry {\code {strxfrm}}{93}
18258 -\entry {\code {stty}}{464}
18259 -\entry {\code {success}}{735}
18260 -\entry {\code {SUN_LEN}}{406}
18261 -\entry {\code {swapcontext}}{606}
18262 -\entry {\code {swprintf}}{259}
18263 -\entry {\code {swscanf}}{280}
18264 -\entry {\code {symlink}}{365}
18265 -\entry {\code {sync}}{323}
18266 -\entry {\code {syscall}}{695}
18267 -\entry {\code {sysconf}}{790}
18268 -\entry {\code {sysctl}}{784}
18269 -\entry {\code {syslog}}{474}
18270 -\entry {\code {system}}{701}
18271 -\entry {\code {sysv_signal}}{624}
18272 -\initial {T}
18273 -\entry {\code {tan}}{480}
18274 -\entry {\code {tanf}}{480}
18275 -\entry {\code {tanh}}{487}
18276 -\entry {\code {tanhf}}{487}
18277 -\entry {\code {tanhl}}{487}
18278 -\entry {\code {tanl}}{480}
18279 -\entry {\code {tcdrain}}{465}
18280 -\entry {\code {tcflow}}{466}
18281 -\entry {\code {tcflush}}{465}
18282 -\entry {\code {tcgetattr}}{448}
18283 -\entry {\code {tcgetpgrp}}{730}
18284 -\entry {\code {tcgetsid}}{731}
18285 -\entry {\code {tcsendbreak}}{465}
18286 -\entry {\code {tcsetattr}}{448}
18287 -\entry {\code {tcsetpgrp}}{730}
18288 -\entry {\code {tdelete}}{202}
18289 -\entry {\code {tdestroy}}{203}
18290 -\entry {\code {telldir}}{357}
18291 -\entry {\code {TEMP_FAILURE_RETRY}}{638}
18292 -\entry {\code {tempnam}}{390}
18293 -\entry {\code {textdomain}}{184}
18294 -\entry {\code {tfind}}{202}
18295 -\entry {\code {tgamma}}{489}
18296 -\entry {\code {tgammaf}}{489}
18297 -\entry {\code {tgammal}}{489}
18298 -\entry {\code {time}}{554}
18299 -\entry {\code {timegm}}{559}
18300 -\entry {\code {timelocal}}{558}
18301 -\entry {\code {times}}{553}
18302 -\entry {\code {tmpfile}}{389}
18303 -\entry {\code {tmpfile64}}{389}
18304 -\entry {\code {tmpnam}}{389}
18305 -\entry {\code {tmpnam_r}}{389}
18306 -\entry {\code {toascii}}{69}
18307 -\entry {\code {tolower}}{69}
18308 -\entry {\code {toupper}}{69}
18309 -\entry {\code {towctrans}}{74}
18310 -\entry {\code {towlower}}{74}
18311 -\entry {\code {towupper}}{74}
18312 -\entry {\code {trunc}}{533}
18313 -\entry {\code {truncate}}{386}
18314 -\entry {\code {truncate64}}{386}
18315 -\entry {\code {truncf}}{533}
18316 -\entry {\code {truncl}}{533}
18317 -\entry {\code {tryagain}}{735}
18318 -\entry {\code {tsearch}}{202}
18319 -\entry {\code {ttyname}}{445}
18320 -\entry {\code {ttyname_r}}{445}
18321 -\entry {\code {twalk}}{203}
18322 -\entry {\code {tzset}}{577}
18323 -\initial {U}
18324 -\entry {\code {ulimit}}{588}
18325 -\entry {\code {umask}}{381}
18326 -\entry {\code {umount}}{784}
18327 -\entry {\code {umount2}}{783}
18328 -\entry {\code {uname}}{774}
18329 -\entry {\code {unavail}}{735}
18330 -\entry {\code {ungetc}}{248}
18331 -\entry {\code {ungetwc}}{248}
18332 -\entry {\code {unlink}}{367}
18333 -\entry {\code {unlockpt}}{469}
18334 -\entry {\code {unsetenv}}{692}
18335 -\entry {\code {updwtmp}}{758}
18336 -\entry {\code {utime}}{384}
18337 -\entry {\code {utimes}}{385}
18338 -\entry {\code {utmpname}}{757}
18339 -\entry {\code {utmpxname}}{760}
18340 -\initial {V}
18341 -\entry {\code {va_alist}}{848}
18342 -\entry {\code {va_arg}}{846}
18343 -\entry {\code {va_dcl}}{848}
18344 -\entry {\code {va_end}}{846}
18345 -\entry {\code {va_start}}{846, 848}
18346 -\entry {\code {valloc}}{38}
18347 -\entry {\code {vasprintf}}{263}
18348 -\entry {\code {verr}}{30}
18349 -\entry {\code {verrx}}{30}
18350 -\entry {\code {versionsort}}{358}
18351 -\entry {\code {versionsort64}}{359}
18352 -\entry {\code {vfork}}{703}
18353 -\entry {\code {vfprintf}}{262}
18354 -\entry {\code {vfscanf}}{281}
18355 -\entry {\code {vfwprintf}}{262}
18356 -\entry {\code {vfwscanf}}{281}
18357 -\entry {\code {vlimit}}{588}
18358 -\entry {\code {vprintf}}{262}
18359 -\entry {\code {vscanf}}{281}
18360 -\entry {\code {vsnprintf}}{263}
18361 -\entry {\code {vsprintf}}{262}
18362 -\entry {\code {vsscanf}}{281}
18363 -\entry {\code {vswprintf}}{262}
18364 -\entry {\code {vswscanf}}{281}
18365 -\entry {\code {vsyslog}}{476}
18366 -\entry {\code {vtimes}}{584}
18367 -\entry {\code {vwarn}}{30}
18368 -\entry {\code {vwarnx}}{30}
18369 -\entry {\code {vwprintf}}{262}
18370 -\entry {\code {vwscanf}}{281}
18371 -\initial {W}
18372 -\entry {\code {wait}}{708}
18373 -\entry {\code {wait3}}{710}
18374 -\entry {\code {wait4}}{708}
18375 -\entry {\code {waitpid}}{706}
18376 -\entry {\code {warn}}{30}
18377 -\entry {\code {warnx}}{30}
18378 -\entry {\code {WCOREDUMP}}{709}
18379 -\entry {\code {wcpcpy}}{83}
18380 -\entry {\code {wcpncpy}}{84}
18381 -\entry {\code {wcrtomb}}{121}
18382 -\entry {\code {wcscasecmp}}{90}
18383 -\entry {\code {wcscat}}{85}
18384 -\entry {\code {wcschr}}{97}
18385 -\entry {\code {wcschrnul}}{97}
18386 -\entry {\code {wcscmp}}{90}
18387 -\entry {\code {wcscoll}}{93}
18388 -\entry {\code {wcscpy}}{81}
18389 -\entry {\code {wcscspn}}{99}
18390 -\entry {\code {wcsdup}}{82}
18391 -\entry {\code {wcsftime}}{567}
18392 -\entry {\code {wcslen}}{78}
18393 -\entry {\code {wcsncasecmp}}{91}
18394 -\entry {\code {wcsncat}}{88}
18395 -\entry {\code {wcsncmp}}{91}
18396 -\entry {\code {wcsncpy}}{82}
18397 -\entry {\code {wcsnlen}}{79}
18398 -\entry {\code {wcsnrtombs}}{126}
18399 -\entry {\code {wcspbrk}}{100}
18400 -\entry {\code {wcsrchr}}{98}
18401 -\entry {\code {wcsrtombs}}{124}
18402 -\entry {\code {wcsspn}}{99}
18403 -\entry {\code {wcsstr}}{98}
18404 -\entry {\code {wcstod}}{545}
18405 -\entry {\code {wcstof}}{545}
18406 -\entry {\code {wcstoimax}}{542}
18407 -\entry {\code {wcstok}}{101}
18408 -\entry {\code {wcstol}}{540}
18409 -\entry {\code {wcstold}}{545}
18410 -\entry {\code {wcstoll}}{541}
18411 -\entry {\code {wcstombs}}{130}
18412 -\entry {\code {wcstoq}}{541}
18413 -\entry {\code {wcstoul}}{541}
18414 -\entry {\code {wcstoull}}{542}
18415 -\entry {\code {wcstoumax}}{543}
18416 -\entry {\code {wcstouq}}{542}
18417 -\entry {\code {wcswcs}}{98}
18418 -\entry {\code {wcsxfrm}}{94}
18419 -\entry {\code {wctob}}{118}
18420 -\entry {\code {wctomb}}{128}
18421 -\entry {\code {wctrans}}{74}
18422 -\entry {\code {wctype}}{70}
18423 -\entry {\code {WEXITSTATUS}}{709}
18424 -\entry {\code {WIFEXITED}}{709}
18425 -\entry {\code {WIFSIGNALED}}{709}
18426 -\entry {\code {WIFSTOPPED}}{709}
18427 -\entry {\code {wmemchr}}{96}
18428 -\entry {\code {wmemcmp}}{89}
18429 -\entry {\code {wmemcpy}}{79}
18430 -\entry {\code {wmemmove}}{81}
18431 -\entry {\code {wmempcpy}}{80}
18432 -\entry {\code {wmemset}}{81}
18433 -\entry {\code {wordexp}}{220}
18434 -\entry {\code {wordfree}}{220}
18435 -\entry {\code {wprintf}}{259}
18436 -\entry {\code {write}}{308}
18437 -\entry {\code {writev}}{316}
18438 -\entry {\code {wscanf}}{280}
18439 -\entry {\code {WSTOPSIG}}{709}
18440 -\entry {\code {WTERMSIG}}{709}
18441 -\initial {Y}
18442 -\entry {\code {y0}}{489}
18443 -\entry {\code {y0f}}{489}
18444 -\entry {\code {y0l}}{489}
18445 -\entry {\code {y1}}{490}
18446 -\entry {\code {y1f}}{490}
18447 -\entry {\code {y1l}}{490}
18448 -\entry {\code {yn}}{490}
18449 -\entry {\code {ynf}}{490}
18450 -\entry {\code {ynl}}{490}
18451 diff -u -udbrN glibc-2.3.2/manual/libc.info glibc-2.3.2-200304020432/manual/libc.info
18452 --- glibc-2.3.2/manual/libc.info Sat Mar 1 02:39:41 2003
18453 +++ glibc-2.3.2-200304020432/manual/libc.info Thu Jan 1 01:00:00 1970
18454 @@ -1,818 +0,0 @@
18455 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
18457 -INFO-DIR-SECTION GNU libraries
18458 -START-INFO-DIR-ENTRY
18459 -* Libc: (libc). C library.
18460 -END-INFO-DIR-ENTRY
18462 - This file documents the GNU C library.
18464 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
18465 -Reference Manual', for Version 2.3.x.
18467 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
18468 -Free Software Foundation, Inc.
18470 - Permission is granted to copy, distribute and/or modify this document
18471 -under the terms of the GNU Free Documentation License, Version 1.1 or
18472 -any later version published by the Free Software Foundation; with the
18473 -Invariant Sections being "Free Software Needs Free Documentation" and
18474 -"GNU Lesser General Public License", the Front-Cover texts being (a)
18475 -(see below), and with the Back-Cover Texts being (b) (see below). A
18476 -copy of the license is included in the section entitled "GNU Free
18477 -Documentation License".
18479 - (a) The FSF's Front-Cover Text is:
18481 - A GNU Manual
18483 - (b) The FSF's Back-Cover Text is:
18485 - You have freedom to copy and modify this GNU Manual, like GNU
18486 -software. Copies published by the Free Software Foundation raise
18487 -funds for GNU development.
18489 -\x1f
18490 -Indirect:
18491 -libc.info-1: 1208
18492 -libc.info-2: 61500
18493 -libc.info-3: 106626
18494 -libc.info-4: 156304
18495 -libc.info-5: 204142
18496 -libc.info-6: 247102
18497 -libc.info-7: 274125
18498 -libc.info-8: 319933
18499 -libc.info-9: 362805
18500 -libc.info-10: 410708
18501 -libc.info-11: 449597
18502 -libc.info-12: 496858
18503 -libc.info-13: 542519
18504 -libc.info-14: 584236
18505 -libc.info-15: 631323
18506 -libc.info-16: 681323
18507 -libc.info-17: 729210
18508 -libc.info-18: 778205
18509 -libc.info-19: 826920
18510 -libc.info-20: 875904
18511 -libc.info-21: 921832
18512 -libc.info-22: 963157
18513 -libc.info-23: 1009947
18514 -libc.info-24: 1059652
18515 -libc.info-25: 1107740
18516 -libc.info-26: 1153966
18517 -libc.info-27: 1203098
18518 -libc.info-28: 1252422
18519 -libc.info-29: 1302337
18520 -libc.info-30: 1350282
18521 -libc.info-31: 1398920
18522 -libc.info-32: 1429462
18523 -libc.info-33: 1486890
18524 -libc.info-34: 1536598
18525 -libc.info-35: 1584002
18526 -libc.info-36: 1631783
18527 -libc.info-37: 1679171
18528 -libc.info-38: 1728663
18529 -libc.info-39: 1774227
18530 -libc.info-40: 1823654
18531 -libc.info-41: 1870981
18532 -libc.info-42: 1920590
18533 -libc.info-43: 1965086
18534 -libc.info-44: 2014650
18535 -libc.info-45: 2060853
18536 -libc.info-46: 2110146
18537 -libc.info-47: 2158781
18538 -libc.info-48: 2201155
18539 -libc.info-49: 2251135
18540 -libc.info-50: 2297731
18541 -libc.info-51: 2347537
18542 -libc.info-52: 2394418
18543 -libc.info-53: 2407546
18544 -libc.info-54: 2617154
18545 -libc.info-55: 2662663
18546 -libc.info-56: 2703000
18547 -libc.info-57: 2722877
18548 -libc.info-58: 2786467
18549 -libc.info-59: 2794244
18550 -libc.info-60: 2876496
18551 -libc.info-61: 2941243
18552 -\x1f
18553 -Tag Table:
18554 -(Indirect)
18555 -Node: Top\x7f1208
18556 -Node: Introduction\x7f61500
18557 -Node: Getting Started\x7f62849
18558 -Node: Standards and Portability\x7f64308
18559 -Node: ISO C\x7f65756
18560 -Node: POSIX\x7f67273
18561 -Node: Berkeley Unix\x7f69010
18562 -Node: SVID\x7f69774
18563 -Node: XPG\x7f70774
18564 -Node: Using the Library\x7f71715
18565 -Node: Header Files\x7f72438
18566 -Node: Macro Definitions\x7f76389
18567 -Node: Reserved Names\x7f78734
18568 -Node: Feature Test Macros\x7f83430
18569 -Node: Roadmap to the Manual\x7f94214
18570 -Node: Error Reporting\x7f101498
18571 -Node: Checking for Errors\x7f102415
18572 -Node: Error Codes\x7f106626
18573 -Node: Error Messages\x7f125922
18574 -Node: Memory\x7f140254
18575 -Node: Memory Concepts\x7f141111
18576 -Node: Memory Allocation\x7f146779
18577 -Node: Memory Allocation and C\x7f147668
18578 -Node: Unconstrained Allocation\x7f151217
18579 -Node: Basic Allocation\x7f152637
18580 -Node: Malloc Examples\x7f154337
18581 -Node: Freeing after Malloc\x7f156304
18582 -Node: Changing Block Size\x7f158119
18583 -Node: Allocating Cleared Space\x7f160722
18584 -Node: Efficiency and Malloc\x7f161730
18585 -Node: Aligned Memory Blocks\x7f162829
18586 -Node: Malloc Tunable Parameters\x7f165041
18587 -Node: Heap Consistency Checking\x7f166798
18588 -Node: Hooks for Malloc\x7f171898
18589 -Node: Statistics of Malloc\x7f178094
18590 -Node: Summary of Malloc\x7f180052
18591 -Node: Allocation Debugging\x7f182214
18592 -Node: Tracing malloc\x7f183317
18593 -Node: Using the Memory Debugger\x7f185167
18594 -Node: Tips for the Memory Debugger\x7f187052
18595 -Node: Interpreting the traces\x7f188380
18596 -Node: Obstacks\x7f191915
18597 -Node: Creating Obstacks\x7f193529
18598 -Node: Preparing for Obstacks\x7f195428
18599 -Node: Allocation in an Obstack\x7f198171
18600 -Node: Freeing Obstack Objects\x7f200578
18601 -Node: Obstack Functions\x7f201912
18602 -Node: Growing Objects\x7f204142
18603 -Node: Extra Fast Growing\x7f208387
18604 -Node: Status of an Obstack\x7f212006
18605 -Node: Obstacks Data Alignment\x7f213425
18606 -Node: Obstack Chunks\x7f215111
18607 -Node: Summary of Obstacks\x7f217466
18608 -Node: Variable Size Automatic\x7f220880
18609 -Node: Alloca Example\x7f222406
18610 -Node: Advantages of Alloca\x7f223527
18611 -Node: Disadvantages of Alloca\x7f225414
18612 -Node: GNU C Variable-Size Arrays\x7f226157
18613 -Node: Resizing the Data Segment\x7f227315
18614 -Node: Locking Pages\x7f229403
18615 -Node: Why Lock Pages\x7f230165
18616 -Node: Locked Memory Details\x7f231793
18617 -Node: Page Lock Functions\x7f234049
18618 -Node: Character Handling\x7f239913
18619 -Node: Classification of Characters\x7f241368
18620 -Node: Case Conversion\x7f245212
18621 -Node: Classification of Wide Characters\x7f247102
18622 -Node: Using Wide Char Classes\x7f254802
18623 -Node: Wide Character Case Conversion\x7f257113
18624 -Node: String and Array Utilities\x7f259806
18625 -Node: Representation of Strings\x7f261870
18626 -Node: String/Array Conventions\x7f267392
18627 -Node: String Length\x7f270326
18628 -Node: Copying and Concatenation\x7f274125
18629 -Node: String/Array Comparison\x7f299586
18630 -Node: Collation Functions\x7f309728
18631 -Node: Search Functions\x7f319933
18632 -Node: Finding Tokens in a String\x7f332053
18633 -Node: strfry\x7f344252
18634 -Node: Trivial Encryption\x7f345282
18635 -Node: Encode Binary Data\x7f346740
18636 -Node: Argz and Envz Vectors\x7f351442
18637 -Node: Argz Functions\x7f352042
18638 -Node: Envz Functions\x7f358603
18639 -Node: Character Set Handling\x7f361653
18640 -Node: Extended Char Intro\x7f362805
18641 -Node: Charset Function Overview\x7f375910
18642 -Node: Restartable multibyte conversion\x7f376873
18643 -Node: Selecting the Conversion\x7f378983
18644 -Node: Keeping the state\x7f381372
18645 -Node: Converting a Character\x7f384586
18646 -Node: Converting Strings\x7f400592
18647 -Node: Multibyte Conversion Example\x7f410708
18648 -Node: Non-reentrant Conversion\x7f413695
18649 -Node: Non-reentrant Character Conversion\x7f415379
18650 -Node: Non-reentrant String Conversion\x7f420079
18651 -Node: Shift State\x7f423077
18652 -Node: Generic Charset Conversion\x7f425740
18653 -Node: Generic Conversion Interface\x7f428922
18654 -Node: iconv Examples\x7f438863
18655 -Node: Other iconv Implementations\x7f444207
18656 -Node: glibc iconv Implementation\x7f449597
18657 -Node: Locales\x7f489334
18658 -Node: Effects of Locale\x7f491003
18659 -Node: Choosing Locale\x7f492967
18660 -Node: Locale Categories\x7f494341
18661 -Node: Setting the Locale\x7f496858
18662 -Node: Standard Locales\x7f501410
18663 -Node: Locale Information\x7f502699
18664 -Node: The Lame Way to Locale Data\x7f504415
18665 -Node: General Numeric\x7f506286
18666 -Node: Currency Symbol\x7f509265
18667 -Node: Sign of Money Amount\x7f513453
18668 -Node: The Elegant and Fast Way\x7f515583
18669 -Node: Formatting Numbers\x7f527719
18670 -Node: Yes-or-No Questions\x7f537139
18671 -Node: Message Translation\x7f539175
18672 -Node: Message catalogs a la X/Open\x7f541221
18673 -Node: The catgets Functions\x7f542519
18674 -Node: The message catalog files\x7f551540
18675 -Node: The gencat program\x7f558289
18676 -Node: Common Usage\x7f561423
18677 -Node: The Uniforum approach\x7f568549
18678 -Node: Message catalogs with gettext\x7f570043
18679 -Node: Translation with gettext\x7f571078
18680 -Node: Locating gettext catalog\x7f577373
18681 -Node: Advanced gettext functions\x7f584236
18682 -Ref: Advanced gettext functions-Footnote-1\x7f594353
18683 -Node: Charset conversion in gettext\x7f594445
18684 -Node: GUI program problems\x7f596934
18685 -Node: Using gettextized software\x7f602468
18686 -Node: Helper programs for gettext\x7f610780
18687 -Node: Searching and Sorting\x7f612544
18688 -Node: Comparison Functions\x7f613459
18689 -Node: Array Search Function\x7f614676
18690 -Node: Array Sort Function\x7f618020
18691 -Node: Search/Sort Example\x7f620151
18692 -Node: Hash Search Function\x7f623642
18693 -Node: Tree Search Function\x7f631323
18694 -Node: Pattern Matching\x7f638317
18695 -Node: Wildcard Matching\x7f639119
18696 -Node: Globbing\x7f643057
18697 -Node: Calling Glob\x7f643921
18698 -Node: Flags for Globbing\x7f653903
18699 -Node: More Flags for Globbing\x7f657433
18700 -Node: Regular Expressions\x7f663565
18701 -Node: POSIX Regexp Compilation\x7f664549
18702 -Node: Flags for POSIX Regexps\x7f668664
18703 -Node: Matching POSIX Regexps\x7f669571
18704 -Node: Regexp Subexpressions\x7f671732
18705 -Node: Subexpression Complications\x7f673786
18706 -Node: Regexp Cleanup\x7f676149
18707 -Node: Word Expansion\x7f678475
18708 -Node: Expansion Stages\x7f679830
18709 -Node: Calling Wordexp\x7f681323
18710 -Node: Flags for Wordexp\x7f685286
18711 -Node: Wordexp Example\x7f687239
18712 -Node: Tilde Expansion\x7f689050
18713 -Node: Variable Substitution\x7f690122
18714 -Node: I/O Overview\x7f694247
18715 -Node: I/O Concepts\x7f695761
18716 -Node: Streams and File Descriptors\x7f696906
18717 -Node: File Position\x7f699993
18718 -Node: File Names\x7f702125
18719 -Node: Directories\x7f703011
18720 -Node: File Name Resolution\x7f704748
18721 -Node: File Name Errors\x7f707676
18722 -Node: File Name Portability\x7f709216
18723 -Node: I/O on Streams\x7f711208
18724 -Node: Streams\x7f713430
18725 -Node: Standard Streams\x7f714771
18726 -Node: Opening Streams\x7f716555
18727 -Node: Closing Streams\x7f726658
18728 -Node: Streams and Threads\x7f729210
18729 -Node: Streams and I18N\x7f738236
18730 -Node: Simple Output\x7f744399
18731 -Node: Character Input\x7f749749
18732 -Node: Line Input\x7f754995
18733 -Node: Unreading\x7f761675
18734 -Node: Unreading Idea\x7f762484
18735 -Node: How Unread\x7f763310
18736 -Node: Block Input/Output\x7f766074
18737 -Node: Formatted Output\x7f768852
18738 -Node: Formatted Output Basics\x7f770619
18739 -Node: Output Conversion Syntax\x7f773112
18740 -Node: Table of Output Conversions\x7f778205
18741 -Node: Integer Conversions\x7f781211
18742 -Node: Floating-Point Conversions\x7f786752
18743 -Node: Other Output Conversions\x7f792586
18744 -Node: Formatted Output Functions\x7f796392
18745 -Node: Dynamic Output\x7f802374
18746 -Node: Variable Arguments Output\x7f804230
18747 -Node: Parsing a Template String\x7f810411
18748 -Node: Example of Parsing\x7f814242
18749 -Node: Customizing Printf\x7f816530
18750 -Node: Registering New Conversions\x7f818449
18751 -Node: Conversion Specifier Options\x7f820622
18752 -Node: Defining the Output Handler\x7f824459
18753 -Node: Printf Extension Example\x7f826920
18754 -Node: Predefined Printf Handlers\x7f829329
18755 -Node: Formatted Input\x7f832740
18756 -Node: Formatted Input Basics\x7f833819
18757 -Node: Input Conversion Syntax\x7f836511
18758 -Node: Table of Input Conversions\x7f839873
18759 -Node: Numeric Input Conversions\x7f844043
18760 -Node: String Input Conversions\x7f848498
18761 -Node: Dynamic String Input\x7f853618
18762 -Node: Other Input Conversions\x7f854808
18763 -Node: Formatted Input Functions\x7f856453
18764 -Node: Variable Arguments Input\x7f859294
18765 -Node: EOF and Errors\x7f861649
18766 -Node: Error Recovery\x7f864563
18767 -Node: Binary Streams\x7f866349
18768 -Node: File Positioning\x7f868873
18769 -Node: Portable Positioning\x7f875904
18770 -Node: Stream Buffering\x7f881593
18771 -Node: Buffering Concepts\x7f883192
18772 -Node: Flushing Buffers\x7f884555
18773 -Node: Controlling Buffering\x7f887662
18774 -Node: Other Kinds of Streams\x7f893267
18775 -Node: String Streams\x7f894556
18776 -Node: Obstack Streams\x7f898692
18777 -Node: Custom Streams\x7f900735
18778 -Node: Streams and Cookies\x7f901452
18779 -Node: Hook Functions\x7f904522
18780 -Node: Formatted Messages\x7f906908
18781 -Node: Printing Formatted Messages\x7f907573
18782 -Node: Adding Severity Classes\x7f914013
18783 -Node: Example\x7f915620
18784 -Node: Low-Level I/O\x7f918824
18785 -Node: Opening and Closing Files\x7f921832
18786 -Node: I/O Primitives\x7f929804
18787 -Node: File Position Primitive\x7f943900
18788 -Node: Descriptors and Streams\x7f951213
18789 -Node: Stream/Descriptor Precautions\x7f953897
18790 -Node: Linked Channels\x7f955103
18791 -Node: Independent Channels\x7f956364
18792 -Node: Cleaning Streams\x7f958267
18793 -Node: Scatter-Gather\x7f960567
18794 -Node: Memory-mapped I/O\x7f963157
18795 -Node: Waiting for I/O\x7f974620
18796 -Node: Synchronizing I/O\x7f982401
18797 -Node: Asynchronous I/O\x7f985849
18798 -Node: Asynchronous Reads/Writes\x7f993909
18799 -Node: Status of AIO Operations\x7f1006378
18800 -Node: Synchronizing AIO Operations\x7f1009947
18801 -Node: Cancel AIO Operations\x7f1016377
18802 -Node: Configuration of AIO\x7f1019868
18803 -Node: Control Operations\x7f1022062
18804 -Node: Duplicating Descriptors\x7f1024753
18805 -Node: Descriptor Flags\x7f1029009
18806 -Node: File Status Flags\x7f1032413
18807 -Node: Access Modes\x7f1033866
18808 -Node: Open-time Flags\x7f1036162
18809 -Node: Operating Modes\x7f1040878
18810 -Node: Getting File Status Flags\x7f1043643
18811 -Node: File Locks\x7f1046250
18812 -Node: Interrupt Input\x7f1055145
18813 -Node: IOCTLs\x7f1057575
18814 -Ref: IOCTLs-Footnote-1\x7f1059555
18815 -Node: File System Interface\x7f1059652
18816 -Node: Working Directory\x7f1061181
18817 -Node: Accessing Directories\x7f1066192
18818 -Node: Directory Entries\x7f1067619
18819 -Node: Opening a Directory\x7f1070873
18820 -Node: Reading/Closing Directory\x7f1073316
18821 -Node: Simple Directory Lister\x7f1077818
18822 -Node: Random Access Directory\x7f1078813
18823 -Node: Scanning Directory Content\x7f1080315
18824 -Node: Simple Directory Lister Mark II\x7f1084770
18825 -Node: Working with Directory Trees\x7f1085879
18826 -Node: Hard Links\x7f1097422
18827 -Node: Symbolic Links\x7f1100220
18828 -Node: Deleting Files\x7f1107740
18829 -Node: Renaming Files\x7f1110658
18830 -Node: Creating Directories\x7f1114262
18831 -Node: File Attributes\x7f1116014
18832 -Node: Attribute Meanings\x7f1117538
18833 -Node: Reading Attributes\x7f1126760
18834 -Node: Testing File Type\x7f1130830
18835 -Node: File Owner\x7f1134986
18836 -Node: Permission Bits\x7f1138638
18837 -Node: Access Permission\x7f1143956
18838 -Node: Setting Permissions\x7f1145098
18839 -Node: Testing File Access\x7f1150304
18840 -Node: File Times\x7f1153966
18841 -Node: File Size\x7f1160352
18842 -Node: Making Special Files\x7f1166775
18843 -Node: Temporary Files\x7f1168451
18844 -Node: Pipes and FIFOs\x7f1177671
18845 -Node: Creating a Pipe\x7f1179254
18846 -Node: Pipe to a Subprocess\x7f1182547
18847 -Node: FIFO Special Files\x7f1185554
18848 -Node: Pipe Atomicity\x7f1187126
18849 -Node: Sockets\x7f1188009
18850 -Node: Socket Concepts\x7f1190049
18851 -Node: Communication Styles\x7f1194289
18852 -Node: Socket Addresses\x7f1196139
18853 -Node: Address Formats\x7f1198175
18854 -Node: Setting Address\x7f1201376
18855 -Node: Reading Address\x7f1203098
18856 -Node: Interface Naming\x7f1204859
18857 -Node: Local Namespace\x7f1207266
18858 -Node: Local Namespace Concepts\x7f1207926
18859 -Node: Local Namespace Details\x7f1209443
18860 -Node: Local Socket Example\x7f1211390
18861 -Node: Internet Namespace\x7f1212898
18862 -Node: Internet Address Formats\x7f1215121
18863 -Node: Host Addresses\x7f1217272
18864 -Node: Abstract Host Addresses\x7f1218440
18865 -Node: Host Address Data Type\x7f1222957
18866 -Node: Host Address Functions\x7f1226080
18867 -Node: Host Names\x7f1230432
18868 -Node: Ports\x7f1239701
18869 -Node: Services Database\x7f1241739
18870 -Node: Byte Order\x7f1244562
18871 -Node: Protocols Database\x7f1246870
18872 -Node: Inet Example\x7f1250412
18873 -Node: Misc Namespaces\x7f1252422
18874 -Node: Open/Close Sockets\x7f1253168
18875 -Node: Creating a Socket\x7f1253666
18876 -Node: Closing a Socket\x7f1255346
18877 -Node: Socket Pairs\x7f1256872
18878 -Node: Connections\x7f1258881
18879 -Node: Connecting\x7f1259975
18880 -Node: Listening\x7f1262802
18881 -Node: Accepting Connections\x7f1264875
18882 -Node: Who is Connected\x7f1268006
18883 -Node: Transferring Data\x7f1269105
18884 -Node: Sending Data\x7f1270210
18885 -Node: Receiving Data\x7f1272728
18886 -Node: Socket Data Options\x7f1274464
18887 -Node: Byte Stream Example\x7f1275327
18888 -Node: Server Example\x7f1277384
18889 -Node: Out-of-Band Data\x7f1281400
18890 -Node: Datagrams\x7f1287311
18891 -Node: Sending Datagrams\x7f1288340
18892 -Node: Receiving Datagrams\x7f1290265
18893 -Node: Datagram Example\x7f1292331
18894 -Node: Example Receiver\x7f1294345
18895 -Node: Inetd\x7f1296909
18896 -Node: Inetd Servers\x7f1297718
18897 -Node: Configuring Inetd\x7f1298960
18898 -Node: Socket Options\x7f1301629
18899 -Node: Socket Option Functions\x7f1302337
18900 -Node: Socket-Level Options\x7f1303894
18901 -Node: Networks Database\x7f1307523
18902 -Node: Low-Level Terminal Interface\x7f1310407
18903 -Node: Is It a Terminal\x7f1311877
18904 -Node: I/O Queues\x7f1313780
18905 -Node: Canonical or Not\x7f1315737
18906 -Node: Terminal Modes\x7f1317583
18907 -Node: Mode Data Types\x7f1319152
18908 -Node: Mode Functions\x7f1320980
18909 -Node: Setting Modes\x7f1324912
18910 -Node: Input Modes\x7f1326911
18911 -Node: Output Modes\x7f1332177
18912 -Node: Control Modes\x7f1333789
18913 -Node: Local Modes\x7f1337878
18914 -Node: Line Speed\x7f1344191
18915 -Node: Special Characters\x7f1348368
18916 -Node: Editing Characters\x7f1350282
18917 -Node: Signal Characters\x7f1354622
18918 -Node: Start/Stop Characters\x7f1357488
18919 -Node: Other Special\x7f1359358
18920 -Node: Noncanonical Input\x7f1361172
18921 -Node: BSD Terminal Modes\x7f1365986
18922 -Node: Line Control\x7f1367458
18923 -Node: Noncanon Example\x7f1372176
18924 -Node: Pseudo-Terminals\x7f1374403
18925 -Node: Allocation\x7f1375315
18926 -Node: Pseudo-Terminal Pairs\x7f1380102
18927 -Node: Syslog\x7f1382618
18928 -Node: Overview of Syslog\x7f1383567
18929 -Node: Submitting Syslog Messages\x7f1387751
18930 -Node: openlog\x7f1388569
18931 -Node: syslog; vsyslog\x7f1393583
18932 -Node: closelog\x7f1397780
18933 -Node: setlogmask\x7f1398920
18934 -Node: Syslog Example\x7f1400763
18935 -Node: Mathematics\x7f1401426
18936 -Node: Mathematical Constants\x7f1403148
18937 -Node: Trig Functions\x7f1405155
18938 -Node: Inverse Trig Functions\x7f1408890
18939 -Node: Exponents and Logarithms\x7f1412692
18940 -Node: Hyperbolic Functions\x7f1420884
18941 -Node: Special Functions\x7f1424924
18942 -Node: Errors in Math Functions\x7f1429462
18943 -Node: Pseudo-Random Numbers\x7f1486890
18944 -Node: ISO Random\x7f1489131
18945 -Node: BSD Random\x7f1491063
18946 -Node: SVID Random\x7f1495645
18947 -Node: FP Function Optimizations\x7f1508895
18948 -Node: Arithmetic\x7f1510982
18949 -Node: Integers\x7f1512261
18950 -Node: Integer Division\x7f1515277
18951 -Node: Floating Point Numbers\x7f1518962
18952 -Node: Floating Point Classes\x7f1520704
18953 -Node: Floating Point Errors\x7f1524525
18954 -Node: FP Exceptions\x7f1525022
18955 -Node: Infinity and NaN\x7f1529383
18956 -Node: Status bit operations\x7f1532456
18957 -Node: Math Error Reporting\x7f1536598
18958 -Node: Rounding\x7f1538924
18959 -Node: Control Functions\x7f1542512
18960 -Node: Arithmetic Functions\x7f1547334
18961 -Node: Absolute Value\x7f1548202
18962 -Node: Normalization Functions\x7f1550262
18963 -Node: Rounding Functions\x7f1553563
18964 -Node: Remainder Functions\x7f1557945
18965 -Node: FP Bit Twiddling\x7f1560089
18966 -Node: FP Comparison Functions\x7f1563201
18967 -Node: Misc FP Arithmetic\x7f1565914
18968 -Node: Complex Numbers\x7f1568656
18969 -Node: Operations on Complex\x7f1570361
18970 -Node: Parsing of Numbers\x7f1572705
18971 -Node: Parsing of Integers\x7f1573397
18972 -Node: Parsing of Floats\x7f1584002
18973 -Node: System V Number Conversion\x7f1589168
18974 -Node: Date and Time\x7f1594484
18975 -Node: Time Basics\x7f1595214
18976 -Node: Elapsed Time\x7f1597094
18977 -Node: Processor And CPU Time\x7f1600646
18978 -Node: CPU Time\x7f1602517
18979 -Node: Processor Time\x7f1604290
18980 -Node: Calendar Time\x7f1606690
18981 -Node: Simple Calendar Time\x7f1608623
18982 -Node: High-Resolution Calendar\x7f1611027
18983 -Node: Broken-down Time\x7f1616388
18984 -Node: High Accuracy Clock\x7f1624347
18985 -Node: Formatting Calendar Time\x7f1631783
18986 -Node: Parsing Date and Time\x7f1647616
18987 -Node: Low-Level Time String Parsing\x7f1648459
18988 -Node: General Time String Parsing\x7f1662052
18989 -Node: TZ Variable\x7f1669180
18990 -Node: Time Zone Functions\x7f1675223
18991 -Node: Time Functions Example\x7f1678063
18992 -Node: Setting an Alarm\x7f1679171
18993 -Node: Sleeping\x7f1684931
18994 -Node: Resource Usage And Limitation\x7f1689534
18995 -Node: Resource Usage\x7f1690211
18996 -Node: Limits on Resources\x7f1695793
18997 -Node: Priority\x7f1705010
18998 -Node: Absolute Priority\x7f1707372
18999 -Node: Realtime Scheduling\x7f1712466
19000 -Node: Basic Scheduling Functions\x7f1715914
19001 -Node: Traditional Scheduling\x7f1723848
19002 -Node: Traditional Scheduling Intro\x7f1724400
19003 -Node: Traditional Scheduling Functions\x7f1728663
19004 -Node: Memory Resources\x7f1732550
19005 -Node: Memory Subsystem\x7f1733400
19006 -Node: Query Memory Parameters\x7f1735780
19007 -Node: Processor Resources\x7f1739427
19008 -Node: Non-Local Exits\x7f1741544
19009 -Node: Non-Local Intro\x7f1742254
19010 -Node: Non-Local Details\x7f1745985
19011 -Node: Non-Local Exits and Signals\x7f1749061
19012 -Node: System V contexts\x7f1750558
19013 -Node: Signal Handling\x7f1763520
19014 -Node: Concepts of Signals\x7f1765554
19015 -Node: Kinds of Signals\x7f1766118
19016 -Node: Signal Generation\x7f1767513
19017 -Node: Delivery of Signal\x7f1769780
19018 -Node: Standard Signals\x7f1772634
19019 -Node: Program Error Signals\x7f1774227
19020 -Node: Termination Signals\x7f1781685
19021 -Node: Alarm Signals\x7f1785523
19022 -Node: Asynchronous I/O Signals\x7f1786755
19023 -Node: Job Control Signals\x7f1787945
19024 -Node: Operation Error Signals\x7f1792545
19025 -Node: Miscellaneous Signals\x7f1794484
19026 -Node: Signal Messages\x7f1796178
19027 -Node: Signal Actions\x7f1798063
19028 -Node: Basic Signal Handling\x7f1799008
19029 -Node: Advanced Signal Handling\x7f1805075
19030 -Node: Signal and Sigaction\x7f1808049
19031 -Node: Sigaction Function Example\x7f1809801
19032 -Node: Flags for Sigaction\x7f1812117
19033 -Node: Initial Signal Actions\x7f1814495
19034 -Node: Defining Handlers\x7f1815876
19035 -Node: Handler Returns\x7f1818061
19036 -Node: Termination in Handler\x7f1820111
19037 -Node: Longjmp in Handler\x7f1821550
19038 -Node: Signals in Handler\x7f1823654
19039 -Node: Merged Signals\x7f1825774
19040 -Node: Nonreentrancy\x7f1831487
19041 -Node: Atomic Data Access\x7f1836893
19042 -Node: Non-atomic Example\x7f1837939
19043 -Node: Atomic Types\x7f1839716
19044 -Node: Atomic Usage\x7f1840735
19045 -Node: Interrupted Primitives\x7f1842205
19046 -Node: Generating Signals\x7f1845504
19047 -Node: Signaling Yourself\x7f1846097
19048 -Node: Signaling Another Process\x7f1848080
19049 -Node: Permission for kill\x7f1851456
19050 -Node: Kill Example\x7f1853252
19051 -Node: Blocking Signals\x7f1855604
19052 -Node: Why Block\x7f1857376
19053 -Node: Signal Sets\x7f1858912
19054 -Node: Process Signal Mask\x7f1861938
19055 -Node: Testing for Delivery\x7f1865292
19056 -Node: Blocking for Handler\x7f1866550
19057 -Node: Checking for Pending Signals\x7f1868969
19058 -Node: Remembering a Signal\x7f1870981
19059 -Node: Waiting for a Signal\x7f1874535
19060 -Node: Using Pause\x7f1875080
19061 -Node: Pause Problems\x7f1876705
19062 -Node: Sigsuspend\x7f1878429
19063 -Node: Signal Stack\x7f1881140
19064 -Node: BSD Signal Handling\x7f1886462
19065 -Node: BSD Handler\x7f1887736
19066 -Node: Blocking in BSD\x7f1890168
19067 -Node: Program Basics\x7f1891619
19068 -Node: Program Arguments\x7f1893603
19069 -Node: Argument Syntax\x7f1895602
19070 -Node: Parsing Program Arguments\x7f1898276
19071 -Node: Getopt\x7f1899379
19072 -Node: Using Getopt\x7f1900017
19073 -Node: Example of Getopt\x7f1904135
19074 -Node: Getopt Long Options\x7f1906873
19075 -Node: Getopt Long Option Example\x7f1912121
19076 -Node: Argp\x7f1915242
19077 -Node: Argp Global Variables\x7f1918558
19078 -Node: Argp Parsers\x7f1920590
19079 -Node: Argp Option Vectors\x7f1923964
19080 -Node: Argp Option Flags\x7f1927179
19081 -Node: Argp Parser Functions\x7f1929225
19082 -Node: Argp Special Keys\x7f1931917
19083 -Node: Argp Helper Functions\x7f1937203
19084 -Node: Argp Parsing State\x7f1940235
19085 -Node: Argp Children\x7f1943798
19086 -Node: Argp Flags\x7f1945880
19087 -Node: Argp Help Filtering\x7f1948157
19088 -Node: Argp Help Filter Keys\x7f1949392
19089 -Node: Argp Help\x7f1950305
19090 -Node: Argp Help Flags\x7f1951485
19091 -Node: Argp Examples\x7f1953835
19092 -Node: Argp Example 1\x7f1954305
19093 -Node: Argp Example 2\x7f1955105
19094 -Node: Argp Example 3\x7f1958046
19095 -Node: Argp Example 4\x7f1965086
19096 -Node: Argp User Customization\x7f1972835
19097 -Node: Suboptions\x7f1974563
19098 -Node: Suboptions Example\x7f1976505
19099 -Node: Environment Variables\x7f1978674
19100 -Node: Environment Access\x7f1980539
19101 -Node: Standard Environment\x7f1985459
19102 -Node: System Calls\x7f1989631
19103 -Node: Program Termination\x7f1993187
19104 -Node: Normal Termination\x7f1994396
19105 -Node: Exit Status\x7f1995793
19106 -Node: Cleanups on Exit\x7f1999152
19107 -Node: Aborting a Program\x7f2000969
19108 -Node: Termination Internals\x7f2001868
19109 -Node: Processes\x7f2004048
19110 -Node: Running a Command\x7f2006070
19111 -Node: Process Creation Concepts\x7f2008097
19112 -Node: Process Identification\x7f2010106
19113 -Node: Creating a Process\x7f2011030
19114 -Node: Executing a File\x7f2014650
19115 -Node: Process Completion\x7f2021785
19116 -Node: Process Completion Status\x7f2028055
19117 -Node: BSD Wait Functions\x7f2029698
19118 -Node: Process Creation Example\x7f2031566
19119 -Node: Job Control\x7f2033822
19120 -Node: Concepts of Job Control\x7f2035100
19121 -Node: Job Control is Optional\x7f2038454
19122 -Node: Controlling Terminal\x7f2039503
19123 -Node: Access to the Terminal\x7f2040410
19124 -Node: Orphaned Process Groups\x7f2042013
19125 -Node: Implementing a Shell\x7f2043004
19126 -Node: Data Structures\x7f2043887
19127 -Node: Initializing the Shell\x7f2046545
19128 -Node: Launching Jobs\x7f2050281
19129 -Node: Foreground and Background\x7f2057734
19130 -Node: Stopped and Terminated Jobs\x7f2060853
19131 -Node: Continuing Stopped Jobs\x7f2066063
19132 -Node: Missing Pieces\x7f2067695
19133 -Node: Functions for Job Control\x7f2069319
19134 -Node: Identifying the Terminal\x7f2069799
19135 -Node: Process Group Functions\x7f2071372
19136 -Node: Terminal Access Functions\x7f2076382
19137 -Node: Name Service Switch\x7f2079859
19138 -Node: NSS Basics\x7f2081190
19139 -Node: NSS Configuration File\x7f2082779
19140 -Node: Services in the NSS configuration\x7f2084477
19141 -Node: Actions in the NSS configuration\x7f2085758
19142 -Node: Notes on NSS Configuration File\x7f2088919
19143 -Node: NSS Module Internals\x7f2090796
19144 -Node: NSS Module Names\x7f2091492
19145 -Ref: NSS Module Names-Footnote-1\x7f2093533
19146 -Ref: NSS Module Names-Footnote-2\x7f2093687
19147 -Node: NSS Modules Interface\x7f2093865
19148 -Node: Extending NSS\x7f2098562
19149 -Node: Adding another Service to NSS\x7f2099493
19150 -Node: NSS Module Function Internals\x7f2101724
19151 -Node: Users and Groups\x7f2106627
19152 -Node: User and Group IDs\x7f2109238
19153 -Node: Process Persona\x7f2110146
19154 -Node: Why Change Persona\x7f2111831
19155 -Node: How Change Persona\x7f2113712
19156 -Node: Reading Persona\x7f2115599
19157 -Node: Setting User ID\x7f2117869
19158 -Node: Setting Groups\x7f2120732
19159 -Node: Enable/Disable Setuid\x7f2126415
19160 -Node: Setuid Program Example\x7f2128450
19161 -Node: Tips for Setuid\x7f2131924
19162 -Node: Who Logged In\x7f2134439
19163 -Node: User Accounting Database\x7f2136819
19164 -Node: Manipulating the Database\x7f2138003
19165 -Node: XPG Functions\x7f2150331
19166 -Node: Logging In and Out\x7f2154746
19167 -Node: User Database\x7f2156862
19168 -Node: User Data Structure\x7f2157524
19169 -Node: Lookup User\x7f2158781
19170 -Node: Scanning All Users\x7f2161345
19171 -Node: Writing a User Entry\x7f2164299
19172 -Node: Group Database\x7f2165198
19173 -Node: Group Data Structure\x7f2165774
19174 -Node: Lookup Group\x7f2166537
19175 -Node: Scanning All Groups\x7f2169038
19176 -Node: Database Example\x7f2172068
19177 -Node: Netgroup Database\x7f2174265
19178 -Node: Netgroup Data\x7f2174676
19179 -Node: Lookup Netgroup\x7f2176204
19180 -Node: Netgroup Membership\x7f2179622
19181 -Node: System Management\x7f2180952
19182 -Node: Host Identification\x7f2181883
19183 -Node: Platform Type\x7f2188362
19184 -Node: Filesystem Handling\x7f2191667
19185 -Node: Mount Information\x7f2193167
19186 -Node: fstab\x7f2195339
19187 -Node: mtab\x7f2201155
19188 -Node: Other Mount Information\x7f2210447
19189 -Node: Mount-Unmount-Remount\x7f2210961
19190 -Node: System Parameters\x7f2220984
19191 -Node: System Configuration\x7f2226517
19192 -Node: General Limits\x7f2228088
19193 -Node: System Options\x7f2231723
19194 -Node: Version Supported\x7f2235055
19195 -Node: Sysconf\x7f2236892
19196 -Node: Sysconf Definition\x7f2237528
19197 -Node: Constants for Sysconf\x7f2238200
19198 -Node: Examples of Sysconf\x7f2251135
19199 -Node: Minimums\x7f2252128
19200 -Node: Limits for Files\x7f2254839
19201 -Node: Options for Files\x7f2257840
19202 -Node: File Minimums\x7f2260133
19203 -Node: Pathconf\x7f2262353
19204 -Node: Utility Limits\x7f2265728
19205 -Node: Utility Minimums\x7f2267658
19206 -Node: String Parameters\x7f2269410
19207 -Node: Cryptographic Functions\x7f2273310
19208 -Node: Legal Problems\x7f2275283
19209 -Node: getpass\x7f2277559
19210 -Node: crypt\x7f2279729
19211 -Node: DES Encryption\x7f2284497
19212 -Node: Debugging Support\x7f2290699
19213 -Node: Backtraces\x7f2291341
19214 -Node: POSIX Threads\x7f2296128
19215 -Node: Basic Thread Operations\x7f2297731
19216 -Node: Thread Attributes\x7f2302313
19217 -Node: Cancellation\x7f2309270
19218 -Node: Cleanup Handlers\x7f2313163
19219 -Node: Mutexes\x7f2318300
19220 -Node: Condition Variables\x7f2327958
19221 -Node: POSIX Semaphores\x7f2335333
19222 -Node: Thread-Specific Data\x7f2339214
19223 -Node: Threads and Signal Handling\x7f2343847
19224 -Node: Threads and Fork\x7f2347537
19225 -Node: Streams and Fork\x7f2352799
19226 -Node: Miscellaneous Thread Functions\x7f2354961
19227 -Node: Language Features\x7f2361446
19228 -Node: Consistency Checking\x7f2362372
19229 -Node: Variadic Functions\x7f2366918
19230 -Node: Why Variadic\x7f2367990
19231 -Node: How Variadic\x7f2369954
19232 -Node: Variadic Prototypes\x7f2371243
19233 -Node: Receiving Arguments\x7f2372384
19234 -Node: How Many Arguments\x7f2375055
19235 -Node: Calling Variadics\x7f2376717
19236 -Node: Argument Macros\x7f2378817
19237 -Node: Variadic Example\x7f2381653
19238 -Node: Old Varargs\x7f2382805
19239 -Node: Null Pointer Constant\x7f2384480
19240 -Node: Important Data Types\x7f2385565
19241 -Node: Data Type Measurements\x7f2388129
19242 -Node: Width of Type\x7f2388986
19243 -Node: Range of Type\x7f2389892
19244 -Node: Floating Type Macros\x7f2393160
19245 -Node: Floating Point Concepts\x7f2394418
19246 -Node: Floating Point Parameters\x7f2398146
19247 -Node: IEEE Floating Point\x7f2405098
19248 -Node: Structure Measurement\x7f2406851
19249 -Node: Library Summary\x7f2407546
19250 -Node: Installation\x7f2617154
19251 -Node: Configuring and compiling\x7f2618856
19252 -Node: Running make install\x7f2628187
19253 -Node: Tools for Compilation\x7f2632236
19254 -Node: Supported Configurations\x7f2635037
19255 -Node: Linux\x7f2637241
19256 -Node: Reporting Bugs\x7f2640145
19257 -Node: Maintenance\x7f2642977
19258 -Node: Source Layout\x7f2643360
19259 -Node: Porting\x7f2647292
19260 -Node: Hierarchy Conventions\x7f2655592
19261 -Node: Porting to Unix\x7f2660648
19262 -Node: Contributors\x7f2662663
19263 -Node: Free Manuals\x7f2669917
19264 -Node: Copying\x7f2674837
19265 -Node: Documentation License\x7f2703000
19266 -Node: Concept Index\x7f2722877
19267 -Node: Type Index\x7f2786467
19268 -Node: Function Index\x7f2794244
19269 -Node: Variable Index\x7f2876496
19270 -Node: File Index\x7f2941243
19271 -\x1f
19272 -End Tag Table
19273 diff -u -udbrN glibc-2.3.2/manual/libc.info-1 glibc-2.3.2-200304020432/manual/libc.info-1
19274 --- glibc-2.3.2/manual/libc.info-1 Sat Mar 1 02:39:41 2003
19275 +++ glibc-2.3.2-200304020432/manual/libc.info-1 Thu Jan 1 01:00:00 1970
19276 @@ -1,1349 +0,0 @@
19277 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
19279 -INFO-DIR-SECTION GNU libraries
19280 -START-INFO-DIR-ENTRY
19281 -* Libc: (libc). C library.
19282 -END-INFO-DIR-ENTRY
19284 - This file documents the GNU C library.
19286 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
19287 -Reference Manual', for Version 2.3.x.
19289 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
19290 -Free Software Foundation, Inc.
19292 - Permission is granted to copy, distribute and/or modify this document
19293 -under the terms of the GNU Free Documentation License, Version 1.1 or
19294 -any later version published by the Free Software Foundation; with the
19295 -Invariant Sections being "Free Software Needs Free Documentation" and
19296 -"GNU Lesser General Public License", the Front-Cover texts being (a)
19297 -(see below), and with the Back-Cover Texts being (b) (see below). A
19298 -copy of the license is included in the section entitled "GNU Free
19299 -Documentation License".
19301 - (a) The FSF's Front-Cover Text is:
19303 - A GNU Manual
19305 - (b) The FSF's Back-Cover Text is:
19307 - You have freedom to copy and modify this GNU Manual, like GNU
19308 -software. Copies published by the Free Software Foundation raise
19309 -funds for GNU development.
19311 -\x1f
19312 -File: libc.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
19314 -Main Menu
19315 -*********
19317 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
19318 -Reference Manual', for Version 2.3.x of the GNU C Library.
19320 -* Menu:
19322 -* Introduction:: Purpose of the GNU C Library.
19323 -* Error Reporting:: How library functions report errors.
19324 -* Memory:: Allocating virtual memory and controlling
19325 - paging.
19326 -* Character Handling:: Character testing and conversion functions.
19327 -* String and Array Utilities:: Utilities for copying and comparing strings
19328 - and arrays.
19329 -* Character Set Handling:: Support for extended character sets.
19330 -* Locales:: The country and language can affect the
19331 - behavior of library functions.
19332 -* Message Translation:: How to make the program speak the user's
19333 - language.
19334 -* Searching and Sorting:: General searching and sorting functions.
19335 -* Pattern Matching:: Matching shell ``globs'' and regular
19336 - expressions.
19337 -* I/O Overview:: Introduction to the I/O facilities.
19338 -* I/O on Streams:: High-level, portable I/O facilities.
19339 -* Low-Level I/O:: Low-level, less portable I/O.
19340 -* File System Interface:: Functions for manipulating files.
19341 -* Pipes and FIFOs:: A simple interprocess communication
19342 - mechanism.
19343 -* Sockets:: A more complicated IPC mechanism, with
19344 - networking support.
19345 -* Low-Level Terminal Interface:: How to change the characteristics of a
19346 - terminal device.
19347 -* Syslog:: System logging and messaging.
19348 -* Mathematics:: Math functions, useful constants, random
19349 - numbers.
19350 -* Arithmetic:: Low level arithmetic functions.
19351 -* Date and Time:: Functions for getting the date and time and
19352 - formatting them nicely.
19353 -* Resource Usage And Limitation:: Functions for examining resource usage and
19354 - getting and setting limits.
19355 -* Non-Local Exits:: Jumping out of nested function calls.
19356 -* Signal Handling:: How to send, block, and handle signals.
19357 -* Program Basics:: Writing the beginning and end of your
19358 - program.
19359 -* Processes:: How to create processes and run other
19360 - programs.
19361 -* Job Control:: All about process groups and sessions.
19362 -* Name Service Switch:: Accessing system databases.
19363 -* Users and Groups:: How users are identified and classified.
19364 -* System Management:: Controlling the system and getting
19365 - information about it.
19366 -* System Configuration:: Parameters describing operating system
19367 - limits.
19368 -* Cryptographic Functions:: DES encryption and password handling.
19369 -* Debugging Support:: Functions to help debugging applications.
19371 -Add-ons
19373 -* POSIX Threads:: The standard threads library.
19375 -Appendices
19377 -* Language Features:: C language features provided by the library.
19378 -* Library Summary:: A summary showing the syntax, header file,
19379 - and derivation of each library feature.
19380 -* Installation:: How to install the GNU C library.
19381 -* Maintenance:: How to enhance and port the GNU C Library.
19382 -* Contributors:: Who wrote what parts of the GNU C library.
19383 -* Free Manuals:: Free Software Needs Free Documentation.
19384 -* Copying:: The GNU Lesser General Public License says
19385 - how you can copy and share the GNU C Library.
19386 -* Documentation License:: This manual is under the GNU Free
19387 - Documentation License.
19389 -Indices
19391 -* Concept Index:: Index of concepts and names.
19392 -* Type Index:: Index of types and type qualifiers.
19393 -* Function Index:: Index of functions and function-like macros.
19394 -* Variable Index:: Index of variables and variable-like macros.
19395 -* File Index:: Index of programs and files.
19397 - --- The Detailed Node Listing ---
19399 -Introduction
19401 -* Getting Started:: What this manual is for and how to use it.
19402 -* Standards and Portability:: Standards and sources upon which the GNU
19403 - C library is based.
19404 -* Using the Library:: Some practical uses for the library.
19405 -* Roadmap to the Manual:: Overview of the remaining chapters in
19406 - this manual.
19408 -Standards and Portability
19410 -* ISO C:: The international standard for the C
19411 - programming language.
19412 -* POSIX:: The ISO/IEC 9945 (aka IEEE 1003) standards
19413 - for operating systems.
19414 -* Berkeley Unix:: BSD and SunOS.
19415 -* SVID:: The System V Interface Description.
19416 -* XPG:: The X/Open Portability Guide.
19418 -Using the Library
19420 -* Header Files:: How to include the header files in your
19421 - programs.
19422 -* Macro Definitions:: Some functions in the library may really
19423 - be implemented as macros.
19424 -* Reserved Names:: The C standard reserves some names for
19425 - the library, and some for users.
19426 -* Feature Test Macros:: How to control what names are defined.
19428 -Error Reporting
19430 -* Checking for Errors:: How errors are reported by library functions.
19431 -* Error Codes:: Error code macros; all of these expand
19432 - into integer constant values.
19433 -* Error Messages:: Mapping error codes onto error messages.
19435 -Memory
19437 -* Memory Concepts:: An introduction to concepts and terminology.
19438 -* Memory Allocation:: Allocating storage for your program data
19439 -* Locking Pages:: Preventing page faults
19440 -* Resizing the Data Segment:: `brk', `sbrk'
19442 -Memory Allocation
19444 -* Memory Allocation and C:: How to get different kinds of allocation in C.
19445 -* Unconstrained Allocation:: The `malloc' facility allows fully general
19446 - dynamic allocation.
19447 -* Allocation Debugging:: Finding memory leaks and not freed memory.
19448 -* Obstacks:: Obstacks are less general than malloc
19449 - but more efficient and convenient.
19450 -* Variable Size Automatic:: Allocation of variable-sized blocks
19451 - of automatic storage that are freed when the
19452 - calling function returns.
19454 -Unconstrained Allocation
19456 -* Basic Allocation:: Simple use of `malloc'.
19457 -* Malloc Examples:: Examples of `malloc'. `xmalloc'.
19458 -* Freeing after Malloc:: Use `free' to free a block you
19459 - got with `malloc'.
19460 -* Changing Block Size:: Use `realloc' to make a block
19461 - bigger or smaller.
19462 -* Allocating Cleared Space:: Use `calloc' to allocate a
19463 - block and clear it.
19464 -* Efficiency and Malloc:: Efficiency considerations in use of
19465 - these functions.
19466 -* Aligned Memory Blocks:: Allocating specially aligned memory.
19467 -* Malloc Tunable Parameters:: Use `mallopt' to adjust allocation
19468 - parameters.
19469 -* Heap Consistency Checking:: Automatic checking for errors.
19470 -* Hooks for Malloc:: You can use these hooks for debugging
19471 - programs that use `malloc'.
19472 -* Statistics of Malloc:: Getting information about how much
19473 - memory your program is using.
19474 -* Summary of Malloc:: Summary of `malloc' and related functions.
19476 -Allocation Debugging
19478 -* Tracing malloc:: How to install the tracing functionality.
19479 -* Using the Memory Debugger:: Example programs excerpts.
19480 -* Tips for the Memory Debugger:: Some more or less clever ideas.
19481 -* Interpreting the traces:: What do all these lines mean?
19483 -Obstacks
19485 -* Creating Obstacks:: How to declare an obstack in your program.
19486 -* Preparing for Obstacks:: Preparations needed before you can
19487 - use obstacks.
19488 -* Allocation in an Obstack:: Allocating objects in an obstack.
19489 -* Freeing Obstack Objects:: Freeing objects in an obstack.
19490 -* Obstack Functions:: The obstack functions are both
19491 - functions and macros.
19492 -* Growing Objects:: Making an object bigger by stages.
19493 -* Extra Fast Growing:: Extra-high-efficiency (though more
19494 - complicated) growing objects.
19495 -* Status of an Obstack:: Inquiries about the status of an obstack.
19496 -* Obstacks Data Alignment:: Controlling alignment of objects in obstacks.
19497 -* Obstack Chunks:: How obstacks obtain and release chunks;
19498 - efficiency considerations.
19499 -* Summary of Obstacks::
19501 -Variable Size Automatic
19503 -* Alloca Example:: Example of using `alloca'.
19504 -* Advantages of Alloca:: Reasons to use `alloca'.
19505 -* Disadvantages of Alloca:: Reasons to avoid `alloca'.
19506 -* GNU C Variable-Size Arrays:: Only in GNU C, here is an alternative
19507 - method of allocating dynamically and
19508 - freeing automatically.
19510 -Locking Pages
19512 -* Why Lock Pages:: Reasons to read this section.
19513 -* Locked Memory Details:: Everything you need to know locked
19514 - memory
19515 -* Page Lock Functions:: Here's how to do it.
19517 -Character Handling
19519 -* Classification of Characters:: Testing whether characters are
19520 - letters, digits, punctuation, etc.
19522 -* Case Conversion:: Case mapping, and the like.
19523 -* Classification of Wide Characters:: Character class determination for
19524 - wide characters.
19525 -* Using Wide Char Classes:: Notes on using the wide character
19526 - classes.
19527 -* Wide Character Case Conversion:: Mapping of wide characters.
19529 -String and Array Utilities
19531 -* Representation of Strings:: Introduction to basic concepts.
19532 -* String/Array Conventions:: Whether to use a string function or an
19533 - arbitrary array function.
19534 -* String Length:: Determining the length of a string.
19535 -* Copying and Concatenation:: Functions to copy the contents of strings
19536 - and arrays.
19537 -* String/Array Comparison:: Functions for byte-wise and character-wise
19538 - comparison.
19539 -* Collation Functions:: Functions for collating strings.
19540 -* Search Functions:: Searching for a specific element or substring.
19541 -* Finding Tokens in a String:: Splitting a string into tokens by looking
19542 - for delimiters.
19543 -* strfry:: Function for flash-cooking a string.
19544 -* Trivial Encryption:: Obscuring data.
19545 -* Encode Binary Data:: Encoding and Decoding of Binary Data.
19546 -* Argz and Envz Vectors:: Null-separated string vectors.
19548 -Argz and Envz Vectors
19550 -* Argz Functions:: Operations on argz vectors.
19551 -* Envz Functions:: Additional operations on environment vectors.
19553 -Character Set Handling
19555 -* Extended Char Intro:: Introduction to Extended Characters.
19556 -* Charset Function Overview:: Overview about Character Handling
19557 - Functions.
19558 -* Restartable multibyte conversion:: Restartable multibyte conversion
19559 - Functions.
19560 -* Non-reentrant Conversion:: Non-reentrant Conversion Function.
19561 -* Generic Charset Conversion:: Generic Charset Conversion.
19563 -Restartable multibyte conversion
19565 -* Selecting the Conversion:: Selecting the conversion and its properties.
19566 -* Keeping the state:: Representing the state of the conversion.
19567 -* Converting a Character:: Converting Single Characters.
19568 -* Converting Strings:: Converting Multibyte and Wide Character
19569 - Strings.
19570 -* Multibyte Conversion Example:: A Complete Multibyte Conversion Example.
19572 -Non-reentrant Conversion
19574 -* Non-reentrant Character Conversion:: Non-reentrant Conversion of Single
19575 - Characters.
19576 -* Non-reentrant String Conversion:: Non-reentrant Conversion of Strings.
19577 -* Shift State:: States in Non-reentrant Functions.
19579 -Generic Charset Conversion
19581 -* Generic Conversion Interface:: Generic Character Set Conversion Interface.
19582 -* iconv Examples:: A complete `iconv' example.
19583 -* Other iconv Implementations:: Some Details about other `iconv'
19584 - Implementations.
19585 -* glibc iconv Implementation:: The `iconv' Implementation in the GNU C
19586 - library.
19588 -Locales
19590 -* Effects of Locale:: Actions affected by the choice of
19591 - locale.
19592 -* Choosing Locale:: How the user specifies a locale.
19593 -* Locale Categories:: Different purposes for which you can
19594 - select a locale.
19595 -* Setting the Locale:: How a program specifies the locale
19596 - with library functions.
19597 -* Standard Locales:: Locale names available on all systems.
19598 -* Locale Information:: How to access the information for the locale.
19599 -* Formatting Numbers:: A dedicated function to format numbers.
19600 -* Yes-or-No Questions:: Check a Response against the locale.
19602 -Locale Information
19604 -* The Lame Way to Locale Data:: ISO C's `localeconv'.
19605 -* The Elegant and Fast Way:: X/Open's `nl_langinfo'.
19607 -The Lame Way to Locale Data
19609 -* General Numeric:: Parameters for formatting numbers and
19610 - currency amounts.
19611 -* Currency Symbol:: How to print the symbol that identifies an
19612 - amount of money (e.g. `$').
19613 -* Sign of Money Amount:: How to print the (positive or negative) sign
19614 - for a monetary amount, if one exists.
19616 -Message Translation
19618 -* Message catalogs a la X/Open:: The `catgets' family of functions.
19619 -* The Uniforum approach:: The `gettext' family of functions.
19621 -Message catalogs a la X/Open
19623 -* The catgets Functions:: The `catgets' function family.
19624 -* The message catalog files:: Format of the message catalog files.
19625 -* The gencat program:: How to generate message catalogs files which
19626 - can be used by the functions.
19627 -* Common Usage:: How to use the `catgets' interface.
19629 -The Uniforum approach
19631 -* Message catalogs with gettext:: The `gettext' family of functions.
19632 -* Helper programs for gettext:: Programs to handle message catalogs
19633 - for `gettext'.
19635 -Message catalogs with gettext
19637 -* Translation with gettext:: What has to be done to translate a message.
19638 -* Locating gettext catalog:: How to determine which catalog to be used.
19639 -* Advanced gettext functions:: Additional functions for more complicated
19640 - situations.
19641 -* Charset conversion in gettext:: How to specify the output character set
19642 - `gettext' uses.
19643 -* GUI program problems:: How to use `gettext' in GUI programs.
19644 -* Using gettextized software:: The possibilities of the user to influence
19645 - the way `gettext' works.
19647 -Searching and Sorting
19649 -* Comparison Functions:: Defining how to compare two objects.
19650 - Since the sort and search facilities
19651 - are general, you have to specify the
19652 - ordering.
19653 -* Array Search Function:: The `bsearch' function.
19654 -* Array Sort Function:: The `qsort' function.
19655 -* Search/Sort Example:: An example program.
19656 -* Hash Search Function:: The `hsearch' function.
19657 -* Tree Search Function:: The `tsearch' function.
19659 -Pattern Matching
19661 -* Wildcard Matching:: Matching a wildcard pattern against a single string.
19662 -* Globbing:: Finding the files that match a wildcard pattern.
19663 -* Regular Expressions:: Matching regular expressions against strings.
19664 -* Word Expansion:: Expanding shell variables, nested commands,
19665 - arithmetic, and wildcards.
19666 - This is what the shell does with shell commands.
19668 -Globbing
19670 -* Calling Glob:: Basic use of `glob'.
19671 -* Flags for Globbing:: Flags that enable various options in `glob'.
19672 -* More Flags for Globbing:: GNU specific extensions to `glob'.
19674 -Regular Expressions
19676 -* POSIX Regexp Compilation:: Using `regcomp' to prepare to match.
19677 -* Flags for POSIX Regexps:: Syntax variations for `regcomp'.
19678 -* Matching POSIX Regexps:: Using `regexec' to match the compiled
19679 - pattern that you get from `regcomp'.
19680 -* Regexp Subexpressions:: Finding which parts of the string were matched.
19681 -* Subexpression Complications:: Find points of which parts were matched.
19682 -* Regexp Cleanup:: Freeing storage; reporting errors.
19684 -Word Expansion
19686 -* Expansion Stages:: What word expansion does to a string.
19687 -* Calling Wordexp:: How to call `wordexp'.
19688 -* Flags for Wordexp:: Options you can enable in `wordexp'.
19689 -* Wordexp Example:: A sample program that does word expansion.
19690 -* Tilde Expansion:: Details of how tilde expansion works.
19691 -* Variable Substitution:: Different types of variable substitution.
19693 -I/O Overview
19695 -* I/O Concepts:: Some basic information and terminology.
19696 -* File Names:: How to refer to a file.
19698 -I/O Concepts
19700 -* Streams and File Descriptors:: The GNU Library provides two ways
19701 - to access the contents of files.
19702 -* File Position:: The number of bytes from the
19703 - beginning of the file.
19705 -File Names
19707 -* Directories:: Directories contain entries for files.
19708 -* File Name Resolution:: A file name specifies how to look up a file.
19709 -* File Name Errors:: Error conditions relating to file names.
19710 -* File Name Portability:: File name portability and syntax issues.
19712 -I/O on Streams
19714 -* Streams:: About the data type representing a stream.
19715 -* Standard Streams:: Streams to the standard input and output
19716 - devices are created for you.
19717 -* Opening Streams:: How to create a stream to talk to a file.
19718 -* Closing Streams:: Close a stream when you are finished with it.
19719 -* Streams and Threads:: Issues with streams in threaded programs.
19720 -* Streams and I18N:: Streams in internationalized applications.
19721 -* Simple Output:: Unformatted output by characters and lines.
19722 -* Character Input:: Unformatted input by characters and words.
19723 -* Line Input:: Reading a line or a record from a stream.
19724 -* Unreading:: Peeking ahead/pushing back input just read.
19725 -* Block Input/Output:: Input and output operations on blocks of data.
19726 -* Formatted Output:: `printf' and related functions.
19727 -* Customizing Printf:: You can define new conversion specifiers for
19728 - `printf' and friends.
19729 -* Formatted Input:: `scanf' and related functions.
19730 -* EOF and Errors:: How you can tell if an I/O error happens.
19731 -* Error Recovery:: What you can do about errors.
19732 -* Binary Streams:: Some systems distinguish between text files
19733 - and binary files.
19734 -* File Positioning:: About random-access streams.
19735 -* Portable Positioning:: Random access on peculiar ISO C systems.
19736 -* Stream Buffering:: How to control buffering of streams.
19737 -* Other Kinds of Streams:: Streams that do not necessarily correspond
19738 - to an open file.
19739 -* Formatted Messages:: Print strictly formatted messages.
19741 -Unreading
19743 -* Unreading Idea:: An explanation of unreading with pictures.
19744 -* How Unread:: How to call `ungetc' to do unreading.
19746 -Formatted Output
19748 -* Formatted Output Basics:: Some examples to get you started.
19749 -* Output Conversion Syntax:: General syntax of conversion
19750 - specifications.
19751 -* Table of Output Conversions:: Summary of output conversions and
19752 - what they do.
19753 -* Integer Conversions:: Details about formatting of integers.
19754 -* Floating-Point Conversions:: Details about formatting of
19755 - floating-point numbers.
19756 -* Other Output Conversions:: Details about formatting of strings,
19757 - characters, pointers, and the like.
19758 -* Formatted Output Functions:: Descriptions of the actual functions.
19759 -* Dynamic Output:: Functions that allocate memory for the output.
19760 -* Variable Arguments Output:: `vprintf' and friends.
19761 -* Parsing a Template String:: What kinds of args does a given template
19762 - call for?
19763 -* Example of Parsing:: Sample program using `parse_printf_format'.
19765 -Customizing Printf
19767 -* Registering New Conversions:: Using `register_printf_function'
19768 - to register a new output conversion.
19769 -* Conversion Specifier Options:: The handler must be able to get
19770 - the options specified in the
19771 - template when it is called.
19772 -* Defining the Output Handler:: Defining the handler and arginfo
19773 - functions that are passed as arguments
19774 - to `register_printf_function'.
19775 -* Printf Extension Example:: How to define a `printf'
19776 - handler function.
19777 -* Predefined Printf Handlers:: Predefined `printf' handlers.
19779 -Formatted Input
19781 -* Formatted Input Basics:: Some basics to get you started.
19782 -* Input Conversion Syntax:: Syntax of conversion specifications.
19783 -* Table of Input Conversions:: Summary of input conversions and what they do.
19784 -* Numeric Input Conversions:: Details of conversions for reading numbers.
19785 -* String Input Conversions:: Details of conversions for reading strings.
19786 -* Dynamic String Input:: String conversions that `malloc' the buffer.
19787 -* Other Input Conversions:: Details of miscellaneous other conversions.
19788 -* Formatted Input Functions:: Descriptions of the actual functions.
19789 -* Variable Arguments Input:: `vscanf' and friends.
19791 -Stream Buffering
19793 -* Buffering Concepts:: Terminology is defined here.
19794 -* Flushing Buffers:: How to ensure that output buffers are flushed.
19795 -* Controlling Buffering:: How to specify what kind of buffering to use.
19797 -Other Kinds of Streams
19799 -* String Streams:: Streams that get data from or put data in
19800 - a string or memory buffer.
19801 -* Obstack Streams:: Streams that store data in an obstack.
19802 -* Custom Streams:: Defining your own streams with an arbitrary
19803 - input data source and/or output data sink.
19805 -Custom Streams
19807 -* Streams and Cookies:: The "cookie" records where to fetch or
19808 - store data that is read or written.
19809 -* Hook Functions:: How you should define the four "hook
19810 - functions" that a custom stream needs.
19812 -Formatted Messages
19814 -* Printing Formatted Messages:: The `fmtmsg' function.
19815 -* Adding Severity Classes:: Add more severity classes.
19816 -* Example:: How to use `fmtmsg' and `addseverity'.
19818 -Low-Level I/O
19820 -* Opening and Closing Files:: How to open and close file
19821 - descriptors.
19822 -* I/O Primitives:: Reading and writing data.
19823 -* File Position Primitive:: Setting a descriptor's file
19824 - position.
19825 -* Descriptors and Streams:: Converting descriptor to stream
19826 - or vice-versa.
19827 -* Stream/Descriptor Precautions:: Precautions needed if you use both
19828 - descriptors and streams.
19829 -* Scatter-Gather:: Fast I/O to discontinuous buffers.
19830 -* Memory-mapped I/O:: Using files like memory.
19831 -* Waiting for I/O:: How to check for input or output
19832 - on multiple file descriptors.
19833 -* Synchronizing I/O:: Making sure all I/O actions completed.
19834 -* Asynchronous I/O:: Perform I/O in parallel.
19835 -* Control Operations:: Various other operations on file
19836 - descriptors.
19837 -* Duplicating Descriptors:: Fcntl commands for duplicating
19838 - file descriptors.
19839 -* Descriptor Flags:: Fcntl commands for manipulating
19840 - flags associated with file
19841 - descriptors.
19842 -* File Status Flags:: Fcntl commands for manipulating
19843 - flags associated with open files.
19844 -* File Locks:: Fcntl commands for implementing
19845 - file locking.
19846 -* Interrupt Input:: Getting an asynchronous signal when
19847 - input arrives.
19848 -* IOCTLs:: Generic I/O Control operations.
19850 -Stream/Descriptor Precautions
19852 -* Linked Channels:: Dealing with channels sharing a file position.
19853 -* Independent Channels:: Dealing with separately opened, unlinked channels.
19854 -* Cleaning Streams:: Cleaning a stream makes it safe to use
19855 - another channel.
19857 -Asynchronous I/O
19859 -* Asynchronous Reads/Writes:: Asynchronous Read and Write Operations.
19860 -* Status of AIO Operations:: Getting the Status of AIO Operations.
19861 -* Synchronizing AIO Operations:: Getting into a consistent state.
19862 -* Cancel AIO Operations:: Cancellation of AIO Operations.
19863 -* Configuration of AIO:: How to optimize the AIO implementation.
19865 -File Status Flags
19867 -* Access Modes:: Whether the descriptor can read or write.
19868 -* Open-time Flags:: Details of `open'.
19869 -* Operating Modes:: Special modes to control I/O operations.
19870 -* Getting File Status Flags:: Fetching and changing these flags.
19872 -File System Interface
19874 -* Working Directory:: This is used to resolve relative
19875 - file names.
19876 -* Accessing Directories:: Finding out what files a directory
19877 - contains.
19878 -* Working with Directory Trees:: Apply actions to all files or a selectable
19879 - subset of a directory hierarchy.
19880 -* Hard Links:: Adding alternate names to a file.
19881 -* Symbolic Links:: A file that ``points to'' a file name.
19882 -* Deleting Files:: How to delete a file, and what that means.
19883 -* Renaming Files:: Changing a file's name.
19884 -* Creating Directories:: A system call just for creating a directory.
19885 -* File Attributes:: Attributes of individual files.
19886 -* Making Special Files:: How to create special files.
19887 -* Temporary Files:: Naming and creating temporary files.
19889 -Accessing Directories
19891 -* Directory Entries:: Format of one directory entry.
19892 -* Opening a Directory:: How to open a directory stream.
19893 -* Reading/Closing Directory:: How to read directory entries from the stream.
19894 -* Simple Directory Lister:: A very simple directory listing program.
19895 -* Random Access Directory:: Rereading part of the directory
19896 - already read with the same stream.
19897 -* Scanning Directory Content:: Get entries for user selected subset of
19898 - contents in given directory.
19899 -* Simple Directory Lister Mark II:: Revised version of the program.
19901 -File Attributes
19903 -* Attribute Meanings:: The names of the file attributes,
19904 - and what their values mean.
19905 -* Reading Attributes:: How to read the attributes of a file.
19906 -* Testing File Type:: Distinguishing ordinary files,
19907 - directories, links...
19908 -* File Owner:: How ownership for new files is determined,
19909 - and how to change it.
19910 -* Permission Bits:: How information about a file's access
19911 - mode is stored.
19912 -* Access Permission:: How the system decides who can access a file.
19913 -* Setting Permissions:: How permissions for new files are assigned,
19914 - and how to change them.
19915 -* Testing File Access:: How to find out if your process can
19916 - access a file.
19917 -* File Times:: About the time attributes of a file.
19918 -* File Size:: Manually changing the size of a file.
19920 -Pipes and FIFOs
19922 -* Creating a Pipe:: Making a pipe with the `pipe' function.
19923 -* Pipe to a Subprocess:: Using a pipe to communicate with a
19924 - child process.
19925 -* FIFO Special Files:: Making a FIFO special file.
19926 -* Pipe Atomicity:: When pipe (or FIFO) I/O is atomic.
19928 -Sockets
19930 -* Socket Concepts:: Basic concepts you need to know about.
19931 -* Communication Styles::Stream communication, datagrams and other styles.
19932 -* Socket Addresses:: How socket names (``addresses'') work.
19933 -* Interface Naming:: Identifying specific network interfaces.
19934 -* Local Namespace:: Details about the local namespace.
19935 -* Internet Namespace:: Details about the Internet namespace.
19936 -* Misc Namespaces:: Other namespaces not documented fully here.
19937 -* Open/Close Sockets:: Creating sockets and destroying them.
19938 -* Connections:: Operations on sockets with connection state.
19939 -* Datagrams:: Operations on datagram sockets.
19940 -* Inetd:: Inetd is a daemon that starts servers on request.
19941 - The most convenient way to write a server
19942 - is to make it work with Inetd.
19943 -* Socket Options:: Miscellaneous low-level socket options.
19944 -* Networks Database:: Accessing the database of network names.
19946 -Socket Addresses
19948 -* Address Formats:: About `struct sockaddr'.
19949 -* Setting Address:: Binding an address to a socket.
19950 -* Reading Address:: Reading the address of a socket.
19952 -Local Namespace
19954 -* Concepts: Local Namespace Concepts. What you need to understand.
19955 -* Details: Local Namespace Details. Address format, symbolic names, etc.
19956 -* Example: Local Socket Example. Example of creating a socket.
19958 -Internet Namespace
19960 -* Internet Address Formats:: How socket addresses are specified in the
19961 - Internet namespace.
19962 -* Host Addresses:: All about host addresses of Internet host.
19963 -* Protocols Database:: Referring to protocols by name.
19964 -* Ports:: Internet port numbers.
19965 -* Services Database:: Ports may have symbolic names.
19966 -* Byte Order:: Different hosts may use different byte
19967 - ordering conventions; you need to
19968 - canonicalize host address and port number.
19969 -* Inet Example:: Putting it all together.
19971 -Host Addresses
19973 -* Abstract Host Addresses:: What a host number consists of.
19974 -* Data type: Host Address Data Type. Data type for a host number.
19975 -* Functions: Host Address Functions. Functions to operate on them.
19976 -* Names: Host Names. Translating host names to host numbers.
19978 -Open/Close Sockets
19980 -* Creating a Socket:: How to open a socket.
19981 -* Closing a Socket:: How to close a socket.
19982 -* Socket Pairs:: These are created like pipes.
19984 -Connections
19986 -* Connecting:: What the client program must do.
19987 -* Listening:: How a server program waits for requests.
19988 -* Accepting Connections:: What the server does when it gets a request.
19989 -* Who is Connected:: Getting the address of the
19990 - other side of a connection.
19991 -* Transferring Data:: How to send and receive data.
19992 -* Byte Stream Example:: An example program: a client for communicating
19993 - over a byte stream socket in the Internet namespace.
19994 -* Server Example:: A corresponding server program.
19995 -* Out-of-Band Data:: This is an advanced feature.
19997 -Transferring Data
19999 -* Sending Data:: Sending data with `send'.
20000 -* Receiving Data:: Reading data with `recv'.
20001 -* Socket Data Options:: Using `send' and `recv'.
20003 -Datagrams
20005 -* Sending Datagrams:: Sending packets on a datagram socket.
20006 -* Receiving Datagrams:: Receiving packets on a datagram socket.
20007 -* Datagram Example:: An example program: packets sent over a
20008 - datagram socket in the local namespace.
20009 -* Example Receiver:: Another program, that receives those packets.
20011 -Inetd
20013 -* Inetd Servers::
20014 -* Configuring Inetd::
20016 -Socket Options
20018 -* Socket Option Functions:: The basic functions for setting and getting
20019 - socket options.
20020 -* Socket-Level Options:: Details of the options at the socket level.
20022 -Low-Level Terminal Interface
20024 -* Is It a Terminal:: How to determine if a file is a terminal
20025 - device, and what its name is.
20026 -* I/O Queues:: About flow control and typeahead.
20027 -* Canonical or Not:: Two basic styles of input processing.
20028 -* Terminal Modes:: How to examine and modify flags controlling
20029 - details of terminal I/O: echoing,
20030 - signals, editing. Posix.
20031 -* BSD Terminal Modes:: BSD compatible terminal mode setting
20032 -* Line Control:: Sending break sequences, clearing
20033 - terminal buffers ...
20034 -* Noncanon Example:: How to read single characters without echo.
20035 -* Pseudo-Terminals:: How to open a pseudo-terminal.
20037 -Terminal Modes
20039 -* Mode Data Types:: The data type `struct termios' and
20040 - related types.
20041 -* Mode Functions:: Functions to read and set the terminal
20042 - attributes.
20043 -* Setting Modes:: The right way to set terminal attributes
20044 - reliably.
20045 -* Input Modes:: Flags controlling low-level input handling.
20046 -* Output Modes:: Flags controlling low-level output handling.
20047 -* Control Modes:: Flags controlling serial port behavior.
20048 -* Local Modes:: Flags controlling high-level input handling.
20049 -* Line Speed:: How to read and set the terminal line speed.
20050 -* Special Characters:: Characters that have special effects,
20051 - and how to change them.
20052 -* Noncanonical Input:: Controlling how long to wait for input.
20054 -Special Characters
20056 -* Editing Characters:: Special characters that terminate lines and
20057 - delete text, and other editing functions.
20058 -* Signal Characters:: Special characters that send or raise signals
20059 - to or for certain classes of processes.
20060 -* Start/Stop Characters:: Special characters that suspend or resume
20061 - suspended output.
20062 -* Other Special:: Other special characters for BSD systems:
20063 - they can discard output, and print status.
20065 -Pseudo-Terminals
20067 -* Allocation:: Allocating a pseudo terminal.
20068 -* Pseudo-Terminal Pairs:: How to open both sides of a
20069 - pseudo-terminal in a single operation.
20071 -Syslog
20073 -* Overview of Syslog:: Overview of a system's Syslog facility
20074 -* Submitting Syslog Messages:: Functions to submit messages to Syslog
20076 -Submitting Syslog Messages
20078 -* openlog:: Open connection to Syslog
20079 -* syslog; vsyslog:: Submit message to Syslog
20080 -* closelog:: Close connection to Syslog
20081 -* setlogmask:: Cause certain messages to be ignored
20082 -* Syslog Example:: Example of all of the above
20084 -Mathematics
20086 -* Mathematical Constants:: Precise numeric values for often-used
20087 - constants.
20088 -* Trig Functions:: Sine, cosine, tangent, and friends.
20089 -* Inverse Trig Functions:: Arcsine, arccosine, etc.
20090 -* Exponents and Logarithms:: Also pow and sqrt.
20091 -* Hyperbolic Functions:: sinh, cosh, tanh, etc.
20092 -* Special Functions:: Bessel, gamma, erf.
20093 -* Errors in Math Functions:: Known Maximum Errors in Math Functions.
20094 -* Pseudo-Random Numbers:: Functions for generating pseudo-random
20095 - numbers.
20096 -* FP Function Optimizations:: Fast code or small code.
20098 -Pseudo-Random Numbers
20100 -* ISO Random:: `rand' and friends.
20101 -* BSD Random:: `random' and friends.
20102 -* SVID Random:: `drand48' and friends.
20104 -Arithmetic
20106 -* Integers:: Basic integer types and concepts
20107 -* Integer Division:: Integer division with guaranteed rounding.
20108 -* Floating Point Numbers:: Basic concepts. IEEE 754.
20109 -* Floating Point Classes:: The five kinds of floating-point number.
20110 -* Floating Point Errors:: When something goes wrong in a calculation.
20111 -* Rounding:: Controlling how results are rounded.
20112 -* Control Functions:: Saving and restoring the FPU's state.
20113 -* Arithmetic Functions:: Fundamental operations provided by the library.
20114 -* Complex Numbers:: The types. Writing complex constants.
20115 -* Operations on Complex:: Projection, conjugation, decomposition.
20116 -* Parsing of Numbers:: Converting strings to numbers.
20117 -* System V Number Conversion:: An archaic way to convert numbers to strings.
20119 -Floating Point Errors
20121 -* FP Exceptions:: IEEE 754 math exceptions and how to detect them.
20122 -* Infinity and NaN:: Special values returned by calculations.
20123 -* Status bit operations:: Checking for exceptions after the fact.
20124 -* Math Error Reporting:: How the math functions report errors.
20126 -Arithmetic Functions
20128 -* Absolute Value:: Absolute values of integers and floats.
20129 -* Normalization Functions:: Extracting exponents and putting them back.
20130 -* Rounding Functions:: Rounding floats to integers.
20131 -* Remainder Functions:: Remainders on division, precisely defined.
20132 -* FP Bit Twiddling:: Sign bit adjustment. Adding epsilon.
20133 -* FP Comparison Functions:: Comparisons without risk of exceptions.
20134 -* Misc FP Arithmetic:: Max, min, positive difference, multiply-add.
20136 -Parsing of Numbers
20138 -* Parsing of Integers:: Functions for conversion of integer values.
20139 -* Parsing of Floats:: Functions for conversion of floating-point
20140 - values.
20142 -Date and Time
20144 -* Time Basics:: Concepts and definitions.
20145 -* Elapsed Time:: Data types to represent elapsed times
20146 -* Processor And CPU Time:: Time a program has spent executing.
20147 -* Calendar Time:: Manipulation of ``real'' dates and times.
20148 -* Setting an Alarm:: Sending a signal after a specified time.
20149 -* Sleeping:: Waiting for a period of time.
20151 -Processor And CPU Time
20153 -* CPU Time:: The `clock' function.
20154 -* Processor Time:: The `times' function.
20156 -Calendar Time
20158 -* Simple Calendar Time:: Facilities for manipulating calendar time.
20159 -* High-Resolution Calendar:: A time representation with greater precision.
20160 -* Broken-down Time:: Facilities for manipulating local time.
20161 -* High Accuracy Clock:: Maintaining a high accuracy system clock.
20162 -* Formatting Calendar Time:: Converting times to strings.
20163 -* Parsing Date and Time:: Convert textual time and date information back
20164 - into broken-down time values.
20165 -* TZ Variable:: How users specify the time zone.
20166 -* Time Zone Functions:: Functions to examine or specify the time zone.
20167 -* Time Functions Example:: An example program showing use of some of
20168 - the time functions.
20170 -Parsing Date and Time
20172 -* Low-Level Time String Parsing:: Interpret string according to given format.
20173 -* General Time String Parsing:: User-friendly function to parse data and
20174 - time strings.
20176 -Resource Usage And Limitation
20178 -* Resource Usage:: Measuring various resources used.
20179 -* Limits on Resources:: Specifying limits on resource usage.
20180 -* Priority:: Reading or setting process run priority.
20181 -* Memory Resources:: Querying memory available resources.
20182 -* Processor Resources:: Learn about the processors available.
20184 -Priority
20186 -* Absolute Priority:: The first tier of priority. Posix
20187 -* Realtime Scheduling:: Scheduling among the process nobility
20188 -* Basic Scheduling Functions:: Get/set scheduling policy, priority
20189 -* Traditional Scheduling:: Scheduling among the vulgar masses
20191 -Traditional Scheduling
20193 -* Traditional Scheduling Intro::
20194 -* Traditional Scheduling Functions::
20196 -Memory Resources
20198 -* Memory Subsystem:: Overview about traditional Unix memory handling.
20199 -* Query Memory Parameters:: How to get information about the memory
20200 - subsystem?
20202 -Non-Local Exits
20204 -* Intro: Non-Local Intro. When and how to use these facilities.
20205 -* Details: Non-Local Details. Functions for non-local exits.
20206 -* Non-Local Exits and Signals:: Portability issues.
20207 -* System V contexts:: Complete context control a la System V.
20209 -Signal Handling
20211 -* Concepts of Signals:: Introduction to the signal facilities.
20212 -* Standard Signals:: Particular kinds of signals with
20213 - standard names and meanings.
20214 -* Signal Actions:: Specifying what happens when a
20215 - particular signal is delivered.
20216 -* Defining Handlers:: How to write a signal handler function.
20217 -* Interrupted Primitives:: Signal handlers affect use of `open',
20218 - `read', `write' and other functions.
20219 -* Generating Signals:: How to send a signal to a process.
20220 -* Blocking Signals:: Making the system hold signals temporarily.
20221 -* Waiting for a Signal:: Suspending your program until a signal
20222 - arrives.
20223 -* Signal Stack:: Using a Separate Signal Stack.
20224 -* BSD Signal Handling:: Additional functions for backward
20225 - compatibility with BSD.
20227 -Concepts of Signals
20229 -* Kinds of Signals:: Some examples of what can cause a signal.
20230 -* Signal Generation:: Concepts of why and how signals occur.
20231 -* Delivery of Signal:: Concepts of what a signal does to the
20232 - process.
20234 -Standard Signals
20236 -* Program Error Signals:: Used to report serious program errors.
20237 -* Termination Signals:: Used to interrupt and/or terminate the
20238 - program.
20239 -* Alarm Signals:: Used to indicate expiration of timers.
20240 -* Asynchronous I/O Signals:: Used to indicate input is available.
20241 -* Job Control Signals:: Signals used to support job control.
20242 -* Operation Error Signals:: Used to report operational system errors.
20243 -* Miscellaneous Signals:: Miscellaneous Signals.
20244 -* Signal Messages:: Printing a message describing a signal.
20246 -Signal Actions
20248 -* Basic Signal Handling:: The simple `signal' function.
20249 -* Advanced Signal Handling:: The more powerful `sigaction' function.
20250 -* Signal and Sigaction:: How those two functions interact.
20251 -* Sigaction Function Example:: An example of using the sigaction function.
20252 -* Flags for Sigaction:: Specifying options for signal handling.
20253 -* Initial Signal Actions:: How programs inherit signal actions.
20255 -Defining Handlers
20257 -* Handler Returns:: Handlers that return normally, and what
20258 - this means.
20259 -* Termination in Handler:: How handler functions terminate a program.
20260 -* Longjmp in Handler:: Nonlocal transfer of control out of a
20261 - signal handler.
20262 -* Signals in Handler:: What happens when signals arrive while
20263 - the handler is already occupied.
20264 -* Merged Signals:: When a second signal arrives before the
20265 - first is handled.
20266 -* Nonreentrancy:: Do not call any functions unless you know they
20267 - are reentrant with respect to signals.
20268 -* Atomic Data Access:: A single handler can run in the middle of
20269 - reading or writing a single object.
20271 -Atomic Data Access
20273 -* Non-atomic Example:: A program illustrating interrupted access.
20274 -* Types: Atomic Types. Data types that guarantee no interruption.
20275 -* Usage: Atomic Usage. Proving that interruption is harmless.
20277 -Generating Signals
20279 -* Signaling Yourself:: A process can send a signal to itself.
20280 -* Signaling Another Process:: Send a signal to another process.
20281 -* Permission for kill:: Permission for using `kill'.
20282 -* Kill Example:: Using `kill' for Communication.
20284 -Blocking Signals
20286 -* Why Block:: The purpose of blocking signals.
20287 -* Signal Sets:: How to specify which signals to
20288 - block.
20289 -* Process Signal Mask:: Blocking delivery of signals to your
20290 - process during normal execution.
20291 -* Testing for Delivery:: Blocking to Test for Delivery of
20292 - a Signal.
20293 -* Blocking for Handler:: Blocking additional signals while a
20294 - handler is being run.
20295 -* Checking for Pending Signals:: Checking for Pending Signals
20296 -* Remembering a Signal:: How you can get almost the same
20297 - effect as blocking a signal, by
20298 - handling it and setting a flag
20299 - to be tested later.
20301 -Waiting for a Signal
20303 -* Using Pause:: The simple way, using `pause'.
20304 -* Pause Problems:: Why the simple way is often not very good.
20305 -* Sigsuspend:: Reliably waiting for a specific signal.
20307 -BSD Signal Handling
20309 -* BSD Handler:: BSD Function to Establish a Handler.
20310 -* Blocking in BSD:: BSD Functions for Blocking Signals.
20312 -Program Basics
20314 -* Program Arguments:: Parsing your program's command-line arguments.
20315 -* Environment Variables:: Less direct parameters affecting your program
20316 -* System Calls:: Requesting service from the system
20317 -* Program Termination:: Telling the system you're done; return status
20319 -Program Arguments
20321 -* Argument Syntax:: By convention, options start with a hyphen.
20322 -* Parsing Program Arguments:: Ways to parse program options and arguments.
20324 -Parsing Program Arguments
20326 -* Getopt:: Parsing program options using `getopt'.
20327 -* Argp:: Parsing program options using `argp_parse'.
20328 -* Suboptions:: Some programs need more detailed options.
20329 -* Suboptions Example:: This shows how it could be done for `mount'.
20331 -Environment Variables
20333 -* Environment Access:: How to get and set the values of
20334 - environment variables.
20335 -* Standard Environment:: These environment variables have
20336 - standard interpretations.
20338 -Program Termination
20340 -* Normal Termination:: If a program calls `exit', a
20341 - process terminates normally.
20342 -* Exit Status:: The `exit status' provides information
20343 - about why the process terminated.
20344 -* Cleanups on Exit:: A process can run its own cleanup
20345 - functions upon normal termination.
20346 -* Aborting a Program:: The `abort' function causes
20347 - abnormal program termination.
20348 -* Termination Internals:: What happens when a process terminates.
20350 -Processes
20352 -* Running a Command:: The easy way to run another program.
20353 -* Process Creation Concepts:: An overview of the hard way to do it.
20354 -* Process Identification:: How to get the process ID of a process.
20355 -* Creating a Process:: How to fork a child process.
20356 -* Executing a File:: How to make a process execute another program.
20357 -* Process Completion:: How to tell when a child process has completed.
20358 -* Process Completion Status:: How to interpret the status value
20359 - returned from a child process.
20360 -* BSD Wait Functions:: More functions, for backward compatibility.
20361 -* Process Creation Example:: A complete example program.
20363 -Job Control
20365 -* Concepts of Job Control:: Jobs can be controlled by a shell.
20366 -* Job Control is Optional:: Not all POSIX systems support job control.
20367 -* Controlling Terminal:: How a process gets its controlling terminal.
20368 -* Access to the Terminal:: How processes share the controlling terminal.
20369 -* Orphaned Process Groups:: Jobs left after the user logs out.
20370 -* Implementing a Shell:: What a shell must do to implement job control.
20371 -* Functions for Job Control:: Functions to control process groups.
20373 -Implementing a Shell
20375 -* Data Structures:: Introduction to the sample shell.
20376 -* Initializing the Shell:: What the shell must do to take
20377 - responsibility for job control.
20378 -* Launching Jobs:: Creating jobs to execute commands.
20379 -* Foreground and Background:: Putting a job in foreground of background.
20380 -* Stopped and Terminated Jobs:: Reporting job status.
20381 -* Continuing Stopped Jobs:: How to continue a stopped job in
20382 - the foreground or background.
20383 -* Missing Pieces:: Other parts of the shell.
20385 -Functions for Job Control
20387 -* Identifying the Terminal:: Determining the controlling terminal's name.
20388 -* Process Group Functions:: Functions for manipulating process groups.
20389 -* Terminal Access Functions:: Functions for controlling terminal access.
20391 -Name Service Switch
20393 -* NSS Basics:: What is this NSS good for.
20394 -* NSS Configuration File:: Configuring NSS.
20395 -* NSS Module Internals:: How does it work internally.
20396 -* Extending NSS:: What to do to add services or databases.
20398 -NSS Configuration File
20400 -* Services in the NSS configuration:: Service names in the NSS configuration.
20401 -* Actions in the NSS configuration:: React appropriately to the lookup result.
20402 -* Notes on NSS Configuration File:: Things to take care about while
20403 - configuring NSS.
20405 -NSS Module Internals
20407 -* NSS Module Names:: Construction of the interface function of
20408 - the NSS modules.
20409 -* NSS Modules Interface:: Programming interface in the NSS module
20410 - functions.
20412 -Extending NSS
20414 -* Adding another Service to NSS:: What is to do to add a new service.
20415 -* NSS Module Function Internals:: Guidelines for writing new NSS
20416 - service functions.
20418 -Users and Groups
20420 -* User and Group IDs:: Each user has a unique numeric ID;
20421 - likewise for groups.
20422 -* Process Persona:: The user IDs and group IDs of a process.
20423 -* Why Change Persona:: Why a program might need to change
20424 - its user and/or group IDs.
20425 -* How Change Persona:: Changing the user and group IDs.
20426 -* Reading Persona:: How to examine the user and group IDs.
20428 -* Setting User ID:: Functions for setting the user ID.
20429 -* Setting Groups:: Functions for setting the group IDs.
20431 -* Enable/Disable Setuid:: Turning setuid access on and off.
20432 -* Setuid Program Example:: The pertinent parts of one sample program.
20433 -* Tips for Setuid:: How to avoid granting unlimited access.
20435 -* Who Logged In:: Getting the name of the user who logged in,
20436 - or of the real user ID of the current process.
20438 -* User Accounting Database:: Keeping information about users and various
20439 - actions in databases.
20441 -* User Database:: Functions and data structures for
20442 - accessing the user database.
20443 -* Group Database:: Functions and data structures for
20444 - accessing the group database.
20445 -* Database Example:: Example program showing the use of database
20446 - inquiry functions.
20447 -* Netgroup Database:: Functions for accessing the netgroup database.
20449 -User Accounting Database
20451 -* Manipulating the Database:: Scanning and modifying the user
20452 - accounting database.
20453 -* XPG Functions:: A standardized way for doing the same thing.
20454 -* Logging In and Out:: Functions from BSD that modify the user
20455 - accounting database.
20457 -User Database
20459 -* User Data Structure:: What each user record contains.
20460 -* Lookup User:: How to look for a particular user.
20461 -* Scanning All Users:: Scanning the list of all users, one by one.
20462 -* Writing a User Entry:: How a program can rewrite a user's record.
20464 -Group Database
20466 -* Group Data Structure:: What each group record contains.
20467 -* Lookup Group:: How to look for a particular group.
20468 -* Scanning All Groups:: Scanning the list of all groups.
20470 -Netgroup Database
20472 -* Netgroup Data:: Data in the Netgroup database and where
20473 - it comes from.
20474 -* Lookup Netgroup:: How to look for a particular netgroup.
20475 -* Netgroup Membership:: How to test for netgroup membership.
20477 -System Management
20479 -* Host Identification:: Determining the name of the machine.
20480 -* Platform Type:: Determining operating system and basic
20481 - machine type
20482 -* Filesystem Handling:: Controlling/querying mounts
20483 -* System Parameters:: Getting and setting various system parameters
20485 -Filesystem Handling
20487 -* Mount Information:: What is or could be mounted?
20488 -* Mount-Unmount-Remount:: Controlling what is mounted and how
20490 -Mount Information
20492 -* fstab:: The `fstab' file
20493 -* mtab:: The `mtab' file
20494 -* Other Mount Information:: Other (non-libc) sources of mount information
20496 -System Configuration
20498 -* General Limits:: Constants and functions that describe
20499 - various process-related limits that have
20500 - one uniform value for any given machine.
20501 -* System Options:: Optional POSIX features.
20502 -* Version Supported:: Version numbers of POSIX.1 and POSIX.2.
20503 -* Sysconf:: Getting specific configuration values
20504 - of general limits and system options.
20505 -* Minimums:: Minimum values for general limits.
20507 -* Limits for Files:: Size limitations that pertain to individual files.
20508 - These can vary between file systems
20509 - or even from file to file.
20510 -* Options for Files:: Optional features that some files may support.
20511 -* File Minimums:: Minimum values for file limits.
20512 -* Pathconf:: Getting the limit values for a particular file.
20514 -* Utility Limits:: Capacity limits of some POSIX.2 utility programs.
20515 -* Utility Minimums:: Minimum allowable values of those limits.
20517 -* String Parameters:: Getting the default search path.
20519 -Sysconf
20521 -* Sysconf Definition:: Detailed specifications of `sysconf'.
20522 -* Constants for Sysconf:: The list of parameters `sysconf' can read.
20523 -* Examples of Sysconf:: How to use `sysconf' and the parameter
20524 - macros properly together.
20526 -Cryptographic Functions
20528 -* Legal Problems:: This software can get you locked up, or worse.
20529 -* getpass:: Prompting the user for a password.
20530 -* crypt:: A one-way function for passwords.
20531 -* DES Encryption:: Routines for DES encryption.
20533 -Debugging Support
20535 -* Backtraces:: Obtaining and printing a back trace of the
20536 - current stack.
20538 -POSIX Threads
20540 -* Basic Thread Operations:: Creating, terminating, and waiting for threads.
20541 -* Thread Attributes:: Tuning thread scheduling.
20542 -* Cancellation:: Stopping a thread before it's done.
20543 -* Cleanup Handlers:: Deallocating resources when a thread is
20544 - canceled.
20545 -* Mutexes:: One way to synchronize threads.
20546 -* Condition Variables:: Another way.
20547 -* POSIX Semaphores:: And a third way.
20548 -* Thread-Specific Data:: Variables with different values in
20549 - different threads.
20550 -* Threads and Signal Handling:: Why you should avoid mixing the two, and
20551 - how to do it if you must.
20552 -* Threads and Fork:: Interactions between threads and the
20553 - `fork' function.
20554 -* Streams and Fork:: Interactions between stdio streams and
20555 - `fork'.
20556 -* Miscellaneous Thread Functions:: A grab bag of utility routines.
20558 -Language Features
20560 -* Consistency Checking:: Using `assert' to abort if
20561 - something ``impossible'' happens.
20562 -* Variadic Functions:: Defining functions with varying numbers
20563 - of args.
20564 -* Null Pointer Constant:: The macro `NULL'.
20565 -* Important Data Types:: Data types for object sizes.
20566 -* Data Type Measurements:: Parameters of data type representations.
20568 -Variadic Functions
20570 -* Why Variadic:: Reasons for making functions take
20571 - variable arguments.
20572 -* How Variadic:: How to define and call variadic functions.
20573 -* Variadic Example:: A complete example.
20575 -How Variadic
20577 -* Variadic Prototypes:: How to make a prototype for a function
20578 - with variable arguments.
20579 -* Receiving Arguments:: Steps you must follow to access the
20580 - optional argument values.
20581 -* How Many Arguments:: How to decide whether there are more arguments.
20582 -* Calling Variadics:: Things you need to know about calling
20583 - variable arguments functions.
20584 -* Argument Macros:: Detailed specification of the macros
20585 - for accessing variable arguments.
20586 -* Old Varargs:: The pre-ISO way of defining variadic functions.
20588 -Data Type Measurements
20590 -* Width of Type:: How many bits does an integer type hold?
20591 -* Range of Type:: What are the largest and smallest values
20592 - that an integer type can hold?
20593 -* Floating Type Macros:: Parameters that measure the floating point types.
20594 -* Structure Measurement:: Getting measurements on structure types.
20596 -Floating Type Macros
20598 -* Floating Point Concepts:: Definitions of terminology.
20599 -* Floating Point Parameters:: Details of specific macros.
20600 -* IEEE Floating Point:: The measurements for one common
20601 - representation.
20603 -Installation
20605 -* Configuring and compiling:: How to compile and test GNU libc.
20606 -* Running make install:: How to install it once you've got it
20607 - compiled.
20608 -* Tools for Compilation:: You'll need these first.
20609 -* Supported Configurations:: What it runs on, what it doesn't.
20610 -* Linux:: Specific advice for GNU/Linux systems.
20611 -* Reporting Bugs:: So they'll get fixed.
20613 -Maintenance
20615 -* Source Layout:: How to add new functions or header files
20616 - to the GNU C library.
20617 -* Porting:: How to port the GNU C library to
20618 - a new machine or operating system.
20620 -Porting
20622 -* Hierarchy Conventions:: The layout of the `sysdeps' hierarchy.
20623 -* Porting to Unix:: Porting the library to an average
20624 - Unix-like system.
20626 diff -u -udbrN glibc-2.3.2/manual/libc.info-10 glibc-2.3.2-200304020432/manual/libc.info-10
20627 --- glibc-2.3.2/manual/libc.info-10 Sat Mar 1 02:39:41 2003
20628 +++ glibc-2.3.2-200304020432/manual/libc.info-10 Thu Jan 1 01:00:00 1970
20629 @@ -1,899 +0,0 @@
20630 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
20632 -INFO-DIR-SECTION GNU libraries
20633 -START-INFO-DIR-ENTRY
20634 -* Libc: (libc). C library.
20635 -END-INFO-DIR-ENTRY
20637 - This file documents the GNU C library.
20639 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
20640 -Reference Manual', for Version 2.3.x.
20642 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
20643 -Free Software Foundation, Inc.
20645 - Permission is granted to copy, distribute and/or modify this document
20646 -under the terms of the GNU Free Documentation License, Version 1.1 or
20647 -any later version published by the Free Software Foundation; with the
20648 -Invariant Sections being "Free Software Needs Free Documentation" and
20649 -"GNU Lesser General Public License", the Front-Cover texts being (a)
20650 -(see below), and with the Back-Cover Texts being (b) (see below). A
20651 -copy of the license is included in the section entitled "GNU Free
20652 -Documentation License".
20654 - (a) The FSF's Front-Cover Text is:
20656 - A GNU Manual
20658 - (b) The FSF's Back-Cover Text is:
20660 - You have freedom to copy and modify this GNU Manual, like GNU
20661 -software. Copies published by the Free Software Foundation raise
20662 -funds for GNU development.
20664 -\x1f
20665 -File: libc.info, Node: Multibyte Conversion Example, Prev: Converting Strings, Up: Restartable multibyte conversion
20667 -A Complete Multibyte Conversion Example
20668 ----------------------------------------
20670 - The example programs given in the last sections are only brief and do
20671 -not contain all the error checking, etc. Presented here is a complete
20672 -and documented example. It features the `mbrtowc' function but it
20673 -should be easy to derive versions using the other functions.
20675 - int
20676 - file_mbsrtowcs (int input, int output)
20678 - /* Note the use of `MB_LEN_MAX'.
20679 - `MB_CUR_MAX' cannot portably be used here. */
20680 - char buffer[BUFSIZ + MB_LEN_MAX];
20681 - mbstate_t state;
20682 - int filled = 0;
20683 - int eof = 0;
20685 - /* Initialize the state. */
20686 - memset (&state, '\0', sizeof (state));
20688 - while (!eof)
20690 - ssize_t nread;
20691 - ssize_t nwrite;
20692 - char *inp = buffer;
20693 - wchar_t outbuf[BUFSIZ];
20694 - wchar_t *outp = outbuf;
20696 - /* Fill up the buffer from the input file. */
20697 - nread = read (input, buffer + filled, BUFSIZ);
20698 - if (nread < 0)
20700 - perror ("read");
20701 - return 0;
20703 - /* If we reach end of file, make a note to read no more. */
20704 - if (nread == 0)
20705 - eof = 1;
20707 - /* `filled' is now the number of bytes in `buffer'. */
20708 - filled += nread;
20710 - /* Convert those bytes to wide characters-as many as we can. */
20711 - while (1)
20713 - size_t thislen = mbrtowc (outp, inp, filled, &state);
20714 - /* Stop converting at invalid character;
20715 - this can mean we have read just the first part
20716 - of a valid character. */
20717 - if (thislen == (size_t) -1)
20718 - break;
20719 - /* We want to handle embedded NUL bytes
20720 - but the return value is 0. Correct this. */
20721 - if (thislen == 0)
20722 - thislen = 1;
20723 - /* Advance past this character. */
20724 - inp += thislen;
20725 - filled -= thislen;
20726 - ++outp;
20729 - /* Write the wide characters we just made. */
20730 - nwrite = write (output, outbuf,
20731 - (outp - outbuf) * sizeof (wchar_t));
20732 - if (nwrite < 0)
20734 - perror ("write");
20735 - return 0;
20738 - /* See if we have a _real_ invalid character. */
20739 - if ((eof && filled > 0) || filled >= MB_CUR_MAX)
20741 - error (0, 0, "invalid multibyte character");
20742 - return 0;
20745 - /* If any characters must be carried forward,
20746 - put them at the beginning of `buffer'. */
20747 - if (filled > 0)
20748 - memmove (inp, buffer, filled);
20751 - return 1;
20754 -\x1f
20755 -File: libc.info, Node: Non-reentrant Conversion, Next: Generic Charset Conversion, Prev: Restartable multibyte conversion, Up: Character Set Handling
20757 -Non-reentrant Conversion Function
20758 -=================================
20760 - The functions described in the previous chapter are defined in
20761 -Amendment 1 to ISO C90, but the original ISO C90 standard also
20762 -contained functions for character set conversion. The reason that
20763 -these original functions are not described first is that they are almost
20764 -entirely useless.
20766 - The problem is that all the conversion functions described in the
20767 -original ISO C90 use a local state. Using a local state implies that
20768 -multiple conversions at the same time (not only when using threads)
20769 -cannot be done, and that you cannot first convert single characters and
20770 -then strings since you cannot tell the conversion functions which state
20771 -to use.
20773 - These original functions are therefore usable only in a very limited
20774 -set of situations. One must complete converting the entire string
20775 -before starting a new one, and each string/text must be converted with
20776 -the same function (there is no problem with the library itself; it is
20777 -guaranteed that no library function changes the state of any of these
20778 -functions). *For the above reasons it is highly requested that the
20779 -functions described in the previous section be used in place of
20780 -non-reentrant conversion functions.*
20782 -* Menu:
20784 -* Non-reentrant Character Conversion:: Non-reentrant Conversion of Single
20785 - Characters.
20786 -* Non-reentrant String Conversion:: Non-reentrant Conversion of Strings.
20787 -* Shift State:: States in Non-reentrant Functions.
20789 -\x1f
20790 -File: libc.info, Node: Non-reentrant Character Conversion, Next: Non-reentrant String Conversion, Up: Non-reentrant Conversion
20792 -Non-reentrant Conversion of Single Characters
20793 ----------------------------------------------
20795 - - Function: int mbtowc (wchar_t *restrict RESULT, const char *restrict
20796 - STRING, size_t SIZE)
20797 - The `mbtowc' ("multibyte to wide character") function when called
20798 - with non-null STRING converts the first multibyte character
20799 - beginning at STRING to its corresponding wide character code. It
20800 - stores the result in `*RESULT'.
20802 - `mbtowc' never examines more than SIZE bytes. (The idea is to
20803 - supply for SIZE the number of bytes of data you have in hand.)
20805 - `mbtowc' with non-null STRING distinguishes three possibilities:
20806 - the first SIZE bytes at STRING start with valid multibyte
20807 - characters, they start with an invalid byte sequence or just part
20808 - of a character, or STRING points to an empty string (a null
20809 - character).
20811 - For a valid multibyte character, `mbtowc' converts it to a wide
20812 - character and stores that in `*RESULT', and returns the number of
20813 - bytes in that character (always at least 1 and never more than
20814 - SIZE).
20816 - For an invalid byte sequence, `mbtowc' returns -1. For an empty
20817 - string, it returns 0, also storing `'\0'' in `*RESULT'.
20819 - If the multibyte character code uses shift characters, then
20820 - `mbtowc' maintains and updates a shift state as it scans. If you
20821 - call `mbtowc' with a null pointer for STRING, that initializes the
20822 - shift state to its standard initial value. It also returns
20823 - nonzero if the multibyte character code in use actually has a
20824 - shift state. *Note Shift State::.
20826 - - Function: int wctomb (char *STRING, wchar_t WCHAR)
20827 - The `wctomb' ("wide character to multibyte") function converts the
20828 - wide character code WCHAR to its corresponding multibyte character
20829 - sequence, and stores the result in bytes starting at STRING. At
20830 - most `MB_CUR_MAX' characters are stored.
20832 - `wctomb' with non-null STRING distinguishes three possibilities
20833 - for WCHAR: a valid wide character code (one that can be translated
20834 - to a multibyte character), an invalid code, and `L'\0''.
20836 - Given a valid code, `wctomb' converts it to a multibyte character,
20837 - storing the bytes starting at STRING. Then it returns the number
20838 - of bytes in that character (always at least 1 and never more than
20839 - `MB_CUR_MAX').
20841 - If WCHAR is an invalid wide character code, `wctomb' returns -1.
20842 - If WCHAR is `L'\0'', it returns `0', also storing `'\0'' in
20843 - `*STRING'.
20845 - If the multibyte character code uses shift characters, then
20846 - `wctomb' maintains and updates a shift state as it scans. If you
20847 - call `wctomb' with a null pointer for STRING, that initializes the
20848 - shift state to its standard initial value. It also returns
20849 - nonzero if the multibyte character code in use actually has a
20850 - shift state. *Note Shift State::.
20852 - Calling this function with a WCHAR argument of zero when STRING is
20853 - not null has the side-effect of reinitializing the stored shift
20854 - state _as well as_ storing the multibyte character `'\0'' and
20855 - returning 0.
20857 - Similar to `mbrlen' there is also a non-reentrant function that
20858 -computes the length of a multibyte character. It can be defined in
20859 -terms of `mbtowc'.
20861 - - Function: int mblen (const char *STRING, size_t SIZE)
20862 - The `mblen' function with a non-null STRING argument returns the
20863 - number of bytes that make up the multibyte character beginning at
20864 - STRING, never examining more than SIZE bytes. (The idea is to
20865 - supply for SIZE the number of bytes of data you have in hand.)
20867 - The return value of `mblen' distinguishes three possibilities: the
20868 - first SIZE bytes at STRING start with valid multibyte characters,
20869 - they start with an invalid byte sequence or just part of a
20870 - character, or STRING points to an empty string (a null character).
20872 - For a valid multibyte character, `mblen' returns the number of
20873 - bytes in that character (always at least `1' and never more than
20874 - SIZE). For an invalid byte sequence, `mblen' returns -1. For an
20875 - empty string, it returns 0.
20877 - If the multibyte character code uses shift characters, then `mblen'
20878 - maintains and updates a shift state as it scans. If you call
20879 - `mblen' with a null pointer for STRING, that initializes the shift
20880 - state to its standard initial value. It also returns a nonzero
20881 - value if the multibyte character code in use actually has a shift
20882 - state. *Note Shift State::.
20884 - The function `mblen' is declared in `stdlib.h'.
20886 -\x1f
20887 -File: libc.info, Node: Non-reentrant String Conversion, Next: Shift State, Prev: Non-reentrant Character Conversion, Up: Non-reentrant Conversion
20889 -Non-reentrant Conversion of Strings
20890 ------------------------------------
20892 - For convenience the ISO C90 standard also defines functions to
20893 -convert entire strings instead of single characters. These functions
20894 -suffer from the same problems as their reentrant counterparts from
20895 -Amendment 1 to ISO C90; see *Note Converting Strings::.
20897 - - Function: size_t mbstowcs (wchar_t *WSTRING, const char *STRING,
20898 - size_t SIZE)
20899 - The `mbstowcs' ("multibyte string to wide character string")
20900 - function converts the null-terminated string of multibyte
20901 - characters STRING to an array of wide character codes, storing not
20902 - more than SIZE wide characters into the array beginning at WSTRING.
20903 - The terminating null character counts towards the size, so if SIZE
20904 - is less than the actual number of wide characters resulting from
20905 - STRING, no terminating null character is stored.
20907 - The conversion of characters from STRING begins in the initial
20908 - shift state.
20910 - If an invalid multibyte character sequence is found, the `mbstowcs'
20911 - function returns a value of -1. Otherwise, it returns the number
20912 - of wide characters stored in the array WSTRING. This number does
20913 - not include the terminating null character, which is present if the
20914 - number is less than SIZE.
20916 - Here is an example showing how to convert a string of multibyte
20917 - characters, allocating enough space for the result.
20919 - wchar_t *
20920 - mbstowcs_alloc (const char *string)
20922 - size_t size = strlen (string) + 1;
20923 - wchar_t *buf = xmalloc (size * sizeof (wchar_t));
20925 - size = mbstowcs (buf, string, size);
20926 - if (size == (size_t) -1)
20927 - return NULL;
20928 - buf = xrealloc (buf, (size + 1) * sizeof (wchar_t));
20929 - return buf;
20933 - - Function: size_t wcstombs (char *STRING, const wchar_t *WSTRING,
20934 - size_t SIZE)
20935 - The `wcstombs' ("wide character string to multibyte string")
20936 - function converts the null-terminated wide character array WSTRING
20937 - into a string containing multibyte characters, storing not more
20938 - than SIZE bytes starting at STRING, followed by a terminating null
20939 - character if there is room. The conversion of characters begins in
20940 - the initial shift state.
20942 - The terminating null character counts towards the size, so if SIZE
20943 - is less than or equal to the number of bytes needed in WSTRING, no
20944 - terminating null character is stored.
20946 - If a code that does not correspond to a valid multibyte character
20947 - is found, the `wcstombs' function returns a value of -1.
20948 - Otherwise, the return value is the number of bytes stored in the
20949 - array STRING. This number does not include the terminating null
20950 - character, which is present if the number is less than SIZE.
20952 -\x1f
20953 -File: libc.info, Node: Shift State, Prev: Non-reentrant String Conversion, Up: Non-reentrant Conversion
20955 -States in Non-reentrant Functions
20956 ----------------------------------
20958 - In some multibyte character codes, the _meaning_ of any particular
20959 -byte sequence is not fixed; it depends on what other sequences have come
20960 -earlier in the same string. Typically there are just a few sequences
20961 -that can change the meaning of other sequences; these few are called
20962 -"shift sequences" and we say that they set the "shift state" for other
20963 -sequences that follow.
20965 - To illustrate shift state and shift sequences, suppose we decide that
20966 -the sequence `0200' (just one byte) enters Japanese mode, in which
20967 -pairs of bytes in the range from `0240' to `0377' are single
20968 -characters, while `0201' enters Latin-1 mode, in which single bytes in
20969 -the range from `0240' to `0377' are characters, and interpreted
20970 -according to the ISO Latin-1 character set. This is a multibyte code
20971 -that has two alternative shift states ("Japanese mode" and "Latin-1
20972 -mode"), and two shift sequences that specify particular shift states.
20974 - When the multibyte character code in use has shift states, then
20975 -`mblen', `mbtowc', and `wctomb' must maintain and update the current
20976 -shift state as they scan the string. To make this work properly, you
20977 -must follow these rules:
20979 - * Before starting to scan a string, call the function with a null
20980 - pointer for the multibyte character address--for example, `mblen
20981 - (NULL, 0)'. This initializes the shift state to its standard
20982 - initial value.
20984 - * Scan the string one character at a time, in order. Do not "back
20985 - up" and rescan characters already scanned, and do not intersperse
20986 - the processing of different strings.
20988 - Here is an example of using `mblen' following these rules:
20990 - void
20991 - scan_string (char *s)
20993 - int length = strlen (s);
20995 - /* Initialize shift state. */
20996 - mblen (NULL, 0);
20998 - while (1)
21000 - int thischar = mblen (s, length);
21001 - /* Deal with end of string and invalid characters. */
21002 - if (thischar == 0)
21003 - break;
21004 - if (thischar == -1)
21006 - error ("invalid multibyte character");
21007 - break;
21009 - /* Advance past this character. */
21010 - s += thischar;
21011 - length -= thischar;
21015 - The functions `mblen', `mbtowc' and `wctomb' are not reentrant when
21016 -using a multibyte code that uses a shift state. However, no other
21017 -library functions call these functions, so you don't have to worry that
21018 -the shift state will be changed mysteriously.
21020 -\x1f
21021 -File: libc.info, Node: Generic Charset Conversion, Prev: Non-reentrant Conversion, Up: Character Set Handling
21023 -Generic Charset Conversion
21024 -==========================
21026 - The conversion functions mentioned so far in this chapter all had in
21027 -common that they operate on character sets that are not directly
21028 -specified by the functions. The multibyte encoding used is specified by
21029 -the currently selected locale for the `LC_CTYPE' category. The wide
21030 -character set is fixed by the implementation (in the case of GNU C
21031 -library it is always UCS-4 encoded ISO 10646.
21033 - This has of course several problems when it comes to general
21034 -character conversion:
21036 - * For every conversion where neither the source nor the destination
21037 - character set is the character set of the locale for the `LC_CTYPE'
21038 - category, one has to change the `LC_CTYPE' locale using
21039 - `setlocale'.
21041 - Changing the `LC_TYPE' locale introduces major problems for the
21042 - rest of the programs since several more functions (e.g., the
21043 - character classification functions, *note Classification of
21044 - Characters::) use the `LC_CTYPE' category.
21046 - * Parallel conversions to and from different character sets are not
21047 - possible since the `LC_CTYPE' selection is global and shared by all
21048 - threads.
21050 - * If neither the source nor the destination character set is the
21051 - character set used for `wchar_t' representation, there is at least
21052 - a two-step process necessary to convert a text using the functions
21053 - above. One would have to select the source character set as the
21054 - multibyte encoding, convert the text into a `wchar_t' text, select
21055 - the destination character set as the multibyte encoding, and
21056 - convert the wide character text to the multibyte (= destination)
21057 - character set.
21059 - Even if this is possible (which is not guaranteed) it is a very
21060 - tiring work. Plus it suffers from the other two raised points
21061 - even more due to the steady changing of the locale.
21063 - The XPG2 standard defines a completely new set of functions, which
21064 -has none of these limitations. They are not at all coupled to the
21065 -selected locales, and they have no constraints on the character sets
21066 -selected for source and destination. Only the set of available
21067 -conversions limits them. The standard does not specify that any
21068 -conversion at all must be available. Such availability is a measure of
21069 -the quality of the implementation.
21071 - In the following text first the interface to `iconv' and then the
21072 -conversion function, will be described. Comparisons with other
21073 -implementations will show what obstacles stand in the way of portable
21074 -applications. Finally, the implementation is described in so far as
21075 -might interest the advanced user who wants to extend conversion
21076 -capabilities.
21078 -* Menu:
21080 -* Generic Conversion Interface:: Generic Character Set Conversion Interface.
21081 -* iconv Examples:: A complete `iconv' example.
21082 -* Other iconv Implementations:: Some Details about other `iconv'
21083 - Implementations.
21084 -* glibc iconv Implementation:: The `iconv' Implementation in the GNU C
21085 - library.
21087 -\x1f
21088 -File: libc.info, Node: Generic Conversion Interface, Next: iconv Examples, Up: Generic Charset Conversion
21090 -Generic Character Set Conversion Interface
21091 -------------------------------------------
21093 - This set of functions follows the traditional cycle of using a
21094 -resource: open-use-close. The interface consists of three functions,
21095 -each of which implements one step.
21097 - Before the interfaces are described it is necessary to introduce a
21098 -data type. Just like other open-use-close interfaces the functions
21099 -introduced here work using handles and the `iconv.h' header defines a
21100 -special type for the handles used.
21102 - - Data Type: iconv_t
21103 - This data type is an abstract type defined in `iconv.h'. The user
21104 - must not assume anything about the definition of this type; it
21105 - must be completely opaque.
21107 - Objects of this type can get assigned handles for the conversions
21108 - using the `iconv' functions. The objects themselves need not be
21109 - freed, but the conversions for which the handles stand for have to.
21111 -The first step is the function to create a handle.
21113 - - Function: iconv_t iconv_open (const char *TOCODE, const char
21114 - *FROMCODE)
21115 - The `iconv_open' function has to be used before starting a
21116 - conversion. The two parameters this function takes determine the
21117 - source and destination character set for the conversion, and if the
21118 - implementation has the possibility to perform such a conversion,
21119 - the function returns a handle.
21121 - If the wanted conversion is not available, the `iconv_open'
21122 - function returns `(iconv_t) -1'. In this case the global variable
21123 - `errno' can have the following values:
21125 - `EMFILE'
21126 - The process already has `OPEN_MAX' file descriptors open.
21128 - `ENFILE'
21129 - The system limit of open file is reached.
21131 - `ENOMEM'
21132 - Not enough memory to carry out the operation.
21134 - `EINVAL'
21135 - The conversion from FROMCODE to TOCODE is not supported.
21137 - It is not possible to use the same descriptor in different threads
21138 - to perform independent conversions. The data structures associated
21139 - with the descriptor include information about the conversion state.
21140 - This must not be messed up by using it in different conversions.
21142 - An `iconv' descriptor is like a file descriptor as for every use a
21143 - new descriptor must be created. The descriptor does not stand for
21144 - all of the conversions from FROMSET to TOSET.
21146 - The GNU C library implementation of `iconv_open' has one
21147 - significant extension to other implementations. To ease the
21148 - extension of the set of available conversions, the implementation
21149 - allows storing the necessary files with data and code in an
21150 - arbitrary number of directories. How this extension must be
21151 - written will be explained below (*note glibc iconv
21152 - Implementation::). Here it is only important to say that all
21153 - directories mentioned in the `GCONV_PATH' environment variable are
21154 - considered only if they contain a file `gconv-modules'. These
21155 - directories need not necessarily be created by the system
21156 - administrator. In fact, this extension is introduced to help users
21157 - writing and using their own, new conversions. Of course, this
21158 - does not work for security reasons in SUID binaries; in this case
21159 - only the system directory is considered and this normally is
21160 - `PREFIX/lib/gconv'. The `GCONV_PATH' environment variable is
21161 - examined exactly once at the first call of the `iconv_open'
21162 - function. Later modifications of the variable have no effect.
21164 - The `iconv_open' function was introduced early in the X/Open
21165 - Portability Guide, version 2. It is supported by all commercial
21166 - Unices as it is required for the Unix branding. However, the
21167 - quality and completeness of the implementation varies widely. The
21168 - `iconv_open' function is declared in `iconv.h'.
21170 - The `iconv' implementation can associate large data structure with
21171 -the handle returned by `iconv_open'. Therefore, it is crucial to free
21172 -all the resources once all conversions are carried out and the
21173 -conversion is not needed anymore.
21175 - - Function: int iconv_close (iconv_t CD)
21176 - The `iconv_close' function frees all resources associated with the
21177 - handle CD, which must have been returned by a successful call to
21178 - the `iconv_open' function.
21180 - If the function call was successful the return value is 0.
21181 - Otherwise it is -1 and `errno' is set appropriately. Defined
21182 - error are:
21184 - `EBADF'
21185 - The conversion descriptor is invalid.
21187 - The `iconv_close' function was introduced together with the rest
21188 - of the `iconv' functions in XPG2 and is declared in `iconv.h'.
21190 - The standard defines only one actual conversion function. This has,
21191 -therefore, the most general interface: it allows conversion from one
21192 -buffer to another. Conversion from a file to a buffer, vice versa, or
21193 -even file to file can be implemented on top of it.
21195 - - Function: size_t iconv (iconv_t CD, char **INBUF, size_t
21196 - *INBYTESLEFT, char **OUTBUF, size_t *OUTBYTESLEFT)
21197 - The `iconv' function converts the text in the input buffer
21198 - according to the rules associated with the descriptor CD and
21199 - stores the result in the output buffer. It is possible to call the
21200 - function for the same text several times in a row since for
21201 - stateful character sets the necessary state information is kept in
21202 - the data structures associated with the descriptor.
21204 - The input buffer is specified by `*INBUF' and it contains
21205 - `*INBYTESLEFT' bytes. The extra indirection is necessary for
21206 - communicating the used input back to the caller (see below). It is
21207 - important to note that the buffer pointer is of type `char' and the
21208 - length is measured in bytes even if the input text is encoded in
21209 - wide characters.
21211 - The output buffer is specified in a similar way. `*OUTBUF' points
21212 - to the beginning of the buffer with at least `*OUTBYTESLEFT' bytes
21213 - room for the result. The buffer pointer again is of type `char'
21214 - and the length is measured in bytes. If OUTBUF or `*OUTBUF' is a
21215 - null pointer, the conversion is performed but no output is
21216 - available.
21218 - If INBUF is a null pointer, the `iconv' function performs the
21219 - necessary action to put the state of the conversion into the
21220 - initial state. This is obviously a no-op for non-stateful
21221 - encodings, but if the encoding has a state, such a function call
21222 - might put some byte sequences in the output buffer, which perform
21223 - the necessary state changes. The next call with INBUF not being a
21224 - null pointer then simply goes on from the initial state. It is
21225 - important that the programmer never makes any assumption as to
21226 - whether the conversion has to deal with states. Even if the input
21227 - and output character sets are not stateful, the implementation
21228 - might still have to keep states. This is due to the
21229 - implementation chosen for the GNU C library as it is described
21230 - below. Therefore an `iconv' call to reset the state should always
21231 - be performed if some protocol requires this for the output text.
21233 - The conversion stops for one of three reasons. The first is that
21234 - all characters from the input buffer are converted. This actually
21235 - can mean two things: either all bytes from the input buffer are
21236 - consumed or there are some bytes at the end of the buffer that
21237 - possibly can form a complete character but the input is
21238 - incomplete. The second reason for a stop is that the output
21239 - buffer is full. And the third reason is that the input contains
21240 - invalid characters.
21242 - In all of these cases the buffer pointers after the last successful
21243 - conversion, for input and output buffer, are stored in INBUF and
21244 - OUTBUF, and the available room in each buffer is stored in
21245 - INBYTESLEFT and OUTBYTESLEFT.
21247 - Since the character sets selected in the `iconv_open' call can be
21248 - almost arbitrary, there can be situations where the input buffer
21249 - contains valid characters, which have no identical representation
21250 - in the output character set. The behavior in this situation is
21251 - undefined. The _current_ behavior of the GNU C library in this
21252 - situation is to return with an error immediately. This certainly
21253 - is not the most desirable solution; therefore, future versions
21254 - will provide better ones, but they are not yet finished.
21256 - If all input from the input buffer is successfully converted and
21257 - stored in the output buffer, the function returns the number of
21258 - non-reversible conversions performed. In all other cases the
21259 - return value is `(size_t) -1' and `errno' is set appropriately.
21260 - In such cases the value pointed to by INBYTESLEFT is nonzero.
21262 - `EILSEQ'
21263 - The conversion stopped because of an invalid byte sequence in
21264 - the input. After the call, `*INBUF' points at the first byte
21265 - of the invalid byte sequence.
21267 - `E2BIG'
21268 - The conversion stopped because it ran out of space in the
21269 - output buffer.
21271 - `EINVAL'
21272 - The conversion stopped because of an incomplete byte sequence
21273 - at the end of the input buffer.
21275 - `EBADF'
21276 - The CD argument is invalid.
21278 - The `iconv' function was introduced in the XPG2 standard and is
21279 - declared in the `iconv.h' header.
21281 - The definition of the `iconv' function is quite good overall. It
21282 -provides quite flexible functionality. The only problems lie in the
21283 -boundary cases, which are incomplete byte sequences at the end of the
21284 -input buffer and invalid input. A third problem, which is not really a
21285 -design problem, is the way conversions are selected. The standard does
21286 -not say anything about the legitimate names, a minimal set of available
21287 -conversions. We will see how this negatively impacts other
21288 -implementations, as demonstrated below.
21290 -\x1f
21291 -File: libc.info, Node: iconv Examples, Next: Other iconv Implementations, Prev: Generic Conversion Interface, Up: Generic Charset Conversion
21293 -A complete `iconv' example
21294 ---------------------------
21296 - The example below features a solution for a common problem. Given
21297 -that one knows the internal encoding used by the system for `wchar_t'
21298 -strings, one often is in the position to read text from a file and store
21299 -it in wide character buffers. One can do this using `mbsrtowcs', but
21300 -then we run into the problems discussed above.
21302 - int
21303 - file2wcs (int fd, const char *charset, wchar_t *outbuf, size_t avail)
21305 - char inbuf[BUFSIZ];
21306 - size_t insize = 0;
21307 - char *wrptr = (char *) outbuf;
21308 - int result = 0;
21309 - iconv_t cd;
21311 - cd = iconv_open ("WCHAR_T", charset);
21312 - if (cd == (iconv_t) -1)
21314 - /* Something went wrong. */
21315 - if (errno == EINVAL)
21316 - error (0, 0, "conversion from '%s' to wchar_t not available",
21317 - charset);
21318 - else
21319 - perror ("iconv_open");
21321 - /* Terminate the output string. */
21322 - *outbuf = L'\0';
21324 - return -1;
21327 - while (avail > 0)
21329 - size_t nread;
21330 - size_t nconv;
21331 - char *inptr = inbuf;
21333 - /* Read more input. */
21334 - nread = read (fd, inbuf + insize, sizeof (inbuf) - insize);
21335 - if (nread == 0)
21337 - /* When we come here the file is completely read.
21338 - This still could mean there are some unused
21339 - characters in the `inbuf'. Put them back. */
21340 - if (lseek (fd, -insize, SEEK_CUR) == -1)
21341 - result = -1;
21343 - /* Now write out the byte sequence to get into the
21344 - initial state if this is necessary. */
21345 - iconv (cd, NULL, NULL, &wrptr, &avail);
21347 - break;
21349 - insize += nread;
21351 - /* Do the conversion. */
21352 - nconv = iconv (cd, &inptr, &insize, &wrptr, &avail);
21353 - if (nconv == (size_t) -1)
21355 - /* Not everything went right. It might only be
21356 - an unfinished byte sequence at the end of the
21357 - buffer. Or it is a real problem. */
21358 - if (errno == EINVAL)
21359 - /* This is harmless. Simply move the unused
21360 - bytes to the beginning of the buffer so that
21361 - they can be used in the next round. */
21362 - memmove (inbuf, inptr, insize);
21363 - else
21365 - /* It is a real problem. Maybe we ran out of
21366 - space in the output buffer or we have invalid
21367 - input. In any case back the file pointer to
21368 - the position of the last processed byte. */
21369 - lseek (fd, -insize, SEEK_CUR);
21370 - result = -1;
21371 - break;
21376 - /* Terminate the output string. */
21377 - if (avail >= sizeof (wchar_t))
21378 - *((wchar_t *) wrptr) = L'\0';
21380 - if (iconv_close (cd) != 0)
21381 - perror ("iconv_close");
21383 - return (wchar_t *) wrptr - outbuf;
21386 - This example shows the most important aspects of using the `iconv'
21387 -functions. It shows how successive calls to `iconv' can be used to
21388 -convert large amounts of text. The user does not have to care about
21389 -stateful encodings as the functions take care of everything.
21391 - An interesting point is the case where `iconv' returns an error and
21392 -`errno' is set to `EINVAL'. This is not really an error in the
21393 -transformation. It can happen whenever the input character set contains
21394 -byte sequences of more than one byte for some character and texts are
21395 -not processed in one piece. In this case there is a chance that a
21396 -multibyte sequence is cut. The caller can then simply read the
21397 -remainder of the takes and feed the offending bytes together with new
21398 -character from the input to `iconv' and continue the work. The
21399 -internal state kept in the descriptor is _not_ unspecified after such
21400 -an event as is the case with the conversion functions from the ISO C
21401 -standard.
21403 - The example also shows the problem of using wide character strings
21404 -with `iconv'. As explained in the description of the `iconv' function
21405 -above, the function always takes a pointer to a `char' array and the
21406 -available space is measured in bytes. In the example, the output
21407 -buffer is a wide character buffer; therefore, we use a local variable
21408 -WRPTR of type `char *', which is used in the `iconv' calls.
21410 - This looks rather innocent but can lead to problems on platforms that
21411 -have tight restriction on alignment. Therefore the caller of `iconv'
21412 -has to make sure that the pointers passed are suitable for access of
21413 -characters from the appropriate character set. Since, in the above
21414 -case, the input parameter to the function is a `wchar_t' pointer, this
21415 -is the case (unless the user violates alignment when computing the
21416 -parameter). But in other situations, especially when writing generic
21417 -functions where one does not know what type of character set one uses
21418 -and, therefore, treats text as a sequence of bytes, it might become
21419 -tricky.
21421 -\x1f
21422 -File: libc.info, Node: Other iconv Implementations, Next: glibc iconv Implementation, Prev: iconv Examples, Up: Generic Charset Conversion
21424 -Some Details about other `iconv' Implementations
21425 -------------------------------------------------
21427 - This is not really the place to discuss the `iconv' implementation
21428 -of other systems but it is necessary to know a bit about them to write
21429 -portable programs. The above mentioned problems with the specification
21430 -of the `iconv' functions can lead to portability issues.
21432 - The first thing to notice is that, due to the large number of
21433 -character sets in use, it is certainly not practical to encode the
21434 -conversions directly in the C library. Therefore, the conversion
21435 -information must come from files outside the C library. This is
21436 -usually done in one or both of the following ways:
21438 - * The C library contains a set of generic conversion functions that
21439 - can read the needed conversion tables and other information from
21440 - data files. These files get loaded when necessary.
21442 - This solution is problematic as it requires a great deal of effort
21443 - to apply to all character sets (potentially an infinite set). The
21444 - differences in the structure of the different character sets is so
21445 - large that many different variants of the table-processing
21446 - functions must be developed. In addition, the generic nature of
21447 - these functions make them slower than specifically implemented
21448 - functions.
21450 - * The C library only contains a framework that can dynamically load
21451 - object files and execute the conversion functions contained
21452 - therein.
21454 - This solution provides much more flexibility. The C library itself
21455 - contains only very little code and therefore reduces the general
21456 - memory footprint. Also, with a documented interface between the C
21457 - library and the loadable modules it is possible for third parties
21458 - to extend the set of available conversion modules. A drawback of
21459 - this solution is that dynamic loading must be available.
21461 - Some implementations in commercial Unices implement a mixture of
21462 -these possibilities; the majority implement only the second solution.
21463 -Using loadable modules moves the code out of the library itself and
21464 -keeps the door open for extensions and improvements, but this design is
21465 -also limiting on some platforms since not many platforms support dynamic
21466 -loading in statically linked programs. On platforms without this
21467 -capability it is therefore not possible to use this interface in
21468 -statically linked programs. The GNU C library has, on ELF platforms, no
21469 -problems with dynamic loading in these situations; therefore, this
21470 -point is moot. The danger is that one gets acquainted with this
21471 -situation and forgets about the restrictions on other systems.
21473 - A second thing to know about other `iconv' implementations is that
21474 -the number of available conversions is often very limited. Some
21475 -implementations provide, in the standard release (not special
21476 -international or developer releases), at most 100 to 200 conversion
21477 -possibilities. This does not mean 200 different character sets are
21478 -supported; for example, conversions from one character set to a set of
21479 -10 others might count as 10 conversions. Together with the other
21480 -direction this makes 20 conversion possibilities used up by one
21481 -character set. One can imagine the thin coverage these platform
21482 -provide. Some Unix vendors even provide only a handful of conversions,
21483 -which renders them useless for almost all uses.
21485 - This directly leads to a third and probably the most problematic
21486 -point. The way the `iconv' conversion functions are implemented on all
21487 -known Unix systems and the availability of the conversion functions from
21488 -character set A to B and the conversion from B to C does _not_ imply
21489 -that the conversion from A to C is available.
21491 - This might not seem unreasonable and problematic at first, but it is
21492 -a quite big problem as one will notice shortly after hitting it. To
21493 -show the problem we assume to write a program that has to convert from
21494 -A to C. A call like
21496 - cd = iconv_open ("C", "A");
21498 -fails according to the assumption above. But what does the program do
21499 -now? The conversion is necessary; therefore, simply giving up is not
21500 -an option.
21502 - This is a nuisance. The `iconv' function should take care of this.
21503 -But how should the program proceed from here on? If it tries to convert
21504 -to character set B, first the two `iconv_open' calls
21506 - cd1 = iconv_open ("B", "A");
21508 -and
21510 - cd2 = iconv_open ("C", "B");
21512 -will succeed, but how to find B?
21514 - Unfortunately, the answer is: there is no general solution. On some
21515 -systems guessing might help. On those systems most character sets can
21516 -convert to and from UTF-8 encoded ISO 10646 or Unicode text. Beside
21517 -this only some very system-specific methods can help. Since the
21518 -conversion functions come from loadable modules and these modules must
21519 -be stored somewhere in the filesystem, one _could_ try to find them and
21520 -determine from the available file which conversions are available and
21521 -whether there is an indirect route from A to C.
21523 - This example shows one of the design errors of `iconv' mentioned
21524 -above. It should at least be possible to determine the list of
21525 -available conversion programmatically so that if `iconv_open' says
21526 -there is no such conversion, one could make sure this also is true for
21527 -indirect routes.
21529 diff -u -udbrN glibc-2.3.2/manual/libc.info-11 glibc-2.3.2-200304020432/manual/libc.info-11
21530 --- glibc-2.3.2/manual/libc.info-11 Sat Mar 1 02:39:41 2003
21531 +++ glibc-2.3.2-200304020432/manual/libc.info-11 Thu Jan 1 01:00:00 1970
21532 @@ -1,1041 +0,0 @@
21533 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
21535 -INFO-DIR-SECTION GNU libraries
21536 -START-INFO-DIR-ENTRY
21537 -* Libc: (libc). C library.
21538 -END-INFO-DIR-ENTRY
21540 - This file documents the GNU C library.
21542 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
21543 -Reference Manual', for Version 2.3.x.
21545 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
21546 -Free Software Foundation, Inc.
21548 - Permission is granted to copy, distribute and/or modify this document
21549 -under the terms of the GNU Free Documentation License, Version 1.1 or
21550 -any later version published by the Free Software Foundation; with the
21551 -Invariant Sections being "Free Software Needs Free Documentation" and
21552 -"GNU Lesser General Public License", the Front-Cover texts being (a)
21553 -(see below), and with the Back-Cover Texts being (b) (see below). A
21554 -copy of the license is included in the section entitled "GNU Free
21555 -Documentation License".
21557 - (a) The FSF's Front-Cover Text is:
21559 - A GNU Manual
21561 - (b) The FSF's Back-Cover Text is:
21563 - You have freedom to copy and modify this GNU Manual, like GNU
21564 -software. Copies published by the Free Software Foundation raise
21565 -funds for GNU development.
21567 -\x1f
21568 -File: libc.info, Node: glibc iconv Implementation, Prev: Other iconv Implementations, Up: Generic Charset Conversion
21570 -The `iconv' Implementation in the GNU C library
21571 ------------------------------------------------
21573 - After reading about the problems of `iconv' implementations in the
21574 -last section it is certainly good to note that the implementation in
21575 -the GNU C library has none of the problems mentioned above. What
21576 -follows is a step-by-step analysis of the points raised above. The
21577 -evaluation is based on the current state of the development (as of
21578 -January 1999). The development of the `iconv' functions is not
21579 -complete, but basic functionality has solidified.
21581 - The GNU C library's `iconv' implementation uses shared loadable
21582 -modules to implement the conversions. A very small number of
21583 -conversions are built into the library itself but these are only rather
21584 -trivial conversions.
21586 - All the benefits of loadable modules are available in the GNU C
21587 -library implementation. This is especially appealing since the
21588 -interface is well documented (see below), and it, therefore, is easy to
21589 -write new conversion modules. The drawback of using loadable objects
21590 -is not a problem in the GNU C library, at least on ELF systems. Since
21591 -the library is able to load shared objects even in statically linked
21592 -binaries, static linking need not be forbidden in case one wants to use
21593 -`iconv'.
21595 - The second mentioned problem is the number of supported conversions.
21596 -Currently, the GNU C library supports more than 150 character sets. The
21597 -way the implementation is designed the number of supported conversions
21598 -is greater than 22350 (150 times 149). If any conversion from or to a
21599 -character set is missing, it can be added easily.
21601 - Particularly impressive as it may be, this high number is due to the
21602 -fact that the GNU C library implementation of `iconv' does not have the
21603 -third problem mentioned above (i.e., whenever there is a conversion
21604 -from a character set A to B and from B to C it is always possible to
21605 -convert from A to C directly). If the `iconv_open' returns an error
21606 -and sets `errno' to `EINVAL', there is no known way, directly or
21607 -indirectly, to perform the wanted conversion.
21609 - Triangulation is achieved by providing for each character set a
21610 -conversion from and to UCS-4 encoded ISO 10646. Using ISO 10646 as an
21611 -intermediate representation it is possible to "triangulate" (i.e.,
21612 -convert with an intermediate representation).
21614 - There is no inherent requirement to provide a conversion to
21615 -ISO 10646 for a new character set, and it is also possible to provide
21616 -other conversions where neither source nor destination character set is
21617 -ISO 10646. The existing set of conversions is simply meant to cover all
21618 -conversions that might be of interest.
21620 - All currently available conversions use the triangulation method
21621 -above, making conversion run unnecessarily slow. If, for example,
21622 -somebody often needs the conversion from ISO-2022-JP to EUC-JP, a
21623 -quicker solution would involve direct conversion between the two
21624 -character sets, skipping the input to ISO 10646 first. The two
21625 -character sets of interest are much more similar to each other than to
21626 -ISO 10646.
21628 - In such a situation one easily can write a new conversion and
21629 -provide it as a better alternative. The GNU C library `iconv'
21630 -implementation would automatically use the module implementing the
21631 -conversion if it is specified to be more efficient.
21633 -Format of `gconv-modules' files
21634 -...............................
21636 - All information about the available conversions comes from a file
21637 -named `gconv-modules', which can be found in any of the directories
21638 -along the `GCONV_PATH'. The `gconv-modules' files are line-oriented
21639 -text files, where each of the lines has one of the following formats:
21641 - * If the first non-whitespace character is a `#' the line contains
21642 - only comments and is ignored.
21644 - * Lines starting with `alias' define an alias name for a character
21645 - set. Two more words are expected on the line. The first word
21646 - defines the alias name, and the second defines the original name
21647 - of the character set. The effect is that it is possible to use
21648 - the alias name in the FROMSET or TOSET parameters of `iconv_open'
21649 - and achieve the same result as when using the real character set
21650 - name.
21652 - This is quite important as a character set has often many different
21653 - names. There is normally an official name but this need not
21654 - correspond to the most popular name. Beside this many character
21655 - sets have special names that are somehow constructed. For
21656 - example, all character sets specified by the ISO have an alias of
21657 - the form `ISO-IR-NNN' where NNN is the registration number. This
21658 - allows programs that know about the registration number to
21659 - construct character set names and use them in `iconv_open' calls.
21660 - More on the available names and aliases follows below.
21662 - * Lines starting with `module' introduce an available conversion
21663 - module. These lines must contain three or four more words.
21665 - The first word specifies the source character set, the second word
21666 - the destination character set of conversion implemented in this
21667 - module, and the third word is the name of the loadable module.
21668 - The filename is constructed by appending the usual shared object
21669 - suffix (normally `.so') and this file is then supposed to be found
21670 - in the same directory the `gconv-modules' file is in. The last
21671 - word on the line, which is optional, is a numeric value
21672 - representing the cost of the conversion. If this word is missing,
21673 - a cost of 1 is assumed. The numeric value itself does not matter
21674 - that much; what counts are the relative values of the sums of
21675 - costs for all possible conversion paths. Below is a more precise
21676 - description of the use of the cost value.
21678 - Returning to the example above where one has written a module to
21679 -directly convert from ISO-2022-JP to EUC-JP and back. All that has to
21680 -be done is to put the new module, let its name be ISO2022JP-EUCJP.so,
21681 -in a directory and add a file `gconv-modules' with the following
21682 -content in the same directory:
21684 - module ISO-2022-JP// EUC-JP// ISO2022JP-EUCJP 1
21685 - module EUC-JP// ISO-2022-JP// ISO2022JP-EUCJP 1
21687 - To see why this is sufficient, it is necessary to understand how the
21688 -conversion used by `iconv' (and described in the descriptor) is
21689 -selected. The approach to this problem is quite simple.
21691 - At the first call of the `iconv_open' function the program reads all
21692 -available `gconv-modules' files and builds up two tables: one
21693 -containing all the known aliases and another that contains the
21694 -information about the conversions and which shared object implements
21695 -them.
21697 -Finding the conversion path in `iconv'
21698 -......................................
21700 - The set of available conversions form a directed graph with weighted
21701 -edges. The weights on the edges are the costs specified in the
21702 -`gconv-modules' files. The `iconv_open' function uses an algorithm
21703 -suitable for search for the best path in such a graph and so constructs
21704 -a list of conversions that must be performed in succession to get the
21705 -transformation from the source to the destination character set.
21707 - Explaining why the above `gconv-modules' files allows the `iconv'
21708 -implementation to resolve the specific ISO-2022-JP to EUC-JP conversion
21709 -module instead of the conversion coming with the library itself is
21710 -straightforward. Since the latter conversion takes two steps (from
21711 -ISO-2022-JP to ISO 10646 and then from ISO 10646 to EUC-JP), the cost
21712 -is 1+1 = 2. The above `gconv-modules' file, however, specifies that
21713 -the new conversion modules can perform this conversion with only the
21714 -cost of 1.
21716 - A mysterious item about the `gconv-modules' file above (and also the
21717 -file coming with the GNU C library) are the names of the character sets
21718 -specified in the `module' lines. Why do almost all the names end in
21719 -`//'? And this is not all: the names can actually be regular
21720 -expressions. At this point in time this mystery should not be
21721 -revealed, unless you have the relevant spell-casting materials: ashes
21722 -from an original DOS 6.2 boot disk burnt in effigy, a crucifix blessed
21723 -by St. Emacs, assorted herbal roots from Central America, sand from
21724 -Cebu, etc. Sorry! *The part of the implementation where this is used
21725 -is not yet finished. For now please simply follow the existing
21726 -examples. It'll become clearer once it is. -drepper*
21728 - A last remark about the `gconv-modules' is about the names not
21729 -ending with `//'. A character set named `INTERNAL' is often mentioned.
21730 -From the discussion above and the chosen name it should have become
21731 -clear that this is the name for the representation used in the
21732 -intermediate step of the triangulation. We have said that this is UCS-4
21733 -but actually that is not quite right. The UCS-4 specification also
21734 -includes the specification of the byte ordering used. Since a UCS-4
21735 -value consists of four bytes, a stored value is effected by byte
21736 -ordering. The internal representation is _not_ the same as UCS-4 in
21737 -case the byte ordering of the processor (or at least the running
21738 -process) is not the same as the one required for UCS-4. This is done
21739 -for performance reasons as one does not want to perform unnecessary
21740 -byte-swapping operations if one is not interested in actually seeing
21741 -the result in UCS-4. To avoid trouble with endianess, the internal
21742 -representation consistently is named `INTERNAL' even on big-endian
21743 -systems where the representations are identical.
21745 -`iconv' module data structures
21746 -..............................
21748 - So far this section has described how modules are located and
21749 -considered to be used. What remains to be described is the interface
21750 -of the modules so that one can write new ones. This section describes
21751 -the interface as it is in use in January 1999. The interface will
21752 -change a bit in the future but, with luck, only in an upwardly
21753 -compatible way.
21755 - The definitions necessary to write new modules are publicly available
21756 -in the non-standard header `gconv.h'. The following text, therefore,
21757 -describes the definitions from this header file. First, however, it is
21758 -necessary to get an overview.
21760 - From the perspective of the user of `iconv' the interface is quite
21761 -simple: the `iconv_open' function returns a handle that can be used in
21762 -calls to `iconv', and finally the handle is freed with a call to
21763 -`iconv_close'. The problem is that the handle has to be able to
21764 -represent the possibly long sequences of conversion steps and also the
21765 -state of each conversion since the handle is all that is passed to the
21766 -`iconv' function. Therefore, the data structures are really the
21767 -elements necessary to understanding the implementation.
21769 - We need two different kinds of data structures. The first describes
21770 -the conversion and the second describes the state etc. There are
21771 -really two type definitions like this in `gconv.h'.
21773 - - Data type: struct __gconv_step
21774 - This data structure describes one conversion a module can perform.
21775 - For each function in a loaded module with conversion functions
21776 - there is exactly one object of this type. This object is shared
21777 - by all users of the conversion (i.e., this object does not contain
21778 - any information corresponding to an actual conversion; it only
21779 - describes the conversion itself).
21781 - `struct __gconv_loaded_object *__shlib_handle'
21782 - `const char *__modname'
21783 - `int __counter'
21784 - All these elements of the structure are used internally in
21785 - the C library to coordinate loading and unloading the shared.
21786 - One must not expect any of the other elements to be
21787 - available or initialized.
21789 - `const char *__from_name'
21790 - `const char *__to_name'
21791 - `__from_name' and `__to_name' contain the names of the source
21792 - and destination character sets. They can be used to identify
21793 - the actual conversion to be carried out since one module
21794 - might implement conversions for more than one character set
21795 - and/or direction.
21797 - `gconv_fct __fct'
21798 - `gconv_init_fct __init_fct'
21799 - `gconv_end_fct __end_fct'
21800 - These elements contain pointers to the functions in the
21801 - loadable module. The interface will be explained below.
21803 - `int __min_needed_from'
21804 - `int __max_needed_from'
21805 - `int __min_needed_to'
21806 - `int __max_needed_to;'
21807 - These values have to be supplied in the init function of the
21808 - module. The `__min_needed_from' value specifies how many
21809 - bytes a character of the source character set at least needs.
21810 - The `__max_needed_from' specifies the maximum value that
21811 - also includes possible shift sequences.
21813 - The `__min_needed_to' and `__max_needed_to' values serve the
21814 - same purpose as `__min_needed_from' and `__max_needed_from'
21815 - but this time for the destination character set.
21817 - It is crucial that these values be accurate since otherwise
21818 - the conversion functions will have problems or not work at
21819 - all.
21821 - `int __stateful'
21822 - This element must also be initialized by the init function.
21823 - `int __stateful' is nonzero if the source character set is
21824 - stateful. Otherwise it is zero.
21826 - `void *__data'
21827 - This element can be used freely by the conversion functions
21828 - in the module. `void *__data' can be used to communicate
21829 - extra information from one call to another. `void *__data'
21830 - need not be initialized if not needed at all. If `void
21831 - *__data' element is assigned a pointer to dynamically
21832 - allocated memory (presumably in the init function) it has to
21833 - be made sure that the end function deallocates the memory.
21834 - Otherwise the application will leak memory.
21836 - It is important to be aware that this data structure is
21837 - shared by all users of this specification conversion and
21838 - therefore the `__data' element must not contain data specific
21839 - to one specific use of the conversion function.
21841 - - Data type: struct __gconv_step_data
21842 - This is the data structure that contains the information specific
21843 - to each use of the conversion functions.
21845 - `char *__outbuf'
21846 - `char *__outbufend'
21847 - These elements specify the output buffer for the conversion
21848 - step. The `__outbuf' element points to the beginning of the
21849 - buffer, and `__outbufend' points to the byte following the
21850 - last byte in the buffer. The conversion function must not
21851 - assume anything about the size of the buffer but it can be
21852 - safely assumed the there is room for at least one complete
21853 - character in the output buffer.
21855 - Once the conversion is finished, if the conversion is the
21856 - last step, the `__outbuf' element must be modified to point
21857 - after the last byte written into the buffer to signal how
21858 - much output is available. If this conversion step is not the
21859 - last one, the element must not be modified. The
21860 - `__outbufend' element must not be modified.
21862 - `int __is_last'
21863 - This element is nonzero if this conversion step is the last
21864 - one. This information is necessary for the recursion. See
21865 - the description of the conversion function internals below.
21866 - This element must never be modified.
21868 - `int __invocation_counter'
21869 - The conversion function can use this element to see how many
21870 - calls of the conversion function already happened. Some
21871 - character sets require a certain prolog when generating
21872 - output, and by comparing this value with zero, one can find
21873 - out whether it is the first call and whether, therefore, the
21874 - prolog should be emitted. This element must never be
21875 - modified.
21877 - `int __internal_use'
21878 - This element is another one rarely used but needed in certain
21879 - situations. It is assigned a nonzero value in case the
21880 - conversion functions are used to implement `mbsrtowcs' et.al.
21881 - (i.e., the function is not used directly through the `iconv'
21882 - interface).
21884 - This sometimes makes a difference as it is expected that the
21885 - `iconv' functions are used to translate entire texts while the
21886 - `mbsrtowcs' functions are normally used only to convert single
21887 - strings and might be used multiple times to convert entire
21888 - texts.
21890 - But in this situation we would have problem complying with
21891 - some rules of the character set specification. Some
21892 - character sets require a prolog, which must appear exactly
21893 - once for an entire text. If a number of `mbsrtowcs' calls
21894 - are used to convert the text, only the first call must add
21895 - the prolog. However, because there is no communication
21896 - between the different calls of `mbsrtowcs', the conversion
21897 - functions have no possibility to find this out. The
21898 - situation is different for sequences of `iconv' calls since
21899 - the handle allows access to the needed information.
21901 - The `int __internal_use' element is mostly used together with
21902 - `__invocation_counter' as follows:
21904 - if (!data->__internal_use
21905 - && data->__invocation_counter == 0)
21906 - /* Emit prolog. */
21907 - ...
21909 - This element must never be modified.
21911 - `mbstate_t *__statep'
21912 - The `__statep' element points to an object of type `mbstate_t'
21913 - (*note Keeping the state::). The conversion of a stateful
21914 - character set must use the object pointed to by `__statep' to
21915 - store information about the conversion state. The `__statep'
21916 - element itself must never be modified.
21918 - `mbstate_t __state'
21919 - This element must _never_ be used directly. It is only part
21920 - of this structure to have the needed space allocated.
21922 -`iconv' module interfaces
21923 -.........................
21925 - With the knowledge about the data structures we now can describe the
21926 -conversion function itself. To understand the interface a bit of
21927 -knowledge is necessary about the functionality in the C library that
21928 -loads the objects with the conversions.
21930 - It is often the case that one conversion is used more than once
21931 -(i.e., there are several `iconv_open' calls for the same set of
21932 -character sets during one program run). The `mbsrtowcs' et.al.
21933 -functions in the GNU C library also use the `iconv' functionality, which
21934 -increases the number of uses of the same functions even more.
21936 - Because of this multiple use of conversions, the modules do not get
21937 -loaded exclusively for one conversion. Instead a module once loaded can
21938 -be used by an arbitrary number of `iconv' or `mbsrtowcs' calls at the
21939 -same time. The splitting of the information between conversion-
21940 -function-specific information and conversion data makes this possible.
21941 -The last section showed the two data structures used to do this.
21943 - This is of course also reflected in the interface and semantics of
21944 -the functions that the modules must provide. There are three functions
21945 -that must have the following names:
21947 -`gconv_init'
21948 - The `gconv_init' function initializes the conversion function
21949 - specific data structure. This very same object is shared by all
21950 - conversions that use this conversion and, therefore, no state
21951 - information about the conversion itself must be stored in here.
21952 - If a module implements more than one conversion, the `gconv_init'
21953 - function will be called multiple times.
21955 -`gconv_end'
21956 - The `gconv_end' function is responsible for freeing all resources
21957 - allocated by the `gconv_init' function. If there is nothing to do,
21958 - this function can be missing. Special care must be taken if the
21959 - module implements more than one conversion and the `gconv_init'
21960 - function does not allocate the same resources for all conversions.
21962 -`gconv'
21963 - This is the actual conversion function. It is called to convert
21964 - one block of text. It gets passed the conversion step information
21965 - initialized by `gconv_init' and the conversion data, specific to
21966 - this use of the conversion functions.
21968 - There are three data types defined for the three module interface
21969 -functions and these define the interface.
21971 - - Data type: int (*__gconv_init_fct) (struct __gconv_step *)
21972 - This specifies the interface of the initialization function of the
21973 - module. It is called exactly once for each conversion the module
21974 - implements.
21976 - As explained in the description of the `struct __gconv_step' data
21977 - structure above the initialization function has to initialize
21978 - parts of it.
21980 - `__min_needed_from'
21981 - `__max_needed_from'
21982 - `__min_needed_to'
21983 - `__max_needed_to'
21984 - These elements must be initialized to the exact numbers of
21985 - the minimum and maximum number of bytes used by one character
21986 - in the source and destination character sets, respectively.
21987 - If the characters all have the same size, the minimum and
21988 - maximum values are the same.
21990 - `__stateful'
21991 - This element must be initialized to an nonzero value if the
21992 - source character set is stateful. Otherwise it must be zero.
21994 - If the initialization function needs to communicate some
21995 - information to the conversion function, this communication can
21996 - happen using the `__data' element of the `__gconv_step' structure.
21997 - But since this data is shared by all the conversions, it must not
21998 - be modified by the conversion function. The example below shows
21999 - how this can be used.
22001 - #define MIN_NEEDED_FROM 1
22002 - #define MAX_NEEDED_FROM 4
22003 - #define MIN_NEEDED_TO 4
22004 - #define MAX_NEEDED_TO 4
22006 - int
22007 - gconv_init (struct __gconv_step *step)
22009 - /* Determine which direction. */
22010 - struct iso2022jp_data *new_data;
22011 - enum direction dir = illegal_dir;
22012 - enum variant var = illegal_var;
22013 - int result;
22015 - if (__strcasecmp (step->__from_name, "ISO-2022-JP//") == 0)
22017 - dir = from_iso2022jp;
22018 - var = iso2022jp;
22020 - else if (__strcasecmp (step->__to_name, "ISO-2022-JP//") == 0)
22022 - dir = to_iso2022jp;
22023 - var = iso2022jp;
22025 - else if (__strcasecmp (step->__from_name, "ISO-2022-JP-2//") == 0)
22027 - dir = from_iso2022jp;
22028 - var = iso2022jp2;
22030 - else if (__strcasecmp (step->__to_name, "ISO-2022-JP-2//") == 0)
22032 - dir = to_iso2022jp;
22033 - var = iso2022jp2;
22036 - result = __GCONV_NOCONV;
22037 - if (dir != illegal_dir)
22039 - new_data = (struct iso2022jp_data *)
22040 - malloc (sizeof (struct iso2022jp_data));
22042 - result = __GCONV_NOMEM;
22043 - if (new_data != NULL)
22045 - new_data->dir = dir;
22046 - new_data->var = var;
22047 - step->__data = new_data;
22049 - if (dir == from_iso2022jp)
22051 - step->__min_needed_from = MIN_NEEDED_FROM;
22052 - step->__max_needed_from = MAX_NEEDED_FROM;
22053 - step->__min_needed_to = MIN_NEEDED_TO;
22054 - step->__max_needed_to = MAX_NEEDED_TO;
22056 - else
22058 - step->__min_needed_from = MIN_NEEDED_TO;
22059 - step->__max_needed_from = MAX_NEEDED_TO;
22060 - step->__min_needed_to = MIN_NEEDED_FROM;
22061 - step->__max_needed_to = MAX_NEEDED_FROM + 2;
22064 - /* Yes, this is a stateful encoding. */
22065 - step->__stateful = 1;
22067 - result = __GCONV_OK;
22071 - return result;
22074 - The function first checks which conversion is wanted. The module
22075 - from which this function is taken implements four different
22076 - conversions; which one is selected can be determined by comparing
22077 - the names. The comparison should always be done without paying
22078 - attention to the case.
22080 - Next, a data structure, which contains the necessary information
22081 - about which conversion is selected, is allocated. The data
22082 - structure `struct iso2022jp_data' is locally defined since,
22083 - outside the module, this data is not used at all. Please note
22084 - that if all four conversions this modules supports are requested
22085 - there are four data blocks.
22087 - One interesting thing is the initialization of the `__min_' and
22088 - `__max_' elements of the step data object. A single ISO-2022-JP
22089 - character can consist of one to four bytes. Therefore the
22090 - `MIN_NEEDED_FROM' and `MAX_NEEDED_FROM' macros are defined this
22091 - way. The output is always the `INTERNAL' character set (aka
22092 - UCS-4) and therefore each character consists of exactly four
22093 - bytes. For the conversion from `INTERNAL' to ISO-2022-JP we have
22094 - to take into account that escape sequences might be necessary to
22095 - switch the character sets. Therefore the `__max_needed_to'
22096 - element for this direction gets assigned `MAX_NEEDED_FROM + 2'.
22097 - This takes into account the two bytes needed for the escape
22098 - sequences to single the switching. The asymmetry in the maximum
22099 - values for the two directions can be explained easily: when
22100 - reading ISO-2022-JP text, escape sequences can be handled alone
22101 - (i.e., it is not necessary to process a real character since the
22102 - effect of the escape sequence can be recorded in the state
22103 - information). The situation is different for the other direction.
22104 - Since it is in general not known which character comes next, one
22105 - cannot emit escape sequences to change the state in advance. This
22106 - means the escape sequences that have to be emitted together with
22107 - the next character. Therefore one needs more room than only for
22108 - the character itself.
22110 - The possible return values of the initialization function are:
22112 - `__GCONV_OK'
22113 - The initialization succeeded
22115 - `__GCONV_NOCONV'
22116 - The requested conversion is not supported in the module.
22117 - This can happen if the `gconv-modules' file has errors.
22119 - `__GCONV_NOMEM'
22120 - Memory required to store additional information could not be
22121 - allocated.
22123 - The function called before the module is unloaded is significantly
22124 -easier. It often has nothing at all to do; in which case it can be left
22125 -out completely.
22127 - - Data type: void (*__gconv_end_fct) (struct gconv_step *)
22128 - The task of this function is to free all resources allocated in the
22129 - initialization function. Therefore only the `__data' element of
22130 - the object pointed to by the argument is of interest. Continuing
22131 - the example from the initialization function, the finalization
22132 - function looks like this:
22134 - void
22135 - gconv_end (struct __gconv_step *data)
22137 - free (data->__data);
22140 - The most important function is the conversion function itself, which
22141 -can get quite complicated for complex character sets. But since this
22142 -is not of interest here, we will only describe a possible skeleton for
22143 -the conversion function.
22145 - - Data type: int (*__gconv_fct) (struct __gconv_step *, struct
22146 - __gconv_step_data *, const char **, const char *, size_t *,
22147 - int)
22148 - The conversion function can be called for two basic reason: to
22149 - convert text or to reset the state. From the description of the
22150 - `iconv' function it can be seen why the flushing mode is
22151 - necessary. What mode is selected is determined by the sixth
22152 - argument, an integer. This argument being nonzero means that
22153 - flushing is selected.
22155 - Common to both modes is where the output buffer can be found. The
22156 - information about this buffer is stored in the conversion step
22157 - data. A pointer to this information is passed as the second
22158 - argument to this function. The description of the `struct
22159 - __gconv_step_data' structure has more information on the
22160 - conversion step data.
22162 - What has to be done for flushing depends on the source character
22163 - set. If the source character set is not stateful, nothing has to
22164 - be done. Otherwise the function has to emit a byte sequence to
22165 - bring the state object into the initial state. Once this all
22166 - happened the other conversion modules in the chain of conversions
22167 - have to get the same chance. Whether another step follows can be
22168 - determined from the `__is_last' element of the step data structure
22169 - to which the first parameter points.
22171 - The more interesting mode is when actual text has to be converted.
22172 - The first step in this case is to convert as much text as
22173 - possible from the input buffer and store the result in the output
22174 - buffer. The start of the input buffer is determined by the third
22175 - argument, which is a pointer to a pointer variable referencing the
22176 - beginning of the buffer. The fourth argument is a pointer to the
22177 - byte right after the last byte in the buffer.
22179 - The conversion has to be performed according to the current state
22180 - if the character set is stateful. The state is stored in an
22181 - object pointed to by the `__statep' element of the step data
22182 - (second argument). Once either the input buffer is empty or the
22183 - output buffer is full the conversion stops. At this point, the
22184 - pointer variable referenced by the third parameter must point to
22185 - the byte following the last processed byte (i.e., if all of the
22186 - input is consumed, this pointer and the fourth parameter have the
22187 - same value).
22189 - What now happens depends on whether this step is the last one. If
22190 - it is the last step, the only thing that has to be done is to
22191 - update the `__outbuf' element of the step data structure to point
22192 - after the last written byte. This update gives the caller the
22193 - information on how much text is available in the output buffer.
22194 - In addition, the variable pointed to by the fifth parameter, which
22195 - is of type `size_t', must be incremented by the number of
22196 - characters (_not bytes_) that were converted in a non-reversible
22197 - way. Then, the function can return.
22199 - In case the step is not the last one, the later conversion
22200 - functions have to get a chance to do their work. Therefore, the
22201 - appropriate conversion function has to be called. The information
22202 - about the functions is stored in the conversion data structures,
22203 - passed as the first parameter. This information and the step data
22204 - are stored in arrays, so the next element in both cases can be
22205 - found by simple pointer arithmetic:
22207 - int
22208 - gconv (struct __gconv_step *step, struct __gconv_step_data *data,
22209 - const char **inbuf, const char *inbufend, size_t *written,
22210 - int do_flush)
22212 - struct __gconv_step *next_step = step + 1;
22213 - struct __gconv_step_data *next_data = data + 1;
22214 - ...
22216 - The `next_step' pointer references the next step information and
22217 - `next_data' the next data record. The call of the next function
22218 - therefore will look similar to this:
22220 - next_step->__fct (next_step, next_data, &outerr, outbuf,
22221 - written, 0)
22223 - But this is not yet all. Once the function call returns the
22224 - conversion function might have some more to do. If the return
22225 - value of the function is `__GCONV_EMPTY_INPUT', more room is
22226 - available in the output buffer. Unless the input buffer is empty
22227 - the conversion, functions start all over again and process the
22228 - rest of the input buffer. If the return value is not
22229 - `__GCONV_EMPTY_INPUT', something went wrong and we have to recover
22230 - from this.
22232 - A requirement for the conversion function is that the input buffer
22233 - pointer (the third argument) always point to the last character
22234 - that was put in converted form into the output buffer. This is
22235 - trivially true after the conversion performed in the current step,
22236 - but if the conversion functions deeper downstream stop
22237 - prematurely, not all characters from the output buffer are
22238 - consumed and, therefore, the input buffer pointers must be backed
22239 - off to the right position.
22241 - Correcting the input buffers is easy to do if the input and output
22242 - character sets have a fixed width for all characters. In this
22243 - situation we can compute how many characters are left in the
22244 - output buffer and, therefore, can correct the input buffer pointer
22245 - appropriately with a similar computation. Things are getting
22246 - tricky if either character set has characters represented with
22247 - variable length byte sequences, and it gets even more complicated
22248 - if the conversion has to take care of the state. In these cases
22249 - the conversion has to be performed once again, from the known
22250 - state before the initial conversion (i.e., if necessary the state
22251 - of the conversion has to be reset and the conversion loop has to be
22252 - executed again). The difference now is that it is known how much
22253 - input must be created, and the conversion can stop before
22254 - converting the first unused character. Once this is done the
22255 - input buffer pointers must be updated again and the function can
22256 - return.
22258 - One final thing should be mentioned. If it is necessary for the
22259 - conversion to know whether it is the first invocation (in case a
22260 - prolog has to be emitted), the conversion function should
22261 - increment the `__invocation_counter' element of the step data
22262 - structure just before returning to the caller. See the
22263 - description of the `struct __gconv_step_data' structure above for
22264 - more information on how this can be used.
22266 - The return value must be one of the following values:
22268 - `__GCONV_EMPTY_INPUT'
22269 - All input was consumed and there is room left in the output
22270 - buffer.
22272 - `__GCONV_FULL_OUTPUT'
22273 - No more room in the output buffer. In case this is not the
22274 - last step this value is propagated down from the call of the
22275 - next conversion function in the chain.
22277 - `__GCONV_INCOMPLETE_INPUT'
22278 - The input buffer is not entirely empty since it contains an
22279 - incomplete character sequence.
22281 - The following example provides a framework for a conversion
22282 - function. In case a new conversion has to be written the holes in
22283 - this implementation have to be filled and that is it.
22285 - int
22286 - gconv (struct __gconv_step *step, struct __gconv_step_data *data,
22287 - const char **inbuf, const char *inbufend, size_t *written,
22288 - int do_flush)
22290 - struct __gconv_step *next_step = step + 1;
22291 - struct __gconv_step_data *next_data = data + 1;
22292 - gconv_fct fct = next_step->__fct;
22293 - int status;
22295 - /* If the function is called with no input this means we have
22296 - to reset to the initial state. The possibly partly
22297 - converted input is dropped. */
22298 - if (do_flush)
22300 - status = __GCONV_OK;
22302 - /* Possible emit a byte sequence which put the state object
22303 - into the initial state. */
22305 - /* Call the steps down the chain if there are any but only
22306 - if we successfully emitted the escape sequence. */
22307 - if (status == __GCONV_OK && ! data->__is_last)
22308 - status = fct (next_step, next_data, NULL, NULL,
22309 - written, 1);
22311 - else
22313 - /* We preserve the initial values of the pointer variables. */
22314 - const char *inptr = *inbuf;
22315 - char *outbuf = data->__outbuf;
22316 - char *outend = data->__outbufend;
22317 - char *outptr;
22319 - do
22321 - /* Remember the start value for this round. */
22322 - inptr = *inbuf;
22323 - /* The outbuf buffer is empty. */
22324 - outptr = outbuf;
22326 - /* For stateful encodings the state must be safe here. */
22328 - /* Run the conversion loop. `status' is set
22329 - appropriately afterwards. */
22331 - /* If this is the last step, leave the loop. There is
22332 - nothing we can do. */
22333 - if (data->__is_last)
22335 - /* Store information about how many bytes are
22336 - available. */
22337 - data->__outbuf = outbuf;
22339 - /* If any non-reversible conversions were performed,
22340 - add the number to `*written'. */
22342 - break;
22345 - /* Write out all output that was produced. */
22346 - if (outbuf > outptr)
22348 - const char *outerr = data->__outbuf;
22349 - int result;
22351 - result = fct (next_step, next_data, &outerr,
22352 - outbuf, written, 0);
22354 - if (result != __GCONV_EMPTY_INPUT)
22356 - if (outerr != outbuf)
22358 - /* Reset the input buffer pointer. We
22359 - document here the complex case. */
22360 - size_t nstatus;
22362 - /* Reload the pointers. */
22363 - *inbuf = inptr;
22364 - outbuf = outptr;
22366 - /* Possibly reset the state. */
22368 - /* Redo the conversion, but this time
22369 - the end of the output buffer is at
22370 - `outerr'. */
22373 - /* Change the status. */
22374 - status = result;
22376 - else
22377 - /* All the output is consumed, we can make
22378 - another run if everything was ok. */
22379 - if (status == __GCONV_FULL_OUTPUT)
22380 - status = __GCONV_OK;
22383 - while (status == __GCONV_OK);
22385 - /* We finished one use of this step. */
22386 - ++data->__invocation_counter;
22389 - return status;
22392 - This information should be sufficient to write new modules. Anybody
22393 -doing so should also take a look at the available source code in the GNU
22394 -C library sources. It contains many examples of working and optimized
22395 -modules.
22397 -\x1f
22398 -File: libc.info, Node: Locales, Next: Message Translation, Prev: Character Set Handling, Up: Top
22400 -Locales and Internationalization
22401 -********************************
22403 - Different countries and cultures have varying conventions for how to
22404 -communicate. These conventions range from very simple ones, such as the
22405 -format for representing dates and times, to very complex ones, such as
22406 -the language spoken.
22408 - "Internationalization" of software means programming it to be able
22409 -to adapt to the user's favorite conventions. In ISO C,
22410 -internationalization works by means of "locales". Each locale
22411 -specifies a collection of conventions, one convention for each purpose.
22412 -The user chooses a set of conventions by specifying a locale (via
22413 -environment variables).
22415 - All programs inherit the chosen locale as part of their environment.
22416 -Provided the programs are written to obey the choice of locale, they
22417 -will follow the conventions preferred by the user.
22419 -* Menu:
22421 -* Effects of Locale:: Actions affected by the choice of
22422 - locale.
22423 -* Choosing Locale:: How the user specifies a locale.
22424 -* Locale Categories:: Different purposes for which you can
22425 - select a locale.
22426 -* Setting the Locale:: How a program specifies the locale
22427 - with library functions.
22428 -* Standard Locales:: Locale names available on all systems.
22429 -* Locale Information:: How to access the information for the locale.
22430 -* Formatting Numbers:: A dedicated function to format numbers.
22431 -* Yes-or-No Questions:: Check a Response against the locale.
22433 -\x1f
22434 -File: libc.info, Node: Effects of Locale, Next: Choosing Locale, Up: Locales
22436 -What Effects a Locale Has
22437 -=========================
22439 - Each locale specifies conventions for several purposes, including the
22440 -following:
22442 - * What multibyte character sequences are valid, and how they are
22443 - interpreted (*note Character Set Handling::).
22445 - * Classification of which characters in the local character set are
22446 - considered alphabetic, and upper- and lower-case conversion
22447 - conventions (*note Character Handling::).
22449 - * The collating sequence for the local language and character set
22450 - (*note Collation Functions::).
22452 - * Formatting of numbers and currency amounts (*note General
22453 - Numeric::).
22455 - * Formatting of dates and times (*note Formatting Calendar Time::).
22457 - * What language to use for output, including error messages (*note
22458 - Message Translation::).
22460 - * What language to use for user answers to yes-or-no questions
22461 - (*note Yes-or-No Questions::).
22463 - * What language to use for more complex user input. (The C library
22464 - doesn't yet help you implement this.)
22466 - Some aspects of adapting to the specified locale are handled
22467 -automatically by the library subroutines. For example, all your program
22468 -needs to do in order to use the collating sequence of the chosen locale
22469 -is to use `strcoll' or `strxfrm' to compare strings.
22471 - Other aspects of locales are beyond the comprehension of the library.
22472 -For example, the library can't automatically translate your program's
22473 -output messages into other languages. The only way you can support
22474 -output in the user's favorite language is to program this more or less
22475 -by hand. The C library provides functions to handle translations for
22476 -multiple languages easily.
22478 - This chapter discusses the mechanism by which you can modify the
22479 -current locale. The effects of the current locale on specific library
22480 -functions are discussed in more detail in the descriptions of those
22481 -functions.
22483 -\x1f
22484 -File: libc.info, Node: Choosing Locale, Next: Locale Categories, Prev: Effects of Locale, Up: Locales
22486 -Choosing a Locale
22487 -=================
22489 - The simplest way for the user to choose a locale is to set the
22490 -environment variable `LANG'. This specifies a single locale to use for
22491 -all purposes. For example, a user could specify a hypothetical locale
22492 -named `espana-castellano' to use the standard conventions of most of
22493 -Spain.
22495 - The set of locales supported depends on the operating system you are
22496 -using, and so do their names. We can't make any promises about what
22497 -locales will exist, except for one standard locale called `C' or
22498 -`POSIX'. Later we will describe how to construct locales.
22500 - A user also has the option of specifying different locales for
22501 -different purposes--in effect, choosing a mixture of multiple locales.
22503 - For example, the user might specify the locale `espana-castellano'
22504 -for most purposes, but specify the locale `usa-english' for currency
22505 -formatting. This might make sense if the user is a Spanish-speaking
22506 -American, working in Spanish, but representing monetary amounts in US
22507 -dollars.
22509 - Note that both locales `espana-castellano' and `usa-english', like
22510 -all locales, would include conventions for all of the purposes to which
22511 -locales apply. However, the user can choose to use each locale for a
22512 -particular subset of those purposes.
22514 -\x1f
22515 -File: libc.info, Node: Locale Categories, Next: Setting the Locale, Prev: Choosing Locale, Up: Locales
22517 -Categories of Activities that Locales Affect
22518 -============================================
22520 - The purposes that locales serve are grouped into "categories", so
22521 -that a user or a program can choose the locale for each category
22522 -independently. Here is a table of categories; each name is both an
22523 -environment variable that a user can set, and a macro name that you can
22524 -use as an argument to `setlocale'.
22526 -`LC_COLLATE'
22527 - This category applies to collation of strings (functions `strcoll'
22528 - and `strxfrm'); see *Note Collation Functions::.
22530 -`LC_CTYPE'
22531 - This category applies to classification and conversion of
22532 - characters, and to multibyte and wide characters; see *Note
22533 - Character Handling::, and *Note Character Set Handling::.
22535 -`LC_MONETARY'
22536 - This category applies to formatting monetary values; see *Note
22537 - General Numeric::.
22539 -`LC_NUMERIC'
22540 - This category applies to formatting numeric values that are not
22541 - monetary; see *Note General Numeric::.
22543 -`LC_TIME'
22544 - This category applies to formatting date and time values; see
22545 - *Note Formatting Calendar Time::.
22547 -`LC_MESSAGES'
22548 - This category applies to selecting the language used in the user
22549 - interface for message translation (*note The Uniforum approach::;
22550 - *note Message catalogs a la X/Open::) and contains regular
22551 - expressions for affirmative and negative responses.
22553 -`LC_ALL'
22554 - This is not an environment variable; it is only a macro that you
22555 - can use with `setlocale' to set a single locale for all purposes.
22556 - Setting this environment variable overwrites all selections by the
22557 - other `LC_*' variables or `LANG'.
22559 -`LANG'
22560 - If this environment variable is defined, its value specifies the
22561 - locale to use for all purposes except as overridden by the
22562 - variables above.
22564 - When developing the message translation functions it was felt that
22565 -the functionality provided by the variables above is not sufficient.
22566 -For example, it should be possible to specify more than one locale name.
22567 -Take a Swedish user who better speaks German than English, and a program
22568 -whose messages are output in English by default. It should be possible
22569 -to specify that the first choice of language is Swedish, the second
22570 -German, and if this also fails to use English. This is possible with
22571 -the variable `LANGUAGE'. For further description of this GNU extension
22572 -see *Note Using gettextized software::.
22574 diff -u -udbrN glibc-2.3.2/manual/libc.info-12 glibc-2.3.2-200304020432/manual/libc.info-12
22575 --- glibc-2.3.2/manual/libc.info-12 Sat Mar 1 02:39:41 2003
22576 +++ glibc-2.3.2-200304020432/manual/libc.info-12 Thu Jan 1 01:00:00 1970
22577 @@ -1,1156 +0,0 @@
22578 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
22580 -INFO-DIR-SECTION GNU libraries
22581 -START-INFO-DIR-ENTRY
22582 -* Libc: (libc). C library.
22583 -END-INFO-DIR-ENTRY
22585 - This file documents the GNU C library.
22587 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
22588 -Reference Manual', for Version 2.3.x.
22590 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
22591 -Free Software Foundation, Inc.
22593 - Permission is granted to copy, distribute and/or modify this document
22594 -under the terms of the GNU Free Documentation License, Version 1.1 or
22595 -any later version published by the Free Software Foundation; with the
22596 -Invariant Sections being "Free Software Needs Free Documentation" and
22597 -"GNU Lesser General Public License", the Front-Cover texts being (a)
22598 -(see below), and with the Back-Cover Texts being (b) (see below). A
22599 -copy of the license is included in the section entitled "GNU Free
22600 -Documentation License".
22602 - (a) The FSF's Front-Cover Text is:
22604 - A GNU Manual
22606 - (b) The FSF's Back-Cover Text is:
22608 - You have freedom to copy and modify this GNU Manual, like GNU
22609 -software. Copies published by the Free Software Foundation raise
22610 -funds for GNU development.
22612 -\x1f
22613 -File: libc.info, Node: Setting the Locale, Next: Standard Locales, Prev: Locale Categories, Up: Locales
22615 -How Programs Set the Locale
22616 -===========================
22618 - A C program inherits its locale environment variables when it starts
22619 -up. This happens automatically. However, these variables do not
22620 -automatically control the locale used by the library functions, because
22621 -ISO C says that all programs start by default in the standard `C'
22622 -locale. To use the locales specified by the environment, you must call
22623 -`setlocale'. Call it as follows:
22625 - setlocale (LC_ALL, "");
22627 -to select a locale based on the user choice of the appropriate
22628 -environment variables.
22630 - You can also use `setlocale' to specify a particular locale, for
22631 -general use or for a specific category.
22633 - The symbols in this section are defined in the header file
22634 -`locale.h'.
22636 - - Function: char * setlocale (int CATEGORY, const char *LOCALE)
22637 - The function `setlocale' sets the current locale for category
22638 - CATEGORY to LOCALE. A list of all the locales the system provides
22639 - can be created by running
22641 - locale -a
22643 - If CATEGORY is `LC_ALL', this specifies the locale for all
22644 - purposes. The other possible values of CATEGORY specify an single
22645 - purpose (*note Locale Categories::).
22647 - You can also use this function to find out the current locale by
22648 - passing a null pointer as the LOCALE argument. In this case,
22649 - `setlocale' returns a string that is the name of the locale
22650 - currently selected for category CATEGORY.
22652 - The string returned by `setlocale' can be overwritten by subsequent
22653 - calls, so you should make a copy of the string (*note Copying and
22654 - Concatenation::) if you want to save it past any further calls to
22655 - `setlocale'. (The standard library is guaranteed never to call
22656 - `setlocale' itself.)
22658 - You should not modify the string returned by `setlocale'. It might
22659 - be the same string that was passed as an argument in a previous
22660 - call to `setlocale'. One requirement is that the CATEGORY must be
22661 - the same in the call the string was returned and the one when the
22662 - string is passed in as LOCALE parameter.
22664 - When you read the current locale for category `LC_ALL', the value
22665 - encodes the entire combination of selected locales for all
22666 - categories. In this case, the value is not just a single locale
22667 - name. In fact, we don't make any promises about what it looks
22668 - like. But if you specify the same "locale name" with `LC_ALL' in
22669 - a subsequent call to `setlocale', it restores the same combination
22670 - of locale selections.
22672 - To be sure you can use the returned string encoding the currently
22673 - selected locale at a later time, you must make a copy of the
22674 - string. It is not guaranteed that the returned pointer remains
22675 - valid over time.
22677 - When the LOCALE argument is not a null pointer, the string returned
22678 - by `setlocale' reflects the newly-modified locale.
22680 - If you specify an empty string for LOCALE, this means to read the
22681 - appropriate environment variable and use its value to select the
22682 - locale for CATEGORY.
22684 - If a nonempty string is given for LOCALE, then the locale of that
22685 - name is used if possible.
22687 - If you specify an invalid locale name, `setlocale' returns a null
22688 - pointer and leaves the current locale unchanged.
22690 - Here is an example showing how you might use `setlocale' to
22691 -temporarily switch to a new locale.
22693 - #include <stddef.h>
22694 - #include <locale.h>
22695 - #include <stdlib.h>
22696 - #include <string.h>
22698 - void
22699 - with_other_locale (char *new_locale,
22700 - void (*subroutine) (int),
22701 - int argument)
22703 - char *old_locale, *saved_locale;
22705 - /* Get the name of the current locale. */
22706 - old_locale = setlocale (LC_ALL, NULL);
22708 - /* Copy the name so it won't be clobbered by `setlocale'. */
22709 - saved_locale = strdup (old_locale);
22710 - if (saved_locale == NULL)
22711 - fatal ("Out of memory");
22713 - /* Now change the locale and do some stuff with it. */
22714 - setlocale (LC_ALL, new_locale);
22715 - (*subroutine) (argument);
22717 - /* Restore the original locale. */
22718 - setlocale (LC_ALL, saved_locale);
22719 - free (saved_locale);
22722 - *Portability Note:* Some ISO C systems may define additional locale
22723 -categories, and future versions of the library will do so. For
22724 -portability, assume that any symbol beginning with `LC_' might be
22725 -defined in `locale.h'.
22727 -\x1f
22728 -File: libc.info, Node: Standard Locales, Next: Locale Information, Prev: Setting the Locale, Up: Locales
22730 -Standard Locales
22731 -================
22733 - The only locale names you can count on finding on all operating
22734 -systems are these three standard ones:
22736 -`"C"'
22737 - This is the standard C locale. The attributes and behavior it
22738 - provides are specified in the ISO C standard. When your program
22739 - starts up, it initially uses this locale by default.
22741 -`"POSIX"'
22742 - This is the standard POSIX locale. Currently, it is an alias for
22743 - the standard C locale.
22745 -`""'
22746 - The empty name says to select a locale based on environment
22747 - variables. *Note Locale Categories::.
22749 - Defining and installing named locales is normally a responsibility of
22750 -the system administrator at your site (or the person who installed the
22751 -GNU C library). It is also possible for the user to create private
22752 -locales. All this will be discussed later when describing the tool to
22753 -do so.
22755 - If your program needs to use something other than the `C' locale, it
22756 -will be more portable if you use whatever locale the user specifies
22757 -with the environment, rather than trying to specify some non-standard
22758 -locale explicitly by name. Remember, different machines might have
22759 -different sets of locales installed.
22761 -\x1f
22762 -File: libc.info, Node: Locale Information, Next: Formatting Numbers, Prev: Standard Locales, Up: Locales
22764 -Accessing Locale Information
22765 -============================
22767 - There are several ways to access locale information. The simplest
22768 -way is to let the C library itself do the work. Several of the
22769 -functions in this library implicitly access the locale data, and use
22770 -what information is provided by the currently selected locale. This is
22771 -how the locale model is meant to work normally.
22773 - As an example take the `strftime' function, which is meant to nicely
22774 -format date and time information (*note Formatting Calendar Time::).
22775 -Part of the standard information contained in the `LC_TIME' category is
22776 -the names of the months. Instead of requiring the programmer to take
22777 -care of providing the translations the `strftime' function does this
22778 -all by itself. `%A' in the format string is replaced by the
22779 -appropriate weekday name of the locale currently selected by `LC_TIME'.
22780 -This is an easy example, and wherever possible functions do things
22781 -automatically in this way.
22783 - But there are quite often situations when there is simply no function
22784 -to perform the task, or it is simply not possible to do the work
22785 -automatically. For these cases it is necessary to access the
22786 -information in the locale directly. To do this the C library provides
22787 -two functions: `localeconv' and `nl_langinfo'. The former is part of
22788 -ISO C and therefore portable, but has a brain-damaged interface. The
22789 -second is part of the Unix interface and is portable in as far as the
22790 -system follows the Unix standards.
22792 -* Menu:
22794 -* The Lame Way to Locale Data:: ISO C's `localeconv'.
22795 -* The Elegant and Fast Way:: X/Open's `nl_langinfo'.
22797 -\x1f
22798 -File: libc.info, Node: The Lame Way to Locale Data, Next: The Elegant and Fast Way, Up: Locale Information
22800 -`localeconv': It is portable but ...
22801 -------------------------------------
22803 - Together with the `setlocale' function the ISO C people invented the
22804 -`localeconv' function. It is a masterpiece of poor design. It is
22805 -expensive to use, not extendable, and not generally usable as it
22806 -provides access to only `LC_MONETARY' and `LC_NUMERIC' related
22807 -information. Nevertheless, if it is applicable to a given situation it
22808 -should be used since it is very portable. The function `strfmon'
22809 -formats monetary amounts according to the selected locale using this
22810 -information.
22812 - - Function: struct lconv * localeconv (void)
22813 - The `localeconv' function returns a pointer to a structure whose
22814 - components contain information about how numeric and monetary
22815 - values should be formatted in the current locale.
22817 - You should not modify the structure or its contents. The
22818 - structure might be overwritten by subsequent calls to
22819 - `localeconv', or by calls to `setlocale', but no other function in
22820 - the library overwrites this value.
22822 - - Data Type: struct lconv
22823 - `localeconv''s return value is of this data type. Its elements are
22824 - described in the following subsections.
22826 - If a member of the structure `struct lconv' has type `char', and the
22827 -value is `CHAR_MAX', it means that the current locale has no value for
22828 -that parameter.
22830 -* Menu:
22832 -* General Numeric:: Parameters for formatting numbers and
22833 - currency amounts.
22834 -* Currency Symbol:: How to print the symbol that identifies an
22835 - amount of money (e.g. `$').
22836 -* Sign of Money Amount:: How to print the (positive or negative) sign
22837 - for a monetary amount, if one exists.
22839 -\x1f
22840 -File: libc.info, Node: General Numeric, Next: Currency Symbol, Up: The Lame Way to Locale Data
22842 -Generic Numeric Formatting Parameters
22843 -.....................................
22845 - These are the standard members of `struct lconv'; there may be
22846 -others.
22848 -`char *decimal_point'
22849 -`char *mon_decimal_point'
22850 - These are the decimal-point separators used in formatting
22851 - non-monetary and monetary quantities, respectively. In the `C'
22852 - locale, the value of `decimal_point' is `"."', and the value of
22853 - `mon_decimal_point' is `""'.
22855 -`char *thousands_sep'
22856 -`char *mon_thousands_sep'
22857 - These are the separators used to delimit groups of digits to the
22858 - left of the decimal point in formatting non-monetary and monetary
22859 - quantities, respectively. In the `C' locale, both members have a
22860 - value of `""' (the empty string).
22862 -`char *grouping'
22863 -`char *mon_grouping'
22864 - These are strings that specify how to group the digits to the left
22865 - of the decimal point. `grouping' applies to non-monetary
22866 - quantities and `mon_grouping' applies to monetary quantities. Use
22867 - either `thousands_sep' or `mon_thousands_sep' to separate the digit
22868 - groups.
22870 - Each member of these strings is to be interpreted as an integer
22871 - value of type `char'. Successive numbers (from left to right)
22872 - give the sizes of successive groups (from right to left, starting
22873 - at the decimal point.) The last member is either `0', in which
22874 - case the previous member is used over and over again for all the
22875 - remaining groups, or `CHAR_MAX', in which case there is no more
22876 - grouping--or, put another way, any remaining digits form one large
22877 - group without separators.
22879 - For example, if `grouping' is `"\04\03\02"', the correct grouping
22880 - for the number `123456787654321' is `12', `34', `56', `78', `765',
22881 - `4321'. This uses a group of 4 digits at the end, preceded by a
22882 - group of 3 digits, preceded by groups of 2 digits (as many as
22883 - needed). With a separator of `,', the number would be printed as
22884 - `12,34,56,78,765,4321'.
22886 - A value of `"\03"' indicates repeated groups of three digits, as
22887 - normally used in the U.S.
22889 - In the standard `C' locale, both `grouping' and `mon_grouping'
22890 - have a value of `""'. This value specifies no grouping at all.
22892 -`char int_frac_digits'
22893 -`char frac_digits'
22894 - These are small integers indicating how many fractional digits (to
22895 - the right of the decimal point) should be displayed in a monetary
22896 - value in international and local formats, respectively. (Most
22897 - often, both members have the same value.)
22899 - In the standard `C' locale, both of these members have the value
22900 - `CHAR_MAX', meaning "unspecified". The ISO standard doesn't say
22901 - what to do when you find this value; we recommend printing no
22902 - fractional digits. (This locale also specifies the empty string
22903 - for `mon_decimal_point', so printing any fractional digits would be
22904 - confusing!)
22906 -\x1f
22907 -File: libc.info, Node: Currency Symbol, Next: Sign of Money Amount, Prev: General Numeric, Up: The Lame Way to Locale Data
22909 -Printing the Currency Symbol
22910 -............................
22912 - These members of the `struct lconv' structure specify how to print
22913 -the symbol to identify a monetary value--the international analog of
22914 -`$' for US dollars.
22916 - Each country has two standard currency symbols. The "local currency
22917 -symbol" is used commonly within the country, while the "international
22918 -currency symbol" is used internationally to refer to that country's
22919 -currency when it is necessary to indicate the country unambiguously.
22921 - For example, many countries use the dollar as their monetary unit,
22922 -and when dealing with international currencies it's important to specify
22923 -that one is dealing with (say) Canadian dollars instead of U.S. dollars
22924 -or Australian dollars. But when the context is known to be Canada,
22925 -there is no need to make this explicit--dollar amounts are implicitly
22926 -assumed to be in Canadian dollars.
22928 -`char *currency_symbol'
22929 - The local currency symbol for the selected locale.
22931 - In the standard `C' locale, this member has a value of `""' (the
22932 - empty string), meaning "unspecified". The ISO standard doesn't
22933 - say what to do when you find this value; we recommend you simply
22934 - print the empty string as you would print any other string pointed
22935 - to by this variable.
22937 -`char *int_curr_symbol'
22938 - The international currency symbol for the selected locale.
22940 - The value of `int_curr_symbol' should normally consist of a
22941 - three-letter abbreviation determined by the international standard
22942 - `ISO 4217 Codes for the Representation of Currency and Funds',
22943 - followed by a one-character separator (often a space).
22945 - In the standard `C' locale, this member has a value of `""' (the
22946 - empty string), meaning "unspecified". We recommend you simply
22947 - print the empty string as you would print any other string pointed
22948 - to by this variable.
22950 -`char p_cs_precedes'
22951 -`char n_cs_precedes'
22952 -`char int_p_cs_precedes'
22953 -`char int_n_cs_precedes'
22954 - These members are `1' if the `currency_symbol' or
22955 - `int_curr_symbol' strings should precede the value of a monetary
22956 - amount, or `0' if the strings should follow the value. The
22957 - `p_cs_precedes' and `int_p_cs_precedes' members apply to positive
22958 - amounts (or zero), and the `n_cs_precedes' and `int_n_cs_precedes'
22959 - members apply to negative amounts.
22961 - In the standard `C' locale, all of these members have a value of
22962 - `CHAR_MAX', meaning "unspecified". The ISO standard doesn't say
22963 - what to do when you find this value. We recommend printing the
22964 - currency symbol before the amount, which is right for most
22965 - countries. In other words, treat all nonzero values alike in
22966 - these members.
22968 - The members with the `int_' prefix apply to the `int_curr_symbol'
22969 - while the other two apply to `currency_symbol'.
22971 -`char p_sep_by_space'
22972 -`char n_sep_by_space'
22973 -`char int_p_sep_by_space'
22974 -`char int_n_sep_by_space'
22975 - These members are `1' if a space should appear between the
22976 - `currency_symbol' or `int_curr_symbol' strings and the amount, or
22977 - `0' if no space should appear. The `p_sep_by_space' and
22978 - `int_p_sep_by_space' members apply to positive amounts (or zero),
22979 - and the `n_sep_by_space' and `int_n_sep_by_space' members apply to
22980 - negative amounts.
22982 - In the standard `C' locale, all of these members have a value of
22983 - `CHAR_MAX', meaning "unspecified". The ISO standard doesn't say
22984 - what you should do when you find this value; we suggest you treat
22985 - it as 1 (print a space). In other words, treat all nonzero values
22986 - alike in these members.
22988 - The members with the `int_' prefix apply to the `int_curr_symbol'
22989 - while the other two apply to `currency_symbol'. There is one
22990 - specialty with the `int_curr_symbol', though. Since all legal
22991 - values contain a space at the end the string one either printf
22992 - this space (if the currency symbol must appear in front and must
22993 - be separated) or one has to avoid printing this character at all
22994 - (especially when at the end of the string).
22996 -\x1f
22997 -File: libc.info, Node: Sign of Money Amount, Prev: Currency Symbol, Up: The Lame Way to Locale Data
22999 -Printing the Sign of a Monetary Amount
23000 -......................................
23002 - These members of the `struct lconv' structure specify how to print
23003 -the sign (if any) of a monetary value.
23005 -`char *positive_sign'
23006 -`char *negative_sign'
23007 - These are strings used to indicate positive (or zero) and negative
23008 - monetary quantities, respectively.
23010 - In the standard `C' locale, both of these members have a value of
23011 - `""' (the empty string), meaning "unspecified".
23013 - The ISO standard doesn't say what to do when you find this value;
23014 - we recommend printing `positive_sign' as you find it, even if it is
23015 - empty. For a negative value, print `negative_sign' as you find it
23016 - unless both it and `positive_sign' are empty, in which case print
23017 - `-' instead. (Failing to indicate the sign at all seems rather
23018 - unreasonable.)
23020 -`char p_sign_posn'
23021 -`char n_sign_posn'
23022 -`char int_p_sign_posn'
23023 -`char int_n_sign_posn'
23024 - These members are small integers that indicate how to position the
23025 - sign for nonnegative and negative monetary quantities,
23026 - respectively. (The string used by the sign is what was specified
23027 - with `positive_sign' or `negative_sign'.) The possible values are
23028 - as follows:
23030 - `0'
23031 - The currency symbol and quantity should be surrounded by
23032 - parentheses.
23034 - `1'
23035 - Print the sign string before the quantity and currency symbol.
23037 - `2'
23038 - Print the sign string after the quantity and currency symbol.
23040 - `3'
23041 - Print the sign string right before the currency symbol.
23043 - `4'
23044 - Print the sign string right after the currency symbol.
23046 - `CHAR_MAX'
23047 - "Unspecified". Both members have this value in the standard
23048 - `C' locale.
23050 - The ISO standard doesn't say what you should do when the value is
23051 - `CHAR_MAX'. We recommend you print the sign after the currency
23052 - symbol.
23054 - The members with the `int_' prefix apply to the `int_curr_symbol'
23055 - while the other two apply to `currency_symbol'.
23057 -\x1f
23058 -File: libc.info, Node: The Elegant and Fast Way, Prev: The Lame Way to Locale Data, Up: Locale Information
23060 -Pinpoint Access to Locale Data
23061 -------------------------------
23063 - When writing the X/Open Portability Guide the authors realized that
23064 -the `localeconv' function is not enough to provide reasonable access to
23065 -locale information. The information which was meant to be available in
23066 -the locale (as later specified in the POSIX.1 standard) requires more
23067 -ways to access it. Therefore the `nl_langinfo' function was introduced.
23069 - - Function: char * nl_langinfo (nl_item ITEM)
23070 - The `nl_langinfo' function can be used to access individual
23071 - elements of the locale categories. Unlike the `localeconv'
23072 - function, which returns all the information, `nl_langinfo' lets
23073 - the caller select what information it requires. This is very fast
23074 - and it is not a problem to call this function multiple times.
23076 - A second advantage is that in addition to the numeric and monetary
23077 - formatting information, information from the `LC_TIME' and
23078 - `LC_MESSAGES' categories is available.
23080 - The type `nl_type' is defined in `nl_types.h'. The argument ITEM
23081 - is a numeric value defined in the header `langinfo.h'. The X/Open
23082 - standard defines the following values:
23084 - `CODESET'
23085 - `nl_langinfo' returns a string with the name of the coded
23086 - character set used in the selected locale.
23088 - `ABDAY_1'
23089 - `ABDAY_2'
23090 - `ABDAY_3'
23091 - `ABDAY_4'
23092 - `ABDAY_5'
23093 - `ABDAY_6'
23094 - `ABDAY_7'
23095 - `nl_langinfo' returns the abbreviated weekday name. `ABDAY_1'
23096 - corresponds to Sunday.
23098 - `DAY_1'
23099 - `DAY_2'
23100 - `DAY_3'
23101 - `DAY_4'
23102 - `DAY_5'
23103 - `DAY_6'
23104 - `DAY_7'
23105 - Similar to `ABDAY_1' etc., but here the return value is the
23106 - unabbreviated weekday name.
23108 - `ABMON_1'
23109 - `ABMON_2'
23110 - `ABMON_3'
23111 - `ABMON_4'
23112 - `ABMON_5'
23113 - `ABMON_6'
23114 - `ABMON_7'
23115 - `ABMON_8'
23116 - `ABMON_9'
23117 - `ABMON_10'
23118 - `ABMON_11'
23119 - `ABMON_12'
23120 - The return value is abbreviated name of the month. `ABMON_1'
23121 - corresponds to January.
23123 - `MON_1'
23124 - `MON_2'
23125 - `MON_3'
23126 - `MON_4'
23127 - `MON_5'
23128 - `MON_6'
23129 - `MON_7'
23130 - `MON_8'
23131 - `MON_9'
23132 - `MON_10'
23133 - `MON_11'
23134 - `MON_12'
23135 - Similar to `ABMON_1' etc., but here the month names are not
23136 - abbreviated. Here the first value `MON_1' also corresponds
23137 - to January.
23139 - `AM_STR'
23140 - `PM_STR'
23141 - The return values are strings which can be used in the
23142 - representation of time as an hour from 1 to 12 plus an am/pm
23143 - specifier.
23145 - Note that in locales which do not use this time representation
23146 - these strings might be empty, in which case the am/pm format
23147 - cannot be used at all.
23149 - `D_T_FMT'
23150 - The return value can be used as a format string for
23151 - `strftime' to represent time and date in a locale-specific
23152 - way.
23154 - `D_FMT'
23155 - The return value can be used as a format string for
23156 - `strftime' to represent a date in a locale-specific way.
23158 - `T_FMT'
23159 - The return value can be used as a format string for
23160 - `strftime' to represent time in a locale-specific way.
23162 - `T_FMT_AMPM'
23163 - The return value can be used as a format string for
23164 - `strftime' to represent time in the am/pm format.
23166 - Note that if the am/pm format does not make any sense for the
23167 - selected locale, the return value might be the same as the
23168 - one for `T_FMT'.
23170 - `ERA'
23171 - The return value represents the era used in the current
23172 - locale.
23174 - Most locales do not define this value. An example of a
23175 - locale which does define this value is the Japanese one. In
23176 - Japan, the traditional representation of dates includes the
23177 - name of the era corresponding to the then-emperor's reign.
23179 - Normally it should not be necessary to use this value
23180 - directly. Specifying the `E' modifier in their format
23181 - strings causes the `strftime' functions to use this
23182 - information. The format of the returned string is not
23183 - specified, and therefore you should not assume knowledge of
23184 - it on different systems.
23186 - `ERA_YEAR'
23187 - The return value gives the year in the relevant era of the
23188 - locale. As for `ERA' it should not be necessary to use this
23189 - value directly.
23191 - `ERA_D_T_FMT'
23192 - This return value can be used as a format string for
23193 - `strftime' to represent dates and times in a locale-specific
23194 - era-based way.
23196 - `ERA_D_FMT'
23197 - This return value can be used as a format string for
23198 - `strftime' to represent a date in a locale-specific era-based
23199 - way.
23201 - `ERA_T_FMT'
23202 - This return value can be used as a format string for
23203 - `strftime' to represent time in a locale-specific era-based
23204 - way.
23206 - `ALT_DIGITS'
23207 - The return value is a representation of up to 100 values used
23208 - to represent the values 0 to 99. As for `ERA' this value is
23209 - not intended to be used directly, but instead indirectly
23210 - through the `strftime' function. When the modifier `O' is
23211 - used in a format which would otherwise use numerals to
23212 - represent hours, minutes, seconds, weekdays, months, or
23213 - weeks, the appropriate value for the locale is used instead.
23215 - `INT_CURR_SYMBOL'
23216 - The same as the value returned by `localeconv' in the
23217 - `int_curr_symbol' element of the `struct lconv'.
23219 - `CURRENCY_SYMBOL'
23220 - `CRNCYSTR'
23221 - The same as the value returned by `localeconv' in the
23222 - `currency_symbol' element of the `struct lconv'.
23224 - `CRNCYSTR' is a deprecated alias still required by Unix98.
23226 - `MON_DECIMAL_POINT'
23227 - The same as the value returned by `localeconv' in the
23228 - `mon_decimal_point' element of the `struct lconv'.
23230 - `MON_THOUSANDS_SEP'
23231 - The same as the value returned by `localeconv' in the
23232 - `mon_thousands_sep' element of the `struct lconv'.
23234 - `MON_GROUPING'
23235 - The same as the value returned by `localeconv' in the
23236 - `mon_grouping' element of the `struct lconv'.
23238 - `POSITIVE_SIGN'
23239 - The same as the value returned by `localeconv' in the
23240 - `positive_sign' element of the `struct lconv'.
23242 - `NEGATIVE_SIGN'
23243 - The same as the value returned by `localeconv' in the
23244 - `negative_sign' element of the `struct lconv'.
23246 - `INT_FRAC_DIGITS'
23247 - The same as the value returned by `localeconv' in the
23248 - `int_frac_digits' element of the `struct lconv'.
23250 - `FRAC_DIGITS'
23251 - The same as the value returned by `localeconv' in the
23252 - `frac_digits' element of the `struct lconv'.
23254 - `P_CS_PRECEDES'
23255 - The same as the value returned by `localeconv' in the
23256 - `p_cs_precedes' element of the `struct lconv'.
23258 - `P_SEP_BY_SPACE'
23259 - The same as the value returned by `localeconv' in the
23260 - `p_sep_by_space' element of the `struct lconv'.
23262 - `N_CS_PRECEDES'
23263 - The same as the value returned by `localeconv' in the
23264 - `n_cs_precedes' element of the `struct lconv'.
23266 - `N_SEP_BY_SPACE'
23267 - The same as the value returned by `localeconv' in the
23268 - `n_sep_by_space' element of the `struct lconv'.
23270 - `P_SIGN_POSN'
23271 - The same as the value returned by `localeconv' in the
23272 - `p_sign_posn' element of the `struct lconv'.
23274 - `N_SIGN_POSN'
23275 - The same as the value returned by `localeconv' in the
23276 - `n_sign_posn' element of the `struct lconv'.
23278 - `INT_P_CS_PRECEDES'
23279 - The same as the value returned by `localeconv' in the
23280 - `int_p_cs_precedes' element of the `struct lconv'.
23282 - `INT_P_SEP_BY_SPACE'
23283 - The same as the value returned by `localeconv' in the
23284 - `int_p_sep_by_space' element of the `struct lconv'.
23286 - `INT_N_CS_PRECEDES'
23287 - The same as the value returned by `localeconv' in the
23288 - `int_n_cs_precedes' element of the `struct lconv'.
23290 - `INT_N_SEP_BY_SPACE'
23291 - The same as the value returned by `localeconv' in the
23292 - `int_n_sep_by_space' element of the `struct lconv'.
23294 - `INT_P_SIGN_POSN'
23295 - The same as the value returned by `localeconv' in the
23296 - `int_p_sign_posn' element of the `struct lconv'.
23298 - `INT_N_SIGN_POSN'
23299 - The same as the value returned by `localeconv' in the
23300 - `int_n_sign_posn' element of the `struct lconv'.
23302 - `DECIMAL_POINT'
23303 - `RADIXCHAR'
23304 - The same as the value returned by `localeconv' in the
23305 - `decimal_point' element of the `struct lconv'.
23307 - The name `RADIXCHAR' is a deprecated alias still used in
23308 - Unix98.
23310 - `THOUSANDS_SEP'
23311 - `THOUSEP'
23312 - The same as the value returned by `localeconv' in the
23313 - `thousands_sep' element of the `struct lconv'.
23315 - The name `THOUSEP' is a deprecated alias still used in Unix98.
23317 - `GROUPING'
23318 - The same as the value returned by `localeconv' in the
23319 - `grouping' element of the `struct lconv'.
23321 - `YESEXPR'
23322 - The return value is a regular expression which can be used
23323 - with the `regex' function to recognize a positive response to
23324 - a yes/no question. The GNU C library provides the `rpmatch'
23325 - function for easier handling in applications.
23327 - `NOEXPR'
23328 - The return value is a regular expression which can be used
23329 - with the `regex' function to recognize a negative response to
23330 - a yes/no question.
23332 - `YESSTR'
23333 - The return value is a locale-specific translation of the
23334 - positive response to a yes/no question.
23336 - Using this value is deprecated since it is a very special
23337 - case of message translation, and is better handled by the
23338 - message translation functions (*note Message Translation::).
23340 - The use of this symbol is deprecated. Instead message
23341 - translation should be used.
23343 - `NOSTR'
23344 - The return value is a locale-specific translation of the
23345 - negative response to a yes/no question. What is said for
23346 - `YESSTR' is also true here.
23348 - The use of this symbol is deprecated. Instead message
23349 - translation should be used.
23351 - The file `langinfo.h' defines a lot more symbols but none of them
23352 - is official. Using them is not portable, and the format of the
23353 - return values might change. Therefore we recommended you not use
23354 - them.
23356 - Note that the return value for any valid argument can be used for
23357 - in all situations (with the possible exception of the am/pm time
23358 - formatting codes). If the user has not selected any locale for the
23359 - appropriate category, `nl_langinfo' returns the information from
23360 - the `"C"' locale. It is therefore possible to use this function as
23361 - shown in the example below.
23363 - If the argument ITEM is not valid, a pointer to an empty string is
23364 - returned.
23366 - An example of `nl_langinfo' usage is a function which has to print a
23367 -given date and time in a locale-specific way. At first one might think
23368 -that, since `strftime' internally uses the locale information, writing
23369 -something like the following is enough:
23371 - size_t
23372 - i18n_time_n_data (char *s, size_t len, const struct tm *tp)
23374 - return strftime (s, len, "%X %D", tp);
23377 - The format contains no weekday or month names and therefore is
23378 -internationally usable. Wrong! The output produced is something like
23379 -`"hh:mm:ss MM/DD/YY"'. This format is only recognizable in the USA.
23380 -Other countries use different formats. Therefore the function should
23381 -be rewritten like this:
23383 - size_t
23384 - i18n_time_n_data (char *s, size_t len, const struct tm *tp)
23386 - return strftime (s, len, nl_langinfo (D_T_FMT), tp);
23389 - Now it uses the date and time format of the locale selected when the
23390 -program runs. If the user selects the locale correctly there should
23391 -never be a misunderstanding over the time and date format.
23393 -\x1f
23394 -File: libc.info, Node: Formatting Numbers, Next: Yes-or-No Questions, Prev: Locale Information, Up: Locales
23396 -A dedicated function to format numbers
23397 -======================================
23399 - We have seen that the structure returned by `localeconv' as well as
23400 -the values given to `nl_langinfo' allow you to retrieve the various
23401 -pieces of locale-specific information to format numbers and monetary
23402 -amounts. We have also seen that the underlying rules are quite complex.
23404 - Therefore the X/Open standards introduce a function which uses such
23405 -locale information, making it easier for the user to format numbers
23406 -according to these rules.
23408 - - Function: ssize_t strfmon (char *S, size_t MAXSIZE, const char
23409 - *FORMAT, ...)
23410 - The `strfmon' function is similar to the `strftime' function in
23411 - that it takes a buffer, its size, a format string, and values to
23412 - write into the buffer as text in a form specified by the format
23413 - string. Like `strftime', the function also returns the number of
23414 - bytes written into the buffer.
23416 - There are two differences: `strfmon' can take more than one
23417 - argument, and, of course, the format specification is different.
23418 - Like `strftime', the format string consists of normal text, which
23419 - is output as is, and format specifiers, which are indicated by a
23420 - `%'. Immediately after the `%', you can optionally specify
23421 - various flags and formatting information before the main
23422 - formatting character, in a similar way to `printf':
23424 - * Immediately following the `%' there can be one or more of the
23425 - following flags:
23426 - `=F'
23427 - The single byte character F is used for this field as
23428 - the numeric fill character. By default this character
23429 - is a space character. Filling with this character is
23430 - only performed if a left precision is specified. It is
23431 - not just to fill to the given field width.
23433 - `^'
23434 - The number is printed without grouping the digits
23435 - according to the rules of the current locale. By
23436 - default grouping is enabled.
23438 - `+', `('
23439 - At most one of these flags can be used. They select
23440 - which format to represent the sign of a currency amount.
23441 - By default, and if `+' is given, the locale equivalent
23442 - of +/- is used. If `(' is given, negative amounts are
23443 - enclosed in parentheses. The exact format is determined
23444 - by the values of the `LC_MONETARY' category of the
23445 - locale selected at program runtime.
23447 - `!'
23448 - The output will not contain the currency symbol.
23450 - `-'
23451 - The output will be formatted left-justified instead of
23452 - right-justified if it does not fill the entire field
23453 - width.
23455 - The next part of a specification is an optional field width. If no
23456 - width is specified 0 is taken. During output, the function first
23457 - determines how much space is required. If it requires at least as
23458 - many characters as given by the field width, it is output using as
23459 - much space as necessary. Otherwise, it is extended to use the
23460 - full width by filling with the space character. The presence or
23461 - absence of the `-' flag determines the side at which such padding
23462 - occurs. If present, the spaces are added at the right making the
23463 - output left-justified, and vice versa.
23465 - So far the format looks familiar, being similar to the `printf' and
23466 - `strftime' formats. However, the next two optional fields
23467 - introduce something new. The first one is a `#' character followed
23468 - by a decimal digit string. The value of the digit string
23469 - specifies the number of _digit_ positions to the left of the
23470 - decimal point (or equivalent). This does _not_ include the
23471 - grouping character when the `^' flag is not given. If the space
23472 - needed to print the number does not fill the whole width, the
23473 - field is padded at the left side with the fill character, which
23474 - can be selected using the `=' flag and by default is a space. For
23475 - example, if the field width is selected as 6 and the number is
23476 - 123, the fill character is `*' the result will be `***123'.
23478 - The second optional field starts with a `.' (period) and consists
23479 - of another decimal digit string. Its value describes the number of
23480 - characters printed after the decimal point. The default is
23481 - selected from the current locale (`frac_digits',
23482 - `int_frac_digits', see *note General Numeric::). If the exact
23483 - representation needs more digits than given by the field width,
23484 - the displayed value is rounded. If the number of fractional
23485 - digits is selected to be zero, no decimal point is printed.
23487 - As a GNU extension, the `strfmon' implementation in the GNU libc
23488 - allows an optional `L' next as a format modifier. If this modifier
23489 - is given, the argument is expected to be a `long double' instead of
23490 - a `double' value.
23492 - Finally, the last component is a format specifier. There are three
23493 - specifiers defined:
23495 - `i'
23496 - Use the locale's rules for formatting an international
23497 - currency value.
23499 - `n'
23500 - Use the locale's rules for formatting a national currency
23501 - value.
23503 - `%'
23504 - Place a `%' in the output. There must be no flag, width
23505 - specifier or modifier given, only `%%' is allowed.
23507 - As for `printf', the function reads the format string from left to
23508 - right and uses the values passed to the function following the
23509 - format string. The values are expected to be either of type
23510 - `double' or `long double', depending on the presence of the
23511 - modifier `L'. The result is stored in the buffer pointed to by S.
23512 - At most MAXSIZE characters are stored.
23514 - The return value of the function is the number of characters
23515 - stored in S, including the terminating `NULL' byte. If the number
23516 - of characters stored would exceed MAXSIZE, the function returns -1
23517 - and the content of the buffer S is unspecified. In this case
23518 - `errno' is set to `E2BIG'.
23520 - A few examples should make clear how the function works. It is
23521 -assumed that all the following pieces of code are executed in a program
23522 -which uses the USA locale (`en_US'). The simplest form of the format
23523 -is this:
23525 - strfmon (buf, 100, "@%n@%n@%n@", 123.45, -567.89, 12345.678);
23527 -The output produced is
23528 - "@$123.45@-$567.89@$12,345.68@"
23530 - We can notice several things here. First, the widths of the output
23531 -numbers are different. We have not specified a width in the format
23532 -string, and so this is no wonder. Second, the third number is printed
23533 -using thousands separators. The thousands separator for the `en_US'
23534 -locale is a comma. The number is also rounded. .678 is rounded to .68
23535 -since the format does not specify a precision and the default value in
23536 -the locale is 2. Finally, note that the national currency symbol is
23537 -printed since `%n' was used, not `i'. The next example shows how we
23538 -can align the output.
23540 - strfmon (buf, 100, "@%=*11n@%=*11n@%=*11n@", 123.45, -567.89, 12345.678);
23542 -The output this time is:
23544 - "@ $123.45@ -$567.89@ $12,345.68@"
23546 - Two things stand out. Firstly, all fields have the same width
23547 -(eleven characters) since this is the width given in the format and
23548 -since no number required more characters to be printed. The second
23549 -important point is that the fill character is not used. This is
23550 -correct since the white space was not used to achieve a precision given
23551 -by a `#' modifier, but instead to fill to the given width. The
23552 -difference becomes obvious if we now add a width specification.
23554 - strfmon (buf, 100, "@%=*11#5n@%=*11#5n@%=*11#5n@",
23555 - 123.45, -567.89, 12345.678);
23557 -The output is
23559 - "@ $***123.45@-$***567.89@ $12,456.68@"
23561 - Here we can see that all the currency symbols are now aligned, and
23562 -that the space between the currency sign and the number is filled with
23563 -the selected fill character. Note that although the width is selected
23564 -to be 5 and 123.45 has three digits left of the decimal point, the
23565 -space is filled with three asterisks. This is correct since, as
23566 -explained above, the width does not include the positions used to store
23567 -thousands separators. One last example should explain the remaining
23568 -functionality.
23570 - strfmon (buf, 100, "@%=0(16#5.3i@%=0(16#5.3i@%=0(16#5.3i@",
23571 - 123.45, -567.89, 12345.678);
23573 -This rather complex format string produces the following output:
23575 - "@ USD 000123,450 @(USD 000567.890)@ USD 12,345.678 @"
23577 - The most noticeable change is the alternative way of representing
23578 -negative numbers. In financial circles this is often done using
23579 -parentheses, and this is what the `(' flag selected. The fill
23580 -character is now `0'. Note that this `0' character is not regarded as
23581 -a numeric zero, and therefore the first and second numbers are not
23582 -printed using a thousands separator. Since we used the format
23583 -specifier `i' instead of `n', the international form of the currency
23584 -symbol is used. This is a four letter string, in this case `"USD "'.
23585 -The last point is that since the precision right of the decimal point
23586 -is selected to be three, the first and second numbers are printed with
23587 -an extra zero at the end and the third number is printed without
23588 -rounding.
23590 -\x1f
23591 -File: libc.info, Node: Yes-or-No Questions, Prev: Formatting Numbers, Up: Locales
23593 -Yes-or-No Questions
23594 -===================
23596 - Some non GUI programs ask a yes-or-no question. If the messages
23597 -(especially the questions) are translated into foreign languages, be
23598 -sure that you localize the answers too. It would be very bad habit to
23599 -ask a question in one language and request the answer in another, often
23600 -English.
23602 - The GNU C library contains `rpmatch' to give applications easy
23603 -access to the corresponding locale definitions.
23605 - - Function: int rpmatch (const char *RESPONSE)
23606 - The function `rpmatch' checks the string in RESPONSE whether or
23607 - not it is a correct yes-or-no answer and if yes, which one. The
23608 - check uses the `YESEXPR' and `NOEXPR' data in the `LC_MESSAGES'
23609 - category of the currently selected locale. The return value is as
23610 - follows:
23612 - `1'
23613 - The user entered an affirmative answer.
23615 - `0'
23616 - The user entered a negative answer.
23618 - `-1'
23619 - The answer matched neither the `YESEXPR' nor the `NOEXPR'
23620 - regular expression.
23622 - This function is not standardized but available beside in GNU libc
23623 - at least also in the IBM AIX library.
23625 -This function would normally be used like this:
23627 - ...
23628 - /* Use a safe default. */
23629 - _Bool doit = false;
23631 - fputs (gettext ("Do you really want to do this? "), stdout);
23632 - fflush (stdout);
23633 - /* Prepare the `getline' call. */
23634 - line = NULL;
23635 - len = 0;
23636 - while (getline (&line, &len, stdout) >= 0)
23638 - /* Check the response. */
23639 - int res = rpmatch (line);
23640 - if (res >= 0)
23642 - /* We got a definitive answer. */
23643 - if (res > 0)
23644 - doit = true;
23645 - break;
23648 - /* Free what `getline' allocated. */
23649 - free (line);
23651 - Note that the loop continues until an read error is detected or
23652 -until a definitive (positive or negative) answer is read.
23654 -\x1f
23655 -File: libc.info, Node: Message Translation, Next: Searching and Sorting, Prev: Locales, Up: Top
23657 -Message Translation
23658 -*******************
23660 - The program's interface with the human should be designed in a way to
23661 -ease the human the task. One of the possibilities is to use messages in
23662 -whatever language the user prefers.
23664 - Printing messages in different languages can be implemented in
23665 -different ways. One could add all the different languages in the
23666 -source code and add among the variants every time a message has to be
23667 -printed. This is certainly no good solution since extending the set of
23668 -languages is difficult (the code must be changed) and the code itself
23669 -can become really big with dozens of message sets.
23671 - A better solution is to keep the message sets for each language are
23672 -kept in separate files which are loaded at runtime depending on the
23673 -language selection of the user.
23675 - The GNU C Library provides two different sets of functions to support
23676 -message translation. The problem is that neither of the interfaces is
23677 -officially defined by the POSIX standard. The `catgets' family of
23678 -functions is defined in the X/Open standard but this is derived from
23679 -industry decisions and therefore not necessarily based on reasonable
23680 -decisions.
23682 - As mentioned above the message catalog handling provides easy
23683 -extendibility by using external data files which contain the message
23684 -translations. I.e., these files contain for each of the messages used
23685 -in the program a translation for the appropriate language. So the tasks
23686 -of the message handling functions are
23688 - * locate the external data file with the appropriate translations.
23690 - * load the data and make it possible to address the messages
23692 - * map a given key to the translated message
23694 - The two approaches mainly differ in the implementation of this last
23695 -step. The design decisions made for this influences the whole rest.
23697 -* Menu:
23699 -* Message catalogs a la X/Open:: The `catgets' family of functions.
23700 -* The Uniforum approach:: The `gettext' family of functions.
23702 -\x1f
23703 -File: libc.info, Node: Message catalogs a la X/Open, Next: The Uniforum approach, Up: Message Translation
23705 -X/Open Message Catalog Handling
23706 -===============================
23708 - The `catgets' functions are based on the simple scheme:
23710 - Associate every message to translate in the source code with a
23711 - unique identifier. To retrieve a message from a catalog file
23712 - solely the identifier is used.
23714 - This means for the author of the program that s/he will have to make
23715 -sure the meaning of the identifier in the program code and in the
23716 -message catalogs are always the same.
23718 - Before a message can be translated the catalog file must be located.
23719 -The user of the program must be able to guide the responsible function
23720 -to find whatever catalog the user wants. This is separated from what
23721 -the programmer had in mind.
23723 - All the types, constants and functions for the `catgets' functions
23724 -are defined/declared in the `nl_types.h' header file.
23726 -* Menu:
23728 -* The catgets Functions:: The `catgets' function family.
23729 -* The message catalog files:: Format of the message catalog files.
23730 -* The gencat program:: How to generate message catalogs files which
23731 - can be used by the functions.
23732 -* Common Usage:: How to use the `catgets' interface.
23734 diff -u -udbrN glibc-2.3.2/manual/libc.info-13 glibc-2.3.2-200304020432/manual/libc.info-13
23735 --- glibc-2.3.2/manual/libc.info-13 Sat Mar 1 02:39:41 2003
23736 +++ glibc-2.3.2-200304020432/manual/libc.info-13 Thu Jan 1 01:00:00 1970
23737 @@ -1,938 +0,0 @@
23738 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
23740 -INFO-DIR-SECTION GNU libraries
23741 -START-INFO-DIR-ENTRY
23742 -* Libc: (libc). C library.
23743 -END-INFO-DIR-ENTRY
23745 - This file documents the GNU C library.
23747 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
23748 -Reference Manual', for Version 2.3.x.
23750 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
23751 -Free Software Foundation, Inc.
23753 - Permission is granted to copy, distribute and/or modify this document
23754 -under the terms of the GNU Free Documentation License, Version 1.1 or
23755 -any later version published by the Free Software Foundation; with the
23756 -Invariant Sections being "Free Software Needs Free Documentation" and
23757 -"GNU Lesser General Public License", the Front-Cover texts being (a)
23758 -(see below), and with the Back-Cover Texts being (b) (see below). A
23759 -copy of the license is included in the section entitled "GNU Free
23760 -Documentation License".
23762 - (a) The FSF's Front-Cover Text is:
23764 - A GNU Manual
23766 - (b) The FSF's Back-Cover Text is:
23768 - You have freedom to copy and modify this GNU Manual, like GNU
23769 -software. Copies published by the Free Software Foundation raise
23770 -funds for GNU development.
23772 -\x1f
23773 -File: libc.info, Node: The catgets Functions, Next: The message catalog files, Up: Message catalogs a la X/Open
23775 -The `catgets' function family
23776 ------------------------------
23778 - - Function: nl_catd catopen (const char *CAT_NAME, int FLAG)
23779 - The `catgets' function tries to locate the message data file names
23780 - CAT_NAME and loads it when found. The return value is of an
23781 - opaque type and can be used in calls to the other functions to
23782 - refer to this loaded catalog.
23784 - The return value is `(nl_catd) -1' in case the function failed and
23785 - no catalog was loaded. The global variable ERRNO contains a code
23786 - for the error causing the failure. But even if the function call
23787 - succeeded this does not mean that all messages can be translated.
23789 - Locating the catalog file must happen in a way which lets the user
23790 - of the program influence the decision. It is up to the user to
23791 - decide about the language to use and sometimes it is useful to use
23792 - alternate catalog files. All this can be specified by the user by
23793 - setting some environment variables.
23795 - The first problem is to find out where all the message catalogs are
23796 - stored. Every program could have its own place to keep all the
23797 - different files but usually the catalog files are grouped by
23798 - languages and the catalogs for all programs are kept in the same
23799 - place.
23801 - To tell the `catopen' function where the catalog for the program
23802 - can be found the user can set the environment variable `NLSPATH' to
23803 - a value which describes her/his choice. Since this value must be
23804 - usable for different languages and locales it cannot be a simple
23805 - string. Instead it is a format string (similar to `printf''s).
23806 - An example is
23808 - /usr/share/locale/%L/%N:/usr/share/locale/%L/LC_MESSAGES/%N
23810 - First one can see that more than one directory can be specified
23811 - (with the usual syntax of separating them by colons). The next
23812 - things to observe are the format string, `%L' and `%N' in this
23813 - case. The `catopen' function knows about several of them and the
23814 - replacement for all of them is of course different.
23816 - `%N'
23817 - This format element is substituted with the name of the
23818 - catalog file. This is the value of the CAT_NAME argument
23819 - given to `catgets'.
23821 - `%L'
23822 - This format element is substituted with the name of the
23823 - currently selected locale for translating messages. How this
23824 - is determined is explained below.
23826 - `%l'
23827 - (This is the lowercase ell.) This format element is
23828 - substituted with the language element of the locale name.
23829 - The string describing the selected locale is expected to have
23830 - the form `LANG[_TERR[.CODESET]]' and this format uses the
23831 - first part LANG.
23833 - `%t'
23834 - This format element is substituted by the territory part TERR
23835 - of the name of the currently selected locale. See the
23836 - explanation of the format above.
23838 - `%c'
23839 - This format element is substituted by the codeset part
23840 - CODESET of the name of the currently selected locale. See
23841 - the explanation of the format above.
23843 - `%%'
23844 - Since `%' is used in a meta character there must be a way to
23845 - express the `%' character in the result itself. Using `%%'
23846 - does this just like it works for `printf'.
23848 - Using `NLSPATH' allows arbitrary directories to be searched for
23849 - message catalogs while still allowing different languages to be
23850 - used. If the `NLSPATH' environment variable is not set, the
23851 - default value is
23853 - PREFIX/share/locale/%L/%N:PREFIX/share/locale/%L/LC_MESSAGES/%N
23855 - where PREFIX is given to `configure' while installing the GNU C
23856 - Library (this value is in many cases `/usr' or the empty string).
23858 - The remaining problem is to decide which must be used. The value
23859 - decides about the substitution of the format elements mentioned
23860 - above. First of all the user can specify a path in the message
23861 - catalog name (i.e., the name contains a slash character). In this
23862 - situation the `NLSPATH' environment variable is not used. The
23863 - catalog must exist as specified in the program, perhaps relative
23864 - to the current working directory. This situation in not desirable
23865 - and catalogs names never should be written this way. Beside this,
23866 - this behavior is not portable to all other platforms providing the
23867 - `catgets' interface.
23869 - Otherwise the values of environment variables from the standard
23870 - environment are examined (*note Standard Environment::). Which
23871 - variables are examined is decided by the FLAG parameter of
23872 - `catopen'. If the value is `NL_CAT_LOCALE' (which is defined in
23873 - `nl_types.h') then the `catopen' function use the name of the
23874 - locale currently selected for the `LC_MESSAGES' category.
23876 - If FLAG is zero the `LANG' environment variable is examined. This
23877 - is a left-over from the early days where the concept of the locales
23878 - had not even reached the level of POSIX locales.
23880 - The environment variable and the locale name should have a value
23881 - of the form `LANG[_TERR[.CODESET]]' as explained above. If no
23882 - environment variable is set the `"C"' locale is used which
23883 - prevents any translation.
23885 - The return value of the function is in any case a valid string.
23886 - Either it is a translation from a message catalog or it is the
23887 - same as the STRING parameter. So a piece of code to decide
23888 - whether a translation actually happened must look like this:
23891 - char *trans = catgets (desc, set, msg, input_string);
23892 - if (trans == input_string)
23894 - /* Something went wrong. */
23898 - When an error occurred the global variable ERRNO is set to
23900 - EBADF
23901 - The catalog does not exist.
23903 - ENOMSG
23904 - The set/message tuple does not name an existing element in the
23905 - message catalog.
23907 - While it sometimes can be useful to test for errors programs
23908 - normally will avoid any test. If the translation is not available
23909 - it is no big problem if the original, untranslated message is
23910 - printed. Either the user understands this as well or s/he will
23911 - look for the reason why the messages are not translated.
23913 - Please note that the currently selected locale does not depend on a
23914 -call to the `setlocale' function. It is not necessary that the locale
23915 -data files for this locale exist and calling `setlocale' succeeds. The
23916 -`catopen' function directly reads the values of the environment
23917 -variables.
23919 - - Function: char * catgets (nl_catd CATALOG_DESC, int SET, int
23920 - MESSAGE, const char *STRING)
23921 - The function `catgets' has to be used to access the massage catalog
23922 - previously opened using the `catopen' function. The CATALOG_DESC
23923 - parameter must be a value previously returned by `catopen'.
23925 - The next two parameters, SET and MESSAGE, reflect the internal
23926 - organization of the message catalog files. This will be explained
23927 - in detail below. For now it is interesting to know that a catalog
23928 - can consists of several set and the messages in each thread are
23929 - individually numbered using numbers. Neither the set number nor
23930 - the message number must be consecutive. They can be arbitrarily
23931 - chosen. But each message (unless equal to another one) must have
23932 - its own unique pair of set and message number.
23934 - Since it is not guaranteed that the message catalog for the
23935 - language selected by the user exists the last parameter STRING
23936 - helps to handle this case gracefully. If no matching string can
23937 - be found STRING is returned. This means for the programmer that
23939 - * the STRING parameters should contain reasonable text (this
23940 - also helps to understand the program seems otherwise there
23941 - would be no hint on the string which is expected to be
23942 - returned.
23944 - * all STRING arguments should be written in the same language.
23946 - It is somewhat uncomfortable to write a program using the `catgets'
23947 -functions if no supporting functionality is available. Since each
23948 -set/message number tuple must be unique the programmer must keep lists
23949 -of the messages at the same time the code is written. And the work
23950 -between several people working on the same project must be coordinated.
23951 -We will see some how these problems can be relaxed a bit (*note Common
23952 -Usage::).
23954 - - Function: int catclose (nl_catd CATALOG_DESC)
23955 - The `catclose' function can be used to free the resources
23956 - associated with a message catalog which previously was opened by a
23957 - call to `catopen'. If the resources can be successfully freed the
23958 - function returns `0'. Otherwise it return `-1' and the global
23959 - variable ERRNO is set. Errors can occur if the catalog descriptor
23960 - CATALOG_DESC is not valid in which case ERRNO is set to `EBADF'.
23962 -\x1f
23963 -File: libc.info, Node: The message catalog files, Next: The gencat program, Prev: The catgets Functions, Up: Message catalogs a la X/Open
23965 -Format of the message catalog files
23966 ------------------------------------
23968 - The only reasonable way the translate all the messages of a function
23969 -and store the result in a message catalog file which can be read by the
23970 -`catopen' function is to write all the message text to the translator
23971 -and let her/him translate them all. I.e., we must have a file with
23972 -entries which associate the set/message tuple with a specific
23973 -translation. This file format is specified in the X/Open standard and
23974 -is as follows:
23976 - * Lines containing only whitespace characters or empty lines are
23977 - ignored.
23979 - * Lines which contain as the first non-whitespace character a `$'
23980 - followed by a whitespace character are comment and are also
23981 - ignored.
23983 - * If a line contains as the first non-whitespace characters the
23984 - sequence `$set' followed by a whitespace character an additional
23985 - argument is required to follow. This argument can either be:
23987 - - a number. In this case the value of this number determines
23988 - the set to which the following messages are added.
23990 - - an identifier consisting of alphanumeric characters plus the
23991 - underscore character. In this case the set get automatically
23992 - a number assigned. This value is one added to the largest
23993 - set number which so far appeared.
23995 - How to use the symbolic names is explained in section *Note
23996 - Common Usage::.
23998 - It is an error if a symbol name appears more than once. All
23999 - following messages are placed in a set with this number.
24001 - * If a line contains as the first non-whitespace characters the
24002 - sequence `$delset' followed by a whitespace character an
24003 - additional argument is required to follow. This argument can
24004 - either be:
24006 - - a number. In this case the value of this number determines
24007 - the set which will be deleted.
24009 - - an identifier consisting of alphanumeric characters plus the
24010 - underscore character. This symbolic identifier must match a
24011 - name for a set which previously was defined. It is an error
24012 - if the name is unknown.
24014 - In both cases all messages in the specified set will be removed.
24015 - They will not appear in the output. But if this set is later
24016 - again selected with a `$set' command again messages could be added
24017 - and these messages will appear in the output.
24019 - * If a line contains after leading whitespaces the sequence
24020 - `$quote', the quoting character used for this input file is
24021 - changed to the first non-whitespace character following the
24022 - `$quote'. If no non-whitespace character is present before the
24023 - line ends quoting is disable.
24025 - By default no quoting character is used. In this mode strings are
24026 - terminated with the first unescaped line break. If there is a
24027 - `$quote' sequence present newline need not be escaped. Instead a
24028 - string is terminated with the first unescaped appearance of the
24029 - quote character.
24031 - A common usage of this feature would be to set the quote character
24032 - to `"'. Then any appearance of the `"' in the strings must be
24033 - escaped using the backslash (i.e., `\"' must be written).
24035 - * Any other line must start with a number or an alphanumeric
24036 - identifier (with the underscore character included). The
24037 - following characters (starting after the first whitespace
24038 - character) will form the string which gets associated with the
24039 - currently selected set and the message number represented by the
24040 - number and identifier respectively.
24042 - If the start of the line is a number the message number is
24043 - obvious. It is an error if the same message number already
24044 - appeared for this set.
24046 - If the leading token was an identifier the message number gets
24047 - automatically assigned. The value is the current maximum messages
24048 - number for this set plus one. It is an error if the identifier was
24049 - already used for a message in this set. It is OK to reuse the
24050 - identifier for a message in another thread. How to use the
24051 - symbolic identifiers will be explained below (*note Common
24052 - Usage::). There is one limitation with the identifier: it must
24053 - not be `Set'. The reason will be explained below.
24055 - The text of the messages can contain escape characters. The usual
24056 - bunch of characters known from the ISO C language are recognized
24057 - (`\n', `\t', `\v', `\b', `\r', `\f', `\\', and `\NNN', where NNN
24058 - is the octal coding of a character code).
24060 - *Important:* The handling of identifiers instead of numbers for the
24061 -set and messages is a GNU extension. Systems strictly following the
24062 -X/Open specification do not have this feature. An example for a message
24063 -catalog file is this:
24065 - $ This is a leading comment.
24066 - $quote "
24068 - $set SetOne
24069 - 1 Message with ID 1.
24070 - two " Message with ID \"two\", which gets the value 2 assigned"
24072 - $set SetTwo
24073 - $ Since the last set got the number 1 assigned this set has number 2.
24074 - 4000 "The numbers can be arbitrary, they need not start at one."
24076 - This small example shows various aspects:
24077 - * Lines 1 and 9 are comments since they start with `$' followed by a
24078 - whitespace.
24080 - * The quoting character is set to `"'. Otherwise the quotes in the
24081 - message definition would have to be left away and in this case the
24082 - message with the identifier `two' would loose its leading
24083 - whitespace.
24085 - * Mixing numbered messages with message having symbolic names is no
24086 - problem and the numbering happens automatically.
24088 - While this file format is pretty easy it is not the best possible for
24089 -use in a running program. The `catopen' function would have to parser
24090 -the file and handle syntactic errors gracefully. This is not so easy
24091 -and the whole process is pretty slow. Therefore the `catgets'
24092 -functions expect the data in another more compact and ready-to-use file
24093 -format. There is a special program `gencat' which is explained in
24094 -detail in the next section.
24096 - Files in this other format are not human readable. To be easy to
24097 -use by programs it is a binary file. But the format is byte order
24098 -independent so translation files can be shared by systems of arbitrary
24099 -architecture (as long as they use the GNU C Library).
24101 - Details about the binary file format are not important to know since
24102 -these files are always created by the `gencat' program. The sources of
24103 -the GNU C Library also provide the sources for the `gencat' program and
24104 -so the interested reader can look through these source files to learn
24105 -about the file format.
24107 -\x1f
24108 -File: libc.info, Node: The gencat program, Next: Common Usage, Prev: The message catalog files, Up: Message catalogs a la X/Open
24110 -Generate Message Catalogs files
24111 --------------------------------
24113 - The `gencat' program is specified in the X/Open standard and the GNU
24114 -implementation follows this specification and so processes all
24115 -correctly formed input files. Additionally some extension are
24116 -implemented which help to work in a more reasonable way with the
24117 -`catgets' functions.
24119 - The `gencat' program can be invoked in two ways:
24121 - `gencat [OPTION]... [OUTPUT-FILE [INPUT-FILE]...]`
24123 - This is the interface defined in the X/Open standard. If no
24124 -INPUT-FILE parameter is given input will be read from standard input.
24125 -Multiple input files will be read as if they are concatenated. If
24126 -OUTPUT-FILE is also missing, the output will be written to standard
24127 -output. To provide the interface one is used to from other programs a
24128 -second interface is provided.
24130 - `gencat [OPTION]... -o OUTPUT-FILE [INPUT-FILE]...`
24132 - The option `-o' is used to specify the output file and all file
24133 -arguments are used as input files.
24135 - Beside this one can use `-' or `/dev/stdin' for INPUT-FILE to denote
24136 -the standard input. Corresponding one can use `-' and `/dev/stdout'
24137 -for OUTPUT-FILE to denote standard output. Using `-' as a file name is
24138 -allowed in X/Open while using the device names is a GNU extension.
24140 - The `gencat' program works by concatenating all input files and then
24141 -*merge* the resulting collection of message sets with a possibly
24142 -existing output file. This is done by removing all messages with
24143 -set/message number tuples matching any of the generated messages from
24144 -the output file and then adding all the new messages. To regenerate a
24145 -catalog file while ignoring the old contents therefore requires to
24146 -remove the output file if it exists. If the output is written to
24147 -standard output no merging takes place.
24149 -The following table shows the options understood by the `gencat'
24150 -program. The X/Open standard does not specify any option for the
24151 -program so all of these are GNU extensions.
24153 -`-V'
24154 -`--version'
24155 - Print the version information and exit.
24157 -`-h'
24158 -`--help'
24159 - Print a usage message listing all available options, then exit
24160 - successfully.
24162 -`--new'
24163 - Do never merge the new messages from the input files with the old
24164 - content of the output files. The old content of the output file
24165 - is discarded.
24167 -`-H'
24168 -`--header=name'
24169 - This option is used to emit the symbolic names given to sets and
24170 - messages in the input files for use in the program. Details about
24171 - how to use this are given in the next section. The NAME parameter
24172 - to this option specifies the name of the output file. It will
24173 - contain a number of C preprocessor `#define's to associate a name
24174 - with a number.
24176 - Please note that the generated file only contains the symbols from
24177 - the input files. If the output is merged with the previous
24178 - content of the output file the possibly existing symbols from the
24179 - file(s) which generated the old output files are not in the
24180 - generated header file.
24182 -\x1f
24183 -File: libc.info, Node: Common Usage, Prev: The gencat program, Up: Message catalogs a la X/Open
24185 -How to use the `catgets' interface
24186 -----------------------------------
24188 - The `catgets' functions can be used in two different ways. By
24189 -following slavishly the X/Open specs and not relying on the extension
24190 -and by using the GNU extensions. We will take a look at the former
24191 -method first to understand the benefits of extensions.
24193 -Not using symbolic names
24194 -........................
24196 - Since the X/Open format of the message catalog files does not allow
24197 -symbol names we have to work with numbers all the time. When we start
24198 -writing a program we have to replace all appearances of translatable
24199 -strings with something like
24201 - catgets (catdesc, set, msg, "string")
24203 -CATGETS is retrieved from a call to `catopen' which is normally done
24204 -once at the program start. The `"string"' is the string we want to
24205 -translate. The problems start with the set and message numbers.
24207 - In a bigger program several programmers usually work at the same
24208 -time on the program and so coordinating the number allocation is
24209 -crucial. Though no two different strings must be indexed by the same
24210 -tuple of numbers it is highly desirable to reuse the numbers for equal
24211 -strings with equal translations (please note that there might be
24212 -strings which are equal in one language but have different translations
24213 -due to difference contexts).
24215 - The allocation process can be relaxed a bit by different set numbers
24216 -for different parts of the program. So the number of developers who
24217 -have to coordinate the allocation can be reduced. But still lists must
24218 -be keep track of the allocation and errors can easily happen. These
24219 -errors cannot be discovered by the compiler or the `catgets' functions.
24220 -Only the user of the program might see wrong messages printed. In the
24221 -worst cases the messages are so irritating that they cannot be
24222 -recognized as wrong. Think about the translations for `"true"' and
24223 -`"false"' being exchanged. This could result in a disaster.
24225 -Using symbolic names
24226 -....................
24228 - The problems mentioned in the last section derive from the fact that:
24230 - 1. the numbers are allocated once and due to the possibly frequent
24231 - use of them it is difficult to change a number later.
24233 - 2. the numbers do not allow to guess anything about the string and
24234 - therefore collisions can easily happen.
24236 - By constantly using symbolic names and by providing a method which
24237 -maps the string content to a symbolic name (however this will happen)
24238 -one can prevent both problems above. The cost of this is that the
24239 -programmer has to write a complete message catalog file while s/he is
24240 -writing the program itself.
24242 - This is necessary since the symbolic names must be mapped to numbers
24243 -before the program sources can be compiled. In the last section it was
24244 -described how to generate a header containing the mapping of the names.
24245 -E.g., for the example message file given in the last section we could
24246 -call the `gencat' program as follow (assume `ex.msg' contains the
24247 -sources).
24249 - gencat -H ex.h -o ex.cat ex.msg
24251 -This generates a header file with the following content:
24253 - #define SetTwoSet 0x2 /* ex.msg:8 */
24255 - #define SetOneSet 0x1 /* ex.msg:4 */
24256 - #define SetOnetwo 0x2 /* ex.msg:6 */
24258 - As can be seen the various symbols given in the source file are
24259 -mangled to generate unique identifiers and these identifiers get numbers
24260 -assigned. Reading the source file and knowing about the rules will
24261 -allow to predict the content of the header file (it is deterministic)
24262 -but this is not necessary. The `gencat' program can take care for
24263 -everything. All the programmer has to do is to put the generated header
24264 -file in the dependency list of the source files of her/his project and
24265 -to add a rules to regenerate the header of any of the input files
24266 -change.
24268 - One word about the symbol mangling. Every symbol consists of two
24269 -parts: the name of the message set plus the name of the message or the
24270 -special string `Set'. So `SetOnetwo' means this macro can be used to
24271 -access the translation with identifier `two' in the message set
24272 -`SetOne'.
24274 - The other names denote the names of the message sets. The special
24275 -string `Set' is used in the place of the message identifier.
24277 - If in the code the second string of the set `SetOne' is used the C
24278 -code should look like this:
24280 - catgets (catdesc, SetOneSet, SetOnetwo,
24281 - " Message with ID \"two\", which gets the value 2 assigned")
24283 - Writing the function this way will allow to change the message number
24284 -and even the set number without requiring any change in the C source
24285 -code. (The text of the string is normally not the same; this is only
24286 -for this example.)
24288 -How does to this allow to develop
24289 -.................................
24291 - To illustrate the usual way to work with the symbolic version numbers
24292 -here is a little example. Assume we want to write the very complex and
24293 -famous greeting program. We start by writing the code as usual:
24295 - #include <stdio.h>
24296 - int
24297 - main (void)
24299 - printf ("Hello, world!\n");
24300 - return 0;
24303 - Now we want to internationalize the message and therefore replace the
24304 -message with whatever the user wants.
24306 - #include <nl_types.h>
24307 - #include <stdio.h>
24308 - #include "msgnrs.h"
24309 - int
24310 - main (void)
24312 - nl_catd catdesc = catopen ("hello.cat", NL_CAT_LOCALE);
24313 - printf (catgets (catdesc, SetMainSet, SetMainHello,
24314 - "Hello, world!\n"));
24315 - catclose (catdesc);
24316 - return 0;
24319 - We see how the catalog object is opened and the returned descriptor
24320 -used in the other function calls. It is not really necessary to check
24321 -for failure of any of the functions since even in these situations the
24322 -functions will behave reasonable. They simply will be return a
24323 -translation.
24325 - What remains unspecified here are the constants `SetMainSet' and
24326 -`SetMainHello'. These are the symbolic names describing the message.
24327 -To get the actual definitions which match the information in the
24328 -catalog file we have to create the message catalog source file and
24329 -process it using the `gencat' program.
24331 - $ Messages for the famous greeting program.
24332 - $quote "
24334 - $set Main
24335 - Hello "Hallo, Welt!\n"
24337 - Now we can start building the program (assume the message catalog
24338 -source file is named `hello.msg' and the program source file `hello.c'):
24340 - % gencat -H msgnrs.h -o hello.cat hello.msg
24341 - % cat msgnrs.h
24342 - #define MainSet 0x1 /* hello.msg:4 */
24343 - #define MainHello 0x1 /* hello.msg:5 */
24344 - % gcc -o hello hello.c -I.
24345 - % cp hello.cat /usr/share/locale/de/LC_MESSAGES
24346 - % echo $LC_ALL
24347 - de
24348 - % ./hello
24349 - Hallo, Welt!
24352 - The call of the `gencat' program creates the missing header file
24353 -`msgnrs.h' as well as the message catalog binary. The former is used
24354 -in the compilation of `hello.c' while the later is placed in a
24355 -directory in which the `catopen' function will try to locate it.
24356 -Please check the `LC_ALL' environment variable and the default path for
24357 -`catopen' presented in the description above.
24359 -\x1f
24360 -File: libc.info, Node: The Uniforum approach, Prev: Message catalogs a la X/Open, Up: Message Translation
24362 -The Uniforum approach to Message Translation
24363 -============================================
24365 - Sun Microsystems tried to standardize a different approach to message
24366 -translation in the Uniforum group. There never was a real standard
24367 -defined but still the interface was used in Sun's operation systems.
24368 -Since this approach fits better in the development process of free
24369 -software it is also used throughout the GNU project and the GNU
24370 -`gettext' package provides support for this outside the GNU C Library.
24372 - The code of the `libintl' from GNU `gettext' is the same as the code
24373 -in the GNU C Library. So the documentation in the GNU `gettext' manual
24374 -is also valid for the functionality here. The following text will
24375 -describe the library functions in detail. But the numerous helper
24376 -programs are not described in this manual. Instead people should read
24377 -the GNU `gettext' manual (*note GNU gettext utilities: (gettext)Top.).
24378 -We will only give a short overview.
24380 - Though the `catgets' functions are available by default on more
24381 -systems the `gettext' interface is at least as portable as the former.
24382 -The GNU `gettext' package can be used wherever the functions are not
24383 -available.
24385 -* Menu:
24387 -* Message catalogs with gettext:: The `gettext' family of functions.
24388 -* Helper programs for gettext:: Programs to handle message catalogs
24389 - for `gettext'.
24391 -\x1f
24392 -File: libc.info, Node: Message catalogs with gettext, Next: Helper programs for gettext, Up: The Uniforum approach
24394 -The `gettext' family of functions
24395 ----------------------------------
24397 - The paradigms underlying the `gettext' approach to message
24398 -translations is different from that of the `catgets' functions the
24399 -basic functionally is equivalent. There are functions of the following
24400 -categories:
24402 -* Menu:
24404 -* Translation with gettext:: What has to be done to translate a message.
24405 -* Locating gettext catalog:: How to determine which catalog to be used.
24406 -* Advanced gettext functions:: Additional functions for more complicated
24407 - situations.
24408 -* Charset conversion in gettext:: How to specify the output character set
24409 - `gettext' uses.
24410 -* GUI program problems:: How to use `gettext' in GUI programs.
24411 -* Using gettextized software:: The possibilities of the user to influence
24412 - the way `gettext' works.
24414 -\x1f
24415 -File: libc.info, Node: Translation with gettext, Next: Locating gettext catalog, Up: Message catalogs with gettext
24417 -What has to be done to translate a message?
24418 -...........................................
24420 - The `gettext' functions have a very simple interface. The most
24421 -basic function just takes the string which shall be translated as the
24422 -argument and it returns the translation. This is fundamentally
24423 -different from the `catgets' approach where an extra key is necessary
24424 -and the original string is only used for the error case.
24426 - If the string which has to be translated is the only argument this of
24427 -course means the string itself is the key. I.e., the translation will
24428 -be selected based on the original string. The message catalogs must
24429 -therefore contain the original strings plus one translation for any such
24430 -string. The task of the `gettext' function is it to compare the
24431 -argument string with the available strings in the catalog and return the
24432 -appropriate translation. Of course this process is optimized so that
24433 -this process is not more expensive than an access using an atomic key
24434 -like in `catgets'.
24436 - The `gettext' approach has some advantages but also some
24437 -disadvantages. Please see the GNU `gettext' manual for a detailed
24438 -discussion of the pros and cons.
24440 - All the definitions and declarations for `gettext' can be found in
24441 -the `libintl.h' header file. On systems where these functions are not
24442 -part of the C library they can be found in a separate library named
24443 -`libintl.a' (or accordingly different for shared libraries).
24445 - - Function: char * gettext (const char *MSGID)
24446 - The `gettext' function searches the currently selected message
24447 - catalogs for a string which is equal to MSGID. If there is such a
24448 - string available it is returned. Otherwise the argument string
24449 - MSGID is returned.
24451 - Please note that all though the return value is `char *' the
24452 - returned string must not be changed. This broken type results
24453 - from the history of the function and does not reflect the way the
24454 - function should be used.
24456 - Please note that above we wrote "message catalogs" (plural). This
24457 - is a specialty of the GNU implementation of these functions and we
24458 - will say more about this when we talk about the ways message
24459 - catalogs are selected (*note Locating gettext catalog::).
24461 - The `gettext' function does not modify the value of the global
24462 - ERRNO variable. This is necessary to make it possible to write
24463 - something like
24465 - printf (gettext ("Operation failed: %m\n"));
24467 - Here the ERRNO value is used in the `printf' function while
24468 - processing the `%m' format element and if the `gettext' function
24469 - would change this value (it is called before `printf' is called)
24470 - we would get a wrong message.
24472 - So there is no easy way to detect a missing message catalog beside
24473 - comparing the argument string with the result. But it is normally
24474 - the task of the user to react on missing catalogs. The program
24475 - cannot guess when a message catalog is really necessary since for
24476 - a user who speaks the language the program was developed in does
24477 - not need any translation.
24479 - The remaining two functions to access the message catalog add some
24480 -functionality to select a message catalog which is not the default one.
24481 -This is important if parts of the program are developed independently.
24482 -Every part can have its own message catalog and all of them can be used
24483 -at the same time. The C library itself is an example: internally it
24484 -uses the `gettext' functions but since it must not depend on a
24485 -currently selected default message catalog it must specify all ambiguous
24486 -information.
24488 - - Function: char * dgettext (const char *DOMAINNAME, const char *MSGID)
24489 - The `dgettext' functions acts just like the `gettext' function.
24490 - It only takes an additional first argument DOMAINNAME which guides
24491 - the selection of the message catalogs which are searched for the
24492 - translation. If the DOMAINNAME parameter is the null pointer the
24493 - `dgettext' function is exactly equivalent to `gettext' since the
24494 - default value for the domain name is used.
24496 - As for `gettext' the return value type is `char *' which is an
24497 - anachronism. The returned string must never be modified.
24499 - - Function: char * dcgettext (const char *DOMAINNAME, const char
24500 - *MSGID, int CATEGORY)
24501 - The `dcgettext' adds another argument to those which `dgettext'
24502 - takes. This argument CATEGORY specifies the last piece of
24503 - information needed to localize the message catalog. I.e., the
24504 - domain name and the locale category exactly specify which message
24505 - catalog has to be used (relative to a given directory, see below).
24507 - The `dgettext' function can be expressed in terms of `dcgettext'
24508 - by using
24510 - dcgettext (domain, string, LC_MESSAGES)
24512 - instead of
24514 - dgettext (domain, string)
24516 - This also shows which values are expected for the third parameter.
24517 - One has to use the available selectors for the categories
24518 - available in `locale.h'. Normally the available values are
24519 - `LC_CTYPE', `LC_COLLATE', `LC_MESSAGES', `LC_MONETARY',
24520 - `LC_NUMERIC', and `LC_TIME'. Please note that `LC_ALL' must not
24521 - be used and even though the names might suggest this, there is no
24522 - relation to the environments variables of this name.
24524 - The `dcgettext' function is only implemented for compatibility with
24525 - other systems which have `gettext' functions. There is not really
24526 - any situation where it is necessary (or useful) to use a different
24527 - value but `LC_MESSAGES' in for the CATEGORY parameter. We are
24528 - dealing with messages here and any other choice can only be
24529 - irritating.
24531 - As for `gettext' the return value type is `char *' which is an
24532 - anachronism. The returned string must never be modified.
24534 - When using the three functions above in a program it is a frequent
24535 -case that the MSGID argument is a constant string. So it is worth to
24536 -optimize this case. Thinking shortly about this one will realize that
24537 -as long as no new message catalog is loaded the translation of a message
24538 -will not change. This optimization is actually implemented by the
24539 -`gettext', `dgettext' and `dcgettext' functions.
24541 -\x1f
24542 -File: libc.info, Node: Locating gettext catalog, Next: Advanced gettext functions, Prev: Translation with gettext, Up: Message catalogs with gettext
24544 -How to determine which catalog to be used
24545 -.........................................
24547 - The functions to retrieve the translations for a given message have a
24548 -remarkable simple interface. But to provide the user of the program
24549 -still the opportunity to select exactly the translation s/he wants and
24550 -also to provide the programmer the possibility to influence the way to
24551 -locate the search for catalogs files there is a quite complicated
24552 -underlying mechanism which controls all this. The code is complicated
24553 -the use is easy.
24555 - Basically we have two different tasks to perform which can also be
24556 -performed by the `catgets' functions:
24558 - 1. Locate the set of message catalogs. There are a number of files
24559 - for different languages and which all belong to the package.
24560 - Usually they are all stored in the filesystem below a certain
24561 - directory.
24563 - There can be arbitrary many packages installed and they can follow
24564 - different guidelines for the placement of their files.
24566 - 2. Relative to the location specified by the package the actual
24567 - translation files must be searched, based on the wishes of the
24568 - user. I.e., for each language the user selects the program should
24569 - be able to locate the appropriate file.
24571 - This is the functionality required by the specifications for
24572 -`gettext' and this is also what the `catgets' functions are able to do.
24573 -But there are some problems unresolved:
24575 - * The language to be used can be specified in several different ways.
24576 - There is no generally accepted standard for this and the user
24577 - always expects the program understand what s/he means. E.g., to
24578 - select the German translation one could write `de', `german', or
24579 - `deutsch' and the program should always react the same.
24581 - * Sometimes the specification of the user is too detailed. If s/he,
24582 - e.g., specifies `de_DE.ISO-8859-1' which means German, spoken in
24583 - Germany, coded using the ISO 8859-1 character set there is the
24584 - possibility that a message catalog matching this exactly is not
24585 - available. But there could be a catalog matching `de' and if the
24586 - character set used on the machine is always ISO 8859-1 there is no
24587 - reason why this later message catalog should not be used. (We
24588 - call this "message inheritance".)
24590 - * If a catalog for a wanted language is not available it is not
24591 - always the second best choice to fall back on the language of the
24592 - developer and simply not translate any message. Instead a user
24593 - might be better able to read the messages in another language and
24594 - so the user of the program should be able to define an precedence
24595 - order of languages.
24597 - We can divide the configuration actions in two parts: the one is
24598 -performed by the programmer, the other by the user. We will start with
24599 -the functions the programmer can use since the user configuration will
24600 -be based on this.
24602 - As the functions described in the last sections already mention
24603 -separate sets of messages can be selected by a "domain name". This is a
24604 -simple string which should be unique for each program part with uses a
24605 -separate domain. It is possible to use in one program arbitrary many
24606 -domains at the same time. E.g., the GNU C Library itself uses a domain
24607 -named `libc' while the program using the C Library could use a domain
24608 -named `foo'. The important point is that at any time exactly one
24609 -domain is active. This is controlled with the following function.
24611 - - Function: char * textdomain (const char *DOMAINNAME)
24612 - The `textdomain' function sets the default domain, which is used in
24613 - all future `gettext' calls, to DOMAINNAME. Please note that
24614 - `dgettext' and `dcgettext' calls are not influenced if the
24615 - DOMAINNAME parameter of these functions is not the null pointer.
24617 - Before the first call to `textdomain' the default domain is
24618 - `messages'. This is the name specified in the specification of
24619 - the `gettext' API. This name is as good as any other name. No
24620 - program should ever really use a domain with this name since this
24621 - can only lead to problems.
24623 - The function returns the value which is from now on taken as the
24624 - default domain. If the system went out of memory the returned
24625 - value is `NULL' and the global variable ERRNO is set to `ENOMEM'.
24626 - Despite the return value type being `char *' the return string must
24627 - not be changed. It is allocated internally by the `textdomain'
24628 - function.
24630 - If the DOMAINNAME parameter is the null pointer no new default
24631 - domain is set. Instead the currently selected default domain is
24632 - returned.
24634 - If the DOMAINNAME parameter is the empty string the default domain
24635 - is reset to its initial value, the domain with the name `messages'.
24636 - This possibility is questionable to use since the domain `messages'
24637 - really never should be used.
24639 - - Function: char * bindtextdomain (const char *DOMAINNAME, const char
24640 - *DIRNAME)
24641 - The `bindtextdomain' function can be used to specify the directory
24642 - which contains the message catalogs for domain DOMAINNAME for the
24643 - different languages. To be correct, this is the directory where
24644 - the hierarchy of directories is expected. Details are explained
24645 - below.
24647 - For the programmer it is important to note that the translations
24648 - which come with the program have be placed in a directory
24649 - hierarchy starting at, say, `/foo/bar'. Then the program should
24650 - make a `bindtextdomain' call to bind the domain for the current
24651 - program to this directory. So it is made sure the catalogs are
24652 - found. A correctly running program does not depend on the user
24653 - setting an environment variable.
24655 - The `bindtextdomain' function can be used several times and if the
24656 - DOMAINNAME argument is different the previously bound domains will
24657 - not be overwritten.
24659 - If the program which wish to use `bindtextdomain' at some point of
24660 - time use the `chdir' function to change the current working
24661 - directory it is important that the DIRNAME strings ought to be an
24662 - absolute pathname. Otherwise the addressed directory might vary
24663 - with the time.
24665 - If the DIRNAME parameter is the null pointer `bindtextdomain'
24666 - returns the currently selected directory for the domain with the
24667 - name DOMAINNAME.
24669 - The `bindtextdomain' function returns a pointer to a string
24670 - containing the name of the selected directory name. The string is
24671 - allocated internally in the function and must not be changed by the
24672 - user. If the system went out of core during the execution of
24673 - `bindtextdomain' the return value is `NULL' and the global
24674 - variable ERRNO is set accordingly.
24676 diff -u -udbrN glibc-2.3.2/manual/libc.info-14 glibc-2.3.2-200304020432/manual/libc.info-14
24677 --- glibc-2.3.2/manual/libc.info-14 Sat Mar 1 02:39:41 2003
24678 +++ glibc-2.3.2-200304020432/manual/libc.info-14 Thu Jan 1 01:00:00 1970
24679 @@ -1,1159 +0,0 @@
24680 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
24682 -INFO-DIR-SECTION GNU libraries
24683 -START-INFO-DIR-ENTRY
24684 -* Libc: (libc). C library.
24685 -END-INFO-DIR-ENTRY
24687 - This file documents the GNU C library.
24689 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
24690 -Reference Manual', for Version 2.3.x.
24692 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
24693 -Free Software Foundation, Inc.
24695 - Permission is granted to copy, distribute and/or modify this document
24696 -under the terms of the GNU Free Documentation License, Version 1.1 or
24697 -any later version published by the Free Software Foundation; with the
24698 -Invariant Sections being "Free Software Needs Free Documentation" and
24699 -"GNU Lesser General Public License", the Front-Cover texts being (a)
24700 -(see below), and with the Back-Cover Texts being (b) (see below). A
24701 -copy of the license is included in the section entitled "GNU Free
24702 -Documentation License".
24704 - (a) The FSF's Front-Cover Text is:
24706 - A GNU Manual
24708 - (b) The FSF's Back-Cover Text is:
24710 - You have freedom to copy and modify this GNU Manual, like GNU
24711 -software. Copies published by the Free Software Foundation raise
24712 -funds for GNU development.
24714 -\x1f
24715 -File: libc.info, Node: Advanced gettext functions, Next: Charset conversion in gettext, Prev: Locating gettext catalog, Up: Message catalogs with gettext
24717 -Additional functions for more complicated situations
24718 -....................................................
24720 - The functions of the `gettext' family described so far (and all the
24721 -`catgets' functions as well) have one problem in the real world which
24722 -have been neglected completely in all existing approaches. What is
24723 -meant here is the handling of plural forms.
24725 - Looking through Unix source code before the time anybody thought
24726 -about internationalization (and, sadly, even afterwards) one can often
24727 -find code similar to the following:
24729 - printf ("%d file%s deleted", n, n == 1 ? "" : "s");
24731 -After the first complaints from people internationalizing the code
24732 -people either completely avoided formulations like this or used strings
24733 -like `"file(s)"'. Both look unnatural and should be avoided. First
24734 -tries to solve the problem correctly looked like this:
24736 - if (n == 1)
24737 - printf ("%d file deleted", n);
24738 - else
24739 - printf ("%d files deleted", n);
24741 - But this does not solve the problem. It helps languages where the
24742 -plural form of a noun is not simply constructed by adding an `s' but
24743 -that is all. Once again people fell into the trap of believing the
24744 -rules their language is using are universal. But the handling of plural
24745 -forms differs widely between the language families. There are two
24746 -things we can differ between (and even inside language families);
24748 - * The form how plural forms are build differs. This is a problem
24749 - with language which have many irregularities. German, for
24750 - instance, is a drastic case. Though English and German are part
24751 - of the same language family (Germanic), the almost regular forming
24752 - of plural noun forms (appending an `s') is hardly found in German.
24754 - * The number of plural forms differ. This is somewhat surprising for
24755 - those who only have experiences with Romanic and Germanic languages
24756 - since here the number is the same (there are two).
24758 - But other language families have only one form or many forms. More
24759 - information on this in an extra section.
24761 - The consequence of this is that application writers should not try to
24762 -solve the problem in their code. This would be localization since it is
24763 -only usable for certain, hardcoded language environments. Instead the
24764 -extended `gettext' interface should be used.
24766 - These extra functions are taking instead of the one key string two
24767 -strings and an numerical argument. The idea behind this is that using
24768 -the numerical argument and the first string as a key, the implementation
24769 -can select using rules specified by the translator the right plural
24770 -form. The two string arguments then will be used to provide a return
24771 -value in case no message catalog is found (similar to the normal
24772 -`gettext' behavior). In this case the rules for Germanic language is
24773 -used and it is assumed that the first string argument is the singular
24774 -form, the second the plural form.
24776 - This has the consequence that programs without language catalogs can
24777 -display the correct strings only if the program itself is written using
24778 -a Germanic language. This is a limitation but since the GNU C library
24779 -(as well as the GNU `gettext' package) are written as part of the GNU
24780 -package and the coding standards for the GNU project require program
24781 -being written in English, this solution nevertheless fulfills its
24782 -purpose.
24784 - - Function: char * ngettext (const char *MSGID1, const char *MSGID2,
24785 - unsigned long int N)
24786 - The `ngettext' function is similar to the `gettext' function as it
24787 - finds the message catalogs in the same way. But it takes two
24788 - extra arguments. The MSGID1 parameter must contain the singular
24789 - form of the string to be converted. It is also used as the key
24790 - for the search in the catalog. The MSGID2 parameter is the plural
24791 - form. The parameter N is used to determine the plural form. If no
24792 - message catalog is found MSGID1 is returned if `n == 1', otherwise
24793 - `msgid2'.
24795 - An example for the us of this function is:
24797 - printf (ngettext ("%d file removed", "%d files removed", n), n);
24799 - Please note that the numeric value N has to be passed to the
24800 - `printf' function as well. It is not sufficient to pass it only to
24801 - `ngettext'.
24803 - - Function: char * dngettext (const char *DOMAIN, const char *MSGID1,
24804 - const char *MSGID2, unsigned long int N)
24805 - The `dngettext' is similar to the `dgettext' function in the way
24806 - the message catalog is selected. The difference is that it takes
24807 - two extra parameter to provide the correct plural form. These two
24808 - parameters are handled in the same way `ngettext' handles them.
24810 - - Function: char * dcngettext (const char *DOMAIN, const char *MSGID1,
24811 - const char *MSGID2, unsigned long int N, int CATEGORY)
24812 - The `dcngettext' is similar to the `dcgettext' function in the way
24813 - the message catalog is selected. The difference is that it takes
24814 - two extra parameter to provide the correct plural form. These two
24815 - parameters are handled in the same way `ngettext' handles them.
24817 -The problem of plural forms
24818 -...........................
24820 - A description of the problem can be found at the beginning of the
24821 -last section. Now there is the question how to solve it. Without the
24822 -input of linguists (which was not available) it was not possible to
24823 -determine whether there are only a few different forms in which plural
24824 -forms are formed or whether the number can increase with every new
24825 -supported language.
24827 - Therefore the solution implemented is to allow the translator to
24828 -specify the rules of how to select the plural form. Since the formula
24829 -varies with every language this is the only viable solution except for
24830 -hardcoding the information in the code (which still would require the
24831 -possibility of extensions to not prevent the use of new languages). The
24832 -details are explained in the GNU `gettext' manual. Here only a a bit
24833 -of information is provided.
24835 - The information about the plural form selection has to be stored in
24836 -the header entry (the one with the empty (`msgid' string). It looks
24837 -like this:
24839 - Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;
24841 - The `nplurals' value must be a decimal number which specifies how
24842 -many different plural forms exist for this language. The string
24843 -following `plural' is an expression which is using the C language
24844 -syntax. Exceptions are that no negative number are allowed, numbers
24845 -must be decimal, and the only variable allowed is `n'. This expression
24846 -will be evaluated whenever one of the functions `ngettext',
24847 -`dngettext', or `dcngettext' is called. The numeric value passed to
24848 -these functions is then substituted for all uses of the variable `n' in
24849 -the expression. The resulting value then must be greater or equal to
24850 -zero and smaller than the value given as the value of `nplurals'.
24852 -The following rules are known at this point. The language with families
24853 -are listed. But this does not necessarily mean the information can be
24854 -generalized for the whole family (as can be easily seen in the table
24855 -below).(1)
24857 -Only one form:
24858 - Some languages only require one single form. There is no
24859 - distinction between the singular and plural form. An appropriate
24860 - header entry would look like this:
24862 - Plural-Forms: nplurals=1; plural=0;
24864 - Languages with this property include:
24866 - Finno-Ugric family
24867 - Hungarian
24869 - Asian family
24870 - Japanese
24872 - Turkic/Altaic family
24873 - Turkish
24875 -Two forms, singular used for one only
24876 - This is the form used in most existing programs since it is what
24877 - English is using. A header entry would look like this:
24879 - Plural-Forms: nplurals=2; plural=n != 1;
24881 - (Note: this uses the feature of C expressions that boolean
24882 - expressions have to value zero or one.)
24884 - Languages with this property include:
24886 - Germanic family
24887 - Danish, Dutch, English, German, Norwegian, Swedish
24889 - Finno-Ugric family
24890 - Estonian, Finnish
24892 - Latin/Greek family
24893 - Greek
24895 - Semitic family
24896 - Hebrew
24898 - Romance family
24899 - Italian, Spanish
24901 - Artificial
24902 - Esperanto
24904 -Two forms, singular used for zero and one
24905 - Exceptional case in the language family. The header entry would
24906 - be:
24908 - Plural-Forms: nplurals=2; plural=n>1;
24910 - Languages with this property include:
24912 - Romanic family
24913 - French
24915 -Three forms, special cases for one and two
24916 - The header entry would be:
24918 - Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;
24920 - Languages with this property include:
24922 - Celtic
24923 - Gaeilge
24925 -Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4]
24926 - The header entry would look like this:
24928 - Plural-Forms: nplurals=3; \
24929 - plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1;
24931 - Languages with this property include:
24933 - Slavic family
24934 - Czech, Russian
24936 -Three forms, special cases for 1 and 2, 3, 4
24937 - The header entry would look like this:
24939 - Plural-Forms: nplurals=3; \
24940 - plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;
24942 - Languages with this property include:
24944 - Slavic family
24945 - Slovak
24947 -Three forms, special case for one and some numbers ending in 2, 3, or 4
24948 - The header entry would look like this:
24950 - Plural-Forms: nplurals=3; \
24951 - plural=n==1 ? 0 : \
24952 - n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
24954 - (Continuation in the next line is possible.)
24956 - Languages with this property include:
24958 - Slavic family
24959 - Polish
24961 -Four forms, special case for one and all numbers ending in 2, 3, or 4
24962 - The header entry would look like this:
24964 - Plural-Forms: nplurals=4; \
24965 - plural=n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%10==4 ? 2 : 3;
24967 - Languages with this property include:
24969 - Slavic family
24970 - Slovenian
24972 - ---------- Footnotes ----------
24974 - (1) Additions are welcome. Send appropriate information to
24975 -<bug-glibc-manual@gnu.org>.
24977 -\x1f
24978 -File: libc.info, Node: Charset conversion in gettext, Next: GUI program problems, Prev: Advanced gettext functions, Up: Message catalogs with gettext
24980 -How to specify the output character set `gettext' uses
24981 -......................................................
24983 - `gettext' not only looks up a translation in a message catalog. It
24984 -also converts the translation on the fly to the desired output character
24985 -set. This is useful if the user is working in a different character set
24986 -than the translator who created the message catalog, because it avoids
24987 -distributing variants of message catalogs which differ only in the
24988 -character set.
24990 - The output character set is, by default, the value of `nl_langinfo
24991 -(CODESET)', which depends on the `LC_CTYPE' part of the current locale.
24992 -But programs which store strings in a locale independent way (e.g.
24993 -UTF-8) can request that `gettext' and related functions return the
24994 -translations in that encoding, by use of the `bind_textdomain_codeset'
24995 -function.
24997 - Note that the MSGID argument to `gettext' is not subject to
24998 -character set conversion. Also, when `gettext' does not find a
24999 -translation for MSGID, it returns MSGID unchanged - independently of
25000 -the current output character set. It is therefore recommended that all
25001 -MSGIDs be US-ASCII strings.
25003 - - Function: char * bind_textdomain_codeset (const char *DOMAINNAME,
25004 - const char *CODESET)
25005 - The `bind_textdomain_codeset' function can be used to specify the
25006 - output character set for message catalogs for domain DOMAINNAME.
25007 - The CODESET argument must be a valid codeset name which can be used
25008 - for the `iconv_open' function, or a null pointer.
25010 - If the CODESET parameter is the null pointer,
25011 - `bind_textdomain_codeset' returns the currently selected codeset
25012 - for the domain with the name DOMAINNAME. It returns `NULL' if no
25013 - codeset has yet been selected.
25015 - The `bind_textdomain_codeset' function can be used several times.
25016 - If used multiple times with the same DOMAINNAME argument, the
25017 - later call overrides the settings made by the earlier one.
25019 - The `bind_textdomain_codeset' function returns a pointer to a
25020 - string containing the name of the selected codeset. The string is
25021 - allocated internally in the function and must not be changed by the
25022 - user. If the system went out of core during the execution of
25023 - `bind_textdomain_codeset', the return value is `NULL' and the
25024 - global variable ERRNO is set accordingly.
25026 -\x1f
25027 -File: libc.info, Node: GUI program problems, Next: Using gettextized software, Prev: Charset conversion in gettext, Up: Message catalogs with gettext
25029 -How to use `gettext' in GUI programs
25030 -....................................
25032 - One place where the `gettext' functions, if used normally, have big
25033 -problems is within programs with graphical user interfaces (GUIs). The
25034 -problem is that many of the strings which have to be translated are very
25035 -short. They have to appear in pull-down menus which restricts the
25036 -length. But strings which are not containing entire sentences or at
25037 -least large fragments of a sentence may appear in more than one
25038 -situation in the program but might have different translations. This is
25039 -especially true for the one-word strings which are frequently used in
25040 -GUI programs.
25042 - As a consequence many people say that the `gettext' approach is
25043 -wrong and instead `catgets' should be used which indeed does not have
25044 -this problem. But there is a very simple and powerful method to handle
25045 -these kind of problems with the `gettext' functions.
25047 -As as example consider the following fictional situation. A GUI program
25048 -has a menu bar with the following entries:
25050 - +------------+------------+--------------------------------------+
25051 - | File | Printer | |
25052 - +------------+------------+--------------------------------------+
25053 - | Open | | Select |
25054 - | New | | Open |
25055 - +----------+ | Connect |
25056 - +----------+
25058 - To have the strings `File', `Printer', `Open', `New', `Select', and
25059 -`Connect' translated there has to be at some point in the code a call
25060 -to a function of the `gettext' family. But in two places the string
25061 -passed into the function would be `Open'. The translations might not
25062 -be the same and therefore we are in the dilemma described above.
25064 - One solution to this problem is to artificially enlengthen the
25065 -strings to make them unambiguous. But what would the program do if no
25066 -translation is available? The enlengthened string is not what should be
25067 -printed. So we should use a little bit modified version of the
25068 -functions.
25070 - To enlengthen the strings a uniform method should be used. E.g., in
25071 -the example above the strings could be chosen as
25073 - Menu|File
25074 - Menu|Printer
25075 - Menu|File|Open
25076 - Menu|File|New
25077 - Menu|Printer|Select
25078 - Menu|Printer|Open
25079 - Menu|Printer|Connect
25081 - Now all the strings are different and if now instead of `gettext'
25082 -the following little wrapper function is used, everything works just
25083 -fine:
25085 - char *
25086 - sgettext (const char *msgid)
25088 - char *msgval = gettext (msgid);
25089 - if (msgval == msgid)
25090 - msgval = strrchr (msgid, '|') + 1;
25091 - return msgval;
25094 - What this little function does is to recognize the case when no
25095 -translation is available. This can be done very efficiently by a
25096 -pointer comparison since the return value is the input value. If there
25097 -is no translation we know that the input string is in the format we used
25098 -for the Menu entries and therefore contains a `|' character. We simply
25099 -search for the last occurrence of this character and return a pointer
25100 -to the character following it. That's it!
25102 - If one now consistently uses the enlengthened string form and
25103 -replaces the `gettext' calls with calls to `sgettext' (this is normally
25104 -limited to very few places in the GUI implementation) then it is
25105 -possible to produce a program which can be internationalized.
25107 - With advanced compilers (such as GNU C) one can write the `sgettext'
25108 -functions as an inline function or as a macro like this:
25110 - #define sgettext(msgid) \
25111 - ({ const char *__msgid = (msgid); \
25112 - char *__msgstr = gettext (__msgid); \
25113 - if (__msgval == __msgid) \
25114 - __msgval = strrchr (__msgid, '|') + 1; \
25115 - __msgval; })
25117 - The other `gettext' functions (`dgettext', `dcgettext' and the
25118 -`ngettext' equivalents) can and should have corresponding functions as
25119 -well which look almost identical, except for the parameters and the
25120 -call to the underlying function.
25122 - Now there is of course the question why such functions do not exist
25123 -in the GNU C library? There are two parts of the answer to this
25124 -question.
25126 - * They are easy to write and therefore can be provided by the
25127 - project they are used in. This is not an answer by itself and
25128 - must be seen together with the second part which is:
25130 - * There is no way the C library can contain a version which can work
25131 - everywhere. The problem is the selection of the character to
25132 - separate the prefix from the actual string in the enlenghtened
25133 - string. The examples above used `|' which is a quite good choice
25134 - because it resembles a notation frequently used in this context
25135 - and it also is a character not often used in message strings.
25137 - But what if the character is used in message strings. Or if the
25138 - chose character is not available in the character set on the
25139 - machine one compiles (e.g., `|' is not required to exist for
25140 - ISO C; this is why the `iso646.h' file exists in ISO C programming
25141 - environments).
25143 - There is only one more comment to make left. The wrapper function
25144 -above require that the translations strings are not enlengthened
25145 -themselves. This is only logical. There is no need to disambiguate
25146 -the strings (since they are never used as keys for a search) and one
25147 -also saves quite some memory and disk space by doing this.
25149 -\x1f
25150 -File: libc.info, Node: Using gettextized software, Prev: GUI program problems, Up: Message catalogs with gettext
25152 -User influence on `gettext'
25153 -...........................
25155 - The last sections described what the programmer can do to
25156 -internationalize the messages of the program. But it is finally up to
25157 -the user to select the message s/he wants to see. S/He must understand
25158 -them.
25160 - The POSIX locale model uses the environment variables `LC_COLLATE',
25161 -`LC_CTYPE', `LC_MESSAGES', `LC_MONETARY', `NUMERIC', and `LC_TIME' to
25162 -select the locale which is to be used. This way the user can influence
25163 -lots of functions. As we mentioned above the `gettext' functions also
25164 -take advantage of this.
25166 - To understand how this happens it is necessary to take a look at the
25167 -various components of the filename which gets computed to locate a
25168 -message catalog. It is composed as follows:
25170 - DIR_NAME/LOCALE/LC_CATEGORY/DOMAIN_NAME.mo
25172 - The default value for DIR_NAME is system specific. It is computed
25173 -from the value given as the prefix while configuring the C library.
25174 -This value normally is `/usr' or `/'. For the former the complete
25175 -DIR_NAME is:
25177 - /usr/share/locale
25179 - We can use `/usr/share' since the `.mo' files containing the message
25180 -catalogs are system independent, so all systems can use the same files.
25181 -If the program executed the `bindtextdomain' function for the message
25182 -domain that is currently handled, the `dir_name' component is exactly
25183 -the value which was given to the function as the second parameter.
25184 -I.e., `bindtextdomain' allows overwriting the only system dependent and
25185 -fixed value to make it possible to address files anywhere in the
25186 -filesystem.
25188 - The CATEGORY is the name of the locale category which was selected
25189 -in the program code. For `gettext' and `dgettext' this is always
25190 -`LC_MESSAGES', for `dcgettext' this is selected by the value of the
25191 -third parameter. As said above it should be avoided to ever use a
25192 -category other than `LC_MESSAGES'.
25194 - The LOCALE component is computed based on the category used. Just
25195 -like for the `setlocale' function here comes the user selection into
25196 -the play. Some environment variables are examined in a fixed order and
25197 -the first environment variable set determines the return value of the
25198 -lookup process. In detail, for the category `LC_xxx' the following
25199 -variables in this order are examined:
25201 -`LANGUAGE'
25203 -`LC_ALL'
25205 -`LC_xxx'
25207 -`LANG'
25208 - This looks very familiar. With the exception of the `LANGUAGE'
25209 -environment variable this is exactly the lookup order the `setlocale'
25210 -function uses. But why introducing the `LANGUAGE' variable?
25212 - The reason is that the syntax of the values these variables can have
25213 -is different to what is expected by the `setlocale' function. If we
25214 -would set `LC_ALL' to a value following the extended syntax that would
25215 -mean the `setlocale' function will never be able to use the value of
25216 -this variable as well. An additional variable removes this problem
25217 -plus we can select the language independently of the locale setting
25218 -which sometimes is useful.
25220 - While for the `LC_xxx' variables the value should consist of exactly
25221 -one specification of a locale the `LANGUAGE' variable's value can
25222 -consist of a colon separated list of locale names. The attentive
25223 -reader will realize that this is the way we manage to implement one of
25224 -our additional demands above: we want to be able to specify an ordered
25225 -list of language.
25227 - Back to the constructed filename we have only one component missing.
25228 -The DOMAIN_NAME part is the name which was either registered using the
25229 -`textdomain' function or which was given to `dgettext' or `dcgettext'
25230 -as the first parameter. Now it becomes obvious that a good choice for
25231 -the domain name in the program code is a string which is closely
25232 -related to the program/package name. E.g., for the GNU C Library the
25233 -domain name is `libc'.
25235 -A limit piece of example code should show how the programmer is supposed
25236 -to work:
25239 - setlocale (LC_ALL, "");
25240 - textdomain ("test-package");
25241 - bindtextdomain ("test-package", "/usr/local/share/locale");
25242 - puts (gettext ("Hello, world!"));
25245 - At the program start the default domain is `messages', and the
25246 -default locale is "C". The `setlocale' call sets the locale according
25247 -to the user's environment variables; remember that correct functioning
25248 -of `gettext' relies on the correct setting of the `LC_MESSAGES' locale
25249 -(for looking up the message catalog) and of the `LC_CTYPE' locale (for
25250 -the character set conversion). The `textdomain' call changes the
25251 -default domain to `test-package'. The `bindtextdomain' call specifies
25252 -that the message catalogs for the domain `test-package' can be found
25253 -below the directory `/usr/local/share/locale'.
25255 - If now the user set in her/his environment the variable `LANGUAGE'
25256 -to `de' the `gettext' function will try to use the translations from
25257 -the file
25259 - /usr/local/share/locale/de/LC_MESSAGES/test-package.mo
25261 - From the above descriptions it should be clear which component of
25262 -this filename is determined by which source.
25264 - In the above example we assumed that the `LANGUAGE' environment
25265 -variable to `de'. This might be an appropriate selection but what
25266 -happens if the user wants to use `LC_ALL' because of the wider
25267 -usability and here the required value is `de_DE.ISO-8859-1'? We
25268 -already mentioned above that a situation like this is not infrequent.
25269 -E.g., a person might prefer reading a dialect and if this is not
25270 -available fall back on the standard language.
25272 - The `gettext' functions know about situations like this and can
25273 -handle them gracefully. The functions recognize the format of the value
25274 -of the environment variable. It can split the value is different pieces
25275 -and by leaving out the only or the other part it can construct new
25276 -values. This happens of course in a predictable way. To understand
25277 -this one must know the format of the environment variable value. There
25278 -is one more or less standardized form, originally from the X/Open
25279 -specification:
25281 - `language[_territory[.codeset]][@modifier]'
25283 - Less specific locale names will be stripped of in the order of the
25284 -following list:
25286 - 1. `codeset'
25288 - 2. `normalized codeset'
25290 - 3. `territory'
25292 - 4. `modifier'
25294 - The `language' field will never be dropped for obvious reasons.
25296 - The only new thing is the `normalized codeset' entry. This is
25297 -another goodie which is introduced to help reducing the chaos which
25298 -derives from the inability of the people to standardize the names of
25299 -character sets. Instead of ISO-8859-1 one can often see 8859-1, 88591,
25300 -iso8859-1, or iso_8859-1. The `normalized codeset' value is generated
25301 -from the user-provided character set name by applying the following
25302 -rules:
25304 - 1. Remove all characters beside numbers and letters.
25306 - 2. Fold letters to lowercase.
25308 - 3. If the same only contains digits prepend the string `"iso"'.
25310 -So all of the above name will be normalized to `iso88591'. This allows
25311 -the program user much more freely choosing the locale name.
25313 - Even this extended functionality still does not help to solve the
25314 -problem that completely different names can be used to denote the same
25315 -locale (e.g., `de' and `german'). To be of help in this situation the
25316 -locale implementation and also the `gettext' functions know about
25317 -aliases.
25319 - The file `/usr/share/locale/locale.alias' (replace `/usr' with
25320 -whatever prefix you used for configuring the C library) contains a
25321 -mapping of alternative names to more regular names. The system manager
25322 -is free to add new entries to fill her/his own needs. The selected
25323 -locale from the environment is compared with the entries in the first
25324 -column of this file ignoring the case. If they match the value of the
25325 -second column is used instead for the further handling.
25327 - In the description of the format of the environment variables we
25328 -already mentioned the character set as a factor in the selection of the
25329 -message catalog. In fact, only catalogs which contain text written
25330 -using the character set of the system/program can be used (directly;
25331 -there will come a solution for this some day). This means for the user
25332 -that s/he will always have to take care for this. If in the collection
25333 -of the message catalogs there are files for the same language but coded
25334 -using different character sets the user has to be careful.
25336 -\x1f
25337 -File: libc.info, Node: Helper programs for gettext, Prev: Message catalogs with gettext, Up: The Uniforum approach
25339 -Programs to handle message catalogs for `gettext'
25340 --------------------------------------------------
25342 - The GNU C Library does not contain the source code for the programs
25343 -to handle message catalogs for the `gettext' functions. As part of the
25344 -GNU project the GNU gettext package contains everything the developer
25345 -needs. The functionality provided by the tools in this package by far
25346 -exceeds the abilities of the `gencat' program described above for the
25347 -`catgets' functions.
25349 - There is a program `msgfmt' which is the equivalent program to the
25350 -`gencat' program. It generates from the human-readable and -editable
25351 -form of the message catalog a binary file which can be used by the
25352 -`gettext' functions. But there are several more programs available.
25354 - The `xgettext' program can be used to automatically extract the
25355 -translatable messages from a source file. I.e., the programmer need not
25356 -take care for the translations and the list of messages which have to be
25357 -translated. S/He will simply wrap the translatable string in calls to
25358 -`gettext' et.al and the rest will be done by `xgettext'. This program
25359 -has a lot of option which help to customize the output or do help to
25360 -understand the input better.
25362 - Other programs help to manage development cycle when new messages
25363 -appear in the source files or when a new translation of the messages
25364 -appear. here it should only be noted that using all the tools in GNU
25365 -gettext it is possible to _completely_ automize the handling of message
25366 -catalog. Beside marking the translatable string in the source code and
25367 -generating the translations the developers do not have anything to do
25368 -themselves.
25370 -\x1f
25371 -File: libc.info, Node: Searching and Sorting, Next: Pattern Matching, Prev: Message Translation, Up: Top
25373 -Searching and Sorting
25374 -*********************
25376 - This chapter describes functions for searching and sorting arrays of
25377 -arbitrary objects. You pass the appropriate comparison function to be
25378 -applied as an argument, along with the size of the objects in the array
25379 -and the total number of elements.
25381 -* Menu:
25383 -* Comparison Functions:: Defining how to compare two objects.
25384 - Since the sort and search facilities
25385 - are general, you have to specify the
25386 - ordering.
25387 -* Array Search Function:: The `bsearch' function.
25388 -* Array Sort Function:: The `qsort' function.
25389 -* Search/Sort Example:: An example program.
25390 -* Hash Search Function:: The `hsearch' function.
25391 -* Tree Search Function:: The `tsearch' function.
25393 -\x1f
25394 -File: libc.info, Node: Comparison Functions, Next: Array Search Function, Up: Searching and Sorting
25396 -Defining the Comparison Function
25397 -================================
25399 - In order to use the sorted array library functions, you have to
25400 -describe how to compare the elements of the array.
25402 - To do this, you supply a comparison function to compare two elements
25403 -of the array. The library will call this function, passing as arguments
25404 -pointers to two array elements to be compared. Your comparison function
25405 -should return a value the way `strcmp' (*note String/Array
25406 -Comparison::) does: negative if the first argument is "less" than the
25407 -second, zero if they are "equal", and positive if the first argument is
25408 -"greater".
25410 - Here is an example of a comparison function which works with an
25411 -array of numbers of type `double':
25413 - int
25414 - compare_doubles (const void *a, const void *b)
25416 - const double *da = (const double *) a;
25417 - const double *db = (const double *) b;
25419 - return (*da > *db) - (*da < *db);
25422 - The header file `stdlib.h' defines a name for the data type of
25423 -comparison functions. This type is a GNU extension.
25425 - int comparison_fn_t (const void *, const void *);
25427 -\x1f
25428 -File: libc.info, Node: Array Search Function, Next: Array Sort Function, Prev: Comparison Functions, Up: Searching and Sorting
25430 -Array Search Function
25431 -=====================
25433 - Generally searching for a specific element in an array means that
25434 -potentially all elements must be checked. The GNU C library contains
25435 -functions to perform linear search. The prototypes for the following
25436 -two functions can be found in `search.h'.
25438 - - Function: void * lfind (const void *KEY, void *BASE, size_t *NMEMB,
25439 - size_t SIZE, comparison_fn_t COMPAR)
25440 - The `lfind' function searches in the array with `*NMEMB' elements
25441 - of SIZE bytes pointed to by BASE for an element which matches the
25442 - one pointed to by KEY. The function pointed to by COMPAR is used
25443 - decide whether two elements match.
25445 - The return value is a pointer to the matching element in the array
25446 - starting at BASE if it is found. If no matching element is
25447 - available `NULL' is returned.
25449 - The mean runtime of this function is `*NMEMB'/2. This function
25450 - should only be used elements often get added to or deleted from
25451 - the array in which case it might not be useful to sort the array
25452 - before searching.
25454 - - Function: void * lsearch (const void *KEY, void *BASE, size_t
25455 - *NMEMB, size_t SIZE, comparison_fn_t COMPAR)
25456 - The `lsearch' function is similar to the `lfind' function. It
25457 - searches the given array for an element and returns it if found.
25458 - The difference is that if no matching element is found the
25459 - `lsearch' function adds the object pointed to by KEY (with a size
25460 - of SIZE bytes) at the end of the array and it increments the value
25461 - of `*NMEMB' to reflect this addition.
25463 - This means for the caller that if it is not sure that the array
25464 - contains the element one is searching for the memory allocated for
25465 - the array starting at BASE must have room for at least SIZE more
25466 - bytes. If one is sure the element is in the array it is better to
25467 - use `lfind' so having more room in the array is always necessary
25468 - when calling `lsearch'.
25470 - To search a sorted array for an element matching the key, use the
25471 -`bsearch' function. The prototype for this function is in the header
25472 -file `stdlib.h'.
25474 - - Function: void * bsearch (const void *KEY, const void *ARRAY, size_t
25475 - COUNT, size_t SIZE, comparison_fn_t COMPARE)
25476 - The `bsearch' function searches the sorted array ARRAY for an
25477 - object that is equivalent to KEY. The array contains COUNT
25478 - elements, each of which is of size SIZE bytes.
25480 - The COMPARE function is used to perform the comparison. This
25481 - function is called with two pointer arguments and should return an
25482 - integer less than, equal to, or greater than zero corresponding to
25483 - whether its first argument is considered less than, equal to, or
25484 - greater than its second argument. The elements of the ARRAY must
25485 - already be sorted in ascending order according to this comparison
25486 - function.
25488 - The return value is a pointer to the matching array element, or a
25489 - null pointer if no match is found. If the array contains more
25490 - than one element that matches, the one that is returned is
25491 - unspecified.
25493 - This function derives its name from the fact that it is implemented
25494 - using the binary search algorithm.
25496 -\x1f
25497 -File: libc.info, Node: Array Sort Function, Next: Search/Sort Example, Prev: Array Search Function, Up: Searching and Sorting
25499 -Array Sort Function
25500 -===================
25502 - To sort an array using an arbitrary comparison function, use the
25503 -`qsort' function. The prototype for this function is in `stdlib.h'.
25505 - - Function: void qsort (void *ARRAY, size_t COUNT, size_t SIZE,
25506 - comparison_fn_t COMPARE)
25507 - The QSORT function sorts the array ARRAY. The array contains
25508 - COUNT elements, each of which is of size SIZE.
25510 - The COMPARE function is used to perform the comparison on the
25511 - array elements. This function is called with two pointer
25512 - arguments and should return an integer less than, equal to, or
25513 - greater than zero corresponding to whether its first argument is
25514 - considered less than, equal to, or greater than its second
25515 - argument.
25517 - *Warning:* If two objects compare as equal, their order after
25518 - sorting is unpredictable. That is to say, the sorting is not
25519 - stable. This can make a difference when the comparison considers
25520 - only part of the elements. Two elements with the same sort key
25521 - may differ in other respects.
25523 - If you want the effect of a stable sort, you can get this result by
25524 - writing the comparison function so that, lacking other reason
25525 - distinguish between two elements, it compares them by their
25526 - addresses. Note that doing this may make the sorting algorithm
25527 - less efficient, so do it only if necessary.
25529 - Here is a simple example of sorting an array of doubles in
25530 - numerical order, using the comparison function defined above
25531 - (*note Comparison Functions::):
25534 - double *array;
25535 - int size;
25536 - ...
25537 - qsort (array, size, sizeof (double), compare_doubles);
25540 - The `qsort' function derives its name from the fact that it was
25541 - originally implemented using the "quick sort" algorithm.
25543 - The implementation of `qsort' in this library might not be an
25544 - in-place sort and might thereby use an extra amount of memory to
25545 - store the array.
25547 -\x1f
25548 -File: libc.info, Node: Search/Sort Example, Next: Hash Search Function, Prev: Array Sort Function, Up: Searching and Sorting
25550 -Searching and Sorting Example
25551 -=============================
25553 - Here is an example showing the use of `qsort' and `bsearch' with an
25554 -array of structures. The objects in the array are sorted by comparing
25555 -their `name' fields with the `strcmp' function. Then, we can look up
25556 -individual objects based on their names.
25558 - #include <stdlib.h>
25559 - #include <stdio.h>
25560 - #include <string.h>
25562 - /* Define an array of critters to sort. */
25564 - struct critter
25566 - const char *name;
25567 - const char *species;
25568 - };
25570 - struct critter muppets[] =
25572 - {"Kermit", "frog"},
25573 - {"Piggy", "pig"},
25574 - {"Gonzo", "whatever"},
25575 - {"Fozzie", "bear"},
25576 - {"Sam", "eagle"},
25577 - {"Robin", "frog"},
25578 - {"Animal", "animal"},
25579 - {"Camilla", "chicken"},
25580 - {"Sweetums", "monster"},
25581 - {"Dr. Strangepork", "pig"},
25582 - {"Link Hogthrob", "pig"},
25583 - {"Zoot", "human"},
25584 - {"Dr. Bunsen Honeydew", "human"},
25585 - {"Beaker", "human"},
25586 - {"Swedish Chef", "human"}
25587 - };
25589 - int count = sizeof (muppets) / sizeof (struct critter);
25593 - /* This is the comparison function used for sorting and searching. */
25595 - int
25596 - critter_cmp (const struct critter *c1, const struct critter *c2)
25598 - return strcmp (c1->name, c2->name);
25602 - /* Print information about a critter. */
25604 - void
25605 - print_critter (const struct critter *c)
25607 - printf ("%s, the %s\n", c->name, c->species);
25611 - /* Do the lookup into the sorted array. */
25613 - void
25614 - find_critter (const char *name)
25616 - struct critter target, *result;
25617 - target.name = name;
25618 - result = bsearch (&target, muppets, count, sizeof (struct critter),
25619 - critter_cmp);
25620 - if (result)
25621 - print_critter (result);
25622 - else
25623 - printf ("Couldn't find %s.\n", name);
25626 - /* Main program. */
25628 - int
25629 - main (void)
25631 - int i;
25633 - for (i = 0; i < count; i++)
25634 - print_critter (&muppets[i]);
25635 - printf ("\n");
25637 - qsort (muppets, count, sizeof (struct critter), critter_cmp);
25639 - for (i = 0; i < count; i++)
25640 - print_critter (&muppets[i]);
25641 - printf ("\n");
25643 - find_critter ("Kermit");
25644 - find_critter ("Gonzo");
25645 - find_critter ("Janice");
25647 - return 0;
25650 - The output from this program looks like:
25652 - Kermit, the frog
25653 - Piggy, the pig
25654 - Gonzo, the whatever
25655 - Fozzie, the bear
25656 - Sam, the eagle
25657 - Robin, the frog
25658 - Animal, the animal
25659 - Camilla, the chicken
25660 - Sweetums, the monster
25661 - Dr. Strangepork, the pig
25662 - Link Hogthrob, the pig
25663 - Zoot, the human
25664 - Dr. Bunsen Honeydew, the human
25665 - Beaker, the human
25666 - Swedish Chef, the human
25668 - Animal, the animal
25669 - Beaker, the human
25670 - Camilla, the chicken
25671 - Dr. Bunsen Honeydew, the human
25672 - Dr. Strangepork, the pig
25673 - Fozzie, the bear
25674 - Gonzo, the whatever
25675 - Kermit, the frog
25676 - Link Hogthrob, the pig
25677 - Piggy, the pig
25678 - Robin, the frog
25679 - Sam, the eagle
25680 - Swedish Chef, the human
25681 - Sweetums, the monster
25682 - Zoot, the human
25684 - Kermit, the frog
25685 - Gonzo, the whatever
25686 - Couldn't find Janice.
25688 -\x1f
25689 -File: libc.info, Node: Hash Search Function, Next: Tree Search Function, Prev: Search/Sort Example, Up: Searching and Sorting
25691 -The `hsearch' function.
25692 -=======================
25694 - The functions mentioned so far in this chapter are searching in a
25695 -sorted or unsorted array. There are other methods to organize
25696 -information which later should be searched. The costs of insert,
25697 -delete and search differ. One possible implementation is using hashing
25698 -tables. The following functions are declared in the the header file
25699 -`search.h'.
25701 - - Function: int hcreate (size_t NEL)
25702 - The `hcreate' function creates a hashing table which can contain at
25703 - least NEL elements. There is no possibility to grow this table so
25704 - it is necessary to choose the value for NEL wisely. The used
25705 - methods to implement this function might make it necessary to make
25706 - the number of elements in the hashing table larger than the
25707 - expected maximal number of elements. Hashing tables usually work
25708 - inefficient if they are filled 80% or more. The constant access
25709 - time guaranteed by hashing can only be achieved if few collisions
25710 - exist. See Knuth's "The Art of Computer Programming, Part 3:
25711 - Searching and Sorting" for more information.
25713 - The weakest aspect of this function is that there can be at most
25714 - one hashing table used through the whole program. The table is
25715 - allocated in local memory out of control of the programmer. As an
25716 - extension the GNU C library provides an additional set of
25717 - functions with an reentrant interface which provide a similar
25718 - interface but which allow to keep arbitrarily many hashing tables.
25720 - It is possible to use more than one hashing table in the program
25721 - run if the former table is first destroyed by a call to `hdestroy'.
25723 - The function returns a non-zero value if successful. If it return
25724 - zero something went wrong. This could either mean there is
25725 - already a hashing table in use or the program runs out of memory.
25727 - - Function: void hdestroy (void)
25728 - The `hdestroy' function can be used to free all the resources
25729 - allocated in a previous call of `hcreate'. After a call to this
25730 - function it is again possible to call `hcreate' and allocate a new
25731 - table with possibly different size.
25733 - It is important to remember that the elements contained in the
25734 - hashing table at the time `hdestroy' is called are _not_ freed by
25735 - this function. It is the responsibility of the program code to
25736 - free those strings (if necessary at all). Freeing all the element
25737 - memory is not possible without extra, separately kept information
25738 - since there is no function to iterate through all available
25739 - elements in the hashing table. If it is really necessary to free
25740 - a table and all elements the programmer has to keep a list of all
25741 - table elements and before calling `hdestroy' s/he has to free all
25742 - element's data using this list. This is a very unpleasant
25743 - mechanism and it also shows that this kind of hashing tables is
25744 - mainly meant for tables which are created once and used until the
25745 - end of the program run.
25747 - Entries of the hashing table and keys for the search are defined
25748 -using this type:
25750 - - Data type: struct ENTRY
25751 - Both elements of this structure are pointers to zero-terminated
25752 - strings. This is a limiting restriction of the functionality of
25753 - the `hsearch' functions. They can only be used for data sets
25754 - which use the NUL character always and solely to terminate the
25755 - records. It is not possible to handle general binary data.
25757 - `char *key'
25758 - Pointer to a zero-terminated string of characters describing
25759 - the key for the search or the element in the hashing table.
25761 - `char *data'
25762 - Pointer to a zero-terminated string of characters describing
25763 - the data. If the functions will be called only for searching
25764 - an existing entry this element might stay undefined since it
25765 - is not used.
25767 - - Function: ENTRY * hsearch (ENTRY ITEM, ACTION ACTION)
25768 - To search in a hashing table created using `hcreate' the `hsearch'
25769 - function must be used. This function can perform simple search
25770 - for an element (if ACTION has the `FIND') or it can alternatively
25771 - insert the key element into the hashing table. Entries are never
25772 - replaced.
25774 - The key is denoted by a pointer to an object of type `ENTRY'. For
25775 - locating the corresponding position in the hashing table only the
25776 - `key' element of the structure is used.
25778 - If an entry with matching key is found the ACTION parameter is
25779 - irrelevant. The found entry is returned. If no matching entry is
25780 - found and the ACTION parameter has the value `FIND' the function
25781 - returns a `NULL' pointer. If no entry is found and the ACTION
25782 - parameter has the value `ENTER' a new entry is added to the
25783 - hashing table which is initialized with the parameter ITEM. A
25784 - pointer to the newly added entry is returned.
25786 - As mentioned before the hashing table used by the functions
25787 -described so far is global and there can be at any time at most one
25788 -hashing table in the program. A solution is to use the following
25789 -functions which are a GNU extension. All have in common that they
25790 -operate on a hashing table which is described by the content of an
25791 -object of the type `struct hsearch_data'. This type should be treated
25792 -as opaque, none of its members should be changed directly.
25794 - - Function: int hcreate_r (size_t NEL, struct hsearch_data *HTAB)
25795 - The `hcreate_r' function initializes the object pointed to by HTAB
25796 - to contain a hashing table with at least NEL elements. So this
25797 - function is equivalent to the `hcreate' function except that the
25798 - initialized data structure is controlled by the user.
25800 - This allows having more than one hashing table at one time. The
25801 - memory necessary for the `struct hsearch_data' object can be
25802 - allocated dynamically. It must be initialized with zero before
25803 - calling this function.
25805 - The return value is non-zero if the operation were successful. if
25806 - the return value is zero something went wrong which probably means
25807 - the programs runs out of memory.
25809 - - Function: void hdestroy_r (struct hsearch_data *HTAB)
25810 - The `hdestroy_r' function frees all resources allocated by the
25811 - `hcreate_r' function for this very same object HTAB. As for
25812 - `hdestroy' it is the programs responsibility to free the strings
25813 - for the elements of the table.
25815 - - Function: int hsearch_r (ENTRY ITEM, ACTION ACTION, ENTRY **RETVAL,
25816 - struct hsearch_data *HTAB)
25817 - The `hsearch_r' function is equivalent to `hsearch'. The meaning
25818 - of the first two arguments is identical. But instead of operating
25819 - on a single global hashing table the function works on the table
25820 - described by the object pointed to by HTAB (which is initialized
25821 - by a call to `hcreate_r').
25823 - Another difference to `hcreate' is that the pointer to the found
25824 - entry in the table is not the return value of the functions. It is
25825 - returned by storing it in a pointer variables pointed to by the
25826 - RETVAL parameter. The return value of the function is an integer
25827 - value indicating success if it is non-zero and failure if it is
25828 - zero. In the latter case the global variable ERRNO signals the
25829 - reason for the failure.
25831 - `ENOMEM'
25832 - The table is filled and `hsearch_r' was called with an so far
25833 - unknown key and ACTION set to `ENTER'.
25835 - `ESRCH'
25836 - The ACTION parameter is `FIND' and no corresponding element
25837 - is found in the table.
25839 diff -u -udbrN glibc-2.3.2/manual/libc.info-15 glibc-2.3.2-200304020432/manual/libc.info-15
25840 --- glibc-2.3.2/manual/libc.info-15 Sat Mar 1 02:39:41 2003
25841 +++ glibc-2.3.2-200304020432/manual/libc.info-15 Thu Jan 1 01:00:00 1970
25842 @@ -1,1197 +0,0 @@
25843 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
25845 -INFO-DIR-SECTION GNU libraries
25846 -START-INFO-DIR-ENTRY
25847 -* Libc: (libc). C library.
25848 -END-INFO-DIR-ENTRY
25850 - This file documents the GNU C library.
25852 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
25853 -Reference Manual', for Version 2.3.x.
25855 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
25856 -Free Software Foundation, Inc.
25858 - Permission is granted to copy, distribute and/or modify this document
25859 -under the terms of the GNU Free Documentation License, Version 1.1 or
25860 -any later version published by the Free Software Foundation; with the
25861 -Invariant Sections being "Free Software Needs Free Documentation" and
25862 -"GNU Lesser General Public License", the Front-Cover texts being (a)
25863 -(see below), and with the Back-Cover Texts being (b) (see below). A
25864 -copy of the license is included in the section entitled "GNU Free
25865 -Documentation License".
25867 - (a) The FSF's Front-Cover Text is:
25869 - A GNU Manual
25871 - (b) The FSF's Back-Cover Text is:
25873 - You have freedom to copy and modify this GNU Manual, like GNU
25874 -software. Copies published by the Free Software Foundation raise
25875 -funds for GNU development.
25877 -\x1f
25878 -File: libc.info, Node: Tree Search Function, Prev: Hash Search Function, Up: Searching and Sorting
25880 -The `tsearch' function.
25881 -=======================
25883 - Another common form to organize data for efficient search is to use
25884 -trees. The `tsearch' function family provides a nice interface to
25885 -functions to organize possibly large amounts of data by providing a mean
25886 -access time proportional to the logarithm of the number of elements.
25887 -The GNU C library implementation even guarantees that this bound is
25888 -never exceeded even for input data which cause problems for simple
25889 -binary tree implementations.
25891 - The functions described in the chapter are all described in the
25892 -System V and X/Open specifications and are therefore quite portable.
25894 - In contrast to the `hsearch' functions the `tsearch' functions can
25895 -be used with arbitrary data and not only zero-terminated strings.
25897 - The `tsearch' functions have the advantage that no function to
25898 -initialize data structures is necessary. A simple pointer of type
25899 -`void *' initialized to `NULL' is a valid tree and can be extended or
25900 -searched. The prototypes for these functions can be found in the
25901 -header file `search.h'.
25903 - - Function: void * tsearch (const void *KEY, void **ROOTP,
25904 - comparison_fn_t COMPAR)
25905 - The `tsearch' function searches in the tree pointed to by `*ROOTP'
25906 - for an element matching KEY. The function pointed to by COMPAR is
25907 - used to determine whether two elements match. *Note Comparison
25908 - Functions::, for a specification of the functions which can be
25909 - used for the COMPAR parameter.
25911 - If the tree does not contain a matching entry the KEY value will
25912 - be added to the tree. `tsearch' does not make a copy of the object
25913 - pointed to by KEY (how could it since the size is unknown).
25914 - Instead it adds a reference to this object which means the object
25915 - must be available as long as the tree data structure is used.
25917 - The tree is represented by a pointer to a pointer since it is
25918 - sometimes necessary to change the root node of the tree. So it
25919 - must not be assumed that the variable pointed to by ROOTP has the
25920 - same value after the call. This also shows that it is not safe to
25921 - call the `tsearch' function more than once at the same time using
25922 - the same tree. It is no problem to run it more than once at a
25923 - time on different trees.
25925 - The return value is a pointer to the matching element in the tree.
25926 - If a new element was created the pointer points to the new data
25927 - (which is in fact KEY). If an entry had to be created and the
25928 - program ran out of space `NULL' is returned.
25930 - - Function: void * tfind (const void *KEY, void *const *ROOTP,
25931 - comparison_fn_t COMPAR)
25932 - The `tfind' function is similar to the `tsearch' function. It
25933 - locates an element matching the one pointed to by KEY and returns
25934 - a pointer to this element. But if no matching element is
25935 - available no new element is entered (note that the ROOTP parameter
25936 - points to a constant pointer). Instead the function returns
25937 - `NULL'.
25939 - Another advantage of the `tsearch' function in contrast to the
25940 -`hsearch' functions is that there is an easy way to remove elements.
25942 - - Function: void * tdelete (const void *KEY, void **ROOTP,
25943 - comparison_fn_t COMPAR)
25944 - To remove a specific element matching KEY from the tree `tdelete'
25945 - can be used. It locates the matching element using the same
25946 - method as `tfind'. The corresponding element is then removed and
25947 - a pointer to the parent of the deleted node is returned by the
25948 - function. If there is no matching entry in the tree nothing can be
25949 - deleted and the function returns `NULL'. If the root of the tree
25950 - is deleted `tdelete' returns some unspecified value not equal to
25951 - `NULL'.
25953 - - Function: void tdestroy (void *VROOT, __free_fn_t FREEFCT)
25954 - If the complete search tree has to be removed one can use
25955 - `tdestroy'. It frees all resources allocated by the `tsearch'
25956 - function to generate the tree pointed to by VROOT.
25958 - For the data in each tree node the function FREEFCT is called.
25959 - The pointer to the data is passed as the argument to the function.
25960 - If no such work is necessary FREEFCT must point to a function
25961 - doing nothing. It is called in any case.
25963 - This function is a GNU extension and not covered by the System V or
25964 - X/Open specifications.
25966 - In addition to the function to create and destroy the tree data
25967 -structure, there is another function which allows you to apply a
25968 -function to all elements of the tree. The function must have this type:
25970 - void __action_fn_t (const void *nodep, VISIT value, int level);
25972 - The NODEP is the data value of the current node (once given as the
25973 -KEY argument to `tsearch'). LEVEL is a numeric value which corresponds
25974 -to the depth of the current node in the tree. The root node has the
25975 -depth 0 and its children have a depth of 1 and so on. The `VISIT' type
25976 -is an enumeration type.
25978 - - Data Type: VISIT
25979 - The `VISIT' value indicates the status of the current node in the
25980 - tree and how the function is called. The status of a node is
25981 - either `leaf' or `internal node'. For each leaf node the function
25982 - is called exactly once, for each internal node it is called three
25983 - times: before the first child is processed, after the first child
25984 - is processed and after both children are processed. This makes it
25985 - possible to handle all three methods of tree traversal (or even a
25986 - combination of them).
25988 - `preorder'
25989 - The current node is an internal node and the function is
25990 - called before the first child was processed.
25992 - `postorder'
25993 - The current node is an internal node and the function is
25994 - called after the first child was processed.
25996 - `endorder'
25997 - The current node is an internal node and the function is
25998 - called after the second child was processed.
26000 - `leaf'
26001 - The current node is a leaf.
26003 - - Function: void twalk (const void *ROOT, __action_fn_t ACTION)
26004 - For each node in the tree with a node pointed to by ROOT, the
26005 - `twalk' function calls the function provided by the parameter
26006 - ACTION. For leaf nodes the function is called exactly once with
26007 - VALUE set to `leaf'. For internal nodes the function is called
26008 - three times, setting the VALUE parameter or ACTION to the
26009 - appropriate value. The LEVEL argument for the ACTION function is
26010 - computed while descending the tree with increasing the value by
26011 - one for the descend to a child, starting with the value 0 for the
26012 - root node.
26014 - Since the functions used for the ACTION parameter to `twalk' must
26015 - not modify the tree data, it is safe to run `twalk' in more than
26016 - one thread at the same time, working on the same tree. It is also
26017 - safe to call `tfind' in parallel. Functions which modify the tree
26018 - must not be used, otherwise the behavior is undefined.
26020 -\x1f
26021 -File: libc.info, Node: Pattern Matching, Next: I/O Overview, Prev: Searching and Sorting, Up: Top
26023 -Pattern Matching
26024 -****************
26026 - The GNU C Library provides pattern matching facilities for two kinds
26027 -of patterns: regular expressions and file-name wildcards. The library
26028 -also provides a facility for expanding variable and command references
26029 -and parsing text into words in the way the shell does.
26031 -* Menu:
26033 -* Wildcard Matching:: Matching a wildcard pattern against a single string.
26034 -* Globbing:: Finding the files that match a wildcard pattern.
26035 -* Regular Expressions:: Matching regular expressions against strings.
26036 -* Word Expansion:: Expanding shell variables, nested commands,
26037 - arithmetic, and wildcards.
26038 - This is what the shell does with shell commands.
26040 -\x1f
26041 -File: libc.info, Node: Wildcard Matching, Next: Globbing, Up: Pattern Matching
26043 -Wildcard Matching
26044 -=================
26046 - This section describes how to match a wildcard pattern against a
26047 -particular string. The result is a yes or no answer: does the string
26048 -fit the pattern or not. The symbols described here are all declared in
26049 -`fnmatch.h'.
26051 - - Function: int fnmatch (const char *PATTERN, const char *STRING, int
26052 - FLAGS)
26053 - This function tests whether the string STRING matches the pattern
26054 - PATTERN. It returns `0' if they do match; otherwise, it returns
26055 - the nonzero value `FNM_NOMATCH'. The arguments PATTERN and STRING
26056 - are both strings.
26058 - The argument FLAGS is a combination of flag bits that alter the
26059 - details of matching. See below for a list of the defined flags.
26061 - In the GNU C Library, `fnmatch' cannot experience an "error"--it
26062 - always returns an answer for whether the match succeeds. However,
26063 - other implementations of `fnmatch' might sometimes report "errors".
26064 - They would do so by returning nonzero values that are not equal to
26065 - `FNM_NOMATCH'.
26067 - These are the available flags for the FLAGS argument:
26069 -`FNM_FILE_NAME'
26070 - Treat the `/' character specially, for matching file names. If
26071 - this flag is set, wildcard constructs in PATTERN cannot match `/'
26072 - in STRING. Thus, the only way to match `/' is with an explicit
26073 - `/' in PATTERN.
26075 -`FNM_PATHNAME'
26076 - This is an alias for `FNM_FILE_NAME'; it comes from POSIX.2. We
26077 - don't recommend this name because we don't use the term "pathname"
26078 - for file names.
26080 -`FNM_PERIOD'
26081 - Treat the `.' character specially if it appears at the beginning of
26082 - STRING. If this flag is set, wildcard constructs in PATTERN
26083 - cannot match `.' as the first character of STRING.
26085 - If you set both `FNM_PERIOD' and `FNM_FILE_NAME', then the special
26086 - treatment applies to `.' following `/' as well as to `.' at the
26087 - beginning of STRING. (The shell uses the `FNM_PERIOD' and
26088 - `FNM_FILE_NAME' flags together for matching file names.)
26090 -`FNM_NOESCAPE'
26091 - Don't treat the `\' character specially in patterns. Normally,
26092 - `\' quotes the following character, turning off its special meaning
26093 - (if any) so that it matches only itself. When quoting is enabled,
26094 - the pattern `\?' matches only the string `?', because the question
26095 - mark in the pattern acts like an ordinary character.
26097 - If you use `FNM_NOESCAPE', then `\' is an ordinary character.
26099 -`FNM_LEADING_DIR'
26100 - Ignore a trailing sequence of characters starting with a `/' in
26101 - STRING; that is to say, test whether STRING starts with a
26102 - directory name that PATTERN matches.
26104 - If this flag is set, either `foo*' or `foobar' as a pattern would
26105 - match the string `foobar/frobozz'.
26107 -`FNM_CASEFOLD'
26108 - Ignore case in comparing STRING to PATTERN.
26110 -`FNM_EXTMATCH'
26111 - Recognize beside the normal patterns also the extended patterns
26112 - introduced in `ksh'. The patterns are written in the form
26113 - explained in the following table where PATTERN-LIST is a `|'
26114 - separated list of patterns.
26116 - `?(PATTERN-LIST)'
26117 - The pattern matches if zero or one occurrences of any of the
26118 - patterns in the PATTERN-LIST allow matching the input string.
26120 - `*(PATTERN-LIST)'
26121 - The pattern matches if zero or more occurrences of any of the
26122 - patterns in the PATTERN-LIST allow matching the input string.
26124 - `+(PATTERN-LIST)'
26125 - The pattern matches if one or more occurrences of any of the
26126 - patterns in the PATTERN-LIST allow matching the input string.
26128 - `@(PATTERN-LIST)'
26129 - The pattern matches if exactly one occurrence of any of the
26130 - patterns in the PATTERN-LIST allows matching the input string.
26132 - `!(PATTERN-LIST)'
26133 - The pattern matches if the input string cannot be matched
26134 - with any of the patterns in the PATTERN-LIST.
26136 -\x1f
26137 -File: libc.info, Node: Globbing, Next: Regular Expressions, Prev: Wildcard Matching, Up: Pattern Matching
26139 -Globbing
26140 -========
26142 - The archetypal use of wildcards is for matching against the files in
26143 -a directory, and making a list of all the matches. This is called
26144 -"globbing".
26146 - You could do this using `fnmatch', by reading the directory entries
26147 -one by one and testing each one with `fnmatch'. But that would be slow
26148 -(and complex, since you would have to handle subdirectories by hand).
26150 - The library provides a function `glob' to make this particular use
26151 -of wildcards convenient. `glob' and the other symbols in this section
26152 -are declared in `glob.h'.
26154 -* Menu:
26156 -* Calling Glob:: Basic use of `glob'.
26157 -* Flags for Globbing:: Flags that enable various options in `glob'.
26158 -* More Flags for Globbing:: GNU specific extensions to `glob'.
26160 -\x1f
26161 -File: libc.info, Node: Calling Glob, Next: Flags for Globbing, Up: Globbing
26163 -Calling `glob'
26164 ---------------
26166 - The result of globbing is a vector of file names (strings). To
26167 -return this vector, `glob' uses a special data type, `glob_t', which is
26168 -a structure. You pass `glob' the address of the structure, and it
26169 -fills in the structure's fields to tell you about the results.
26171 - - Data Type: glob_t
26172 - This data type holds a pointer to a word vector. More precisely,
26173 - it records both the address of the word vector and its size. The
26174 - GNU implementation contains some more fields which are non-standard
26175 - extensions.
26177 - `gl_pathc'
26178 - The number of elements in the vector, excluding the initial
26179 - null entries if the GLOB_DOOFFS flag is used (see gl_offs
26180 - below).
26182 - `gl_pathv'
26183 - The address of the vector. This field has type `char **'.
26185 - `gl_offs'
26186 - The offset of the first real element of the vector, from its
26187 - nominal address in the `gl_pathv' field. Unlike the other
26188 - fields, this is always an input to `glob', rather than an
26189 - output from it.
26191 - If you use a nonzero offset, then that many elements at the
26192 - beginning of the vector are left empty. (The `glob' function
26193 - fills them with null pointers.)
26195 - The `gl_offs' field is meaningful only if you use the
26196 - `GLOB_DOOFFS' flag. Otherwise, the offset is always zero
26197 - regardless of what is in this field, and the first real
26198 - element comes at the beginning of the vector.
26200 - `gl_closedir'
26201 - The address of an alternative implementation of the `closedir'
26202 - function. It is used if the `GLOB_ALTDIRFUNC' bit is set in
26203 - the flag parameter. The type of this field is
26204 - `void (*) (void *)'.
26206 - This is a GNU extension.
26208 - `gl_readdir'
26209 - The address of an alternative implementation of the `readdir'
26210 - function used to read the contents of a directory. It is
26211 - used if the `GLOB_ALTDIRFUNC' bit is set in the flag
26212 - parameter. The type of this field is
26213 - `struct dirent *(*) (void *)'.
26215 - This is a GNU extension.
26217 - `gl_opendir'
26218 - The address of an alternative implementation of the `opendir'
26219 - function. It is used if the `GLOB_ALTDIRFUNC' bit is set in
26220 - the flag parameter. The type of this field is
26221 - `void *(*) (const char *)'.
26223 - This is a GNU extension.
26225 - `gl_stat'
26226 - The address of an alternative implementation of the `stat'
26227 - function to get information about an object in the
26228 - filesystem. It is used if the `GLOB_ALTDIRFUNC' bit is set
26229 - in the flag parameter. The type of this field is
26230 - `int (*) (const char *, struct stat *)'.
26232 - This is a GNU extension.
26234 - `gl_lstat'
26235 - The address of an alternative implementation of the `lstat'
26236 - function to get information about an object in the
26237 - filesystems, not following symbolic links. It is used if the
26238 - `GLOB_ALTDIRFUNC' bit is set in the flag parameter. The type
26239 - of this field is `int (*) (const char *, struct stat *)'.
26241 - This is a GNU extension.
26243 - For use in the `glob64' function `glob.h' contains another
26244 -definition for a very similar type. `glob64_t' differs from `glob_t'
26245 -only in the types of the members `gl_readdir', `gl_stat', and
26246 -`gl_lstat'.
26248 - - Data Type: glob64_t
26249 - This data type holds a pointer to a word vector. More precisely,
26250 - it records both the address of the word vector and its size. The
26251 - GNU implementation contains some more fields which are non-standard
26252 - extensions.
26254 - `gl_pathc'
26255 - The number of elements in the vector, excluding the initial
26256 - null entries if the GLOB_DOOFFS flag is used (see gl_offs
26257 - below).
26259 - `gl_pathv'
26260 - The address of the vector. This field has type `char **'.
26262 - `gl_offs'
26263 - The offset of the first real element of the vector, from its
26264 - nominal address in the `gl_pathv' field. Unlike the other
26265 - fields, this is always an input to `glob', rather than an
26266 - output from it.
26268 - If you use a nonzero offset, then that many elements at the
26269 - beginning of the vector are left empty. (The `glob' function
26270 - fills them with null pointers.)
26272 - The `gl_offs' field is meaningful only if you use the
26273 - `GLOB_DOOFFS' flag. Otherwise, the offset is always zero
26274 - regardless of what is in this field, and the first real
26275 - element comes at the beginning of the vector.
26277 - `gl_closedir'
26278 - The address of an alternative implementation of the `closedir'
26279 - function. It is used if the `GLOB_ALTDIRFUNC' bit is set in
26280 - the flag parameter. The type of this field is
26281 - `void (*) (void *)'.
26283 - This is a GNU extension.
26285 - `gl_readdir'
26286 - The address of an alternative implementation of the
26287 - `readdir64' function used to read the contents of a
26288 - directory. It is used if the `GLOB_ALTDIRFUNC' bit is set in
26289 - the flag parameter. The type of this field is
26290 - `struct dirent64 *(*) (void *)'.
26292 - This is a GNU extension.
26294 - `gl_opendir'
26295 - The address of an alternative implementation of the `opendir'
26296 - function. It is used if the `GLOB_ALTDIRFUNC' bit is set in
26297 - the flag parameter. The type of this field is
26298 - `void *(*) (const char *)'.
26300 - This is a GNU extension.
26302 - `gl_stat'
26303 - The address of an alternative implementation of the `stat64'
26304 - function to get information about an object in the
26305 - filesystem. It is used if the `GLOB_ALTDIRFUNC' bit is set
26306 - in the flag parameter. The type of this field is
26307 - `int (*) (const char *, struct stat64 *)'.
26309 - This is a GNU extension.
26311 - `gl_lstat'
26312 - The address of an alternative implementation of the `lstat64'
26313 - function to get information about an object in the
26314 - filesystems, not following symbolic links. It is used if the
26315 - `GLOB_ALTDIRFUNC' bit is set in the flag parameter. The type
26316 - of this field is `int (*) (const char *, struct stat64 *)'.
26318 - This is a GNU extension.
26320 - - Function: int glob (const char *PATTERN, int FLAGS, int (*ERRFUNC)
26321 - (const char *FILENAME, int ERROR-CODE), glob_t *VECTOR-PTR)
26322 - The function `glob' does globbing using the pattern PATTERN in the
26323 - current directory. It puts the result in a newly allocated
26324 - vector, and stores the size and address of this vector into
26325 - `*VECTOR-PTR'. The argument FLAGS is a combination of bit flags;
26326 - see *Note Flags for Globbing::, for details of the flags.
26328 - The result of globbing is a sequence of file names. The function
26329 - `glob' allocates a string for each resulting word, then allocates
26330 - a vector of type `char **' to store the addresses of these
26331 - strings. The last element of the vector is a null pointer. This
26332 - vector is called the "word vector".
26334 - To return this vector, `glob' stores both its address and its
26335 - length (number of elements, not counting the terminating null
26336 - pointer) into `*VECTOR-PTR'.
26338 - Normally, `glob' sorts the file names alphabetically before
26339 - returning them. You can turn this off with the flag `GLOB_NOSORT'
26340 - if you want to get the information as fast as possible. Usually
26341 - it's a good idea to let `glob' sort them--if you process the files
26342 - in alphabetical order, the users will have a feel for the rate of
26343 - progress that your application is making.
26345 - If `glob' succeeds, it returns 0. Otherwise, it returns one of
26346 - these error codes:
26348 - `GLOB_ABORTED'
26349 - There was an error opening a directory, and you used the flag
26350 - `GLOB_ERR' or your specified ERRFUNC returned a nonzero value.
26351 - *Note Flags for Globbing::, for an explanation of the
26352 - `GLOB_ERR' flag and ERRFUNC.
26354 - `GLOB_NOMATCH'
26355 - The pattern didn't match any existing files. If you use the
26356 - `GLOB_NOCHECK' flag, then you never get this error code,
26357 - because that flag tells `glob' to _pretend_ that the pattern
26358 - matched at least one file.
26360 - `GLOB_NOSPACE'
26361 - It was impossible to allocate memory to hold the result.
26363 - In the event of an error, `glob' stores information in
26364 - `*VECTOR-PTR' about all the matches it has found so far.
26366 - It is important to notice that the `glob' function will not fail if
26367 - it encounters directories or files which cannot be handled without
26368 - the LFS interfaces. The implementation of `glob' is supposed to
26369 - use these functions internally. This at least is the assumptions
26370 - made by the Unix standard. The GNU extension of allowing the user
26371 - to provide own directory handling and `stat' functions complicates
26372 - things a bit. If these callback functions are used and a large
26373 - file or directory is encountered `glob' _can_ fail.
26375 - - Function: int glob64 (const char *PATTERN, int FLAGS, int (*ERRFUNC)
26376 - (const char *FILENAME, int ERROR-CODE), glob64_t *VECTOR-PTR)
26377 - The `glob64' function was added as part of the Large File Summit
26378 - extensions but is not part of the original LFS proposal. The
26379 - reason for this is simple: it is not necessary. The necessity for
26380 - a `glob64' function is added by the extensions of the GNU `glob'
26381 - implementation which allows the user to provide own directory
26382 - handling and `stat' functions. The `readdir' and `stat' functions
26383 - do depend on the choice of `_FILE_OFFSET_BITS' since the definition
26384 - of the types `struct dirent' and `struct stat' will change
26385 - depending on the choice.
26387 - Beside this difference the `glob64' works just like `glob' in all
26388 - aspects.
26390 - This function is a GNU extension.
26392 -\x1f
26393 -File: libc.info, Node: Flags for Globbing, Next: More Flags for Globbing, Prev: Calling Glob, Up: Globbing
26395 -Flags for Globbing
26396 -------------------
26398 - This section describes the flags that you can specify in the FLAGS
26399 -argument to `glob'. Choose the flags you want, and combine them with
26400 -the C bitwise OR operator `|'.
26402 -`GLOB_APPEND'
26403 - Append the words from this expansion to the vector of words
26404 - produced by previous calls to `glob'. This way you can
26405 - effectively expand several words as if they were concatenated with
26406 - spaces between them.
26408 - In order for appending to work, you must not modify the contents
26409 - of the word vector structure between calls to `glob'. And, if you
26410 - set `GLOB_DOOFFS' in the first call to `glob', you must also set
26411 - it when you append to the results.
26413 - Note that the pointer stored in `gl_pathv' may no longer be valid
26414 - after you call `glob' the second time, because `glob' might have
26415 - relocated the vector. So always fetch `gl_pathv' from the
26416 - `glob_t' structure after each `glob' call; *never* save the
26417 - pointer across calls.
26419 -`GLOB_DOOFFS'
26420 - Leave blank slots at the beginning of the vector of words. The
26421 - `gl_offs' field says how many slots to leave. The blank slots
26422 - contain null pointers.
26424 -`GLOB_ERR'
26425 - Give up right away and report an error if there is any difficulty
26426 - reading the directories that must be read in order to expand
26427 - PATTERN fully. Such difficulties might include a directory in
26428 - which you don't have the requisite access. Normally, `glob' tries
26429 - its best to keep on going despite any errors, reading whatever
26430 - directories it can.
26432 - You can exercise even more control than this by specifying an
26433 - error-handler function ERRFUNC when you call `glob'. If ERRFUNC
26434 - is not a null pointer, then `glob' doesn't give up right away when
26435 - it can't read a directory; instead, it calls ERRFUNC with two
26436 - arguments, like this:
26438 - (*ERRFUNC) (FILENAME, ERROR-CODE)
26440 - The argument FILENAME is the name of the directory that `glob'
26441 - couldn't open or couldn't read, and ERROR-CODE is the `errno'
26442 - value that was reported to `glob'.
26444 - If the error handler function returns nonzero, then `glob' gives up
26445 - right away. Otherwise, it continues.
26447 -`GLOB_MARK'
26448 - If the pattern matches the name of a directory, append `/' to the
26449 - directory's name when returning it.
26451 -`GLOB_NOCHECK'
26452 - If the pattern doesn't match any file names, return the pattern
26453 - itself as if it were a file name that had been matched.
26454 - (Normally, when the pattern doesn't match anything, `glob' returns
26455 - that there were no matches.)
26457 -`GLOB_NOSORT'
26458 - Don't sort the file names; return them in no particular order.
26459 - (In practice, the order will depend on the order of the entries in
26460 - the directory.) The only reason _not_ to sort is to save time.
26462 -`GLOB_NOESCAPE'
26463 - Don't treat the `\' character specially in patterns. Normally,
26464 - `\' quotes the following character, turning off its special meaning
26465 - (if any) so that it matches only itself. When quoting is enabled,
26466 - the pattern `\?' matches only the string `?', because the question
26467 - mark in the pattern acts like an ordinary character.
26469 - If you use `GLOB_NOESCAPE', then `\' is an ordinary character.
26471 - `glob' does its work by calling the function `fnmatch' repeatedly.
26472 - It handles the flag `GLOB_NOESCAPE' by turning on the
26473 - `FNM_NOESCAPE' flag in calls to `fnmatch'.
26475 -\x1f
26476 -File: libc.info, Node: More Flags for Globbing, Prev: Flags for Globbing, Up: Globbing
26478 -More Flags for Globbing
26479 ------------------------
26481 - Beside the flags described in the last section, the GNU
26482 -implementation of `glob' allows a few more flags which are also defined
26483 -in the `glob.h' file. Some of the extensions implement functionality
26484 -which is available in modern shell implementations.
26486 -`GLOB_PERIOD'
26487 - The `.' character (period) is treated special. It cannot be
26488 - matched by wildcards. *Note Wildcard Matching::, `FNM_PERIOD'.
26490 -`GLOB_MAGCHAR'
26491 - The `GLOB_MAGCHAR' value is not to be given to `glob' in the FLAGS
26492 - parameter. Instead, `glob' sets this bit in the GL_FLAGS element
26493 - of the GLOB_T structure provided as the result if the pattern used
26494 - for matching contains any wildcard character.
26496 -`GLOB_ALTDIRFUNC'
26497 - Instead of the using the using the normal functions for accessing
26498 - the filesystem the `glob' implementation uses the user-supplied
26499 - functions specified in the structure pointed to by PGLOB
26500 - parameter. For more information about the functions refer to the
26501 - sections about directory handling see *Note Accessing
26502 - Directories::, and *Note Reading Attributes::.
26504 -`GLOB_BRACE'
26505 - If this flag is given the handling of braces in the pattern is
26506 - changed. It is now required that braces appear correctly grouped.
26507 - I.e., for each opening brace there must be a closing one. Braces
26508 - can be used recursively. So it is possible to define one brace
26509 - expression in another one. It is important to note that the range
26510 - of each brace expression is completely contained in the outer
26511 - brace expression (if there is one).
26513 - The string between the matching braces is separated into single
26514 - expressions by splitting at `,' (comma) characters. The commas
26515 - themselves are discarded. Please note what we said above about
26516 - recursive brace expressions. The commas used to separate the
26517 - subexpressions must be at the same level. Commas in brace
26518 - subexpressions are not matched. They are used during expansion of
26519 - the brace expression of the deeper level. The example below shows
26520 - this
26522 - glob ("{foo/{,bar,biz},baz}", GLOB_BRACE, NULL, &result)
26524 - is equivalent to the sequence
26526 - glob ("foo/", GLOB_BRACE, NULL, &result)
26527 - glob ("foo/bar", GLOB_BRACE|GLOB_APPEND, NULL, &result)
26528 - glob ("foo/biz", GLOB_BRACE|GLOB_APPEND, NULL, &result)
26529 - glob ("baz", GLOB_BRACE|GLOB_APPEND, NULL, &result)
26531 - if we leave aside error handling.
26533 -`GLOB_NOMAGIC'
26534 - If the pattern contains no wildcard constructs (it is a literal
26535 - file name), return it as the sole "matching" word, even if no file
26536 - exists by that name.
26538 -`GLOB_TILDE'
26539 - If this flag is used the character `~' (tilde) is handled special
26540 - if it appears at the beginning of the pattern. Instead of being
26541 - taken verbatim it is used to represent the home directory of a
26542 - known user.
26544 - If `~' is the only character in pattern or it is followed by a `/'
26545 - (slash), the home directory of the process owner is substituted.
26546 - Using `getlogin' and `getpwnam' the information is read from the
26547 - system databases. As an example take user `bart' with his home
26548 - directory at `/home/bart'. For him a call like
26550 - glob ("~/bin/*", GLOB_TILDE, NULL, &result)
26552 - would return the contents of the directory `/home/bart/bin'.
26553 - Instead of referring to the own home directory it is also possible
26554 - to name the home directory of other users. To do so one has to
26555 - append the user name after the tilde character. So the contents
26556 - of user `homer''s `bin' directory can be retrieved by
26558 - glob ("~homer/bin/*", GLOB_TILDE, NULL, &result)
26560 - If the user name is not valid or the home directory cannot be
26561 - determined for some reason the pattern is left untouched and
26562 - itself used as the result. I.e., if in the last example `home' is
26563 - not available the tilde expansion yields to `"~homer/bin/*"' and
26564 - `glob' is not looking for a directory named `~homer'.
26566 - This functionality is equivalent to what is available in C-shells
26567 - if the `nonomatch' flag is set.
26569 -`GLOB_TILDE_CHECK'
26570 - If this flag is used `glob' behaves like as if `GLOB_TILDE' is
26571 - given. The only difference is that if the user name is not
26572 - available or the home directory cannot be determined for other
26573 - reasons this leads to an error. `glob' will return `GLOB_NOMATCH'
26574 - instead of using the pattern itself as the name.
26576 - This functionality is equivalent to what is available in C-shells
26577 - if `nonomatch' flag is not set.
26579 -`GLOB_ONLYDIR'
26580 - If this flag is used the globbing function takes this as a *hint*
26581 - that the caller is only interested in directories matching the
26582 - pattern. If the information about the type of the file is easily
26583 - available non-directories will be rejected but no extra work will
26584 - be done to determine the information for each file. I.e., the
26585 - caller must still be able to filter directories out.
26587 - This functionality is only available with the GNU `glob'
26588 - implementation. It is mainly used internally to increase the
26589 - performance but might be useful for a user as well and therefore is
26590 - documented here.
26592 - Calling `glob' will in most cases allocate resources which are used
26593 -to represent the result of the function call. If the same object of
26594 -type `glob_t' is used in multiple call to `glob' the resources are
26595 -freed or reused so that no leaks appear. But this does not include the
26596 -time when all `glob' calls are done.
26598 - - Function: void globfree (glob_t *PGLOB)
26599 - The `globfree' function frees all resources allocated by previous
26600 - calls to `glob' associated with the object pointed to by PGLOB.
26601 - This function should be called whenever the currently used
26602 - `glob_t' typed object isn't used anymore.
26604 - - Function: void globfree64 (glob64_t *PGLOB)
26605 - This function is equivalent to `globfree' but it frees records of
26606 - type `glob64_t' which were allocated by `glob64'.
26608 -\x1f
26609 -File: libc.info, Node: Regular Expressions, Next: Word Expansion, Prev: Globbing, Up: Pattern Matching
26611 -Regular Expression Matching
26612 -===========================
26614 - The GNU C library supports two interfaces for matching regular
26615 -expressions. One is the standard POSIX.2 interface, and the other is
26616 -what the GNU system has had for many years.
26618 - Both interfaces are declared in the header file `regex.h'. If you
26619 -define `_POSIX_C_SOURCE', then only the POSIX.2 functions, structures,
26620 -and constants are declared.
26622 -* Menu:
26624 -* POSIX Regexp Compilation:: Using `regcomp' to prepare to match.
26625 -* Flags for POSIX Regexps:: Syntax variations for `regcomp'.
26626 -* Matching POSIX Regexps:: Using `regexec' to match the compiled
26627 - pattern that you get from `regcomp'.
26628 -* Regexp Subexpressions:: Finding which parts of the string were matched.
26629 -* Subexpression Complications:: Find points of which parts were matched.
26630 -* Regexp Cleanup:: Freeing storage; reporting errors.
26632 -\x1f
26633 -File: libc.info, Node: POSIX Regexp Compilation, Next: Flags for POSIX Regexps, Up: Regular Expressions
26635 -POSIX Regular Expression Compilation
26636 -------------------------------------
26638 - Before you can actually match a regular expression, you must
26639 -"compile" it. This is not true compilation--it produces a special data
26640 -structure, not machine instructions. But it is like ordinary
26641 -compilation in that its purpose is to enable you to "execute" the
26642 -pattern fast. (*Note Matching POSIX Regexps::, for how to use the
26643 -compiled regular expression for matching.)
26645 - There is a special data type for compiled regular expressions:
26647 - - Data Type: regex_t
26648 - This type of object holds a compiled regular expression. It is
26649 - actually a structure. It has just one field that your programs
26650 - should look at:
26652 - `re_nsub'
26653 - This field holds the number of parenthetical subexpressions
26654 - in the regular expression that was compiled.
26656 - There are several other fields, but we don't describe them here,
26657 - because only the functions in the library should use them.
26659 - After you create a `regex_t' object, you can compile a regular
26660 -expression into it by calling `regcomp'.
26662 - - Function: int regcomp (regex_t *COMPILED, const char *PATTERN, int
26663 - CFLAGS)
26664 - The function `regcomp' "compiles" a regular expression into a data
26665 - structure that you can use with `regexec' to match against a
26666 - string. The compiled regular expression format is designed for
26667 - efficient matching. `regcomp' stores it into `*COMPILED'.
26669 - It's up to you to allocate an object of type `regex_t' and pass its
26670 - address to `regcomp'.
26672 - The argument CFLAGS lets you specify various options that control
26673 - the syntax and semantics of regular expressions. *Note Flags for
26674 - POSIX Regexps::.
26676 - If you use the flag `REG_NOSUB', then `regcomp' omits from the
26677 - compiled regular expression the information necessary to record
26678 - how subexpressions actually match. In this case, you might as well
26679 - pass `0' for the MATCHPTR and NMATCH arguments when you call
26680 - `regexec'.
26682 - If you don't use `REG_NOSUB', then the compiled regular expression
26683 - does have the capacity to record how subexpressions match. Also,
26684 - `regcomp' tells you how many subexpressions PATTERN has, by
26685 - storing the number in `COMPILED->re_nsub'. You can use that value
26686 - to decide how long an array to allocate to hold information about
26687 - subexpression matches.
26689 - `regcomp' returns `0' if it succeeds in compiling the regular
26690 - expression; otherwise, it returns a nonzero error code (see the
26691 - table below). You can use `regerror' to produce an error message
26692 - string describing the reason for a nonzero value; see *Note Regexp
26693 - Cleanup::.
26696 - Here are the possible nonzero values that `regcomp' can return:
26698 -`REG_BADBR'
26699 - There was an invalid `\{...\}' construct in the regular
26700 - expression. A valid `\{...\}' construct must contain either a
26701 - single number, or two numbers in increasing order separated by a
26702 - comma.
26704 -`REG_BADPAT'
26705 - There was a syntax error in the regular expression.
26707 -`REG_BADRPT'
26708 - A repetition operator such as `?' or `*' appeared in a bad
26709 - position (with no preceding subexpression to act on).
26711 -`REG_ECOLLATE'
26712 - The regular expression referred to an invalid collating element
26713 - (one not defined in the current locale for string collation).
26714 - *Note Locale Categories::.
26716 -`REG_ECTYPE'
26717 - The regular expression referred to an invalid character class name.
26719 -`REG_EESCAPE'
26720 - The regular expression ended with `\'.
26722 -`REG_ESUBREG'
26723 - There was an invalid number in the `\DIGIT' construct.
26725 -`REG_EBRACK'
26726 - There were unbalanced square brackets in the regular expression.
26728 -`REG_EPAREN'
26729 - An extended regular expression had unbalanced parentheses, or a
26730 - basic regular expression had unbalanced `\(' and `\)'.
26732 -`REG_EBRACE'
26733 - The regular expression had unbalanced `\{' and `\}'.
26735 -`REG_ERANGE'
26736 - One of the endpoints in a range expression was invalid.
26738 -`REG_ESPACE'
26739 - `regcomp' ran out of memory.
26741 -\x1f
26742 -File: libc.info, Node: Flags for POSIX Regexps, Next: Matching POSIX Regexps, Prev: POSIX Regexp Compilation, Up: Regular Expressions
26744 -Flags for POSIX Regular Expressions
26745 ------------------------------------
26747 - These are the bit flags that you can use in the CFLAGS operand when
26748 -compiling a regular expression with `regcomp'.
26750 -`REG_EXTENDED'
26751 - Treat the pattern as an extended regular expression, rather than
26752 - as a basic regular expression.
26754 -`REG_ICASE'
26755 - Ignore case when matching letters.
26757 -`REG_NOSUB'
26758 - Don't bother storing the contents of the MATCHES-PTR array.
26760 -`REG_NEWLINE'
26761 - Treat a newline in STRING as dividing STRING into multiple lines,
26762 - so that `$' can match before the newline and `^' can match after.
26763 - Also, don't permit `.' to match a newline, and don't permit
26764 - `[^...]' to match a newline.
26766 - Otherwise, newline acts like any other ordinary character.
26768 -\x1f
26769 -File: libc.info, Node: Matching POSIX Regexps, Next: Regexp Subexpressions, Prev: Flags for POSIX Regexps, Up: Regular Expressions
26771 -Matching a Compiled POSIX Regular Expression
26772 ---------------------------------------------
26774 - Once you have compiled a regular expression, as described in *Note
26775 -POSIX Regexp Compilation::, you can match it against strings using
26776 -`regexec'. A match anywhere inside the string counts as success,
26777 -unless the regular expression contains anchor characters (`^' or `$').
26779 - - Function: int regexec (regex_t *COMPILED, char *STRING, size_t
26780 - NMATCH, regmatch_t MATCHPTR [], int EFLAGS)
26781 - This function tries to match the compiled regular expression
26782 - `*COMPILED' against STRING.
26784 - `regexec' returns `0' if the regular expression matches;
26785 - otherwise, it returns a nonzero value. See the table below for
26786 - what nonzero values mean. You can use `regerror' to produce an
26787 - error message string describing the reason for a nonzero value;
26788 - see *Note Regexp Cleanup::.
26790 - The argument EFLAGS is a word of bit flags that enable various
26791 - options.
26793 - If you want to get information about what part of STRING actually
26794 - matched the regular expression or its subexpressions, use the
26795 - arguments MATCHPTR and NMATCH. Otherwise, pass `0' for NMATCH,
26796 - and `NULL' for MATCHPTR. *Note Regexp Subexpressions::.
26798 - You must match the regular expression with the same set of current
26799 -locales that were in effect when you compiled the regular expression.
26801 - The function `regexec' accepts the following flags in the EFLAGS
26802 -argument:
26804 -`REG_NOTBOL'
26805 - Do not regard the beginning of the specified string as the
26806 - beginning of a line; more generally, don't make any assumptions
26807 - about what text might precede it.
26809 -`REG_NOTEOL'
26810 - Do not regard the end of the specified string as the end of a
26811 - line; more generally, don't make any assumptions about what text
26812 - might follow it.
26814 - Here are the possible nonzero values that `regexec' can return:
26816 -`REG_NOMATCH'
26817 - The pattern didn't match the string. This isn't really an error.
26819 -`REG_ESPACE'
26820 - `regexec' ran out of memory.
26822 -\x1f
26823 -File: libc.info, Node: Regexp Subexpressions, Next: Subexpression Complications, Prev: Matching POSIX Regexps, Up: Regular Expressions
26825 -Match Results with Subexpressions
26826 ----------------------------------
26828 - When `regexec' matches parenthetical subexpressions of PATTERN, it
26829 -records which parts of STRING they match. It returns that information
26830 -by storing the offsets into an array whose elements are structures of
26831 -type `regmatch_t'. The first element of the array (index `0') records
26832 -the part of the string that matched the entire regular expression.
26833 -Each other element of the array records the beginning and end of the
26834 -part that matched a single parenthetical subexpression.
26836 - - Data Type: regmatch_t
26837 - This is the data type of the MATCHARRAY array that you pass to
26838 - `regexec'. It contains two structure fields, as follows:
26840 - `rm_so'
26841 - The offset in STRING of the beginning of a substring. Add
26842 - this value to STRING to get the address of that part.
26844 - `rm_eo'
26845 - The offset in STRING of the end of the substring.
26847 - - Data Type: regoff_t
26848 - `regoff_t' is an alias for another signed integer type. The
26849 - fields of `regmatch_t' have type `regoff_t'.
26851 - The `regmatch_t' elements correspond to subexpressions positionally;
26852 -the first element (index `1') records where the first subexpression
26853 -matched, the second element records the second subexpression, and so
26854 -on. The order of the subexpressions is the order in which they begin.
26856 - When you call `regexec', you specify how long the MATCHPTR array is,
26857 -with the NMATCH argument. This tells `regexec' how many elements to
26858 -store. If the actual regular expression has more than NMATCH
26859 -subexpressions, then you won't get offset information about the rest of
26860 -them. But this doesn't alter whether the pattern matches a particular
26861 -string or not.
26863 - If you don't want `regexec' to return any information about where
26864 -the subexpressions matched, you can either supply `0' for NMATCH, or
26865 -use the flag `REG_NOSUB' when you compile the pattern with `regcomp'.
26867 -\x1f
26868 -File: libc.info, Node: Subexpression Complications, Next: Regexp Cleanup, Prev: Regexp Subexpressions, Up: Regular Expressions
26870 -Complications in Subexpression Matching
26871 ----------------------------------------
26873 - Sometimes a subexpression matches a substring of no characters. This
26874 -happens when `f\(o*\)' matches the string `fum'. (It really matches
26875 -just the `f'.) In this case, both of the offsets identify the point in
26876 -the string where the null substring was found. In this example, the
26877 -offsets are both `1'.
26879 - Sometimes the entire regular expression can match without using some
26880 -of its subexpressions at all--for example, when `ba\(na\)*' matches the
26881 -string `ba', the parenthetical subexpression is not used. When this
26882 -happens, `regexec' stores `-1' in both fields of the element for that
26883 -subexpression.
26885 - Sometimes matching the entire regular expression can match a
26886 -particular subexpression more than once--for example, when `ba\(na\)*'
26887 -matches the string `bananana', the parenthetical subexpression matches
26888 -three times. When this happens, `regexec' usually stores the offsets
26889 -of the last part of the string that matched the subexpression. In the
26890 -case of `bananana', these offsets are `6' and `8'.
26892 - But the last match is not always the one that is chosen. It's more
26893 -accurate to say that the last _opportunity_ to match is the one that
26894 -takes precedence. What this means is that when one subexpression
26895 -appears within another, then the results reported for the inner
26896 -subexpression reflect whatever happened on the last match of the outer
26897 -subexpression. For an example, consider `\(ba\(na\)*s \)*' matching
26898 -the string `bananas bas '. The last time the inner expression actually
26899 -matches is near the end of the first word. But it is _considered_
26900 -again in the second word, and fails to match there. `regexec' reports
26901 -nonuse of the "na" subexpression.
26903 - Another place where this rule applies is when the regular expression
26904 - \(ba\(na\)*s \|nefer\(ti\)* \)*
26906 -matches `bananas nefertiti'. The "na" subexpression does match in the
26907 -first word, but it doesn't match in the second word because the other
26908 -alternative is used there. Once again, the second repetition of the
26909 -outer subexpression overrides the first, and within that second
26910 -repetition, the "na" subexpression is not used. So `regexec' reports
26911 -nonuse of the "na" subexpression.
26913 -\x1f
26914 -File: libc.info, Node: Regexp Cleanup, Prev: Subexpression Complications, Up: Regular Expressions
26916 -POSIX Regexp Matching Cleanup
26917 ------------------------------
26919 - When you are finished using a compiled regular expression, you can
26920 -free the storage it uses by calling `regfree'.
26922 - - Function: void regfree (regex_t *COMPILED)
26923 - Calling `regfree' frees all the storage that `*COMPILED' points
26924 - to. This includes various internal fields of the `regex_t'
26925 - structure that aren't documented in this manual.
26927 - `regfree' does not free the object `*COMPILED' itself.
26929 - You should always free the space in a `regex_t' structure with
26930 -`regfree' before using the structure to compile another regular
26931 -expression.
26933 - When `regcomp' or `regexec' reports an error, you can use the
26934 -function `regerror' to turn it into an error message string.
26936 - - Function: size_t regerror (int ERRCODE, regex_t *COMPILED, char
26937 - *BUFFER, size_t LENGTH)
26938 - This function produces an error message string for the error code
26939 - ERRCODE, and stores the string in LENGTH bytes of memory starting
26940 - at BUFFER. For the COMPILED argument, supply the same compiled
26941 - regular expression structure that `regcomp' or `regexec' was
26942 - working with when it got the error. Alternatively, you can supply
26943 - `NULL' for COMPILED; you will still get a meaningful error
26944 - message, but it might not be as detailed.
26946 - If the error message can't fit in LENGTH bytes (including a
26947 - terminating null character), then `regerror' truncates it. The
26948 - string that `regerror' stores is always null-terminated even if it
26949 - has been truncated.
26951 - The return value of `regerror' is the minimum length needed to
26952 - store the entire error message. If this is less than LENGTH, then
26953 - the error message was not truncated, and you can use it.
26954 - Otherwise, you should call `regerror' again with a larger buffer.
26956 - Here is a function which uses `regerror', but always dynamically
26957 - allocates a buffer for the error message:
26959 - char *get_regerror (int errcode, regex_t *compiled)
26961 - size_t length = regerror (errcode, compiled, NULL, 0);
26962 - char *buffer = xmalloc (length);
26963 - (void) regerror (errcode, compiled, buffer, length);
26964 - return buffer;
26967 -\x1f
26968 -File: libc.info, Node: Word Expansion, Prev: Regular Expressions, Up: Pattern Matching
26970 -Shell-Style Word Expansion
26971 -==========================
26973 - "Word expansion" means the process of splitting a string into
26974 -"words" and substituting for variables, commands, and wildcards just as
26975 -the shell does.
26977 - For example, when you write `ls -l foo.c', this string is split into
26978 -three separate words--`ls', `-l' and `foo.c'. This is the most basic
26979 -function of word expansion.
26981 - When you write `ls *.c', this can become many words, because the
26982 -word `*.c' can be replaced with any number of file names. This is
26983 -called "wildcard expansion", and it is also a part of word expansion.
26985 - When you use `echo $PATH' to print your path, you are taking
26986 -advantage of "variable substitution", which is also part of word
26987 -expansion.
26989 - Ordinary programs can perform word expansion just like the shell by
26990 -calling the library function `wordexp'.
26992 -* Menu:
26994 -* Expansion Stages:: What word expansion does to a string.
26995 -* Calling Wordexp:: How to call `wordexp'.
26996 -* Flags for Wordexp:: Options you can enable in `wordexp'.
26997 -* Wordexp Example:: A sample program that does word expansion.
26998 -* Tilde Expansion:: Details of how tilde expansion works.
26999 -* Variable Substitution:: Different types of variable substitution.
27001 -\x1f
27002 -File: libc.info, Node: Expansion Stages, Next: Calling Wordexp, Up: Word Expansion
27004 -The Stages of Word Expansion
27005 -----------------------------
27007 - When word expansion is applied to a sequence of words, it performs
27008 -the following transformations in the order shown here:
27010 - 1. "Tilde expansion": Replacement of `~foo' with the name of the home
27011 - directory of `foo'.
27013 - 2. Next, three different transformations are applied in the same step,
27014 - from left to right:
27016 - * "Variable substitution": Environment variables are
27017 - substituted for references such as `$foo'.
27019 - * "Command substitution": Constructs such as ``cat foo`' and
27020 - the equivalent `$(cat foo)' are replaced with the output from
27021 - the inner command.
27023 - * "Arithmetic expansion": Constructs such as `$(($x-1))' are
27024 - replaced with the result of the arithmetic computation.
27026 - 3. "Field splitting": subdivision of the text into "words".
27028 - 4. "Wildcard expansion": The replacement of a construct such as `*.c'
27029 - with a list of `.c' file names. Wildcard expansion applies to an
27030 - entire word at a time, and replaces that word with 0 or more file
27031 - names that are themselves words.
27033 - 5. "Quote removal": The deletion of string-quotes, now that they have
27034 - done their job by inhibiting the above transformations when
27035 - appropriate.
27037 - For the details of these transformations, and how to write the
27038 -constructs that use them, see `The BASH Manual' (to appear).
27040 diff -u -udbrN glibc-2.3.2/manual/libc.info-16 glibc-2.3.2-200304020432/manual/libc.info-16
27041 --- glibc-2.3.2/manual/libc.info-16 Sat Mar 1 02:39:41 2003
27042 +++ glibc-2.3.2-200304020432/manual/libc.info-16 Thu Jan 1 01:00:00 1970
27043 @@ -1,1127 +0,0 @@
27044 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
27046 -INFO-DIR-SECTION GNU libraries
27047 -START-INFO-DIR-ENTRY
27048 -* Libc: (libc). C library.
27049 -END-INFO-DIR-ENTRY
27051 - This file documents the GNU C library.
27053 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
27054 -Reference Manual', for Version 2.3.x.
27056 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
27057 -Free Software Foundation, Inc.
27059 - Permission is granted to copy, distribute and/or modify this document
27060 -under the terms of the GNU Free Documentation License, Version 1.1 or
27061 -any later version published by the Free Software Foundation; with the
27062 -Invariant Sections being "Free Software Needs Free Documentation" and
27063 -"GNU Lesser General Public License", the Front-Cover texts being (a)
27064 -(see below), and with the Back-Cover Texts being (b) (see below). A
27065 -copy of the license is included in the section entitled "GNU Free
27066 -Documentation License".
27068 - (a) The FSF's Front-Cover Text is:
27070 - A GNU Manual
27072 - (b) The FSF's Back-Cover Text is:
27074 - You have freedom to copy and modify this GNU Manual, like GNU
27075 -software. Copies published by the Free Software Foundation raise
27076 -funds for GNU development.
27078 -\x1f
27079 -File: libc.info, Node: Calling Wordexp, Next: Flags for Wordexp, Prev: Expansion Stages, Up: Word Expansion
27081 -Calling `wordexp'
27082 ------------------
27084 - All the functions, constants and data types for word expansion are
27085 -declared in the header file `wordexp.h'.
27087 - Word expansion produces a vector of words (strings). To return this
27088 -vector, `wordexp' uses a special data type, `wordexp_t', which is a
27089 -structure. You pass `wordexp' the address of the structure, and it
27090 -fills in the structure's fields to tell you about the results.
27092 - - Data Type: wordexp_t
27093 - This data type holds a pointer to a word vector. More precisely,
27094 - it records both the address of the word vector and its size.
27096 - `we_wordc'
27097 - The number of elements in the vector.
27099 - `we_wordv'
27100 - The address of the vector. This field has type `char **'.
27102 - `we_offs'
27103 - The offset of the first real element of the vector, from its
27104 - nominal address in the `we_wordv' field. Unlike the other
27105 - fields, this is always an input to `wordexp', rather than an
27106 - output from it.
27108 - If you use a nonzero offset, then that many elements at the
27109 - beginning of the vector are left empty. (The `wordexp'
27110 - function fills them with null pointers.)
27112 - The `we_offs' field is meaningful only if you use the
27113 - `WRDE_DOOFFS' flag. Otherwise, the offset is always zero
27114 - regardless of what is in this field, and the first real
27115 - element comes at the beginning of the vector.
27117 - - Function: int wordexp (const char *WORDS, wordexp_t
27118 - *WORD-VECTOR-PTR, int FLAGS)
27119 - Perform word expansion on the string WORDS, putting the result in
27120 - a newly allocated vector, and store the size and address of this
27121 - vector into `*WORD-VECTOR-PTR'. The argument FLAGS is a
27122 - combination of bit flags; see *Note Flags for Wordexp::, for
27123 - details of the flags.
27125 - You shouldn't use any of the characters `|&;<>' in the string
27126 - WORDS unless they are quoted; likewise for newline. If you use
27127 - these characters unquoted, you will get the `WRDE_BADCHAR' error
27128 - code. Don't use parentheses or braces unless they are quoted or
27129 - part of a word expansion construct. If you use quotation
27130 - characters `'"`', they should come in pairs that balance.
27132 - The results of word expansion are a sequence of words. The
27133 - function `wordexp' allocates a string for each resulting word, then
27134 - allocates a vector of type `char **' to store the addresses of
27135 - these strings. The last element of the vector is a null pointer.
27136 - This vector is called the "word vector".
27138 - To return this vector, `wordexp' stores both its address and its
27139 - length (number of elements, not counting the terminating null
27140 - pointer) into `*WORD-VECTOR-PTR'.
27142 - If `wordexp' succeeds, it returns 0. Otherwise, it returns one of
27143 - these error codes:
27145 - `WRDE_BADCHAR'
27146 - The input string WORDS contains an unquoted invalid character
27147 - such as `|'.
27149 - `WRDE_BADVAL'
27150 - The input string refers to an undefined shell variable, and
27151 - you used the flag `WRDE_UNDEF' to forbid such references.
27153 - `WRDE_CMDSUB'
27154 - The input string uses command substitution, and you used the
27155 - flag `WRDE_NOCMD' to forbid command substitution.
27157 - `WRDE_NOSPACE'
27158 - It was impossible to allocate memory to hold the result. In
27159 - this case, `wordexp' can store part of the results--as much
27160 - as it could allocate room for.
27162 - `WRDE_SYNTAX'
27163 - There was a syntax error in the input string. For example,
27164 - an unmatched quoting character is a syntax error.
27166 - - Function: void wordfree (wordexp_t *WORD-VECTOR-PTR)
27167 - Free the storage used for the word-strings and vector that
27168 - `*WORD-VECTOR-PTR' points to. This does not free the structure
27169 - `*WORD-VECTOR-PTR' itself--only the other data it points to.
27171 -\x1f
27172 -File: libc.info, Node: Flags for Wordexp, Next: Wordexp Example, Prev: Calling Wordexp, Up: Word Expansion
27174 -Flags for Word Expansion
27175 -------------------------
27177 - This section describes the flags that you can specify in the FLAGS
27178 -argument to `wordexp'. Choose the flags you want, and combine them
27179 -with the C operator `|'.
27181 -`WRDE_APPEND'
27182 - Append the words from this expansion to the vector of words
27183 - produced by previous calls to `wordexp'. This way you can
27184 - effectively expand several words as if they were concatenated with
27185 - spaces between them.
27187 - In order for appending to work, you must not modify the contents
27188 - of the word vector structure between calls to `wordexp'. And, if
27189 - you set `WRDE_DOOFFS' in the first call to `wordexp', you must also
27190 - set it when you append to the results.
27192 -`WRDE_DOOFFS'
27193 - Leave blank slots at the beginning of the vector of words. The
27194 - `we_offs' field says how many slots to leave. The blank slots
27195 - contain null pointers.
27197 -`WRDE_NOCMD'
27198 - Don't do command substitution; if the input requests command
27199 - substitution, report an error.
27201 -`WRDE_REUSE'
27202 - Reuse a word vector made by a previous call to `wordexp'. Instead
27203 - of allocating a new vector of words, this call to `wordexp' will
27204 - use the vector that already exists (making it larger if necessary).
27206 - Note that the vector may move, so it is not safe to save an old
27207 - pointer and use it again after calling `wordexp'. You must fetch
27208 - `we_pathv' anew after each call.
27210 -`WRDE_SHOWERR'
27211 - Do show any error messages printed by commands run by command
27212 - substitution. More precisely, allow these commands to inherit the
27213 - standard error output stream of the current process. By default,
27214 - `wordexp' gives these commands a standard error stream that
27215 - discards all output.
27217 -`WRDE_UNDEF'
27218 - If the input refers to a shell variable that is not defined,
27219 - report an error.
27221 -\x1f
27222 -File: libc.info, Node: Wordexp Example, Next: Tilde Expansion, Prev: Flags for Wordexp, Up: Word Expansion
27224 -`wordexp' Example
27225 ------------------
27227 - Here is an example of using `wordexp' to expand several strings and
27228 -use the results to run a shell command. It also shows the use of
27229 -`WRDE_APPEND' to concatenate the expansions and of `wordfree' to free
27230 -the space allocated by `wordexp'.
27232 - int
27233 - expand_and_execute (const char *program, const char **options)
27235 - wordexp_t result;
27236 - pid_t pid
27237 - int status, i;
27239 - /* Expand the string for the program to run. */
27240 - switch (wordexp (program, &result, 0))
27242 - case 0: /* Successful. */
27243 - break;
27244 - case WRDE_NOSPACE:
27245 - /* If the error was `WRDE_NOSPACE',
27246 - then perhaps part of the result was allocated. */
27247 - wordfree (&result);
27248 - default: /* Some other error. */
27249 - return -1;
27252 - /* Expand the strings specified for the arguments. */
27253 - for (i = 0; options[i] != NULL; i++)
27255 - if (wordexp (options[i], &result, WRDE_APPEND))
27257 - wordfree (&result);
27258 - return -1;
27262 - pid = fork ();
27263 - if (pid == 0)
27265 - /* This is the child process. Execute the command. */
27266 - execv (result.we_wordv[0], result.we_wordv);
27267 - exit (EXIT_FAILURE);
27269 - else if (pid < 0)
27270 - /* The fork failed. Report failure. */
27271 - status = -1;
27272 - else
27273 - /* This is the parent process. Wait for the child to complete. */
27274 - if (waitpid (pid, &status, 0) != pid)
27275 - status = -1;
27277 - wordfree (&result);
27278 - return status;
27281 -\x1f
27282 -File: libc.info, Node: Tilde Expansion, Next: Variable Substitution, Prev: Wordexp Example, Up: Word Expansion
27284 -Details of Tilde Expansion
27285 ---------------------------
27287 - It's a standard part of shell syntax that you can use `~' at the
27288 -beginning of a file name to stand for your own home directory. You can
27289 -use `~USER' to stand for USER's home directory.
27291 - "Tilde expansion" is the process of converting these abbreviations
27292 -to the directory names that they stand for.
27294 - Tilde expansion applies to the `~' plus all following characters up
27295 -to whitespace or a slash. It takes place only at the beginning of a
27296 -word, and only if none of the characters to be transformed is quoted in
27297 -any way.
27299 - Plain `~' uses the value of the environment variable `HOME' as the
27300 -proper home directory name. `~' followed by a user name uses
27301 -`getpwname' to look up that user in the user database, and uses
27302 -whatever directory is recorded there. Thus, `~' followed by your own
27303 -name can give different results from plain `~', if the value of `HOME'
27304 -is not really your home directory.
27306 -\x1f
27307 -File: libc.info, Node: Variable Substitution, Prev: Tilde Expansion, Up: Word Expansion
27309 -Details of Variable Substitution
27310 ---------------------------------
27312 - Part of ordinary shell syntax is the use of `$VARIABLE' to
27313 -substitute the value of a shell variable into a command. This is called
27314 -"variable substitution", and it is one part of doing word expansion.
27316 - There are two basic ways you can write a variable reference for
27317 -substitution:
27319 -`${VARIABLE}'
27320 - If you write braces around the variable name, then it is completely
27321 - unambiguous where the variable name ends. You can concatenate
27322 - additional letters onto the end of the variable value by writing
27323 - them immediately after the close brace. For example, `${foo}s'
27324 - expands into `tractors'.
27326 -`$VARIABLE'
27327 - If you do not put braces around the variable name, then the
27328 - variable name consists of all the alphanumeric characters and
27329 - underscores that follow the `$'. The next punctuation character
27330 - ends the variable name. Thus, `$foo-bar' refers to the variable
27331 - `foo' and expands into `tractor-bar'.
27333 - When you use braces, you can also use various constructs to modify
27334 -the value that is substituted, or test it in various ways.
27336 -`${VARIABLE:-DEFAULT}'
27337 - Substitute the value of VARIABLE, but if that is empty or
27338 - undefined, use DEFAULT instead.
27340 -`${VARIABLE:=DEFAULT}'
27341 - Substitute the value of VARIABLE, but if that is empty or
27342 - undefined, use DEFAULT instead and set the variable to DEFAULT.
27344 -`${VARIABLE:?MESSAGE}'
27345 - If VARIABLE is defined and not empty, substitute its value.
27347 - Otherwise, print MESSAGE as an error message on the standard error
27348 - stream, and consider word expansion a failure.
27350 -`${VARIABLE:+REPLACEMENT}'
27351 - Substitute REPLACEMENT, but only if VARIABLE is defined and
27352 - nonempty. Otherwise, substitute nothing for this construct.
27354 -`${#VARIABLE}'
27355 - Substitute a numeral which expresses in base ten the number of
27356 - characters in the value of VARIABLE. `${#foo}' stands for `7',
27357 - because `tractor' is seven characters.
27359 - These variants of variable substitution let you remove part of the
27360 -variable's value before substituting it. The PREFIX and SUFFIX are not
27361 -mere strings; they are wildcard patterns, just like the patterns that
27362 -you use to match multiple file names. But in this context, they match
27363 -against parts of the variable value rather than against file names.
27365 -`${VARIABLE%%SUFFIX}'
27366 - Substitute the value of VARIABLE, but first discard from that
27367 - variable any portion at the end that matches the pattern SUFFIX.
27369 - If there is more than one alternative for how to match against
27370 - SUFFIX, this construct uses the longest possible match.
27372 - Thus, `${foo%%r*}' substitutes `t', because the largest match for
27373 - `r*' at the end of `tractor' is `ractor'.
27375 -`${VARIABLE%SUFFIX}'
27376 - Substitute the value of VARIABLE, but first discard from that
27377 - variable any portion at the end that matches the pattern SUFFIX.
27379 - If there is more than one alternative for how to match against
27380 - SUFFIX, this construct uses the shortest possible alternative.
27382 - Thus, `${foo%r*}' substitutes `tracto', because the shortest match
27383 - for `r*' at the end of `tractor' is just `r'.
27385 -`${VARIABLE##PREFIX}'
27386 - Substitute the value of VARIABLE, but first discard from that
27387 - variable any portion at the beginning that matches the pattern
27388 - PREFIX.
27390 - If there is more than one alternative for how to match against
27391 - PREFIX, this construct uses the longest possible match.
27393 - Thus, `${foo##*t}' substitutes `or', because the largest match for
27394 - `*t' at the beginning of `tractor' is `tract'.
27396 -`${VARIABLE#PREFIX}'
27397 - Substitute the value of VARIABLE, but first discard from that
27398 - variable any portion at the beginning that matches the pattern
27399 - PREFIX.
27401 - If there is more than one alternative for how to match against
27402 - PREFIX, this construct uses the shortest possible alternative.
27404 - Thus, `${foo#*t}' substitutes `ractor', because the shortest match
27405 - for `*t' at the beginning of `tractor' is just `t'.
27407 -\x1f
27408 -File: libc.info, Node: I/O Overview, Next: I/O on Streams, Prev: Pattern Matching, Up: Top
27410 -Input/Output Overview
27411 -*********************
27413 - Most programs need to do either input (reading data) or output
27414 -(writing data), or most frequently both, in order to do anything
27415 -useful. The GNU C library provides such a large selection of input and
27416 -output functions that the hardest part is often deciding which function
27417 -is most appropriate!
27419 - This chapter introduces concepts and terminology relating to input
27420 -and output. Other chapters relating to the GNU I/O facilities are:
27422 - * *Note I/O on Streams::, which covers the high-level functions that
27423 - operate on streams, including formatted input and output.
27425 - * *Note Low-Level I/O::, which covers the basic I/O and control
27426 - functions on file descriptors.
27428 - * *Note File System Interface::, which covers functions for
27429 - operating on directories and for manipulating file attributes such
27430 - as access modes and ownership.
27432 - * *Note Pipes and FIFOs::, which includes information on the basic
27433 - interprocess communication facilities.
27435 - * *Note Sockets::, which covers a more complicated interprocess
27436 - communication facility with support for networking.
27438 - * *Note Low-Level Terminal Interface::, which covers functions for
27439 - changing how input and output to terminals or other serial devices
27440 - are processed.
27442 -* Menu:
27444 -* I/O Concepts:: Some basic information and terminology.
27445 -* File Names:: How to refer to a file.
27447 -\x1f
27448 -File: libc.info, Node: I/O Concepts, Next: File Names, Up: I/O Overview
27450 -Input/Output Concepts
27451 -=====================
27453 - Before you can read or write the contents of a file, you must
27454 -establish a connection or communications channel to the file. This
27455 -process is called "opening" the file. You can open a file for reading,
27456 -writing, or both.
27458 - The connection to an open file is represented either as a stream or
27459 -as a file descriptor. You pass this as an argument to the functions
27460 -that do the actual read or write operations, to tell them which file to
27461 -operate on. Certain functions expect streams, and others are designed
27462 -to operate on file descriptors.
27464 - When you have finished reading to or writing from the file, you can
27465 -terminate the connection by "closing" the file. Once you have closed a
27466 -stream or file descriptor, you cannot do any more input or output
27467 -operations on it.
27469 -* Menu:
27471 -* Streams and File Descriptors:: The GNU Library provides two ways
27472 - to access the contents of files.
27473 -* File Position:: The number of bytes from the
27474 - beginning of the file.
27476 -\x1f
27477 -File: libc.info, Node: Streams and File Descriptors, Next: File Position, Up: I/O Concepts
27479 -Streams and File Descriptors
27480 -----------------------------
27482 - When you want to do input or output to a file, you have a choice of
27483 -two basic mechanisms for representing the connection between your
27484 -program and the file: file descriptors and streams. File descriptors
27485 -are represented as objects of type `int', while streams are represented
27486 -as `FILE *' objects.
27488 - File descriptors provide a primitive, low-level interface to input
27489 -and output operations. Both file descriptors and streams can represent
27490 -a connection to a device (such as a terminal), or a pipe or socket for
27491 -communicating with another process, as well as a normal file. But, if
27492 -you want to do control operations that are specific to a particular kind
27493 -of device, you must use a file descriptor; there are no facilities to
27494 -use streams in this way. You must also use file descriptors if your
27495 -program needs to do input or output in special modes, such as
27496 -nonblocking (or polled) input (*note File Status Flags::).
27498 - Streams provide a higher-level interface, layered on top of the
27499 -primitive file descriptor facilities. The stream interface treats all
27500 -kinds of files pretty much alike--the sole exception being the three
27501 -styles of buffering that you can choose (*note Stream Buffering::).
27503 - The main advantage of using the stream interface is that the set of
27504 -functions for performing actual input and output operations (as opposed
27505 -to control operations) on streams is much richer and more powerful than
27506 -the corresponding facilities for file descriptors. The file descriptor
27507 -interface provides only simple functions for transferring blocks of
27508 -characters, but the stream interface also provides powerful formatted
27509 -input and output functions (`printf' and `scanf') as well as functions
27510 -for character- and line-oriented input and output.
27512 - Since streams are implemented in terms of file descriptors, you can
27513 -extract the file descriptor from a stream and perform low-level
27514 -operations directly on the file descriptor. You can also initially open
27515 -a connection as a file descriptor and then make a stream associated with
27516 -that file descriptor.
27518 - In general, you should stick with using streams rather than file
27519 -descriptors, unless there is some specific operation you want to do that
27520 -can only be done on a file descriptor. If you are a beginning
27521 -programmer and aren't sure what functions to use, we suggest that you
27522 -concentrate on the formatted input functions (*note Formatted Input::)
27523 -and formatted output functions (*note Formatted Output::).
27525 - If you are concerned about portability of your programs to systems
27526 -other than GNU, you should also be aware that file descriptors are not
27527 -as portable as streams. You can expect any system running ISO C to
27528 -support streams, but non-GNU systems may not support file descriptors at
27529 -all, or may only implement a subset of the GNU functions that operate on
27530 -file descriptors. Most of the file descriptor functions in the GNU
27531 -library are included in the POSIX.1 standard, however.
27533 -\x1f
27534 -File: libc.info, Node: File Position, Prev: Streams and File Descriptors, Up: I/O Concepts
27536 -File Position
27537 --------------
27539 - One of the attributes of an open file is its "file position" that
27540 -keeps track of where in the file the next character is to be read or
27541 -written. In the GNU system, and all POSIX.1 systems, the file position
27542 -is simply an integer representing the number of bytes from the beginning
27543 -of the file.
27545 - The file position is normally set to the beginning of the file when
27546 -it is opened, and each time a character is read or written, the file
27547 -position is incremented. In other words, access to the file is normally
27548 -"sequential".
27550 - Ordinary files permit read or write operations at any position within
27551 -the file. Some other kinds of files may also permit this. Files which
27552 -do permit this are sometimes referred to as "random-access" files. You
27553 -can change the file position using the `fseek' function on a stream
27554 -(*note File Positioning::) or the `lseek' function on a file descriptor
27555 -(*note I/O Primitives::). If you try to change the file position on a
27556 -file that doesn't support random access, you get the `ESPIPE' error.
27558 - Streams and descriptors that are opened for "append access" are
27559 -treated specially for output: output to such files is _always_ appended
27560 -sequentially to the _end_ of the file, regardless of the file position.
27561 -However, the file position is still used to control where in the file
27562 -reading is done.
27564 - If you think about it, you'll realize that several programs can read
27565 -a given file at the same time. In order for each program to be able to
27566 -read the file at its own pace, each program must have its own file
27567 -pointer, which is not affected by anything the other programs do.
27569 - In fact, each opening of a file creates a separate file position.
27570 -Thus, if you open a file twice even in the same program, you get two
27571 -streams or descriptors with independent file positions.
27573 - By contrast, if you open a descriptor and then duplicate it to get
27574 -another descriptor, these two descriptors share the same file position:
27575 -changing the file position of one descriptor will affect the other.
27577 -\x1f
27578 -File: libc.info, Node: File Names, Prev: I/O Concepts, Up: I/O Overview
27580 -File Names
27581 -==========
27583 - In order to open a connection to a file, or to perform other
27584 -operations such as deleting a file, you need some way to refer to the
27585 -file. Nearly all files have names that are strings--even files which
27586 -are actually devices such as tape drives or terminals. These strings
27587 -are called "file names". You specify the file name to say which file
27588 -you want to open or operate on.
27590 - This section describes the conventions for file names and how the
27591 -operating system works with them.
27593 -* Menu:
27595 -* Directories:: Directories contain entries for files.
27596 -* File Name Resolution:: A file name specifies how to look up a file.
27597 -* File Name Errors:: Error conditions relating to file names.
27598 -* File Name Portability:: File name portability and syntax issues.
27600 -\x1f
27601 -File: libc.info, Node: Directories, Next: File Name Resolution, Up: File Names
27603 -Directories
27604 ------------
27606 - In order to understand the syntax of file names, you need to
27607 -understand how the file system is organized into a hierarchy of
27608 -directories.
27610 - A "directory" is a file that contains information to associate other
27611 -files with names; these associations are called "links" or "directory
27612 -entries". Sometimes, people speak of "files in a directory", but in
27613 -reality, a directory only contains pointers to files, not the files
27614 -themselves.
27616 - The name of a file contained in a directory entry is called a "file
27617 -name component". In general, a file name consists of a sequence of one
27618 -or more such components, separated by the slash character (`/'). A
27619 -file name which is just one component names a file with respect to its
27620 -directory. A file name with multiple components names a directory, and
27621 -then a file in that directory, and so on.
27623 - Some other documents, such as the POSIX standard, use the term
27624 -"pathname" for what we call a file name, and either "filename" or
27625 -"pathname component" for what this manual calls a file name component.
27626 -We don't use this terminology because a "path" is something completely
27627 -different (a list of directories to search), and we think that
27628 -"pathname" used for something else will confuse users. We always use
27629 -"file name" and "file name component" (or sometimes just "component",
27630 -where the context is obvious) in GNU documentation. Some macros use
27631 -the POSIX terminology in their names, such as `PATH_MAX'. These macros
27632 -are defined by the POSIX standard, so we cannot change their names.
27634 - You can find more detailed information about operations on
27635 -directories in *Note File System Interface::.
27637 -\x1f
27638 -File: libc.info, Node: File Name Resolution, Next: File Name Errors, Prev: Directories, Up: File Names
27640 -File Name Resolution
27641 ---------------------
27643 - A file name consists of file name components separated by slash
27644 -(`/') characters. On the systems that the GNU C library supports,
27645 -multiple successive `/' characters are equivalent to a single `/'
27646 -character.
27648 - The process of determining what file a file name refers to is called
27649 -"file name resolution". This is performed by examining the components
27650 -that make up a file name in left-to-right order, and locating each
27651 -successive component in the directory named by the previous component.
27652 -Of course, each of the files that are referenced as directories must
27653 -actually exist, be directories instead of regular files, and have the
27654 -appropriate permissions to be accessible by the process; otherwise the
27655 -file name resolution fails.
27657 - If a file name begins with a `/', the first component in the file
27658 -name is located in the "root directory" of the process (usually all
27659 -processes on the system have the same root directory). Such a file name
27660 -is called an "absolute file name".
27662 - Otherwise, the first component in the file name is located in the
27663 -current working directory (*note Working Directory::). This kind of
27664 -file name is called a "relative file name".
27666 - The file name components `.' ("dot") and `..' ("dot-dot") have
27667 -special meanings. Every directory has entries for these file name
27668 -components. The file name component `.' refers to the directory
27669 -itself, while the file name component `..' refers to its "parent
27670 -directory" (the directory that contains the link for the directory in
27671 -question). As a special case, `..' in the root directory refers to the
27672 -root directory itself, since it has no parent; thus `/..' is the same
27673 -as `/'.
27675 - Here are some examples of file names:
27677 -`/a'
27678 - The file named `a', in the root directory.
27680 -`/a/b'
27681 - The file named `b', in the directory named `a' in the root
27682 - directory.
27684 -`a'
27685 - The file named `a', in the current working directory.
27687 -`/a/./b'
27688 - This is the same as `/a/b'.
27690 -`./a'
27691 - The file named `a', in the current working directory.
27693 -`../a'
27694 - The file named `a', in the parent directory of the current working
27695 - directory.
27697 - A file name that names a directory may optionally end in a `/'. You
27698 -can specify a file name of `/' to refer to the root directory, but the
27699 -empty string is not a meaningful file name. If you want to refer to
27700 -the current working directory, use a file name of `.' or `./'.
27702 - Unlike some other operating systems, the GNU system doesn't have any
27703 -built-in support for file types (or extensions) or file versions as part
27704 -of its file name syntax. Many programs and utilities use conventions
27705 -for file names--for example, files containing C source code usually
27706 -have names suffixed with `.c'--but there is nothing in the file system
27707 -itself that enforces this kind of convention.
27709 -\x1f
27710 -File: libc.info, Node: File Name Errors, Next: File Name Portability, Prev: File Name Resolution, Up: File Names
27712 -File Name Errors
27713 -----------------
27715 - Functions that accept file name arguments usually detect these
27716 -`errno' error conditions relating to the file name syntax or trouble
27717 -finding the named file. These errors are referred to throughout this
27718 -manual as the "usual file name errors".
27720 -`EACCES'
27721 - The process does not have search permission for a directory
27722 - component of the file name.
27724 -`ENAMETOOLONG'
27725 - This error is used when either the total length of a file name is
27726 - greater than `PATH_MAX', or when an individual file name component
27727 - has a length greater than `NAME_MAX'. *Note Limits for Files::.
27729 - In the GNU system, there is no imposed limit on overall file name
27730 - length, but some file systems may place limits on the length of a
27731 - component.
27733 -`ENOENT'
27734 - This error is reported when a file referenced as a directory
27735 - component in the file name doesn't exist, or when a component is a
27736 - symbolic link whose target file does not exist. *Note Symbolic
27737 - Links::.
27739 -`ENOTDIR'
27740 - A file that is referenced as a directory component in the file name
27741 - exists, but it isn't a directory.
27743 -`ELOOP'
27744 - Too many symbolic links were resolved while trying to look up the
27745 - file name. The system has an arbitrary limit on the number of
27746 - symbolic links that may be resolved in looking up a single file
27747 - name, as a primitive way to detect loops. *Note Symbolic Links::.
27749 -\x1f
27750 -File: libc.info, Node: File Name Portability, Prev: File Name Errors, Up: File Names
27752 -Portability of File Names
27753 --------------------------
27755 - The rules for the syntax of file names discussed in *Note File
27756 -Names::, are the rules normally used by the GNU system and by other
27757 -POSIX systems. However, other operating systems may use other
27758 -conventions.
27760 - There are two reasons why it can be important for you to be aware of
27761 -file name portability issues:
27763 - * If your program makes assumptions about file name syntax, or
27764 - contains embedded literal file name strings, it is more difficult
27765 - to get it to run under other operating systems that use different
27766 - syntax conventions.
27768 - * Even if you are not concerned about running your program on
27769 - machines that run other operating systems, it may still be
27770 - possible to access files that use different naming conventions.
27771 - For example, you may be able to access file systems on another
27772 - computer running a different operating system over a network, or
27773 - read and write disks in formats used by other operating systems.
27775 - The ISO C standard says very little about file name syntax, only that
27776 -file names are strings. In addition to varying restrictions on the
27777 -length of file names and what characters can validly appear in a file
27778 -name, different operating systems use different conventions and syntax
27779 -for concepts such as structured directories and file types or
27780 -extensions. Some concepts such as file versions might be supported in
27781 -some operating systems and not by others.
27783 - The POSIX.1 standard allows implementations to put additional
27784 -restrictions on file name syntax, concerning what characters are
27785 -permitted in file names and on the length of file name and file name
27786 -component strings. However, in the GNU system, you do not need to worry
27787 -about these restrictions; any character except the null character is
27788 -permitted in a file name string, and there are no limits on the length
27789 -of file name strings.
27791 -\x1f
27792 -File: libc.info, Node: I/O on Streams, Next: Low-Level I/O, Prev: I/O Overview, Up: Top
27794 -Input/Output on Streams
27795 -***********************
27797 - This chapter describes the functions for creating streams and
27798 -performing input and output operations on them. As discussed in *Note
27799 -I/O Overview::, a stream is a fairly abstract, high-level concept
27800 -representing a communications channel to a file, device, or process.
27802 -* Menu:
27804 -* Streams:: About the data type representing a stream.
27805 -* Standard Streams:: Streams to the standard input and output
27806 - devices are created for you.
27807 -* Opening Streams:: How to create a stream to talk to a file.
27808 -* Closing Streams:: Close a stream when you are finished with it.
27809 -* Streams and Threads:: Issues with streams in threaded programs.
27810 -* Streams and I18N:: Streams in internationalized applications.
27811 -* Simple Output:: Unformatted output by characters and lines.
27812 -* Character Input:: Unformatted input by characters and words.
27813 -* Line Input:: Reading a line or a record from a stream.
27814 -* Unreading:: Peeking ahead/pushing back input just read.
27815 -* Block Input/Output:: Input and output operations on blocks of data.
27816 -* Formatted Output:: `printf' and related functions.
27817 -* Customizing Printf:: You can define new conversion specifiers for
27818 - `printf' and friends.
27819 -* Formatted Input:: `scanf' and related functions.
27820 -* EOF and Errors:: How you can tell if an I/O error happens.
27821 -* Error Recovery:: What you can do about errors.
27822 -* Binary Streams:: Some systems distinguish between text files
27823 - and binary files.
27824 -* File Positioning:: About random-access streams.
27825 -* Portable Positioning:: Random access on peculiar ISO C systems.
27826 -* Stream Buffering:: How to control buffering of streams.
27827 -* Other Kinds of Streams:: Streams that do not necessarily correspond
27828 - to an open file.
27829 -* Formatted Messages:: Print strictly formatted messages.
27831 -\x1f
27832 -File: libc.info, Node: Streams, Next: Standard Streams, Up: I/O on Streams
27834 -Streams
27835 -=======
27837 - For historical reasons, the type of the C data structure that
27838 -represents a stream is called `FILE' rather than "stream". Since most
27839 -of the library functions deal with objects of type `FILE *', sometimes
27840 -the term "file pointer" is also used to mean "stream". This leads to
27841 -unfortunate confusion over terminology in many books on C. This
27842 -manual, however, is careful to use the terms "file" and "stream" only
27843 -in the technical sense.
27845 - The `FILE' type is declared in the header file `stdio.h'.
27847 - - Data Type: FILE
27848 - This is the data type used to represent stream objects. A `FILE'
27849 - object holds all of the internal state information about the
27850 - connection to the associated file, including such things as the
27851 - file position indicator and buffering information. Each stream
27852 - also has error and end-of-file status indicators that can be
27853 - tested with the `ferror' and `feof' functions; see *Note EOF and
27854 - Errors::.
27856 - `FILE' objects are allocated and managed internally by the
27857 -input/output library functions. Don't try to create your own objects of
27858 -type `FILE'; let the library do it. Your programs should deal only
27859 -with pointers to these objects (that is, `FILE *' values) rather than
27860 -the objects themselves.
27862 -\x1f
27863 -File: libc.info, Node: Standard Streams, Next: Opening Streams, Prev: Streams, Up: I/O on Streams
27865 -Standard Streams
27866 -================
27868 - When the `main' function of your program is invoked, it already has
27869 -three predefined streams open and available for use. These represent
27870 -the "standard" input and output channels that have been established for
27871 -the process.
27873 - These streams are declared in the header file `stdio.h'.
27875 - - Variable: FILE * stdin
27876 - The "standard input" stream, which is the normal source of input
27877 - for the program.
27879 - - Variable: FILE * stdout
27880 - The "standard output" stream, which is used for normal output from
27881 - the program.
27883 - - Variable: FILE * stderr
27884 - The "standard error" stream, which is used for error messages and
27885 - diagnostics issued by the program.
27887 - In the GNU system, you can specify what files or processes
27888 -correspond to these streams using the pipe and redirection facilities
27889 -provided by the shell. (The primitives shells use to implement these
27890 -facilities are described in *Note File System Interface::.) Most other
27891 -operating systems provide similar mechanisms, but the details of how to
27892 -use them can vary.
27894 - In the GNU C library, `stdin', `stdout', and `stderr' are normal
27895 -variables which you can set just like any others. For example, to
27896 -redirect the standard output to a file, you could do:
27898 - fclose (stdout);
27899 - stdout = fopen ("standard-output-file", "w");
27901 - Note however, that in other systems `stdin', `stdout', and `stderr'
27902 -are macros that you cannot assign to in the normal way. But you can
27903 -use `freopen' to get the effect of closing one and reopening it. *Note
27904 -Opening Streams::.
27906 - The three streams `stdin', `stdout', and `stderr' are not unoriented
27907 -at program start (*note Streams and I18N::).
27909 -\x1f
27910 -File: libc.info, Node: Opening Streams, Next: Closing Streams, Prev: Standard Streams, Up: I/O on Streams
27912 -Opening Streams
27913 -===============
27915 - Opening a file with the `fopen' function creates a new stream and
27916 -establishes a connection between the stream and a file. This may
27917 -involve creating a new file.
27919 - Everything described in this section is declared in the header file
27920 -`stdio.h'.
27922 - - Function: FILE * fopen (const char *FILENAME, const char *OPENTYPE)
27923 - The `fopen' function opens a stream for I/O to the file FILENAME,
27924 - and returns a pointer to the stream.
27926 - The OPENTYPE argument is a string that controls how the file is
27927 - opened and specifies attributes of the resulting stream. It must
27928 - begin with one of the following sequences of characters:
27930 - `r'
27931 - Open an existing file for reading only.
27933 - `w'
27934 - Open the file for writing only. If the file already exists,
27935 - it is truncated to zero length. Otherwise a new file is
27936 - created.
27938 - `a'
27939 - Open a file for append access; that is, writing at the end of
27940 - file only. If the file already exists, its initial contents
27941 - are unchanged and output to the stream is appended to the end
27942 - of the file. Otherwise, a new, empty file is created.
27944 - `r+'
27945 - Open an existing file for both reading and writing. The
27946 - initial contents of the file are unchanged and the initial
27947 - file position is at the beginning of the file.
27949 - `w+'
27950 - Open a file for both reading and writing. If the file
27951 - already exists, it is truncated to zero length. Otherwise, a
27952 - new file is created.
27954 - `a+'
27955 - Open or create file for both reading and appending. If the
27956 - file exists, its initial contents are unchanged. Otherwise,
27957 - a new file is created. The initial file position for reading
27958 - is at the beginning of the file, but output is always
27959 - appended to the end of the file.
27961 - As you can see, `+' requests a stream that can do both input and
27962 - output. The ISO standard says that when using such a stream, you
27963 - must call `fflush' (*note Stream Buffering::) or a file positioning
27964 - function such as `fseek' (*note File Positioning::) when switching
27965 - from reading to writing or vice versa. Otherwise, internal buffers
27966 - might not be emptied properly. The GNU C library does not have
27967 - this limitation; you can do arbitrary reading and writing
27968 - operations on a stream in whatever order.
27970 - Additional characters may appear after these to specify flags for
27971 - the call. Always put the mode (`r', `w+', etc.) first; that is
27972 - the only part you are guaranteed will be understood by all systems.
27974 - The GNU C library defines one additional character for use in
27975 - OPENTYPE: the character `x' insists on creating a new file--if a
27976 - file FILENAME already exists, `fopen' fails rather than opening
27977 - it. If you use `x' you are guaranteed that you will not clobber
27978 - an existing file. This is equivalent to the `O_EXCL' option to
27979 - the `open' function (*note Opening and Closing Files::).
27981 - The character `b' in OPENTYPE has a standard meaning; it requests
27982 - a binary stream rather than a text stream. But this makes no
27983 - difference in POSIX systems (including the GNU system). If both
27984 - `+' and `b' are specified, they can appear in either order. *Note
27985 - Binary Streams::.
27987 - If the OPENTYPE string contains the sequence `,ccs=STRING' then
27988 - STRING is taken as the name of a coded character set and `fopen'
27989 - will mark the stream as wide-oriented which appropriate conversion
27990 - functions in place to convert from and to the character set STRING
27991 - is place. Any other stream is opened initially unoriented and the
27992 - orientation is decided with the first file operation. If the
27993 - first operation is a wide character operation, the stream is not
27994 - only marked as wide-oriented, also the conversion functions to
27995 - convert to the coded character set used for the current locale are
27996 - loaded. This will not change anymore from this point on even if
27997 - the locale selected for the `LC_CTYPE' category is changed.
27999 - Any other characters in OPENTYPE are simply ignored. They may be
28000 - meaningful in other systems.
28002 - If the open fails, `fopen' returns a null pointer.
28004 - When the sources are compiling with `_FILE_OFFSET_BITS == 64' on a
28005 - 32 bit machine this function is in fact `fopen64' since the LFS
28006 - interface replaces transparently the old interface.
28008 - You can have multiple streams (or file descriptors) pointing to the
28009 -same file open at the same time. If you do only input, this works
28010 -straightforwardly, but you must be careful if any output streams are
28011 -included. *Note Stream/Descriptor Precautions::. This is equally true
28012 -whether the streams are in one program (not usual) or in several
28013 -programs (which can easily happen). It may be advantageous to use the
28014 -file locking facilities to avoid simultaneous access. *Note File
28015 -Locks::.
28017 - - Function: FILE * fopen64 (const char *FILENAME, const char *OPENTYPE)
28018 - This function is similar to `fopen' but the stream it returns a
28019 - pointer for is opened using `open64'. Therefore this stream can be
28020 - used even on files larger then 2^31 bytes on 32 bit machines.
28022 - Please note that the return type is still `FILE *'. There is no
28023 - special `FILE' type for the LFS interface.
28025 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' on a 32
28026 - bits machine this function is available under the name `fopen' and
28027 - so transparently replaces the old interface.
28029 - - Macro: int FOPEN_MAX
28030 - The value of this macro is an integer constant expression that
28031 - represents the minimum number of streams that the implementation
28032 - guarantees can be open simultaneously. You might be able to open
28033 - more than this many streams, but that is not guaranteed. The
28034 - value of this constant is at least eight, which includes the three
28035 - standard streams `stdin', `stdout', and `stderr'. In POSIX.1
28036 - systems this value is determined by the `OPEN_MAX' parameter;
28037 - *note General Limits::. In BSD and GNU, it is controlled by the
28038 - `RLIMIT_NOFILE' resource limit; *note Limits on Resources::.
28040 - - Function: FILE * freopen (const char *FILENAME, const char
28041 - *OPENTYPE, FILE *STREAM)
28042 - This function is like a combination of `fclose' and `fopen'. It
28043 - first closes the stream referred to by STREAM, ignoring any errors
28044 - that are detected in the process. (Because errors are ignored,
28045 - you should not use `freopen' on an output stream if you have
28046 - actually done any output using the stream.) Then the file named by
28047 - FILENAME is opened with mode OPENTYPE as for `fopen', and
28048 - associated with the same stream object STREAM.
28050 - If the operation fails, a null pointer is returned; otherwise,
28051 - `freopen' returns STREAM.
28053 - `freopen' has traditionally been used to connect a standard stream
28054 - such as `stdin' with a file of your own choice. This is useful in
28055 - programs in which use of a standard stream for certain purposes is
28056 - hard-coded. In the GNU C library, you can simply close the
28057 - standard streams and open new ones with `fopen'. But other
28058 - systems lack this ability, so using `freopen' is more portable.
28060 - When the sources are compiling with `_FILE_OFFSET_BITS == 64' on a
28061 - 32 bit machine this function is in fact `freopen64' since the LFS
28062 - interface replaces transparently the old interface.
28064 - - Function: FILE * freopen64 (const char *FILENAME, const char
28065 - *OPENTYPE, FILE *STREAM)
28066 - This function is similar to `freopen'. The only difference is that
28067 - on 32 bit machine the stream returned is able to read beyond the
28068 - 2^31 bytes limits imposed by the normal interface. It should be
28069 - noted that the stream pointed to by STREAM need not be opened
28070 - using `fopen64' or `freopen64' since its mode is not important for
28071 - this function.
28073 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' on a 32
28074 - bits machine this function is available under the name `freopen'
28075 - and so transparently replaces the old interface.
28077 - In some situations it is useful to know whether a given stream is
28078 -available for reading or writing. This information is normally not
28079 -available and would have to be remembered separately. Solaris
28080 -introduced a few functions to get this information from the stream
28081 -descriptor and these functions are also available in the GNU C library.
28083 - - Function: int __freadable (FILE *STREAM)
28084 - The `__freadable' function determines whether the stream STREAM
28085 - was opened to allow reading. In this case the return value is
28086 - nonzero. For write-only streams the function returns zero.
28088 - This function is declared in `stdio_ext.h'.
28090 - - Function: int __fwritable (FILE *STREAM)
28091 - The `__fwritable' function determines whether the stream STREAM
28092 - was opened to allow writing. In this case the return value is
28093 - nonzero. For read-only streams the function returns zero.
28095 - This function is declared in `stdio_ext.h'.
28097 - For slightly different kind of problems there are two more functions.
28098 -They provide even finer-grained information.
28100 - - Function: int __freading (FILE *STREAM)
28101 - The `__freading' function determines whether the stream STREAM was
28102 - last read from or whether it is opened read-only. In this case
28103 - the return value is nonzero, otherwise it is zero. Determining
28104 - whether a stream opened for reading and writing was last used for
28105 - writing allows to draw conclusions about the content about the
28106 - buffer, among other things.
28108 - This function is declared in `stdio_ext.h'.
28110 - - Function: int __fwriting (FILE *STREAM)
28111 - The `__fwriting' function determines whether the stream STREAM was
28112 - last written to or whether it is opened write-only. In this case
28113 - the return value is nonzero, otherwise it is zero.
28115 - This function is declared in `stdio_ext.h'.
28117 -\x1f
28118 -File: libc.info, Node: Closing Streams, Next: Streams and Threads, Prev: Opening Streams, Up: I/O on Streams
28120 -Closing Streams
28121 -===============
28123 - When a stream is closed with `fclose', the connection between the
28124 -stream and the file is canceled. After you have closed a stream, you
28125 -cannot perform any additional operations on it.
28127 - - Function: int fclose (FILE *STREAM)
28128 - This function causes STREAM to be closed and the connection to the
28129 - corresponding file to be broken. Any buffered output is written
28130 - and any buffered input is discarded. The `fclose' function returns
28131 - a value of `0' if the file was closed successfully, and `EOF' if
28132 - an error was detected.
28134 - It is important to check for errors when you call `fclose' to close
28135 - an output stream, because real, everyday errors can be detected at
28136 - this time. For example, when `fclose' writes the remaining
28137 - buffered output, it might get an error because the disk is full.
28138 - Even if you know the buffer is empty, errors can still occur when
28139 - closing a file if you are using NFS.
28141 - The function `fclose' is declared in `stdio.h'.
28143 - To close all streams currently available the GNU C Library provides
28144 -another function.
28146 - - Function: int fcloseall (void)
28147 - This function causes all open streams of the process to be closed
28148 - and the connection to corresponding files to be broken. All
28149 - buffered data is written and any buffered input is discarded. The
28150 - `fcloseall' function returns a value of `0' if all the files were
28151 - closed successfully, and `EOF' if an error was detected.
28153 - This function should be used only in special situations, e.g.,
28154 - when an error occurred and the program must be aborted. Normally
28155 - each single stream should be closed separately so that problems
28156 - with individual streams can be identified. It is also problematic
28157 - since the standard streams (*note Standard Streams::) will also be
28158 - closed.
28160 - The function `fcloseall' is declared in `stdio.h'.
28162 - If the `main' function to your program returns, or if you call the
28163 -`exit' function (*note Normal Termination::), all open streams are
28164 -automatically closed properly. If your program terminates in any other
28165 -manner, such as by calling the `abort' function (*note Aborting a
28166 -Program::) or from a fatal signal (*note Signal Handling::), open
28167 -streams might not be closed properly. Buffered output might not be
28168 -flushed and files may be incomplete. For more information on buffering
28169 -of streams, see *Note Stream Buffering::.
28171 diff -u -udbrN glibc-2.3.2/manual/libc.info-17 glibc-2.3.2-200304020432/manual/libc.info-17
28172 --- glibc-2.3.2/manual/libc.info-17 Sat Mar 1 02:39:41 2003
28173 +++ glibc-2.3.2-200304020432/manual/libc.info-17 Thu Jan 1 01:00:00 1970
28174 @@ -1,1136 +0,0 @@
28175 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
28177 -INFO-DIR-SECTION GNU libraries
28178 -START-INFO-DIR-ENTRY
28179 -* Libc: (libc). C library.
28180 -END-INFO-DIR-ENTRY
28182 - This file documents the GNU C library.
28184 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
28185 -Reference Manual', for Version 2.3.x.
28187 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
28188 -Free Software Foundation, Inc.
28190 - Permission is granted to copy, distribute and/or modify this document
28191 -under the terms of the GNU Free Documentation License, Version 1.1 or
28192 -any later version published by the Free Software Foundation; with the
28193 -Invariant Sections being "Free Software Needs Free Documentation" and
28194 -"GNU Lesser General Public License", the Front-Cover texts being (a)
28195 -(see below), and with the Back-Cover Texts being (b) (see below). A
28196 -copy of the license is included in the section entitled "GNU Free
28197 -Documentation License".
28199 - (a) The FSF's Front-Cover Text is:
28201 - A GNU Manual
28203 - (b) The FSF's Back-Cover Text is:
28205 - You have freedom to copy and modify this GNU Manual, like GNU
28206 -software. Copies published by the Free Software Foundation raise
28207 -funds for GNU development.
28209 -\x1f
28210 -File: libc.info, Node: Streams and Threads, Next: Streams and I18N, Prev: Closing Streams, Up: I/O on Streams
28212 -Streams and Threads
28213 -===================
28215 - Streams can be used in multi-threaded applications in the same way
28216 -they are used in single-threaded applications. But the programmer must
28217 -be aware of a the possible complications. It is important to know about
28218 -these also if the program one writes never use threads since the design
28219 -and implementation of many stream functions is heavily influenced by the
28220 -requirements added by multi-threaded programming.
28222 - The POSIX standard requires that by default the stream operations are
28223 -atomic. I.e., issuing two stream operations for the same stream in two
28224 -threads at the same time will cause the operations to be executed as if
28225 -they were issued sequentially. The buffer operations performed while
28226 -reading or writing are protected from other uses of the same stream. To
28227 -do this each stream has an internal lock object which has to be
28228 -(implicitly) acquired before any work can be done.
28230 - But there are situations where this is not enough and there are also
28231 -situations where this is not wanted. The implicit locking is not enough
28232 -if the program requires more than one stream function call to happen
28233 -atomically. One example would be if an output line a program wants to
28234 -generate is created by several function calls. The functions by
28235 -themselves would ensure only atomicity of their own operation, but not
28236 -atomicity over all the function calls. For this it is necessary to
28237 -perform the stream locking in the application code.
28239 - - Function: void flockfile (FILE *STREAM)
28240 - The `flockfile' function acquires the internal locking object
28241 - associated with the stream STREAM. This ensures that no other
28242 - thread can explicitly through `flockfile'/`ftrylockfile' or
28243 - implicit through a call of a stream function lock the stream. The
28244 - thread will block until the lock is acquired. An explicit call to
28245 - `funlockfile' has to be used to release the lock.
28247 - - Function: int ftrylockfile (FILE *STREAM)
28248 - The `ftrylockfile' function tries to acquire the internal locking
28249 - object associated with the stream STREAM just like `flockfile'.
28250 - But unlike `flockfile' this function does not block if the lock is
28251 - not available. `ftrylockfile' returns zero if the lock was
28252 - successfully acquired. Otherwise the stream is locked by another
28253 - thread.
28255 - - Function: void funlockfile (FILE *STREAM)
28256 - The `funlockfile' function releases the internal locking object of
28257 - the stream STREAM. The stream must have been locked before by a
28258 - call to `flockfile' or a successful call of `ftrylockfile'. The
28259 - implicit locking performed by the stream operations do not count.
28260 - The `funlockfile' function does not return an error status and the
28261 - behavior of a call for a stream which is not locked by the current
28262 - thread is undefined.
28264 - The following example shows how the functions above can be used to
28265 -generate an output line atomically even in multi-threaded applications
28266 -(yes, the same job could be done with one `fprintf' call but it is
28267 -sometimes not possible):
28269 - FILE *fp;
28271 - ...
28272 - flockfile (fp);
28273 - fputs ("This is test number ", fp);
28274 - fprintf (fp, "%d\n", test);
28275 - funlockfile (fp)
28278 - Without the explicit locking it would be possible for another thread
28279 -to use the stream FP after the `fputs' call return and before `fprintf'
28280 -was called with the result that the number does not follow the word
28281 -`number'.
28283 - From this description it might already be clear that the locking
28284 -objects in streams are no simple mutexes. Since locking the same
28285 -stream twice in the same thread is allowed the locking objects must be
28286 -equivalent to recursive mutexes. These mutexes keep track of the owner
28287 -and the number of times the lock is acquired. The same number of
28288 -`funlockfile' calls by the same threads is necessary to unlock the
28289 -stream completely. For instance:
28291 - void
28292 - foo (FILE *fp)
28294 - ftrylockfile (fp);
28295 - fputs ("in foo\n", fp);
28296 - /* This is very wrong!!! */
28297 - funlockfile (fp);
28300 - It is important here that the `funlockfile' function is only called
28301 -if the `ftrylockfile' function succeeded in locking the stream. It is
28302 -therefore always wrong to ignore the result of `ftrylockfile'. And it
28303 -makes no sense since otherwise one would use `flockfile'. The result
28304 -of code like that above is that either `funlockfile' tries to free a
28305 -stream that hasn't been locked by the current thread or it frees the
28306 -stream prematurely. The code should look like this:
28308 - void
28309 - foo (FILE *fp)
28311 - if (ftrylockfile (fp) == 0)
28313 - fputs ("in foo\n", fp);
28314 - funlockfile (fp);
28318 - Now that we covered why it is necessary to have these locking it is
28319 -necessary to talk about situations when locking is unwanted and what can
28320 -be done. The locking operations (explicit or implicit) don't come for
28321 -free. Even if a lock is not taken the cost is not zero. The operations
28322 -which have to be performed require memory operations that are safe in
28323 -multi-processor environments. With the many local caches involved in
28324 -such systems this is quite costly. So it is best to avoid the locking
28325 -completely if it is not needed - because the code in question is never
28326 -used in a context where two or more threads may use a stream at a time.
28327 -This can be determined most of the time for application code; for
28328 -library code which can be used in many contexts one should default to be
28329 -conservative and use locking.
28331 - There are two basic mechanisms to avoid locking. The first is to use
28332 -the `_unlocked' variants of the stream operations. The POSIX standard
28333 -defines quite a few of those and the GNU library adds a few more.
28334 -These variants of the functions behave just like the functions with the
28335 -name without the suffix except that they do not lock the stream. Using
28336 -these functions is very desirable since they are potentially much
28337 -faster. This is not only because the locking operation itself is
28338 -avoided. More importantly, functions like `putc' and `getc' are very
28339 -simple and traditionally (before the introduction of threads) were
28340 -implemented as macros which are very fast if the buffer is not empty.
28341 -With the addition of locking requirements these functions are no longer
28342 -implemented as macros since they would would expand to too much code.
28343 -But these macros are still available with the same functionality under
28344 -the new names `putc_unlocked' and `getc_unlocked'. This possibly huge
28345 -difference of speed also suggests the use of the `_unlocked' functions
28346 -even if locking is required. The difference is that the locking then
28347 -has to be performed in the program:
28349 - void
28350 - foo (FILE *fp, char *buf)
28352 - flockfile (fp);
28353 - while (*buf != '/')
28354 - putc_unlocked (*buf++, fp);
28355 - funlockfile (fp);
28358 - If in this example the `putc' function would be used and the
28359 -explicit locking would be missing the `putc' function would have to
28360 -acquire the lock in every call, potentially many times depending on when
28361 -the loop terminates. Writing it the way illustrated above allows the
28362 -`putc_unlocked' macro to be used which means no locking and direct
28363 -manipulation of the buffer of the stream.
28365 - A second way to avoid locking is by using a non-standard function
28366 -which was introduced in Solaris and is available in the GNU C library
28367 -as well.
28369 - - Function: int __fsetlocking (FILE *STREAM, int TYPE)
28370 - The `__fsetlocking' function can be used to select whether the
28371 - stream operations will implicitly acquire the locking object of the
28372 - stream STREAM. By default this is done but it can be disabled and
28373 - reinstated using this function. There are three values defined
28374 - for the TYPE parameter.
28376 - `FSETLOCKING_INTERNAL'
28377 - The stream `stream' will from now on use the default internal
28378 - locking. Every stream operation with exception of the
28379 - `_unlocked' variants will implicitly lock the stream.
28381 - `FSETLOCKING_BYCALLER'
28382 - After the `__fsetlocking' function returns the user is
28383 - responsible for locking the stream. None of the stream
28384 - operations will implicitly do this anymore until the state is
28385 - set back to `FSETLOCKING_INTERNAL'.
28387 - `FSETLOCKING_QUERY'
28388 - `__fsetlocking' only queries the current locking state of the
28389 - stream. The return value will be `FSETLOCKING_INTERNAL' or
28390 - `FSETLOCKING_BYCALLER' depending on the state.
28392 - The return value of `__fsetlocking' is either
28393 - `FSETLOCKING_INTERNAL' or `FSETLOCKING_BYCALLER' depending on the
28394 - state of the stream before the call.
28396 - This function and the values for the TYPE parameter are declared
28397 - in `stdio_ext.h'.
28399 - This function is especially useful when program code has to be used
28400 -which is written without knowledge about the `_unlocked' functions (or
28401 -if the programmer was too lazy to use them).
28403 -\x1f
28404 -File: libc.info, Node: Streams and I18N, Next: Simple Output, Prev: Streams and Threads, Up: I/O on Streams
28406 -Streams in Internationalized Applications
28407 -=========================================
28409 - ISO C90 introduced the new type `wchar_t' to allow handling larger
28410 -character sets. What was missing was a possibility to output strings
28411 -of `wchar_t' directly. One had to convert them into multibyte strings
28412 -using `mbstowcs' (there was no `mbsrtowcs' yet) and then use the normal
28413 -stream functions. While this is doable it is very cumbersome since
28414 -performing the conversions is not trivial and greatly increases program
28415 -complexity and size.
28417 - The Unix standard early on (I think in XPG4.2) introduced two
28418 -additional format specifiers for the `printf' and `scanf' families of
28419 -functions. Printing and reading of single wide characters was made
28420 -possible using the `%C' specifier and wide character strings can be
28421 -handled with `%S'. These modifiers behave just like `%c' and `%s' only
28422 -that they expect the corresponding argument to have the wide character
28423 -type and that the wide character and string are transformed into/from
28424 -multibyte strings before being used.
28426 - This was a beginning but it is still not good enough. Not always is
28427 -it desirable to use `printf' and `scanf'. The other, smaller and
28428 -faster functions cannot handle wide characters. Second, it is not
28429 -possible to have a format string for `printf' and `scanf' consisting of
28430 -wide characters. The result is that format strings would have to be
28431 -generated if they have to contain non-basic characters.
28433 - In the Amendment 1 to ISO C90 a whole new set of functions was added
28434 -to solve the problem. Most of the stream functions got a counterpart
28435 -which take a wide character or wide character string instead of a
28436 -character or string respectively. The new functions operate on the
28437 -same streams (like `stdout'). This is different from the model of the
28438 -C++ runtime library where separate streams for wide and normal I/O are
28439 -used.
28441 - Being able to use the same stream for wide and normal operations
28442 -comes with a restriction: a stream can be used either for wide
28443 -operations or for normal operations. Once it is decided there is no
28444 -way back. Only a call to `freopen' or `freopen64' can reset the
28445 -"orientation". The orientation can be decided in three ways:
28447 - * If any of the normal character functions is used (this includes the
28448 - `fread' and `fwrite' functions) the stream is marked as not wide
28449 - oriented.
28451 - * If any of the wide character functions is used the stream is
28452 - marked as wide oriented.
28454 - * The `fwide' function can be used to set the orientation either way.
28456 - It is important to never mix the use of wide and not wide operations
28457 -on a stream. There are no diagnostics issued. The application behavior
28458 -will simply be strange or the application will simply crash. The
28459 -`fwide' function can help avoiding this.
28461 - - Function: int fwide (FILE *STREAM, int MODE)
28462 - The `fwide' function can be used to set and query the state of the
28463 - orientation of the stream STREAM. If the MODE parameter has a
28464 - positive value the streams get wide oriented, for negative values
28465 - narrow oriented. It is not possible to overwrite previous
28466 - orientations with `fwide'. I.e., if the stream STREAM was already
28467 - oriented before the call nothing is done.
28469 - If MODE is zero the current orientation state is queried and
28470 - nothing is changed.
28472 - The `fwide' function returns a negative value, zero, or a positive
28473 - value if the stream is narrow, not at all, or wide oriented
28474 - respectively.
28476 - This function was introduced in Amendment 1 to ISO C90 and is
28477 - declared in `wchar.h'.
28479 - It is generally a good idea to orient a stream as early as possible.
28480 -This can prevent surprise especially for the standard streams `stdin',
28481 -`stdout', and `stderr'. If some library function in some situations
28482 -uses one of these streams and this use orients the stream in a
28483 -different way the rest of the application expects it one might end up
28484 -with hard to reproduce errors. Remember that no errors are signal if
28485 -the streams are used incorrectly. Leaving a stream unoriented after
28486 -creation is normally only necessary for library functions which create
28487 -streams which can be used in different contexts.
28489 - When writing code which uses streams and which can be used in
28490 -different contexts it is important to query the orientation of the
28491 -stream before using it (unless the rules of the library interface
28492 -demand a specific orientation). The following little, silly function
28493 -illustrates this.
28495 - void
28496 - print_f (FILE *fp)
28498 - if (fwide (fp, 0) > 0)
28499 - /* Positive return value means wide orientation. */
28500 - fputwc (L'f', fp);
28501 - else
28502 - fputc ('f', fp);
28505 - Note that in this case the function `print_f' decides about the
28506 -orientation of the stream if it was unoriented before (will not happen
28507 -if the advise above is followed).
28509 - The encoding used for the `wchar_t' values is unspecified and the
28510 -user must not make any assumptions about it. For I/O of `wchar_t'
28511 -values this means that it is impossible to write these values directly
28512 -to the stream. This is not what follows from the ISO C locale model
28513 -either. What happens instead is that the bytes read from or written to
28514 -the underlying media are first converted into the internal encoding
28515 -chosen by the implementation for `wchar_t'. The external encoding is
28516 -determined by the `LC_CTYPE' category of the current locale or by the
28517 -`ccs' part of the mode specification given to `fopen', `fopen64',
28518 -`freopen', or `freopen64'. How and when the conversion happens is
28519 -unspecified and it happens invisible to the user.
28521 - Since a stream is created in the unoriented state it has at that
28522 -point no conversion associated with it. The conversion which will be
28523 -used is determined by the `LC_CTYPE' category selected at the time the
28524 -stream is oriented. If the locales are changed at the runtime this
28525 -might produce surprising results unless one pays attention. This is
28526 -just another good reason to orient the stream explicitly as soon as
28527 -possible, perhaps with a call to `fwide'.
28529 -\x1f
28530 -File: libc.info, Node: Simple Output, Next: Character Input, Prev: Streams and I18N, Up: I/O on Streams
28532 -Simple Output by Characters or Lines
28533 -====================================
28535 - This section describes functions for performing character- and
28536 -line-oriented output.
28538 - These narrow streams functions are declared in the header file
28539 -`stdio.h' and the wide stream functions in `wchar.h'.
28541 - - Function: int fputc (int C, FILE *STREAM)
28542 - The `fputc' function converts the character C to type `unsigned
28543 - char', and writes it to the stream STREAM. `EOF' is returned if a
28544 - write error occurs; otherwise the character C is returned.
28546 - - Function: wint_t fputwc (wchar_t WC, FILE *STREAM)
28547 - The `fputwc' function writes the wide character WC to the stream
28548 - STREAM. `WEOF' is returned if a write error occurs; otherwise the
28549 - character WC is returned.
28551 - - Function: int fputc_unlocked (int C, FILE *STREAM)
28552 - The `fputc_unlocked' function is equivalent to the `fputc'
28553 - function except that it does not implicitly lock the stream.
28555 - - Function: wint_t fputwc_unlocked (wint_t WC, FILE *STREAM)
28556 - The `fputwc_unlocked' function is equivalent to the `fputwc'
28557 - function except that it does not implicitly lock the stream.
28559 - This function is a GNU extension.
28561 - - Function: int putc (int C, FILE *STREAM)
28562 - This is just like `fputc', except that most systems implement it as
28563 - a macro, making it faster. One consequence is that it may
28564 - evaluate the STREAM argument more than once, which is an exception
28565 - to the general rule for macros. `putc' is usually the best
28566 - function to use for writing a single character.
28568 - - Function: wint_t putwc (wchar_t WC, FILE *STREAM)
28569 - This is just like `fputwc', except that it can be implement as a
28570 - macro, making it faster. One consequence is that it may evaluate
28571 - the STREAM argument more than once, which is an exception to the
28572 - general rule for macros. `putwc' is usually the best function to
28573 - use for writing a single wide character.
28575 - - Function: int putc_unlocked (int C, FILE *STREAM)
28576 - The `putc_unlocked' function is equivalent to the `putc' function
28577 - except that it does not implicitly lock the stream.
28579 - - Function: wint_t putwc_unlocked (wchar_t WC, FILE *STREAM)
28580 - The `putwc_unlocked' function is equivalent to the `putwc'
28581 - function except that it does not implicitly lock the stream.
28583 - This function is a GNU extension.
28585 - - Function: int putchar (int C)
28586 - The `putchar' function is equivalent to `putc' with `stdout' as
28587 - the value of the STREAM argument.
28589 - - Function: wint_t putwchar (wchar_t WC)
28590 - The `putwchar' function is equivalent to `putwc' with `stdout' as
28591 - the value of the STREAM argument.
28593 - - Function: int putchar_unlocked (int C)
28594 - The `putchar_unlocked' function is equivalent to the `putchar'
28595 - function except that it does not implicitly lock the stream.
28597 - - Function: wint_t putwchar_unlocked (wchar_t WC)
28598 - The `putwchar_unlocked' function is equivalent to the `putwchar'
28599 - function except that it does not implicitly lock the stream.
28601 - This function is a GNU extension.
28603 - - Function: int fputs (const char *S, FILE *STREAM)
28604 - The function `fputs' writes the string S to the stream STREAM.
28605 - The terminating null character is not written. This function does
28606 - _not_ add a newline character, either. It outputs only the
28607 - characters in the string.
28609 - This function returns `EOF' if a write error occurs, and otherwise
28610 - a non-negative value.
28612 - For example:
28614 - fputs ("Are ", stdout);
28615 - fputs ("you ", stdout);
28616 - fputs ("hungry?\n", stdout);
28618 - outputs the text `Are you hungry?' followed by a newline.
28620 - - Function: int fputws (const wchar_t *WS, FILE *STREAM)
28621 - The function `fputws' writes the wide character string WS to the
28622 - stream STREAM. The terminating null character is not written.
28623 - This function does _not_ add a newline character, either. It
28624 - outputs only the characters in the string.
28626 - This function returns `WEOF' if a write error occurs, and otherwise
28627 - a non-negative value.
28629 - - Function: int fputs_unlocked (const char *S, FILE *STREAM)
28630 - The `fputs_unlocked' function is equivalent to the `fputs'
28631 - function except that it does not implicitly lock the stream.
28633 - This function is a GNU extension.
28635 - - Function: int fputws_unlocked (const wchar_t *WS, FILE *STREAM)
28636 - The `fputws_unlocked' function is equivalent to the `fputws'
28637 - function except that it does not implicitly lock the stream.
28639 - This function is a GNU extension.
28641 - - Function: int puts (const char *S)
28642 - The `puts' function writes the string S to the stream `stdout'
28643 - followed by a newline. The terminating null character of the
28644 - string is not written. (Note that `fputs' does _not_ write a
28645 - newline as this function does.)
28647 - `puts' is the most convenient function for printing simple
28648 - messages. For example:
28650 - puts ("This is a message.");
28652 - outputs the text `This is a message.' followed by a newline.
28654 - - Function: int putw (int W, FILE *STREAM)
28655 - This function writes the word W (that is, an `int') to STREAM. It
28656 - is provided for compatibility with SVID, but we recommend you use
28657 - `fwrite' instead (*note Block Input/Output::).
28659 -\x1f
28660 -File: libc.info, Node: Character Input, Next: Line Input, Prev: Simple Output, Up: I/O on Streams
28662 -Character Input
28663 -===============
28665 - This section describes functions for performing character-oriented
28666 -input. These narrow streams functions are declared in the header file
28667 -`stdio.h' and the wide character functions are declared in `wchar.h'.
28669 - These functions return an `int' or `wint_t' value (for narrow and
28670 -wide stream functions respectively) that is either a character of
28671 -input, or the special value `EOF'/`WEOF' (usually -1). For the narrow
28672 -stream functions it is important to store the result of these functions
28673 -in a variable of type `int' instead of `char', even when you plan to
28674 -use it only as a character. Storing `EOF' in a `char' variable
28675 -truncates its value to the size of a character, so that it is no longer
28676 -distinguishable from the valid character `(char) -1'. So always use an
28677 -`int' for the result of `getc' and friends, and check for `EOF' after
28678 -the call; once you've verified that the result is not `EOF', you can be
28679 -sure that it will fit in a `char' variable without loss of information.
28681 - - Function: int fgetc (FILE *STREAM)
28682 - This function reads the next character as an `unsigned char' from
28683 - the stream STREAM and returns its value, converted to an `int'.
28684 - If an end-of-file condition or read error occurs, `EOF' is
28685 - returned instead.
28687 - - Function: wint_t fgetwc (FILE *STREAM)
28688 - This function reads the next wide character from the stream STREAM
28689 - and returns its value. If an end-of-file condition or read error
28690 - occurs, `WEOF' is returned instead.
28692 - - Function: int fgetc_unlocked (FILE *STREAM)
28693 - The `fgetc_unlocked' function is equivalent to the `fgetc'
28694 - function except that it does not implicitly lock the stream.
28696 - - Function: wint_t fgetwc_unlocked (FILE *STREAM)
28697 - The `fgetwc_unlocked' function is equivalent to the `fgetwc'
28698 - function except that it does not implicitly lock the stream.
28700 - This function is a GNU extension.
28702 - - Function: int getc (FILE *STREAM)
28703 - This is just like `fgetc', except that it is permissible (and
28704 - typical) for it to be implemented as a macro that evaluates the
28705 - STREAM argument more than once. `getc' is often highly optimized,
28706 - so it is usually the best function to use to read a single
28707 - character.
28709 - - Function: wint_t getwc (FILE *STREAM)
28710 - This is just like `fgetwc', except that it is permissible for it to
28711 - be implemented as a macro that evaluates the STREAM argument more
28712 - than once. `getwc' can be highly optimized, so it is usually the
28713 - best function to use to read a single wide character.
28715 - - Function: int getc_unlocked (FILE *STREAM)
28716 - The `getc_unlocked' function is equivalent to the `getc' function
28717 - except that it does not implicitly lock the stream.
28719 - - Function: wint_t getwc_unlocked (FILE *STREAM)
28720 - The `getwc_unlocked' function is equivalent to the `getwc'
28721 - function except that it does not implicitly lock the stream.
28723 - This function is a GNU extension.
28725 - - Function: int getchar (void)
28726 - The `getchar' function is equivalent to `getc' with `stdin' as the
28727 - value of the STREAM argument.
28729 - - Function: wint_t getwchar (void)
28730 - The `getwchar' function is equivalent to `getwc' with `stdin' as
28731 - the value of the STREAM argument.
28733 - - Function: int getchar_unlocked (void)
28734 - The `getchar_unlocked' function is equivalent to the `getchar'
28735 - function except that it does not implicitly lock the stream.
28737 - - Function: wint_t getwchar_unlocked (void)
28738 - The `getwchar_unlocked' function is equivalent to the `getwchar'
28739 - function except that it does not implicitly lock the stream.
28741 - This function is a GNU extension.
28743 - Here is an example of a function that does input using `fgetc'. It
28744 -would work just as well using `getc' instead, or using `getchar ()'
28745 -instead of `fgetc (stdin)'. The code would also work the same for the
28746 -wide character stream functions.
28748 - int
28749 - y_or_n_p (const char *question)
28751 - fputs (question, stdout);
28752 - while (1)
28754 - int c, answer;
28755 - /* Write a space to separate answer from question. */
28756 - fputc (' ', stdout);
28757 - /* Read the first character of the line.
28758 - This should be the answer character, but might not be. */
28759 - c = tolower (fgetc (stdin));
28760 - answer = c;
28761 - /* Discard rest of input line. */
28762 - while (c != '\n' && c != EOF)
28763 - c = fgetc (stdin);
28764 - /* Obey the answer if it was valid. */
28765 - if (answer == 'y')
28766 - return 1;
28767 - if (answer == 'n')
28768 - return 0;
28769 - /* Answer was invalid: ask for valid answer. */
28770 - fputs ("Please answer y or n:", stdout);
28774 - - Function: int getw (FILE *STREAM)
28775 - This function reads a word (that is, an `int') from STREAM. It's
28776 - provided for compatibility with SVID. We recommend you use
28777 - `fread' instead (*note Block Input/Output::). Unlike `getc', any
28778 - `int' value could be a valid result. `getw' returns `EOF' when it
28779 - encounters end-of-file or an error, but there is no way to
28780 - distinguish this from an input word with value -1.
28782 -\x1f
28783 -File: libc.info, Node: Line Input, Next: Unreading, Prev: Character Input, Up: I/O on Streams
28785 -Line-Oriented Input
28786 -===================
28788 - Since many programs interpret input on the basis of lines, it is
28789 -convenient to have functions to read a line of text from a stream.
28791 - Standard C has functions to do this, but they aren't very safe: null
28792 -characters and even (for `gets') long lines can confuse them. So the
28793 -GNU library provides the nonstandard `getline' function that makes it
28794 -easy to read lines reliably.
28796 - Another GNU extension, `getdelim', generalizes `getline'. It reads
28797 -a delimited record, defined as everything through the next occurrence
28798 -of a specified delimiter character.
28800 - All these functions are declared in `stdio.h'.
28802 - - Function: ssize_t getline (char **LINEPTR, size_t *N, FILE *STREAM)
28803 - This function reads an entire line from STREAM, storing the text
28804 - (including the newline and a terminating null character) in a
28805 - buffer and storing the buffer address in `*LINEPTR'.
28807 - Before calling `getline', you should place in `*LINEPTR' the
28808 - address of a buffer `*N' bytes long, allocated with `malloc'. If
28809 - this buffer is long enough to hold the line, `getline' stores the
28810 - line in this buffer. Otherwise, `getline' makes the buffer bigger
28811 - using `realloc', storing the new buffer address back in `*LINEPTR'
28812 - and the increased size back in `*N'. *Note Unconstrained
28813 - Allocation::.
28815 - If you set `*LINEPTR' to a null pointer, and `*N' to zero, before
28816 - the call, then `getline' allocates the initial buffer for you by
28817 - calling `malloc'.
28819 - In either case, when `getline' returns, `*LINEPTR' is a `char *'
28820 - which points to the text of the line.
28822 - When `getline' is successful, it returns the number of characters
28823 - read (including the newline, but not including the terminating
28824 - null). This value enables you to distinguish null characters that
28825 - are part of the line from the null character inserted as a
28826 - terminator.
28828 - This function is a GNU extension, but it is the recommended way to
28829 - read lines from a stream. The alternative standard functions are
28830 - unreliable.
28832 - If an error occurs or end of file is reached without any bytes
28833 - read, `getline' returns `-1'.
28835 - - Function: ssize_t getdelim (char **LINEPTR, size_t *N, int
28836 - DELIMITER, FILE *STREAM)
28837 - This function is like `getline' except that the character which
28838 - tells it to stop reading is not necessarily newline. The argument
28839 - DELIMITER specifies the delimiter character; `getdelim' keeps
28840 - reading until it sees that character (or end of file).
28842 - The text is stored in LINEPTR, including the delimiter character
28843 - and a terminating null. Like `getline', `getdelim' makes LINEPTR
28844 - bigger if it isn't big enough.
28846 - `getline' is in fact implemented in terms of `getdelim', just like
28847 - this:
28849 - ssize_t
28850 - getline (char **lineptr, size_t *n, FILE *stream)
28852 - return getdelim (lineptr, n, '\n', stream);
28855 - - Function: char * fgets (char *S, int COUNT, FILE *STREAM)
28856 - The `fgets' function reads characters from the stream STREAM up to
28857 - and including a newline character and stores them in the string S,
28858 - adding a null character to mark the end of the string. You must
28859 - supply COUNT characters worth of space in S, but the number of
28860 - characters read is at most COUNT - 1. The extra character space
28861 - is used to hold the null character at the end of the string.
28863 - If the system is already at end of file when you call `fgets', then
28864 - the contents of the array S are unchanged and a null pointer is
28865 - returned. A null pointer is also returned if a read error occurs.
28866 - Otherwise, the return value is the pointer S.
28868 - *Warning:* If the input data has a null character, you can't tell.
28869 - So don't use `fgets' unless you know the data cannot contain a
28870 - null. Don't use it to read files edited by the user because, if
28871 - the user inserts a null character, you should either handle it
28872 - properly or print a clear error message. We recommend using
28873 - `getline' instead of `fgets'.
28875 - - Function: wchar_t * fgetws (wchar_t *WS, int COUNT, FILE *STREAM)
28876 - The `fgetws' function reads wide characters from the stream STREAM
28877 - up to and including a newline character and stores them in the
28878 - string WS, adding a null wide character to mark the end of the
28879 - string. You must supply COUNT wide characters worth of space in
28880 - WS, but the number of characters read is at most COUNT - 1. The
28881 - extra character space is used to hold the null wide character at
28882 - the end of the string.
28884 - If the system is already at end of file when you call `fgetws',
28885 - then the contents of the array WS are unchanged and a null pointer
28886 - is returned. A null pointer is also returned if a read error
28887 - occurs. Otherwise, the return value is the pointer WS.
28889 - *Warning:* If the input data has a null wide character (which are
28890 - null bytes in the input stream), you can't tell. So don't use
28891 - `fgetws' unless you know the data cannot contain a null. Don't use
28892 - it to read files edited by the user because, if the user inserts a
28893 - null character, you should either handle it properly or print a
28894 - clear error message.
28896 - - Function: char * fgets_unlocked (char *S, int COUNT, FILE *STREAM)
28897 - The `fgets_unlocked' function is equivalent to the `fgets'
28898 - function except that it does not implicitly lock the stream.
28900 - This function is a GNU extension.
28902 - - Function: wchar_t * fgetws_unlocked (wchar_t *WS, int COUNT, FILE
28903 - *STREAM)
28904 - The `fgetws_unlocked' function is equivalent to the `fgetws'
28905 - function except that it does not implicitly lock the stream.
28907 - This function is a GNU extension.
28909 - - Deprecated function: char * gets (char *S)
28910 - The function `gets' reads characters from the stream `stdin' up to
28911 - the next newline character, and stores them in the string S. The
28912 - newline character is discarded (note that this differs from the
28913 - behavior of `fgets', which copies the newline character into the
28914 - string). If `gets' encounters a read error or end-of-file, it
28915 - returns a null pointer; otherwise it returns S.
28917 - *Warning:* The `gets' function is *very dangerous* because it
28918 - provides no protection against overflowing the string S. The GNU
28919 - library includes it for compatibility only. You should *always*
28920 - use `fgets' or `getline' instead. To remind you of this, the
28921 - linker (if using GNU `ld') will issue a warning whenever you use
28922 - `gets'.
28924 -\x1f
28925 -File: libc.info, Node: Unreading, Next: Block Input/Output, Prev: Line Input, Up: I/O on Streams
28927 -Unreading
28928 -=========
28930 - In parser programs it is often useful to examine the next character
28931 -in the input stream without removing it from the stream. This is called
28932 -"peeking ahead" at the input because your program gets a glimpse of the
28933 -input it will read next.
28935 - Using stream I/O, you can peek ahead at input by first reading it and
28936 -then "unreading" it (also called "pushing it back" on the stream).
28937 -Unreading a character makes it available to be input again from the
28938 -stream, by the next call to `fgetc' or other input function on that
28939 -stream.
28941 -* Menu:
28943 -* Unreading Idea:: An explanation of unreading with pictures.
28944 -* How Unread:: How to call `ungetc' to do unreading.
28946 -\x1f
28947 -File: libc.info, Node: Unreading Idea, Next: How Unread, Up: Unreading
28949 -What Unreading Means
28950 ---------------------
28952 - Here is a pictorial explanation of unreading. Suppose you have a
28953 -stream reading a file that contains just six characters, the letters
28954 -`foobar'. Suppose you have read three characters so far. The
28955 -situation looks like this:
28957 - f o o b a r
28960 -so the next input character will be `b'.
28962 - If instead of reading `b' you unread the letter `o', you get a
28963 -situation like this:
28965 - f o o b a r
28967 - o--
28970 -so that the next input characters will be `o' and `b'.
28972 - If you unread `9' instead of `o', you get this situation:
28974 - f o o b a r
28976 - 9--
28979 -so that the next input characters will be `9' and `b'.
28981 -\x1f
28982 -File: libc.info, Node: How Unread, Prev: Unreading Idea, Up: Unreading
28984 -Using `ungetc' To Do Unreading
28985 -------------------------------
28987 - The function to unread a character is called `ungetc', because it
28988 -reverses the action of `getc'.
28990 - - Function: int ungetc (int C, FILE *STREAM)
28991 - The `ungetc' function pushes back the character C onto the input
28992 - stream STREAM. So the next input from STREAM will read C before
28993 - anything else.
28995 - If C is `EOF', `ungetc' does nothing and just returns `EOF'. This
28996 - lets you call `ungetc' with the return value of `getc' without
28997 - needing to check for an error from `getc'.
28999 - The character that you push back doesn't have to be the same as
29000 - the last character that was actually read from the stream. In
29001 - fact, it isn't necessary to actually read any characters from the
29002 - stream before unreading them with `ungetc'! But that is a strange
29003 - way to write a program; usually `ungetc' is used only to unread a
29004 - character that was just read from the same stream. The GNU C
29005 - library supports this even on files opened in binary mode, but
29006 - other systems might not.
29008 - The GNU C library only supports one character of pushback--in other
29009 - words, it does not work to call `ungetc' twice without doing input
29010 - in between. Other systems might let you push back multiple
29011 - characters; then reading from the stream retrieves the characters
29012 - in the reverse order that they were pushed.
29014 - Pushing back characters doesn't alter the file; only the internal
29015 - buffering for the stream is affected. If a file positioning
29016 - function (such as `fseek', `fseeko' or `rewind'; *note File
29017 - Positioning::) is called, any pending pushed-back characters are
29018 - discarded.
29020 - Unreading a character on a stream that is at end of file clears the
29021 - end-of-file indicator for the stream, because it makes the
29022 - character of input available. After you read that character,
29023 - trying to read again will encounter end of file.
29025 - - Function: wint_t ungetwc (wint_t WC, FILE *STREAM)
29026 - The `ungetwc' function behaves just like `ungetc' just that it
29027 - pushes back a wide character.
29029 - Here is an example showing the use of `getc' and `ungetc' to skip
29030 -over whitespace characters. When this function reaches a
29031 -non-whitespace character, it unreads that character to be seen again on
29032 -the next read operation on the stream.
29034 - #include <stdio.h>
29035 - #include <ctype.h>
29037 - void
29038 - skip_whitespace (FILE *stream)
29040 - int c;
29041 - do
29042 - /* No need to check for `EOF' because it is not
29043 - `isspace', and `ungetc' ignores `EOF'. */
29044 - c = getc (stream);
29045 - while (isspace (c));
29046 - ungetc (c, stream);
29049 -\x1f
29050 -File: libc.info, Node: Block Input/Output, Next: Formatted Output, Prev: Unreading, Up: I/O on Streams
29052 -Block Input/Output
29053 -==================
29055 - This section describes how to do input and output operations on
29056 -blocks of data. You can use these functions to read and write binary
29057 -data, as well as to read and write text in fixed-size blocks instead of
29058 -by characters or lines.
29060 - Binary files are typically used to read and write blocks of data in
29061 -the same format as is used to represent the data in a running program.
29062 -In other words, arbitrary blocks of memory--not just character or string
29063 -objects--can be written to a binary file, and meaningfully read in
29064 -again by the same program.
29066 - Storing data in binary form is often considerably more efficient than
29067 -using the formatted I/O functions. Also, for floating-point numbers,
29068 -the binary form avoids possible loss of precision in the conversion
29069 -process. On the other hand, binary files can't be examined or modified
29070 -easily using many standard file utilities (such as text editors), and
29071 -are not portable between different implementations of the language, or
29072 -different kinds of computers.
29074 - These functions are declared in `stdio.h'.
29076 - - Function: size_t fread (void *DATA, size_t SIZE, size_t COUNT, FILE
29077 - *STREAM)
29078 - This function reads up to COUNT objects of size SIZE into the
29079 - array DATA, from the stream STREAM. It returns the number of
29080 - objects actually read, which might be less than COUNT if a read
29081 - error occurs or the end of the file is reached. This function
29082 - returns a value of zero (and doesn't read anything) if either SIZE
29083 - or COUNT is zero.
29085 - If `fread' encounters end of file in the middle of an object, it
29086 - returns the number of complete objects read, and discards the
29087 - partial object. Therefore, the stream remains at the actual end
29088 - of the file.
29090 - - Function: size_t fread_unlocked (void *DATA, size_t SIZE, size_t
29091 - COUNT, FILE *STREAM)
29092 - The `fread_unlocked' function is equivalent to the `fread'
29093 - function except that it does not implicitly lock the stream.
29095 - This function is a GNU extension.
29097 - - Function: size_t fwrite (const void *DATA, size_t SIZE, size_t
29098 - COUNT, FILE *STREAM)
29099 - This function writes up to COUNT objects of size SIZE from the
29100 - array DATA, to the stream STREAM. The return value is normally
29101 - COUNT, if the call succeeds. Any other value indicates some sort
29102 - of error, such as running out of space.
29104 - - Function: size_t fwrite_unlocked (const void *DATA, size_t SIZE,
29105 - size_t COUNT, FILE *STREAM)
29106 - The `fwrite_unlocked' function is equivalent to the `fwrite'
29107 - function except that it does not implicitly lock the stream.
29109 - This function is a GNU extension.
29111 -\x1f
29112 -File: libc.info, Node: Formatted Output, Next: Customizing Printf, Prev: Block Input/Output, Up: I/O on Streams
29114 -Formatted Output
29115 -================
29117 - The functions described in this section (`printf' and related
29118 -functions) provide a convenient way to perform formatted output. You
29119 -call `printf' with a "format string" or "template string" that
29120 -specifies how to format the values of the remaining arguments.
29122 - Unless your program is a filter that specifically performs line- or
29123 -character-oriented processing, using `printf' or one of the other
29124 -related functions described in this section is usually the easiest and
29125 -most concise way to perform output. These functions are especially
29126 -useful for printing error messages, tables of data, and the like.
29128 -* Menu:
29130 -* Formatted Output Basics:: Some examples to get you started.
29131 -* Output Conversion Syntax:: General syntax of conversion
29132 - specifications.
29133 -* Table of Output Conversions:: Summary of output conversions and
29134 - what they do.
29135 -* Integer Conversions:: Details about formatting of integers.
29136 -* Floating-Point Conversions:: Details about formatting of
29137 - floating-point numbers.
29138 -* Other Output Conversions:: Details about formatting of strings,
29139 - characters, pointers, and the like.
29140 -* Formatted Output Functions:: Descriptions of the actual functions.
29141 -* Dynamic Output:: Functions that allocate memory for the output.
29142 -* Variable Arguments Output:: `vprintf' and friends.
29143 -* Parsing a Template String:: What kinds of args does a given template
29144 - call for?
29145 -* Example of Parsing:: Sample program using `parse_printf_format'.
29147 -\x1f
29148 -File: libc.info, Node: Formatted Output Basics, Next: Output Conversion Syntax, Up: Formatted Output
29150 -Formatted Output Basics
29151 ------------------------
29153 - The `printf' function can be used to print any number of arguments.
29154 -The template string argument you supply in a call provides information
29155 -not only about the number of additional arguments, but also about their
29156 -types and what style should be used for printing them.
29158 - Ordinary characters in the template string are simply written to the
29159 -output stream as-is, while "conversion specifications" introduced by a
29160 -`%' character in the template cause subsequent arguments to be
29161 -formatted and written to the output stream. For example,
29163 - int pct = 37;
29164 - char filename[] = "foo.txt";
29165 - printf ("Processing of `%s' is %d%% finished.\nPlease be patient.\n",
29166 - filename, pct);
29168 -produces output like
29170 - Processing of `foo.txt' is 37% finished.
29171 - Please be patient.
29173 - This example shows the use of the `%d' conversion to specify that an
29174 -`int' argument should be printed in decimal notation, the `%s'
29175 -conversion to specify printing of a string argument, and the `%%'
29176 -conversion to print a literal `%' character.
29178 - There are also conversions for printing an integer argument as an
29179 -unsigned value in octal, decimal, or hexadecimal radix (`%o', `%u', or
29180 -`%x', respectively); or as a character value (`%c').
29182 - Floating-point numbers can be printed in normal, fixed-point notation
29183 -using the `%f' conversion or in exponential notation using the `%e'
29184 -conversion. The `%g' conversion uses either `%e' or `%f' format,
29185 -depending on what is more appropriate for the magnitude of the
29186 -particular number.
29188 - You can control formatting more precisely by writing "modifiers"
29189 -between the `%' and the character that indicates which conversion to
29190 -apply. These slightly alter the ordinary behavior of the conversion.
29191 -For example, most conversion specifications permit you to specify a
29192 -minimum field width and a flag indicating whether you want the result
29193 -left- or right-justified within the field.
29195 - The specific flags and modifiers that are permitted and their
29196 -interpretation vary depending on the particular conversion. They're all
29197 -described in more detail in the following sections. Don't worry if this
29198 -all seems excessively complicated at first; you can almost always get
29199 -reasonable free-format output without using any of the modifiers at all.
29200 -The modifiers are mostly used to make the output look "prettier" in
29201 -tables.
29203 -\x1f
29204 -File: libc.info, Node: Output Conversion Syntax, Next: Table of Output Conversions, Prev: Formatted Output Basics, Up: Formatted Output
29206 -Output Conversion Syntax
29207 -------------------------
29209 - This section provides details about the precise syntax of conversion
29210 -specifications that can appear in a `printf' template string.
29212 - Characters in the template string that are not part of a conversion
29213 -specification are printed as-is to the output stream. Multibyte
29214 -character sequences (*note Character Set Handling::) are permitted in a
29215 -template string.
29217 - The conversion specifications in a `printf' template string have the
29218 -general form:
29220 - % [ PARAM-NO $] FLAGS WIDTH [ . PRECISION ] TYPE CONVERSION
29224 - % [ PARAM-NO $] FLAGS WIDTH . * [ PARAM-NO $] TYPE CONVERSION
29226 - For example, in the conversion specifier `%-10.8ld', the `-' is a
29227 -flag, `10' specifies the field width, the precision is `8', the letter
29228 -`l' is a type modifier, and `d' specifies the conversion style. (This
29229 -particular type specifier says to print a `long int' argument in
29230 -decimal notation, with a minimum of 8 digits left-justified in a field
29231 -at least 10 characters wide.)
29233 - In more detail, output conversion specifications consist of an
29234 -initial `%' character followed in sequence by:
29236 - * An optional specification of the parameter used for this format.
29237 - Normally the parameters to the `printf' function are assigned to
29238 - the formats in the order of appearance in the format string. But
29239 - in some situations (such as message translation) this is not
29240 - desirable and this extension allows an explicit parameter to be
29241 - specified.
29243 - The PARAM-NO parts of the format must be integers in the range of
29244 - 1 to the maximum number of arguments present to the function call.
29245 - Some implementations limit this number to a certainly upper
29246 - bound. The exact limit can be retrieved by the following constant.
29248 - - Macro: NL_ARGMAX
29249 - The value of `NL_ARGMAX' is the maximum value allowed for the
29250 - specification of an positional parameter in a `printf' call.
29251 - The actual value in effect at runtime can be retrieved by
29252 - using `sysconf' using the `_SC_NL_ARGMAX' parameter *note
29253 - Sysconf Definition::.
29255 - Some system have a quite low limit such as 9 for System V
29256 - systems. The GNU C library has no real limit.
29258 - If any of the formats has a specification for the parameter
29259 - position all of them in the format string shall have one.
29260 - Otherwise the behavior is undefined.
29262 - * Zero or more "flag characters" that modify the normal behavior of
29263 - the conversion specification.
29265 - * An optional decimal integer specifying the "minimum field width".
29266 - If the normal conversion produces fewer characters than this, the
29267 - field is padded with spaces to the specified width. This is a
29268 - _minimum_ value; if the normal conversion produces more characters
29269 - than this, the field is _not_ truncated. Normally, the output is
29270 - right-justified within the field.
29272 - You can also specify a field width of `*'. This means that the
29273 - next argument in the argument list (before the actual value to be
29274 - printed) is used as the field width. The value must be an `int'.
29275 - If the value is negative, this means to set the `-' flag (see
29276 - below) and to use the absolute value as the field width.
29278 - * An optional "precision" to specify the number of digits to be
29279 - written for the numeric conversions. If the precision is
29280 - specified, it consists of a period (`.') followed optionally by a
29281 - decimal integer (which defaults to zero if omitted).
29283 - You can also specify a precision of `*'. This means that the next
29284 - argument in the argument list (before the actual value to be
29285 - printed) is used as the precision. The value must be an `int',
29286 - and is ignored if it is negative. If you specify `*' for both the
29287 - field width and precision, the field width argument precedes the
29288 - precision argument. Other C library versions may not recognize
29289 - this syntax.
29291 - * An optional "type modifier character", which is used to specify the
29292 - data type of the corresponding argument if it differs from the
29293 - default type. (For example, the integer conversions assume a type
29294 - of `int', but you can specify `h', `l', or `L' for other integer
29295 - types.)
29297 - * A character that specifies the conversion to be applied.
29299 - The exact options that are permitted and how they are interpreted
29300 -vary between the different conversion specifiers. See the descriptions
29301 -of the individual conversions for information about the particular
29302 -options that they use.
29304 - With the `-Wformat' option, the GNU C compiler checks calls to
29305 -`printf' and related functions. It examines the format string and
29306 -verifies that the correct number and types of arguments are supplied.
29307 -There is also a GNU C syntax to tell the compiler that a function you
29308 -write uses a `printf'-style format string. *Note Declaring Attributes
29309 -of Functions: (gcc.info)Function Attributes, for more information.
29311 diff -u -udbrN glibc-2.3.2/manual/libc.info-18 glibc-2.3.2-200304020432/manual/libc.info-18
29312 --- glibc-2.3.2/manual/libc.info-18 Sat Mar 1 02:39:41 2003
29313 +++ glibc-2.3.2-200304020432/manual/libc.info-18 Thu Jan 1 01:00:00 1970
29314 @@ -1,1211 +0,0 @@
29315 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
29317 -INFO-DIR-SECTION GNU libraries
29318 -START-INFO-DIR-ENTRY
29319 -* Libc: (libc). C library.
29320 -END-INFO-DIR-ENTRY
29322 - This file documents the GNU C library.
29324 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
29325 -Reference Manual', for Version 2.3.x.
29327 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
29328 -Free Software Foundation, Inc.
29330 - Permission is granted to copy, distribute and/or modify this document
29331 -under the terms of the GNU Free Documentation License, Version 1.1 or
29332 -any later version published by the Free Software Foundation; with the
29333 -Invariant Sections being "Free Software Needs Free Documentation" and
29334 -"GNU Lesser General Public License", the Front-Cover texts being (a)
29335 -(see below), and with the Back-Cover Texts being (b) (see below). A
29336 -copy of the license is included in the section entitled "GNU Free
29337 -Documentation License".
29339 - (a) The FSF's Front-Cover Text is:
29341 - A GNU Manual
29343 - (b) The FSF's Back-Cover Text is:
29345 - You have freedom to copy and modify this GNU Manual, like GNU
29346 -software. Copies published by the Free Software Foundation raise
29347 -funds for GNU development.
29349 -\x1f
29350 -File: libc.info, Node: Table of Output Conversions, Next: Integer Conversions, Prev: Output Conversion Syntax, Up: Formatted Output
29352 -Table of Output Conversions
29353 ----------------------------
29355 - Here is a table summarizing what all the different conversions do:
29357 -`%d', `%i'
29358 - Print an integer as a signed decimal number. *Note Integer
29359 - Conversions::, for details. `%d' and `%i' are synonymous for
29360 - output, but are different when used with `scanf' for input (*note
29361 - Table of Input Conversions::).
29363 -`%o'
29364 - Print an integer as an unsigned octal number. *Note Integer
29365 - Conversions::, for details.
29367 -`%u'
29368 - Print an integer as an unsigned decimal number. *Note Integer
29369 - Conversions::, for details.
29371 -`%x', `%X'
29372 - Print an integer as an unsigned hexadecimal number. `%x' uses
29373 - lower-case letters and `%X' uses upper-case. *Note Integer
29374 - Conversions::, for details.
29376 -`%f'
29377 - Print a floating-point number in normal (fixed-point) notation.
29378 - *Note Floating-Point Conversions::, for details.
29380 -`%e', `%E'
29381 - Print a floating-point number in exponential notation. `%e' uses
29382 - lower-case letters and `%E' uses upper-case. *Note Floating-Point
29383 - Conversions::, for details.
29385 -`%g', `%G'
29386 - Print a floating-point number in either normal or exponential
29387 - notation, whichever is more appropriate for its magnitude. `%g'
29388 - uses lower-case letters and `%G' uses upper-case. *Note
29389 - Floating-Point Conversions::, for details.
29391 -`%a', `%A'
29392 - Print a floating-point number in a hexadecimal fractional notation
29393 - which the exponent to base 2 represented in decimal digits. `%a'
29394 - uses lower-case letters and `%A' uses upper-case. *Note
29395 - Floating-Point Conversions::, for details.
29397 -`%c'
29398 - Print a single character. *Note Other Output Conversions::.
29400 -`%C'
29401 - This is an alias for `%lc' which is supported for compatibility
29402 - with the Unix standard.
29404 -`%s'
29405 - Print a string. *Note Other Output Conversions::.
29407 -`%S'
29408 - This is an alias for `%ls' which is supported for compatibility
29409 - with the Unix standard.
29411 -`%p'
29412 - Print the value of a pointer. *Note Other Output Conversions::.
29414 -`%n'
29415 - Get the number of characters printed so far. *Note Other Output
29416 - Conversions::. Note that this conversion specification never
29417 - produces any output.
29419 -`%m'
29420 - Print the string corresponding to the value of `errno'. (This is
29421 - a GNU extension.) *Note Other Output Conversions::.
29423 -`%%'
29424 - Print a literal `%' character. *Note Other Output Conversions::.
29426 - If the syntax of a conversion specification is invalid, unpredictable
29427 -things will happen, so don't do this. If there aren't enough function
29428 -arguments provided to supply values for all the conversion
29429 -specifications in the template string, or if the arguments are not of
29430 -the correct types, the results are unpredictable. If you supply more
29431 -arguments than conversion specifications, the extra argument values are
29432 -simply ignored; this is sometimes useful.
29434 -\x1f
29435 -File: libc.info, Node: Integer Conversions, Next: Floating-Point Conversions, Prev: Table of Output Conversions, Up: Formatted Output
29437 -Integer Conversions
29438 --------------------
29440 - This section describes the options for the `%d', `%i', `%o', `%u',
29441 -`%x', and `%X' conversion specifications. These conversions print
29442 -integers in various formats.
29444 - The `%d' and `%i' conversion specifications both print an `int'
29445 -argument as a signed decimal number; while `%o', `%u', and `%x' print
29446 -the argument as an unsigned octal, decimal, or hexadecimal number
29447 -(respectively). The `%X' conversion specification is just like `%x'
29448 -except that it uses the characters `ABCDEF' as digits instead of
29449 -`abcdef'.
29451 - The following flags are meaningful:
29453 -`-'
29454 - Left-justify the result in the field (instead of the normal
29455 - right-justification).
29457 -`+'
29458 - For the signed `%d' and `%i' conversions, print a plus sign if the
29459 - value is positive.
29461 -` '
29462 - For the signed `%d' and `%i' conversions, if the result doesn't
29463 - start with a plus or minus sign, prefix it with a space character
29464 - instead. Since the `+' flag ensures that the result includes a
29465 - sign, this flag is ignored if you supply both of them.
29467 -`#'
29468 - For the `%o' conversion, this forces the leading digit to be `0',
29469 - as if by increasing the precision. For `%x' or `%X', this
29470 - prefixes a leading `0x' or `0X' (respectively) to the result.
29471 - This doesn't do anything useful for the `%d', `%i', or `%u'
29472 - conversions. Using this flag produces output which can be parsed
29473 - by the `strtoul' function (*note Parsing of Integers::) and
29474 - `scanf' with the `%i' conversion (*note Numeric Input
29475 - Conversions::).
29477 -`''
29478 - Separate the digits into groups as specified by the locale
29479 - specified for the `LC_NUMERIC' category; *note General Numeric::.
29480 - This flag is a GNU extension.
29482 -`0'
29483 - Pad the field with zeros instead of spaces. The zeros are placed
29484 - after any indication of sign or base. This flag is ignored if the
29485 - `-' flag is also specified, or if a precision is specified.
29487 - If a precision is supplied, it specifies the minimum number of
29488 -digits to appear; leading zeros are produced if necessary. If you
29489 -don't specify a precision, the number is printed with as many digits as
29490 -it needs. If you convert a value of zero with an explicit precision of
29491 -zero, then no characters at all are produced.
29493 - Without a type modifier, the corresponding argument is treated as an
29494 -`int' (for the signed conversions `%i' and `%d') or `unsigned int' (for
29495 -the unsigned conversions `%o', `%u', `%x', and `%X'). Recall that
29496 -since `printf' and friends are variadic, any `char' and `short'
29497 -arguments are automatically converted to `int' by the default argument
29498 -promotions. For arguments of other integer types, you can use these
29499 -modifiers:
29501 -`hh'
29502 - Specifies that the argument is a `signed char' or `unsigned char',
29503 - as appropriate. A `char' argument is converted to an `int' or
29504 - `unsigned int' by the default argument promotions anyway, but the
29505 - `h' modifier says to convert it back to a `char' again.
29507 - This modifier was introduced in ISO C99.
29509 -`h'
29510 - Specifies that the argument is a `short int' or `unsigned short
29511 - int', as appropriate. A `short' argument is converted to an `int'
29512 - or `unsigned int' by the default argument promotions anyway, but
29513 - the `h' modifier says to convert it back to a `short' again.
29515 -`j'
29516 - Specifies that the argument is a `intmax_t' or `uintmax_t', as
29517 - appropriate.
29519 - This modifier was introduced in ISO C99.
29521 -`l'
29522 - Specifies that the argument is a `long int' or `unsigned long
29523 - int', as appropriate. Two `l' characters is like the `L'
29524 - modifier, below.
29526 - If used with `%c' or `%s' the corresponding parameter is
29527 - considered as a wide character or wide character string
29528 - respectively. This use of `l' was introduced in Amendment 1 to
29529 - ISO C90.
29531 -`L'
29532 -`ll'
29533 -`q'
29534 - Specifies that the argument is a `long long int'. (This type is
29535 - an extension supported by the GNU C compiler. On systems that
29536 - don't support extra-long integers, this is the same as `long int'.)
29538 - The `q' modifier is another name for the same thing, which comes
29539 - from 4.4 BSD; a `long long int' is sometimes called a "quad" `int'.
29541 -`t'
29542 - Specifies that the argument is a `ptrdiff_t'.
29544 - This modifier was introduced in ISO C99.
29546 -`z'
29547 -`Z'
29548 - Specifies that the argument is a `size_t'.
29550 - `z' was introduced in ISO C99. `Z' is a GNU extension predating
29551 - this addition and should not be used in new code.
29553 - Here is an example. Using the template string:
29555 - "|%5d|%-5d|%+5d|%+-5d|% 5d|%05d|%5.0d|%5.2d|%d|\n"
29557 -to print numbers using the different options for the `%d' conversion
29558 -gives results like:
29560 - | 0|0 | +0|+0 | 0|00000| | 00|0|
29561 - | 1|1 | +1|+1 | 1|00001| 1| 01|1|
29562 - | -1|-1 | -1|-1 | -1|-0001| -1| -01|-1|
29563 - |100000|100000|+100000|+100000| 100000|100000|100000|100000|100000|
29565 - In particular, notice what happens in the last case where the number
29566 -is too large to fit in the minimum field width specified.
29568 - Here are some more examples showing how unsigned integers print under
29569 -various format options, using the template string:
29571 - "|%5u|%5o|%5x|%5X|%#5o|%#5x|%#5X|%#10.8x|\n"
29573 - | 0| 0| 0| 0| 0| 0| 0| 00000000|
29574 - | 1| 1| 1| 1| 01| 0x1| 0X1|0x00000001|
29575 - |100000|303240|186a0|186A0|0303240|0x186a0|0X186A0|0x000186a0|
29577 -\x1f
29578 -File: libc.info, Node: Floating-Point Conversions, Next: Other Output Conversions, Prev: Integer Conversions, Up: Formatted Output
29580 -Floating-Point Conversions
29581 ---------------------------
29583 - This section discusses the conversion specifications for
29584 -floating-point numbers: the `%f', `%e', `%E', `%g', and `%G'
29585 -conversions.
29587 - The `%f' conversion prints its argument in fixed-point notation,
29588 -producing output of the form [`-']DDD`.'DDD, where the number of digits
29589 -following the decimal point is controlled by the precision you specify.
29591 - The `%e' conversion prints its argument in exponential notation,
29592 -producing output of the form [`-']D`.'DDD`e'[`+'|`-']DD. Again, the
29593 -number of digits following the decimal point is controlled by the
29594 -precision. The exponent always contains at least two digits. The `%E'
29595 -conversion is similar but the exponent is marked with the letter `E'
29596 -instead of `e'.
29598 - The `%g' and `%G' conversions print the argument in the style of
29599 -`%e' or `%E' (respectively) if the exponent would be less than -4 or
29600 -greater than or equal to the precision; otherwise they use the `%f'
29601 -style. A precision of `0', is taken as 1. is Trailing zeros are
29602 -removed from the fractional portion of the result and a decimal-point
29603 -character appears only if it is followed by a digit.
29605 - The `%a' and `%A' conversions are meant for representing
29606 -floating-point numbers exactly in textual form so that they can be
29607 -exchanged as texts between different programs and/or machines. The
29608 -numbers are represented is the form [`-']`0x'H`.'HHH`p'[`+'|`-']DD. At
29609 -the left of the decimal-point character exactly one digit is print.
29610 -This character is only `0' if the number is denormalized. Otherwise
29611 -the value is unspecified; it is implementation dependent how many bits
29612 -are used. The number of hexadecimal digits on the right side of the
29613 -decimal-point character is equal to the precision. If the precision is
29614 -zero it is determined to be large enough to provide an exact
29615 -representation of the number (or it is large enough to distinguish two
29616 -adjacent values if the `FLT_RADIX' is not a power of 2, *note Floating
29617 -Point Parameters::). For the `%a' conversion lower-case characters are
29618 -used to represent the hexadecimal number and the prefix and exponent
29619 -sign are printed as `0x' and `p' respectively. Otherwise upper-case
29620 -characters are used and `0X' and `P' are used for the representation of
29621 -prefix and exponent string. The exponent to the base of two is printed
29622 -as a decimal number using at least one digit but at most as many digits
29623 -as necessary to represent the value exactly.
29625 - If the value to be printed represents infinity or a NaN, the output
29626 -is [`-']`inf' or `nan' respectively if the conversion specifier is
29627 -`%a', `%e', `%f', or `%g' and it is [`-']`INF' or `NAN' respectively if
29628 -the conversion is `%A', `%E', or `%G'.
29630 - The following flags can be used to modify the behavior:
29632 -`-'
29633 - Left-justify the result in the field. Normally the result is
29634 - right-justified.
29636 -`+'
29637 - Always include a plus or minus sign in the result.
29639 -` '
29640 - If the result doesn't start with a plus or minus sign, prefix it
29641 - with a space instead. Since the `+' flag ensures that the result
29642 - includes a sign, this flag is ignored if you supply both of them.
29644 -`#'
29645 - Specifies that the result should always include a decimal point,
29646 - even if no digits follow it. For the `%g' and `%G' conversions,
29647 - this also forces trailing zeros after the decimal point to be left
29648 - in place where they would otherwise be removed.
29650 -`''
29651 - Separate the digits of the integer part of the result into groups
29652 - as specified by the locale specified for the `LC_NUMERIC' category;
29653 - *note General Numeric::. This flag is a GNU extension.
29655 -`0'
29656 - Pad the field with zeros instead of spaces; the zeros are placed
29657 - after any sign. This flag is ignored if the `-' flag is also
29658 - specified.
29660 - The precision specifies how many digits follow the decimal-point
29661 -character for the `%f', `%e', and `%E' conversions. For these
29662 -conversions, the default precision is `6'. If the precision is
29663 -explicitly `0', this suppresses the decimal point character entirely.
29664 -For the `%g' and `%G' conversions, the precision specifies how many
29665 -significant digits to print. Significant digits are the first digit
29666 -before the decimal point, and all the digits after it. If the
29667 -precision is `0' or not specified for `%g' or `%G', it is treated like
29668 -a value of `1'. If the value being printed cannot be expressed
29669 -accurately in the specified number of digits, the value is rounded to
29670 -the nearest number that fits.
29672 - Without a type modifier, the floating-point conversions use an
29673 -argument of type `double'. (By the default argument promotions, any
29674 -`float' arguments are automatically converted to `double'.) The
29675 -following type modifier is supported:
29677 -`L'
29678 - An uppercase `L' specifies that the argument is a `long double'.
29680 - Here are some examples showing how numbers print using the various
29681 -floating-point conversions. All of the numbers were printed using this
29682 -template string:
29684 - "|%13.4a|%13.4f|%13.4e|%13.4g|\n"
29686 - Here is the output:
29688 - | 0x0.0000p+0| 0.0000| 0.0000e+00| 0|
29689 - | 0x1.0000p-1| 0.5000| 5.0000e-01| 0.5|
29690 - | 0x1.0000p+0| 1.0000| 1.0000e+00| 1|
29691 - | -0x1.0000p+0| -1.0000| -1.0000e+00| -1|
29692 - | 0x1.9000p+6| 100.0000| 1.0000e+02| 100|
29693 - | 0x1.f400p+9| 1000.0000| 1.0000e+03| 1000|
29694 - | 0x1.3880p+13| 10000.0000| 1.0000e+04| 1e+04|
29695 - | 0x1.81c8p+13| 12345.0000| 1.2345e+04| 1.234e+04|
29696 - | 0x1.86a0p+16| 100000.0000| 1.0000e+05| 1e+05|
29697 - | 0x1.e240p+16| 123456.0000| 1.2346e+05| 1.235e+05|
29699 - Notice how the `%g' conversion drops trailing zeros.
29701 -\x1f
29702 -File: libc.info, Node: Other Output Conversions, Next: Formatted Output Functions, Prev: Floating-Point Conversions, Up: Formatted Output
29704 -Other Output Conversions
29705 -------------------------
29707 - This section describes miscellaneous conversions for `printf'.
29709 - The `%c' conversion prints a single character. In case there is no
29710 -`l' modifier the `int' argument is first converted to an `unsigned
29711 -char'. Then, if used in a wide stream function, the character is
29712 -converted into the corresponding wide character. The `-' flag can be
29713 -used to specify left-justification in the field, but no other flags are
29714 -defined, and no precision or type modifier can be given. For example:
29716 - printf ("%c%c%c%c%c", 'h', 'e', 'l', 'l', 'o');
29718 -prints `hello'.
29720 - If there is a `l' modifier present the argument is expected to be of
29721 -type `wint_t'. If used in a multibyte function the wide character is
29722 -converted into a multibyte character before being added to the output.
29723 -In this case more than one output byte can be produced.
29725 - The `%s' conversion prints a string. If no `l' modifier is present
29726 -the corresponding argument must be of type `char *' (or `const char
29727 -*'). If used in a wide stream function the string is first converted
29728 -in a wide character string. A precision can be specified to indicate
29729 -the maximum number of characters to write; otherwise characters in the
29730 -string up to but not including the terminating null character are
29731 -written to the output stream. The `-' flag can be used to specify
29732 -left-justification in the field, but no other flags or type modifiers
29733 -are defined for this conversion. For example:
29735 - printf ("%3s%-6s", "no", "where");
29737 -prints ` nowhere '.
29739 - If there is a `l' modifier present the argument is expected to be of
29740 -type `wchar_t' (or `const wchar_t *').
29742 - If you accidentally pass a null pointer as the argument for a `%s'
29743 -conversion, the GNU library prints it as `(null)'. We think this is
29744 -more useful than crashing. But it's not good practice to pass a null
29745 -argument intentionally.
29747 - The `%m' conversion prints the string corresponding to the error
29748 -code in `errno'. *Note Error Messages::. Thus:
29750 - fprintf (stderr, "can't open `%s': %m\n", filename);
29752 -is equivalent to:
29754 - fprintf (stderr, "can't open `%s': %s\n", filename, strerror (errno));
29756 -The `%m' conversion is a GNU C library extension.
29758 - The `%p' conversion prints a pointer value. The corresponding
29759 -argument must be of type `void *'. In practice, you can use any type
29760 -of pointer.
29762 - In the GNU system, non-null pointers are printed as unsigned
29763 -integers, as if a `%#x' conversion were used. Null pointers print as
29764 -`(nil)'. (Pointers might print differently in other systems.)
29766 - For example:
29768 - printf ("%p", "testing");
29770 -prints `0x' followed by a hexadecimal number--the address of the string
29771 -constant `"testing"'. It does not print the word `testing'.
29773 - You can supply the `-' flag with the `%p' conversion to specify
29774 -left-justification, but no other flags, precision, or type modifiers
29775 -are defined.
29777 - The `%n' conversion is unlike any of the other output conversions.
29778 -It uses an argument which must be a pointer to an `int', but instead of
29779 -printing anything it stores the number of characters printed so far by
29780 -this call at that location. The `h' and `l' type modifiers are
29781 -permitted to specify that the argument is of type `short int *' or
29782 -`long int *' instead of `int *', but no flags, field width, or
29783 -precision are permitted.
29785 - For example,
29787 - int nchar;
29788 - printf ("%d %s%n\n", 3, "bears", &nchar);
29790 -prints:
29792 - 3 bears
29794 -and sets `nchar' to `7', because `3 bears' is seven characters.
29796 - The `%%' conversion prints a literal `%' character. This conversion
29797 -doesn't use an argument, and no flags, field width, precision, or type
29798 -modifiers are permitted.
29800 -\x1f
29801 -File: libc.info, Node: Formatted Output Functions, Next: Dynamic Output, Prev: Other Output Conversions, Up: Formatted Output
29803 -Formatted Output Functions
29804 ---------------------------
29806 - This section describes how to call `printf' and related functions.
29807 -Prototypes for these functions are in the header file `stdio.h'.
29808 -Because these functions take a variable number of arguments, you _must_
29809 -declare prototypes for them before using them. Of course, the easiest
29810 -way to make sure you have all the right prototypes is to just include
29811 -`stdio.h'.
29813 - - Function: int printf (const char *TEMPLATE, ...)
29814 - The `printf' function prints the optional arguments under the
29815 - control of the template string TEMPLATE to the stream `stdout'.
29816 - It returns the number of characters printed, or a negative value
29817 - if there was an output error.
29819 - - Function: int wprintf (const wchar_t *TEMPLATE, ...)
29820 - The `wprintf' function prints the optional arguments under the
29821 - control of the wide template string TEMPLATE to the stream
29822 - `stdout'. It returns the number of wide characters printed, or a
29823 - negative value if there was an output error.
29825 - - Function: int fprintf (FILE *STREAM, const char *TEMPLATE, ...)
29826 - This function is just like `printf', except that the output is
29827 - written to the stream STREAM instead of `stdout'.
29829 - - Function: int fwprintf (FILE *STREAM, const wchar_t *TEMPLATE, ...)
29830 - This function is just like `wprintf', except that the output is
29831 - written to the stream STREAM instead of `stdout'.
29833 - - Function: int sprintf (char *S, const char *TEMPLATE, ...)
29834 - This is like `printf', except that the output is stored in the
29835 - character array S instead of written to a stream. A null
29836 - character is written to mark the end of the string.
29838 - The `sprintf' function returns the number of characters stored in
29839 - the array S, not including the terminating null character.
29841 - The behavior of this function is undefined if copying takes place
29842 - between objects that overlap--for example, if S is also given as
29843 - an argument to be printed under control of the `%s' conversion.
29844 - *Note Copying and Concatenation::.
29846 - *Warning:* The `sprintf' function can be *dangerous* because it
29847 - can potentially output more characters than can fit in the
29848 - allocation size of the string S. Remember that the field width
29849 - given in a conversion specification is only a _minimum_ value.
29851 - To avoid this problem, you can use `snprintf' or `asprintf',
29852 - described below.
29854 - - Function: int swprintf (wchar_t *S, size_t SIZE, const wchar_t
29855 - *TEMPLATE, ...)
29856 - This is like `wprintf', except that the output is stored in the
29857 - wide character array WS instead of written to a stream. A null
29858 - wide character is written to mark the end of the string. The SIZE
29859 - argument specifies the maximum number of characters to produce.
29860 - The trailing null character is counted towards this limit, so you
29861 - should allocate at least SIZE wide characters for the string WS.
29863 - The return value is the number of characters generated for the
29864 - given input, excluding the trailing null. If not all output fits
29865 - into the provided buffer a negative value is returned. You should
29866 - try again with a bigger output string. _Note:_ this is different
29867 - from how `snprintf' handles this situation.
29869 - Note that the corresponding narrow stream function takes fewer
29870 - parameters. `swprintf' in fact corresponds to the `snprintf'
29871 - function. Since the `sprintf' function can be dangerous and should
29872 - be avoided the ISO C committee refused to make the same mistake
29873 - again and decided to not define an function exactly corresponding
29874 - to `sprintf'.
29876 - - Function: int snprintf (char *S, size_t SIZE, const char *TEMPLATE,
29877 - ...)
29878 - The `snprintf' function is similar to `sprintf', except that the
29879 - SIZE argument specifies the maximum number of characters to
29880 - produce. The trailing null character is counted towards this
29881 - limit, so you should allocate at least SIZE characters for the
29882 - string S.
29884 - The return value is the number of characters which would be
29885 - generated for the given input, excluding the trailing null. If
29886 - this value is greater or equal to SIZE, not all characters from
29887 - the result have been stored in S. You should try again with a
29888 - bigger output string. Here is an example of doing this:
29890 - /* Construct a message describing the value of a variable
29891 - whose name is NAME and whose value is VALUE. */
29892 - char *
29893 - make_message (char *name, char *value)
29895 - /* Guess we need no more than 100 chars of space. */
29896 - int size = 100;
29897 - char *buffer = (char *) xmalloc (size);
29898 - int nchars;
29899 - if (buffer == NULL)
29900 - return NULL;
29902 - /* Try to print in the allocated space. */
29903 - nchars = snprintf (buffer, size, "value of %s is %s",
29904 - name, value);
29905 - if (nchars >= size)
29907 - /* Reallocate buffer now that we know
29908 - how much space is needed. */
29909 - buffer = (char *) xrealloc (buffer, nchars + 1);
29911 - if (buffer != NULL)
29912 - /* Try again. */
29913 - snprintf (buffer, size, "value of %s is %s",
29914 - name, value);
29916 - /* The last call worked, return the string. */
29917 - return buffer;
29920 - In practice, it is often easier just to use `asprintf', below.
29922 - *Attention:* In versions of the GNU C library prior to 2.1 the
29923 - return value is the number of characters stored, not including the
29924 - terminating null; unless there was not enough space in S to store
29925 - the result in which case `-1' is returned. This was changed in
29926 - order to comply with the ISO C99 standard.
29928 -\x1f
29929 -File: libc.info, Node: Dynamic Output, Next: Variable Arguments Output, Prev: Formatted Output Functions, Up: Formatted Output
29931 -Dynamically Allocating Formatted Output
29932 ----------------------------------------
29934 - The functions in this section do formatted output and place the
29935 -results in dynamically allocated memory.
29937 - - Function: int asprintf (char **PTR, const char *TEMPLATE, ...)
29938 - This function is similar to `sprintf', except that it dynamically
29939 - allocates a string (as with `malloc'; *note Unconstrained
29940 - Allocation::) to hold the output, instead of putting the output in
29941 - a buffer you allocate in advance. The PTR argument should be the
29942 - address of a `char *' object, and `asprintf' stores a pointer to
29943 - the newly allocated string at that location.
29945 - The return value is the number of characters allocated for the
29946 - buffer, or less than zero if an error occurred. Usually this means
29947 - that the buffer could not be allocated.
29949 - Here is how to use `asprintf' to get the same result as the
29950 - `snprintf' example, but more easily:
29952 - /* Construct a message describing the value of a variable
29953 - whose name is NAME and whose value is VALUE. */
29954 - char *
29955 - make_message (char *name, char *value)
29957 - char *result;
29958 - if (asprintf (&result, "value of %s is %s", name, value) < 0)
29959 - return NULL;
29960 - return result;
29963 - - Function: int obstack_printf (struct obstack *OBSTACK, const char
29964 - *TEMPLATE, ...)
29965 - This function is similar to `asprintf', except that it uses the
29966 - obstack OBSTACK to allocate the space. *Note Obstacks::.
29968 - The characters are written onto the end of the current object. To
29969 - get at them, you must finish the object with `obstack_finish'
29970 - (*note Growing Objects::).
29972 -\x1f
29973 -File: libc.info, Node: Variable Arguments Output, Next: Parsing a Template String, Prev: Dynamic Output, Up: Formatted Output
29975 -Variable Arguments Output Functions
29976 ------------------------------------
29978 - The functions `vprintf' and friends are provided so that you can
29979 -define your own variadic `printf'-like functions that make use of the
29980 -same internals as the built-in formatted output functions.
29982 - The most natural way to define such functions would be to use a
29983 -language construct to say, "Call `printf' and pass this template plus
29984 -all of my arguments after the first five." But there is no way to do
29985 -this in C, and it would be hard to provide a way, since at the C
29986 -language level there is no way to tell how many arguments your function
29987 -received.
29989 - Since that method is impossible, we provide alternative functions,
29990 -the `vprintf' series, which lets you pass a `va_list' to describe "all
29991 -of my arguments after the first five."
29993 - When it is sufficient to define a macro rather than a real function,
29994 -the GNU C compiler provides a way to do this much more easily with
29995 -macros. For example:
29997 - #define myprintf(a, b, c, d, e, rest...) \
29998 - printf (mytemplate , ## rest)
30000 -*Note Macros with Variable Numbers of Arguments: (gcc.info)Macro
30001 -Varargs, for details. But this is limited to macros, and does not
30002 -apply to real functions at all.
30004 - Before calling `vprintf' or the other functions listed in this
30005 -section, you _must_ call `va_start' (*note Variadic Functions::) to
30006 -initialize a pointer to the variable arguments. Then you can call
30007 -`va_arg' to fetch the arguments that you want to handle yourself. This
30008 -advances the pointer past those arguments.
30010 - Once your `va_list' pointer is pointing at the argument of your
30011 -choice, you are ready to call `vprintf'. That argument and all
30012 -subsequent arguments that were passed to your function are used by
30013 -`vprintf' along with the template that you specified separately.
30015 - In some other systems, the `va_list' pointer may become invalid
30016 -after the call to `vprintf', so you must not use `va_arg' after you
30017 -call `vprintf'. Instead, you should call `va_end' to retire the
30018 -pointer from service. However, you can safely call `va_start' on
30019 -another pointer variable and begin fetching the arguments again through
30020 -that pointer. Calling `vprintf' does not destroy the argument list of
30021 -your function, merely the particular pointer that you passed to it.
30023 - GNU C does not have such restrictions. You can safely continue to
30024 -fetch arguments from a `va_list' pointer after passing it to `vprintf',
30025 -and `va_end' is a no-op. (Note, however, that subsequent `va_arg'
30026 -calls will fetch the same arguments which `vprintf' previously used.)
30028 - Prototypes for these functions are declared in `stdio.h'.
30030 - - Function: int vprintf (const char *TEMPLATE, va_list AP)
30031 - This function is similar to `printf' except that, instead of taking
30032 - a variable number of arguments directly, it takes an argument list
30033 - pointer AP.
30035 - - Function: int vwprintf (const wchar_t *TEMPLATE, va_list AP)
30036 - This function is similar to `wprintf' except that, instead of
30037 - taking a variable number of arguments directly, it takes an
30038 - argument list pointer AP.
30040 - - Function: int vfprintf (FILE *STREAM, const char *TEMPLATE, va_list
30041 - AP)
30042 - This is the equivalent of `fprintf' with the variable argument list
30043 - specified directly as for `vprintf'.
30045 - - Function: int vfwprintf (FILE *STREAM, const wchar_t *TEMPLATE,
30046 - va_list AP)
30047 - This is the equivalent of `fwprintf' with the variable argument
30048 - list specified directly as for `vwprintf'.
30050 - - Function: int vsprintf (char *S, const char *TEMPLATE, va_list AP)
30051 - This is the equivalent of `sprintf' with the variable argument list
30052 - specified directly as for `vprintf'.
30054 - - Function: int vswprintf (wchar_t *S, size_t SIZE, const wchar_t
30055 - *TEMPLATE, va_list AP)
30056 - This is the equivalent of `swprintf' with the variable argument
30057 - list specified directly as for `vwprintf'.
30059 - - Function: int vsnprintf (char *S, size_t SIZE, const char *TEMPLATE,
30060 - va_list AP)
30061 - This is the equivalent of `snprintf' with the variable argument
30062 - list specified directly as for `vprintf'.
30064 - - Function: int vasprintf (char **PTR, const char *TEMPLATE, va_list
30065 - AP)
30066 - The `vasprintf' function is the equivalent of `asprintf' with the
30067 - variable argument list specified directly as for `vprintf'.
30069 - - Function: int obstack_vprintf (struct obstack *OBSTACK, const char
30070 - *TEMPLATE, va_list AP)
30071 - The `obstack_vprintf' function is the equivalent of
30072 - `obstack_printf' with the variable argument list specified directly
30073 - as for `vprintf'.
30075 - Here's an example showing how you might use `vfprintf'. This is a
30076 -function that prints error messages to the stream `stderr', along with
30077 -a prefix indicating the name of the program (*note Error Messages::,
30078 -for a description of `program_invocation_short_name').
30080 - #include <stdio.h>
30081 - #include <stdarg.h>
30083 - void
30084 - eprintf (const char *template, ...)
30086 - va_list ap;
30087 - extern char *program_invocation_short_name;
30089 - fprintf (stderr, "%s: ", program_invocation_short_name);
30090 - va_start (ap, template);
30091 - vfprintf (stderr, template, ap);
30092 - va_end (ap);
30095 -You could call `eprintf' like this:
30097 - eprintf ("file `%s' does not exist\n", filename);
30099 - In GNU C, there is a special construct you can use to let the
30100 -compiler know that a function uses a `printf'-style format string.
30101 -Then it can check the number and types of arguments in each call to the
30102 -function, and warn you when they do not match the format string. For
30103 -example, take this declaration of `eprintf':
30105 - void eprintf (const char *template, ...)
30106 - __attribute__ ((format (printf, 1, 2)));
30108 -This tells the compiler that `eprintf' uses a format string like
30109 -`printf' (as opposed to `scanf'; *note Formatted Input::); the format
30110 -string appears as the first argument; and the arguments to satisfy the
30111 -format begin with the second. *Note Declaring Attributes of Functions:
30112 -(gcc.info)Function Attributes, for more information.
30114 -\x1f
30115 -File: libc.info, Node: Parsing a Template String, Next: Example of Parsing, Prev: Variable Arguments Output, Up: Formatted Output
30117 -Parsing a Template String
30118 --------------------------
30120 - You can use the function `parse_printf_format' to obtain information
30121 -about the number and types of arguments that are expected by a given
30122 -template string. This function permits interpreters that provide
30123 -interfaces to `printf' to avoid passing along invalid arguments from
30124 -the user's program, which could cause a crash.
30126 - All the symbols described in this section are declared in the header
30127 -file `printf.h'.
30129 - - Function: size_t parse_printf_format (const char *TEMPLATE, size_t
30130 - N, int *ARGTYPES)
30131 - This function returns information about the number and types of
30132 - arguments expected by the `printf' template string TEMPLATE. The
30133 - information is stored in the array ARGTYPES; each element of this
30134 - array describes one argument. This information is encoded using
30135 - the various `PA_' macros, listed below.
30137 - The argument N specifies the number of elements in the array
30138 - ARGTYPES. This is the maximum number of elements that
30139 - `parse_printf_format' will try to write.
30141 - `parse_printf_format' returns the total number of arguments
30142 - required by TEMPLATE. If this number is greater than N, then the
30143 - information returned describes only the first N arguments. If you
30144 - want information about additional arguments, allocate a bigger
30145 - array and call `parse_printf_format' again.
30147 - The argument types are encoded as a combination of a basic type and
30148 -modifier flag bits.
30150 - - Macro: int PA_FLAG_MASK
30151 - This macro is a bitmask for the type modifier flag bits. You can
30152 - write the expression `(argtypes[i] & PA_FLAG_MASK)' to extract
30153 - just the flag bits for an argument, or `(argtypes[i] &
30154 - ~PA_FLAG_MASK)' to extract just the basic type code.
30156 - Here are symbolic constants that represent the basic types; they
30157 -stand for integer values.
30159 -`PA_INT'
30160 - This specifies that the base type is `int'.
30162 -`PA_CHAR'
30163 - This specifies that the base type is `int', cast to `char'.
30165 -`PA_STRING'
30166 - This specifies that the base type is `char *', a null-terminated
30167 - string.
30169 -`PA_POINTER'
30170 - This specifies that the base type is `void *', an arbitrary
30171 - pointer.
30173 -`PA_FLOAT'
30174 - This specifies that the base type is `float'.
30176 -`PA_DOUBLE'
30177 - This specifies that the base type is `double'.
30179 -`PA_LAST'
30180 - You can define additional base types for your own programs as
30181 - offsets from `PA_LAST'. For example, if you have data types `foo'
30182 - and `bar' with their own specialized `printf' conversions, you
30183 - could define encodings for these types as:
30185 - #define PA_FOO PA_LAST
30186 - #define PA_BAR (PA_LAST + 1)
30188 - Here are the flag bits that modify a basic type. They are combined
30189 -with the code for the basic type using inclusive-or.
30191 -`PA_FLAG_PTR'
30192 - If this bit is set, it indicates that the encoded type is a
30193 - pointer to the base type, rather than an immediate value. For
30194 - example, `PA_INT|PA_FLAG_PTR' represents the type `int *'.
30196 -`PA_FLAG_SHORT'
30197 - If this bit is set, it indicates that the base type is modified
30198 - with `short'. (This corresponds to the `h' type modifier.)
30200 -`PA_FLAG_LONG'
30201 - If this bit is set, it indicates that the base type is modified
30202 - with `long'. (This corresponds to the `l' type modifier.)
30204 -`PA_FLAG_LONG_LONG'
30205 - If this bit is set, it indicates that the base type is modified
30206 - with `long long'. (This corresponds to the `L' type modifier.)
30208 -`PA_FLAG_LONG_DOUBLE'
30209 - This is a synonym for `PA_FLAG_LONG_LONG', used by convention with
30210 - a base type of `PA_DOUBLE' to indicate a type of `long double'.
30212 - For an example of using these facilities, see *Note Example of
30213 -Parsing::.
30215 -\x1f
30216 -File: libc.info, Node: Example of Parsing, Prev: Parsing a Template String, Up: Formatted Output
30218 -Example of Parsing a Template String
30219 -------------------------------------
30221 - Here is an example of decoding argument types for a format string.
30222 -We assume this is part of an interpreter which contains arguments of
30223 -type `NUMBER', `CHAR', `STRING' and `STRUCTURE' (and perhaps others
30224 -which are not valid here).
30226 - /* Test whether the NARGS specified objects
30227 - in the vector ARGS are valid
30228 - for the format string FORMAT:
30229 - if so, return 1.
30230 - If not, return 0 after printing an error message. */
30232 - int
30233 - validate_args (char *format, int nargs, OBJECT *args)
30235 - int *argtypes;
30236 - int nwanted;
30238 - /* Get the information about the arguments.
30239 - Each conversion specification must be at least two characters
30240 - long, so there cannot be more specifications than half the
30241 - length of the string. */
30243 - argtypes = (int *) alloca (strlen (format) / 2 * sizeof (int));
30244 - nwanted = parse_printf_format (string, nelts, argtypes);
30246 - /* Check the number of arguments. */
30247 - if (nwanted > nargs)
30249 - error ("too few arguments (at least %d required)", nwanted);
30250 - return 0;
30253 - /* Check the C type wanted for each argument
30254 - and see if the object given is suitable. */
30255 - for (i = 0; i < nwanted; i++)
30257 - int wanted;
30259 - if (argtypes[i] & PA_FLAG_PTR)
30260 - wanted = STRUCTURE;
30261 - else
30262 - switch (argtypes[i] & ~PA_FLAG_MASK)
30264 - case PA_INT:
30265 - case PA_FLOAT:
30266 - case PA_DOUBLE:
30267 - wanted = NUMBER;
30268 - break;
30269 - case PA_CHAR:
30270 - wanted = CHAR;
30271 - break;
30272 - case PA_STRING:
30273 - wanted = STRING;
30274 - break;
30275 - case PA_POINTER:
30276 - wanted = STRUCTURE;
30277 - break;
30279 - if (TYPE (args[i]) != wanted)
30281 - error ("type mismatch for arg number %d", i);
30282 - return 0;
30285 - return 1;
30288 -\x1f
30289 -File: libc.info, Node: Customizing Printf, Next: Formatted Input, Prev: Formatted Output, Up: I/O on Streams
30291 -Customizing `printf'
30292 -====================
30294 - The GNU C library lets you define your own custom conversion
30295 -specifiers for `printf' template strings, to teach `printf' clever ways
30296 -to print the important data structures of your program.
30298 - The way you do this is by registering the conversion with the
30299 -function `register_printf_function'; see *Note Registering New
30300 -Conversions::. One of the arguments you pass to this function is a
30301 -pointer to a handler function that produces the actual output; see
30302 -*Note Defining the Output Handler::, for information on how to write
30303 -this function.
30305 - You can also install a function that just returns information about
30306 -the number and type of arguments expected by the conversion specifier.
30307 -*Note Parsing a Template String::, for information about this.
30309 - The facilities of this section are declared in the header file
30310 -`printf.h'.
30312 -* Menu:
30314 -* Registering New Conversions:: Using `register_printf_function'
30315 - to register a new output conversion.
30316 -* Conversion Specifier Options:: The handler must be able to get
30317 - the options specified in the
30318 - template when it is called.
30319 -* Defining the Output Handler:: Defining the handler and arginfo
30320 - functions that are passed as arguments
30321 - to `register_printf_function'.
30322 -* Printf Extension Example:: How to define a `printf'
30323 - handler function.
30324 -* Predefined Printf Handlers:: Predefined `printf' handlers.
30326 - *Portability Note:* The ability to extend the syntax of `printf'
30327 -template strings is a GNU extension. ISO standard C has nothing
30328 -similar.
30330 -\x1f
30331 -File: libc.info, Node: Registering New Conversions, Next: Conversion Specifier Options, Up: Customizing Printf
30333 -Registering New Conversions
30334 ----------------------------
30336 - The function to register a new output conversion is
30337 -`register_printf_function', declared in `printf.h'.
30339 - - Function: int register_printf_function (int SPEC, printf_function
30340 - HANDLER-FUNCTION, printf_arginfo_function ARGINFO-FUNCTION)
30341 - This function defines the conversion specifier character SPEC.
30342 - Thus, if SPEC is `'Y'', it defines the conversion `%Y'. You can
30343 - redefine the built-in conversions like `%s', but flag characters
30344 - like `#' and type modifiers like `l' can never be used as
30345 - conversions; calling `register_printf_function' for those
30346 - characters has no effect. It is advisable not to use lowercase
30347 - letters, since the ISO C standard warns that additional lowercase
30348 - letters may be standardized in future editions of the standard.
30350 - The HANDLER-FUNCTION is the function called by `printf' and
30351 - friends when this conversion appears in a template string. *Note
30352 - Defining the Output Handler::, for information about how to define
30353 - a function to pass as this argument. If you specify a null
30354 - pointer, any existing handler function for SPEC is removed.
30356 - The ARGINFO-FUNCTION is the function called by
30357 - `parse_printf_format' when this conversion appears in a template
30358 - string. *Note Parsing a Template String::, for information about
30359 - this.
30361 - *Attention:* In the GNU C library versions before 2.0 the
30362 - ARGINFO-FUNCTION function did not need to be installed unless the
30363 - user used the `parse_printf_format' function. This has changed.
30364 - Now a call to any of the `printf' functions will call this
30365 - function when this format specifier appears in the format string.
30367 - The return value is `0' on success, and `-1' on failure (which
30368 - occurs if SPEC is out of range).
30370 - You can redefine the standard output conversions, but this is
30371 - probably not a good idea because of the potential for confusion.
30372 - Library routines written by other people could break if you do
30373 - this.
30375 -\x1f
30376 -File: libc.info, Node: Conversion Specifier Options, Next: Defining the Output Handler, Prev: Registering New Conversions, Up: Customizing Printf
30378 -Conversion Specifier Options
30379 -----------------------------
30381 - If you define a meaning for `%A', what if the template contains
30382 -`%+23A' or `%-#A'? To implement a sensible meaning for these, the
30383 -handler when called needs to be able to get the options specified in
30384 -the template.
30386 - Both the HANDLER-FUNCTION and ARGINFO-FUNCTION accept an argument
30387 -that points to a `struct printf_info', which contains information about
30388 -the options appearing in an instance of the conversion specifier. This
30389 -data type is declared in the header file `printf.h'.
30391 - - Type: struct printf_info
30392 - This structure is used to pass information about the options
30393 - appearing in an instance of a conversion specifier in a `printf'
30394 - template string to the handler and arginfo functions for that
30395 - specifier. It contains the following members:
30397 - `int prec'
30398 - This is the precision specified. The value is `-1' if no
30399 - precision was specified. If the precision was given as `*',
30400 - the `printf_info' structure passed to the handler function
30401 - contains the actual value retrieved from the argument list.
30402 - But the structure passed to the arginfo function contains a
30403 - value of `INT_MIN', since the actual value is not known.
30405 - `int width'
30406 - This is the minimum field width specified. The value is `0'
30407 - if no width was specified. If the field width was given as
30408 - `*', the `printf_info' structure passed to the handler
30409 - function contains the actual value retrieved from the
30410 - argument list. But the structure passed to the arginfo
30411 - function contains a value of `INT_MIN', since the actual
30412 - value is not known.
30414 - `wchar_t spec'
30415 - This is the conversion specifier character specified. It's
30416 - stored in the structure so that you can register the same
30417 - handler function for multiple characters, but still have a
30418 - way to tell them apart when the handler function is called.
30420 - `unsigned int is_long_double'
30421 - This is a boolean that is true if the `L', `ll', or `q' type
30422 - modifier was specified. For integer conversions, this
30423 - indicates `long long int', as opposed to `long double' for
30424 - floating point conversions.
30426 - `unsigned int is_char'
30427 - This is a boolean that is true if the `hh' type modifier was
30428 - specified.
30430 - `unsigned int is_short'
30431 - This is a boolean that is true if the `h' type modifier was
30432 - specified.
30434 - `unsigned int is_long'
30435 - This is a boolean that is true if the `l' type modifier was
30436 - specified.
30438 - `unsigned int alt'
30439 - This is a boolean that is true if the `#' flag was specified.
30441 - `unsigned int space'
30442 - This is a boolean that is true if the ` ' flag was specified.
30444 - `unsigned int left'
30445 - This is a boolean that is true if the `-' flag was specified.
30447 - `unsigned int showsign'
30448 - This is a boolean that is true if the `+' flag was specified.
30450 - `unsigned int group'
30451 - This is a boolean that is true if the `'' flag was specified.
30453 - `unsigned int extra'
30454 - This flag has a special meaning depending on the context. It
30455 - could be used freely by the user-defined handlers but when
30456 - called from the `printf' function this variable always
30457 - contains the value `0'.
30459 - `unsigned int wide'
30460 - This flag is set if the stream is wide oriented.
30462 - `wchar_t pad'
30463 - This is the character to use for padding the output to the
30464 - minimum field width. The value is `'0'' if the `0' flag was
30465 - specified, and `' '' otherwise.
30467 -\x1f
30468 -File: libc.info, Node: Defining the Output Handler, Next: Printf Extension Example, Prev: Conversion Specifier Options, Up: Customizing Printf
30470 -Defining the Output Handler
30471 ----------------------------
30473 - Now let's look at how to define the handler and arginfo functions
30474 -which are passed as arguments to `register_printf_function'.
30476 - *Compatibility Note:* The interface changed in GNU libc version 2.0.
30477 -Previously the third argument was of type `va_list *'.
30479 - You should define your handler functions with a prototype like:
30481 - int FUNCTION (FILE *stream, const struct printf_info *info,
30482 - const void *const *args)
30484 - The STREAM argument passed to the handler function is the stream to
30485 -which it should write output.
30487 - The INFO argument is a pointer to a structure that contains
30488 -information about the various options that were included with the
30489 -conversion in the template string. You should not modify this structure
30490 -inside your handler function. *Note Conversion Specifier Options::, for
30491 -a description of this data structure.
30493 - The ARGS is a vector of pointers to the arguments data. The number
30494 -of arguments was determined by calling the argument information
30495 -function provided by the user.
30497 - Your handler function should return a value just like `printf' does:
30498 -it should return the number of characters it has written, or a negative
30499 -value to indicate an error.
30501 - - Data Type: printf_function
30502 - This is the data type that a handler function should have.
30504 - If you are going to use `parse_printf_format' in your application,
30505 -you must also define a function to pass as the ARGINFO-FUNCTION
30506 -argument for each new conversion you install with
30507 -`register_printf_function'.
30509 - You have to define these functions with a prototype like:
30511 - int FUNCTION (const struct printf_info *info,
30512 - size_t n, int *argtypes)
30514 - The return value from the function should be the number of arguments
30515 -the conversion expects. The function should also fill in no more than
30516 -N elements of the ARGTYPES array with information about the types of
30517 -each of these arguments. This information is encoded using the various
30518 -`PA_' macros. (You will notice that this is the same calling
30519 -convention `parse_printf_format' itself uses.)
30521 - - Data Type: printf_arginfo_function
30522 - This type is used to describe functions that return information
30523 - about the number and type of arguments used by a conversion
30524 - specifier.
30526 diff -u -udbrN glibc-2.3.2/manual/libc.info-19 glibc-2.3.2-200304020432/manual/libc.info-19
30527 --- glibc-2.3.2/manual/libc.info-19 Sat Mar 1 02:39:41 2003
30528 +++ glibc-2.3.2-200304020432/manual/libc.info-19 Thu Jan 1 01:00:00 1970
30529 @@ -1,1181 +0,0 @@
30530 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
30532 -INFO-DIR-SECTION GNU libraries
30533 -START-INFO-DIR-ENTRY
30534 -* Libc: (libc). C library.
30535 -END-INFO-DIR-ENTRY
30537 - This file documents the GNU C library.
30539 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
30540 -Reference Manual', for Version 2.3.x.
30542 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
30543 -Free Software Foundation, Inc.
30545 - Permission is granted to copy, distribute and/or modify this document
30546 -under the terms of the GNU Free Documentation License, Version 1.1 or
30547 -any later version published by the Free Software Foundation; with the
30548 -Invariant Sections being "Free Software Needs Free Documentation" and
30549 -"GNU Lesser General Public License", the Front-Cover texts being (a)
30550 -(see below), and with the Back-Cover Texts being (b) (see below). A
30551 -copy of the license is included in the section entitled "GNU Free
30552 -Documentation License".
30554 - (a) The FSF's Front-Cover Text is:
30556 - A GNU Manual
30558 - (b) The FSF's Back-Cover Text is:
30560 - You have freedom to copy and modify this GNU Manual, like GNU
30561 -software. Copies published by the Free Software Foundation raise
30562 -funds for GNU development.
30564 -\x1f
30565 -File: libc.info, Node: Printf Extension Example, Next: Predefined Printf Handlers, Prev: Defining the Output Handler, Up: Customizing Printf
30567 -`printf' Extension Example
30568 ---------------------------
30570 - Here is an example showing how to define a `printf' handler function.
30571 -This program defines a data structure called a `Widget' and defines the
30572 -`%W' conversion to print information about `Widget *' arguments,
30573 -including the pointer value and the name stored in the data structure.
30574 -The `%W' conversion supports the minimum field width and
30575 -left-justification options, but ignores everything else.
30577 - #include <stdio.h>
30578 - #include <stdlib.h>
30579 - #include <printf.h>
30581 - typedef struct
30583 - char *name;
30585 - Widget;
30587 - int
30588 - print_widget (FILE *stream,
30589 - const struct printf_info *info,
30590 - const void *const *args)
30592 - const Widget *w;
30593 - char *buffer;
30594 - int len;
30596 - /* Format the output into a string. */
30597 - w = *((const Widget **) (args[0]));
30598 - len = asprintf (&buffer, "<Widget %p: %s>", w, w->name);
30599 - if (len == -1)
30600 - return -1;
30602 - /* Pad to the minimum field width and print to the stream. */
30603 - len = fprintf (stream, "%*s",
30604 - (info->left ? -info->width : info->width),
30605 - buffer);
30607 - /* Clean up and return. */
30608 - free (buffer);
30609 - return len;
30613 - int
30614 - print_widget_arginfo (const struct printf_info *info, size_t n,
30615 - int *argtypes)
30617 - /* We always take exactly one argument and this is a pointer to the
30618 - structure.. */
30619 - if (n > 0)
30620 - argtypes[0] = PA_POINTER;
30621 - return 1;
30625 - int
30626 - main (void)
30628 - /* Make a widget to print. */
30629 - Widget mywidget;
30630 - mywidget.name = "mywidget";
30632 - /* Register the print function for widgets. */
30633 - register_printf_function ('W', print_widget, print_widget_arginfo);
30635 - /* Now print the widget. */
30636 - printf ("|%W|\n", &mywidget);
30637 - printf ("|%35W|\n", &mywidget);
30638 - printf ("|%-35W|\n", &mywidget);
30640 - return 0;
30643 - The output produced by this program looks like:
30645 - |<Widget 0xffeffb7c: mywidget>|
30646 - | <Widget 0xffeffb7c: mywidget>|
30647 - |<Widget 0xffeffb7c: mywidget> |
30649 -\x1f
30650 -File: libc.info, Node: Predefined Printf Handlers, Prev: Printf Extension Example, Up: Customizing Printf
30652 -Predefined `printf' Handlers
30653 -----------------------------
30655 - The GNU libc also contains a concrete and useful application of the
30656 -`printf' handler extension. There are two functions available which
30657 -implement a special way to print floating-point numbers.
30659 - - Function: int printf_size (FILE *FP, const struct printf_info *INFO,
30660 - const void *const *ARGS)
30661 - Print a given floating point number as for the format `%f' except
30662 - that there is a postfix character indicating the divisor for the
30663 - number to make this less than 1000. There are two possible
30664 - divisors: powers of 1024 or powers of 1000. Which one is used
30665 - depends on the format character specified while registered this
30666 - handler. If the character is of lower case, 1024 is used. For
30667 - upper case characters, 1000 is used.
30669 - The postfix tag corresponds to bytes, kilobytes, megabytes,
30670 - gigabytes, etc. The full table is:
30672 - +------+--------------+--------+--------+---------------+
30673 - |low|Multiplier|From|Upper|Multiplier|
30674 - +------+--------------+--------+--------+---------------+
30675 - |' '|1||' '|1|
30676 - +------+--------------+--------+--------+---------------+
30677 - |k|2^10 (1024)|kilo|K|10^3 (1000)|
30678 - +------+--------------+--------+--------+---------------+
30679 - |m|2^20|mega|M|10^6|
30680 - +------+--------------+--------+--------+---------------+
30681 - |g|2^30|giga|G|10^9|
30682 - +------+--------------+--------+--------+---------------+
30683 - |t|2^40|tera|T|10^12|
30684 - +------+--------------+--------+--------+---------------+
30685 - |p|2^50|peta|P|10^15|
30686 - +------+--------------+--------+--------+---------------+
30687 - |e|2^60|exa|E|10^18|
30688 - +------+--------------+--------+--------+---------------+
30689 - |z|2^70|zetta|Z|10^21|
30690 - +------+--------------+--------+--------+---------------+
30691 - |y|2^80|yotta|Y|10^24|
30692 - +------+--------------+--------+--------+---------------+
30694 - The default precision is 3, i.e., 1024 is printed with a lower-case
30695 - format character as if it were `%.3fk' and will yield `1.000k'.
30697 - Due to the requirements of `register_printf_function' we must also
30698 -provide the function which returns information about the arguments.
30700 - - Function: int printf_size_info (const struct printf_info *INFO,
30701 - size_t N, int *ARGTYPES)
30702 - This function will return in ARGTYPES the information about the
30703 - used parameters in the way the `vfprintf' implementation expects
30704 - it. The format always takes one argument.
30706 - To use these functions both functions must be registered with a call
30707 -like
30709 - register_printf_function ('B', printf_size, printf_size_info);
30711 - Here we register the functions to print numbers as powers of 1000
30712 -since the format character `'B'' is an upper-case character. If we
30713 -would additionally use `'b'' in a line like
30715 - register_printf_function ('b', printf_size, printf_size_info);
30717 -we could also print using a power of 1024. Please note that all that is
30718 -different in these two lines is the format specifier. The
30719 -`printf_size' function knows about the difference between lower and
30720 -upper case format specifiers.
30722 - The use of `'B'' and `'b'' is no coincidence. Rather it is the
30723 -preferred way to use this functionality since it is available on some
30724 -other systems which also use format specifiers.
30726 -\x1f
30727 -File: libc.info, Node: Formatted Input, Next: EOF and Errors, Prev: Customizing Printf, Up: I/O on Streams
30729 -Formatted Input
30730 -===============
30732 - The functions described in this section (`scanf' and related
30733 -functions) provide facilities for formatted input analogous to the
30734 -formatted output facilities. These functions provide a mechanism for
30735 -reading arbitrary values under the control of a "format string" or
30736 -"template string".
30738 -* Menu:
30740 -* Formatted Input Basics:: Some basics to get you started.
30741 -* Input Conversion Syntax:: Syntax of conversion specifications.
30742 -* Table of Input Conversions:: Summary of input conversions and what they do.
30743 -* Numeric Input Conversions:: Details of conversions for reading numbers.
30744 -* String Input Conversions:: Details of conversions for reading strings.
30745 -* Dynamic String Input:: String conversions that `malloc' the buffer.
30746 -* Other Input Conversions:: Details of miscellaneous other conversions.
30747 -* Formatted Input Functions:: Descriptions of the actual functions.
30748 -* Variable Arguments Input:: `vscanf' and friends.
30750 -\x1f
30751 -File: libc.info, Node: Formatted Input Basics, Next: Input Conversion Syntax, Up: Formatted Input
30753 -Formatted Input Basics
30754 -----------------------
30756 - Calls to `scanf' are superficially similar to calls to `printf' in
30757 -that arbitrary arguments are read under the control of a template
30758 -string. While the syntax of the conversion specifications in the
30759 -template is very similar to that for `printf', the interpretation of
30760 -the template is oriented more towards free-format input and simple
30761 -pattern matching, rather than fixed-field formatting. For example,
30762 -most `scanf' conversions skip over any amount of "white space"
30763 -(including spaces, tabs, and newlines) in the input file, and there is
30764 -no concept of precision for the numeric input conversions as there is
30765 -for the corresponding output conversions. Ordinarily, non-whitespace
30766 -characters in the template are expected to match characters in the
30767 -input stream exactly, but a matching failure is distinct from an input
30768 -error on the stream.
30770 - Another area of difference between `scanf' and `printf' is that you
30771 -must remember to supply pointers rather than immediate values as the
30772 -optional arguments to `scanf'; the values that are read are stored in
30773 -the objects that the pointers point to. Even experienced programmers
30774 -tend to forget this occasionally, so if your program is getting strange
30775 -errors that seem to be related to `scanf', you might want to
30776 -double-check this.
30778 - When a "matching failure" occurs, `scanf' returns immediately,
30779 -leaving the first non-matching character as the next character to be
30780 -read from the stream. The normal return value from `scanf' is the
30781 -number of values that were assigned, so you can use this to determine if
30782 -a matching error happened before all the expected values were read.
30784 - The `scanf' function is typically used for things like reading in
30785 -the contents of tables. For example, here is a function that uses
30786 -`scanf' to initialize an array of `double':
30788 - void
30789 - readarray (double *array, int n)
30791 - int i;
30792 - for (i=0; i<n; i++)
30793 - if (scanf (" %lf", &(array[i])) != 1)
30794 - invalid_input_error ();
30797 - The formatted input functions are not used as frequently as the
30798 -formatted output functions. Partly, this is because it takes some care
30799 -to use them properly. Another reason is that it is difficult to recover
30800 -from a matching error.
30802 - If you are trying to read input that doesn't match a single, fixed
30803 -pattern, you may be better off using a tool such as Flex to generate a
30804 -lexical scanner, or Bison to generate a parser, rather than using
30805 -`scanf'. For more information about these tools, see *Note Top:
30806 -(flex.info)Top, and *Note Top: (bison.info)Top.
30808 -\x1f
30809 -File: libc.info, Node: Input Conversion Syntax, Next: Table of Input Conversions, Prev: Formatted Input Basics, Up: Formatted Input
30811 -Input Conversion Syntax
30812 ------------------------
30814 - A `scanf' template string is a string that contains ordinary
30815 -multibyte characters interspersed with conversion specifications that
30816 -start with `%'.
30818 - Any whitespace character (as defined by the `isspace' function;
30819 -*note Classification of Characters::) in the template causes any number
30820 -of whitespace characters in the input stream to be read and discarded.
30821 -The whitespace characters that are matched need not be exactly the same
30822 -whitespace characters that appear in the template string. For example,
30823 -write ` , ' in the template to recognize a comma with optional
30824 -whitespace before and after.
30826 - Other characters in the template string that are not part of
30827 -conversion specifications must match characters in the input stream
30828 -exactly; if this is not the case, a matching failure occurs.
30830 - The conversion specifications in a `scanf' template string have the
30831 -general form:
30833 - % FLAGS WIDTH TYPE CONVERSION
30835 - In more detail, an input conversion specification consists of an
30836 -initial `%' character followed in sequence by:
30838 - * An optional "flag character" `*', which says to ignore the text
30839 - read for this specification. When `scanf' finds a conversion
30840 - specification that uses this flag, it reads input as directed by
30841 - the rest of the conversion specification, but it discards this
30842 - input, does not use a pointer argument, and does not increment the
30843 - count of successful assignments.
30845 - * An optional flag character `a' (valid with string conversions only)
30846 - which requests allocation of a buffer long enough to store the
30847 - string in. (This is a GNU extension.) *Note Dynamic String
30848 - Input::.
30850 - * An optional decimal integer that specifies the "maximum field
30851 - width". Reading of characters from the input stream stops either
30852 - when this maximum is reached or when a non-matching character is
30853 - found, whichever happens first. Most conversions discard initial
30854 - whitespace characters (those that don't are explicitly
30855 - documented), and these discarded characters don't count towards
30856 - the maximum field width. String input conversions store a null
30857 - character to mark the end of the input; the maximum field width
30858 - does not include this terminator.
30860 - * An optional "type modifier character". For example, you can
30861 - specify a type modifier of `l' with integer conversions such as
30862 - `%d' to specify that the argument is a pointer to a `long int'
30863 - rather than a pointer to an `int'.
30865 - * A character that specifies the conversion to be applied.
30867 - The exact options that are permitted and how they are interpreted
30868 -vary between the different conversion specifiers. See the descriptions
30869 -of the individual conversions for information about the particular
30870 -options that they allow.
30872 - With the `-Wformat' option, the GNU C compiler checks calls to
30873 -`scanf' and related functions. It examines the format string and
30874 -verifies that the correct number and types of arguments are supplied.
30875 -There is also a GNU C syntax to tell the compiler that a function you
30876 -write uses a `scanf'-style format string. *Note Declaring Attributes
30877 -of Functions: (gcc.info)Function Attributes, for more information.
30879 -\x1f
30880 -File: libc.info, Node: Table of Input Conversions, Next: Numeric Input Conversions, Prev: Input Conversion Syntax, Up: Formatted Input
30882 -Table of Input Conversions
30883 ---------------------------
30885 - Here is a table that summarizes the various conversion
30886 -specifications:
30888 -`%d'
30889 - Matches an optionally signed integer written in decimal. *Note
30890 - Numeric Input Conversions::.
30892 -`%i'
30893 - Matches an optionally signed integer in any of the formats that
30894 - the C language defines for specifying an integer constant. *Note
30895 - Numeric Input Conversions::.
30897 -`%o'
30898 - Matches an unsigned integer written in octal radix. *Note Numeric
30899 - Input Conversions::.
30901 -`%u'
30902 - Matches an unsigned integer written in decimal radix. *Note
30903 - Numeric Input Conversions::.
30905 -`%x', `%X'
30906 - Matches an unsigned integer written in hexadecimal radix. *Note
30907 - Numeric Input Conversions::.
30909 -`%e', `%f', `%g', `%E', `%G'
30910 - Matches an optionally signed floating-point number. *Note Numeric
30911 - Input Conversions::.
30913 -`%s'
30914 - Matches a string containing only non-whitespace characters. *Note
30915 - String Input Conversions::. The presence of the `l' modifier
30916 - determines whether the output is stored as a wide character string
30917 - or a multibyte string. If `%s' is used in a wide character
30918 - function the string is converted as with multiple calls to
30919 - `wcrtomb' into a multibyte string. This means that the buffer
30920 - must provide room for `MB_CUR_MAX' bytes for each wide character
30921 - read. In case `%ls' is used in a multibyte function the result is
30922 - converted into wide characters as with multiple calls of `mbrtowc'
30923 - before being stored in the user provided buffer.
30925 -`%S'
30926 - This is an alias for `%ls' which is supported for compatibility
30927 - with the Unix standard.
30929 -`%['
30930 - Matches a string of characters that belong to a specified set.
30931 - *Note String Input Conversions::. The presence of the `l' modifier
30932 - determines whether the output is stored as a wide character string
30933 - or a multibyte string. If `%[' is used in a wide character
30934 - function the string is converted as with multiple calls to
30935 - `wcrtomb' into a multibyte string. This means that the buffer
30936 - must provide room for `MB_CUR_MAX' bytes for each wide character
30937 - read. In case `%l[' is used in a multibyte function the result is
30938 - converted into wide characters as with multiple calls of `mbrtowc'
30939 - before being stored in the user provided buffer.
30941 -`%c'
30942 - Matches a string of one or more characters; the number of
30943 - characters read is controlled by the maximum field width given for
30944 - the conversion. *Note String Input Conversions::.
30946 - If the `%c' is used in a wide stream function the read value is
30947 - converted from a wide character to the corresponding multibyte
30948 - character before storing it. Note that this conversion can
30949 - produce more than one byte of output and therefore the provided
30950 - buffer be large enough for up to `MB_CUR_MAX' bytes for each
30951 - character. If `%lc' is used in a multibyte function the input is
30952 - treated as a multibyte sequence (and not bytes) and the result is
30953 - converted as with calls to `mbrtowc'.
30955 -`%C'
30956 - This is an alias for `%lc' which is supported for compatibility
30957 - with the Unix standard.
30959 -`%p'
30960 - Matches a pointer value in the same implementation-defined format
30961 - used by the `%p' output conversion for `printf'. *Note Other
30962 - Input Conversions::.
30964 -`%n'
30965 - This conversion doesn't read any characters; it records the number
30966 - of characters read so far by this call. *Note Other Input
30967 - Conversions::.
30969 -`%%'
30970 - This matches a literal `%' character in the input stream. No
30971 - corresponding argument is used. *Note Other Input Conversions::.
30973 - If the syntax of a conversion specification is invalid, the behavior
30974 -is undefined. If there aren't enough function arguments provided to
30975 -supply addresses for all the conversion specifications in the template
30976 -strings that perform assignments, or if the arguments are not of the
30977 -correct types, the behavior is also undefined. On the other hand, extra
30978 -arguments are simply ignored.
30980 -\x1f
30981 -File: libc.info, Node: Numeric Input Conversions, Next: String Input Conversions, Prev: Table of Input Conversions, Up: Formatted Input
30983 -Numeric Input Conversions
30984 --------------------------
30986 - This section describes the `scanf' conversions for reading numeric
30987 -values.
30989 - The `%d' conversion matches an optionally signed integer in decimal
30990 -radix. The syntax that is recognized is the same as that for the
30991 -`strtol' function (*note Parsing of Integers::) with the value `10' for
30992 -the BASE argument.
30994 - The `%i' conversion matches an optionally signed integer in any of
30995 -the formats that the C language defines for specifying an integer
30996 -constant. The syntax that is recognized is the same as that for the
30997 -`strtol' function (*note Parsing of Integers::) with the value `0' for
30998 -the BASE argument. (You can print integers in this syntax with
30999 -`printf' by using the `#' flag character with the `%x', `%o', or `%d'
31000 -conversion. *Note Integer Conversions::.)
31002 - For example, any of the strings `10', `0xa', or `012' could be read
31003 -in as integers under the `%i' conversion. Each of these specifies a
31004 -number with decimal value `10'.
31006 - The `%o', `%u', and `%x' conversions match unsigned integers in
31007 -octal, decimal, and hexadecimal radices, respectively. The syntax that
31008 -is recognized is the same as that for the `strtoul' function (*note
31009 -Parsing of Integers::) with the appropriate value (`8', `10', or `16')
31010 -for the BASE argument.
31012 - The `%X' conversion is identical to the `%x' conversion. They both
31013 -permit either uppercase or lowercase letters to be used as digits.
31015 - The default type of the corresponding argument for the `%d' and `%i'
31016 -conversions is `int *', and `unsigned int *' for the other integer
31017 -conversions. You can use the following type modifiers to specify other
31018 -sizes of integer:
31020 -`hh'
31021 - Specifies that the argument is a `signed char *' or `unsigned char
31022 - *'.
31024 - This modifier was introduced in ISO C99.
31026 -`h'
31027 - Specifies that the argument is a `short int *' or `unsigned short
31028 - int *'.
31030 -`j'
31031 - Specifies that the argument is a `intmax_t *' or `uintmax_t *'.
31033 - This modifier was introduced in ISO C99.
31035 -`l'
31036 - Specifies that the argument is a `long int *' or `unsigned long
31037 - int *'. Two `l' characters is like the `L' modifier, below.
31039 - If used with `%c' or `%s' the corresponding parameter is
31040 - considered as a pointer to a wide character or wide character
31041 - string respectively. This use of `l' was introduced in
31042 - Amendment 1 to ISO C90.
31044 -`ll'
31045 -`L'
31046 -`q'
31047 - Specifies that the argument is a `long long int *' or `unsigned
31048 - long long int *'. (The `long long' type is an extension supported
31049 - by the GNU C compiler. For systems that don't provide extra-long
31050 - integers, this is the same as `long int'.)
31052 - The `q' modifier is another name for the same thing, which comes
31053 - from 4.4 BSD; a `long long int' is sometimes called a "quad" `int'.
31055 -`t'
31056 - Specifies that the argument is a `ptrdiff_t *'.
31058 - This modifier was introduced in ISO C99.
31060 -`z'
31061 - Specifies that the argument is a `size_t *'.
31063 - This modifier was introduced in ISO C99.
31065 - All of the `%e', `%f', `%g', `%E', and `%G' input conversions are
31066 -interchangeable. They all match an optionally signed floating point
31067 -number, in the same syntax as for the `strtod' function (*note Parsing
31068 -of Floats::).
31070 - For the floating-point input conversions, the default argument type
31071 -is `float *'. (This is different from the corresponding output
31072 -conversions, where the default type is `double'; remember that `float'
31073 -arguments to `printf' are converted to `double' by the default argument
31074 -promotions, but `float *' arguments are not promoted to `double *'.)
31075 -You can specify other sizes of float using these type modifiers:
31077 -`l'
31078 - Specifies that the argument is of type `double *'.
31080 -`L'
31081 - Specifies that the argument is of type `long double *'.
31083 - For all the above number parsing formats there is an additional
31084 -optional flag `''. When this flag is given the `scanf' function
31085 -expects the number represented in the input string to be formatted
31086 -according to the grouping rules of the currently selected locale (*note
31087 -General Numeric::).
31089 - If the `"C"' or `"POSIX"' locale is selected there is no difference.
31090 -But for a locale which specifies values for the appropriate fields in
31091 -the locale the input must have the correct form in the input.
31092 -Otherwise the longest prefix with a correct form is processed.
31094 -\x1f
31095 -File: libc.info, Node: String Input Conversions, Next: Dynamic String Input, Prev: Numeric Input Conversions, Up: Formatted Input
31097 -String Input Conversions
31098 -------------------------
31100 - This section describes the `scanf' input conversions for reading
31101 -string and character values: `%s', `%S', `%[', `%c', and `%C'.
31103 - You have two options for how to receive the input from these
31104 -conversions:
31106 - * Provide a buffer to store it in. This is the default. You should
31107 - provide an argument of type `char *' or `wchar_t *' (the latter of
31108 - the `l' modifier is present).
31110 - *Warning:* To make a robust program, you must make sure that the
31111 - input (plus its terminating null) cannot possibly exceed the size
31112 - of the buffer you provide. In general, the only way to do this is
31113 - to specify a maximum field width one less than the buffer size.
31114 - *If you provide the buffer, always specify a maximum field width
31115 - to prevent overflow.*
31117 - * Ask `scanf' to allocate a big enough buffer, by specifying the `a'
31118 - flag character. This is a GNU extension. You should provide an
31119 - argument of type `char **' for the buffer address to be stored in.
31120 - *Note Dynamic String Input::.
31122 - The `%c' conversion is the simplest: it matches a fixed number of
31123 -characters, always. The maximum field width says how many characters to
31124 -read; if you don't specify the maximum, the default is 1. This
31125 -conversion doesn't append a null character to the end of the text it
31126 -reads. It also does not skip over initial whitespace characters. It
31127 -reads precisely the next N characters, and fails if it cannot get that
31128 -many. Since there is always a maximum field width with `%c' (whether
31129 -specified, or 1 by default), you can always prevent overflow by making
31130 -the buffer long enough.
31132 - If the format is `%lc' or `%C' the function stores wide characters
31133 -which are converted using the conversion determined at the time the
31134 -stream was opened from the external byte stream. The number of bytes
31135 -read from the medium is limited by `MB_CUR_LEN * N' but at most N wide
31136 -character get stored in the output string.
31138 - The `%s' conversion matches a string of non-whitespace characters.
31139 -It skips and discards initial whitespace, but stops when it encounters
31140 -more whitespace after having read something. It stores a null character
31141 -at the end of the text that it reads.
31143 - For example, reading the input:
31145 - hello, world
31147 -with the conversion `%10c' produces `" hello, wo"', but reading the
31148 -same input with the conversion `%10s' produces `"hello,"'.
31150 - *Warning:* If you do not specify a field width for `%s', then the
31151 -number of characters read is limited only by where the next whitespace
31152 -character appears. This almost certainly means that invalid input can
31153 -make your program crash--which is a bug.
31155 - The `%ls' and `%S' format are handled just like `%s' except that the
31156 -external byte sequence is converted using the conversion associated
31157 -with the stream to wide characters with their own encoding. A width or
31158 -precision specified with the format do not directly determine how many
31159 -bytes are read from the stream since they measure wide characters. But
31160 -an upper limit can be computed by multiplying the value of the width or
31161 -precision by `MB_CUR_MAX'.
31163 - To read in characters that belong to an arbitrary set of your choice,
31164 -use the `%[' conversion. You specify the set between the `[' character
31165 -and a following `]' character, using the same syntax used in regular
31166 -expressions. As special cases:
31168 - * A literal `]' character can be specified as the first character of
31169 - the set.
31171 - * An embedded `-' character (that is, one that is not the first or
31172 - last character of the set) is used to specify a range of
31173 - characters.
31175 - * If a caret character `^' immediately follows the initial `[', then
31176 - the set of allowed input characters is the everything _except_ the
31177 - characters listed.
31179 - The `%[' conversion does not skip over initial whitespace characters.
31181 - Here are some examples of `%[' conversions and what they mean:
31183 -`%25[1234567890]'
31184 - Matches a string of up to 25 digits.
31186 -`%25[][]'
31187 - Matches a string of up to 25 square brackets.
31189 -`%25[^ \f\n\r\t\v]'
31190 - Matches a string up to 25 characters long that doesn't contain any
31191 - of the standard whitespace characters. This is slightly different
31192 - from `%s', because if the input begins with a whitespace character,
31193 - `%[' reports a matching failure while `%s' simply discards the
31194 - initial whitespace.
31196 -`%25[a-z]'
31197 - Matches up to 25 lowercase characters.
31199 - As for `%c' and `%s' the `%[' format is also modified to produce
31200 -wide characters if the `l' modifier is present. All what is said about
31201 -`%ls' above is true for `%l['.
31203 - One more reminder: the `%s' and `%[' conversions are *dangerous* if
31204 -you don't specify a maximum width or use the `a' flag, because input
31205 -too long would overflow whatever buffer you have provided for it. No
31206 -matter how long your buffer is, a user could supply input that is
31207 -longer. A well-written program reports invalid input with a
31208 -comprehensible error message, not with a crash.
31210 -\x1f
31211 -File: libc.info, Node: Dynamic String Input, Next: Other Input Conversions, Prev: String Input Conversions, Up: Formatted Input
31213 -Dynamically Allocating String Conversions
31214 ------------------------------------------
31216 - A GNU extension to formatted input lets you safely read a string
31217 -with no maximum size. Using this feature, you don't supply a buffer;
31218 -instead, `scanf' allocates a buffer big enough to hold the data and
31219 -gives you its address. To use this feature, write `a' as a flag
31220 -character, as in `%as' or `%a[0-9a-z]'.
31222 - The pointer argument you supply for where to store the input should
31223 -have type `char **'. The `scanf' function allocates a buffer and
31224 -stores its address in the word that the argument points to. You should
31225 -free the buffer with `free' when you no longer need it.
31227 - Here is an example of using the `a' flag with the `%[...]'
31228 -conversion specification to read a "variable assignment" of the form
31229 -`VARIABLE = VALUE'.
31232 - char *variable, *value;
31234 - if (2 > scanf ("%a[a-zA-Z0-9] = %a[^\n]\n",
31235 - &variable, &value))
31237 - invalid_input_error ();
31238 - return 0;
31241 - ...
31244 -\x1f
31245 -File: libc.info, Node: Other Input Conversions, Next: Formatted Input Functions, Prev: Dynamic String Input, Up: Formatted Input
31247 -Other Input Conversions
31248 ------------------------
31250 - This section describes the miscellaneous input conversions.
31252 - The `%p' conversion is used to read a pointer value. It recognizes
31253 -the same syntax used by the `%p' output conversion for `printf' (*note
31254 -Other Output Conversions::); that is, a hexadecimal number just as the
31255 -`%x' conversion accepts. The corresponding argument should be of type
31256 -`void **'; that is, the address of a place to store a pointer.
31258 - The resulting pointer value is not guaranteed to be valid if it was
31259 -not originally written during the same program execution that reads it
31260 -in.
31262 - The `%n' conversion produces the number of characters read so far by
31263 -this call. The corresponding argument should be of type `int *'. This
31264 -conversion works in the same way as the `%n' conversion for `printf';
31265 -see *Note Other Output Conversions::, for an example.
31267 - The `%n' conversion is the only mechanism for determining the
31268 -success of literal matches or conversions with suppressed assignments.
31269 -If the `%n' follows the locus of a matching failure, then no value is
31270 -stored for it since `scanf' returns before processing the `%n'. If you
31271 -store `-1' in that argument slot before calling `scanf', the presence
31272 -of `-1' after `scanf' indicates an error occurred before the `%n' was
31273 -reached.
31275 - Finally, the `%%' conversion matches a literal `%' character in the
31276 -input stream, without using an argument. This conversion does not
31277 -permit any flags, field width, or type modifier to be specified.
31279 -\x1f
31280 -File: libc.info, Node: Formatted Input Functions, Next: Variable Arguments Input, Prev: Other Input Conversions, Up: Formatted Input
31282 -Formatted Input Functions
31283 --------------------------
31285 - Here are the descriptions of the functions for performing formatted
31286 -input. Prototypes for these functions are in the header file `stdio.h'.
31288 - - Function: int scanf (const char *TEMPLATE, ...)
31289 - The `scanf' function reads formatted input from the stream `stdin'
31290 - under the control of the template string TEMPLATE. The optional
31291 - arguments are pointers to the places which receive the resulting
31292 - values.
31294 - The return value is normally the number of successful assignments.
31295 - If an end-of-file condition is detected before any matches are
31296 - performed, including matches against whitespace and literal
31297 - characters in the template, then `EOF' is returned.
31299 - - Function: int wscanf (const wchar_t *TEMPLATE, ...)
31300 - The `wscanf' function reads formatted input from the stream
31301 - `stdin' under the control of the template string TEMPLATE. The
31302 - optional arguments are pointers to the places which receive the
31303 - resulting values.
31305 - The return value is normally the number of successful assignments.
31306 - If an end-of-file condition is detected before any matches are
31307 - performed, including matches against whitespace and literal
31308 - characters in the template, then `WEOF' is returned.
31310 - - Function: int fscanf (FILE *STREAM, const char *TEMPLATE, ...)
31311 - This function is just like `scanf', except that the input is read
31312 - from the stream STREAM instead of `stdin'.
31314 - - Function: int fwscanf (FILE *STREAM, const wchar_t *TEMPLATE, ...)
31315 - This function is just like `wscanf', except that the input is read
31316 - from the stream STREAM instead of `stdin'.
31318 - - Function: int sscanf (const char *S, const char *TEMPLATE, ...)
31319 - This is like `scanf', except that the characters are taken from the
31320 - null-terminated string S instead of from a stream. Reaching the
31321 - end of the string is treated as an end-of-file condition.
31323 - The behavior of this function is undefined if copying takes place
31324 - between objects that overlap--for example, if S is also given as
31325 - an argument to receive a string read under control of the `%s',
31326 - `%S', or `%[' conversion.
31328 - - Function: int swscanf (const wchar_t *WS, const char *TEMPLATE, ...)
31329 - This is like `wscanf', except that the characters are taken from
31330 - the null-terminated string WS instead of from a stream. Reaching
31331 - the end of the string is treated as an end-of-file condition.
31333 - The behavior of this function is undefined if copying takes place
31334 - between objects that overlap--for example, if WS is also given as
31335 - an argument to receive a string read under control of the `%s',
31336 - `%S', or `%[' conversion.
31338 -\x1f
31339 -File: libc.info, Node: Variable Arguments Input, Prev: Formatted Input Functions, Up: Formatted Input
31341 -Variable Arguments Input Functions
31342 -----------------------------------
31344 - The functions `vscanf' and friends are provided so that you can
31345 -define your own variadic `scanf'-like functions that make use of the
31346 -same internals as the built-in formatted output functions. These
31347 -functions are analogous to the `vprintf' series of output functions.
31348 -*Note Variable Arguments Output::, for important information on how to
31349 -use them.
31351 - *Portability Note:* The functions listed in this section were
31352 -introduced in ISO C99 and were before available as GNU extensions.
31354 - - Function: int vscanf (const char *TEMPLATE, va_list AP)
31355 - This function is similar to `scanf', but instead of taking a
31356 - variable number of arguments directly, it takes an argument list
31357 - pointer AP of type `va_list' (*note Variadic Functions::).
31359 - - Function: int vwscanf (const wchar_t *TEMPLATE, va_list AP)
31360 - This function is similar to `wscanf', but instead of taking a
31361 - variable number of arguments directly, it takes an argument list
31362 - pointer AP of type `va_list' (*note Variadic Functions::).
31364 - - Function: int vfscanf (FILE *STREAM, const char *TEMPLATE, va_list
31365 - AP)
31366 - This is the equivalent of `fscanf' with the variable argument list
31367 - specified directly as for `vscanf'.
31369 - - Function: int vfwscanf (FILE *STREAM, const wchar_t *TEMPLATE,
31370 - va_list AP)
31371 - This is the equivalent of `fwscanf' with the variable argument list
31372 - specified directly as for `vwscanf'.
31374 - - Function: int vsscanf (const char *S, const char *TEMPLATE, va_list
31375 - AP)
31376 - This is the equivalent of `sscanf' with the variable argument list
31377 - specified directly as for `vscanf'.
31379 - - Function: int vswscanf (const wchar_t *S, const wchar_t *TEMPLATE,
31380 - va_list AP)
31381 - This is the equivalent of `swscanf' with the variable argument list
31382 - specified directly as for `vwscanf'.
31384 - In GNU C, there is a special construct you can use to let the
31385 -compiler know that a function uses a `scanf'-style format string. Then
31386 -it can check the number and types of arguments in each call to the
31387 -function, and warn you when they do not match the format string. For
31388 -details, *Note Declaring Attributes of Functions: (gcc.info)Function
31389 -Attributes.
31391 -\x1f
31392 -File: libc.info, Node: EOF and Errors, Next: Error Recovery, Prev: Formatted Input, Up: I/O on Streams
31394 -End-Of-File and Errors
31395 -======================
31397 - Many of the functions described in this chapter return the value of
31398 -the macro `EOF' to indicate unsuccessful completion of the operation.
31399 -Since `EOF' is used to report both end of file and random errors, it's
31400 -often better to use the `feof' function to check explicitly for end of
31401 -file and `ferror' to check for errors. These functions check
31402 -indicators that are part of the internal state of the stream object,
31403 -indicators set if the appropriate condition was detected by a previous
31404 -I/O operation on that stream.
31406 - - Macro: int EOF
31407 - This macro is an integer value that is returned by a number of
31408 - narrow stream functions to indicate an end-of-file condition, or
31409 - some other error situation. With the GNU library, `EOF' is `-1'.
31410 - In other libraries, its value may be some other negative number.
31412 - This symbol is declared in `stdio.h'.
31414 - - Macro: int WEOF
31415 - This macro is an integer value that is returned by a number of wide
31416 - stream functions to indicate an end-of-file condition, or some
31417 - other error situation. With the GNU library, `WEOF' is `-1'. In
31418 - other libraries, its value may be some other negative number.
31420 - This symbol is declared in `wchar.h'.
31422 - - Function: int feof (FILE *STREAM)
31423 - The `feof' function returns nonzero if and only if the end-of-file
31424 - indicator for the stream STREAM is set.
31426 - This symbol is declared in `stdio.h'.
31428 - - Function: int feof_unlocked (FILE *STREAM)
31429 - The `feof_unlocked' function is equivalent to the `feof' function
31430 - except that it does not implicitly lock the stream.
31432 - This function is a GNU extension.
31434 - This symbol is declared in `stdio.h'.
31436 - - Function: int ferror (FILE *STREAM)
31437 - The `ferror' function returns nonzero if and only if the error
31438 - indicator for the stream STREAM is set, indicating that an error
31439 - has occurred on a previous operation on the stream.
31441 - This symbol is declared in `stdio.h'.
31443 - - Function: int ferror_unlocked (FILE *STREAM)
31444 - The `ferror_unlocked' function is equivalent to the `ferror'
31445 - function except that it does not implicitly lock the stream.
31447 - This function is a GNU extension.
31449 - This symbol is declared in `stdio.h'.
31451 - In addition to setting the error indicator associated with the
31452 -stream, the functions that operate on streams also set `errno' in the
31453 -same way as the corresponding low-level functions that operate on file
31454 -descriptors. For example, all of the functions that perform output to a
31455 -stream--such as `fputc', `printf', and `fflush'--are implemented in
31456 -terms of `write', and all of the `errno' error conditions defined for
31457 -`write' are meaningful for these functions. For more information about
31458 -the descriptor-level I/O functions, see *Note Low-Level I/O::.
31460 -\x1f
31461 -File: libc.info, Node: Error Recovery, Next: Binary Streams, Prev: EOF and Errors, Up: I/O on Streams
31463 -Recovering from errors
31464 -======================
31466 - You may explicitly clear the error and EOF flags with the `clearerr'
31467 -function.
31469 - - Function: void clearerr (FILE *STREAM)
31470 - This function clears the end-of-file and error indicators for the
31471 - stream STREAM.
31473 - The file positioning functions (*note File Positioning::) also
31474 - clear the end-of-file indicator for the stream.
31476 - - Function: void clearerr_unlocked (FILE *STREAM)
31477 - The `clearerr_unlocked' function is equivalent to the `clearerr'
31478 - function except that it does not implicitly lock the stream.
31480 - This function is a GNU extension.
31482 - Note that it is _not_ correct to just clear the error flag and retry
31483 -a failed stream operation. After a failed write, any number of
31484 -characters since the last buffer flush may have been committed to the
31485 -file, while some buffered data may have been discarded. Merely retrying
31486 -can thus cause lost or repeated data.
31488 - A failed read may leave the file pointer in an inappropriate
31489 -position for a second try. In both cases, you should seek to a known
31490 -position before retrying.
31492 - Most errors that can happen are not recoverable -- a second try will
31493 -always fail again in the same way. So usually it is best to give up and
31494 -report the error to the user, rather than install complicated recovery
31495 -logic.
31497 - One important exception is `EINTR' (*note Interrupted Primitives::).
31498 -Many stream I/O implementations will treat it as an ordinary error,
31499 -which can be quite inconvenient. You can avoid this hassle by
31500 -installing all signals with the `SA_RESTART' flag.
31502 - For similar reasons, setting nonblocking I/O on a stream's file
31503 -descriptor is not usually advisable.
31505 -\x1f
31506 -File: libc.info, Node: Binary Streams, Next: File Positioning, Prev: Error Recovery, Up: I/O on Streams
31508 -Text and Binary Streams
31509 -=======================
31511 - The GNU system and other POSIX-compatible operating systems organize
31512 -all files as uniform sequences of characters. However, some other
31513 -systems make a distinction between files containing text and files
31514 -containing binary data, and the input and output facilities of ISO C
31515 -provide for this distinction. This section tells you how to write
31516 -programs portable to such systems.
31518 - When you open a stream, you can specify either a "text stream" or a
31519 -"binary stream". You indicate that you want a binary stream by
31520 -specifying the `b' modifier in the OPENTYPE argument to `fopen'; see
31521 -*Note Opening Streams::. Without this option, `fopen' opens the file
31522 -as a text stream.
31524 - Text and binary streams differ in several ways:
31526 - * The data read from a text stream is divided into "lines" which are
31527 - terminated by newline (`'\n'') characters, while a binary stream is
31528 - simply a long series of characters. A text stream might on some
31529 - systems fail to handle lines more than 254 characters long
31530 - (including the terminating newline character).
31532 - * On some systems, text files can contain only printing characters,
31533 - horizontal tab characters, and newlines, and so text streams may
31534 - not support other characters. However, binary streams can handle
31535 - any character value.
31537 - * Space characters that are written immediately preceding a newline
31538 - character in a text stream may disappear when the file is read in
31539 - again.
31541 - * More generally, there need not be a one-to-one mapping between
31542 - characters that are read from or written to a text stream, and the
31543 - characters in the actual file.
31545 - Since a binary stream is always more capable and more predictable
31546 -than a text stream, you might wonder what purpose text streams serve.
31547 -Why not simply always use binary streams? The answer is that on these
31548 -operating systems, text and binary streams use different file formats,
31549 -and the only way to read or write "an ordinary file of text" that can
31550 -work with other text-oriented programs is through a text stream.
31552 - In the GNU library, and on all POSIX systems, there is no difference
31553 -between text streams and binary streams. When you open a stream, you
31554 -get the same kind of stream regardless of whether you ask for binary.
31555 -This stream can handle any file content, and has none of the
31556 -restrictions that text streams sometimes have.
31558 -\x1f
31559 -File: libc.info, Node: File Positioning, Next: Portable Positioning, Prev: Binary Streams, Up: I/O on Streams
31561 -File Positioning
31562 -================
31564 - The "file position" of a stream describes where in the file the
31565 -stream is currently reading or writing. I/O on the stream advances the
31566 -file position through the file. In the GNU system, the file position is
31567 -represented as an integer, which counts the number of bytes from the
31568 -beginning of the file. *Note File Position::.
31570 - During I/O to an ordinary disk file, you can change the file position
31571 -whenever you wish, so as to read or write any portion of the file. Some
31572 -other kinds of files may also permit this. Files which support changing
31573 -the file position are sometimes referred to as "random-access" files.
31575 - You can use the functions in this section to examine or modify the
31576 -file position indicator associated with a stream. The symbols listed
31577 -below are declared in the header file `stdio.h'.
31579 - - Function: long int ftell (FILE *STREAM)
31580 - This function returns the current file position of the stream
31581 - STREAM.
31583 - This function can fail if the stream doesn't support file
31584 - positioning, or if the file position can't be represented in a
31585 - `long int', and possibly for other reasons as well. If a failure
31586 - occurs, a value of `-1' is returned.
31588 - - Function: off_t ftello (FILE *STREAM)
31589 - The `ftello' function is similar to `ftell', except that it
31590 - returns a value of type `off_t'. Systems which support this type
31591 - use it to describe all file positions, unlike the POSIX
31592 - specification which uses a long int. The two are not necessarily
31593 - the same size. Therefore, using ftell can lead to problems if the
31594 - implementation is written on top of a POSIX compliant low-level
31595 - I/O implementation, and using `ftello' is preferable whenever it
31596 - is available.
31598 - If this function fails it returns `(off_t) -1'. This can happen
31599 - due to missing support for file positioning or internal errors.
31600 - Otherwise the return value is the current file position.
31602 - The function is an extension defined in the Unix Single
31603 - Specification version 2.
31605 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
31606 - 32 bit system this function is in fact `ftello64'. I.e., the LFS
31607 - interface transparently replaces the old interface.
31609 - - Function: off64_t ftello64 (FILE *STREAM)
31610 - This function is similar to `ftello' with the only difference that
31611 - the return value is of type `off64_t'. This also requires that the
31612 - stream STREAM was opened using either `fopen64', `freopen64', or
31613 - `tmpfile64' since otherwise the underlying file operations to
31614 - position the file pointer beyond the 2^31 bytes limit might fail.
31616 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' on a 32
31617 - bits machine this function is available under the name `ftello'
31618 - and so transparently replaces the old interface.
31620 - - Function: int fseek (FILE *STREAM, long int OFFSET, int WHENCE)
31621 - The `fseek' function is used to change the file position of the
31622 - stream STREAM. The value of WHENCE must be one of the constants
31623 - `SEEK_SET', `SEEK_CUR', or `SEEK_END', to indicate whether the
31624 - OFFSET is relative to the beginning of the file, the current file
31625 - position, or the end of the file, respectively.
31627 - This function returns a value of zero if the operation was
31628 - successful, and a nonzero value to indicate failure. A successful
31629 - call also clears the end-of-file indicator of STREAM and discards
31630 - any characters that were "pushed back" by the use of `ungetc'.
31632 - `fseek' either flushes any buffered output before setting the file
31633 - position or else remembers it so it will be written later in its
31634 - proper place in the file.
31636 - - Function: int fseeko (FILE *STREAM, off_t OFFSET, int WHENCE)
31637 - This function is similar to `fseek' but it corrects a problem with
31638 - `fseek' in a system with POSIX types. Using a value of type `long
31639 - int' for the offset is not compatible with POSIX. `fseeko' uses
31640 - the correct type `off_t' for the OFFSET parameter.
31642 - For this reason it is a good idea to prefer `ftello' whenever it is
31643 - available since its functionality is (if different at all) closer
31644 - the underlying definition.
31646 - The functionality and return value is the same as for `fseek'.
31648 - The function is an extension defined in the Unix Single
31649 - Specification version 2.
31651 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
31652 - 32 bit system this function is in fact `fseeko64'. I.e., the LFS
31653 - interface transparently replaces the old interface.
31655 - - Function: int fseeko64 (FILE *STREAM, off64_t OFFSET, int WHENCE)
31656 - This function is similar to `fseeko' with the only difference that
31657 - the OFFSET parameter is of type `off64_t'. This also requires
31658 - that the stream STREAM was opened using either `fopen64',
31659 - `freopen64', or `tmpfile64' since otherwise the underlying file
31660 - operations to position the file pointer beyond the 2^31 bytes
31661 - limit might fail.
31663 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' on a 32
31664 - bits machine this function is available under the name `fseeko'
31665 - and so transparently replaces the old interface.
31667 - *Portability Note:* In non-POSIX systems, `ftell', `ftello', `fseek'
31668 -and `fseeko' might work reliably only on binary streams. *Note Binary
31669 -Streams::.
31671 - The following symbolic constants are defined for use as the WHENCE
31672 -argument to `fseek'. They are also used with the `lseek' function
31673 -(*note I/O Primitives::) and to specify offsets for file locks (*note
31674 -Control Operations::).
31676 - - Macro: int SEEK_SET
31677 - This is an integer constant which, when used as the WHENCE
31678 - argument to the `fseek' or `fseeko' function, specifies that the
31679 - offset provided is relative to the beginning of the file.
31681 - - Macro: int SEEK_CUR
31682 - This is an integer constant which, when used as the WHENCE
31683 - argument to the `fseek' or `fseeko' function, specifies that the
31684 - offset provided is relative to the current file position.
31686 - - Macro: int SEEK_END
31687 - This is an integer constant which, when used as the WHENCE
31688 - argument to the `fseek' or `fseeko' function, specifies that the
31689 - offset provided is relative to the end of the file.
31691 - - Function: void rewind (FILE *STREAM)
31692 - The `rewind' function positions the stream STREAM at the beginning
31693 - of the file. It is equivalent to calling `fseek' or `fseeko' on
31694 - the STREAM with an OFFSET argument of `0L' and a WHENCE argument
31695 - of `SEEK_SET', except that the return value is discarded and the
31696 - error indicator for the stream is reset.
31698 - These three aliases for the `SEEK_...' constants exist for the sake
31699 -of compatibility with older BSD systems. They are defined in two
31700 -different header files: `fcntl.h' and `sys/file.h'.
31702 -`L_SET'
31703 - An alias for `SEEK_SET'.
31705 -`L_INCR'
31706 - An alias for `SEEK_CUR'.
31708 -`L_XTND'
31709 - An alias for `SEEK_END'.
31711 diff -u -udbrN glibc-2.3.2/manual/libc.info-2 glibc-2.3.2-200304020432/manual/libc.info-2
31712 --- glibc-2.3.2/manual/libc.info-2 Sat Mar 1 02:39:41 2003
31713 +++ glibc-2.3.2-200304020432/manual/libc.info-2 Thu Jan 1 01:00:00 1970
31714 @@ -1,1004 +0,0 @@
31715 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
31717 -INFO-DIR-SECTION GNU libraries
31718 -START-INFO-DIR-ENTRY
31719 -* Libc: (libc). C library.
31720 -END-INFO-DIR-ENTRY
31722 - This file documents the GNU C library.
31724 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
31725 -Reference Manual', for Version 2.3.x.
31727 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
31728 -Free Software Foundation, Inc.
31730 - Permission is granted to copy, distribute and/or modify this document
31731 -under the terms of the GNU Free Documentation License, Version 1.1 or
31732 -any later version published by the Free Software Foundation; with the
31733 -Invariant Sections being "Free Software Needs Free Documentation" and
31734 -"GNU Lesser General Public License", the Front-Cover texts being (a)
31735 -(see below), and with the Back-Cover Texts being (b) (see below). A
31736 -copy of the license is included in the section entitled "GNU Free
31737 -Documentation License".
31739 - (a) The FSF's Front-Cover Text is:
31741 - A GNU Manual
31743 - (b) The FSF's Back-Cover Text is:
31745 - You have freedom to copy and modify this GNU Manual, like GNU
31746 -software. Copies published by the Free Software Foundation raise
31747 -funds for GNU development.
31749 -\x1f
31750 -File: libc.info, Node: Introduction, Next: Error Reporting, Prev: Top, Up: Top
31752 -Introduction
31753 -************
31755 - The C language provides no built-in facilities for performing such
31756 -common operations as input/output, memory management, string
31757 -manipulation, and the like. Instead, these facilities are defined in a
31758 -standard "library", which you compile and link with your programs.
31760 - The GNU C library, described in this document, defines all of the
31761 -library functions that are specified by the ISO C standard, as well as
31762 -additional features specific to POSIX and other derivatives of the Unix
31763 -operating system, and extensions specific to the GNU system.
31765 - The purpose of this manual is to tell you how to use the facilities
31766 -of the GNU library. We have mentioned which features belong to which
31767 -standards to help you identify things that are potentially non-portable
31768 -to other systems. But the emphasis in this manual is not on strict
31769 -portability.
31771 -* Menu:
31773 -* Getting Started:: What this manual is for and how to use it.
31774 -* Standards and Portability:: Standards and sources upon which the GNU
31775 - C library is based.
31776 -* Using the Library:: Some practical uses for the library.
31777 -* Roadmap to the Manual:: Overview of the remaining chapters in
31778 - this manual.
31780 -\x1f
31781 -File: libc.info, Node: Getting Started, Next: Standards and Portability, Up: Introduction
31783 -Getting Started
31784 -===============
31786 - This manual is written with the assumption that you are at least
31787 -somewhat familiar with the C programming language and basic programming
31788 -concepts. Specifically, familiarity with ISO standard C (*note ISO
31789 -C::), rather than "traditional" pre-ISO C dialects, is assumed.
31791 - The GNU C library includes several "header files", each of which
31792 -provides definitions and declarations for a group of related facilities;
31793 -this information is used by the C compiler when processing your program.
31794 -For example, the header file `stdio.h' declares facilities for
31795 -performing input and output, and the header file `string.h' declares
31796 -string processing utilities. The organization of this manual generally
31797 -follows the same division as the header files.
31799 - If you are reading this manual for the first time, you should read
31800 -all of the introductory material and skim the remaining chapters.
31801 -There are a _lot_ of functions in the GNU C library and it's not
31802 -realistic to expect that you will be able to remember exactly _how_ to
31803 -use each and every one of them. It's more important to become
31804 -generally familiar with the kinds of facilities that the library
31805 -provides, so that when you are writing your programs you can recognize
31806 -_when_ to make use of library functions, and _where_ in this manual you
31807 -can find more specific information about them.
31809 -\x1f
31810 -File: libc.info, Node: Standards and Portability, Next: Using the Library, Prev: Getting Started, Up: Introduction
31812 -Standards and Portability
31813 -=========================
31815 - This section discusses the various standards and other sources that
31816 -the GNU C library is based upon. These sources include the ISO C and
31817 -POSIX standards, and the System V and Berkeley Unix implementations.
31819 - The primary focus of this manual is to tell you how to make effective
31820 -use of the GNU library facilities. But if you are concerned about
31821 -making your programs compatible with these standards, or portable to
31822 -operating systems other than GNU, this can affect how you use the
31823 -library. This section gives you an overview of these standards, so that
31824 -you will know what they are when they are mentioned in other parts of
31825 -the manual.
31827 - *Note Library Summary::, for an alphabetical list of the functions
31828 -and other symbols provided by the library. This list also states which
31829 -standards each function or symbol comes from.
31831 -* Menu:
31833 -* ISO C:: The international standard for the C
31834 - programming language.
31835 -* POSIX:: The ISO/IEC 9945 (aka IEEE 1003) standards
31836 - for operating systems.
31837 -* Berkeley Unix:: BSD and SunOS.
31838 -* SVID:: The System V Interface Description.
31839 -* XPG:: The X/Open Portability Guide.
31841 -\x1f
31842 -File: libc.info, Node: ISO C, Next: POSIX, Up: Standards and Portability
31844 -ISO C
31845 ------
31847 - The GNU C library is compatible with the C standard adopted by the
31848 -American National Standards Institute (ANSI): `American National
31849 -Standard X3.159-1989--"ANSI C"' and later by the International
31850 -Standardization Organization (ISO): `ISO/IEC 9899:1990, "Programming
31851 -languages--C"'. We here refer to the standard as ISO C since this is
31852 -the more general standard in respect of ratification. The header files
31853 -and library facilities that make up the GNU library are a superset of
31854 -those specified by the ISO C standard.
31856 - If you are concerned about strict adherence to the ISO C standard,
31857 -you should use the `-ansi' option when you compile your programs with
31858 -the GNU C compiler. This tells the compiler to define _only_ ISO
31859 -standard features from the library header files, unless you explicitly
31860 -ask for additional features. *Note Feature Test Macros::, for
31861 -information on how to do this.
31863 - Being able to restrict the library to include only ISO C features is
31864 -important because ISO C puts limitations on what names can be defined
31865 -by the library implementation, and the GNU extensions don't fit these
31866 -limitations. *Note Reserved Names::, for more information about these
31867 -restrictions.
31869 - This manual does not attempt to give you complete details on the
31870 -differences between ISO C and older dialects. It gives advice on how
31871 -to write programs to work portably under multiple C dialects, but does
31872 -not aim for completeness.
31874 -\x1f
31875 -File: libc.info, Node: POSIX, Next: Berkeley Unix, Prev: ISO C, Up: Standards and Portability
31877 -POSIX (The Portable Operating System Interface)
31878 ------------------------------------------------
31880 - The GNU library is also compatible with the ISO "POSIX" family of
31881 -standards, known more formally as the "Portable Operating System
31882 -Interface for Computer Environments" (ISO/IEC 9945). They were also
31883 -published as ANSI/IEEE Std 1003. POSIX is derived mostly from various
31884 -versions of the Unix operating system.
31886 - The library facilities specified by the POSIX standards are a
31887 -superset of those required by ISO C; POSIX specifies additional
31888 -features for ISO C functions, as well as specifying new additional
31889 -functions. In general, the additional requirements and functionality
31890 -defined by the POSIX standards are aimed at providing lower-level
31891 -support for a particular kind of operating system environment, rather
31892 -than general programming language support which can run in many diverse
31893 -operating system environments.
31895 - The GNU C library implements all of the functions specified in
31896 -`ISO/IEC 9945-1:1996, the POSIX System Application Program Interface',
31897 -commonly referred to as POSIX.1. The primary extensions to the ISO C
31898 -facilities specified by this standard include file system interface
31899 -primitives (*note File System Interface::), device-specific terminal
31900 -control functions (*note Low-Level Terminal Interface::), and process
31901 -control functions (*note Processes::).
31903 - Some facilities from `ISO/IEC 9945-2:1993, the POSIX Shell and
31904 -Utilities standard' (POSIX.2) are also implemented in the GNU library.
31905 -These include utilities for dealing with regular expressions and other
31906 -pattern matching facilities (*note Pattern Matching::).
31908 -\x1f
31909 -File: libc.info, Node: Berkeley Unix, Next: SVID, Prev: POSIX, Up: Standards and Portability
31911 -Berkeley Unix
31912 --------------
31914 - The GNU C library defines facilities from some versions of Unix which
31915 -are not formally standardized, specifically from the 4.2 BSD, 4.3 BSD,
31916 -and 4.4 BSD Unix systems (also known as "Berkeley Unix") and from
31917 -"SunOS" (a popular 4.2 BSD derivative that includes some Unix System V
31918 -functionality). These systems support most of the ISO C and POSIX
31919 -facilities, and 4.4 BSD and newer releases of SunOS in fact support
31920 -them all.
31922 - The BSD facilities include symbolic links (*note Symbolic Links::),
31923 -the `select' function (*note Waiting for I/O::), the BSD signal
31924 -functions (*note BSD Signal Handling::), and sockets (*note Sockets::).
31926 -\x1f
31927 -File: libc.info, Node: SVID, Next: XPG, Prev: Berkeley Unix, Up: Standards and Portability
31929 -SVID (The System V Interface Description)
31930 ------------------------------------------
31932 - The "System V Interface Description" (SVID) is a document describing
31933 -the AT&T Unix System V operating system. It is to some extent a
31934 -superset of the POSIX standard (*note POSIX::).
31936 - The GNU C library defines most of the facilities required by the SVID
31937 -that are not also required by the ISO C or POSIX standards, for
31938 -compatibility with System V Unix and other Unix systems (such as
31939 -SunOS) which include these facilities. However, many of the more
31940 -obscure and less generally useful facilities required by the SVID are
31941 -not included. (In fact, Unix System V itself does not provide them
31942 -all.)
31944 - The supported facilities from System V include the methods for
31945 -inter-process communication and shared memory, the `hsearch' and
31946 -`drand48' families of functions, `fmtmsg' and several of the
31947 -mathematical functions.
31949 -\x1f
31950 -File: libc.info, Node: XPG, Prev: SVID, Up: Standards and Portability
31952 -XPG (The X/Open Portability Guide)
31953 -----------------------------------
31955 - The X/Open Portability Guide, published by the X/Open Company, Ltd.,
31956 -is a more general standard than POSIX. X/Open owns the Unix copyright
31957 -and the XPG specifies the requirements for systems which are intended
31958 -to be a Unix system.
31960 - The GNU C library complies to the X/Open Portability Guide, Issue
31961 -4.2, with all extensions common to XSI (X/Open System Interface)
31962 -compliant systems and also all X/Open UNIX extensions.
31964 - The additions on top of POSIX are mainly derived from functionality
31965 -available in System V and BSD systems. Some of the really bad mistakes
31966 -in System V systems were corrected, though. Since fulfilling the XPG
31967 -standard with the Unix extensions is a precondition for getting the
31968 -Unix brand chances are good that the functionality is available on
31969 -commercial systems.
31971 -\x1f
31972 -File: libc.info, Node: Using the Library, Next: Roadmap to the Manual, Prev: Standards and Portability, Up: Introduction
31974 -Using the Library
31975 -=================
31977 - This section describes some of the practical issues involved in using
31978 -the GNU C library.
31980 -* Menu:
31982 -* Header Files:: How to include the header files in your
31983 - programs.
31984 -* Macro Definitions:: Some functions in the library may really
31985 - be implemented as macros.
31986 -* Reserved Names:: The C standard reserves some names for
31987 - the library, and some for users.
31988 -* Feature Test Macros:: How to control what names are defined.
31990 -\x1f
31991 -File: libc.info, Node: Header Files, Next: Macro Definitions, Up: Using the Library
31993 -Header Files
31994 -------------
31996 - Libraries for use by C programs really consist of two parts: "header
31997 -files" that define types and macros and declare variables and
31998 -functions; and the actual library or "archive" that contains the
31999 -definitions of the variables and functions.
32001 - (Recall that in C, a "declaration" merely provides information that
32002 -a function or variable exists and gives its type. For a function
32003 -declaration, information about the types of its arguments might be
32004 -provided as well. The purpose of declarations is to allow the compiler
32005 -to correctly process references to the declared variables and functions.
32006 -A "definition", on the other hand, actually allocates storage for a
32007 -variable or says what a function does.)
32009 - In order to use the facilities in the GNU C library, you should be
32010 -sure that your program source files include the appropriate header
32011 -files. This is so that the compiler has declarations of these
32012 -facilities available and can correctly process references to them.
32013 -Once your program has been compiled, the linker resolves these
32014 -references to the actual definitions provided in the archive file.
32016 - Header files are included into a program source file by the
32017 -`#include' preprocessor directive. The C language supports two forms
32018 -of this directive; the first,
32020 - #include "HEADER"
32022 -is typically used to include a header file HEADER that you write
32023 -yourself; this would contain definitions and declarations describing the
32024 -interfaces between the different parts of your particular application.
32025 -By contrast,
32027 - #include <file.h>
32029 -is typically used to include a header file `file.h' that contains
32030 -definitions and declarations for a standard library. This file would
32031 -normally be installed in a standard place by your system administrator.
32032 -You should use this second form for the C library header files.
32034 - Typically, `#include' directives are placed at the top of the C
32035 -source file, before any other code. If you begin your source files with
32036 -some comments explaining what the code in the file does (a good idea),
32037 -put the `#include' directives immediately afterwards, following the
32038 -feature test macro definition (*note Feature Test Macros::).
32040 - For more information about the use of header files and `#include'
32041 -directives, *note Header Files: (cpp.info)Header Files..
32043 - The GNU C library provides several header files, each of which
32044 -contains the type and macro definitions and variable and function
32045 -declarations for a group of related facilities. This means that your
32046 -programs may need to include several header files, depending on exactly
32047 -which facilities you are using.
32049 - Some library header files include other library header files
32050 -automatically. However, as a matter of programming style, you should
32051 -not rely on this; it is better to explicitly include all the header
32052 -files required for the library facilities you are using. The GNU C
32053 -library header files have been written in such a way that it doesn't
32054 -matter if a header file is accidentally included more than once;
32055 -including a header file a second time has no effect. Likewise, if your
32056 -program needs to include multiple header files, the order in which they
32057 -are included doesn't matter.
32059 - *Compatibility Note:* Inclusion of standard header files in any
32060 -order and any number of times works in any ISO C implementation.
32061 -However, this has traditionally not been the case in many older C
32062 -implementations.
32064 - Strictly speaking, you don't _have to_ include a header file to use
32065 -a function it declares; you could declare the function explicitly
32066 -yourself, according to the specifications in this manual. But it is
32067 -usually better to include the header file because it may define types
32068 -and macros that are not otherwise available and because it may define
32069 -more efficient macro replacements for some functions. It is also a sure
32070 -way to have the correct declaration.
32072 -\x1f
32073 -File: libc.info, Node: Macro Definitions, Next: Reserved Names, Prev: Header Files, Up: Using the Library
32075 -Macro Definitions of Functions
32076 -------------------------------
32078 - If we describe something as a function in this manual, it may have a
32079 -macro definition as well. This normally has no effect on how your
32080 -program runs--the macro definition does the same thing as the function
32081 -would. In particular, macro equivalents for library functions evaluate
32082 -arguments exactly once, in the same way that a function call would. The
32083 -main reason for these macro definitions is that sometimes they can
32084 -produce an inline expansion that is considerably faster than an actual
32085 -function call.
32087 - Taking the address of a library function works even if it is also
32088 -defined as a macro. This is because, in this context, the name of the
32089 -function isn't followed by the left parenthesis that is syntactically
32090 -necessary to recognize a macro call.
32092 - You might occasionally want to avoid using the macro definition of a
32093 -function--perhaps to make your program easier to debug. There are two
32094 -ways you can do this:
32096 - * You can avoid a macro definition in a specific use by enclosing
32097 - the name of the function in parentheses. This works because the
32098 - name of the function doesn't appear in a syntactic context where
32099 - it is recognizable as a macro call.
32101 - * You can suppress any macro definition for a whole source file by
32102 - using the `#undef' preprocessor directive, unless otherwise stated
32103 - explicitly in the description of that facility.
32105 - For example, suppose the header file `stdlib.h' declares a function
32106 -named `abs' with
32108 - extern int abs (int);
32110 -and also provides a macro definition for `abs'. Then, in:
32112 - #include <stdlib.h>
32113 - int f (int *i) { return abs (++*i); }
32115 -the reference to `abs' might refer to either a macro or a function. On
32116 -the other hand, in each of the following examples the reference is to a
32117 -function and not a macro.
32119 - #include <stdlib.h>
32120 - int g (int *i) { return (abs) (++*i); }
32122 - #undef abs
32123 - int h (int *i) { return abs (++*i); }
32125 - Since macro definitions that double for a function behave in exactly
32126 -the same way as the actual function version, there is usually no need
32127 -for any of these methods. In fact, removing macro definitions usually
32128 -just makes your program slower.
32130 -\x1f
32131 -File: libc.info, Node: Reserved Names, Next: Feature Test Macros, Prev: Macro Definitions, Up: Using the Library
32133 -Reserved Names
32134 ---------------
32136 - The names of all library types, macros, variables and functions that
32137 -come from the ISO C standard are reserved unconditionally; your program
32138 -*may not* redefine these names. All other library names are reserved
32139 -if your program explicitly includes the header file that defines or
32140 -declares them. There are several reasons for these restrictions:
32142 - * Other people reading your code could get very confused if you were
32143 - using a function named `exit' to do something completely different
32144 - from what the standard `exit' function does, for example.
32145 - Preventing this situation helps to make your programs easier to
32146 - understand and contributes to modularity and maintainability.
32148 - * It avoids the possibility of a user accidentally redefining a
32149 - library function that is called by other library functions. If
32150 - redefinition were allowed, those other functions would not work
32151 - properly.
32153 - * It allows the compiler to do whatever special optimizations it
32154 - pleases on calls to these functions, without the possibility that
32155 - they may have been redefined by the user. Some library
32156 - facilities, such as those for dealing with variadic arguments
32157 - (*note Variadic Functions::) and non-local exits (*note Non-Local
32158 - Exits::), actually require a considerable amount of cooperation on
32159 - the part of the C compiler, and with respect to the
32160 - implementation, it might be easier for the compiler to treat these
32161 - as built-in parts of the language.
32163 - In addition to the names documented in this manual, reserved names
32164 -include all external identifiers (global functions and variables) that
32165 -begin with an underscore (`_') and all identifiers regardless of use
32166 -that begin with either two underscores or an underscore followed by a
32167 -capital letter are reserved names. This is so that the library and
32168 -header files can define functions, variables, and macros for internal
32169 -purposes without risk of conflict with names in user programs.
32171 - Some additional classes of identifier names are reserved for future
32172 -extensions to the C language or the POSIX.1 environment. While using
32173 -these names for your own purposes right now might not cause a problem,
32174 -they do raise the possibility of conflict with future versions of the C
32175 -or POSIX standards, so you should avoid these names.
32177 - * Names beginning with a capital `E' followed a digit or uppercase
32178 - letter may be used for additional error code names. *Note Error
32179 - Reporting::.
32181 - * Names that begin with either `is' or `to' followed by a lowercase
32182 - letter may be used for additional character testing and conversion
32183 - functions. *Note Character Handling::.
32185 - * Names that begin with `LC_' followed by an uppercase letter may be
32186 - used for additional macros specifying locale attributes. *Note
32187 - Locales::.
32189 - * Names of all existing mathematics functions (*note Mathematics::)
32190 - suffixed with `f' or `l' are reserved for corresponding functions
32191 - that operate on `float' and `long double' arguments, respectively.
32193 - * Names that begin with `SIG' followed by an uppercase letter are
32194 - reserved for additional signal names. *Note Standard Signals::.
32196 - * Names that begin with `SIG_' followed by an uppercase letter are
32197 - reserved for additional signal actions. *Note Basic Signal
32198 - Handling::.
32200 - * Names beginning with `str', `mem', or `wcs' followed by a
32201 - lowercase letter are reserved for additional string and array
32202 - functions. *Note String and Array Utilities::.
32204 - * Names that end with `_t' are reserved for additional type names.
32206 - In addition, some individual header files reserve names beyond those
32207 -that they actually define. You only need to worry about these
32208 -restrictions if your program includes that particular header file.
32210 - * The header file `dirent.h' reserves names prefixed with `d_'.
32212 - * The header file `fcntl.h' reserves names prefixed with `l_', `F_',
32213 - `O_', and `S_'.
32215 - * The header file `grp.h' reserves names prefixed with `gr_'.
32217 - * The header file `limits.h' reserves names suffixed with `_MAX'.
32219 - * The header file `pwd.h' reserves names prefixed with `pw_'.
32221 - * The header file `signal.h' reserves names prefixed with `sa_' and
32222 - `SA_'.
32224 - * The header file `sys/stat.h' reserves names prefixed with `st_'
32225 - and `S_'.
32227 - * The header file `sys/times.h' reserves names prefixed with `tms_'.
32229 - * The header file `termios.h' reserves names prefixed with `c_',
32230 - `V', `I', `O', and `TC'; and names prefixed with `B' followed by a
32231 - digit.
32233 -\x1f
32234 -File: libc.info, Node: Feature Test Macros, Prev: Reserved Names, Up: Using the Library
32236 -Feature Test Macros
32237 --------------------
32239 - The exact set of features available when you compile a source file
32240 -is controlled by which "feature test macros" you define.
32242 - If you compile your programs using `gcc -ansi', you get only the
32243 -ISO C library features, unless you explicitly request additional
32244 -features by defining one or more of the feature macros. *Note GNU CC
32245 -Command Options: (gcc.info)Invoking GCC, for more information about GCC
32246 -options.
32248 - You should define these macros by using `#define' preprocessor
32249 -directives at the top of your source code files. These directives
32250 -_must_ come before any `#include' of a system header file. It is best
32251 -to make them the very first thing in the file, preceded only by
32252 -comments. You could also use the `-D' option to GCC, but it's better
32253 -if you make the source files indicate their own meaning in a
32254 -self-contained way.
32256 - This system exists to allow the library to conform to multiple
32257 -standards. Although the different standards are often described as
32258 -supersets of each other, they are usually incompatible because larger
32259 -standards require functions with names that smaller ones reserve to the
32260 -user program. This is not mere pedantry -- it has been a problem in
32261 -practice. For instance, some non-GNU programs define functions named
32262 -`getline' that have nothing to do with this library's `getline'. They
32263 -would not be compilable if all features were enabled indiscriminately.
32265 - This should not be used to verify that a program conforms to a
32266 -limited standard. It is insufficient for this purpose, as it will not
32267 -protect you from including header files outside the standard, or
32268 -relying on semantics undefined within the standard.
32270 - - Macro: _POSIX_SOURCE
32271 - If you define this macro, then the functionality from the POSIX.1
32272 - standard (IEEE Standard 1003.1) is available, as well as all of the
32273 - ISO C facilities.
32275 - The state of `_POSIX_SOURCE' is irrelevant if you define the macro
32276 - `_POSIX_C_SOURCE' to a positive integer.
32278 - - Macro: _POSIX_C_SOURCE
32279 - Define this macro to a positive integer to control which POSIX
32280 - functionality is made available. The greater the value of this
32281 - macro, the more functionality is made available.
32283 - If you define this macro to a value greater than or equal to `1',
32284 - then the functionality from the 1990 edition of the POSIX.1
32285 - standard (IEEE Standard 1003.1-1990) is made available.
32287 - If you define this macro to a value greater than or equal to `2',
32288 - then the functionality from the 1992 edition of the POSIX.2
32289 - standard (IEEE Standard 1003.2-1992) is made available.
32291 - If you define this macro to a value greater than or equal to
32292 - `199309L', then the functionality from the 1993 edition of the
32293 - POSIX.1b standard (IEEE Standard 1003.1b-1993) is made available.
32295 - Greater values for `_POSIX_C_SOURCE' will enable future extensions.
32296 - The POSIX standards process will define these values as necessary,
32297 - and the GNU C Library should support them some time after they
32298 - become standardized. The 1996 edition of POSIX.1 (ISO/IEC 9945-1:
32299 - 1996) states that if you define `_POSIX_C_SOURCE' to a value
32300 - greater than or equal to `199506L', then the functionality from
32301 - the 1996 edition is made available.
32303 - - Macro: _BSD_SOURCE
32304 - If you define this macro, functionality derived from 4.3 BSD Unix
32305 - is included as well as the ISO C, POSIX.1, and POSIX.2 material.
32307 - Some of the features derived from 4.3 BSD Unix conflict with the
32308 - corresponding features specified by the POSIX.1 standard. If this
32309 - macro is defined, the 4.3 BSD definitions take precedence over the
32310 - POSIX definitions.
32312 - Due to the nature of some of the conflicts between 4.3 BSD and
32313 - POSIX.1, you need to use a special "BSD compatibility library"
32314 - when linking programs compiled for BSD compatibility. This is
32315 - because some functions must be defined in two different ways, one
32316 - of them in the normal C library, and one of them in the
32317 - compatibility library. If your program defines `_BSD_SOURCE', you
32318 - must give the option `-lbsd-compat' to the compiler or linker when
32319 - linking the program, to tell it to find functions in this special
32320 - compatibility library before looking for them in the normal C
32321 - library.
32323 - - Macro: _SVID_SOURCE
32324 - If you define this macro, functionality derived from SVID is
32325 - included as well as the ISO C, POSIX.1, POSIX.2, and X/Open
32326 - material.
32328 - - Macro: _XOPEN_SOURCE
32329 - - Macro: _XOPEN_SOURCE_EXTENDED
32330 - If you define this macro, functionality described in the X/Open
32331 - Portability Guide is included. This is a superset of the POSIX.1
32332 - and POSIX.2 functionality and in fact `_POSIX_SOURCE' and
32333 - `_POSIX_C_SOURCE' are automatically defined.
32335 - As the unification of all Unices, functionality only available in
32336 - BSD and SVID is also included.
32338 - If the macro `_XOPEN_SOURCE_EXTENDED' is also defined, even more
32339 - functionality is available. The extra functions will make all
32340 - functions available which are necessary for the X/Open Unix brand.
32342 - If the macro `_XOPEN_SOURCE' has the value 500 this includes all
32343 - functionality described so far plus some new definitions from the
32344 - Single Unix Specification, version 2.
32346 - - Macro: _LARGEFILE_SOURCE
32347 - If this macro is defined some extra functions are available which
32348 - rectify a few shortcomings in all previous standards.
32349 - Specifically, the functions `fseeko' and `ftello' are available.
32350 - Without these functions the difference between the ISO C interface
32351 - (`fseek', `ftell') and the low-level POSIX interface (`lseek')
32352 - would lead to problems.
32354 - This macro was introduced as part of the Large File Support
32355 - extension (LFS).
32357 - - Macro: _LARGEFILE64_SOURCE
32358 - If you define this macro an additional set of functions is made
32359 - available which enables 32 bit systems to use files of sizes beyond
32360 - the usual limit of 2GB. This interface is not available if the
32361 - system does not support files that large. On systems where the
32362 - natural file size limit is greater than 2GB (i.e., on 64 bit
32363 - systems) the new functions are identical to the replaced functions.
32365 - The new functionality is made available by a new set of types and
32366 - functions which replace the existing ones. The names of these new
32367 - objects contain `64' to indicate the intention, e.g., `off_t' vs.
32368 - `off64_t' and `fseeko' vs. `fseeko64'.
32370 - This macro was introduced as part of the Large File Support
32371 - extension (LFS). It is a transition interface for the period when
32372 - 64 bit offsets are not generally used (see `_FILE_OFFSET_BITS').
32374 - - Macro: _FILE_OFFSET_BITS
32375 - This macro determines which file system interface shall be used,
32376 - one replacing the other. Whereas `_LARGEFILE64_SOURCE' makes the
32377 - 64 bit interface available as an additional interface,
32378 - `_FILE_OFFSET_BITS' allows the 64 bit interface to replace the old
32379 - interface.
32381 - If `_FILE_OFFSET_BITS' is undefined, or if it is defined to the
32382 - value `32', nothing changes. The 32 bit interface is used and
32383 - types like `off_t' have a size of 32 bits on 32 bit systems.
32385 - If the macro is defined to the value `64', the large file interface
32386 - replaces the old interface. I.e., the functions are not made
32387 - available under different names (as they are with
32388 - `_LARGEFILE64_SOURCE'). Instead the old function names now
32389 - reference the new functions, e.g., a call to `fseeko' now indeed
32390 - calls `fseeko64'.
32392 - This macro should only be selected if the system provides
32393 - mechanisms for handling large files. On 64 bit systems this macro
32394 - has no effect since the `*64' functions are identical to the
32395 - normal functions.
32397 - This macro was introduced as part of the Large File Support
32398 - extension (LFS).
32400 - - Macro: _ISOC99_SOURCE
32401 - Until the revised ISO C standard is widely adopted the new features
32402 - are not automatically enabled. The GNU libc nevertheless has a
32403 - complete implementation of the new standard and to enable the new
32404 - features the macro `_ISOC99_SOURCE' should be defined.
32406 - - Macro: _GNU_SOURCE
32407 - If you define this macro, everything is included: ISO C89,
32408 - ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU
32409 - extensions. In the cases where POSIX.1 conflicts with BSD, the
32410 - POSIX definitions take precedence.
32412 - If you want to get the full effect of `_GNU_SOURCE' but make the
32413 - BSD definitions take precedence over the POSIX definitions, use
32414 - this sequence of definitions:
32416 - #define _GNU_SOURCE
32417 - #define _BSD_SOURCE
32418 - #define _SVID_SOURCE
32420 - Note that if you do this, you must link your program with the BSD
32421 - compatibility library by passing the `-lbsd-compat' option to the
32422 - compiler or linker. *Note:* If you forget to do this, you may get
32423 - very strange errors at run time.
32425 - - Macro: _REENTRANT
32426 - - Macro: _THREAD_SAFE
32427 - If you define one of these macros, reentrant versions of several
32428 - functions get declared. Some of the functions are specified in
32429 - POSIX.1c but many others are only available on a few other systems
32430 - or are unique to GNU libc. The problem is the delay in the
32431 - standardization of the thread safe C library interface.
32433 - Unlike on some other systems, no special version of the C library
32434 - must be used for linking. There is only one version but while
32435 - compiling this it must have been specified to compile as thread
32436 - safe.
32438 - We recommend you use `_GNU_SOURCE' in new programs. If you don't
32439 -specify the `-ansi' option to GCC and don't define any of these macros
32440 -explicitly, the effect is the same as defining `_POSIX_C_SOURCE' to 2
32441 -and `_POSIX_SOURCE', `_SVID_SOURCE', and `_BSD_SOURCE' to 1.
32443 - When you define a feature test macro to request a larger class of
32444 -features, it is harmless to define in addition a feature test macro for
32445 -a subset of those features. For example, if you define
32446 -`_POSIX_C_SOURCE', then defining `_POSIX_SOURCE' as well has no effect.
32447 -Likewise, if you define `_GNU_SOURCE', then defining either
32448 -`_POSIX_SOURCE' or `_POSIX_C_SOURCE' or `_SVID_SOURCE' as well has no
32449 -effect.
32451 - Note, however, that the features of `_BSD_SOURCE' are not a subset of
32452 -any of the other feature test macros supported. This is because it
32453 -defines BSD features that take precedence over the POSIX features that
32454 -are requested by the other macros. For this reason, defining
32455 -`_BSD_SOURCE' in addition to the other feature test macros does have an
32456 -effect: it causes the BSD features to take priority over the conflicting
32457 -POSIX features.
32459 -\x1f
32460 -File: libc.info, Node: Roadmap to the Manual, Prev: Using the Library, Up: Introduction
32462 -Roadmap to the Manual
32463 -=====================
32465 - Here is an overview of the contents of the remaining chapters of
32466 -this manual.
32468 - * *Note Error Reporting::, describes how errors detected by the
32469 - library are reported.
32471 - * *Note Language Features::, contains information about library
32472 - support for standard parts of the C language, including things
32473 - like the `sizeof' operator and the symbolic constant `NULL', how
32474 - to write functions accepting variable numbers of arguments, and
32475 - constants describing the ranges and other properties of the
32476 - numerical types. There is also a simple debugging mechanism which
32477 - allows you to put assertions in your code, and have diagnostic
32478 - messages printed if the tests fail.
32480 - * *Note Memory::, describes the GNU library's facilities for
32481 - managing and using virtual and real memory, including dynamic
32482 - allocation of virtual memory. If you do not know in advance how
32483 - much memory your program needs, you can allocate it dynamically
32484 - instead, and manipulate it via pointers.
32486 - * *Note Character Handling::, contains information about character
32487 - classification functions (such as `isspace') and functions for
32488 - performing case conversion.
32490 - * *Note String and Array Utilities::, has descriptions of functions
32491 - for manipulating strings (null-terminated character arrays) and
32492 - general byte arrays, including operations such as copying and
32493 - comparison.
32495 - * *Note I/O Overview::, gives an overall look at the input and output
32496 - facilities in the library, and contains information about basic
32497 - concepts such as file names.
32499 - * *Note I/O on Streams::, describes I/O operations involving streams
32500 - (or `FILE *' objects). These are the normal C library functions
32501 - from `stdio.h'.
32503 - * *Note Low-Level I/O::, contains information about I/O operations
32504 - on file descriptors. File descriptors are a lower-level mechanism
32505 - specific to the Unix family of operating systems.
32507 - * *Note File System Interface::, has descriptions of operations on
32508 - entire files, such as functions for deleting and renaming them and
32509 - for creating new directories. This chapter also contains
32510 - information about how you can access the attributes of a file,
32511 - such as its owner and file protection modes.
32513 - * *Note Pipes and FIFOs::, contains information about simple
32514 - interprocess communication mechanisms. Pipes allow communication
32515 - between two related processes (such as between a parent and
32516 - child), while FIFOs allow communication between processes sharing
32517 - a common file system on the same machine.
32519 - * *Note Sockets::, describes a more complicated interprocess
32520 - communication mechanism that allows processes running on different
32521 - machines to communicate over a network. This chapter also
32522 - contains information about Internet host addressing and how to use
32523 - the system network databases.
32525 - * *Note Low-Level Terminal Interface::, describes how you can change
32526 - the attributes of a terminal device. If you want to disable echo
32527 - of characters typed by the user, for example, read this chapter.
32529 - * *Note Mathematics::, contains information about the math library
32530 - functions. These include things like random-number generators and
32531 - remainder functions on integers as well as the usual trigonometric
32532 - and exponential functions on floating-point numbers.
32534 - * *Note Low-Level Arithmetic Functions: Arithmetic, describes
32535 - functions for simple arithmetic, analysis of floating-point
32536 - values, and reading numbers from strings.
32538 - * *Note Searching and Sorting::, contains information about functions
32539 - for searching and sorting arrays. You can use these functions on
32540 - any kind of array by providing an appropriate comparison function.
32542 - * *Note Pattern Matching::, presents functions for matching regular
32543 - expressions and shell file name patterns, and for expanding words
32544 - as the shell does.
32546 - * *Note Date and Time::, describes functions for measuring both
32547 - calendar time and CPU time, as well as functions for setting
32548 - alarms and timers.
32550 - * *Note Character Set Handling::, contains information about
32551 - manipulating characters and strings using character sets larger
32552 - than will fit in the usual `char' data type.
32554 - * *Note Locales::, describes how selecting a particular country or
32555 - language affects the behavior of the library. For example, the
32556 - locale affects collation sequences for strings and how monetary
32557 - values are formatted.
32559 - * *Note Non-Local Exits::, contains descriptions of the `setjmp' and
32560 - `longjmp' functions. These functions provide a facility for
32561 - `goto'-like jumps which can jump from one function to another.
32563 - * *Note Signal Handling::, tells you all about signals--what they
32564 - are, how to establish a handler that is called when a particular
32565 - kind of signal is delivered, and how to prevent signals from
32566 - arriving during critical sections of your program.
32568 - * *Note Program Basics::, tells how your programs can access their
32569 - command-line arguments and environment variables.
32571 - * *Note Processes::, contains information about how to start new
32572 - processes and run programs.
32574 - * *Note Job Control::, describes functions for manipulating process
32575 - groups and the controlling terminal. This material is probably
32576 - only of interest if you are writing a shell or other program which
32577 - handles job control specially.
32579 - * *Note Name Service Switch::, describes the services which are
32580 - available for looking up names in the system databases, how to
32581 - determine which service is used for which database, and how these
32582 - services are implemented so that contributors can design their own
32583 - services.
32585 - * *Note User Database::, and *Note Group Database::, tell you how to
32586 - access the system user and group databases.
32588 - * *Note System Management::, describes functions for controlling and
32589 - getting information about the hardware and software configuration
32590 - your program is executing under.
32592 - * *Note System Configuration::, tells you how you can get
32593 - information about various operating system limits. Most of these
32594 - parameters are provided for compatibility with POSIX.
32596 - * *Note Library Summary::, gives a summary of all the functions,
32597 - variables, and macros in the library, with complete data types and
32598 - function prototypes, and says what standard or system each is
32599 - derived from.
32601 - * *Note Maintenance::, explains how to build and install the GNU C
32602 - library on your system, how to report any bugs you might find, and
32603 - how to add new functions or port the library to a new system.
32605 - If you already know the name of the facility you are interested in,
32606 -you can look it up in *Note Library Summary::. This gives you a
32607 -summary of its syntax and a pointer to where you can find a more
32608 -detailed description. This appendix is particularly useful if you just
32609 -want to verify the order and type of arguments to a function, for
32610 -example. It also tells you what standard or system each function,
32611 -variable, or macro is derived from.
32613 -\x1f
32614 -File: libc.info, Node: Error Reporting, Next: Memory, Prev: Introduction, Up: Top
32616 -Error Reporting
32617 -***************
32619 - Many functions in the GNU C library detect and report error
32620 -conditions, and sometimes your programs need to check for these error
32621 -conditions. For example, when you open an input file, you should
32622 -verify that the file was actually opened correctly, and print an error
32623 -message or take other appropriate action if the call to the library
32624 -function failed.
32626 - This chapter describes how the error reporting facility works. Your
32627 -program should include the header file `errno.h' to use this facility.
32629 -* Menu:
32631 -* Checking for Errors:: How errors are reported by library functions.
32632 -* Error Codes:: Error code macros; all of these expand
32633 - into integer constant values.
32634 -* Error Messages:: Mapping error codes onto error messages.
32636 -\x1f
32637 -File: libc.info, Node: Checking for Errors, Next: Error Codes, Up: Error Reporting
32639 -Checking for Errors
32640 -===================
32642 - Most library functions return a special value to indicate that they
32643 -have failed. The special value is typically `-1', a null pointer, or a
32644 -constant such as `EOF' that is defined for that purpose. But this
32645 -return value tells you only that an error has occurred. To find out
32646 -what kind of error it was, you need to look at the error code stored in
32647 -the variable `errno'. This variable is declared in the header file
32648 -`errno.h'.
32650 - - Variable: volatile int errno
32651 - The variable `errno' contains the system error number. You can
32652 - change the value of `errno'.
32654 - Since `errno' is declared `volatile', it might be changed
32655 - asynchronously by a signal handler; see *Note Defining Handlers::.
32656 - However, a properly written signal handler saves and restores the
32657 - value of `errno', so you generally do not need to worry about this
32658 - possibility except when writing signal handlers.
32660 - The initial value of `errno' at program startup is zero. Many
32661 - library functions are guaranteed to set it to certain nonzero
32662 - values when they encounter certain kinds of errors. These error
32663 - conditions are listed for each function. These functions do not
32664 - change `errno' when they succeed; thus, the value of `errno' after
32665 - a successful call is not necessarily zero, and you should not use
32666 - `errno' to determine _whether_ a call failed. The proper way to
32667 - do that is documented for each function. _If_ the call failed,
32668 - you can examine `errno'.
32670 - Many library functions can set `errno' to a nonzero value as a
32671 - result of calling other library functions which might fail. You
32672 - should assume that any library function might alter `errno' when
32673 - the function returns an error.
32675 - *Portability Note:* ISO C specifies `errno' as a "modifiable
32676 - lvalue" rather than as a variable, permitting it to be implemented
32677 - as a macro. For example, its expansion might involve a function
32678 - call, like `*_errno ()'. In fact, that is what it is on the GNU
32679 - system itself. The GNU library, on non-GNU systems, does whatever
32680 - is right for the particular system.
32682 - There are a few library functions, like `sqrt' and `atan', that
32683 - return a perfectly legitimate value in case of an error, but also
32684 - set `errno'. For these functions, if you want to check to see
32685 - whether an error occurred, the recommended method is to set `errno'
32686 - to zero before calling the function, and then check its value
32687 - afterward.
32689 - All the error codes have symbolic names; they are macros defined in
32690 -`errno.h'. The names start with `E' and an upper-case letter or digit;
32691 -you should consider names of this form to be reserved names. *Note
32692 -Reserved Names::.
32694 - The error code values are all positive integers and are all distinct,
32695 -with one exception: `EWOULDBLOCK' and `EAGAIN' are the same. Since the
32696 -values are distinct, you can use them as labels in a `switch'
32697 -statement; just don't use both `EWOULDBLOCK' and `EAGAIN'. Your
32698 -program should not make any other assumptions about the specific values
32699 -of these symbolic constants.
32701 - The value of `errno' doesn't necessarily have to correspond to any
32702 -of these macros, since some library functions might return other error
32703 -codes of their own for other situations. The only values that are
32704 -guaranteed to be meaningful for a particular library function are the
32705 -ones that this manual lists for that function.
32707 - On non-GNU systems, almost any system call can return `EFAULT' if it
32708 -is given an invalid pointer as an argument. Since this could only
32709 -happen as a result of a bug in your program, and since it will not
32710 -happen on the GNU system, we have saved space by not mentioning
32711 -`EFAULT' in the descriptions of individual functions.
32713 - In some Unix systems, many system calls can also return `EFAULT' if
32714 -given as an argument a pointer into the stack, and the kernel for some
32715 -obscure reason fails in its attempt to extend the stack. If this ever
32716 -happens, you should probably try using statically or dynamically
32717 -allocated memory instead of stack memory on that system.
32719 diff -u -udbrN glibc-2.3.2/manual/libc.info-20 glibc-2.3.2-200304020432/manual/libc.info-20
32720 --- glibc-2.3.2/manual/libc.info-20 Sat Mar 1 02:39:41 2003
32721 +++ glibc-2.3.2-200304020432/manual/libc.info-20 Thu Jan 1 01:00:00 1970
32722 @@ -1,1137 +0,0 @@
32723 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
32725 -INFO-DIR-SECTION GNU libraries
32726 -START-INFO-DIR-ENTRY
32727 -* Libc: (libc). C library.
32728 -END-INFO-DIR-ENTRY
32730 - This file documents the GNU C library.
32732 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
32733 -Reference Manual', for Version 2.3.x.
32735 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
32736 -Free Software Foundation, Inc.
32738 - Permission is granted to copy, distribute and/or modify this document
32739 -under the terms of the GNU Free Documentation License, Version 1.1 or
32740 -any later version published by the Free Software Foundation; with the
32741 -Invariant Sections being "Free Software Needs Free Documentation" and
32742 -"GNU Lesser General Public License", the Front-Cover texts being (a)
32743 -(see below), and with the Back-Cover Texts being (b) (see below). A
32744 -copy of the license is included in the section entitled "GNU Free
32745 -Documentation License".
32747 - (a) The FSF's Front-Cover Text is:
32749 - A GNU Manual
32751 - (b) The FSF's Back-Cover Text is:
32753 - You have freedom to copy and modify this GNU Manual, like GNU
32754 -software. Copies published by the Free Software Foundation raise
32755 -funds for GNU development.
32757 -\x1f
32758 -File: libc.info, Node: Portable Positioning, Next: Stream Buffering, Prev: File Positioning, Up: I/O on Streams
32760 -Portable File-Position Functions
32761 -================================
32763 - On the GNU system, the file position is truly a character count. You
32764 -can specify any character count value as an argument to `fseek' or
32765 -`fseeko' and get reliable results for any random access file. However,
32766 -some ISO C systems do not represent file positions in this way.
32768 - On some systems where text streams truly differ from binary streams,
32769 -it is impossible to represent the file position of a text stream as a
32770 -count of characters from the beginning of the file. For example, the
32771 -file position on some systems must encode both a record offset within
32772 -the file, and a character offset within the record.
32774 - As a consequence, if you want your programs to be portable to these
32775 -systems, you must observe certain rules:
32777 - * The value returned from `ftell' on a text stream has no predictable
32778 - relationship to the number of characters you have read so far.
32779 - The only thing you can rely on is that you can use it subsequently
32780 - as the OFFSET argument to `fseek' or `fseeko' to move back to the
32781 - same file position.
32783 - * In a call to `fseek' or `fseeko' on a text stream, either the
32784 - OFFSET must be zero, or WHENCE must be `SEEK_SET' and and the
32785 - OFFSET must be the result of an earlier call to `ftell' on the
32786 - same stream.
32788 - * The value of the file position indicator of a text stream is
32789 - undefined while there are characters that have been pushed back
32790 - with `ungetc' that haven't been read or discarded. *Note
32791 - Unreading::.
32793 - But even if you observe these rules, you may still have trouble for
32794 -long files, because `ftell' and `fseek' use a `long int' value to
32795 -represent the file position. This type may not have room to encode all
32796 -the file positions in a large file. Using the `ftello' and `fseeko'
32797 -functions might help here since the `off_t' type is expected to be able
32798 -to hold all file position values but this still does not help to handle
32799 -additional information which must be associated with a file position.
32801 - So if you do want to support systems with peculiar encodings for the
32802 -file positions, it is better to use the functions `fgetpos' and
32803 -`fsetpos' instead. These functions represent the file position using
32804 -the data type `fpos_t', whose internal representation varies from
32805 -system to system.
32807 - These symbols are declared in the header file `stdio.h'.
32809 - - Data Type: fpos_t
32810 - This is the type of an object that can encode information about the
32811 - file position of a stream, for use by the functions `fgetpos' and
32812 - `fsetpos'.
32814 - In the GNU system, `fpos_t' is an opaque data structure that
32815 - contains internal data to represent file offset and conversion
32816 - state information. In other systems, it might have a different
32817 - internal representation.
32819 - When compiling with `_FILE_OFFSET_BITS == 64' on a 32 bit machine
32820 - this type is in fact equivalent to `fpos64_t' since the LFS
32821 - interface transparently replaces the old interface.
32823 - - Data Type: fpos64_t
32824 - This is the type of an object that can encode information about the
32825 - file position of a stream, for use by the functions `fgetpos64' and
32826 - `fsetpos64'.
32828 - In the GNU system, `fpos64_t' is an opaque data structure that
32829 - contains internal data to represent file offset and conversion
32830 - state information. In other systems, it might have a different
32831 - internal representation.
32833 - - Function: int fgetpos (FILE *STREAM, fpos_t *POSITION)
32834 - This function stores the value of the file position indicator for
32835 - the stream STREAM in the `fpos_t' object pointed to by POSITION.
32836 - If successful, `fgetpos' returns zero; otherwise it returns a
32837 - nonzero value and stores an implementation-defined positive value
32838 - in `errno'.
32840 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
32841 - 32 bit system the function is in fact `fgetpos64'. I.e., the LFS
32842 - interface transparently replaces the old interface.
32844 - - Function: int fgetpos64 (FILE *STREAM, fpos64_t *POSITION)
32845 - This function is similar to `fgetpos' but the file position is
32846 - returned in a variable of type `fpos64_t' to which POSITION points.
32848 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' on a 32
32849 - bits machine this function is available under the name `fgetpos'
32850 - and so transparently replaces the old interface.
32852 - - Function: int fsetpos (FILE *STREAM, const fpos_t *POSITION)
32853 - This function sets the file position indicator for the stream
32854 - STREAM to the position POSITION, which must have been set by a
32855 - previous call to `fgetpos' on the same stream. If successful,
32856 - `fsetpos' clears the end-of-file indicator on the stream, discards
32857 - any characters that were "pushed back" by the use of `ungetc', and
32858 - returns a value of zero. Otherwise, `fsetpos' returns a nonzero
32859 - value and stores an implementation-defined positive value in
32860 - `errno'.
32862 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
32863 - 32 bit system the function is in fact `fsetpos64'. I.e., the LFS
32864 - interface transparently replaces the old interface.
32866 - - Function: int fsetpos64 (FILE *STREAM, const fpos64_t *POSITION)
32867 - This function is similar to `fsetpos' but the file position used
32868 - for positioning is provided in a variable of type `fpos64_t' to
32869 - which POSITION points.
32871 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' on a 32
32872 - bits machine this function is available under the name `fsetpos'
32873 - and so transparently replaces the old interface.
32875 -\x1f
32876 -File: libc.info, Node: Stream Buffering, Next: Other Kinds of Streams, Prev: Portable Positioning, Up: I/O on Streams
32878 -Stream Buffering
32879 -================
32881 - Characters that are written to a stream are normally accumulated and
32882 -transmitted asynchronously to the file in a block, instead of appearing
32883 -as soon as they are output by the application program. Similarly,
32884 -streams often retrieve input from the host environment in blocks rather
32885 -than on a character-by-character basis. This is called "buffering".
32887 - If you are writing programs that do interactive input and output
32888 -using streams, you need to understand how buffering works when you
32889 -design the user interface to your program. Otherwise, you might find
32890 -that output (such as progress or prompt messages) doesn't appear when
32891 -you intended it to, or displays some other unexpected behavior.
32893 - This section deals only with controlling when characters are
32894 -transmitted between the stream and the file or device, and _not_ with
32895 -how things like echoing, flow control, and the like are handled on
32896 -specific classes of devices. For information on common control
32897 -operations on terminal devices, see *Note Low-Level Terminal
32898 -Interface::.
32900 - You can bypass the stream buffering facilities altogether by using
32901 -the low-level input and output functions that operate on file
32902 -descriptors instead. *Note Low-Level I/O::.
32904 -* Menu:
32906 -* Buffering Concepts:: Terminology is defined here.
32907 -* Flushing Buffers:: How to ensure that output buffers are flushed.
32908 -* Controlling Buffering:: How to specify what kind of buffering to use.
32910 -\x1f
32911 -File: libc.info, Node: Buffering Concepts, Next: Flushing Buffers, Up: Stream Buffering
32913 -Buffering Concepts
32914 -------------------
32916 - There are three different kinds of buffering strategies:
32918 - * Characters written to or read from an "unbuffered" stream are
32919 - transmitted individually to or from the file as soon as possible.
32921 - * Characters written to a "line buffered" stream are transmitted to
32922 - the file in blocks when a newline character is encountered.
32924 - * Characters written to or read from a "fully buffered" stream are
32925 - transmitted to or from the file in blocks of arbitrary size.
32927 - Newly opened streams are normally fully buffered, with one
32928 -exception: a stream connected to an interactive device such as a
32929 -terminal is initially line buffered. *Note Controlling Buffering::,
32930 -for information on how to select a different kind of buffering.
32931 -Usually the automatic selection gives you the most convenient kind of
32932 -buffering for the file or device you open.
32934 - The use of line buffering for interactive devices implies that output
32935 -messages ending in a newline will appear immediately--which is usually
32936 -what you want. Output that doesn't end in a newline might or might not
32937 -show up immediately, so if you want them to appear immediately, you
32938 -should flush buffered output explicitly with `fflush', as described in
32939 -*Note Flushing Buffers::.
32941 -\x1f
32942 -File: libc.info, Node: Flushing Buffers, Next: Controlling Buffering, Prev: Buffering Concepts, Up: Stream Buffering
32944 -Flushing Buffers
32945 -----------------
32947 - "Flushing" output on a buffered stream means transmitting all
32948 -accumulated characters to the file. There are many circumstances when
32949 -buffered output on a stream is flushed automatically:
32951 - * When you try to do output and the output buffer is full.
32953 - * When the stream is closed. *Note Closing Streams::.
32955 - * When the program terminates by calling `exit'. *Note Normal
32956 - Termination::.
32958 - * When a newline is written, if the stream is line buffered.
32960 - * Whenever an input operation on _any_ stream actually reads data
32961 - from its file.
32963 - If you want to flush the buffered output at another time, call
32964 -`fflush', which is declared in the header file `stdio.h'.
32966 - - Function: int fflush (FILE *STREAM)
32967 - This function causes any buffered output on STREAM to be delivered
32968 - to the file. If STREAM is a null pointer, then `fflush' causes
32969 - buffered output on _all_ open output streams to be flushed.
32971 - This function returns `EOF' if a write error occurs, or zero
32972 - otherwise.
32974 - - Function: int fflush_unlocked (FILE *STREAM)
32975 - The `fflush_unlocked' function is equivalent to the `fflush'
32976 - function except that it does not implicitly lock the stream.
32978 - The `fflush' function can be used to flush all streams currently
32979 -opened. While this is useful in some situations it does often more than
32980 -necessary since it might be done in situations when terminal input is
32981 -required and the program wants to be sure that all output is visible on
32982 -the terminal. But this means that only line buffered streams have to be
32983 -flushed. Solaris introduced a function especially for this. It was
32984 -always available in the GNU C library in some form but never officially
32985 -exported.
32987 - - Function: void _flushlbf (void)
32988 - The `_flushlbf' function flushes all line buffered streams
32989 - currently opened.
32991 - This function is declared in the `stdio_ext.h' header.
32993 - *Compatibility Note:* Some brain-damaged operating systems have been
32994 -known to be so thoroughly fixated on line-oriented input and output
32995 -that flushing a line buffered stream causes a newline to be written!
32996 -Fortunately, this "feature" seems to be becoming less common. You do
32997 -not need to worry about this in the GNU system.
32999 - In some situations it might be useful to not flush the output pending
33000 -for a stream but instead simply forget it. If transmission is costly
33001 -and the output is not needed anymore this is valid reasoning. In this
33002 -situation a non-standard function introduced in Solaris and available in
33003 -the GNU C library can be used.
33005 - - Function: void __fpurge (FILE *STREAM)
33006 - The `__fpurge' function causes the buffer of the stream STREAM to
33007 - be emptied. If the stream is currently in read mode all input in
33008 - the buffer is lost. If the stream is in output mode the buffered
33009 - output is not written to the device (or whatever other underlying
33010 - storage) and the buffer the cleared.
33012 - This function is declared in `stdio_ext.h'.
33014 -\x1f
33015 -File: libc.info, Node: Controlling Buffering, Prev: Flushing Buffers, Up: Stream Buffering
33017 -Controlling Which Kind of Buffering
33018 ------------------------------------
33020 - After opening a stream (but before any other operations have been
33021 -performed on it), you can explicitly specify what kind of buffering you
33022 -want it to have using the `setvbuf' function.
33024 - The facilities listed in this section are declared in the header
33025 -file `stdio.h'.
33027 - - Function: int setvbuf (FILE *STREAM, char *BUF, int MODE, size_t
33028 - SIZE)
33029 - This function is used to specify that the stream STREAM should
33030 - have the buffering mode MODE, which can be either `_IOFBF' (for
33031 - full buffering), `_IOLBF' (for line buffering), or `_IONBF' (for
33032 - unbuffered input/output).
33034 - If you specify a null pointer as the BUF argument, then `setvbuf'
33035 - allocates a buffer itself using `malloc'. This buffer will be
33036 - freed when you close the stream.
33038 - Otherwise, BUF should be a character array that can hold at least
33039 - SIZE characters. You should not free the space for this array as
33040 - long as the stream remains open and this array remains its buffer.
33041 - You should usually either allocate it statically, or `malloc'
33042 - (*note Unconstrained Allocation::) the buffer. Using an automatic
33043 - array is not a good idea unless you close the file before exiting
33044 - the block that declares the array.
33046 - While the array remains a stream buffer, the stream I/O functions
33047 - will use the buffer for their internal purposes. You shouldn't
33048 - try to access the values in the array directly while the stream is
33049 - using it for buffering.
33051 - The `setvbuf' function returns zero on success, or a nonzero value
33052 - if the value of MODE is not valid or if the request could not be
33053 - honored.
33055 - - Macro: int _IOFBF
33056 - The value of this macro is an integer constant expression that can
33057 - be used as the MODE argument to the `setvbuf' function to specify
33058 - that the stream should be fully buffered.
33060 - - Macro: int _IOLBF
33061 - The value of this macro is an integer constant expression that can
33062 - be used as the MODE argument to the `setvbuf' function to specify
33063 - that the stream should be line buffered.
33065 - - Macro: int _IONBF
33066 - The value of this macro is an integer constant expression that can
33067 - be used as the MODE argument to the `setvbuf' function to specify
33068 - that the stream should be unbuffered.
33070 - - Macro: int BUFSIZ
33071 - The value of this macro is an integer constant expression that is
33072 - good to use for the SIZE argument to `setvbuf'. This value is
33073 - guaranteed to be at least `256'.
33075 - The value of `BUFSIZ' is chosen on each system so as to make stream
33076 - I/O efficient. So it is a good idea to use `BUFSIZ' as the size
33077 - for the buffer when you call `setvbuf'.
33079 - Actually, you can get an even better value to use for the buffer
33080 - size by means of the `fstat' system call: it is found in the
33081 - `st_blksize' field of the file attributes. *Note Attribute
33082 - Meanings::.
33084 - Sometimes people also use `BUFSIZ' as the allocation size of
33085 - buffers used for related purposes, such as strings used to receive
33086 - a line of input with `fgets' (*note Character Input::). There is
33087 - no particular reason to use `BUFSIZ' for this instead of any other
33088 - integer, except that it might lead to doing I/O in chunks of an
33089 - efficient size.
33091 - - Function: void setbuf (FILE *STREAM, char *BUF)
33092 - If BUF is a null pointer, the effect of this function is
33093 - equivalent to calling `setvbuf' with a MODE argument of `_IONBF'.
33094 - Otherwise, it is equivalent to calling `setvbuf' with BUF, and a
33095 - MODE of `_IOFBF' and a SIZE argument of `BUFSIZ'.
33097 - The `setbuf' function is provided for compatibility with old code;
33098 - use `setvbuf' in all new programs.
33100 - - Function: void setbuffer (FILE *STREAM, char *BUF, size_t SIZE)
33101 - If BUF is a null pointer, this function makes STREAM unbuffered.
33102 - Otherwise, it makes STREAM fully buffered using BUF as the buffer.
33103 - The SIZE argument specifies the length of BUF.
33105 - This function is provided for compatibility with old BSD code. Use
33106 - `setvbuf' instead.
33108 - - Function: void setlinebuf (FILE *STREAM)
33109 - This function makes STREAM be line buffered, and allocates the
33110 - buffer for you.
33112 - This function is provided for compatibility with old BSD code. Use
33113 - `setvbuf' instead.
33115 - It is possible to query whether a given stream is line buffered or
33116 -not using a non-standard function introduced in Solaris and available
33117 -in the GNU C library.
33119 - - Function: int __flbf (FILE *STREAM)
33120 - The `__flbf' function will return a nonzero value in case the
33121 - stream STREAM is line buffered. Otherwise the return value is
33122 - zero.
33124 - This function is declared in the `stdio_ext.h' header.
33126 - Two more extensions allow to determine the size of the buffer and how
33127 -much of it is used. These functions were also introduced in Solaris.
33129 - - Function: size_t __fbufsize (FILE *STREAM)
33130 - The `__fbufsize' function return the size of the buffer in the
33131 - stream STREAM. This value can be used to optimize the use of the
33132 - stream.
33134 - This function is declared in the `stdio_ext.h' header.
33136 - - Function: size_t __fpending (FILE *STREAM) The `__fpending'
33137 - function returns the number of bytes currently in the output
33138 - buffer. For wide-oriented stream the measuring unit is wide
33139 - characters. This function should not be used on buffers in read
33140 - mode or opened read-only.
33142 - This function is declared in the `stdio_ext.h' header.
33144 -\x1f
33145 -File: libc.info, Node: Other Kinds of Streams, Next: Formatted Messages, Prev: Stream Buffering, Up: I/O on Streams
33147 -Other Kinds of Streams
33148 -======================
33150 - The GNU library provides ways for you to define additional kinds of
33151 -streams that do not necessarily correspond to an open file.
33153 - One such type of stream takes input from or writes output to a
33154 -string. These kinds of streams are used internally to implement the
33155 -`sprintf' and `sscanf' functions. You can also create such a stream
33156 -explicitly, using the functions described in *Note String Streams::.
33158 - More generally, you can define streams that do input/output to
33159 -arbitrary objects using functions supplied by your program. This
33160 -protocol is discussed in *Note Custom Streams::.
33162 - *Portability Note:* The facilities described in this section are
33163 -specific to GNU. Other systems or C implementations might or might not
33164 -provide equivalent functionality.
33166 -* Menu:
33168 -* String Streams:: Streams that get data from or put data in
33169 - a string or memory buffer.
33170 -* Obstack Streams:: Streams that store data in an obstack.
33171 -* Custom Streams:: Defining your own streams with an arbitrary
33172 - input data source and/or output data sink.
33174 -\x1f
33175 -File: libc.info, Node: String Streams, Next: Obstack Streams, Up: Other Kinds of Streams
33177 -String Streams
33178 ---------------
33180 - The `fmemopen' and `open_memstream' functions allow you to do I/O to
33181 -a string or memory buffer. These facilities are declared in `stdio.h'.
33183 - - Function: FILE * fmemopen (void *BUF, size_t SIZE, const char
33184 - *OPENTYPE)
33185 - This function opens a stream that allows the access specified by
33186 - the OPENTYPE argument, that reads from or writes to the buffer
33187 - specified by the argument BUF. This array must be at least SIZE
33188 - bytes long.
33190 - If you specify a null pointer as the BUF argument, `fmemopen'
33191 - dynamically allocates an array SIZE bytes long (as with `malloc';
33192 - *note Unconstrained Allocation::). This is really only useful if
33193 - you are going to write things to the buffer and then read them back
33194 - in again, because you have no way of actually getting a pointer to
33195 - the buffer (for this, try `open_memstream', below). The buffer is
33196 - freed when the stream is closed.
33198 - The argument OPENTYPE is the same as in `fopen' (*note Opening
33199 - Streams::). If the OPENTYPE specifies append mode, then the
33200 - initial file position is set to the first null character in the
33201 - buffer. Otherwise the initial file position is at the beginning
33202 - of the buffer.
33204 - When a stream open for writing is flushed or closed, a null
33205 - character (zero byte) is written at the end of the buffer if it
33206 - fits. You should add an extra byte to the SIZE argument to
33207 - account for this. Attempts to write more than SIZE bytes to the
33208 - buffer result in an error.
33210 - For a stream open for reading, null characters (zero bytes) in the
33211 - buffer do not count as "end of file". Read operations indicate
33212 - end of file only when the file position advances past SIZE bytes.
33213 - So, if you want to read characters from a null-terminated string,
33214 - you should supply the length of the string as the SIZE argument.
33216 - Here is an example of using `fmemopen' to create a stream for
33217 -reading from a string:
33219 - #include <stdio.h>
33221 - static char buffer[] = "foobar";
33223 - int
33224 - main (void)
33226 - int ch;
33227 - FILE *stream;
33229 - stream = fmemopen (buffer, strlen (buffer), "r");
33230 - while ((ch = fgetc (stream)) != EOF)
33231 - printf ("Got %c\n", ch);
33232 - fclose (stream);
33234 - return 0;
33237 - This program produces the following output:
33239 - Got f
33240 - Got o
33241 - Got o
33242 - Got b
33243 - Got a
33244 - Got r
33246 - - Function: FILE * open_memstream (char **PTR, size_t *SIZELOC)
33247 - This function opens a stream for writing to a buffer. The buffer
33248 - is allocated dynamically (as with `malloc'; *note Unconstrained
33249 - Allocation::) and grown as necessary.
33251 - When the stream is closed with `fclose' or flushed with `fflush',
33252 - the locations PTR and SIZELOC are updated to contain the pointer
33253 - to the buffer and its size. The values thus stored remain valid
33254 - only as long as no further output on the stream takes place. If
33255 - you do more output, you must flush the stream again to store new
33256 - values before you use them again.
33258 - A null character is written at the end of the buffer. This null
33259 - character is _not_ included in the size value stored at SIZELOC.
33261 - You can move the stream's file position with `fseek' or `fseeko'
33262 - (*note File Positioning::). Moving the file position past the end
33263 - of the data already written fills the intervening space with
33264 - zeroes.
33266 - Here is an example of using `open_memstream':
33268 - #include <stdio.h>
33270 - int
33271 - main (void)
33273 - char *bp;
33274 - size_t size;
33275 - FILE *stream;
33277 - stream = open_memstream (&bp, &size);
33278 - fprintf (stream, "hello");
33279 - fflush (stream);
33280 - printf ("buf = `%s', size = %d\n", bp, size);
33281 - fprintf (stream, ", world");
33282 - fclose (stream);
33283 - printf ("buf = `%s', size = %d\n", bp, size);
33285 - return 0;
33288 - This program produces the following output:
33290 - buf = `hello', size = 5
33291 - buf = `hello, world', size = 12
33293 -\x1f
33294 -File: libc.info, Node: Obstack Streams, Next: Custom Streams, Prev: String Streams, Up: Other Kinds of Streams
33296 -Obstack Streams
33297 ----------------
33299 - You can open an output stream that puts it data in an obstack.
33300 -*Note Obstacks::.
33302 - - Function: FILE * open_obstack_stream (struct obstack *OBSTACK)
33303 - This function opens a stream for writing data into the obstack
33304 - OBSTACK. This starts an object in the obstack and makes it grow
33305 - as data is written (*note Growing Objects::).
33307 - Calling `fflush' on this stream updates the current size of the
33308 - object to match the amount of data that has been written. After a
33309 - call to `fflush', you can examine the object temporarily.
33311 - You can move the file position of an obstack stream with `fseek' or
33312 - `fseeko' (*note File Positioning::). Moving the file position past
33313 - the end of the data written fills the intervening space with zeros.
33315 - To make the object permanent, update the obstack with `fflush', and
33316 - then use `obstack_finish' to finalize the object and get its
33317 - address. The following write to the stream starts a new object in
33318 - the obstack, and later writes add to that object until you do
33319 - another `fflush' and `obstack_finish'.
33321 - But how do you find out how long the object is? You can get the
33322 - length in bytes by calling `obstack_object_size' (*note Status of
33323 - an Obstack::), or you can null-terminate the object like this:
33325 - obstack_1grow (OBSTACK, 0);
33327 - Whichever one you do, you must do it _before_ calling
33328 - `obstack_finish'. (You can do both if you wish.)
33330 - Here is a sample function that uses `open_obstack_stream':
33332 - char *
33333 - make_message_string (const char *a, int b)
33335 - FILE *stream = open_obstack_stream (&message_obstack);
33336 - output_task (stream);
33337 - fprintf (stream, ": ");
33338 - fprintf (stream, a, b);
33339 - fprintf (stream, "\n");
33340 - fclose (stream);
33341 - obstack_1grow (&message_obstack, 0);
33342 - return obstack_finish (&message_obstack);
33345 -\x1f
33346 -File: libc.info, Node: Custom Streams, Prev: Obstack Streams, Up: Other Kinds of Streams
33348 -Programming Your Own Custom Streams
33349 ------------------------------------
33351 - This section describes how you can make a stream that gets input
33352 -from an arbitrary data source or writes output to an arbitrary data sink
33353 -programmed by you. We call these "custom streams". The functions and
33354 -types described here are all GNU extensions.
33356 -* Menu:
33358 -* Streams and Cookies:: The "cookie" records where to fetch or
33359 - store data that is read or written.
33360 -* Hook Functions:: How you should define the four "hook
33361 - functions" that a custom stream needs.
33363 -\x1f
33364 -File: libc.info, Node: Streams and Cookies, Next: Hook Functions, Up: Custom Streams
33366 -Custom Streams and Cookies
33367 -..........................
33369 - Inside every custom stream is a special object called the "cookie".
33370 -This is an object supplied by you which records where to fetch or store
33371 -the data read or written. It is up to you to define a data type to use
33372 -for the cookie. The stream functions in the library never refer
33373 -directly to its contents, and they don't even know what the type is;
33374 -they record its address with type `void *'.
33376 - To implement a custom stream, you must specify _how_ to fetch or
33377 -store the data in the specified place. You do this by defining "hook
33378 -functions" to read, write, change "file position", and close the
33379 -stream. All four of these functions will be passed the stream's cookie
33380 -so they can tell where to fetch or store the data. The library
33381 -functions don't know what's inside the cookie, but your functions will
33382 -know.
33384 - When you create a custom stream, you must specify the cookie pointer,
33385 -and also the four hook functions stored in a structure of type
33386 -`cookie_io_functions_t'.
33388 - These facilities are declared in `stdio.h'.
33390 - - Data Type: cookie_io_functions_t
33391 - This is a structure type that holds the functions that define the
33392 - communications protocol between the stream and its cookie. It has
33393 - the following members:
33395 - `cookie_read_function_t *read'
33396 - This is the function that reads data from the cookie. If the
33397 - value is a null pointer instead of a function, then read
33398 - operations on this stream always return `EOF'.
33400 - `cookie_write_function_t *write'
33401 - This is the function that writes data to the cookie. If the
33402 - value is a null pointer instead of a function, then data
33403 - written to the stream is discarded.
33405 - `cookie_seek_function_t *seek'
33406 - This is the function that performs the equivalent of file
33407 - positioning on the cookie. If the value is a null pointer
33408 - instead of a function, calls to `fseek' or `fseeko' on this
33409 - stream can only seek to locations within the buffer; any
33410 - attempt to seek outside the buffer will return an `ESPIPE'
33411 - error.
33413 - `cookie_close_function_t *close'
33414 - This function performs any appropriate cleanup on the cookie
33415 - when closing the stream. If the value is a null pointer
33416 - instead of a function, nothing special is done to close the
33417 - cookie when the stream is closed.
33419 - - Function: FILE * fopencookie (void *COOKIE, const char *OPENTYPE,
33420 - cookie_io_functions_t IO-FUNCTIONS)
33421 - This function actually creates the stream for communicating with
33422 - the COOKIE using the functions in the IO-FUNCTIONS argument. The
33423 - OPENTYPE argument is interpreted as for `fopen'; see *Note Opening
33424 - Streams::. (But note that the "truncate on open" option is
33425 - ignored.) The new stream is fully buffered.
33427 - The `fopencookie' function returns the newly created stream, or a
33428 - null pointer in case of an error.
33430 -\x1f
33431 -File: libc.info, Node: Hook Functions, Prev: Streams and Cookies, Up: Custom Streams
33433 -Custom Stream Hook Functions
33434 -............................
33436 - Here are more details on how you should define the four hook
33437 -functions that a custom stream needs.
33439 - You should define the function to read data from the cookie as:
33441 - ssize_t READER (void *COOKIE, char *BUFFER, size_t SIZE)
33443 - This is very similar to the `read' function; see *Note I/O
33444 -Primitives::. Your function should transfer up to SIZE bytes into the
33445 -BUFFER, and return the number of bytes read, or zero to indicate
33446 -end-of-file. You can return a value of `-1' to indicate an error.
33448 - You should define the function to write data to the cookie as:
33450 - ssize_t WRITER (void *COOKIE, const char *BUFFER, size_t SIZE)
33452 - This is very similar to the `write' function; see *Note I/O
33453 -Primitives::. Your function should transfer up to SIZE bytes from the
33454 -buffer, and return the number of bytes written. You can return a value
33455 -of `-1' to indicate an error.
33457 - You should define the function to perform seek operations on the
33458 -cookie as:
33460 - int SEEKER (void *COOKIE, fpos_t *POSITION, int WHENCE)
33462 - For this function, the POSITION and WHENCE arguments are interpreted
33463 -as for `fgetpos'; see *Note Portable Positioning::. In the GNU
33464 -library, `fpos_t' is equivalent to `off_t' or `long int', and simply
33465 -represents the number of bytes from the beginning of the file.
33467 - After doing the seek operation, your function should store the
33468 -resulting file position relative to the beginning of the file in
33469 -POSITION. Your function should return a value of `0' on success and
33470 -`-1' to indicate an error.
33472 - You should define the function to do cleanup operations on the cookie
33473 -appropriate for closing the stream as:
33475 - int CLEANER (void *COOKIE)
33477 - Your function should return `-1' to indicate an error, and `0'
33478 -otherwise.
33480 - - Data Type: cookie_read_function
33481 - This is the data type that the read function for a custom stream
33482 - should have. If you declare the function as shown above, this is
33483 - the type it will have.
33485 - - Data Type: cookie_write_function
33486 - The data type of the write function for a custom stream.
33488 - - Data Type: cookie_seek_function
33489 - The data type of the seek function for a custom stream.
33491 - - Data Type: cookie_close_function
33492 - The data type of the close function for a custom stream.
33494 -\x1f
33495 -File: libc.info, Node: Formatted Messages, Prev: Other Kinds of Streams, Up: I/O on Streams
33497 -Formatted Messages
33498 -==================
33500 - On systems which are based on System V messages of programs
33501 -(especially the system tools) are printed in a strict form using the
33502 -`fmtmsg' function. The uniformity sometimes helps the user to
33503 -interpret messages and the strictness tests of the `fmtmsg' function
33504 -ensure that the programmer follows some minimal requirements.
33506 -* Menu:
33508 -* Printing Formatted Messages:: The `fmtmsg' function.
33509 -* Adding Severity Classes:: Add more severity classes.
33510 -* Example:: How to use `fmtmsg' and `addseverity'.
33512 -\x1f
33513 -File: libc.info, Node: Printing Formatted Messages, Next: Adding Severity Classes, Up: Formatted Messages
33515 -Printing Formatted Messages
33516 ----------------------------
33518 - Messages can be printed to standard error and/or to the console. To
33519 -select the destination the programmer can use the following two values,
33520 -bitwise OR combined if wanted, for the CLASSIFICATION parameter of
33521 -`fmtmsg':
33523 -`MM_PRINT'
33524 - Display the message in standard error.
33526 -`MM_CONSOLE'
33527 - Display the message on the system console.
33529 - The erroneous piece of the system can be signalled by exactly one of
33530 -the following values which also is bitwise ORed with the CLASSIFICATION
33531 -parameter to `fmtmsg':
33533 -`MM_HARD'
33534 - The source of the condition is some hardware.
33536 -`MM_SOFT'
33537 - The source of the condition is some software.
33539 -`MM_FIRM'
33540 - The source of the condition is some firmware.
33542 - A third component of the CLASSIFICATION parameter to `fmtmsg' can
33543 -describe the part of the system which detects the problem. This is
33544 -done by using exactly one of the following values:
33546 -`MM_APPL'
33547 - The erroneous condition is detected by the application.
33549 -`MM_UTIL'
33550 - The erroneous condition is detected by a utility.
33552 -`MM_OPSYS'
33553 - The erroneous condition is detected by the operating system.
33555 - A last component of CLASSIFICATION can signal the results of this
33556 -message. Exactly one of the following values can be used:
33558 -`MM_RECOVER'
33559 - It is a recoverable error.
33561 -`MM_NRECOV'
33562 - It is a non-recoverable error.
33564 - - Function: int fmtmsg (long int CLASSIFICATION, const char *LABEL,
33565 - int SEVERITY, const char *TEXT, const char *ACTION, const
33566 - char *TAG)
33567 - Display a message described by its parameters on the device(s)
33568 - specified in the CLASSIFICATION parameter. The LABEL parameter
33569 - identifies the source of the message. The string should consist
33570 - of two colon separated parts where the first part has not more
33571 - than 10 and the second part not more than 14 characters. The TEXT
33572 - parameter describes the condition of the error, the ACTION
33573 - parameter possible steps to recover from the error and the TAG
33574 - parameter is a reference to the online documentation where more
33575 - information can be found. It should contain the LABEL value and a
33576 - unique identification number.
33578 - Each of the parameters can be a special value which means this
33579 - value is to be omitted. The symbolic names for these values are:
33581 - `MM_NULLLBL'
33582 - Ignore LABEL parameter.
33584 - `MM_NULLSEV'
33585 - Ignore SEVERITY parameter.
33587 - `MM_NULLMC'
33588 - Ignore CLASSIFICATION parameter. This implies that nothing is
33589 - actually printed.
33591 - `MM_NULLTXT'
33592 - Ignore TEXT parameter.
33594 - `MM_NULLACT'
33595 - Ignore ACTION parameter.
33597 - `MM_NULLTAG'
33598 - Ignore TAG parameter.
33600 - There is another way certain fields can be omitted from the output
33601 - to standard error. This is described below in the description of
33602 - environment variables influencing the behavior.
33604 - The SEVERITY parameter can have one of the values in the following
33605 - table:
33607 - `MM_NOSEV'
33608 - Nothing is printed, this value is the same as `MM_NULLSEV'.
33610 - `MM_HALT'
33611 - This value is printed as `HALT'.
33613 - `MM_ERROR'
33614 - This value is printed as `ERROR'.
33616 - `MM_WARNING'
33617 - This value is printed as `WARNING'.
33619 - `MM_INFO'
33620 - This value is printed as `INFO'.
33622 - The numeric value of these five macros are between `0' and `4'.
33623 - Using the environment variable `SEV_LEVEL' or using the
33624 - `addseverity' function one can add more severity levels with their
33625 - corresponding string to print. This is described below (*note
33626 - Adding Severity Classes::).
33628 - If no parameter is ignored the output looks like this:
33630 - LABEL: SEVERITY-STRING: TEXT
33631 - TO FIX: ACTION TAG
33633 - The colons, new line characters and the `TO FIX' string are
33634 - inserted if necessary, i.e., if the corresponding parameter is not
33635 - ignored.
33637 - This function is specified in the X/Open Portability Guide. It is
33638 - also available on all systems derived from System V.
33640 - The function returns the value `MM_OK' if no error occurred. If
33641 - only the printing to standard error failed, it returns `MM_NOMSG'.
33642 - If printing to the console fails, it returns `MM_NOCON'. If
33643 - nothing is printed `MM_NOTOK' is returned. Among situations where
33644 - all outputs fail this last value is also returned if a parameter
33645 - value is incorrect.
33647 - There are two environment variables which influence the behavior of
33648 -`fmtmsg'. The first is `MSGVERB'. It is used to control the output
33649 -actually happening on standard error (_not_ the console output). Each
33650 -of the five fields can explicitly be enabled. To do this the user has
33651 -to put the `MSGVERB' variable with a format like the following in the
33652 -environment before calling the `fmtmsg' function the first time:
33654 - MSGVERB=KEYWORD[:KEYWORD[:...]]
33656 - Valid KEYWORDs are `label', `severity', `text', `action', and `tag'.
33657 -If the environment variable is not given or is the empty string, a not
33658 -supported keyword is given or the value is somehow else invalid, no
33659 -part of the message is masked out.
33661 - The second environment variable which influences the behavior of
33662 -`fmtmsg' is `SEV_LEVEL'. This variable and the change in the behavior
33663 -of `fmtmsg' is not specified in the X/Open Portability Guide. It is
33664 -available in System V systems, though. It can be used to introduce new
33665 -severity levels. By default, only the five severity levels described
33666 -above are available. Any other numeric value would make `fmtmsg' print
33667 -nothing.
33669 - If the user puts `SEV_LEVEL' with a format like
33671 - SEV_LEVEL=[DESCRIPTION[:DESCRIPTION[:...]]]
33673 -in the environment of the process before the first call to `fmtmsg',
33674 -where DESCRIPTION has a value of the form
33676 - SEVERITY-KEYWORD,LEVEL,PRINTSTRING
33678 - The SEVERITY-KEYWORD part is not used by `fmtmsg' but it has to be
33679 -present. The LEVEL part is a string representation of a number. The
33680 -numeric value must be a number greater than 4. This value must be used
33681 -in the SEVERITY parameter of `fmtmsg' to select this class. It is not
33682 -possible to overwrite any of the predefined classes. The PRINTSTRING
33683 -is the string printed when a message of this class is processed by
33684 -`fmtmsg' (see above, `fmtsmg' does not print the numeric value but
33685 -instead the string representation).
33687 -\x1f
33688 -File: libc.info, Node: Adding Severity Classes, Next: Example, Prev: Printing Formatted Messages, Up: Formatted Messages
33690 -Adding Severity Classes
33691 ------------------------
33693 - There is another possibility to introduce severity classes besides
33694 -using the environment variable `SEV_LEVEL'. This simplifies the task of
33695 -introducing new classes in a running program. One could use the
33696 -`setenv' or `putenv' function to set the environment variable, but this
33697 -is toilsome.
33699 - - Function: int addseverity (int SEVERITY, const char *STRING)
33700 - This function allows the introduction of new severity classes
33701 - which can be addressed by the SEVERITY parameter of the `fmtmsg'
33702 - function. The SEVERITY parameter of `addseverity' must match the
33703 - value for the parameter with the same name of `fmtmsg', and STRING
33704 - is the string printed in the actual messages instead of the numeric
33705 - value.
33707 - If STRING is `NULL' the severity class with the numeric value
33708 - according to SEVERITY is removed.
33710 - It is not possible to overwrite or remove one of the default
33711 - severity classes. All calls to `addseverity' with SEVERITY set to
33712 - one of the values for the default classes will fail.
33714 - The return value is `MM_OK' if the task was successfully performed.
33715 - If the return value is `MM_NOTOK' something went wrong. This could
33716 - mean that no more memory is available or a class is not available
33717 - when it has to be removed.
33719 - This function is not specified in the X/Open Portability Guide
33720 - although the `fmtsmg' function is. It is available on System V
33721 - systems.
33723 -\x1f
33724 -File: libc.info, Node: Example, Prev: Adding Severity Classes, Up: Formatted Messages
33726 -How to use `fmtmsg' and `addseverity'
33727 --------------------------------------
33729 - Here is a simple example program to illustrate the use of the both
33730 -functions described in this section.
33732 - #include <fmtmsg.h>
33734 - int
33735 - main (void)
33737 - addseverity (5, "NOTE2");
33738 - fmtmsg (MM_PRINT, "only1field", MM_INFO, "text2", "action2", "tag2");
33739 - fmtmsg (MM_PRINT, "UX:cat", 5, "invalid syntax", "refer to manual",
33740 - "UX:cat:001");
33741 - fmtmsg (MM_PRINT, "label:foo", 6, "text", "action", "tag");
33742 - return 0;
33745 - The second call to `fmtmsg' illustrates a use of this function as it
33746 -usually occurs on System V systems, which heavily use this function.
33747 -It seems worthwhile to give a short explanation here of how this system
33748 -works on System V. The value of the LABEL field (`UX:cat') says that
33749 -the error occurred in the Unix program `cat'. The explanation of the
33750 -error follows and the value for the ACTION parameter is `"refer to
33751 -manual"'. One could be more specific here, if necessary. The TAG
33752 -field contains, as proposed above, the value of the string given for
33753 -the LABEL parameter, and additionally a unique ID (`001' in this case).
33754 -For a GNU environment this string could contain a reference to the
33755 -corresponding node in the Info page for the program.
33757 -Running this program without specifying the `MSGVERB' and `SEV_LEVEL'
33758 -function produces the following output:
33760 - UX:cat: NOTE2: invalid syntax
33761 - TO FIX: refer to manual UX:cat:001
33763 - We see the different fields of the message and how the extra glue
33764 -(the colons and the `TO FIX' string) are printed. But only one of the
33765 -three calls to `fmtmsg' produced output. The first call does not print
33766 -anything because the LABEL parameter is not in the correct form. The
33767 -string must contain two fields, separated by a colon (*note Printing
33768 -Formatted Messages::). The third `fmtmsg' call produced no output
33769 -since the class with the numeric value `6' is not defined. Although a
33770 -class with numeric value `5' is also not defined by default, the call
33771 -to `addseverity' introduces it and the second call to `fmtmsg' produces
33772 -the above output.
33774 - When we change the environment of the program to contain
33775 -`SEV_LEVEL=XXX,6,NOTE' when running it we get a different result:
33777 - UX:cat: NOTE2: invalid syntax
33778 - TO FIX: refer to manual UX:cat:001
33779 - label:foo: NOTE: text
33780 - TO FIX: action tag
33782 - Now the third call to `fmtmsg' produced some output and we see how
33783 -the string `NOTE' from the environment variable appears in the message.
33785 - Now we can reduce the output by specifying which fields we are
33786 -interested in. If we additionally set the environment variable
33787 -`MSGVERB' to the value `severity:label:action' we get the following
33788 -output:
33790 - UX:cat: NOTE2
33791 - TO FIX: refer to manual
33792 - label:foo: NOTE
33793 - TO FIX: action
33795 -I.e., the output produced by the TEXT and the TAG parameters to
33796 -`fmtmsg' vanished. Please also note that now there is no colon after
33797 -the `NOTE' and `NOTE2' strings in the output. This is not necessary
33798 -since there is no more output on this line because the text is missing.
33800 -\x1f
33801 -File: libc.info, Node: Low-Level I/O, Next: File System Interface, Prev: I/O on Streams, Up: Top
33803 -Low-Level Input/Output
33804 -**********************
33806 - This chapter describes functions for performing low-level
33807 -input/output operations on file descriptors. These functions include
33808 -the primitives for the higher-level I/O functions described in *Note
33809 -I/O on Streams::, as well as functions for performing low-level control
33810 -operations for which there are no equivalents on streams.
33812 - Stream-level I/O is more flexible and usually more convenient;
33813 -therefore, programmers generally use the descriptor-level functions only
33814 -when necessary. These are some of the usual reasons:
33816 - * For reading binary files in large chunks.
33818 - * For reading an entire file into core before parsing it.
33820 - * To perform operations other than data transfer, which can only be
33821 - done with a descriptor. (You can use `fileno' to get the
33822 - descriptor corresponding to a stream.)
33824 - * To pass descriptors to a child process. (The child can create its
33825 - own stream to use a descriptor that it inherits, but cannot
33826 - inherit a stream directly.)
33828 -* Menu:
33830 -* Opening and Closing Files:: How to open and close file
33831 - descriptors.
33832 -* I/O Primitives:: Reading and writing data.
33833 -* File Position Primitive:: Setting a descriptor's file
33834 - position.
33835 -* Descriptors and Streams:: Converting descriptor to stream
33836 - or vice-versa.
33837 -* Stream/Descriptor Precautions:: Precautions needed if you use both
33838 - descriptors and streams.
33839 -* Scatter-Gather:: Fast I/O to discontinuous buffers.
33840 -* Memory-mapped I/O:: Using files like memory.
33841 -* Waiting for I/O:: How to check for input or output
33842 - on multiple file descriptors.
33843 -* Synchronizing I/O:: Making sure all I/O actions completed.
33844 -* Asynchronous I/O:: Perform I/O in parallel.
33845 -* Control Operations:: Various other operations on file
33846 - descriptors.
33847 -* Duplicating Descriptors:: Fcntl commands for duplicating
33848 - file descriptors.
33849 -* Descriptor Flags:: Fcntl commands for manipulating
33850 - flags associated with file
33851 - descriptors.
33852 -* File Status Flags:: Fcntl commands for manipulating
33853 - flags associated with open files.
33854 -* File Locks:: Fcntl commands for implementing
33855 - file locking.
33856 -* Interrupt Input:: Getting an asynchronous signal when
33857 - input arrives.
33858 -* IOCTLs:: Generic I/O Control operations.
33860 diff -u -udbrN glibc-2.3.2/manual/libc.info-21 glibc-2.3.2-200304020432/manual/libc.info-21
33861 --- glibc-2.3.2/manual/libc.info-21 Sat Mar 1 02:39:41 2003
33862 +++ glibc-2.3.2-200304020432/manual/libc.info-21 Thu Jan 1 01:00:00 1970
33863 @@ -1,962 +0,0 @@
33864 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
33866 -INFO-DIR-SECTION GNU libraries
33867 -START-INFO-DIR-ENTRY
33868 -* Libc: (libc). C library.
33869 -END-INFO-DIR-ENTRY
33871 - This file documents the GNU C library.
33873 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
33874 -Reference Manual', for Version 2.3.x.
33876 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
33877 -Free Software Foundation, Inc.
33879 - Permission is granted to copy, distribute and/or modify this document
33880 -under the terms of the GNU Free Documentation License, Version 1.1 or
33881 -any later version published by the Free Software Foundation; with the
33882 -Invariant Sections being "Free Software Needs Free Documentation" and
33883 -"GNU Lesser General Public License", the Front-Cover texts being (a)
33884 -(see below), and with the Back-Cover Texts being (b) (see below). A
33885 -copy of the license is included in the section entitled "GNU Free
33886 -Documentation License".
33888 - (a) The FSF's Front-Cover Text is:
33890 - A GNU Manual
33892 - (b) The FSF's Back-Cover Text is:
33894 - You have freedom to copy and modify this GNU Manual, like GNU
33895 -software. Copies published by the Free Software Foundation raise
33896 -funds for GNU development.
33898 -\x1f
33899 -File: libc.info, Node: Opening and Closing Files, Next: I/O Primitives, Up: Low-Level I/O
33901 -Opening and Closing Files
33902 -=========================
33904 - This section describes the primitives for opening and closing files
33905 -using file descriptors. The `open' and `creat' functions are declared
33906 -in the header file `fcntl.h', while `close' is declared in `unistd.h'.
33908 - - Function: int open (const char *FILENAME, int FLAGS[, mode_t MODE])
33909 - The `open' function creates and returns a new file descriptor for
33910 - the file named by FILENAME. Initially, the file position
33911 - indicator for the file is at the beginning of the file. The
33912 - argument MODE is used only when a file is created, but it doesn't
33913 - hurt to supply the argument in any case.
33915 - The FLAGS argument controls how the file is to be opened. This is
33916 - a bit mask; you create the value by the bitwise OR of the
33917 - appropriate parameters (using the `|' operator in C). *Note File
33918 - Status Flags::, for the parameters available.
33920 - The normal return value from `open' is a non-negative integer file
33921 - descriptor. In the case of an error, a value of -1 is returned
33922 - instead. In addition to the usual file name errors (*note File
33923 - Name Errors::), the following `errno' error conditions are defined
33924 - for this function:
33926 - `EACCES'
33927 - The file exists but is not readable/writable as requested by
33928 - the FLAGS argument, the file does not exist and the directory
33929 - is unwritable so it cannot be created.
33931 - `EEXIST'
33932 - Both `O_CREAT' and `O_EXCL' are set, and the named file
33933 - already exists.
33935 - `EINTR'
33936 - The `open' operation was interrupted by a signal. *Note
33937 - Interrupted Primitives::.
33939 - `EISDIR'
33940 - The FLAGS argument specified write access, and the file is a
33941 - directory.
33943 - `EMFILE'
33944 - The process has too many files open. The maximum number of
33945 - file descriptors is controlled by the `RLIMIT_NOFILE'
33946 - resource limit; *note Limits on Resources::.
33948 - `ENFILE'
33949 - The entire system, or perhaps the file system which contains
33950 - the directory, cannot support any additional open files at
33951 - the moment. (This problem cannot happen on the GNU system.)
33953 - `ENOENT'
33954 - The named file does not exist, and `O_CREAT' is not specified.
33956 - `ENOSPC'
33957 - The directory or file system that would contain the new file
33958 - cannot be extended, because there is no disk space left.
33960 - `ENXIO'
33961 - `O_NONBLOCK' and `O_WRONLY' are both set in the FLAGS
33962 - argument, the file named by FILENAME is a FIFO (*note Pipes
33963 - and FIFOs::), and no process has the file open for reading.
33965 - `EROFS'
33966 - The file resides on a read-only file system and any of
33967 - `O_WRONLY', `O_RDWR', and `O_TRUNC' are set in the FLAGS
33968 - argument, or `O_CREAT' is set and the file does not already
33969 - exist.
33971 - If on a 32 bit machine the sources are translated with
33972 - `_FILE_OFFSET_BITS == 64' the function `open' returns a file
33973 - descriptor opened in the large file mode which enables the file
33974 - handling functions to use files up to 2^63 bytes in size and
33975 - offset from -2^63 to 2^63. This happens transparently for the user
33976 - since all of the lowlevel file handling functions are equally
33977 - replaced.
33979 - This function is a cancellation point in multi-threaded programs.
33980 - This is a problem if the thread allocates some resources (like
33981 - memory, file descriptors, semaphores or whatever) at the time
33982 - `open' is called. If the thread gets canceled these resources
33983 - stay allocated until the program ends. To avoid this calls to
33984 - `open' should be protected using cancellation handlers.
33986 - The `open' function is the underlying primitive for the `fopen'
33987 - and `freopen' functions, that create streams.
33989 - - Function: int open64 (const char *FILENAME, int FLAGS[, mode_t MODE])
33990 - This function is similar to `open'. It returns a file descriptor
33991 - which can be used to access the file named by FILENAME. The only
33992 - difference is that on 32 bit systems the file is opened in the
33993 - large file mode. I.e., file length and file offsets can exceed 31
33994 - bits.
33996 - When the sources are translated with `_FILE_OFFSET_BITS == 64' this
33997 - function is actually available under the name `open'. I.e., the
33998 - new, extended API using 64 bit file sizes and offsets transparently
33999 - replaces the old API.
34001 - - Obsolete function: int creat (const char *FILENAME, mode_t MODE)
34002 - This function is obsolete. The call:
34004 - creat (FILENAME, MODE)
34006 - is equivalent to:
34008 - open (FILENAME, O_WRONLY | O_CREAT | O_TRUNC, MODE)
34010 - If on a 32 bit machine the sources are translated with
34011 - `_FILE_OFFSET_BITS == 64' the function `creat' returns a file
34012 - descriptor opened in the large file mode which enables the file
34013 - handling functions to use files up to 2^63 in size and offset from
34014 - -2^63 to 2^63. This happens transparently for the user since all
34015 - of the lowlevel file handling functions are equally replaced.
34017 - - Obsolete function: int creat64 (const char *FILENAME, mode_t MODE)
34018 - This function is similar to `creat'. It returns a file descriptor
34019 - which can be used to access the file named by FILENAME. The only
34020 - the difference is that on 32 bit systems the file is opened in the
34021 - large file mode. I.e., file length and file offsets can exceed 31
34022 - bits.
34024 - To use this file descriptor one must not use the normal operations
34025 - but instead the counterparts named `*64', e.g., `read64'.
34027 - When the sources are translated with `_FILE_OFFSET_BITS == 64' this
34028 - function is actually available under the name `open'. I.e., the
34029 - new, extended API using 64 bit file sizes and offsets transparently
34030 - replaces the old API.
34032 - - Function: int close (int FILEDES)
34033 - The function `close' closes the file descriptor FILEDES. Closing
34034 - a file has the following consequences:
34036 - * The file descriptor is deallocated.
34038 - * Any record locks owned by the process on the file are
34039 - unlocked.
34041 - * When all file descriptors associated with a pipe or FIFO have
34042 - been closed, any unread data is discarded.
34044 - This function is a cancellation point in multi-threaded programs.
34045 - This is a problem if the thread allocates some resources (like
34046 - memory, file descriptors, semaphores or whatever) at the time
34047 - `close' is called. If the thread gets canceled these resources
34048 - stay allocated until the program ends. To avoid this, calls to
34049 - `close' should be protected using cancellation handlers.
34051 - The normal return value from `close' is 0; a value of -1 is
34052 - returned in case of failure. The following `errno' error
34053 - conditions are defined for this function:
34055 - `EBADF'
34056 - The FILEDES argument is not a valid file descriptor.
34058 - `EINTR'
34059 - The `close' call was interrupted by a signal. *Note
34060 - Interrupted Primitives::. Here is an example of how to
34061 - handle `EINTR' properly:
34063 - TEMP_FAILURE_RETRY (close (desc));
34065 - `ENOSPC'
34066 - `EIO'
34067 - `EDQUOT'
34068 - When the file is accessed by NFS, these errors from `write'
34069 - can sometimes not be detected until `close'. *Note I/O
34070 - Primitives::, for details on their meaning.
34072 - Please note that there is _no_ separate `close64' function. This
34073 - is not necessary since this function does not determine nor depend
34074 - on the mode of the file. The kernel which performs the `close'
34075 - operation knows which mode the descriptor is used for and can
34076 - handle this situation.
34078 - To close a stream, call `fclose' (*note Closing Streams::) instead
34079 -of trying to close its underlying file descriptor with `close'. This
34080 -flushes any buffered output and updates the stream object to indicate
34081 -that it is closed.
34083 -\x1f
34084 -File: libc.info, Node: I/O Primitives, Next: File Position Primitive, Prev: Opening and Closing Files, Up: Low-Level I/O
34086 -Input and Output Primitives
34087 -===========================
34089 - This section describes the functions for performing primitive input
34090 -and output operations on file descriptors: `read', `write', and
34091 -`lseek'. These functions are declared in the header file `unistd.h'.
34093 - - Data Type: ssize_t
34094 - This data type is used to represent the sizes of blocks that can be
34095 - read or written in a single operation. It is similar to `size_t',
34096 - but must be a signed type.
34098 - - Function: ssize_t read (int FILEDES, void *BUFFER, size_t SIZE)
34099 - The `read' function reads up to SIZE bytes from the file with
34100 - descriptor FILEDES, storing the results in the BUFFER. (This is
34101 - not necessarily a character string, and no terminating null
34102 - character is added.)
34104 - The return value is the number of bytes actually read. This might
34105 - be less than SIZE; for example, if there aren't that many bytes
34106 - left in the file or if there aren't that many bytes immediately
34107 - available. The exact behavior depends on what kind of file it is.
34108 - Note that reading less than SIZE bytes is not an error.
34110 - A value of zero indicates end-of-file (except if the value of the
34111 - SIZE argument is also zero). This is not considered an error. If
34112 - you keep calling `read' while at end-of-file, it will keep
34113 - returning zero and doing nothing else.
34115 - If `read' returns at least one character, there is no way you can
34116 - tell whether end-of-file was reached. But if you did reach the
34117 - end, the next read will return zero.
34119 - In case of an error, `read' returns -1. The following `errno'
34120 - error conditions are defined for this function:
34122 - `EAGAIN'
34123 - Normally, when no input is immediately available, `read'
34124 - waits for some input. But if the `O_NONBLOCK' flag is set
34125 - for the file (*note File Status Flags::), `read' returns
34126 - immediately without reading any data, and reports this error.
34128 - *Compatibility Note:* Most versions of BSD Unix use a
34129 - different error code for this: `EWOULDBLOCK'. In the GNU
34130 - library, `EWOULDBLOCK' is an alias for `EAGAIN', so it
34131 - doesn't matter which name you use.
34133 - On some systems, reading a large amount of data from a
34134 - character special file can also fail with `EAGAIN' if the
34135 - kernel cannot find enough physical memory to lock down the
34136 - user's pages. This is limited to devices that transfer with
34137 - direct memory access into the user's memory, which means it
34138 - does not include terminals, since they always use separate
34139 - buffers inside the kernel. This problem never happens in the
34140 - GNU system.
34142 - Any condition that could result in `EAGAIN' can instead
34143 - result in a successful `read' which returns fewer bytes than
34144 - requested. Calling `read' again immediately would result in
34145 - `EAGAIN'.
34147 - `EBADF'
34148 - The FILEDES argument is not a valid file descriptor, or is
34149 - not open for reading.
34151 - `EINTR'
34152 - `read' was interrupted by a signal while it was waiting for
34153 - input. *Note Interrupted Primitives::. A signal will not
34154 - necessary cause `read' to return `EINTR'; it may instead
34155 - result in a successful `read' which returns fewer bytes than
34156 - requested.
34158 - `EIO'
34159 - For many devices, and for disk files, this error code
34160 - indicates a hardware error.
34162 - `EIO' also occurs when a background process tries to read
34163 - from the controlling terminal, and the normal action of
34164 - stopping the process by sending it a `SIGTTIN' signal isn't
34165 - working. This might happen if the signal is being blocked or
34166 - ignored, or because the process group is orphaned. *Note Job
34167 - Control::, for more information about job control, and *Note
34168 - Signal Handling::, for information about signals.
34170 - Please note that there is no function named `read64'. This is not
34171 - necessary since this function does not directly modify or handle
34172 - the possibly wide file offset. Since the kernel handles this state
34173 - internally, the `read' function can be used for all cases.
34175 - This function is a cancellation point in multi-threaded programs.
34176 - This is a problem if the thread allocates some resources (like
34177 - memory, file descriptors, semaphores or whatever) at the time
34178 - `read' is called. If the thread gets canceled these resources
34179 - stay allocated until the program ends. To avoid this, calls to
34180 - `read' should be protected using cancellation handlers.
34182 - The `read' function is the underlying primitive for all of the
34183 - functions that read from streams, such as `fgetc'.
34185 - - Function: ssize_t pread (int FILEDES, void *BUFFER, size_t SIZE,
34186 - off_t OFFSET)
34187 - The `pread' function is similar to the `read' function. The first
34188 - three arguments are identical, and the return values and error
34189 - codes also correspond.
34191 - The difference is the fourth argument and its handling. The data
34192 - block is not read from the current position of the file descriptor
34193 - `filedes'. Instead the data is read from the file starting at
34194 - position OFFSET. The position of the file descriptor itself is
34195 - not affected by the operation. The value is the same as before
34196 - the call.
34198 - When the source file is compiled with `_FILE_OFFSET_BITS == 64' the
34199 - `pread' function is in fact `pread64' and the type `off_t' has 64
34200 - bits, which makes it possible to handle files up to 2^63 bytes in
34201 - length.
34203 - The return value of `pread' describes the number of bytes read.
34204 - In the error case it returns -1 like `read' does and the error
34205 - codes are also the same, with these additions:
34207 - `EINVAL'
34208 - The value given for OFFSET is negative and therefore illegal.
34210 - `ESPIPE'
34211 - The file descriptor FILEDES is associate with a pipe or a
34212 - FIFO and this device does not allow positioning of the file
34213 - pointer.
34215 - The function is an extension defined in the Unix Single
34216 - Specification version 2.
34218 - - Function: ssize_t pread64 (int FILEDES, void *BUFFER, size_t SIZE,
34219 - off64_t OFFSET)
34220 - This function is similar to the `pread' function. The difference
34221 - is that the OFFSET parameter is of type `off64_t' instead of
34222 - `off_t' which makes it possible on 32 bit machines to address
34223 - files larger than 2^31 bytes and up to 2^63 bytes. The file
34224 - descriptor `filedes' must be opened using `open64' since otherwise
34225 - the large offsets possible with `off64_t' will lead to errors with
34226 - a descriptor in small file mode.
34228 - When the source file is compiled with `_FILE_OFFSET_BITS == 64' on
34229 - a 32 bit machine this function is actually available under the name
34230 - `pread' and so transparently replaces the 32 bit interface.
34232 - - Function: ssize_t write (int FILEDES, const void *BUFFER, size_t
34233 - SIZE)
34234 - The `write' function writes up to SIZE bytes from BUFFER to the
34235 - file with descriptor FILEDES. The data in BUFFER is not
34236 - necessarily a character string and a null character is output like
34237 - any other character.
34239 - The return value is the number of bytes actually written. This
34240 - may be SIZE, but can always be smaller. Your program should
34241 - always call `write' in a loop, iterating until all the data is
34242 - written.
34244 - Once `write' returns, the data is enqueued to be written and can be
34245 - read back right away, but it is not necessarily written out to
34246 - permanent storage immediately. You can use `fsync' when you need
34247 - to be sure your data has been permanently stored before
34248 - continuing. (It is more efficient for the system to batch up
34249 - consecutive writes and do them all at once when convenient.
34250 - Normally they will always be written to disk within a minute or
34251 - less.) Modern systems provide another function `fdatasync' which
34252 - guarantees integrity only for the file data and is therefore
34253 - faster. You can use the `O_FSYNC' open mode to make `write' always
34254 - store the data to disk before returning; *note Operating Modes::.
34256 - In the case of an error, `write' returns -1. The following
34257 - `errno' error conditions are defined for this function:
34259 - `EAGAIN'
34260 - Normally, `write' blocks until the write operation is
34261 - complete. But if the `O_NONBLOCK' flag is set for the file
34262 - (*note Control Operations::), it returns immediately without
34263 - writing any data and reports this error. An example of a
34264 - situation that might cause the process to block on output is
34265 - writing to a terminal device that supports flow control,
34266 - where output has been suspended by receipt of a STOP
34267 - character.
34269 - *Compatibility Note:* Most versions of BSD Unix use a
34270 - different error code for this: `EWOULDBLOCK'. In the GNU
34271 - library, `EWOULDBLOCK' is an alias for `EAGAIN', so it
34272 - doesn't matter which name you use.
34274 - On some systems, writing a large amount of data from a
34275 - character special file can also fail with `EAGAIN' if the
34276 - kernel cannot find enough physical memory to lock down the
34277 - user's pages. This is limited to devices that transfer with
34278 - direct memory access into the user's memory, which means it
34279 - does not include terminals, since they always use separate
34280 - buffers inside the kernel. This problem does not arise in the
34281 - GNU system.
34283 - `EBADF'
34284 - The FILEDES argument is not a valid file descriptor, or is
34285 - not open for writing.
34287 - `EFBIG'
34288 - The size of the file would become larger than the
34289 - implementation can support.
34291 - `EINTR'
34292 - The `write' operation was interrupted by a signal while it was
34293 - blocked waiting for completion. A signal will not
34294 - necessarily cause `write' to return `EINTR'; it may instead
34295 - result in a successful `write' which writes fewer bytes than
34296 - requested. *Note Interrupted Primitives::.
34298 - `EIO'
34299 - For many devices, and for disk files, this error code
34300 - indicates a hardware error.
34302 - `ENOSPC'
34303 - The device containing the file is full.
34305 - `EPIPE'
34306 - This error is returned when you try to write to a pipe or
34307 - FIFO that isn't open for reading by any process. When this
34308 - happens, a `SIGPIPE' signal is also sent to the process; see
34309 - *Note Signal Handling::.
34311 - Unless you have arranged to prevent `EINTR' failures, you should
34312 - check `errno' after each failing call to `write', and if the error
34313 - was `EINTR', you should simply repeat the call. *Note Interrupted
34314 - Primitives::. The easy way to do this is with the macro
34315 - `TEMP_FAILURE_RETRY', as follows:
34317 - nbytes = TEMP_FAILURE_RETRY (write (desc, buffer, count));
34319 - Please note that there is no function named `write64'. This is not
34320 - necessary since this function does not directly modify or handle
34321 - the possibly wide file offset. Since the kernel handles this state
34322 - internally the `write' function can be used for all cases.
34324 - This function is a cancellation point in multi-threaded programs.
34325 - This is a problem if the thread allocates some resources (like
34326 - memory, file descriptors, semaphores or whatever) at the time
34327 - `write' is called. If the thread gets canceled these resources
34328 - stay allocated until the program ends. To avoid this, calls to
34329 - `write' should be protected using cancellation handlers.
34331 - The `write' function is the underlying primitive for all of the
34332 - functions that write to streams, such as `fputc'.
34334 - - Function: ssize_t pwrite (int FILEDES, const void *BUFFER, size_t
34335 - SIZE, off_t OFFSET)
34336 - The `pwrite' function is similar to the `write' function. The
34337 - first three arguments are identical, and the return values and
34338 - error codes also correspond.
34340 - The difference is the fourth argument and its handling. The data
34341 - block is not written to the current position of the file descriptor
34342 - `filedes'. Instead the data is written to the file starting at
34343 - position OFFSET. The position of the file descriptor itself is
34344 - not affected by the operation. The value is the same as before
34345 - the call.
34347 - When the source file is compiled with `_FILE_OFFSET_BITS == 64' the
34348 - `pwrite' function is in fact `pwrite64' and the type `off_t' has
34349 - 64 bits, which makes it possible to handle files up to 2^63 bytes
34350 - in length.
34352 - The return value of `pwrite' describes the number of written bytes.
34353 - In the error case it returns -1 like `write' does and the error
34354 - codes are also the same, with these additions:
34356 - `EINVAL'
34357 - The value given for OFFSET is negative and therefore illegal.
34359 - `ESPIPE'
34360 - The file descriptor FILEDES is associated with a pipe or a
34361 - FIFO and this device does not allow positioning of the file
34362 - pointer.
34364 - The function is an extension defined in the Unix Single
34365 - Specification version 2.
34367 - - Function: ssize_t pwrite64 (int FILEDES, const void *BUFFER, size_t
34368 - SIZE, off64_t OFFSET)
34369 - This function is similar to the `pwrite' function. The difference
34370 - is that the OFFSET parameter is of type `off64_t' instead of
34371 - `off_t' which makes it possible on 32 bit machines to address
34372 - files larger than 2^31 bytes and up to 2^63 bytes. The file
34373 - descriptor `filedes' must be opened using `open64' since otherwise
34374 - the large offsets possible with `off64_t' will lead to errors with
34375 - a descriptor in small file mode.
34377 - When the source file is compiled using `_FILE_OFFSET_BITS == 64'
34378 - on a 32 bit machine this function is actually available under the
34379 - name `pwrite' and so transparently replaces the 32 bit interface.
34381 -\x1f
34382 -File: libc.info, Node: File Position Primitive, Next: Descriptors and Streams, Prev: I/O Primitives, Up: Low-Level I/O
34384 -Setting the File Position of a Descriptor
34385 -=========================================
34387 - Just as you can set the file position of a stream with `fseek', you
34388 -can set the file position of a descriptor with `lseek'. This specifies
34389 -the position in the file for the next `read' or `write' operation.
34390 -*Note File Positioning::, for more information on the file position and
34391 -what it means.
34393 - To read the current file position value from a descriptor, use
34394 -`lseek (DESC, 0, SEEK_CUR)'.
34396 - - Function: off_t lseek (int FILEDES, off_t OFFSET, int WHENCE)
34397 - The `lseek' function is used to change the file position of the
34398 - file with descriptor FILEDES.
34400 - The WHENCE argument specifies how the OFFSET should be
34401 - interpreted, in the same way as for the `fseek' function, and it
34402 - must be one of the symbolic constants `SEEK_SET', `SEEK_CUR', or
34403 - `SEEK_END'.
34405 - `SEEK_SET'
34406 - Specifies that WHENCE is a count of characters from the
34407 - beginning of the file.
34409 - `SEEK_CUR'
34410 - Specifies that WHENCE is a count of characters from the
34411 - current file position. This count may be positive or
34412 - negative.
34414 - `SEEK_END'
34415 - Specifies that WHENCE is a count of characters from the end of
34416 - the file. A negative count specifies a position within the
34417 - current extent of the file; a positive count specifies a
34418 - position past the current end. If you set the position past
34419 - the current end, and actually write data, you will extend the
34420 - file with zeros up to that position.
34422 - The return value from `lseek' is normally the resulting file
34423 - position, measured in bytes from the beginning of the file. You
34424 - can use this feature together with `SEEK_CUR' to read the current
34425 - file position.
34427 - If you want to append to the file, setting the file position to the
34428 - current end of file with `SEEK_END' is not sufficient. Another
34429 - process may write more data after you seek but before you write,
34430 - extending the file so the position you write onto clobbers their
34431 - data. Instead, use the `O_APPEND' operating mode; *note Operating
34432 - Modes::.
34434 - You can set the file position past the current end of the file.
34435 - This does not by itself make the file longer; `lseek' never
34436 - changes the file. But subsequent output at that position will
34437 - extend the file. Characters between the previous end of file and
34438 - the new position are filled with zeros. Extending the file in
34439 - this way can create a "hole": the blocks of zeros are not actually
34440 - allocated on disk, so the file takes up less space than it appears
34441 - to; it is then called a "sparse file".
34443 - If the file position cannot be changed, or the operation is in
34444 - some way invalid, `lseek' returns a value of -1. The following
34445 - `errno' error conditions are defined for this function:
34447 - `EBADF'
34448 - The FILEDES is not a valid file descriptor.
34450 - `EINVAL'
34451 - The WHENCE argument value is not valid, or the resulting file
34452 - offset is not valid. A file offset is invalid.
34454 - `ESPIPE'
34455 - The FILEDES corresponds to an object that cannot be
34456 - positioned, such as a pipe, FIFO or terminal device.
34457 - (POSIX.1 specifies this error only for pipes and FIFOs, but
34458 - in the GNU system, you always get `ESPIPE' if the object is
34459 - not seekable.)
34461 - When the source file is compiled with `_FILE_OFFSET_BITS == 64' the
34462 - `lseek' function is in fact `lseek64' and the type `off_t' has 64
34463 - bits which makes it possible to handle files up to 2^63 bytes in
34464 - length.
34466 - This function is a cancellation point in multi-threaded programs.
34467 - This is a problem if the thread allocates some resources (like
34468 - memory, file descriptors, semaphores or whatever) at the time
34469 - `lseek' is called. If the thread gets canceled these resources
34470 - stay allocated until the program ends. To avoid this calls to
34471 - `lseek' should be protected using cancellation handlers.
34473 - The `lseek' function is the underlying primitive for the `fseek',
34474 - `fseeko', `ftell', `ftello' and `rewind' functions, which operate
34475 - on streams instead of file descriptors.
34477 - - Function: off64_t lseek64 (int FILEDES, off64_t OFFSET, int WHENCE)
34478 - This function is similar to the `lseek' function. The difference
34479 - is that the OFFSET parameter is of type `off64_t' instead of
34480 - `off_t' which makes it possible on 32 bit machines to address
34481 - files larger than 2^31 bytes and up to 2^63 bytes. The file
34482 - descriptor `filedes' must be opened using `open64' since otherwise
34483 - the large offsets possible with `off64_t' will lead to errors with
34484 - a descriptor in small file mode.
34486 - When the source file is compiled with `_FILE_OFFSET_BITS == 64' on
34487 - a 32 bits machine this function is actually available under the
34488 - name `lseek' and so transparently replaces the 32 bit interface.
34490 - You can have multiple descriptors for the same file if you open the
34491 -file more than once, or if you duplicate a descriptor with `dup'.
34492 -Descriptors that come from separate calls to `open' have independent
34493 -file positions; using `lseek' on one descriptor has no effect on the
34494 -other. For example,
34497 - int d1, d2;
34498 - char buf[4];
34499 - d1 = open ("foo", O_RDONLY);
34500 - d2 = open ("foo", O_RDONLY);
34501 - lseek (d1, 1024, SEEK_SET);
34502 - read (d2, buf, 4);
34505 -will read the first four characters of the file `foo'. (The
34506 -error-checking code necessary for a real program has been omitted here
34507 -for brevity.)
34509 - By contrast, descriptors made by duplication share a common file
34510 -position with the original descriptor that was duplicated. Anything
34511 -which alters the file position of one of the duplicates, including
34512 -reading or writing data, affects all of them alike. Thus, for example,
34515 - int d1, d2, d3;
34516 - char buf1[4], buf2[4];
34517 - d1 = open ("foo", O_RDONLY);
34518 - d2 = dup (d1);
34519 - d3 = dup (d2);
34520 - lseek (d3, 1024, SEEK_SET);
34521 - read (d1, buf1, 4);
34522 - read (d2, buf2, 4);
34525 -will read four characters starting with the 1024'th character of `foo',
34526 -and then four more characters starting with the 1028'th character.
34528 - - Data Type: off_t
34529 - This is an arithmetic data type used to represent file sizes. In
34530 - the GNU system, this is equivalent to `fpos_t' or `long int'.
34532 - If the source is compiled with `_FILE_OFFSET_BITS == 64' this type
34533 - is transparently replaced by `off64_t'.
34535 - - Data Type: off64_t
34536 - This type is used similar to `off_t'. The difference is that even
34537 - on 32 bit machines, where the `off_t' type would have 32 bits,
34538 - `off64_t' has 64 bits and so is able to address files up to 2^63
34539 - bytes in length.
34541 - When compiling with `_FILE_OFFSET_BITS == 64' this type is
34542 - available under the name `off_t'.
34544 - These aliases for the `SEEK_...' constants exist for the sake of
34545 -compatibility with older BSD systems. They are defined in two
34546 -different header files: `fcntl.h' and `sys/file.h'.
34548 -`L_SET'
34549 - An alias for `SEEK_SET'.
34551 -`L_INCR'
34552 - An alias for `SEEK_CUR'.
34554 -`L_XTND'
34555 - An alias for `SEEK_END'.
34557 -\x1f
34558 -File: libc.info, Node: Descriptors and Streams, Next: Stream/Descriptor Precautions, Prev: File Position Primitive, Up: Low-Level I/O
34560 -Descriptors and Streams
34561 -=======================
34563 - Given an open file descriptor, you can create a stream for it with
34564 -the `fdopen' function. You can get the underlying file descriptor for
34565 -an existing stream with the `fileno' function. These functions are
34566 -declared in the header file `stdio.h'.
34568 - - Function: FILE * fdopen (int FILEDES, const char *OPENTYPE)
34569 - The `fdopen' function returns a new stream for the file descriptor
34570 - FILEDES.
34572 - The OPENTYPE argument is interpreted in the same way as for the
34573 - `fopen' function (*note Opening Streams::), except that the `b'
34574 - option is not permitted; this is because GNU makes no distinction
34575 - between text and binary files. Also, `"w"' and `"w+"' do not
34576 - cause truncation of the file; these have an effect only when
34577 - opening a file, and in this case the file has already been opened.
34578 - You must make sure that the OPENTYPE argument matches the actual
34579 - mode of the open file descriptor.
34581 - The return value is the new stream. If the stream cannot be
34582 - created (for example, if the modes for the file indicated by the
34583 - file descriptor do not permit the access specified by the OPENTYPE
34584 - argument), a null pointer is returned instead.
34586 - In some other systems, `fdopen' may fail to detect that the modes
34587 - for file descriptor do not permit the access specified by
34588 - `opentype'. The GNU C library always checks for this.
34590 - For an example showing the use of the `fdopen' function, see *Note
34591 -Creating a Pipe::.
34593 - - Function: int fileno (FILE *STREAM)
34594 - This function returns the file descriptor associated with the
34595 - stream STREAM. If an error is detected (for example, if the STREAM
34596 - is not valid) or if STREAM does not do I/O to a file, `fileno'
34597 - returns -1.
34599 - - Function: int fileno_unlocked (FILE *STREAM)
34600 - The `fileno_unlocked' function is equivalent to the `fileno'
34601 - function except that it does not implicitly lock the stream if the
34602 - state is `FSETLOCKING_INTERNAL'.
34604 - This function is a GNU extension.
34606 - There are also symbolic constants defined in `unistd.h' for the file
34607 -descriptors belonging to the standard streams `stdin', `stdout', and
34608 -`stderr'; see *Note Standard Streams::.
34610 -`STDIN_FILENO'
34611 - This macro has value `0', which is the file descriptor for
34612 - standard input.
34614 -`STDOUT_FILENO'
34615 - This macro has value `1', which is the file descriptor for
34616 - standard output.
34618 -`STDERR_FILENO'
34619 - This macro has value `2', which is the file descriptor for
34620 - standard error output.
34622 -\x1f
34623 -File: libc.info, Node: Stream/Descriptor Precautions, Next: Scatter-Gather, Prev: Descriptors and Streams, Up: Low-Level I/O
34625 -Dangers of Mixing Streams and Descriptors
34626 -=========================================
34628 - You can have multiple file descriptors and streams (let's call both
34629 -streams and descriptors "channels" for short) connected to the same
34630 -file, but you must take care to avoid confusion between channels. There
34631 -are two cases to consider: "linked" channels that share a single file
34632 -position value, and "independent" channels that have their own file
34633 -positions.
34635 - It's best to use just one channel in your program for actual data
34636 -transfer to any given file, except when all the access is for input.
34637 -For example, if you open a pipe (something you can only do at the file
34638 -descriptor level), either do all I/O with the descriptor, or construct a
34639 -stream from the descriptor with `fdopen' and then do all I/O with the
34640 -stream.
34642 -* Menu:
34644 -* Linked Channels:: Dealing with channels sharing a file position.
34645 -* Independent Channels:: Dealing with separately opened, unlinked channels.
34646 -* Cleaning Streams:: Cleaning a stream makes it safe to use
34647 - another channel.
34649 -\x1f
34650 -File: libc.info, Node: Linked Channels, Next: Independent Channels, Up: Stream/Descriptor Precautions
34652 -Linked Channels
34653 ----------------
34655 - Channels that come from a single opening share the same file
34656 -position; we call them "linked" channels. Linked channels result when
34657 -you make a stream from a descriptor using `fdopen', when you get a
34658 -descriptor from a stream with `fileno', when you copy a descriptor with
34659 -`dup' or `dup2', and when descriptors are inherited during `fork'. For
34660 -files that don't support random access, such as terminals and pipes,
34661 -_all_ channels are effectively linked. On random-access files, all
34662 -append-type output streams are effectively linked to each other.
34664 - If you have been using a stream for I/O (or have just opened the
34665 -stream), and you want to do I/O using another channel (either a stream
34666 -or a descriptor) that is linked to it, you must first "clean up" the
34667 -stream that you have been using. *Note Cleaning Streams::.
34669 - Terminating a process, or executing a new program in the process,
34670 -destroys all the streams in the process. If descriptors linked to these
34671 -streams persist in other processes, their file positions become
34672 -undefined as a result. To prevent this, you must clean up the streams
34673 -before destroying them.
34675 -\x1f
34676 -File: libc.info, Node: Independent Channels, Next: Cleaning Streams, Prev: Linked Channels, Up: Stream/Descriptor Precautions
34678 -Independent Channels
34679 ---------------------
34681 - When you open channels (streams or descriptors) separately on a
34682 -seekable file, each channel has its own file position. These are called
34683 -"independent channels".
34685 - The system handles each channel independently. Most of the time,
34686 -this is quite predictable and natural (especially for input): each
34687 -channel can read or write sequentially at its own place in the file.
34688 -However, if some of the channels are streams, you must take these
34689 -precautions:
34691 - * You should clean an output stream after use, before doing anything
34692 - else that might read or write from the same part of the file.
34694 - * You should clean an input stream before reading data that may have
34695 - been modified using an independent channel. Otherwise, you might
34696 - read obsolete data that had been in the stream's buffer.
34698 - If you do output to one channel at the end of the file, this will
34699 -certainly leave the other independent channels positioned somewhere
34700 -before the new end. You cannot reliably set their file positions to the
34701 -new end of file before writing, because the file can always be extended
34702 -by another process between when you set the file position and when you
34703 -write the data. Instead, use an append-type descriptor or stream; they
34704 -always output at the current end of the file. In order to make the
34705 -end-of-file position accurate, you must clean the output channel you
34706 -were using, if it is a stream.
34708 - It's impossible for two channels to have separate file pointers for a
34709 -file that doesn't support random access. Thus, channels for reading or
34710 -writing such files are always linked, never independent. Append-type
34711 -channels are also always linked. For these channels, follow the rules
34712 -for linked channels; see *Note Linked Channels::.
34714 -\x1f
34715 -File: libc.info, Node: Cleaning Streams, Prev: Independent Channels, Up: Stream/Descriptor Precautions
34717 -Cleaning Streams
34718 -----------------
34720 - On the GNU system, you can clean up any stream with `fclean':
34722 - - Function: int fclean (FILE *STREAM)
34723 - Clean up the stream STREAM so that its buffer is empty. If STREAM
34724 - is doing output, force it out. If STREAM is doing input, give the
34725 - data in the buffer back to the system, arranging to reread it.
34727 - On other systems, you can use `fflush' to clean a stream in most
34728 -cases.
34730 - You can skip the `fclean' or `fflush' if you know the stream is
34731 -already clean. A stream is clean whenever its buffer is empty. For
34732 -example, an unbuffered stream is always clean. An input stream that is
34733 -at end-of-file is clean. A line-buffered stream is clean when the last
34734 -character output was a newline. However, a just-opened input stream
34735 -might not be clean, as its input buffer might not be empty.
34737 - There is one case in which cleaning a stream is impossible on most
34738 -systems. This is when the stream is doing input from a file that is not
34739 -random-access. Such streams typically read ahead, and when the file is
34740 -not random access, there is no way to give back the excess data already
34741 -read. When an input stream reads from a random-access file, `fflush'
34742 -does clean the stream, but leaves the file pointer at an unpredictable
34743 -place; you must set the file pointer before doing any further I/O. On
34744 -the GNU system, using `fclean' avoids both of these problems.
34746 - Closing an output-only stream also does `fflush', so this is a valid
34747 -way of cleaning an output stream. On the GNU system, closing an input
34748 -stream does `fclean'.
34750 - You need not clean a stream before using its descriptor for control
34751 -operations such as setting terminal modes; these operations don't affect
34752 -the file position and are not affected by it. You can use any
34753 -descriptor for these operations, and all channels are affected
34754 -simultaneously. However, text already "output" to a stream but still
34755 -buffered by the stream will be subject to the new terminal modes when
34756 -subsequently flushed. To make sure "past" output is covered by the
34757 -terminal settings that were in effect at the time, flush the output
34758 -streams for that terminal before setting the modes. *Note Terminal
34759 -Modes::.
34761 -\x1f
34762 -File: libc.info, Node: Scatter-Gather, Next: Memory-mapped I/O, Prev: Stream/Descriptor Precautions, Up: Low-Level I/O
34764 -Fast Scatter-Gather I/O
34765 -=======================
34767 - Some applications may need to read or write data to multiple buffers,
34768 -which are separated in memory. Although this can be done easily enough
34769 -with multiple calls to `read' and `write', it is inefficient because
34770 -there is overhead associated with each kernel call.
34772 - Instead, many platforms provide special high-speed primitives to
34773 -perform these "scatter-gather" operations in a single kernel call. The
34774 -GNU C library will provide an emulation on any system that lacks these
34775 -primitives, so they are not a portability threat. They are defined in
34776 -`sys/uio.h'.
34778 - These functions are controlled with arrays of `iovec' structures,
34779 -which describe the location and size of each buffer.
34781 - - Data Type: struct iovec
34782 - The `iovec' structure describes a buffer. It contains two fields:
34784 - `void *iov_base'
34785 - Contains the address of a buffer.
34787 - `size_t iov_len'
34788 - Contains the length of the buffer.
34791 - - Function: ssize_t readv (int FILEDES, const struct iovec *VECTOR,
34792 - int COUNT)
34793 - The `readv' function reads data from FILEDES and scatters it into
34794 - the buffers described in VECTOR, which is taken to be COUNT
34795 - structures long. As each buffer is filled, data is sent to the
34796 - next.
34798 - Note that `readv' is not guaranteed to fill all the buffers. It
34799 - may stop at any point, for the same reasons `read' would.
34801 - The return value is a count of bytes (_not_ buffers) read, 0
34802 - indicating end-of-file, or -1 indicating an error. The possible
34803 - errors are the same as in `read'.
34806 - - Function: ssize_t writev (int FILEDES, const struct iovec *VECTOR,
34807 - int COUNT)
34808 - The `writev' function gathers data from the buffers described in
34809 - VECTOR, which is taken to be COUNT structures long, and writes
34810 - them to `filedes'. As each buffer is written, it moves on to the
34811 - next.
34813 - Like `readv', `writev' may stop midstream under the same
34814 - conditions `write' would.
34816 - The return value is a count of bytes written, or -1 indicating an
34817 - error. The possible errors are the same as in `write'.
34820 - Note that if the buffers are small (under about 1kB), high-level
34821 -streams may be easier to use than these functions. However, `readv' and
34822 -`writev' are more efficient when the individual buffers themselves (as
34823 -opposed to the total output), are large. In that case, a high-level
34824 -stream would not be able to cache the data effectively.
34826 diff -u -udbrN glibc-2.3.2/manual/libc.info-22 glibc-2.3.2-200304020432/manual/libc.info-22
34827 --- glibc-2.3.2/manual/libc.info-22 Sat Mar 1 02:39:41 2003
34828 +++ glibc-2.3.2-200304020432/manual/libc.info-22 Thu Jan 1 01:00:00 1970
34829 @@ -1,1103 +0,0 @@
34830 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
34832 -INFO-DIR-SECTION GNU libraries
34833 -START-INFO-DIR-ENTRY
34834 -* Libc: (libc). C library.
34835 -END-INFO-DIR-ENTRY
34837 - This file documents the GNU C library.
34839 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
34840 -Reference Manual', for Version 2.3.x.
34842 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
34843 -Free Software Foundation, Inc.
34845 - Permission is granted to copy, distribute and/or modify this document
34846 -under the terms of the GNU Free Documentation License, Version 1.1 or
34847 -any later version published by the Free Software Foundation; with the
34848 -Invariant Sections being "Free Software Needs Free Documentation" and
34849 -"GNU Lesser General Public License", the Front-Cover texts being (a)
34850 -(see below), and with the Back-Cover Texts being (b) (see below). A
34851 -copy of the license is included in the section entitled "GNU Free
34852 -Documentation License".
34854 - (a) The FSF's Front-Cover Text is:
34856 - A GNU Manual
34858 - (b) The FSF's Back-Cover Text is:
34860 - You have freedom to copy and modify this GNU Manual, like GNU
34861 -software. Copies published by the Free Software Foundation raise
34862 -funds for GNU development.
34864 -\x1f
34865 -File: libc.info, Node: Memory-mapped I/O, Next: Waiting for I/O, Prev: Scatter-Gather, Up: Low-Level I/O
34867 -Memory-mapped I/O
34868 -=================
34870 - On modern operating systems, it is possible to "mmap" (pronounced
34871 -"em-map") a file to a region of memory. When this is done, the file can
34872 -be accessed just like an array in the program.
34874 - This is more efficient than `read' or `write', as only the regions
34875 -of the file that a program actually accesses are loaded. Accesses to
34876 -not-yet-loaded parts of the mmapped region are handled in the same way
34877 -as swapped out pages.
34879 - Since mmapped pages can be stored back to their file when physical
34880 -memory is low, it is possible to mmap files orders of magnitude larger
34881 -than both the physical memory _and_ swap space. The only limit is
34882 -address space. The theoretical limit is 4GB on a 32-bit machine -
34883 -however, the actual limit will be smaller since some areas will be
34884 -reserved for other purposes. If the LFS interface is used the file size
34885 -on 32-bit systems is not limited to 2GB (offsets are signed which
34886 -reduces the addressable area of 4GB by half); the full 64-bit are
34887 -available.
34889 - Memory mapping only works on entire pages of memory. Thus, addresses
34890 -for mapping must be page-aligned, and length values will be rounded up.
34891 -To determine the size of a page the machine uses one should use
34893 - size_t page_size = (size_t) sysconf (_SC_PAGESIZE);
34895 -These functions are declared in `sys/mman.h'.
34897 - - Function: void * mmap (void *ADDRESS, size_t LENGTH,int PROTECT, int
34898 - FLAGS, int FILEDES, off_t OFFSET)
34899 - The `mmap' function creates a new mapping, connected to bytes
34900 - (OFFSET) to (OFFSET + LENGTH - 1) in the file open on FILEDES. A
34901 - new reference for the file specified by FILEDES is created, which
34902 - is not removed by closing the file.
34904 - ADDRESS gives a preferred starting address for the mapping.
34905 - `NULL' expresses no preference. Any previous mapping at that
34906 - address is automatically removed. The address you give may still be
34907 - changed, unless you use the `MAP_FIXED' flag.
34909 - PROTECT contains flags that control what kind of access is
34910 - permitted. They include `PROT_READ', `PROT_WRITE', and
34911 - `PROT_EXEC', which permit reading, writing, and execution,
34912 - respectively. Inappropriate access will cause a segfault (*note
34913 - Program Error Signals::).
34915 - Note that most hardware designs cannot support write permission
34916 - without read permission, and many do not distinguish read and
34917 - execute permission. Thus, you may receive wider permissions than
34918 - you ask for, and mappings of write-only files may be denied even
34919 - if you do not use `PROT_READ'.
34921 - FLAGS contains flags that control the nature of the map. One of
34922 - `MAP_SHARED' or `MAP_PRIVATE' must be specified.
34924 - They include:
34926 - `MAP_PRIVATE'
34927 - This specifies that writes to the region should never be
34928 - written back to the attached file. Instead, a copy is made
34929 - for the process, and the region will be swapped normally if
34930 - memory runs low. No other process will see the changes.
34932 - Since private mappings effectively revert to ordinary memory
34933 - when written to, you must have enough virtual memory for a
34934 - copy of the entire mmapped region if you use this mode with
34935 - `PROT_WRITE'.
34937 - `MAP_SHARED'
34938 - This specifies that writes to the region will be written back
34939 - to the file. Changes made will be shared immediately with
34940 - other processes mmaping the same file.
34942 - Note that actual writing may take place at any time. You
34943 - need to use `msync', described below, if it is important that
34944 - other processes using conventional I/O get a consistent view
34945 - of the file.
34947 - `MAP_FIXED'
34948 - This forces the system to use the exact mapping address
34949 - specified in ADDRESS and fail if it can't.
34951 - `MAP_ANONYMOUS'
34952 - `MAP_ANON'
34953 - This flag tells the system to create an anonymous mapping,
34954 - not connected to a file. FILEDES and OFF are ignored, and
34955 - the region is initialized with zeros.
34957 - Anonymous maps are used as the basic primitive to extend the
34958 - heap on some systems. They are also useful to share data
34959 - between multiple tasks without creating a file.
34961 - On some systems using private anonymous mmaps is more
34962 - efficient than using `malloc' for large blocks. This is not
34963 - an issue with the GNU C library, as the included `malloc'
34964 - automatically uses `mmap' where appropriate.
34966 - `mmap' returns the address of the new mapping, or -1 for an error.
34968 - Possible errors include:
34970 - `EINVAL'
34971 - Either ADDRESS was unusable, or inconsistent FLAGS were given.
34973 - `EACCES'
34974 - FILEDES was not open for the type of access specified in
34975 - PROTECT.
34977 - `ENOMEM'
34978 - Either there is not enough memory for the operation, or the
34979 - process is out of address space.
34981 - `ENODEV'
34982 - This file is of a type that doesn't support mapping.
34984 - `ENOEXEC'
34985 - The file is on a filesystem that doesn't support mapping.
34988 - - Function: void * mmap64 (void *ADDRESS, size_t LENGTH,int PROTECT,
34989 - int FLAGS, int FILEDES, off64_t OFFSET)
34990 - The `mmap64' function is equivalent to the `mmap' function but the
34991 - OFFSET parameter is of type `off64_t'. On 32-bit systems this
34992 - allows the file associated with the FILEDES descriptor to be
34993 - larger than 2GB. FILEDES must be a descriptor returned from a
34994 - call to `open64' or `fopen64' and `freopen64' where the descriptor
34995 - is retrieved with `fileno'.
34997 - When the sources are translated with `_FILE_OFFSET_BITS == 64' this
34998 - function is actually available under the name `mmap'. I.e., the
34999 - new, extended API using 64 bit file sizes and offsets transparently
35000 - replaces the old API.
35002 - - Function: int munmap (void *ADDR, size_t LENGTH)
35003 - `munmap' removes any memory maps from (ADDR) to (ADDR + LENGTH).
35004 - LENGTH should be the length of the mapping.
35006 - It is safe to unmap multiple mappings in one command, or include
35007 - unmapped space in the range. It is also possible to unmap only
35008 - part of an existing mapping. However, only entire pages can be
35009 - removed. If LENGTH is not an even number of pages, it will be
35010 - rounded up.
35012 - It returns 0 for success and -1 for an error.
35014 - One error is possible:
35016 - `EINVAL'
35017 - The memory range given was outside the user mmap range or
35018 - wasn't page aligned.
35021 - - Function: int msync (void *ADDRESS, size_t LENGTH, int FLAGS)
35022 - When using shared mappings, the kernel can write the file at any
35023 - time before the mapping is removed. To be certain data has
35024 - actually been written to the file and will be accessible to
35025 - non-memory-mapped I/O, it is necessary to use this function.
35027 - It operates on the region ADDRESS to (ADDRESS + LENGTH). It may
35028 - be used on part of a mapping or multiple mappings, however the
35029 - region given should not contain any unmapped space.
35031 - FLAGS can contain some options:
35033 - `MS_SYNC'
35034 - This flag makes sure the data is actually written _to disk_.
35035 - Normally `msync' only makes sure that accesses to a file with
35036 - conventional I/O reflect the recent changes.
35038 - `MS_ASYNC'
35039 - This tells `msync' to begin the synchronization, but not to
35040 - wait for it to complete.
35042 - `msync' returns 0 for success and -1 for error. Errors include:
35044 - `EINVAL'
35045 - An invalid region was given, or the FLAGS were invalid.
35047 - `EFAULT'
35048 - There is no existing mapping in at least part of the given
35049 - region.
35052 - - Function: void * mremap (void *ADDRESS, size_t LENGTH, size_t
35053 - NEW_LENGTH, int FLAG)
35054 - This function can be used to change the size of an existing memory
35055 - area. ADDRESS and LENGTH must cover a region entirely mapped in
35056 - the same `mmap' statement. A new mapping with the same
35057 - characteristics will be returned with the length NEW_LENGTH.
35059 - One option is possible, `MREMAP_MAYMOVE'. If it is given in FLAGS,
35060 - the system may remove the existing mapping and create a new one of
35061 - the desired length in another location.
35063 - The address of the resulting mapping is returned, or -1. Possible
35064 - error codes include:
35066 - `EFAULT'
35067 - There is no existing mapping in at least part of the original
35068 - region, or the region covers two or more distinct mappings.
35070 - `EINVAL'
35071 - The address given is misaligned or inappropriate.
35073 - `EAGAIN'
35074 - The region has pages locked, and if extended it would exceed
35075 - the process's resource limit for locked pages. *Note Limits
35076 - on Resources::.
35078 - `ENOMEM'
35079 - The region is private writable, and insufficient virtual
35080 - memory is available to extend it. Also, this error will
35081 - occur if `MREMAP_MAYMOVE' is not given and the extension
35082 - would collide with another mapped region.
35085 - This function is only available on a few systems. Except for
35086 -performing optional optimizations one should not rely on this function.
35088 - Not all file descriptors may be mapped. Sockets, pipes, and most
35089 -devices only allow sequential access and do not fit into the mapping
35090 -abstraction. In addition, some regular files may not be mmapable, and
35091 -older kernels may not support mapping at all. Thus, programs using
35092 -`mmap' should have a fallback method to use should it fail. *Note Mmap:
35093 -(standards)Mmap.
35095 - - Function: int madvise (void *ADDR, size_t LENGTH, int ADVICE)
35096 - This function can be used to provide the system with ADVICE about
35097 - the intended usage patterns of the memory region starting at ADDR
35098 - and extending LENGTH bytes.
35100 - The valid BSD values for ADVICE are:
35102 - `MADV_NORMAL'
35103 - The region should receive no further special treatment.
35105 - `MADV_RANDOM'
35106 - The region will be accessed via random page references. The
35107 - kernel should page-in the minimal number of pages for each
35108 - page fault.
35110 - `MADV_SEQUENTIAL'
35111 - The region will be accessed via sequential page references.
35112 - This may cause the kernel to aggressively read-ahead,
35113 - expecting further sequential references after any page fault
35114 - within this region.
35116 - `MADV_WILLNEED'
35117 - The region will be needed. The pages within this region may
35118 - be pre-faulted in by the kernel.
35120 - `MADV_DONTNEED'
35121 - The region is no longer needed. The kernel may free these
35122 - pages, causing any changes to the pages to be lost, as well
35123 - as swapped out pages to be discarded.
35125 - The POSIX names are slightly different, but with the same meanings:
35127 - `POSIX_MADV_NORMAL'
35128 - This corresponds with BSD's `MADV_NORMAL'.
35130 - `POSIX_MADV_RANDOM'
35131 - This corresponds with BSD's `MADV_RANDOM'.
35133 - `POSIX_MADV_SEQUENTIAL'
35134 - This corresponds with BSD's `MADV_SEQUENTIAL'.
35136 - `POSIX_MADV_WILLNEED'
35137 - This corresponds with BSD's `MADV_WILLNEED'.
35139 - `POSIX_MADV_DONTNEED'
35140 - This corresponds with BSD's `MADV_DONTNEED'.
35142 - `msync' returns 0 for success and -1 for error. Errors include:
35143 - `EINVAL'
35144 - An invalid region was given, or the ADVICE was invalid.
35146 - `EFAULT'
35147 - There is no existing mapping in at least part of the given
35148 - region.
35151 -\x1f
35152 -File: libc.info, Node: Waiting for I/O, Next: Synchronizing I/O, Prev: Memory-mapped I/O, Up: Low-Level I/O
35154 -Waiting for Input or Output
35155 -===========================
35157 - Sometimes a program needs to accept input on multiple input channels
35158 -whenever input arrives. For example, some workstations may have devices
35159 -such as a digitizing tablet, function button box, or dial box that are
35160 -connected via normal asynchronous serial interfaces; good user interface
35161 -style requires responding immediately to input on any device. Another
35162 -example is a program that acts as a server to several other processes
35163 -via pipes or sockets.
35165 - You cannot normally use `read' for this purpose, because this blocks
35166 -the program until input is available on one particular file descriptor;
35167 -input on other channels won't wake it up. You could set nonblocking
35168 -mode and poll each file descriptor in turn, but this is very
35169 -inefficient.
35171 - A better solution is to use the `select' function. This blocks the
35172 -program until input or output is ready on a specified set of file
35173 -descriptors, or until a timer expires, whichever comes first. This
35174 -facility is declared in the header file `sys/types.h'.
35176 - In the case of a server socket (*note Listening::), we say that
35177 -"input" is available when there are pending connections that could be
35178 -accepted (*note Accepting Connections::). `accept' for server sockets
35179 -blocks and interacts with `select' just as `read' does for normal input.
35181 - The file descriptor sets for the `select' function are specified as
35182 -`fd_set' objects. Here is the description of the data type and some
35183 -macros for manipulating these objects.
35185 - - Data Type: fd_set
35186 - The `fd_set' data type represents file descriptor sets for the
35187 - `select' function. It is actually a bit array.
35189 - - Macro: int FD_SETSIZE
35190 - The value of this macro is the maximum number of file descriptors
35191 - that a `fd_set' object can hold information about. On systems
35192 - with a fixed maximum number, `FD_SETSIZE' is at least that number.
35193 - On some systems, including GNU, there is no absolute limit on the
35194 - number of descriptors open, but this macro still has a constant
35195 - value which controls the number of bits in an `fd_set'; if you get
35196 - a file descriptor with a value as high as `FD_SETSIZE', you cannot
35197 - put that descriptor into an `fd_set'.
35199 - - Macro: void FD_ZERO (fd_set *SET)
35200 - This macro initializes the file descriptor set SET to be the empty
35201 - set.
35203 - - Macro: void FD_SET (int FILEDES, fd_set *SET)
35204 - This macro adds FILEDES to the file descriptor set SET.
35206 - - Macro: void FD_CLR (int FILEDES, fd_set *SET)
35207 - This macro removes FILEDES from the file descriptor set SET.
35209 - - Macro: int FD_ISSET (int FILEDES, fd_set *SET)
35210 - This macro returns a nonzero value (true) if FILEDES is a member
35211 - of the file descriptor set SET, and zero (false) otherwise.
35213 - Next, here is the description of the `select' function itself.
35215 - - Function: int select (int NFDS, fd_set *READ-FDS, fd_set *WRITE-FDS,
35216 - fd_set *EXCEPT-FDS, struct timeval *TIMEOUT)
35217 - The `select' function blocks the calling process until there is
35218 - activity on any of the specified sets of file descriptors, or
35219 - until the timeout period has expired.
35221 - The file descriptors specified by the READ-FDS argument are
35222 - checked to see if they are ready for reading; the WRITE-FDS file
35223 - descriptors are checked to see if they are ready for writing; and
35224 - the EXCEPT-FDS file descriptors are checked for exceptional
35225 - conditions. You can pass a null pointer for any of these
35226 - arguments if you are not interested in checking for that kind of
35227 - condition.
35229 - A file descriptor is considered ready for reading if it is not at
35230 - end of file. A server socket is considered ready for reading if
35231 - there is a pending connection which can be accepted with `accept';
35232 - *note Accepting Connections::. A client socket is ready for
35233 - writing when its connection is fully established; *note
35234 - Connecting::.
35236 - "Exceptional conditions" does not mean errors--errors are reported
35237 - immediately when an erroneous system call is executed, and do not
35238 - constitute a state of the descriptor. Rather, they include
35239 - conditions such as the presence of an urgent message on a socket.
35240 - (*Note Sockets::, for information on urgent messages.)
35242 - The `select' function checks only the first NFDS file descriptors.
35243 - The usual thing is to pass `FD_SETSIZE' as the value of this
35244 - argument.
35246 - The TIMEOUT specifies the maximum time to wait. If you pass a
35247 - null pointer for this argument, it means to block indefinitely
35248 - until one of the file descriptors is ready. Otherwise, you should
35249 - provide the time in `struct timeval' format; see *Note
35250 - High-Resolution Calendar::. Specify zero as the time (a `struct
35251 - timeval' containing all zeros) if you want to find out which
35252 - descriptors are ready without waiting if none are ready.
35254 - The normal return value from `select' is the total number of ready
35255 - file descriptors in all of the sets. Each of the argument sets is
35256 - overwritten with information about the descriptors that are ready
35257 - for the corresponding operation. Thus, to see if a particular
35258 - descriptor DESC has input, use `FD_ISSET (DESC, READ-FDS)' after
35259 - `select' returns.
35261 - If `select' returns because the timeout period expires, it returns
35262 - a value of zero.
35264 - Any signal will cause `select' to return immediately. So if your
35265 - program uses signals, you can't rely on `select' to keep waiting
35266 - for the full time specified. If you want to be sure of waiting
35267 - for a particular amount of time, you must check for `EINTR' and
35268 - repeat the `select' with a newly calculated timeout based on the
35269 - current time. See the example below. See also *Note Interrupted
35270 - Primitives::.
35272 - If an error occurs, `select' returns `-1' and does not modify the
35273 - argument file descriptor sets. The following `errno' error
35274 - conditions are defined for this function:
35276 - `EBADF'
35277 - One of the file descriptor sets specified an invalid file
35278 - descriptor.
35280 - `EINTR'
35281 - The operation was interrupted by a signal. *Note Interrupted
35282 - Primitives::.
35284 - `EINVAL'
35285 - The TIMEOUT argument is invalid; one of the components is
35286 - negative or too large.
35288 - *Portability Note:* The `select' function is a BSD Unix feature.
35290 - Here is an example showing how you can use `select' to establish a
35291 -timeout period for reading from a file descriptor. The `input_timeout'
35292 -function blocks the calling process until input is available on the
35293 -file descriptor, or until the timeout period expires.
35295 - #include <errno.h>
35296 - #include <stdio.h>
35297 - #include <unistd.h>
35298 - #include <sys/types.h>
35299 - #include <sys/time.h>
35301 - int
35302 - input_timeout (int filedes, unsigned int seconds)
35304 - fd_set set;
35305 - struct timeval timeout;
35307 - /* Initialize the file descriptor set. */
35308 - FD_ZERO (&set);
35309 - FD_SET (filedes, &set);
35311 - /* Initialize the timeout data structure. */
35312 - timeout.tv_sec = seconds;
35313 - timeout.tv_usec = 0;
35315 - /* `select' returns 0 if timeout, 1 if input available, -1 if error. */
35316 - return TEMP_FAILURE_RETRY (select (FD_SETSIZE,
35317 - &set, NULL, NULL,
35318 - &timeout));
35321 - int
35322 - main (void)
35324 - fprintf (stderr, "select returned %d.\n",
35325 - input_timeout (STDIN_FILENO, 5));
35326 - return 0;
35329 - There is another example showing the use of `select' to multiplex
35330 -input from multiple sockets in *Note Server Example::.
35332 -\x1f
35333 -File: libc.info, Node: Synchronizing I/O, Next: Asynchronous I/O, Prev: Waiting for I/O, Up: Low-Level I/O
35335 -Synchronizing I/O operations
35336 -============================
35338 - In most modern operating systems, the normal I/O operations are not
35339 -executed synchronously. I.e., even if a `write' system call returns,
35340 -this does not mean the data is actually written to the media, e.g., the
35341 -disk.
35343 - In situations where synchronization points are necessary, you can use
35344 -special functions which ensure that all operations finish before they
35345 -return.
35347 - - Function: int sync (void)
35348 - A call to this function will not return as long as there is data
35349 - which has not been written to the device. All dirty buffers in
35350 - the kernel will be written and so an overall consistent system can
35351 - be achieved (if no other process in parallel writes data).
35353 - A prototype for `sync' can be found in `unistd.h'.
35355 - The return value is zero to indicate no error.
35357 - Programs more often want to ensure that data written to a given file
35358 -is committed, rather than all data in the system. For this, `sync' is
35359 -overkill.
35361 - - Function: int fsync (int FILDES)
35362 - The `fsync' function can be used to make sure all data associated
35363 - with the open file FILDES is written to the device associated with
35364 - the descriptor. The function call does not return unless all
35365 - actions have finished.
35367 - A prototype for `fsync' can be found in `unistd.h'.
35369 - This function is a cancellation point in multi-threaded programs.
35370 - This is a problem if the thread allocates some resources (like
35371 - memory, file descriptors, semaphores or whatever) at the time
35372 - `fsync' is called. If the thread gets canceled these resources
35373 - stay allocated until the program ends. To avoid this, calls to
35374 - `fsync' should be protected using cancellation handlers.
35376 - The return value of the function is zero if no error occurred.
35377 - Otherwise it is -1 and the global variable ERRNO is set to the
35378 - following values:
35379 - `EBADF'
35380 - The descriptor FILDES is not valid.
35382 - `EINVAL'
35383 - No synchronization is possible since the system does not
35384 - implement this.
35386 - Sometimes it is not even necessary to write all data associated with
35387 -a file descriptor. E.g., in database files which do not change in size
35388 -it is enough to write all the file content data to the device.
35389 -Meta-information, like the modification time etc., are not that
35390 -important and leaving such information uncommitted does not prevent a
35391 -successful recovering of the file in case of a problem.
35393 - - Function: int fdatasync (int FILDES)
35394 - When a call to the `fdatasync' function returns, it is ensured
35395 - that all of the file data is written to the device. For all
35396 - pending I/O operations, the parts guaranteeing data integrity
35397 - finished.
35399 - Not all systems implement the `fdatasync' operation. On systems
35400 - missing this functionality `fdatasync' is emulated by a call to
35401 - `fsync' since the performed actions are a superset of those
35402 - required by `fdatasync'.
35404 - The prototype for `fdatasync' is in `unistd.h'.
35406 - The return value of the function is zero if no error occurred.
35407 - Otherwise it is -1 and the global variable ERRNO is set to the
35408 - following values:
35409 - `EBADF'
35410 - The descriptor FILDES is not valid.
35412 - `EINVAL'
35413 - No synchronization is possible since the system does not
35414 - implement this.
35416 -\x1f
35417 -File: libc.info, Node: Asynchronous I/O, Next: Control Operations, Prev: Synchronizing I/O, Up: Low-Level I/O
35419 -Perform I/O Operations in Parallel
35420 -==================================
35422 - The POSIX.1b standard defines a new set of I/O operations which can
35423 -significantly reduce the time an application spends waiting at I/O. The
35424 -new functions allow a program to initiate one or more I/O operations and
35425 -then immediately resume normal work while the I/O operations are
35426 -executed in parallel. This functionality is available if the
35427 -`unistd.h' file defines the symbol `_POSIX_ASYNCHRONOUS_IO'.
35429 - These functions are part of the library with realtime functions named
35430 -`librt'. They are not actually part of the `libc' binary. The
35431 -implementation of these functions can be done using support in the
35432 -kernel (if available) or using an implementation based on threads at
35433 -userlevel. In the latter case it might be necessary to link
35434 -applications with the thread library `libpthread' in addition to
35435 -`librt'.
35437 - All AIO operations operate on files which were opened previously.
35438 -There might be arbitrarily many operations running for one file. The
35439 -asynchronous I/O operations are controlled using a data structure named
35440 -`struct aiocb' ("AIO control block"). It is defined in `aio.h' as
35441 -follows.
35443 - - Data Type: struct aiocb
35444 - The POSIX.1b standard mandates that the `struct aiocb' structure
35445 - contains at least the members described in the following table.
35446 - There might be more elements which are used by the implementation,
35447 - but depending upon these elements is not portable and is highly
35448 - deprecated.
35450 - `int aio_fildes'
35451 - This element specifies the file descriptor to be used for the
35452 - operation. It must be a legal descriptor, otherwise the
35453 - operation will fail.
35455 - The device on which the file is opened must allow the seek
35456 - operation. I.e., it is not possible to use any of the AIO
35457 - operations on devices like terminals where an `lseek' call
35458 - would lead to an error.
35460 - `off_t aio_offset'
35461 - This element specifies the offset in the file at which the
35462 - operation (input or output) is performed. Since the
35463 - operations are carried out in arbitrary order and more than
35464 - one operation for one file descriptor can be started, one
35465 - cannot expect a current read/write position of the file
35466 - descriptor.
35468 - `volatile void *aio_buf'
35469 - This is a pointer to the buffer with the data to be written
35470 - or the place where the read data is stored.
35472 - `size_t aio_nbytes'
35473 - This element specifies the length of the buffer pointed to by
35474 - `aio_buf'.
35476 - `int aio_reqprio'
35477 - If the platform has defined `_POSIX_PRIORITIZED_IO' and
35478 - `_POSIX_PRIORITY_SCHEDULING', the AIO requests are processed
35479 - based on the current scheduling priority. The `aio_reqprio'
35480 - element can then be used to lower the priority of the AIO
35481 - operation.
35483 - `struct sigevent aio_sigevent'
35484 - This element specifies how the calling process is notified
35485 - once the operation terminates. If the `sigev_notify' element
35486 - is `SIGEV_NONE', no notification is sent. If it is
35487 - `SIGEV_SIGNAL', the signal determined by `sigev_signo' is
35488 - sent. Otherwise, `sigev_notify' must be `SIGEV_THREAD'. In
35489 - this case, a thread is created which starts executing the
35490 - function pointed to by `sigev_notify_function'.
35492 - `int aio_lio_opcode'
35493 - This element is only used by the `lio_listio' and
35494 - `lio_listio64' functions. Since these functions allow an
35495 - arbitrary number of operations to start at once, and each
35496 - operation can be input or output (or nothing), the
35497 - information must be stored in the control block. The
35498 - possible values are:
35500 - `LIO_READ'
35501 - Start a read operation. Read from the file at position
35502 - `aio_offset' and store the next `aio_nbytes' bytes in the
35503 - buffer pointed to by `aio_buf'.
35505 - `LIO_WRITE'
35506 - Start a write operation. Write `aio_nbytes' bytes
35507 - starting at `aio_buf' into the file starting at position
35508 - `aio_offset'.
35510 - `LIO_NOP'
35511 - Do nothing for this control block. This value is useful
35512 - sometimes when an array of `struct aiocb' values
35513 - contains holes, i.e., some of the values must not be
35514 - handled although the whole array is presented to the
35515 - `lio_listio' function.
35517 - When the sources are compiled using `_FILE_OFFSET_BITS == 64' on a
35518 - 32 bit machine, this type is in fact `struct aiocb64', since the
35519 - LFS interface transparently replaces the `struct aiocb' definition.
35521 - For use with the AIO functions defined in the LFS, there is a
35522 -similar type defined which replaces the types of the appropriate
35523 -members with larger types but otherwise is equivalent to `struct
35524 -aiocb'. Particularly, all member names are the same.
35526 - - Data Type: struct aiocb64
35527 - `int aio_fildes'
35528 - This element specifies the file descriptor which is used for
35529 - the operation. It must be a legal descriptor since otherwise
35530 - the operation fails for obvious reasons.
35532 - The device on which the file is opened must allow the seek
35533 - operation. I.e., it is not possible to use any of the AIO
35534 - operations on devices like terminals where an `lseek' call
35535 - would lead to an error.
35537 - `off64_t aio_offset'
35538 - This element specifies at which offset in the file the
35539 - operation (input or output) is performed. Since the
35540 - operation are carried in arbitrary order and more than one
35541 - operation for one file descriptor can be started, one cannot
35542 - expect a current read/write position of the file descriptor.
35544 - `volatile void *aio_buf'
35545 - This is a pointer to the buffer with the data to be written
35546 - or the place where the read data is stored.
35548 - `size_t aio_nbytes'
35549 - This element specifies the length of the buffer pointed to by
35550 - `aio_buf'.
35552 - `int aio_reqprio'
35553 - If for the platform `_POSIX_PRIORITIZED_IO' and
35554 - `_POSIX_PRIORITY_SCHEDULING' are defined the AIO requests are
35555 - processed based on the current scheduling priority. The
35556 - `aio_reqprio' element can then be used to lower the priority
35557 - of the AIO operation.
35559 - `struct sigevent aio_sigevent'
35560 - This element specifies how the calling process is notified
35561 - once the operation terminates. If the `sigev_notify',
35562 - element is `SIGEV_NONE' no notification is sent. If it is
35563 - `SIGEV_SIGNAL', the signal determined by `sigev_signo' is
35564 - sent. Otherwise, `sigev_notify' must be `SIGEV_THREAD' in
35565 - which case a thread which starts executing the function
35566 - pointed to by `sigev_notify_function'.
35568 - `int aio_lio_opcode'
35569 - This element is only used by the `lio_listio' and
35570 - `[lio_listio64' functions. Since these functions allow an
35571 - arbitrary number of operations to start at once, and since
35572 - each operation can be input or output (or nothing), the
35573 - information must be stored in the control block. See the
35574 - description of `struct aiocb' for a description of the
35575 - possible values.
35577 - When the sources are compiled using `_FILE_OFFSET_BITS == 64' on a
35578 - 32 bit machine, this type is available under the name `struct
35579 - aiocb64', since the LFS transparently replaces the old interface.
35581 -* Menu:
35583 -* Asynchronous Reads/Writes:: Asynchronous Read and Write Operations.
35584 -* Status of AIO Operations:: Getting the Status of AIO Operations.
35585 -* Synchronizing AIO Operations:: Getting into a consistent state.
35586 -* Cancel AIO Operations:: Cancellation of AIO Operations.
35587 -* Configuration of AIO:: How to optimize the AIO implementation.
35589 -\x1f
35590 -File: libc.info, Node: Asynchronous Reads/Writes, Next: Status of AIO Operations, Up: Asynchronous I/O
35592 -Asynchronous Read and Write Operations
35593 ---------------------------------------
35595 - - Function: int aio_read (struct aiocb *AIOCBP)
35596 - This function initiates an asynchronous read operation. It
35597 - immediately returns after the operation was enqueued or when an
35598 - error was encountered.
35600 - The first `aiocbp->aio_nbytes' bytes of the file for which
35601 - `aiocbp->aio_fildes' is a descriptor are written to the buffer
35602 - starting at `aiocbp->aio_buf'. Reading starts at the absolute
35603 - position `aiocbp->aio_offset' in the file.
35605 - If prioritized I/O is supported by the platform the
35606 - `aiocbp->aio_reqprio' value is used to adjust the priority before
35607 - the request is actually enqueued.
35609 - The calling process is notified about the termination of the read
35610 - request according to the `aiocbp->aio_sigevent' value.
35612 - When `aio_read' returns, the return value is zero if no error
35613 - occurred that can be found before the process is enqueued. If
35614 - such an early error is found, the function returns -1 and sets
35615 - `errno' to one of the following values:
35617 - `EAGAIN'
35618 - The request was not enqueued due to (temporarily) exceeded
35619 - resource limitations.
35621 - `ENOSYS'
35622 - The `aio_read' function is not implemented.
35624 - `EBADF'
35625 - The `aiocbp->aio_fildes' descriptor is not valid. This
35626 - condition need not be recognized before enqueueing the
35627 - request and so this error might also be signaled
35628 - asynchronously.
35630 - `EINVAL'
35631 - The `aiocbp->aio_offset' or `aiocbp->aio_reqpiro' value is
35632 - invalid. This condition need not be recognized before
35633 - enqueueing the request and so this error might also be
35634 - signaled asynchronously.
35636 - If `aio_read' returns zero, the current status of the request can
35637 - be queried using `aio_error' and `aio_return' functions. As long
35638 - as the value returned by `aio_error' is `EINPROGRESS' the
35639 - operation has not yet completed. If `aio_error' returns zero, the
35640 - operation successfully terminated, otherwise the value is to be
35641 - interpreted as an error code. If the function terminated, the
35642 - result of the operation can be obtained using a call to
35643 - `aio_return'. The returned value is the same as an equivalent
35644 - call to `read' would have returned. Possible error codes returned
35645 - by `aio_error' are:
35647 - `EBADF'
35648 - The `aiocbp->aio_fildes' descriptor is not valid.
35650 - `ECANCELED'
35651 - The operation was canceled before the operation was finished
35652 - (*note Cancel AIO Operations::)
35654 - `EINVAL'
35655 - The `aiocbp->aio_offset' value is invalid.
35657 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
35658 - function is in fact `aio_read64' since the LFS interface
35659 - transparently replaces the normal implementation.
35661 - - Function: int aio_read64 (struct aiocb *AIOCBP)
35662 - This function is similar to the `aio_read' function. The only
35663 - difference is that on 32 bit machines, the file descriptor should
35664 - be opened in the large file mode. Internally, `aio_read64' uses
35665 - functionality equivalent to `lseek64' (*note File Position
35666 - Primitive::) to position the file descriptor correctly for the
35667 - reading, as opposed to `lseek' functionality used in `aio_read'.
35669 - When the sources are compiled with `_FILE_OFFSET_BITS == 64', this
35670 - function is available under the name `aio_read' and so
35671 - transparently replaces the interface for small files on 32 bit
35672 - machines.
35674 - To write data asynchronously to a file, there exists an equivalent
35675 -pair of functions with a very similar interface.
35677 - - Function: int aio_write (struct aiocb *AIOCBP)
35678 - This function initiates an asynchronous write operation. The
35679 - function call immediately returns after the operation was enqueued
35680 - or if before this happens an error was encountered.
35682 - The first `aiocbp->aio_nbytes' bytes from the buffer starting at
35683 - `aiocbp->aio_buf' are written to the file for which
35684 - `aiocbp->aio_fildes' is an descriptor, starting at the absolute
35685 - position `aiocbp->aio_offset' in the file.
35687 - If prioritized I/O is supported by the platform, the
35688 - `aiocbp->aio_reqprio' value is used to adjust the priority before
35689 - the request is actually enqueued.
35691 - The calling process is notified about the termination of the read
35692 - request according to the `aiocbp->aio_sigevent' value.
35694 - When `aio_write' returns, the return value is zero if no error
35695 - occurred that can be found before the process is enqueued. If
35696 - such an early error is found the function returns -1 and sets
35697 - `errno' to one of the following values.
35699 - `EAGAIN'
35700 - The request was not enqueued due to (temporarily) exceeded
35701 - resource limitations.
35703 - `ENOSYS'
35704 - The `aio_write' function is not implemented.
35706 - `EBADF'
35707 - The `aiocbp->aio_fildes' descriptor is not valid. This
35708 - condition may not be recognized before enqueueing the
35709 - request, and so this error might also be signaled
35710 - asynchronously.
35712 - `EINVAL'
35713 - The `aiocbp->aio_offset' or `aiocbp->aio_reqprio' value is
35714 - invalid. This condition may not be recognized before
35715 - enqueueing the request and so this error might also be
35716 - signaled asynchronously.
35718 - In the case `aio_write' returns zero, the current status of the
35719 - request can be queried using `aio_error' and `aio_return'
35720 - functions. As long as the value returned by `aio_error' is
35721 - `EINPROGRESS' the operation has not yet completed. If `aio_error'
35722 - returns zero, the operation successfully terminated, otherwise the
35723 - value is to be interpreted as an error code. If the function
35724 - terminated, the result of the operation can be get using a call to
35725 - `aio_return'. The returned value is the same as an equivalent
35726 - call to `read' would have returned. Possible error codes returned
35727 - by `aio_error' are:
35729 - `EBADF'
35730 - The `aiocbp->aio_fildes' descriptor is not valid.
35732 - `ECANCELED'
35733 - The operation was canceled before the operation was finished.
35734 - (*note Cancel AIO Operations::)
35736 - `EINVAL'
35737 - The `aiocbp->aio_offset' value is invalid.
35739 - When the sources are compiled with `_FILE_OFFSET_BITS == 64', this
35740 - function is in fact `aio_write64' since the LFS interface
35741 - transparently replaces the normal implementation.
35743 - - Function: int aio_write64 (struct aiocb *AIOCBP)
35744 - This function is similar to the `aio_write' function. The only
35745 - difference is that on 32 bit machines the file descriptor should
35746 - be opened in the large file mode. Internally `aio_write64' uses
35747 - functionality equivalent to `lseek64' (*note File Position
35748 - Primitive::) to position the file descriptor correctly for the
35749 - writing, as opposed to `lseek' functionality used in `aio_write'.
35751 - When the sources are compiled with `_FILE_OFFSET_BITS == 64', this
35752 - function is available under the name `aio_write' and so
35753 - transparently replaces the interface for small files on 32 bit
35754 - machines.
35756 - Besides these functions with the more or less traditional interface,
35757 -POSIX.1b also defines a function which can initiate more than one
35758 -operation at a time, and which can handle freely mixed read and write
35759 -operations. It is therefore similar to a combination of `readv' and
35760 -`writev'.
35762 - - Function: int lio_listio (int MODE, struct aiocb *const LIST[], int
35763 - NENT, struct sigevent *SIG)
35764 - The `lio_listio' function can be used to enqueue an arbitrary
35765 - number of read and write requests at one time. The requests can
35766 - all be meant for the same file, all for different files or every
35767 - solution in between.
35769 - `lio_listio' gets the NENT requests from the array pointed to by
35770 - LIST. The operation to be performed is determined by the
35771 - `aio_lio_opcode' member in each element of LIST. If this field is
35772 - `LIO_READ' a read operation is enqueued, similar to a call of
35773 - `aio_read' for this element of the array (except that the way the
35774 - termination is signalled is different, as we will see below). If
35775 - the `aio_lio_opcode' member is `LIO_WRITE' a write operation is
35776 - enqueued. Otherwise the `aio_lio_opcode' must be `LIO_NOP' in
35777 - which case this element of LIST is simply ignored. This
35778 - "operation" is useful in situations where one has a fixed array of
35779 - `struct aiocb' elements from which only a few need to be handled at
35780 - a time. Another situation is where the `lio_listio' call was
35781 - canceled before all requests are processed (*note Cancel AIO
35782 - Operations::) and the remaining requests have to be reissued.
35784 - The other members of each element of the array pointed to by
35785 - `list' must have values suitable for the operation as described in
35786 - the documentation for `aio_read' and `aio_write' above.
35788 - The MODE argument determines how `lio_listio' behaves after having
35789 - enqueued all the requests. If MODE is `LIO_WAIT' it waits until
35790 - all requests terminated. Otherwise MODE must be `LIO_NOWAIT' and
35791 - in this case the function returns immediately after having
35792 - enqueued all the requests. In this case the caller gets a
35793 - notification of the termination of all requests according to the
35794 - SIG parameter. If SIG is `NULL' no notification is send.
35795 - Otherwise a signal is sent or a thread is started, just as
35796 - described in the description for `aio_read' or `aio_write'.
35798 - If MODE is `LIO_WAIT', the return value of `lio_listio' is 0 when
35799 - all requests completed successfully. Otherwise the function
35800 - return -1 and `errno' is set accordingly. To find out which
35801 - request or requests failed one has to use the `aio_error' function
35802 - on all the elements of the array LIST.
35804 - In case MODE is `LIO_NOWAIT', the function returns 0 if all
35805 - requests were enqueued correctly. The current state of the
35806 - requests can be found using `aio_error' and `aio_return' as
35807 - described above. If `lio_listio' returns -1 in this mode, the
35808 - global variable `errno' is set accordingly. If a request did not
35809 - yet terminate, a call to `aio_error' returns `EINPROGRESS'. If
35810 - the value is different, the request is finished and the error
35811 - value (or 0) is returned and the result of the operation can be
35812 - retrieved using `aio_return'.
35814 - Possible values for `errno' are:
35816 - `EAGAIN'
35817 - The resources necessary to queue all the requests are not
35818 - available at the moment. The error status for each element
35819 - of LIST must be checked to determine which request failed.
35821 - Another reason could be that the system wide limit of AIO
35822 - requests is exceeded. This cannot be the case for the
35823 - implementation on GNU systems since no arbitrary limits exist.
35825 - `EINVAL'
35826 - The MODE parameter is invalid or NENT is larger than
35827 - `AIO_LISTIO_MAX'.
35829 - `EIO'
35830 - One or more of the request's I/O operations failed. The
35831 - error status of each request should be checked to determine
35832 - which one failed.
35834 - `ENOSYS'
35835 - The `lio_listio' function is not supported.
35837 - If the MODE parameter is `LIO_NOWAIT' and the caller cancels a
35838 - request, the error status for this request returned by `aio_error'
35839 - is `ECANCELED'.
35841 - When the sources are compiled with `_FILE_OFFSET_BITS == 64', this
35842 - function is in fact `lio_listio64' since the LFS interface
35843 - transparently replaces the normal implementation.
35845 - - Function: int lio_listio64 (int MODE, struct aiocb *const LIST, int
35846 - NENT, struct sigevent *SIG)
35847 - This function is similar to the `lio_listio' function. The only
35848 - difference is that on 32 bit machines, the file descriptor should
35849 - be opened in the large file mode. Internally, `lio_listio64' uses
35850 - functionality equivalent to `lseek64' (*note File Position
35851 - Primitive::) to position the file descriptor correctly for the
35852 - reading or writing, as opposed to `lseek' functionality used in
35853 - `lio_listio'.
35855 - When the sources are compiled with `_FILE_OFFSET_BITS == 64', this
35856 - function is available under the name `lio_listio' and so
35857 - transparently replaces the interface for small files on 32 bit
35858 - machines.
35860 -\x1f
35861 -File: libc.info, Node: Status of AIO Operations, Next: Synchronizing AIO Operations, Prev: Asynchronous Reads/Writes, Up: Asynchronous I/O
35863 -Getting the Status of AIO Operations
35864 -------------------------------------
35866 - As already described in the documentation of the functions in the
35867 -last section, it must be possible to get information about the status
35868 -of an I/O request. When the operation is performed truly
35869 -asynchronously (as with `aio_read' and `aio_write' and with
35870 -`lio_listio' when the mode is `LIO_NOWAIT'), one sometimes needs to
35871 -know whether a specific request already terminated and if so, what the
35872 -result was. The following two functions allow you to get this kind of
35873 -information.
35875 - - Function: int aio_error (const struct aiocb *AIOCBP)
35876 - This function determines the error state of the request described
35877 - by the `struct aiocb' variable pointed to by AIOCBP. If the
35878 - request has not yet terminated the value returned is always
35879 - `EINPROGRESS'. Once the request has terminated the value
35880 - `aio_error' returns is either 0 if the request completed
35881 - successfully or it returns the value which would be stored in the
35882 - `errno' variable if the request would have been done using `read',
35883 - `write', or `fsync'.
35885 - The function can return `ENOSYS' if it is not implemented. It
35886 - could also return `EINVAL' if the AIOCBP parameter does not refer
35887 - to an asynchronous operation whose return status is not yet known.
35889 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
35890 - function is in fact `aio_error64' since the LFS interface
35891 - transparently replaces the normal implementation.
35893 - - Function: int aio_error64 (const struct aiocb64 *AIOCBP)
35894 - This function is similar to `aio_error' with the only difference
35895 - that the argument is a reference to a variable of type `struct
35896 - aiocb64'.
35898 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
35899 - function is available under the name `aio_error' and so
35900 - transparently replaces the interface for small files on 32 bit
35901 - machines.
35903 - - Function: ssize_t aio_return (const struct aiocb *AIOCBP)
35904 - This function can be used to retrieve the return status of the
35905 - operation carried out by the request described in the variable
35906 - pointed to by AIOCBP. As long as the error status of this request
35907 - as returned by `aio_error' is `EINPROGRESS' the return of this
35908 - function is undefined.
35910 - Once the request is finished this function can be used exactly
35911 - once to retrieve the return value. Following calls might lead to
35912 - undefined behavior. The return value itself is the value which
35913 - would have been returned by the `read', `write', or `fsync' call.
35915 - The function can return `ENOSYS' if it is not implemented. It
35916 - could also return `EINVAL' if the AIOCBP parameter does not refer
35917 - to an asynchronous operation whose return status is not yet known.
35919 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
35920 - function is in fact `aio_return64' since the LFS interface
35921 - transparently replaces the normal implementation.
35923 - - Function: int aio_return64 (const struct aiocb64 *AIOCBP)
35924 - This function is similar to `aio_return' with the only difference
35925 - that the argument is a reference to a variable of type `struct
35926 - aiocb64'.
35928 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
35929 - function is available under the name `aio_return' and so
35930 - transparently replaces the interface for small files on 32 bit
35931 - machines.
35933 diff -u -udbrN glibc-2.3.2/manual/libc.info-23 glibc-2.3.2-200304020432/manual/libc.info-23
35934 --- glibc-2.3.2/manual/libc.info-23 Sat Mar 1 02:39:41 2003
35935 +++ glibc-2.3.2-200304020432/manual/libc.info-23 Thu Jan 1 01:00:00 1970
35936 @@ -1,1221 +0,0 @@
35937 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
35939 -INFO-DIR-SECTION GNU libraries
35940 -START-INFO-DIR-ENTRY
35941 -* Libc: (libc). C library.
35942 -END-INFO-DIR-ENTRY
35944 - This file documents the GNU C library.
35946 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
35947 -Reference Manual', for Version 2.3.x.
35949 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
35950 -Free Software Foundation, Inc.
35952 - Permission is granted to copy, distribute and/or modify this document
35953 -under the terms of the GNU Free Documentation License, Version 1.1 or
35954 -any later version published by the Free Software Foundation; with the
35955 -Invariant Sections being "Free Software Needs Free Documentation" and
35956 -"GNU Lesser General Public License", the Front-Cover texts being (a)
35957 -(see below), and with the Back-Cover Texts being (b) (see below). A
35958 -copy of the license is included in the section entitled "GNU Free
35959 -Documentation License".
35961 - (a) The FSF's Front-Cover Text is:
35963 - A GNU Manual
35965 - (b) The FSF's Back-Cover Text is:
35967 - You have freedom to copy and modify this GNU Manual, like GNU
35968 -software. Copies published by the Free Software Foundation raise
35969 -funds for GNU development.
35971 -\x1f
35972 -File: libc.info, Node: Synchronizing AIO Operations, Next: Cancel AIO Operations, Prev: Status of AIO Operations, Up: Asynchronous I/O
35974 -Getting into a Consistent State
35975 --------------------------------
35977 - When dealing with asynchronous operations it is sometimes necessary
35978 -to get into a consistent state. This would mean for AIO that one wants
35979 -to know whether a certain request or a group of request were processed.
35980 -This could be done by waiting for the notification sent by the system
35981 -after the operation terminated, but this sometimes would mean wasting
35982 -resources (mainly computation time). Instead POSIX.1b defines two
35983 -functions which will help with most kinds of consistency.
35985 - The `aio_fsync' and `aio_fsync64' functions are only available if
35986 -the symbol `_POSIX_SYNCHRONIZED_IO' is defined in `unistd.h'.
35988 - - Function: int aio_fsync (int OP, struct aiocb *AIOCBP)
35989 - Calling this function forces all I/O operations operating queued
35990 - at the time of the function call operating on the file descriptor
35991 - `aiocbp->aio_fildes' into the synchronized I/O completion state
35992 - (*note Synchronizing I/O::). The `aio_fsync' function returns
35993 - immediately but the notification through the method described in
35994 - `aiocbp->aio_sigevent' will happen only after all requests for this
35995 - file descriptor have terminated and the file is synchronized.
35996 - This also means that requests for this very same file descriptor
35997 - which are queued after the synchronization request are not
35998 - affected.
36000 - If OP is `O_DSYNC' the synchronization happens as with a call to
36001 - `fdatasync'. Otherwise OP should be `O_SYNC' and the
36002 - synchronization happens as with `fsync'.
36004 - As long as the synchronization has not happened, a call to
36005 - `aio_error' with the reference to the object pointed to by AIOCBP
36006 - returns `EINPROGRESS'. Once the synchronization is done
36007 - `aio_error' return 0 if the synchronization was not successful.
36008 - Otherwise the value returned is the value to which the `fsync' or
36009 - `fdatasync' function would have set the `errno' variable. In this
36010 - case nothing can be assumed about the consistency for the data
36011 - written to this file descriptor.
36013 - The return value of this function is 0 if the request was
36014 - successfully enqueued. Otherwise the return value is -1 and
36015 - `errno' is set to one of the following values:
36017 - `EAGAIN'
36018 - The request could not be enqueued due to temporary lack of
36019 - resources.
36021 - `EBADF'
36022 - The file descriptor `aiocbp->aio_fildes' is not valid or not
36023 - open for writing.
36025 - `EINVAL'
36026 - The implementation does not support I/O synchronization or
36027 - the OP parameter is other than `O_DSYNC' and `O_SYNC'.
36029 - `ENOSYS'
36030 - This function is not implemented.
36032 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
36033 - function is in fact `aio_fsync64' since the LFS interface
36034 - transparently replaces the normal implementation.
36036 - - Function: int aio_fsync64 (int OP, struct aiocb64 *AIOCBP)
36037 - This function is similar to `aio_fsync' with the only difference
36038 - that the argument is a reference to a variable of type `struct
36039 - aiocb64'.
36041 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
36042 - function is available under the name `aio_fsync' and so
36043 - transparently replaces the interface for small files on 32 bit
36044 - machines.
36046 - Another method of synchronization is to wait until one or more
36047 -requests of a specific set terminated. This could be achieved by the
36048 -`aio_*' functions to notify the initiating process about the
36049 -termination but in some situations this is not the ideal solution. In
36050 -a program which constantly updates clients somehow connected to the
36051 -server it is not always the best solution to go round robin since some
36052 -connections might be slow. On the other hand letting the `aio_*'
36053 -function notify the caller might also be not the best solution since
36054 -whenever the process works on preparing data for on client it makes no
36055 -sense to be interrupted by a notification since the new client will not
36056 -be handled before the current client is served. For situations like
36057 -this `aio_suspend' should be used.
36059 - - Function: int aio_suspend (const struct aiocb *const LIST[], int
36060 - NENT, const struct timespec *TIMEOUT)
36061 - When calling this function, the calling thread is suspended until
36062 - at least one of the requests pointed to by the NENT elements of the
36063 - array LIST has completed. If any of the requests has already
36064 - completed at the time `aio_suspend' is called, the function returns
36065 - immediately. Whether a request has terminated or not is
36066 - determined by comparing the error status of the request with
36067 - `EINPROGRESS'. If an element of LIST is `NULL', the entry is
36068 - simply ignored.
36070 - If no request has finished, the calling process is suspended. If
36071 - TIMEOUT is `NULL', the process is not woken until a request has
36072 - finished. If TIMEOUT is not `NULL', the process remains suspended
36073 - at least as long as specified in TIMEOUT. In this case,
36074 - `aio_suspend' returns with an error.
36076 - The return value of the function is 0 if one or more requests from
36077 - the LIST have terminated. Otherwise the function returns -1 and
36078 - `errno' is set to one of the following values:
36080 - `EAGAIN'
36081 - None of the requests from the LIST completed in the time
36082 - specified by TIMEOUT.
36084 - `EINTR'
36085 - A signal interrupted the `aio_suspend' function. This signal
36086 - might also be sent by the AIO implementation while signalling
36087 - the termination of one of the requests.
36089 - `ENOSYS'
36090 - The `aio_suspend' function is not implemented.
36092 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
36093 - function is in fact `aio_suspend64' since the LFS interface
36094 - transparently replaces the normal implementation.
36096 - - Function: int aio_suspend64 (const struct aiocb64 *const LIST[], int
36097 - NENT, const struct timespec *TIMEOUT)
36098 - This function is similar to `aio_suspend' with the only difference
36099 - that the argument is a reference to a variable of type `struct
36100 - aiocb64'.
36102 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
36103 - function is available under the name `aio_suspend' and so
36104 - transparently replaces the interface for small files on 32 bit
36105 - machines.
36107 -\x1f
36108 -File: libc.info, Node: Cancel AIO Operations, Next: Configuration of AIO, Prev: Synchronizing AIO Operations, Up: Asynchronous I/O
36110 -Cancellation of AIO Operations
36111 -------------------------------
36113 - When one or more requests are asynchronously processed, it might be
36114 -useful in some situations to cancel a selected operation, e.g., if it
36115 -becomes obvious that the written data is no longer accurate and would
36116 -have to be overwritten soon. As an example, assume an application,
36117 -which writes data in files in a situation where new incoming data would
36118 -have to be written in a file which will be updated by an enqueued
36119 -request. The POSIX AIO implementation provides such a function, but
36120 -this function is not capable of forcing the cancellation of the
36121 -request. It is up to the implementation to decide whether it is
36122 -possible to cancel the operation or not. Therefore using this function
36123 -is merely a hint.
36125 - - Function: int aio_cancel (int FILDES, struct aiocb *AIOCBP)
36126 - The `aio_cancel' function can be used to cancel one or more
36127 - outstanding requests. If the AIOCBP parameter is `NULL', the
36128 - function tries to cancel all of the outstanding requests which
36129 - would process the file descriptor FILDES (i.e., whose `aio_fildes'
36130 - member is FILDES). If AIOCBP is not `NULL', `aio_cancel' attempts
36131 - to cancel the specific request pointed to by AIOCBP.
36133 - For requests which were successfully canceled, the normal
36134 - notification about the termination of the request should take
36135 - place. I.e., depending on the `struct sigevent' object which
36136 - controls this, nothing happens, a signal is sent or a thread is
36137 - started. If the request cannot be canceled, it terminates the
36138 - usual way after performing the operation.
36140 - After a request is successfully canceled, a call to `aio_error'
36141 - with a reference to this request as the parameter will return
36142 - `ECANCELED' and a call to `aio_return' will return -1. If the
36143 - request wasn't canceled and is still running the error status is
36144 - still `EINPROGRESS'.
36146 - The return value of the function is `AIO_CANCELED' if there were
36147 - requests which haven't terminated and which were successfully
36148 - canceled. If there is one or more requests left which couldn't be
36149 - canceled, the return value is `AIO_NOTCANCELED'. In this case
36150 - `aio_error' must be used to find out which of the, perhaps
36151 - multiple, requests (in AIOCBP is `NULL') weren't successfully
36152 - canceled. If all requests already terminated at the time
36153 - `aio_cancel' is called the return value is `AIO_ALLDONE'.
36155 - If an error occurred during the execution of `aio_cancel' the
36156 - function returns -1 and sets `errno' to one of the following
36157 - values.
36159 - `EBADF'
36160 - The file descriptor FILDES is not valid.
36162 - `ENOSYS'
36163 - `aio_cancel' is not implemented.
36165 - When the sources are compiled with `_FILE_OFFSET_BITS == 64', this
36166 - function is in fact `aio_cancel64' since the LFS interface
36167 - transparently replaces the normal implementation.
36169 - - Function: int aio_cancel64 (int FILDES, struct aiocb64 *AIOCBP)
36170 - This function is similar to `aio_cancel' with the only difference
36171 - that the argument is a reference to a variable of type `struct
36172 - aiocb64'.
36174 - When the sources are compiled with `_FILE_OFFSET_BITS == 64', this
36175 - function is available under the name `aio_cancel' and so
36176 - transparently replaces the interface for small files on 32 bit
36177 - machines.
36179 -\x1f
36180 -File: libc.info, Node: Configuration of AIO, Prev: Cancel AIO Operations, Up: Asynchronous I/O
36182 -How to optimize the AIO implementation
36183 ---------------------------------------
36185 - The POSIX standard does not specify how the AIO functions are
36186 -implemented. They could be system calls, but it is also possible to
36187 -emulate them at userlevel.
36189 - At the point of this writing, the available implementation is a
36190 -userlevel implementation which uses threads for handling the enqueued
36191 -requests. While this implementation requires making some decisions
36192 -about limitations, hard limitations are something which is best avoided
36193 -in the GNU C library. Therefore, the GNU C library provides a means
36194 -for tuning the AIO implementation according to the individual use.
36196 - - Data Type: struct aioinit
36197 - This data type is used to pass the configuration or tunable
36198 - parameters to the implementation. The program has to initialize
36199 - the members of this struct and pass it to the implementation using
36200 - the `aio_init' function.
36202 - `int aio_threads'
36203 - This member specifies the maximal number of threads which may
36204 - be used at any one time.
36206 - `int aio_num'
36207 - This number provides an estimate on the maximal number of
36208 - simultaneously enqueued requests.
36210 - `int aio_locks'
36211 - Unused.
36213 - `int aio_usedba'
36214 - Unused.
36216 - `int aio_debug'
36217 - Unused.
36219 - `int aio_numusers'
36220 - Unused.
36222 - `int aio_reserved[2]'
36223 - Unused.
36225 - - Function: void aio_init (const struct aioinit *INIT)
36226 - This function must be called before any other AIO function.
36227 - Calling it is completely voluntary, as it is only meant to help
36228 - the AIO implementation perform better.
36230 - Before calling the `aio_init', function the members of a variable
36231 - of type `struct aioinit' must be initialized. Then a reference to
36232 - this variable is passed as the parameter to `aio_init' which itself
36233 - may or may not pay attention to the hints.
36235 - The function has no return value and no error cases are defined.
36236 - It is a extension which follows a proposal from the SGI
36237 - implementation in Irix 6. It is not covered by POSIX.1b or Unix98.
36239 -\x1f
36240 -File: libc.info, Node: Control Operations, Next: Duplicating Descriptors, Prev: Asynchronous I/O, Up: Low-Level I/O
36242 -Control Operations on Files
36243 -===========================
36245 - This section describes how you can perform various other operations
36246 -on file descriptors, such as inquiring about or setting flags describing
36247 -the status of the file descriptor, manipulating record locks, and the
36248 -like. All of these operations are performed by the function `fcntl'.
36250 - The second argument to the `fcntl' function is a command that
36251 -specifies which operation to perform. The function and macros that name
36252 -various flags that are used with it are declared in the header file
36253 -`fcntl.h'. Many of these flags are also used by the `open' function;
36254 -see *Note Opening and Closing Files::.
36256 - - Function: int fcntl (int FILEDES, int COMMAND, ...)
36257 - The `fcntl' function performs the operation specified by COMMAND
36258 - on the file descriptor FILEDES. Some commands require additional
36259 - arguments to be supplied. These additional arguments and the
36260 - return value and error conditions are given in the detailed
36261 - descriptions of the individual commands.
36263 - Briefly, here is a list of what the various commands are.
36265 - `F_DUPFD'
36266 - Duplicate the file descriptor (return another file descriptor
36267 - pointing to the same open file). *Note Duplicating
36268 - Descriptors::.
36270 - `F_GETFD'
36271 - Get flags associated with the file descriptor. *Note
36272 - Descriptor Flags::.
36274 - `F_SETFD'
36275 - Set flags associated with the file descriptor. *Note
36276 - Descriptor Flags::.
36278 - `F_GETFL'
36279 - Get flags associated with the open file. *Note File Status
36280 - Flags::.
36282 - `F_SETFL'
36283 - Set flags associated with the open file. *Note File Status
36284 - Flags::.
36286 - `F_GETLK'
36287 - Get a file lock. *Note File Locks::.
36289 - `F_SETLK'
36290 - Set or clear a file lock. *Note File Locks::.
36292 - `F_SETLKW'
36293 - Like `F_SETLK', but wait for completion. *Note File Locks::.
36295 - `F_GETOWN'
36296 - Get process or process group ID to receive `SIGIO' signals.
36297 - *Note Interrupt Input::.
36299 - `F_SETOWN'
36300 - Set process or process group ID to receive `SIGIO' signals.
36301 - *Note Interrupt Input::.
36303 - This function is a cancellation point in multi-threaded programs.
36304 - This is a problem if the thread allocates some resources (like
36305 - memory, file descriptors, semaphores or whatever) at the time
36306 - `fcntl' is called. If the thread gets canceled these resources
36307 - stay allocated until the program ends. To avoid this calls to
36308 - `fcntl' should be protected using cancellation handlers.
36310 -\x1f
36311 -File: libc.info, Node: Duplicating Descriptors, Next: Descriptor Flags, Prev: Control Operations, Up: Low-Level I/O
36313 -Duplicating Descriptors
36314 -=======================
36316 - You can "duplicate" a file descriptor, or allocate another file
36317 -descriptor that refers to the same open file as the original. Duplicate
36318 -descriptors share one file position and one set of file status flags
36319 -(*note File Status Flags::), but each has its own set of file descriptor
36320 -flags (*note Descriptor Flags::).
36322 - The major use of duplicating a file descriptor is to implement
36323 -"redirection" of input or output: that is, to change the file or pipe
36324 -that a particular file descriptor corresponds to.
36326 - You can perform this operation using the `fcntl' function with the
36327 -`F_DUPFD' command, but there are also convenient functions `dup' and
36328 -`dup2' for duplicating descriptors.
36330 - The `fcntl' function and flags are declared in `fcntl.h', while
36331 -prototypes for `dup' and `dup2' are in the header file `unistd.h'.
36333 - - Function: int dup (int OLD)
36334 - This function copies descriptor OLD to the first available
36335 - descriptor number (the first number not currently open). It is
36336 - equivalent to `fcntl (OLD, F_DUPFD, 0)'.
36338 - - Function: int dup2 (int OLD, int NEW)
36339 - This function copies the descriptor OLD to descriptor number NEW.
36341 - If OLD is an invalid descriptor, then `dup2' does nothing; it does
36342 - not close NEW. Otherwise, the new duplicate of OLD replaces any
36343 - previous meaning of descriptor NEW, as if NEW were closed first.
36345 - If OLD and NEW are different numbers, and OLD is a valid
36346 - descriptor number, then `dup2' is equivalent to:
36348 - close (NEW);
36349 - fcntl (OLD, F_DUPFD, NEW)
36351 - However, `dup2' does this atomically; there is no instant in the
36352 - middle of calling `dup2' at which NEW is closed and not yet a
36353 - duplicate of OLD.
36355 - - Macro: int F_DUPFD
36356 - This macro is used as the COMMAND argument to `fcntl', to copy the
36357 - file descriptor given as the first argument.
36359 - The form of the call in this case is:
36361 - fcntl (OLD, F_DUPFD, NEXT-FILEDES)
36363 - The NEXT-FILEDES argument is of type `int' and specifies that the
36364 - file descriptor returned should be the next available one greater
36365 - than or equal to this value.
36367 - The return value from `fcntl' with this command is normally the
36368 - value of the new file descriptor. A return value of -1 indicates
36369 - an error. The following `errno' error conditions are defined for
36370 - this command:
36372 - `EBADF'
36373 - The OLD argument is invalid.
36375 - `EINVAL'
36376 - The NEXT-FILEDES argument is invalid.
36378 - `EMFILE'
36379 - There are no more file descriptors available--your program is
36380 - already using the maximum. In BSD and GNU, the maximum is
36381 - controlled by a resource limit that can be changed; *note
36382 - Limits on Resources::, for more information about the
36383 - `RLIMIT_NOFILE' limit.
36385 - `ENFILE' is not a possible error code for `dup2' because `dup2'
36386 - does not create a new opening of a file; duplicate descriptors do
36387 - not count toward the limit which `ENFILE' indicates. `EMFILE' is
36388 - possible because it refers to the limit on distinct descriptor
36389 - numbers in use in one process.
36391 - Here is an example showing how to use `dup2' to do redirection.
36392 -Typically, redirection of the standard streams (like `stdin') is done
36393 -by a shell or shell-like program before calling one of the `exec'
36394 -functions (*note Executing a File::) to execute a new program in a
36395 -child process. When the new program is executed, it creates and
36396 -initializes the standard streams to point to the corresponding file
36397 -descriptors, before its `main' function is invoked.
36399 - So, to redirect standard input to a file, the shell could do
36400 -something like:
36402 - pid = fork ();
36403 - if (pid == 0)
36405 - char *filename;
36406 - char *program;
36407 - int file;
36408 - ...
36409 - file = TEMP_FAILURE_RETRY (open (filename, O_RDONLY));
36410 - dup2 (file, STDIN_FILENO);
36411 - TEMP_FAILURE_RETRY (close (file));
36412 - execv (program, NULL);
36415 - There is also a more detailed example showing how to implement
36416 -redirection in the context of a pipeline of processes in *Note
36417 -Launching Jobs::.
36419 -\x1f
36420 -File: libc.info, Node: Descriptor Flags, Next: File Status Flags, Prev: Duplicating Descriptors, Up: Low-Level I/O
36422 -File Descriptor Flags
36423 -=====================
36425 - "File descriptor flags" are miscellaneous attributes of a file
36426 -descriptor. These flags are associated with particular file
36427 -descriptors, so that if you have created duplicate file descriptors
36428 -from a single opening of a file, each descriptor has its own set of
36429 -flags.
36431 - Currently there is just one file descriptor flag: `FD_CLOEXEC',
36432 -which causes the descriptor to be closed if you use any of the
36433 -`exec...' functions (*note Executing a File::).
36435 - The symbols in this section are defined in the header file `fcntl.h'.
36437 - - Macro: int F_GETFD
36438 - This macro is used as the COMMAND argument to `fcntl', to specify
36439 - that it should return the file descriptor flags associated with
36440 - the FILEDES argument.
36442 - The normal return value from `fcntl' with this command is a
36443 - nonnegative number which can be interpreted as the bitwise OR of
36444 - the individual flags (except that currently there is only one flag
36445 - to use).
36447 - In case of an error, `fcntl' returns -1. The following `errno'
36448 - error conditions are defined for this command:
36450 - `EBADF'
36451 - The FILEDES argument is invalid.
36453 - - Macro: int F_SETFD
36454 - This macro is used as the COMMAND argument to `fcntl', to specify
36455 - that it should set the file descriptor flags associated with the
36456 - FILEDES argument. This requires a third `int' argument to specify
36457 - the new flags, so the form of the call is:
36459 - fcntl (FILEDES, F_SETFD, NEW-FLAGS)
36461 - The normal return value from `fcntl' with this command is an
36462 - unspecified value other than -1, which indicates an error. The
36463 - flags and error conditions are the same as for the `F_GETFD'
36464 - command.
36466 - The following macro is defined for use as a file descriptor flag with
36467 -the `fcntl' function. The value is an integer constant usable as a bit
36468 -mask value.
36470 - - Macro: int FD_CLOEXEC
36471 - This flag specifies that the file descriptor should be closed when
36472 - an `exec' function is invoked; see *Note Executing a File::. When
36473 - a file descriptor is allocated (as with `open' or `dup'), this bit
36474 - is initially cleared on the new file descriptor, meaning that
36475 - descriptor will survive into the new program after `exec'.
36477 - If you want to modify the file descriptor flags, you should get the
36478 -current flags with `F_GETFD' and modify the value. Don't assume that
36479 -the flags listed here are the only ones that are implemented; your
36480 -program may be run years from now and more flags may exist then. For
36481 -example, here is a function to set or clear the flag `FD_CLOEXEC'
36482 -without altering any other flags:
36484 - /* Set the `FD_CLOEXEC' flag of DESC if VALUE is nonzero,
36485 - or clear the flag if VALUE is 0.
36486 - Return 0 on success, or -1 on error with `errno' set. */
36488 - int
36489 - set_cloexec_flag (int desc, int value)
36491 - int oldflags = fcntl (desc, F_GETFD, 0);
36492 - /* If reading the flags failed, return error indication now. */
36493 - if (oldflags < 0)
36494 - return oldflags;
36495 - /* Set just the flag we want to set. */
36496 - if (value != 0)
36497 - oldflags |= FD_CLOEXEC;
36498 - else
36499 - oldflags &= ~FD_CLOEXEC;
36500 - /* Store modified flag word in the descriptor. */
36501 - return fcntl (desc, F_SETFD, oldflags);
36504 -\x1f
36505 -File: libc.info, Node: File Status Flags, Next: File Locks, Prev: Descriptor Flags, Up: Low-Level I/O
36507 -File Status Flags
36508 -=================
36510 - "File status flags" are used to specify attributes of the opening of
36511 -a file. Unlike the file descriptor flags discussed in *Note Descriptor
36512 -Flags::, the file status flags are shared by duplicated file descriptors
36513 -resulting from a single opening of the file. The file status flags are
36514 -specified with the FLAGS argument to `open'; *note Opening and Closing
36515 -Files::.
36517 - File status flags fall into three categories, which are described in
36518 -the following sections.
36520 - * *Note Access Modes::, specify what type of access is allowed to the
36521 - file: reading, writing, or both. They are set by `open' and are
36522 - returned by `fcntl', but cannot be changed.
36524 - * *Note Open-time Flags::, control details of what `open' will do.
36525 - These flags are not preserved after the `open' call.
36527 - * *Note Operating Modes::, affect how operations such as `read' and
36528 - `write' are done. They are set by `open', and can be fetched or
36529 - changed with `fcntl'.
36531 - The symbols in this section are defined in the header file `fcntl.h'.
36533 -* Menu:
36535 -* Access Modes:: Whether the descriptor can read or write.
36536 -* Open-time Flags:: Details of `open'.
36537 -* Operating Modes:: Special modes to control I/O operations.
36538 -* Getting File Status Flags:: Fetching and changing these flags.
36540 -\x1f
36541 -File: libc.info, Node: Access Modes, Next: Open-time Flags, Up: File Status Flags
36543 -File Access Modes
36544 ------------------
36546 - The file access modes allow a file descriptor to be used for reading,
36547 -writing, or both. (In the GNU system, they can also allow none of
36548 -these, and allow execution of the file as a program.) The access modes
36549 -are chosen when the file is opened, and never change.
36551 - - Macro: int O_RDONLY
36552 - Open the file for read access.
36554 - - Macro: int O_WRONLY
36555 - Open the file for write access.
36557 - - Macro: int O_RDWR
36558 - Open the file for both reading and writing.
36560 - In the GNU system (and not in other systems), `O_RDONLY' and
36561 -`O_WRONLY' are independent bits that can be bitwise-ORed together, and
36562 -it is valid for either bit to be set or clear. This means that
36563 -`O_RDWR' is the same as `O_RDONLY|O_WRONLY'. A file access mode of
36564 -zero is permissible; it allows no operations that do input or output to
36565 -the file, but does allow other operations such as `fchmod'. On the GNU
36566 -system, since "read-only" or "write-only" is a misnomer, `fcntl.h'
36567 -defines additional names for the file access modes. These names are
36568 -preferred when writing GNU-specific code. But most programs will want
36569 -to be portable to other POSIX.1 systems and should use the POSIX.1
36570 -names above instead.
36572 - - Macro: int O_READ
36573 - Open the file for reading. Same as `O_RDONLY'; only defined on
36574 - GNU.
36576 - - Macro: int O_WRITE
36577 - Open the file for writing. Same as `O_WRONLY'; only defined on
36578 - GNU.
36580 - - Macro: int O_EXEC
36581 - Open the file for executing. Only defined on GNU.
36583 - To determine the file access mode with `fcntl', you must extract the
36584 -access mode bits from the retrieved file status flags. In the GNU
36585 -system, you can just test the `O_READ' and `O_WRITE' bits in the flags
36586 -word. But in other POSIX.1 systems, reading and writing access modes
36587 -are not stored as distinct bit flags. The portable way to extract the
36588 -file access mode bits is with `O_ACCMODE'.
36590 - - Macro: int O_ACCMODE
36591 - This macro stands for a mask that can be bitwise-ANDed with the
36592 - file status flag value to produce a value representing the file
36593 - access mode. The mode will be `O_RDONLY', `O_WRONLY', or `O_RDWR'.
36594 - (In the GNU system it could also be zero, and it never includes the
36595 - `O_EXEC' bit.)
36597 -\x1f
36598 -File: libc.info, Node: Open-time Flags, Next: Operating Modes, Prev: Access Modes, Up: File Status Flags
36600 -Open-time Flags
36601 ----------------
36603 - The open-time flags specify options affecting how `open' will behave.
36604 -These options are not preserved once the file is open. The exception to
36605 -this is `O_NONBLOCK', which is also an I/O operating mode and so it
36606 -_is_ saved. *Note Opening and Closing Files::, for how to call `open'.
36608 - There are two sorts of options specified by open-time flags.
36610 - * "File name translation flags" affect how `open' looks up the file
36611 - name to locate the file, and whether the file can be created.
36613 - * "Open-time action flags" specify extra operations that `open' will
36614 - perform on the file once it is open.
36616 - Here are the file name translation flags.
36618 - - Macro: int O_CREAT
36619 - If set, the file will be created if it doesn't already exist.
36621 - - Macro: int O_EXCL
36622 - If both `O_CREAT' and `O_EXCL' are set, then `open' fails if the
36623 - specified file already exists. This is guaranteed to never
36624 - clobber an existing file.
36626 - - Macro: int O_NONBLOCK
36627 - This prevents `open' from blocking for a "long time" to open the
36628 - file. This is only meaningful for some kinds of files, usually
36629 - devices such as serial ports; when it is not meaningful, it is
36630 - harmless and ignored. Often opening a port to a modem blocks
36631 - until the modem reports carrier detection; if `O_NONBLOCK' is
36632 - specified, `open' will return immediately without a carrier.
36634 - Note that the `O_NONBLOCK' flag is overloaded as both an I/O
36635 - operating mode and a file name translation flag. This means that
36636 - specifying `O_NONBLOCK' in `open' also sets nonblocking I/O mode;
36637 - *note Operating Modes::. To open the file without blocking but do
36638 - normal I/O that blocks, you must call `open' with `O_NONBLOCK' set
36639 - and then call `fcntl' to turn the bit off.
36641 - - Macro: int O_NOCTTY
36642 - If the named file is a terminal device, don't make it the
36643 - controlling terminal for the process. *Note Job Control::, for
36644 - information about what it means to be the controlling terminal.
36646 - In the GNU system and 4.4 BSD, opening a file never makes it the
36647 - controlling terminal and `O_NOCTTY' is zero. However, other
36648 - systems may use a nonzero value for `O_NOCTTY' and set the
36649 - controlling terminal when you open a file that is a terminal
36650 - device; so to be portable, use `O_NOCTTY' when it is important to
36651 - avoid this.
36653 - The following three file name translation flags exist only in the
36654 -GNU system.
36656 - - Macro: int O_IGNORE_CTTY
36657 - Do not recognize the named file as the controlling terminal, even
36658 - if it refers to the process's existing controlling terminal
36659 - device. Operations on the new file descriptor will never induce
36660 - job control signals. *Note Job Control::.
36662 - - Macro: int O_NOLINK
36663 - If the named file is a symbolic link, open the link itself instead
36664 - of the file it refers to. (`fstat' on the new file descriptor will
36665 - return the information returned by `lstat' on the link's name.)
36667 - - Macro: int O_NOTRANS
36668 - If the named file is specially translated, do not invoke the
36669 - translator. Open the bare file the translator itself sees.
36671 - The open-time action flags tell `open' to do additional operations
36672 -which are not really related to opening the file. The reason to do them
36673 -as part of `open' instead of in separate calls is that `open' can do
36674 -them atomically.
36676 - - Macro: int O_TRUNC
36677 - Truncate the file to zero length. This option is only useful for
36678 - regular files, not special files such as directories or FIFOs.
36679 - POSIX.1 requires that you open the file for writing to use
36680 - `O_TRUNC'. In BSD and GNU you must have permission to write the
36681 - file to truncate it, but you need not open for write access.
36683 - This is the only open-time action flag specified by POSIX.1.
36684 - There is no good reason for truncation to be done by `open',
36685 - instead of by calling `ftruncate' afterwards. The `O_TRUNC' flag
36686 - existed in Unix before `ftruncate' was invented, and is retained
36687 - for backward compatibility.
36689 - The remaining operating modes are BSD extensions. They exist only
36690 -on some systems. On other systems, these macros are not defined.
36692 - - Macro: int O_SHLOCK
36693 - Acquire a shared lock on the file, as with `flock'. *Note File
36694 - Locks::.
36696 - If `O_CREAT' is specified, the locking is done atomically when
36697 - creating the file. You are guaranteed that no other process will
36698 - get the lock on the new file first.
36700 - - Macro: int O_EXLOCK
36701 - Acquire an exclusive lock on the file, as with `flock'. *Note
36702 - File Locks::. This is atomic like `O_SHLOCK'.
36704 -\x1f
36705 -File: libc.info, Node: Operating Modes, Next: Getting File Status Flags, Prev: Open-time Flags, Up: File Status Flags
36707 -I/O Operating Modes
36708 --------------------
36710 - The operating modes affect how input and output operations using a
36711 -file descriptor work. These flags are set by `open' and can be fetched
36712 -and changed with `fcntl'.
36714 - - Macro: int O_APPEND
36715 - The bit that enables append mode for the file. If set, then all
36716 - `write' operations write the data at the end of the file, extending
36717 - it, regardless of the current file position. This is the only
36718 - reliable way to append to a file. In append mode, you are
36719 - guaranteed that the data you write will always go to the current
36720 - end of the file, regardless of other processes writing to the
36721 - file. Conversely, if you simply set the file position to the end
36722 - of file and write, then another process can extend the file after
36723 - you set the file position but before you write, resulting in your
36724 - data appearing someplace before the real end of file.
36726 - - Macro: int O_NONBLOCK
36727 - The bit that enables nonblocking mode for the file. If this bit
36728 - is set, `read' requests on the file can return immediately with a
36729 - failure status if there is no input immediately available, instead
36730 - of blocking. Likewise, `write' requests can also return
36731 - immediately with a failure status if the output can't be written
36732 - immediately.
36734 - Note that the `O_NONBLOCK' flag is overloaded as both an I/O
36735 - operating mode and a file name translation flag; *note Open-time
36736 - Flags::.
36738 - - Macro: int O_NDELAY
36739 - This is an obsolete name for `O_NONBLOCK', provided for
36740 - compatibility with BSD. It is not defined by the POSIX.1 standard.
36742 - The remaining operating modes are BSD and GNU extensions. They
36743 -exist only on some systems. On other systems, these macros are not
36744 -defined.
36746 - - Macro: int O_ASYNC
36747 - The bit that enables asynchronous input mode. If set, then `SIGIO'
36748 - signals will be generated when input is available. *Note
36749 - Interrupt Input::.
36751 - Asynchronous input mode is a BSD feature.
36753 - - Macro: int O_FSYNC
36754 - The bit that enables synchronous writing for the file. If set,
36755 - each `write' call will make sure the data is reliably stored on
36756 - disk before returning. Synchronous writing is a BSD feature.
36758 - - Macro: int O_SYNC
36759 - This is another name for `O_FSYNC'. They have the same value.
36761 - - Macro: int O_NOATIME
36762 - If this bit is set, `read' will not update the access time of the
36763 - file. *Note File Times::. This is used by programs that do
36764 - backups, so that backing a file up does not count as reading it.
36765 - Only the owner of the file or the superuser may use this bit.
36767 - This is a GNU extension.
36769 -\x1f
36770 -File: libc.info, Node: Getting File Status Flags, Prev: Operating Modes, Up: File Status Flags
36772 -Getting and Setting File Status Flags
36773 --------------------------------------
36775 - The `fcntl' function can fetch or change file status flags.
36777 - - Macro: int F_GETFL
36778 - This macro is used as the COMMAND argument to `fcntl', to read the
36779 - file status flags for the open file with descriptor FILEDES.
36781 - The normal return value from `fcntl' with this command is a
36782 - nonnegative number which can be interpreted as the bitwise OR of
36783 - the individual flags. Since the file access modes are not
36784 - single-bit values, you can mask off other bits in the returned
36785 - flags with `O_ACCMODE' to compare them.
36787 - In case of an error, `fcntl' returns -1. The following `errno'
36788 - error conditions are defined for this command:
36790 - `EBADF'
36791 - The FILEDES argument is invalid.
36793 - - Macro: int F_SETFL
36794 - This macro is used as the COMMAND argument to `fcntl', to set the
36795 - file status flags for the open file corresponding to the FILEDES
36796 - argument. This command requires a third `int' argument to specify
36797 - the new flags, so the call looks like this:
36799 - fcntl (FILEDES, F_SETFL, NEW-FLAGS)
36801 - You can't change the access mode for the file in this way; that is,
36802 - whether the file descriptor was opened for reading or writing.
36804 - The normal return value from `fcntl' with this command is an
36805 - unspecified value other than -1, which indicates an error. The
36806 - error conditions are the same as for the `F_GETFL' command.
36808 - If you want to modify the file status flags, you should get the
36809 -current flags with `F_GETFL' and modify the value. Don't assume that
36810 -the flags listed here are the only ones that are implemented; your
36811 -program may be run years from now and more flags may exist then. For
36812 -example, here is a function to set or clear the flag `O_NONBLOCK'
36813 -without altering any other flags:
36815 - /* Set the `O_NONBLOCK' flag of DESC if VALUE is nonzero,
36816 - or clear the flag if VALUE is 0.
36817 - Return 0 on success, or -1 on error with `errno' set. */
36819 - int
36820 - set_nonblock_flag (int desc, int value)
36822 - int oldflags = fcntl (desc, F_GETFL, 0);
36823 - /* If reading the flags failed, return error indication now. */
36824 - if (oldflags == -1)
36825 - return -1;
36826 - /* Set just the flag we want to set. */
36827 - if (value != 0)
36828 - oldflags |= O_NONBLOCK;
36829 - else
36830 - oldflags &= ~O_NONBLOCK;
36831 - /* Store modified flag word in the descriptor. */
36832 - return fcntl (desc, F_SETFL, oldflags);
36835 -\x1f
36836 -File: libc.info, Node: File Locks, Next: Interrupt Input, Prev: File Status Flags, Up: Low-Level I/O
36838 -File Locks
36839 -==========
36841 - The remaining `fcntl' commands are used to support "record locking",
36842 -which permits multiple cooperating programs to prevent each other from
36843 -simultaneously accessing parts of a file in error-prone ways.
36845 - An "exclusive" or "write" lock gives a process exclusive access for
36846 -writing to the specified part of the file. While a write lock is in
36847 -place, no other process can lock that part of the file.
36849 - A "shared" or "read" lock prohibits any other process from
36850 -requesting a write lock on the specified part of the file. However,
36851 -other processes can request read locks.
36853 - The `read' and `write' functions do not actually check to see
36854 -whether there are any locks in place. If you want to implement a
36855 -locking protocol for a file shared by multiple processes, your
36856 -application must do explicit `fcntl' calls to request and clear locks
36857 -at the appropriate points.
36859 - Locks are associated with processes. A process can only have one
36860 -kind of lock set for each byte of a given file. When any file
36861 -descriptor for that file is closed by the process, all of the locks
36862 -that process holds on that file are released, even if the locks were
36863 -made using other descriptors that remain open. Likewise, locks are
36864 -released when a process exits, and are not inherited by child processes
36865 -created using `fork' (*note Creating a Process::).
36867 - When making a lock, use a `struct flock' to specify what kind of
36868 -lock and where. This data type and the associated macros for the
36869 -`fcntl' function are declared in the header file `fcntl.h'.
36871 - - Data Type: struct flock
36872 - This structure is used with the `fcntl' function to describe a file
36873 - lock. It has these members:
36875 - `short int l_type'
36876 - Specifies the type of the lock; one of `F_RDLCK', `F_WRLCK',
36877 - or `F_UNLCK'.
36879 - `short int l_whence'
36880 - This corresponds to the WHENCE argument to `fseek' or
36881 - `lseek', and specifies what the offset is relative to. Its
36882 - value can be one of `SEEK_SET', `SEEK_CUR', or `SEEK_END'.
36884 - `off_t l_start'
36885 - This specifies the offset of the start of the region to which
36886 - the lock applies, and is given in bytes relative to the point
36887 - specified by `l_whence' member.
36889 - `off_t l_len'
36890 - This specifies the length of the region to be locked. A
36891 - value of `0' is treated specially; it means the region
36892 - extends to the end of the file.
36894 - `pid_t l_pid'
36895 - This field is the process ID (*note Process Creation
36896 - Concepts::) of the process holding the lock. It is filled in
36897 - by calling `fcntl' with the `F_GETLK' command, but is ignored
36898 - when making a lock.
36900 - - Macro: int F_GETLK
36901 - This macro is used as the COMMAND argument to `fcntl', to specify
36902 - that it should get information about a lock. This command
36903 - requires a third argument of type `struct flock *' to be passed to
36904 - `fcntl', so that the form of the call is:
36906 - fcntl (FILEDES, F_GETLK, LOCKP)
36908 - If there is a lock already in place that would block the lock
36909 - described by the LOCKP argument, information about that lock
36910 - overwrites `*LOCKP'. Existing locks are not reported if they are
36911 - compatible with making a new lock as specified. Thus, you should
36912 - specify a lock type of `F_WRLCK' if you want to find out about both
36913 - read and write locks, or `F_RDLCK' if you want to find out about
36914 - write locks only.
36916 - There might be more than one lock affecting the region specified
36917 - by the LOCKP argument, but `fcntl' only returns information about
36918 - one of them. The `l_whence' member of the LOCKP structure is set
36919 - to `SEEK_SET' and the `l_start' and `l_len' fields set to identify
36920 - the locked region.
36922 - If no lock applies, the only change to the LOCKP structure is to
36923 - update the `l_type' to a value of `F_UNLCK'.
36925 - The normal return value from `fcntl' with this command is an
36926 - unspecified value other than -1, which is reserved to indicate an
36927 - error. The following `errno' error conditions are defined for
36928 - this command:
36930 - `EBADF'
36931 - The FILEDES argument is invalid.
36933 - `EINVAL'
36934 - Either the LOCKP argument doesn't specify valid lock
36935 - information, or the file associated with FILEDES doesn't
36936 - support locks.
36938 - - Macro: int F_SETLK
36939 - This macro is used as the COMMAND argument to `fcntl', to specify
36940 - that it should set or clear a lock. This command requires a third
36941 - argument of type `struct flock *' to be passed to `fcntl', so that
36942 - the form of the call is:
36944 - fcntl (FILEDES, F_SETLK, LOCKP)
36946 - If the process already has a lock on any part of the region, the
36947 - old lock on that part is replaced with the new lock. You can
36948 - remove a lock by specifying a lock type of `F_UNLCK'.
36950 - If the lock cannot be set, `fcntl' returns immediately with a value
36951 - of -1. This function does not block waiting for other processes
36952 - to release locks. If `fcntl' succeeds, it return a value other
36953 - than -1.
36955 - The following `errno' error conditions are defined for this
36956 - function:
36958 - `EAGAIN'
36959 - `EACCES'
36960 - The lock cannot be set because it is blocked by an existing
36961 - lock on the file. Some systems use `EAGAIN' in this case,
36962 - and other systems use `EACCES'; your program should treat
36963 - them alike, after `F_SETLK'. (The GNU system always uses
36964 - `EAGAIN'.)
36966 - `EBADF'
36967 - Either: the FILEDES argument is invalid; you requested a read
36968 - lock but the FILEDES is not open for read access; or, you
36969 - requested a write lock but the FILEDES is not open for write
36970 - access.
36972 - `EINVAL'
36973 - Either the LOCKP argument doesn't specify valid lock
36974 - information, or the file associated with FILEDES doesn't
36975 - support locks.
36977 - `ENOLCK'
36978 - The system has run out of file lock resources; there are
36979 - already too many file locks in place.
36981 - Well-designed file systems never report this error, because
36982 - they have no limitation on the number of locks. However, you
36983 - must still take account of the possibility of this error, as
36984 - it could result from network access to a file system on
36985 - another machine.
36987 - - Macro: int F_SETLKW
36988 - This macro is used as the COMMAND argument to `fcntl', to specify
36989 - that it should set or clear a lock. It is just like the `F_SETLK'
36990 - command, but causes the process to block (or wait) until the
36991 - request can be specified.
36993 - This command requires a third argument of type `struct flock *', as
36994 - for the `F_SETLK' command.
36996 - The `fcntl' return values and errors are the same as for the
36997 - `F_SETLK' command, but these additional `errno' error conditions
36998 - are defined for this command:
37000 - `EINTR'
37001 - The function was interrupted by a signal while it was waiting.
37002 - *Note Interrupted Primitives::.
37004 - `EDEADLK'
37005 - The specified region is being locked by another process. But
37006 - that process is waiting to lock a region which the current
37007 - process has locked, so waiting for the lock would result in
37008 - deadlock. The system does not guarantee that it will detect
37009 - all such conditions, but it lets you know if it notices one.
37011 - The following macros are defined for use as values for the `l_type'
37012 -member of the `flock' structure. The values are integer constants.
37014 -`F_RDLCK'
37015 - This macro is used to specify a read (or shared) lock.
37017 -`F_WRLCK'
37018 - This macro is used to specify a write (or exclusive) lock.
37020 -`F_UNLCK'
37021 - This macro is used to specify that the region is unlocked.
37023 - As an example of a situation where file locking is useful, consider a
37024 -program that can be run simultaneously by several different users, that
37025 -logs status information to a common file. One example of such a program
37026 -might be a game that uses a file to keep track of high scores. Another
37027 -example might be a program that records usage or accounting information
37028 -for billing purposes.
37030 - Having multiple copies of the program simultaneously writing to the
37031 -file could cause the contents of the file to become mixed up. But you
37032 -can prevent this kind of problem by setting a write lock on the file
37033 -before actually writing to the file.
37035 - If the program also needs to read the file and wants to make sure
37036 -that the contents of the file are in a consistent state, then it can
37037 -also use a read lock. While the read lock is set, no other process can
37038 -lock that part of the file for writing.
37040 - Remember that file locks are only a _voluntary_ protocol for
37041 -controlling access to a file. There is still potential for access to
37042 -the file by programs that don't use the lock protocol.
37044 -\x1f
37045 -File: libc.info, Node: Interrupt Input, Next: IOCTLs, Prev: File Locks, Up: Low-Level I/O
37047 -Interrupt-Driven Input
37048 -======================
37050 - If you set the `O_ASYNC' status flag on a file descriptor (*note
37051 -File Status Flags::), a `SIGIO' signal is sent whenever input or output
37052 -becomes possible on that file descriptor. The process or process group
37053 -to receive the signal can be selected by using the `F_SETOWN' command
37054 -to the `fcntl' function. If the file descriptor is a socket, this also
37055 -selects the recipient of `SIGURG' signals that are delivered when
37056 -out-of-band data arrives on that socket; see *Note Out-of-Band Data::.
37057 -(`SIGURG' is sent in any situation where `select' would report the
37058 -socket as having an "exceptional condition". *Note Waiting for I/O::.)
37060 - If the file descriptor corresponds to a terminal device, then `SIGIO'
37061 -signals are sent to the foreground process group of the terminal.
37062 -*Note Job Control::.
37064 - The symbols in this section are defined in the header file `fcntl.h'.
37066 - - Macro: int F_GETOWN
37067 - This macro is used as the COMMAND argument to `fcntl', to specify
37068 - that it should get information about the process or process group
37069 - to which `SIGIO' signals are sent. (For a terminal, this is
37070 - actually the foreground process group ID, which you can get using
37071 - `tcgetpgrp'; see *Note Terminal Access Functions::.)
37073 - The return value is interpreted as a process ID; if negative, its
37074 - absolute value is the process group ID.
37076 - The following `errno' error condition is defined for this command:
37078 - `EBADF'
37079 - The FILEDES argument is invalid.
37081 - - Macro: int F_SETOWN
37082 - This macro is used as the COMMAND argument to `fcntl', to specify
37083 - that it should set the process or process group to which `SIGIO'
37084 - signals are sent. This command requires a third argument of type
37085 - `pid_t' to be passed to `fcntl', so that the form of the call is:
37087 - fcntl (FILEDES, F_SETOWN, PID)
37089 - The PID argument should be a process ID. You can also pass a
37090 - negative number whose absolute value is a process group ID.
37092 - The return value from `fcntl' with this command is -1 in case of
37093 - error and some other value if successful. The following `errno'
37094 - error conditions are defined for this command:
37096 - `EBADF'
37097 - The FILEDES argument is invalid.
37099 - `ESRCH'
37100 - There is no process or process group corresponding to PID.
37102 -\x1f
37103 -File: libc.info, Node: IOCTLs, Prev: Interrupt Input, Up: Low-Level I/O
37105 -Generic I/O Control operations
37106 -==============================
37108 - The GNU system can handle most input/output operations on many
37109 -different devices and objects in terms of a few file primitives -
37110 -`read', `write' and `lseek'. However, most devices also have a few
37111 -peculiar operations which do not fit into this model. Such as:
37113 - * Changing the character font used on a terminal.
37115 - * Telling a magnetic tape system to rewind or fast forward. (Since
37116 - they cannot move in byte increments, `lseek' is inapplicable).
37118 - * Ejecting a disk from a drive.
37120 - * Playing an audio track from a CD-ROM drive.
37122 - * Maintaining routing tables for a network.
37125 - Although some such objects such as sockets and terminals (1) have
37126 -special functions of their own, it would not be practical to create
37127 -functions for all these cases.
37129 - Instead these minor operations, known as "IOCTL"s, are assigned code
37130 -numbers and multiplexed through the `ioctl' function, defined in
37131 -`sys/ioctl.h'. The code numbers themselves are defined in many
37132 -different headers.
37134 - - Function: int ioctl (int FILEDES, int COMMAND, ...)
37135 - The `ioctl' function performs the generic I/O operation COMMAND on
37136 - FILEDES.
37138 - A third argument is usually present, either a single number or a
37139 - pointer to a structure. The meaning of this argument, the
37140 - returned value, and any error codes depends upon the command used.
37141 - Often -1 is returned for a failure.
37144 - On some systems, IOCTLs used by different devices share the same
37145 -numbers. Thus, although use of an inappropriate IOCTL _usually_ only
37146 -produces an error, you should not attempt to use device-specific IOCTLs
37147 -on an unknown device.
37149 - Most IOCTLs are OS-specific and/or only used in special system
37150 -utilities, and are thus beyond the scope of this document. For an
37151 -example of the use of an IOCTL, see *Note Out-of-Band Data::.
37153 - ---------- Footnotes ----------
37155 - (1) Actually, the terminal-specific functions are implemented with
37156 -IOCTLs on many platforms.
37158 diff -u -udbrN glibc-2.3.2/manual/libc.info-24 glibc-2.3.2-200304020432/manual/libc.info-24
37159 --- glibc-2.3.2/manual/libc.info-24 Sat Mar 1 02:39:41 2003
37160 +++ glibc-2.3.2-200304020432/manual/libc.info-24 Thu Jan 1 01:00:00 1970
37161 @@ -1,1174 +0,0 @@
37162 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
37164 -INFO-DIR-SECTION GNU libraries
37165 -START-INFO-DIR-ENTRY
37166 -* Libc: (libc). C library.
37167 -END-INFO-DIR-ENTRY
37169 - This file documents the GNU C library.
37171 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
37172 -Reference Manual', for Version 2.3.x.
37174 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
37175 -Free Software Foundation, Inc.
37177 - Permission is granted to copy, distribute and/or modify this document
37178 -under the terms of the GNU Free Documentation License, Version 1.1 or
37179 -any later version published by the Free Software Foundation; with the
37180 -Invariant Sections being "Free Software Needs Free Documentation" and
37181 -"GNU Lesser General Public License", the Front-Cover texts being (a)
37182 -(see below), and with the Back-Cover Texts being (b) (see below). A
37183 -copy of the license is included in the section entitled "GNU Free
37184 -Documentation License".
37186 - (a) The FSF's Front-Cover Text is:
37188 - A GNU Manual
37190 - (b) The FSF's Back-Cover Text is:
37192 - You have freedom to copy and modify this GNU Manual, like GNU
37193 -software. Copies published by the Free Software Foundation raise
37194 -funds for GNU development.
37196 -\x1f
37197 -File: libc.info, Node: File System Interface, Next: Pipes and FIFOs, Prev: Low-Level I/O, Up: Top
37199 -File System Interface
37200 -*********************
37202 - This chapter describes the GNU C library's functions for manipulating
37203 -files. Unlike the input and output functions (*note I/O on Streams::;
37204 -*note Low-Level I/O::), these functions are concerned with operating on
37205 -the files themselves rather than on their contents.
37207 - Among the facilities described in this chapter are functions for
37208 -examining or modifying directories, functions for renaming and deleting
37209 -files, and functions for examining and setting file attributes such as
37210 -access permissions and modification times.
37212 -* Menu:
37214 -* Working Directory:: This is used to resolve relative
37215 - file names.
37216 -* Accessing Directories:: Finding out what files a directory
37217 - contains.
37218 -* Working with Directory Trees:: Apply actions to all files or a selectable
37219 - subset of a directory hierarchy.
37220 -* Hard Links:: Adding alternate names to a file.
37221 -* Symbolic Links:: A file that ``points to'' a file name.
37222 -* Deleting Files:: How to delete a file, and what that means.
37223 -* Renaming Files:: Changing a file's name.
37224 -* Creating Directories:: A system call just for creating a directory.
37225 -* File Attributes:: Attributes of individual files.
37226 -* Making Special Files:: How to create special files.
37227 -* Temporary Files:: Naming and creating temporary files.
37229 -\x1f
37230 -File: libc.info, Node: Working Directory, Next: Accessing Directories, Up: File System Interface
37232 -Working Directory
37233 -=================
37235 - Each process has associated with it a directory, called its "current
37236 -working directory" or simply "working directory", that is used in the
37237 -resolution of relative file names (*note File Name Resolution::).
37239 - When you log in and begin a new session, your working directory is
37240 -initially set to the home directory associated with your login account
37241 -in the system user database. You can find any user's home directory
37242 -using the `getpwuid' or `getpwnam' functions; see *Note User Database::.
37244 - Users can change the working directory using shell commands like
37245 -`cd'. The functions described in this section are the primitives used
37246 -by those commands and by other programs for examining and changing the
37247 -working directory.
37249 - Prototypes for these functions are declared in the header file
37250 -`unistd.h'.
37252 - - Function: char * getcwd (char *BUFFER, size_t SIZE)
37253 - The `getcwd' function returns an absolute file name representing
37254 - the current working directory, storing it in the character array
37255 - BUFFER that you provide. The SIZE argument is how you tell the
37256 - system the allocation size of BUFFER.
37258 - The GNU library version of this function also permits you to
37259 - specify a null pointer for the BUFFER argument. Then `getcwd'
37260 - allocates a buffer automatically, as with `malloc' (*note
37261 - Unconstrained Allocation::). If the SIZE is greater than zero,
37262 - then the buffer is that large; otherwise, the buffer is as large
37263 - as necessary to hold the result.
37265 - The return value is BUFFER on success and a null pointer on
37266 - failure. The following `errno' error conditions are defined for
37267 - this function:
37269 - `EINVAL'
37270 - The SIZE argument is zero and BUFFER is not a null pointer.
37272 - `ERANGE'
37273 - The SIZE argument is less than the length of the working
37274 - directory name. You need to allocate a bigger array and try
37275 - again.
37277 - `EACCES'
37278 - Permission to read or search a component of the file name was
37279 - denied.
37281 - You could implement the behavior of GNU's `getcwd (NULL, 0)' using
37282 -only the standard behavior of `getcwd':
37284 - char *
37285 - gnu_getcwd ()
37287 - size_t size = 100;
37289 - while (1)
37291 - char *buffer = (char *) xmalloc (size);
37292 - if (getcwd (buffer, size) == buffer)
37293 - return buffer;
37294 - free (buffer);
37295 - if (errno != ERANGE)
37296 - return 0;
37297 - size *= 2;
37301 -*Note Malloc Examples::, for information about `xmalloc', which is not
37302 -a library function but is a customary name used in most GNU software.
37304 - - Deprecated Function: char * getwd (char *BUFFER)
37305 - This is similar to `getcwd', but has no way to specify the size of
37306 - the buffer. The GNU library provides `getwd' only for backwards
37307 - compatibility with BSD.
37309 - The BUFFER argument should be a pointer to an array at least
37310 - `PATH_MAX' bytes long (*note Limits for Files::). In the GNU
37311 - system there is no limit to the size of a file name, so this is not
37312 - necessarily enough space to contain the directory name. That is
37313 - why this function is deprecated.
37315 - - Function: char * get_current_dir_name (void)
37316 - This `get_current_dir_name' function is bascially equivalent to
37317 - `getcwd (NULL, 0)'. The only difference is that the value of the
37318 - `PWD' variable is returned if this value is correct. This is a
37319 - subtle difference which is visible if the path described by the
37320 - `PWD' value is using one or more symbol links in which case the
37321 - value returned by `getcwd' can resolve the symbol links and
37322 - therefore yield a different result.
37324 - This function is a GNU extension.
37326 - - Function: int chdir (const char *FILENAME)
37327 - This function is used to set the process's working directory to
37328 - FILENAME.
37330 - The normal, successful return value from `chdir' is `0'. A value
37331 - of `-1' is returned to indicate an error. The `errno' error
37332 - conditions defined for this function are the usual file name
37333 - syntax errors (*note File Name Errors::), plus `ENOTDIR' if the
37334 - file FILENAME is not a directory.
37336 - - Function: int fchdir (int FILEDES)
37337 - This function is used to set the process's working directory to
37338 - directory associated with the file descriptor FILEDES.
37340 - The normal, successful return value from `fchdir' is `0'. A value
37341 - of `-1' is returned to indicate an error. The following `errno'
37342 - error conditions are defined for this function:
37344 - `EACCES'
37345 - Read permission is denied for the directory named by
37346 - `dirname'.
37348 - `EBADF'
37349 - The FILEDES argument is not a valid file descriptor.
37351 - `ENOTDIR'
37352 - The file descriptor FILEDES is not associated with a
37353 - directory.
37355 - `EINTR'
37356 - The function call was interrupt by a signal.
37358 - `EIO'
37359 - An I/O error occurred.
37361 -\x1f
37362 -File: libc.info, Node: Accessing Directories, Next: Working with Directory Trees, Prev: Working Directory, Up: File System Interface
37364 -Accessing Directories
37365 -=====================
37367 - The facilities described in this section let you read the contents
37368 -of a directory file. This is useful if you want your program to list
37369 -all the files in a directory, perhaps as part of a menu.
37371 - The `opendir' function opens a "directory stream" whose elements are
37372 -directory entries. You use the `readdir' function on the directory
37373 -stream to retrieve these entries, represented as `struct dirent'
37374 -objects. The name of the file for each entry is stored in the `d_name'
37375 -member of this structure. There are obvious parallels here to the
37376 -stream facilities for ordinary files, described in *Note I/O on
37377 -Streams::.
37379 -* Menu:
37381 -* Directory Entries:: Format of one directory entry.
37382 -* Opening a Directory:: How to open a directory stream.
37383 -* Reading/Closing Directory:: How to read directory entries from the stream.
37384 -* Simple Directory Lister:: A very simple directory listing program.
37385 -* Random Access Directory:: Rereading part of the directory
37386 - already read with the same stream.
37387 -* Scanning Directory Content:: Get entries for user selected subset of
37388 - contents in given directory.
37389 -* Simple Directory Lister Mark II:: Revised version of the program.
37391 -\x1f
37392 -File: libc.info, Node: Directory Entries, Next: Opening a Directory, Up: Accessing Directories
37394 -Format of a Directory Entry
37395 ----------------------------
37397 - This section describes what you find in a single directory entry, as
37398 -you might obtain it from a directory stream. All the symbols are
37399 -declared in the header file `dirent.h'.
37401 - - Data Type: struct dirent
37402 - This is a structure type used to return information about directory
37403 - entries. It contains the following fields:
37405 - `char d_name[]'
37406 - This is the null-terminated file name component. This is the
37407 - only field you can count on in all POSIX systems.
37409 - `ino_t d_fileno'
37410 - This is the file serial number. For BSD compatibility, you
37411 - can also refer to this member as `d_ino'. In the GNU system
37412 - and most POSIX systems, for most files this the same as the
37413 - `st_ino' member that `stat' will return for the file. *Note
37414 - File Attributes::.
37416 - `unsigned char d_namlen'
37417 - This is the length of the file name, not including the
37418 - terminating null character. Its type is `unsigned char'
37419 - because that is the integer type of the appropriate size
37421 - `unsigned char d_type'
37422 - This is the type of the file, possibly unknown. The
37423 - following constants are defined for its value:
37425 - `DT_UNKNOWN'
37426 - The type is unknown. On some systems this is the only
37427 - value returned.
37429 - `DT_REG'
37430 - A regular file.
37432 - `DT_DIR'
37433 - A directory.
37435 - `DT_FIFO'
37436 - A named pipe, or FIFO. *Note FIFO Special Files::.
37438 - `DT_SOCK'
37439 - A local-domain socket.
37441 - `DT_CHR'
37442 - A character device.
37444 - `DT_BLK'
37445 - A block device.
37447 - This member is a BSD extension. The symbol
37448 - `_DIRENT_HAVE_D_TYPE' is defined if this member is available.
37449 - On systems where it is used, it corresponds to the file type
37450 - bits in the `st_mode' member of `struct statbuf'. If the
37451 - value cannot be determine the member value is DT_UNKNOWN.
37452 - These two macros convert between `d_type' values and
37453 - `st_mode' values:
37455 - - Function: int IFTODT (mode_t MODE)
37456 - This returns the `d_type' value corresponding to MODE.
37458 - - Function: mode_t DTTOIF (int DTYPE)
37459 - This returns the `st_mode' value corresponding to DTYPE.
37461 - This structure may contain additional members in the future. Their
37462 - availability is always announced in the compilation environment by
37463 - a macro names `_DIRENT_HAVE_D_XXX' where XXX is replaced by the
37464 - name of the new member. For instance, the member `d_reclen'
37465 - available on some systems is announced through the macro
37466 - `_DIRENT_HAVE_D_RECLEN'.
37468 - When a file has multiple names, each name has its own directory
37469 - entry. The only way you can tell that the directory entries
37470 - belong to a single file is that they have the same value for the
37471 - `d_fileno' field.
37473 - File attributes such as size, modification times etc., are part of
37474 - the file itself, not of any particular directory entry. *Note
37475 - File Attributes::.
37477 -\x1f
37478 -File: libc.info, Node: Opening a Directory, Next: Reading/Closing Directory, Prev: Directory Entries, Up: Accessing Directories
37480 -Opening a Directory Stream
37481 ---------------------------
37483 - This section describes how to open a directory stream. All the
37484 -symbols are declared in the header file `dirent.h'.
37486 - - Data Type: DIR
37487 - The `DIR' data type represents a directory stream.
37489 - You shouldn't ever allocate objects of the `struct dirent' or `DIR'
37490 -data types, since the directory access functions do that for you.
37491 -Instead, you refer to these objects using the pointers returned by the
37492 -following functions.
37494 - - Function: DIR * opendir (const char *DIRNAME)
37495 - The `opendir' function opens and returns a directory stream for
37496 - reading the directory whose file name is DIRNAME. The stream has
37497 - type `DIR *'.
37499 - If unsuccessful, `opendir' returns a null pointer. In addition to
37500 - the usual file name errors (*note File Name Errors::), the
37501 - following `errno' error conditions are defined for this function:
37503 - `EACCES'
37504 - Read permission is denied for the directory named by
37505 - `dirname'.
37507 - `EMFILE'
37508 - The process has too many files open.
37510 - `ENFILE'
37511 - The entire system, or perhaps the file system which contains
37512 - the directory, cannot support any additional open files at
37513 - the moment. (This problem cannot happen on the GNU system.)
37515 - The `DIR' type is typically implemented using a file descriptor,
37516 - and the `opendir' function in terms of the `open' function. *Note
37517 - Low-Level I/O::. Directory streams and the underlying file
37518 - descriptors are closed on `exec' (*note Executing a File::).
37520 - In some situations it can be desirable to get hold of the file
37521 -descriptor which is created by the `opendir' call. For instance, to
37522 -switch the current working directory to the directory just read the
37523 -`fchdir' function could be used. Historically the `DIR' type was
37524 -exposed and programs could access the fields. This does not happen in
37525 -the GNU C library. Instead a separate function is provided to allow
37526 -access.
37528 - - Function: int dirfd (DIR *DIRSTREAM)
37529 - The function `dirfd' returns the file descriptor associated with
37530 - the directory stream DIRSTREAM. This descriptor can be used until
37531 - the directory is closed with `closedir'. If the directory stream
37532 - implementation is not using file descriptors the return value is
37533 - `-1'.
37535 -\x1f
37536 -File: libc.info, Node: Reading/Closing Directory, Next: Simple Directory Lister, Prev: Opening a Directory, Up: Accessing Directories
37538 -Reading and Closing a Directory Stream
37539 ---------------------------------------
37541 - This section describes how to read directory entries from a directory
37542 -stream, and how to close the stream when you are done with it. All the
37543 -symbols are declared in the header file `dirent.h'.
37545 - - Function: struct dirent * readdir (DIR *DIRSTREAM)
37546 - This function reads the next entry from the directory. It normally
37547 - returns a pointer to a structure containing information about the
37548 - file. This structure is statically allocated and can be rewritten
37549 - by a subsequent call.
37551 - *Portability Note:* On some systems `readdir' may not return
37552 - entries for `.' and `..', even though these are always valid file
37553 - names in any directory. *Note File Name Resolution::.
37555 - If there are no more entries in the directory or an error is
37556 - detected, `readdir' returns a null pointer. The following `errno'
37557 - error conditions are defined for this function:
37559 - `EBADF'
37560 - The DIRSTREAM argument is not valid.
37562 - `readdir' is not thread safe. Multiple threads using `readdir' on
37563 - the same DIRSTREAM may overwrite the return value. Use
37564 - `readdir_r' when this is critical.
37566 - - Function: int readdir_r (DIR *DIRSTREAM, struct dirent *ENTRY,
37567 - struct dirent **RESULT)
37568 - This function is the reentrant version of `readdir'. Like
37569 - `readdir' it returns the next entry from the directory. But to
37570 - prevent conflicts between simultaneously running threads the
37571 - result is not stored in statically allocated memory. Instead the
37572 - argument ENTRY points to a place to store the result.
37574 - Normally `readdir_r' returns zero and sets `*RESULT' to ENTRY. If
37575 - there are no more entries in the directory or an error is
37576 - detected, `readdir_r' sets `*RESULT' to a null pointer and returns
37577 - a nonzero error code, also stored in `errno', as described for
37578 - `readdir'.
37580 - *Portability Note:* On some systems `readdir_r' may not return a
37581 - NUL terminated string for the file name, even when there is no
37582 - `d_reclen' field in `struct dirent' and the file name is the
37583 - maximum allowed size. Modern systems all have the `d_reclen'
37584 - field, and on old systems multi-threading is not critical. In any
37585 - case there is no such problem with the `readdir' function, so that
37586 - even on systems without the `d_reclen' member one could use
37587 - multiple threads by using external locking.
37589 - It is also important to look at the definition of the `struct
37590 - dirent' type. Simply passing a pointer to an object of this type
37591 - for the second parameter of `readdir_r' might not be enough. Some
37592 - systems don't define the `d_name' element sufficiently long. In
37593 - this case the user has to provide additional space. There must be
37594 - room for at least `NAME_MAX + 1' characters in the `d_name' array.
37595 - Code to call `readdir_r' could look like this:
37597 - union
37599 - struct dirent d;
37600 - char b[offsetof (struct dirent, d_name) + NAME_MAX + 1];
37601 - } u;
37603 - if (readdir_r (dir, &u.d, &res) == 0)
37604 - ...
37606 - To support large filesystems on 32-bit machines there are LFS
37607 -variants of the last two functions.
37609 - - Function: struct dirent64 * readdir64 (DIR *DIRSTREAM)
37610 - The `readdir64' function is just like the `readdir' function
37611 - except that it returns a pointer to a record of type `struct
37612 - dirent64'. Some of the members of this data type (notably `d_ino')
37613 - might have a different size to allow large filesystems.
37615 - In all other aspects this function is equivalent to `readdir'.
37617 - - Function: int readdir64_r (DIR *DIRSTREAM, struct dirent64 *ENTRY,
37618 - struct dirent64 **RESULT)
37619 - The `readdir64_r' function is equivalent to the `readdir_r'
37620 - function except that it takes parameters of base type `struct
37621 - dirent64' instead of `struct dirent' in the second and third
37622 - position. The same precautions mentioned in the documentation of
37623 - `readdir_r' also apply here.
37625 - - Function: int closedir (DIR *DIRSTREAM)
37626 - This function closes the directory stream DIRSTREAM. It returns
37627 - `0' on success and `-1' on failure.
37629 - The following `errno' error conditions are defined for this
37630 - function:
37632 - `EBADF'
37633 - The DIRSTREAM argument is not valid.
37635 -\x1f
37636 -File: libc.info, Node: Simple Directory Lister, Next: Random Access Directory, Prev: Reading/Closing Directory, Up: Accessing Directories
37638 -Simple Program to List a Directory
37639 -----------------------------------
37641 - Here's a simple program that prints the names of the files in the
37642 -current working directory:
37644 - #include <stdio.h>
37645 - #include <sys/types.h>
37646 - #include <dirent.h>
37648 - int
37649 - main (void)
37651 - DIR *dp;
37652 - struct dirent *ep;
37654 - dp = opendir ("./");
37655 - if (dp != NULL)
37657 - while (ep = readdir (dp))
37658 - puts (ep->d_name);
37659 - (void) closedir (dp);
37661 - else
37662 - perror ("Couldn't open the directory");
37664 - return 0;
37667 - The order in which files appear in a directory tends to be fairly
37668 -random. A more useful program would sort the entries (perhaps by
37669 -alphabetizing them) before printing them; see *Note Scanning Directory
37670 -Content::, and *Note Array Sort Function::.
37672 -\x1f
37673 -File: libc.info, Node: Random Access Directory, Next: Scanning Directory Content, Prev: Simple Directory Lister, Up: Accessing Directories
37675 -Random Access in a Directory Stream
37676 ------------------------------------
37678 - This section describes how to reread parts of a directory that you
37679 -have already read from an open directory stream. All the symbols are
37680 -declared in the header file `dirent.h'.
37682 - - Function: void rewinddir (DIR *DIRSTREAM)
37683 - The `rewinddir' function is used to reinitialize the directory
37684 - stream DIRSTREAM, so that if you call `readdir' it returns
37685 - information about the first entry in the directory again. This
37686 - function also notices if files have been added or removed to the
37687 - directory since it was opened with `opendir'. (Entries for these
37688 - files might or might not be returned by `readdir' if they were
37689 - added or removed since you last called `opendir' or `rewinddir'.)
37691 - - Function: off_t telldir (DIR *DIRSTREAM)
37692 - The `telldir' function returns the file position of the directory
37693 - stream DIRSTREAM. You can use this value with `seekdir' to
37694 - restore the directory stream to that position.
37696 - - Function: void seekdir (DIR *DIRSTREAM, off_t POS)
37697 - The `seekdir' function sets the file position of the directory
37698 - stream DIRSTREAM to POS. The value POS must be the result of a
37699 - previous call to `telldir' on this particular stream; closing and
37700 - reopening the directory can invalidate values returned by
37701 - `telldir'.
37703 -\x1f
37704 -File: libc.info, Node: Scanning Directory Content, Next: Simple Directory Lister Mark II, Prev: Random Access Directory, Up: Accessing Directories
37706 -Scanning the Content of a Directory
37707 ------------------------------------
37709 - A higher-level interface to the directory handling functions is the
37710 -`scandir' function. With its help one can select a subset of the
37711 -entries in a directory, possibly sort them and get a list of names as
37712 -the result.
37714 - - Function: int scandir (const char *DIR, struct dirent ***NAMELIST,
37715 - int (*SELECTOR) (const struct dirent *), int (*CMP) (const
37716 - void *, const void *))
37717 - The `scandir' function scans the contents of the directory selected
37718 - by DIR. The result in *NAMELIST is an array of pointers to
37719 - structure of type `struct dirent' which describe all selected
37720 - directory entries and which is allocated using `malloc'. Instead
37721 - of always getting all directory entries returned, the user supplied
37722 - function SELECTOR can be used to decide which entries are in the
37723 - result. Only the entries for which SELECTOR returns a non-zero
37724 - value are selected.
37726 - Finally the entries in *NAMELIST are sorted using the
37727 - user-supplied function CMP. The arguments passed to the CMP
37728 - function are of type `struct dirent **', therefore one cannot
37729 - directly use the `strcmp' or `strcoll' functions; instead see the
37730 - functions `alphasort' and `versionsort' below.
37732 - The return value of the function is the number of entries placed in
37733 - *NAMELIST. If it is `-1' an error occurred (either the directory
37734 - could not be opened for reading or the malloc call failed) and the
37735 - global variable `errno' contains more information on the error.
37737 - As described above the fourth argument to the `scandir' function
37738 -must be a pointer to a sorting function. For the convenience of the
37739 -programmer the GNU C library contains implementations of functions which
37740 -are very helpful for this purpose.
37742 - - Function: int alphasort (const void *A, const void *B)
37743 - The `alphasort' function behaves like the `strcoll' function
37744 - (*note String/Array Comparison::). The difference is that the
37745 - arguments are not string pointers but instead they are of type
37746 - `struct dirent **'.
37748 - The return value of `alphasort' is less than, equal to, or greater
37749 - than zero depending on the order of the two entries A and B.
37751 - - Function: int versionsort (const void *A, const void *B)
37752 - The `versionsort' function is like `alphasort' except that it uses
37753 - the `strverscmp' function internally.
37755 - If the filesystem supports large files we cannot use the `scandir'
37756 -anymore since the `dirent' structure might not able to contain all the
37757 -information. The LFS provides the new type `struct dirent64'. To use
37758 -this we need a new function.
37760 - - Function: int scandir64 (const char *DIR, struct dirent64
37761 - ***NAMELIST, int (*SELECTOR) (const struct dirent64 *), int
37762 - (*CMP) (const void *, const void *))
37763 - The `scandir64' function works like the `scandir' function except
37764 - that the directory entries it returns are described by elements of
37765 - type `struct dirent64'. The function pointed to by SELECTOR is
37766 - again used to select the desired entries, except that SELECTOR now
37767 - must point to a function which takes a `struct dirent64 *'
37768 - parameter.
37770 - Similarly the CMP function should expect its two arguments to be
37771 - of type `struct dirent64 **'.
37773 - As CMP is now a function of a different type, the functions
37774 -`alphasort' and `versionsort' cannot be supplied for that argument.
37775 -Instead we provide the two replacement functions below.
37777 - - Function: int alphasort64 (const void *A, const void *B)
37778 - The `alphasort64' function behaves like the `strcoll' function
37779 - (*note String/Array Comparison::). The difference is that the
37780 - arguments are not string pointers but instead they are of type
37781 - `struct dirent64 **'.
37783 - Return value of `alphasort64' is less than, equal to, or greater
37784 - than zero depending on the order of the two entries A and B.
37786 - - Function: int versionsort64 (const void *A, const void *B)
37787 - The `versionsort64' function is like `alphasort64', excepted that
37788 - it uses the `strverscmp' function internally.
37790 - It is important not to mix the use of `scandir' and the 64-bit
37791 -comparison functions or vice versa. There are systems on which this
37792 -works but on others it will fail miserably.
37794 -\x1f
37795 -File: libc.info, Node: Simple Directory Lister Mark II, Prev: Scanning Directory Content, Up: Accessing Directories
37797 -Simple Program to List a Directory, Mark II
37798 --------------------------------------------
37800 - Here is a revised version of the directory lister found above (*note
37801 -Simple Directory Lister::). Using the `scandir' function we can avoid
37802 -the functions which work directly with the directory contents. After
37803 -the call the returned entries are available for direct use.
37805 - #include <stdio.h>
37806 - #include <dirent.h>
37808 - static int
37809 - one (struct dirent *unused)
37811 - return 1;
37814 - int
37815 - main (void)
37817 - struct dirent **eps;
37818 - int n;
37820 - n = scandir ("./", &eps, one, alphasort);
37821 - if (n >= 0)
37823 - int cnt;
37824 - for (cnt = 0; cnt < n; ++cnt)
37825 - puts (eps[cnt]->d_name);
37827 - else
37828 - perror ("Couldn't open the directory");
37830 - return 0;
37833 - Note the simple selector function in this example. Since we want to
37834 -see all directory entries we always return `1'.
37836 -\x1f
37837 -File: libc.info, Node: Working with Directory Trees, Next: Hard Links, Prev: Accessing Directories, Up: File System Interface
37839 -Working with Directory Trees
37840 -============================
37842 - The functions described so far for handling the files in a directory
37843 -have allowed you to either retrieve the information bit by bit, or to
37844 -process all the files as a group (see `scandir'). Sometimes it is
37845 -useful to process whole hierarchies of directories and their contained
37846 -files. The X/Open specification defines two functions to do this. The
37847 -simpler form is derived from an early definition in System V systems
37848 -and therefore this function is available on SVID-derived systems. The
37849 -prototypes and required definitions can be found in the `ftw.h' header.
37851 - There are four functions in this family: `ftw', `nftw' and their
37852 -64-bit counterparts `ftw64' and `nftw64'. These functions take as one
37853 -of their arguments a pointer to a callback function of the appropriate
37854 -type.
37856 - - Data Type: __ftw_func_t
37857 - int (*) (const char *, const struct stat *, int)
37859 - The type of callback functions given to the `ftw' function. The
37860 - first parameter points to the file name, the second parameter to an
37861 - object of type `struct stat' which is filled in for the file named
37862 - in the first parameter.
37864 - The last parameter is a flag giving more information about the
37865 - current file. It can have the following values:
37867 - `FTW_F'
37868 - The item is either a normal file or a file which does not fit
37869 - into one of the following categories. This could be special
37870 - files, sockets etc.
37872 - `FTW_D'
37873 - The item is a directory.
37875 - `FTW_NS'
37876 - The `stat' call failed and so the information pointed to by
37877 - the second paramater is invalid.
37879 - `FTW_DNR'
37880 - The item is a directory which cannot be read.
37882 - `FTW_SL'
37883 - The item is a symbolic link. Since symbolic links are
37884 - normally followed seeing this value in a `ftw' callback
37885 - function means the referenced file does not exist. The
37886 - situation for `nftw' is different.
37888 - This value is only available if the program is compiled with
37889 - `_BSD_SOURCE' or `_XOPEN_EXTENDED' defined before including
37890 - the first header. The original SVID systems do not have
37891 - symbolic links.
37893 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' this
37894 - type is in fact `__ftw64_func_t' since this mode changes `struct
37895 - stat' to be `struct stat64'.
37897 - For the LFS interface and for use in the function `ftw64', the
37898 -header `ftw.h' defines another function type.
37900 - - Data Type: __ftw64_func_t
37901 - int (*) (const char *, const struct stat64 *, int)
37903 - This type is used just like `__ftw_func_t' for the callback
37904 - function, but this time is called from `ftw64'. The second
37905 - parameter to the function is a pointer to a variable of type
37906 - `struct stat64' which is able to represent the larger values.
37908 - - Data Type: __nftw_func_t
37909 - int (*) (const char *, const struct stat *, int, struct FTW *)
37911 - The first three arguments are the same as for the `__ftw_func_t'
37912 - type. However for the third argument some additional values are
37913 - defined to allow finer differentiation:
37914 - `FTW_DP'
37915 - The current item is a directory and all subdirectories have
37916 - already been visited and reported. This flag is returned
37917 - instead of `FTW_D' if the `FTW_DEPTH' flag is passed to
37918 - `nftw' (see below).
37920 - `FTW_SLN'
37921 - The current item is a stale symbolic link. The file it
37922 - points to does not exist.
37924 - The last parameter of the callback function is a pointer to a
37925 - structure with some extra information as described below.
37927 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' this
37928 - type is in fact `__nftw64_func_t' since this mode changes `struct
37929 - stat' to be `struct stat64'.
37931 - For the LFS interface there is also a variant of this data type
37932 -available which has to be used with the `nftw64' function.
37934 - - Data Type: __nftw64_func_t
37935 - int (*) (const char *, const struct stat64 *, int, struct FTW *)
37937 - This type is used just like `__nftw_func_t' for the callback
37938 - function, but this time is called from `nftw64'. The second
37939 - parameter to the function is this time a pointer to a variable of
37940 - type `struct stat64' which is able to represent the larger values.
37942 - - Data Type: struct FTW
37943 - The information contained in this structure helps in interpreting
37944 - the name parameter and gives some information about the current
37945 - state of the traversal of the directory hierarchy.
37947 - `int base'
37948 - The value is the offset into the string passed in the first
37949 - parameter to the callback function of the beginning of the
37950 - file name. The rest of the string is the path of the file.
37951 - This information is especially important if the `FTW_CHDIR'
37952 - flag was set in calling `nftw' since then the current
37953 - directory is the one the current item is found in.
37955 - `int level'
37956 - Whilst processing, the code tracks how many directories down
37957 - it has gone to find the current file. This nesting level
37958 - starts at 0 for files in the initial directory (or is zero
37959 - for the initial file if a file was passed).
37961 - - Function: int ftw (const char *FILENAME, __ftw_func_t FUNC, int
37962 - DESCRIPTORS)
37963 - The `ftw' function calls the callback function given in the
37964 - parameter FUNC for every item which is found in the directory
37965 - specified by FILENAME and all directories below. The function
37966 - follows symbolic links if necessary but does not process an item
37967 - twice. If FILENAME is not a directory then it itself is the only
37968 - object returned to the callback function.
37970 - The file name passed to the callback function is constructed by
37971 - taking the FILENAME parameter and appending the names of all passed
37972 - directories and then the local file name. So the callback
37973 - function can use this parameter to access the file. `ftw' also
37974 - calls `stat' for the file and passes that information on to the
37975 - callback function. If this `stat' call was not successful the
37976 - failure is indicated by setting the third argument of the callback
37977 - function to `FTW_NS'. Otherwise it is set according to the
37978 - description given in the account of `__ftw_func_t' above.
37980 - The callback function is expected to return 0 to indicate that no
37981 - error occurred and that processing should continue. If an error
37982 - occurred in the callback function or it wants `ftw' to return
37983 - immediately, the callback function can return a value other than
37984 - 0. This is the only correct way to stop the function. The
37985 - program must not use `setjmp' or similar techniques to continue
37986 - from another place. This would leave resources allocated by the
37987 - `ftw' function unfreed.
37989 - The DESCRIPTORS parameter to `ftw' specifies how many file
37990 - descriptors it is allowed to consume. The function runs faster
37991 - the more descriptors it can use. For each level in the directory
37992 - hierarchy at most one descriptor is used, but for very deep ones
37993 - any limit on open file descriptors for the process or the system
37994 - may be exceeded. Moreover, file descriptor limits in a
37995 - multi-threaded program apply to all the threads as a group, and
37996 - therefore it is a good idea to supply a reasonable limit to the
37997 - number of open descriptors.
37999 - The return value of the `ftw' function is 0 if all callback
38000 - function calls returned 0 and all actions performed by the `ftw'
38001 - succeeded. If a function call failed (other than calling `stat'
38002 - on an item) the function returns -1. If a callback function
38003 - returns a value other than 0 this value is returned as the return
38004 - value of `ftw'.
38006 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
38007 - 32-bit system this function is in fact `ftw64', i.e. the LFS
38008 - interface transparently replaces the old interface.
38010 - - Function: int ftw64 (const char *FILENAME, __ftw64_func_t FUNC, int
38011 - DESCRIPTORS)
38012 - This function is similar to `ftw' but it can work on filesystems
38013 - with large files. File information is reported using a variable
38014 - of type `struct stat64' which is passed by reference to the
38015 - callback function.
38017 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
38018 - 32-bit system this function is available under the name `ftw' and
38019 - transparently replaces the old implementation.
38021 - - Function: int nftw (const char *FILENAME, __nftw_func_t FUNC, int
38022 - DESCRIPTORS, int FLAG)
38023 - The `nftw' function works like the `ftw' functions. They call the
38024 - callback function FUNC for all items found in the directory
38025 - FILENAME and below. At most DESCRIPTORS file descriptors are
38026 - consumed during the `nftw' call.
38028 - One difference is that the callback function is of a different
38029 - type. It is of type `struct FTW *' and provides the callback
38030 - function with the extra information described above.
38032 - A second difference is that `nftw' takes a fourth argument, which
38033 - is 0 or a bitwise-OR combination of any of the following values.
38035 - `FTW_PHYS'
38036 - While traversing the directory symbolic links are not
38037 - followed. Instead symbolic links are reported using the
38038 - `FTW_SL' value for the type parameter to the callback
38039 - function. If the file referenced by a symbolic link does not
38040 - exist `FTW_SLN' is returned instead.
38042 - `FTW_MOUNT'
38043 - The callback function is only called for items which are on
38044 - the same mounted filesystem as the directory given by the
38045 - FILENAME parameter to `nftw'.
38047 - `FTW_CHDIR'
38048 - If this flag is given the current working directory is
38049 - changed to the directory of the reported object before the
38050 - callback function is called. When `ntfw' finally returns the
38051 - current directory is restored to its original value.
38053 - `FTW_DEPTH'
38054 - If this option is specified then all subdirectories and files
38055 - within them are processed before processing the top directory
38056 - itself (depth-first processing). This also means the type
38057 - flag given to the callback function is `FTW_DP' and not
38058 - `FTW_D'.
38060 - The return value is computed in the same way as for `ftw'. `nftw'
38061 - returns 0 if no failures occurred and all callback functions
38062 - returned 0. In case of internal errors, such as memory problems,
38063 - the return value is -1 and ERRNO is set accordingly. If the
38064 - return value of a callback invocation was non-zero then that value
38065 - is returned.
38067 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
38068 - 32-bit system this function is in fact `nftw64', i.e. the LFS
38069 - interface transparently replaces the old interface.
38071 - - Function: int nftw64 (const char *FILENAME, __nftw64_func_t FUNC,
38072 - int DESCRIPTORS, int FLAG)
38073 - This function is similar to `nftw' but it can work on filesystems
38074 - with large files. File information is reported using a variable
38075 - of type `struct stat64' which is passed by reference to the
38076 - callback function.
38078 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
38079 - 32-bit system this function is available under the name `nftw' and
38080 - transparently replaces the old implementation.
38082 -\x1f
38083 -File: libc.info, Node: Hard Links, Next: Symbolic Links, Prev: Working with Directory Trees, Up: File System Interface
38085 -Hard Links
38086 -==========
38088 - In POSIX systems, one file can have many names at the same time.
38089 -All of the names are equally real, and no one of them is preferred to
38090 -the others.
38092 - To add a name to a file, use the `link' function. (The new name is
38093 -also called a "hard link" to the file.) Creating a new link to a file
38094 -does not copy the contents of the file; it simply makes a new name by
38095 -which the file can be known, in addition to the file's existing name or
38096 -names.
38098 - One file can have names in several directories, so the organization
38099 -of the file system is not a strict hierarchy or tree.
38101 - In most implementations, it is not possible to have hard links to the
38102 -same file in multiple file systems. `link' reports an error if you try
38103 -to make a hard link to the file from another file system when this
38104 -cannot be done.
38106 - The prototype for the `link' function is declared in the header file
38107 -`unistd.h'.
38109 - - Function: int link (const char *OLDNAME, const char *NEWNAME)
38110 - The `link' function makes a new link to the existing file named by
38111 - OLDNAME, under the new name NEWNAME.
38113 - This function returns a value of `0' if it is successful and `-1'
38114 - on failure. In addition to the usual file name errors (*note File
38115 - Name Errors::) for both OLDNAME and NEWNAME, the following `errno'
38116 - error conditions are defined for this function:
38118 - `EACCES'
38119 - You are not allowed to write to the directory in which the
38120 - new link is to be written.
38122 - `EEXIST'
38123 - There is already a file named NEWNAME. If you want to replace
38124 - this link with a new link, you must remove the old link
38125 - explicitly first.
38127 - `EMLINK'
38128 - There are already too many links to the file named by OLDNAME.
38129 - (The maximum number of links to a file is `LINK_MAX'; see
38130 - *Note Limits for Files::.)
38132 - `ENOENT'
38133 - The file named by OLDNAME doesn't exist. You can't make a
38134 - link to a file that doesn't exist.
38136 - `ENOSPC'
38137 - The directory or file system that would contain the new link
38138 - is full and cannot be extended.
38140 - `EPERM'
38141 - In the GNU system and some others, you cannot make links to
38142 - directories. Many systems allow only privileged users to do
38143 - so. This error is used to report the problem.
38145 - `EROFS'
38146 - The directory containing the new link can't be modified
38147 - because it's on a read-only file system.
38149 - `EXDEV'
38150 - The directory specified in NEWNAME is on a different file
38151 - system than the existing file.
38153 - `EIO'
38154 - A hardware error occurred while trying to read or write the
38155 - to filesystem.
38157 -\x1f
38158 -File: libc.info, Node: Symbolic Links, Next: Deleting Files, Prev: Hard Links, Up: File System Interface
38160 -Symbolic Links
38161 -==============
38163 - The GNU system supports "soft links" or "symbolic links". This is a
38164 -kind of "file" that is essentially a pointer to another file name.
38165 -Unlike hard links, symbolic links can be made to directories or across
38166 -file systems with no restrictions. You can also make a symbolic link
38167 -to a name which is not the name of any file. (Opening this link will
38168 -fail until a file by that name is created.) Likewise, if the symbolic
38169 -link points to an existing file which is later deleted, the symbolic
38170 -link continues to point to the same file name even though the name no
38171 -longer names any file.
38173 - The reason symbolic links work the way they do is that special things
38174 -happen when you try to open the link. The `open' function realizes you
38175 -have specified the name of a link, reads the file name contained in the
38176 -link, and opens that file name instead. The `stat' function likewise
38177 -operates on the file that the symbolic link points to, instead of on
38178 -the link itself.
38180 - By contrast, other operations such as deleting or renaming the file
38181 -operate on the link itself. The functions `readlink' and `lstat' also
38182 -refrain from following symbolic links, because their purpose is to
38183 -obtain information about the link. `link', the function that makes a
38184 -hard link, does too. It makes a hard link to the symbolic link, which
38185 -one rarely wants.
38187 - Some systems have for some functions operating on files have a limit
38188 -on how many symbolic links are followed when resolving a path name. The
38189 -limit if it exists is published in the `sys/param.h' header file.
38191 - - Macro: int MAXSYMLINKS
38192 - The macro `MAXSYMLINKS' specifies how many symlinks some function
38193 - will follow before returning `ELOOP'. Not all functions behave the
38194 - same and this value is not the same a that returned for
38195 - `_SC_SYMLOOP' by `sysconf'. In fact, the `sysconf' result can
38196 - indicate that there is no fixed limit although `MAXSYMLINKS'
38197 - exists and has a finite value.
38199 - Prototypes for most of the functions listed in this section are in
38200 -`unistd.h'.
38202 - - Function: int symlink (const char *OLDNAME, const char *NEWNAME)
38203 - The `symlink' function makes a symbolic link to OLDNAME named
38204 - NEWNAME.
38206 - The normal return value from `symlink' is `0'. A return value of
38207 - `-1' indicates an error. In addition to the usual file name
38208 - syntax errors (*note File Name Errors::), the following `errno'
38209 - error conditions are defined for this function:
38211 - `EEXIST'
38212 - There is already an existing file named NEWNAME.
38214 - `EROFS'
38215 - The file NEWNAME would exist on a read-only file system.
38217 - `ENOSPC'
38218 - The directory or file system cannot be extended to make the
38219 - new link.
38221 - `EIO'
38222 - A hardware error occurred while reading or writing data on
38223 - the disk.
38226 - - Function: int readlink (const char *FILENAME, char *BUFFER, size_t
38227 - SIZE)
38228 - The `readlink' function gets the value of the symbolic link
38229 - FILENAME. The file name that the link points to is copied into
38230 - BUFFER. This file name string is _not_ null-terminated;
38231 - `readlink' normally returns the number of characters copied. The
38232 - SIZE argument specifies the maximum number of characters to copy,
38233 - usually the allocation size of BUFFER.
38235 - If the return value equals SIZE, you cannot tell whether or not
38236 - there was room to return the entire name. So make a bigger buffer
38237 - and call `readlink' again. Here is an example:
38239 - char *
38240 - readlink_malloc (const char *filename)
38242 - int size = 100;
38243 - char *buffer = NULL;
38245 - while (1)
38247 - buffer = (char *) xrealloc (buffer, size);
38248 - int nchars = readlink (filename, buffer, size);
38249 - if (nchars < 0)
38251 - free (buffer);
38252 - return NULL;
38254 - if (nchars < size)
38255 - return buffer;
38256 - size *= 2;
38260 - A value of `-1' is returned in case of error. In addition to the
38261 - usual file name errors (*note File Name Errors::), the following
38262 - `errno' error conditions are defined for this function:
38264 - `EINVAL'
38265 - The named file is not a symbolic link.
38267 - `EIO'
38268 - A hardware error occurred while reading or writing data on
38269 - the disk.
38271 - In some situations it is desirable to resolve all the symbolic links
38272 -to get the real name of a file where no prefix names a symbolic link
38273 -which is followed and no filename in the path is `.' or `..'. This is
38274 -for instance desirable if files have to be compare in which case
38275 -different names can refer to the same inode.
38277 - - Function: char * canonicalize_file_name (const char *NAME)
38278 - The `canonicalize_file_name' function returns the absolute name of
38279 - the file named by NAME which contains no `.', `..' components nor
38280 - any repeated path separators (`/') or symlinks. The result is
38281 - passed back as the return value of the function in a block of
38282 - memory allocated with `malloc'. If the result is not used anymore
38283 - the memory should be freed with a call to `free'.
38285 - In any of the path components except the last one is missing the
38286 - function returns a NULL pointer. This is also what is returned if
38287 - the length of the path reaches or exceeds `PATH_MAX' characters.
38288 - In any case `errno' is set accordingly.
38290 - `ENAMETOOLONG'
38291 - The resulting path is too long. This error only occurs on
38292 - systems which have a limit on the file name length.
38294 - `EACCES'
38295 - At least one of the path components is not readable.
38297 - `ENOENT'
38298 - The input file name is empty.
38300 - `ENOENT'
38301 - At least one of the path components does not exist.
38303 - `ELOOP'
38304 - More than `MAXSYMLINKS' many symlinks have been followed.
38306 - This function is a GNU extension and is declared in `stdlib.h'.
38308 - The Unix standard includes a similar function which differs from
38309 -`canonicalize_file_name' in that the user has to provide the buffer
38310 -where the result is placed in.
38312 - - Function: char * realpath (const char *restrict NAME, char *restrict
38313 - RESOLVED)
38314 - A call to `realpath' where the RESOLVED parameter is `NULL'
38315 - behaves exactly like `canonicalize_file_name'. The function
38316 - allocates a buffer for the file name and returns a pointer to it.
38317 - If RESOLVED is not `NULL' it points to a buffer into which the
38318 - result is copied. It is the callers responsibility to allocate a
38319 - buffer which is large enough. On systems which define `PATH_MAX'
38320 - this means the buffer must be large enough for a pathname of this
38321 - size. For systems without limitations on the pathname length the
38322 - requirement cannot be met and programs should not call `realpath'
38323 - with anything but `NULL' for the second parameter.
38325 - One other difference is that the buffer RESOLVED (if nonzero) will
38326 - contain the part of the path component which does not exist or is
38327 - not readable if the function returns `NULL' and `errno' is set to
38328 - `EACCES' or `ENOENT'.
38330 - This function is declared in `stdlib.h'.
38332 - The advantage of using this function is that it is more widely
38333 -available. The drawback is that it reports failures for long path on
38334 -systems which have no limits on the file name length.
38336 diff -u -udbrN glibc-2.3.2/manual/libc.info-25 glibc-2.3.2-200304020432/manual/libc.info-25
38337 --- glibc-2.3.2/manual/libc.info-25 Sat Mar 1 02:39:41 2003
38338 +++ glibc-2.3.2-200304020432/manual/libc.info-25 Thu Jan 1 01:00:00 1970
38339 @@ -1,1163 +0,0 @@
38340 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
38342 -INFO-DIR-SECTION GNU libraries
38343 -START-INFO-DIR-ENTRY
38344 -* Libc: (libc). C library.
38345 -END-INFO-DIR-ENTRY
38347 - This file documents the GNU C library.
38349 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
38350 -Reference Manual', for Version 2.3.x.
38352 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
38353 -Free Software Foundation, Inc.
38355 - Permission is granted to copy, distribute and/or modify this document
38356 -under the terms of the GNU Free Documentation License, Version 1.1 or
38357 -any later version published by the Free Software Foundation; with the
38358 -Invariant Sections being "Free Software Needs Free Documentation" and
38359 -"GNU Lesser General Public License", the Front-Cover texts being (a)
38360 -(see below), and with the Back-Cover Texts being (b) (see below). A
38361 -copy of the license is included in the section entitled "GNU Free
38362 -Documentation License".
38364 - (a) The FSF's Front-Cover Text is:
38366 - A GNU Manual
38368 - (b) The FSF's Back-Cover Text is:
38370 - You have freedom to copy and modify this GNU Manual, like GNU
38371 -software. Copies published by the Free Software Foundation raise
38372 -funds for GNU development.
38374 -\x1f
38375 -File: libc.info, Node: Deleting Files, Next: Renaming Files, Prev: Symbolic Links, Up: File System Interface
38377 -Deleting Files
38378 -==============
38380 - You can delete a file with `unlink' or `remove'.
38382 - Deletion actually deletes a file name. If this is the file's only
38383 -name, then the file is deleted as well. If the file has other
38384 -remaining names (*note Hard Links::), it remains accessible under those
38385 -names.
38387 - - Function: int unlink (const char *FILENAME)
38388 - The `unlink' function deletes the file name FILENAME. If this is
38389 - a file's sole name, the file itself is also deleted. (Actually,
38390 - if any process has the file open when this happens, deletion is
38391 - postponed until all processes have closed the file.)
38393 - The function `unlink' is declared in the header file `unistd.h'.
38395 - This function returns `0' on successful completion, and `-1' on
38396 - error. In addition to the usual file name errors (*note File Name
38397 - Errors::), the following `errno' error conditions are defined for
38398 - this function:
38400 - `EACCES'
38401 - Write permission is denied for the directory from which the
38402 - file is to be removed, or the directory has the sticky bit
38403 - set and you do not own the file.
38405 - `EBUSY'
38406 - This error indicates that the file is being used by the
38407 - system in such a way that it can't be unlinked. For example,
38408 - you might see this error if the file name specifies the root
38409 - directory or a mount point for a file system.
38411 - `ENOENT'
38412 - The file name to be deleted doesn't exist.
38414 - `EPERM'
38415 - On some systems `unlink' cannot be used to delete the name of
38416 - a directory, or at least can only be used this way by a
38417 - privileged user. To avoid such problems, use `rmdir' to
38418 - delete directories. (In the GNU system `unlink' can never
38419 - delete the name of a directory.)
38421 - `EROFS'
38422 - The directory containing the file name to be deleted is on a
38423 - read-only file system and can't be modified.
38425 - - Function: int rmdir (const char *FILENAME)
38426 - The `rmdir' function deletes a directory. The directory must be
38427 - empty before it can be removed; in other words, it can only contain
38428 - entries for `.' and `..'.
38430 - In most other respects, `rmdir' behaves like `unlink'. There are
38431 - two additional `errno' error conditions defined for `rmdir':
38433 - `ENOTEMPTY'
38434 - `EEXIST'
38435 - The directory to be deleted is not empty.
38437 - These two error codes are synonymous; some systems use one, and
38438 - some use the other. The GNU system always uses `ENOTEMPTY'.
38440 - The prototype for this function is declared in the header file
38441 - `unistd.h'.
38443 - - Function: int remove (const char *FILENAME)
38444 - This is the ISO C function to remove a file. It works like
38445 - `unlink' for files and like `rmdir' for directories. `remove' is
38446 - declared in `stdio.h'.
38448 -\x1f
38449 -File: libc.info, Node: Renaming Files, Next: Creating Directories, Prev: Deleting Files, Up: File System Interface
38451 -Renaming Files
38452 -==============
38454 - The `rename' function is used to change a file's name.
38456 - - Function: int rename (const char *OLDNAME, const char *NEWNAME)
38457 - The `rename' function renames the file OLDNAME to NEWNAME. The
38458 - file formerly accessible under the name OLDNAME is afterwards
38459 - accessible as NEWNAME instead. (If the file had any other names
38460 - aside from OLDNAME, it continues to have those names.)
38462 - The directory containing the name NEWNAME must be on the same file
38463 - system as the directory containing the name OLDNAME.
38465 - One special case for `rename' is when OLDNAME and NEWNAME are two
38466 - names for the same file. The consistent way to handle this case
38467 - is to delete OLDNAME. However, in this case POSIX requires that
38468 - `rename' do nothing and report success--which is inconsistent. We
38469 - don't know what your operating system will do.
38471 - If OLDNAME is not a directory, then any existing file named
38472 - NEWNAME is removed during the renaming operation. However, if
38473 - NEWNAME is the name of a directory, `rename' fails in this case.
38475 - If OLDNAME is a directory, then either NEWNAME must not exist or
38476 - it must name a directory that is empty. In the latter case, the
38477 - existing directory named NEWNAME is deleted first. The name
38478 - NEWNAME must not specify a subdirectory of the directory `oldname'
38479 - which is being renamed.
38481 - One useful feature of `rename' is that the meaning of NEWNAME
38482 - changes "atomically" from any previously existing file by that
38483 - name to its new meaning (i.e. the file that was called OLDNAME).
38484 - There is no instant at which NEWNAME is non-existent "in between"
38485 - the old meaning and the new meaning. If there is a system crash
38486 - during the operation, it is possible for both names to still
38487 - exist; but NEWNAME will always be intact if it exists at all.
38489 - If `rename' fails, it returns `-1'. In addition to the usual file
38490 - name errors (*note File Name Errors::), the following `errno'
38491 - error conditions are defined for this function:
38493 - `EACCES'
38494 - One of the directories containing NEWNAME or OLDNAME refuses
38495 - write permission; or NEWNAME and OLDNAME are directories and
38496 - write permission is refused for one of them.
38498 - `EBUSY'
38499 - A directory named by OLDNAME or NEWNAME is being used by the
38500 - system in a way that prevents the renaming from working.
38501 - This includes directories that are mount points for
38502 - filesystems, and directories that are the current working
38503 - directories of processes.
38505 - `ENOTEMPTY'
38506 - `EEXIST'
38507 - The directory NEWNAME isn't empty. The GNU system always
38508 - returns `ENOTEMPTY' for this, but some other systems return
38509 - `EEXIST'.
38511 - `EINVAL'
38512 - OLDNAME is a directory that contains NEWNAME.
38514 - `EISDIR'
38515 - NEWNAME is a directory but the OLDNAME isn't.
38517 - `EMLINK'
38518 - The parent directory of NEWNAME would have too many links
38519 - (entries).
38521 - `ENOENT'
38522 - The file OLDNAME doesn't exist.
38524 - `ENOSPC'
38525 - The directory that would contain NEWNAME has no room for
38526 - another entry, and there is no space left in the file system
38527 - to expand it.
38529 - `EROFS'
38530 - The operation would involve writing to a directory on a
38531 - read-only file system.
38533 - `EXDEV'
38534 - The two file names NEWNAME and OLDNAME are on different file
38535 - systems.
38537 -\x1f
38538 -File: libc.info, Node: Creating Directories, Next: File Attributes, Prev: Renaming Files, Up: File System Interface
38540 -Creating Directories
38541 -====================
38543 - Directories are created with the `mkdir' function. (There is also a
38544 -shell command `mkdir' which does the same thing.)
38546 - - Function: int mkdir (const char *FILENAME, mode_t MODE)
38547 - The `mkdir' function creates a new, empty directory with name
38548 - FILENAME.
38550 - The argument MODE specifies the file permissions for the new
38551 - directory file. *Note Permission Bits::, for more information
38552 - about this.
38554 - A return value of `0' indicates successful completion, and `-1'
38555 - indicates failure. In addition to the usual file name syntax
38556 - errors (*note File Name Errors::), the following `errno' error
38557 - conditions are defined for this function:
38559 - `EACCES'
38560 - Write permission is denied for the parent directory in which
38561 - the new directory is to be added.
38563 - `EEXIST'
38564 - A file named FILENAME already exists.
38566 - `EMLINK'
38567 - The parent directory has too many links (entries).
38569 - Well-designed file systems never report this error, because
38570 - they permit more links than your disk could possibly hold.
38571 - However, you must still take account of the possibility of
38572 - this error, as it could result from network access to a file
38573 - system on another machine.
38575 - `ENOSPC'
38576 - The file system doesn't have enough room to create the new
38577 - directory.
38579 - `EROFS'
38580 - The parent directory of the directory being created is on a
38581 - read-only file system and cannot be modified.
38583 - To use this function, your program should include the header file
38584 - `sys/stat.h'.
38586 -\x1f
38587 -File: libc.info, Node: File Attributes, Next: Making Special Files, Prev: Creating Directories, Up: File System Interface
38589 -File Attributes
38590 -===============
38592 - When you issue an `ls -l' shell command on a file, it gives you
38593 -information about the size of the file, who owns it, when it was last
38594 -modified, etc. These are called the "file attributes", and are
38595 -associated with the file itself and not a particular one of its names.
38597 - This section contains information about how you can inquire about and
38598 -modify the attributes of a file.
38600 -* Menu:
38602 -* Attribute Meanings:: The names of the file attributes,
38603 - and what their values mean.
38604 -* Reading Attributes:: How to read the attributes of a file.
38605 -* Testing File Type:: Distinguishing ordinary files,
38606 - directories, links...
38607 -* File Owner:: How ownership for new files is determined,
38608 - and how to change it.
38609 -* Permission Bits:: How information about a file's access
38610 - mode is stored.
38611 -* Access Permission:: How the system decides who can access a file.
38612 -* Setting Permissions:: How permissions for new files are assigned,
38613 - and how to change them.
38614 -* Testing File Access:: How to find out if your process can
38615 - access a file.
38616 -* File Times:: About the time attributes of a file.
38617 -* File Size:: Manually changing the size of a file.
38619 -\x1f
38620 -File: libc.info, Node: Attribute Meanings, Next: Reading Attributes, Up: File Attributes
38622 -The meaning of the File Attributes
38623 -----------------------------------
38625 - When you read the attributes of a file, they come back in a structure
38626 -called `struct stat'. This section describes the names of the
38627 -attributes, their data types, and what they mean. For the functions to
38628 -read the attributes of a file, see *Note Reading Attributes::.
38630 - The header file `sys/stat.h' declares all the symbols defined in
38631 -this section.
38633 - - Data Type: struct stat
38634 - The `stat' structure type is used to return information about the
38635 - attributes of a file. It contains at least the following members:
38637 - `mode_t st_mode'
38638 - Specifies the mode of the file. This includes file type
38639 - information (*note Testing File Type::) and the file
38640 - permission bits (*note Permission Bits::).
38642 - `ino_t st_ino'
38643 - The file serial number, which distinguishes this file from
38644 - all other files on the same device.
38646 - `dev_t st_dev'
38647 - Identifies the device containing the file. The `st_ino' and
38648 - `st_dev', taken together, uniquely identify the file. The
38649 - `st_dev' value is not necessarily consistent across reboots or
38650 - system crashes, however.
38652 - `nlink_t st_nlink'
38653 - The number of hard links to the file. This count keeps track
38654 - of how many directories have entries for this file. If the
38655 - count is ever decremented to zero, then the file itself is
38656 - discarded as soon as no process still holds it open.
38657 - Symbolic links are not counted in the total.
38659 - `uid_t st_uid'
38660 - The user ID of the file's owner. *Note File Owner::.
38662 - `gid_t st_gid'
38663 - The group ID of the file. *Note File Owner::.
38665 - `off_t st_size'
38666 - This specifies the size of a regular file in bytes. For
38667 - files that are really devices this field isn't usually
38668 - meaningful. For symbolic links this specifies the length of
38669 - the file name the link refers to.
38671 - `time_t st_atime'
38672 - This is the last access time for the file. *Note File
38673 - Times::.
38675 - `unsigned long int st_atime_usec'
38676 - This is the fractional part of the last access time for the
38677 - file. *Note File Times::.
38679 - `time_t st_mtime'
38680 - This is the time of the last modification to the contents of
38681 - the file. *Note File Times::.
38683 - `unsigned long int st_mtime_usec'
38684 - This is the fractional part of the time of the last
38685 - modification to the contents of the file. *Note File Times::.
38687 - `time_t st_ctime'
38688 - This is the time of the last modification to the attributes
38689 - of the file. *Note File Times::.
38691 - `unsigned long int st_ctime_usec'
38692 - This is the fractional part of the time of the last
38693 - modification to the attributes of the file. *Note File
38694 - Times::.
38696 - `blkcnt_t st_blocks'
38697 - This is the amount of disk space that the file occupies,
38698 - measured in units of 512-byte blocks.
38700 - The number of disk blocks is not strictly proportional to the
38701 - size of the file, for two reasons: the file system may use
38702 - some blocks for internal record keeping; and the file may be
38703 - sparse--it may have "holes" which contain zeros but do not
38704 - actually take up space on the disk.
38706 - You can tell (approximately) whether a file is sparse by
38707 - comparing this value with `st_size', like this:
38709 - (st.st_blocks * 512 < st.st_size)
38711 - This test is not perfect because a file that is just slightly
38712 - sparse might not be detected as sparse at all. For practical
38713 - applications, this is not a problem.
38715 - `unsigned int st_blksize'
38716 - The optimal block size for reading of writing this file, in
38717 - bytes. You might use this size for allocating the buffer
38718 - space for reading of writing the file. (This is unrelated to
38719 - `st_blocks'.)
38721 - The extensions for the Large File Support (LFS) require, even on
38722 -32-bit machines, types which can handle file sizes up to 2^63.
38723 -Therefore a new definition of `struct stat' is necessary.
38725 - - Data Type: struct stat64
38726 - The members of this type are the same and have the same names as
38727 - those in `struct stat'. The only difference is that the members
38728 - `st_ino', `st_size', and `st_blocks' have a different type to
38729 - support larger values.
38731 - `mode_t st_mode'
38732 - Specifies the mode of the file. This includes file type
38733 - information (*note Testing File Type::) and the file
38734 - permission bits (*note Permission Bits::).
38736 - `ino64_t st_ino'
38737 - The file serial number, which distinguishes this file from
38738 - all other files on the same device.
38740 - `dev_t st_dev'
38741 - Identifies the device containing the file. The `st_ino' and
38742 - `st_dev', taken together, uniquely identify the file. The
38743 - `st_dev' value is not necessarily consistent across reboots or
38744 - system crashes, however.
38746 - `nlink_t st_nlink'
38747 - The number of hard links to the file. This count keeps track
38748 - of how many directories have entries for this file. If the
38749 - count is ever decremented to zero, then the file itself is
38750 - discarded as soon as no process still holds it open.
38751 - Symbolic links are not counted in the total.
38753 - `uid_t st_uid'
38754 - The user ID of the file's owner. *Note File Owner::.
38756 - `gid_t st_gid'
38757 - The group ID of the file. *Note File Owner::.
38759 - `off64_t st_size'
38760 - This specifies the size of a regular file in bytes. For
38761 - files that are really devices this field isn't usually
38762 - meaningful. For symbolic links this specifies the length of
38763 - the file name the link refers to.
38765 - `time_t st_atime'
38766 - This is the last access time for the file. *Note File
38767 - Times::.
38769 - `unsigned long int st_atime_usec'
38770 - This is the fractional part of the last access time for the
38771 - file. *Note File Times::.
38773 - `time_t st_mtime'
38774 - This is the time of the last modification to the contents of
38775 - the file. *Note File Times::.
38777 - `unsigned long int st_mtime_usec'
38778 - This is the fractional part of the time of the last
38779 - modification to the contents of the file. *Note File Times::.
38781 - `time_t st_ctime'
38782 - This is the time of the last modification to the attributes
38783 - of the file. *Note File Times::.
38785 - `unsigned long int st_ctime_usec'
38786 - This is the fractional part of the time of the last
38787 - modification to the attributes of the file. *Note File
38788 - Times::.
38790 - `blkcnt64_t st_blocks'
38791 - This is the amount of disk space that the file occupies,
38792 - measured in units of 512-byte blocks.
38794 - `unsigned int st_blksize'
38795 - The optimal block size for reading of writing this file, in
38796 - bytes. You might use this size for allocating the buffer
38797 - space for reading of writing the file. (This is unrelated to
38798 - `st_blocks'.)
38800 - Some of the file attributes have special data type names which exist
38801 -specifically for those attributes. (They are all aliases for well-known
38802 -integer types that you know and love.) These typedef names are defined
38803 -in the header file `sys/types.h' as well as in `sys/stat.h'. Here is a
38804 -list of them.
38806 - - Data Type: mode_t
38807 - This is an integer data type used to represent file modes. In the
38808 - GNU system, this is equivalent to `unsigned int'.
38810 - - Data Type: ino_t
38811 - This is an arithmetic data type used to represent file serial
38812 - numbers. (In Unix jargon, these are sometimes called "inode
38813 - numbers".) In the GNU system, this type is equivalent to
38814 - `unsigned long int'.
38816 - If the source is compiled with `_FILE_OFFSET_BITS == 64' this type
38817 - is transparently replaced by `ino64_t'.
38819 - - Data Type: ino64_t
38820 - This is an arithmetic data type used to represent file serial
38821 - numbers for the use in LFS. In the GNU system, this type is
38822 - equivalent to `unsigned long longint'.
38824 - When compiling with `_FILE_OFFSET_BITS == 64' this type is
38825 - available under the name `ino_t'.
38827 - - Data Type: dev_t
38828 - This is an arithmetic data type used to represent file device
38829 - numbers. In the GNU system, this is equivalent to `int'.
38831 - - Data Type: nlink_t
38832 - This is an arithmetic data type used to represent file link counts.
38833 - In the GNU system, this is equivalent to `unsigned short int'.
38835 - - Data Type: blkcnt_t
38836 - This is an arithmetic data type used to represent block counts.
38837 - In the GNU system, this is equivalent to `unsigned long int'.
38839 - If the source is compiled with `_FILE_OFFSET_BITS == 64' this type
38840 - is transparently replaced by `blkcnt64_t'.
38842 - - Data Type: blkcnt64_t
38843 - This is an arithmetic data type used to represent block counts for
38844 - the use in LFS. In the GNU system, this is equivalent to `unsigned
38845 - long long int'.
38847 - When compiling with `_FILE_OFFSET_BITS == 64' this type is
38848 - available under the name `blkcnt_t'.
38850 -\x1f
38851 -File: libc.info, Node: Reading Attributes, Next: Testing File Type, Prev: Attribute Meanings, Up: File Attributes
38853 -Reading the Attributes of a File
38854 ---------------------------------
38856 - To examine the attributes of files, use the functions `stat',
38857 -`fstat' and `lstat'. They return the attribute information in a
38858 -`struct stat' object. All three functions are declared in the header
38859 -file `sys/stat.h'.
38861 - - Function: int stat (const char *FILENAME, struct stat *BUF)
38862 - The `stat' function returns information about the attributes of the
38863 - file named by FILENAME in the structure pointed to by BUF.
38865 - If FILENAME is the name of a symbolic link, the attributes you get
38866 - describe the file that the link points to. If the link points to a
38867 - nonexistent file name, then `stat' fails reporting a nonexistent
38868 - file.
38870 - The return value is `0' if the operation is successful, or `-1' on
38871 - failure. In addition to the usual file name errors (*note File
38872 - Name Errors::, the following `errno' error conditions are defined
38873 - for this function:
38875 - `ENOENT'
38876 - The file named by FILENAME doesn't exist.
38878 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
38879 - function is in fact `stat64' since the LFS interface transparently
38880 - replaces the normal implementation.
38882 - - Function: int stat64 (const char *FILENAME, struct stat64 *BUF)
38883 - This function is similar to `stat' but it is also able to work on
38884 - files larger then 2^31 bytes on 32-bit systems. To be able to do
38885 - this the result is stored in a variable of type `struct stat64' to
38886 - which BUF must point.
38888 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
38889 - function is available under the name `stat' and so transparently
38890 - replaces the interface for small files on 32-bit machines.
38892 - - Function: int fstat (int FILEDES, struct stat *BUF)
38893 - The `fstat' function is like `stat', except that it takes an open
38894 - file descriptor as an argument instead of a file name. *Note
38895 - Low-Level I/O::.
38897 - Like `stat', `fstat' returns `0' on success and `-1' on failure.
38898 - The following `errno' error conditions are defined for `fstat':
38900 - `EBADF'
38901 - The FILEDES argument is not a valid file descriptor.
38903 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
38904 - function is in fact `fstat64' since the LFS interface transparently
38905 - replaces the normal implementation.
38907 - - Function: int fstat64 (int FILEDES, struct stat64 *BUF)
38908 - This function is similar to `fstat' but is able to work on large
38909 - files on 32-bit platforms. For large files the file descriptor
38910 - FILEDES should be obtained by `open64' or `creat64'. The BUF
38911 - pointer points to a variable of type `struct stat64' which is able
38912 - to represent the larger values.
38914 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
38915 - function is available under the name `fstat' and so transparently
38916 - replaces the interface for small files on 32-bit machines.
38918 - - Function: int lstat (const char *FILENAME, struct stat *BUF)
38919 - The `lstat' function is like `stat', except that it does not
38920 - follow symbolic links. If FILENAME is the name of a symbolic
38921 - link, `lstat' returns information about the link itself; otherwise
38922 - `lstat' works like `stat'. *Note Symbolic Links::.
38924 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
38925 - function is in fact `lstat64' since the LFS interface transparently
38926 - replaces the normal implementation.
38928 - - Function: int lstat64 (const char *FILENAME, struct stat64 *BUF)
38929 - This function is similar to `lstat' but it is also able to work on
38930 - files larger then 2^31 bytes on 32-bit systems. To be able to do
38931 - this the result is stored in a variable of type `struct stat64' to
38932 - which BUF must point.
38934 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' this
38935 - function is available under the name `lstat' and so transparently
38936 - replaces the interface for small files on 32-bit machines.
38938 -\x1f
38939 -File: libc.info, Node: Testing File Type, Next: File Owner, Prev: Reading Attributes, Up: File Attributes
38941 -Testing the Type of a File
38942 ---------------------------
38944 - The "file mode", stored in the `st_mode' field of the file
38945 -attributes, contains two kinds of information: the file type code, and
38946 -the access permission bits. This section discusses only the type code,
38947 -which you can use to tell whether the file is a directory, socket,
38948 -symbolic link, and so on. For details about access permissions see
38949 -*Note Permission Bits::.
38951 - There are two ways you can access the file type information in a file
38952 -mode. Firstly, for each file type there is a "predicate macro" which
38953 -examines a given file mode and returns whether it is of that type or
38954 -not. Secondly, you can mask out the rest of the file mode to leave
38955 -just the file type code, and compare this against constants for each of
38956 -the supported file types.
38958 - All of the symbols listed in this section are defined in the header
38959 -file `sys/stat.h'.
38961 - The following predicate macros test the type of a file, given the
38962 -value M which is the `st_mode' field returned by `stat' on that file:
38964 - - Macro: int S_ISDIR (mode_t M)
38965 - This macro returns non-zero if the file is a directory.
38967 - - Macro: int S_ISCHR (mode_t M)
38968 - This macro returns non-zero if the file is a character special
38969 - file (a device like a terminal).
38971 - - Macro: int S_ISBLK (mode_t M)
38972 - This macro returns non-zero if the file is a block special file (a
38973 - device like a disk).
38975 - - Macro: int S_ISREG (mode_t M)
38976 - This macro returns non-zero if the file is a regular file.
38978 - - Macro: int S_ISFIFO (mode_t M)
38979 - This macro returns non-zero if the file is a FIFO special file, or
38980 - a pipe. *Note Pipes and FIFOs::.
38982 - - Macro: int S_ISLNK (mode_t M)
38983 - This macro returns non-zero if the file is a symbolic link. *Note
38984 - Symbolic Links::.
38986 - - Macro: int S_ISSOCK (mode_t M)
38987 - This macro returns non-zero if the file is a socket. *Note
38988 - Sockets::.
38990 - An alternate non-POSIX method of testing the file type is supported
38991 -for compatibility with BSD. The mode can be bitwise AND-ed with
38992 -`S_IFMT' to extract the file type code, and compared to the appropriate
38993 -constant. For example,
38995 - S_ISCHR (MODE)
38997 -is equivalent to:
38999 - ((MODE & S_IFMT) == S_IFCHR)
39001 - - Macro: int S_IFMT
39002 - This is a bit mask used to extract the file type code from a mode
39003 - value.
39005 - These are the symbolic names for the different file type codes:
39007 -`S_IFDIR'
39008 - This is the file type constant of a directory file.
39010 -`S_IFCHR'
39011 - This is the file type constant of a character-oriented device file.
39013 -`S_IFBLK'
39014 - This is the file type constant of a block-oriented device file.
39016 -`S_IFREG'
39017 - This is the file type constant of a regular file.
39019 -`S_IFLNK'
39020 - This is the file type constant of a symbolic link.
39022 -`S_IFSOCK'
39023 - This is the file type constant of a socket.
39025 -`S_IFIFO'
39026 - This is the file type constant of a FIFO or pipe.
39028 - The POSIX.1b standard introduced a few more objects which possibly
39029 -can be implemented as object in the filesystem. These are message
39030 -queues, semaphores, and shared memory objects. To allow
39031 -differentiating these objects from other files the POSIX standard
39032 -introduces three new test macros. But unlike the other macros it does
39033 -not take the value of the `st_mode' field as the parameter. Instead
39034 -they expect a pointer to the whole `struct stat' structure.
39036 - - Macro: int S_TYPEISMQ (struct stat *S)
39037 - If the system implement POSIX message queues as distinct objects
39038 - and the file is a message queue object, this macro returns a
39039 - non-zero value. In all other cases the result is zero.
39041 - - Macro: int S_TYPEISSEM (struct stat *S)
39042 - If the system implement POSIX semaphores as distinct objects and
39043 - the file is a semaphore object, this macro returns a non-zero
39044 - value. In all other cases the result is zero.
39046 - - Macro: int S_TYPEISSHM (struct stat *S)
39047 - If the system implement POSIX shared memory objects as distinct
39048 - objects and the file is an shared memory object, this macro
39049 - returns a non-zero value. In all other cases the result is zero.
39051 -\x1f
39052 -File: libc.info, Node: File Owner, Next: Permission Bits, Prev: Testing File Type, Up: File Attributes
39054 -File Owner
39055 -----------
39057 - Every file has an "owner" which is one of the registered user names
39058 -defined on the system. Each file also has a "group" which is one of
39059 -the defined groups. The file owner can often be useful for showing you
39060 -who edited the file (especially when you edit with GNU Emacs), but its
39061 -main purpose is for access control.
39063 - The file owner and group play a role in determining access because
39064 -the file has one set of access permission bits for the owner, another
39065 -set that applies to users who belong to the file's group, and a third
39066 -set of bits that applies to everyone else. *Note Access Permission::,
39067 -for the details of how access is decided based on this data.
39069 - When a file is created, its owner is set to the effective user ID of
39070 -the process that creates it (*note Process Persona::). The file's
39071 -group ID may be set to either the effective group ID of the process, or
39072 -the group ID of the directory that contains the file, depending on the
39073 -system where the file is stored. When you access a remote file system,
39074 -it behaves according to its own rules, not according to the system your
39075 -program is running on. Thus, your program must be prepared to encounter
39076 -either kind of behavior no matter what kind of system you run it on.
39078 - You can change the owner and/or group owner of an existing file using
39079 -the `chown' function. This is the primitive for the `chown' and
39080 -`chgrp' shell commands.
39082 - The prototype for this function is declared in `unistd.h'.
39084 - - Function: int chown (const char *FILENAME, uid_t OWNER, gid_t GROUP)
39085 - The `chown' function changes the owner of the file FILENAME to
39086 - OWNER, and its group owner to GROUP.
39088 - Changing the owner of the file on certain systems clears the
39089 - set-user-ID and set-group-ID permission bits. (This is because
39090 - those bits may not be appropriate for the new owner.) Other file
39091 - permission bits are not changed.
39093 - The return value is `0' on success and `-1' on failure. In
39094 - addition to the usual file name errors (*note File Name Errors::),
39095 - the following `errno' error conditions are defined for this
39096 - function:
39098 - `EPERM'
39099 - This process lacks permission to make the requested change.
39101 - Only privileged users or the file's owner can change the
39102 - file's group. On most file systems, only privileged users
39103 - can change the file owner; some file systems allow you to
39104 - change the owner if you are currently the owner. When you
39105 - access a remote file system, the behavior you encounter is
39106 - determined by the system that actually holds the file, not by
39107 - the system your program is running on.
39109 - *Note Options for Files::, for information about the
39110 - `_POSIX_CHOWN_RESTRICTED' macro.
39112 - `EROFS'
39113 - The file is on a read-only file system.
39115 - - Function: int fchown (int FILEDES, int OWNER, int GROUP)
39116 - This is like `chown', except that it changes the owner of the open
39117 - file with descriptor FILEDES.
39119 - The return value from `fchown' is `0' on success and `-1' on
39120 - failure. The following `errno' error codes are defined for this
39121 - function:
39123 - `EBADF'
39124 - The FILEDES argument is not a valid file descriptor.
39126 - `EINVAL'
39127 - The FILEDES argument corresponds to a pipe or socket, not an
39128 - ordinary file.
39130 - `EPERM'
39131 - This process lacks permission to make the requested change.
39132 - For details see `chmod' above.
39134 - `EROFS'
39135 - The file resides on a read-only file system.
39137 -\x1f
39138 -File: libc.info, Node: Permission Bits, Next: Access Permission, Prev: File Owner, Up: File Attributes
39140 -The Mode Bits for Access Permission
39141 ------------------------------------
39143 - The "file mode", stored in the `st_mode' field of the file
39144 -attributes, contains two kinds of information: the file type code, and
39145 -the access permission bits. This section discusses only the access
39146 -permission bits, which control who can read or write the file. *Note
39147 -Testing File Type::, for information about the file type code.
39149 - All of the symbols listed in this section are defined in the header
39150 -file `sys/stat.h'.
39152 - These symbolic constants are defined for the file mode bits that
39153 -control access permission for the file:
39155 -`S_IRUSR'
39156 -`S_IREAD'
39157 - Read permission bit for the owner of the file. On many systems
39158 - this bit is 0400. `S_IREAD' is an obsolete synonym provided for
39159 - BSD compatibility.
39161 -`S_IWUSR'
39162 -`S_IWRITE'
39163 - Write permission bit for the owner of the file. Usually 0200.
39164 - `S_IWRITE' is an obsolete synonym provided for BSD compatibility.
39166 -`S_IXUSR'
39167 -`S_IEXEC'
39168 - Execute (for ordinary files) or search (for directories)
39169 - permission bit for the owner of the file. Usually 0100.
39170 - `S_IEXEC' is an obsolete synonym provided for BSD compatibility.
39172 -`S_IRWXU'
39173 - This is equivalent to `(S_IRUSR | S_IWUSR | S_IXUSR)'.
39175 -`S_IRGRP'
39176 - Read permission bit for the group owner of the file. Usually 040.
39178 -`S_IWGRP'
39179 - Write permission bit for the group owner of the file. Usually 020.
39181 -`S_IXGRP'
39182 - Execute or search permission bit for the group owner of the file.
39183 - Usually 010.
39185 -`S_IRWXG'
39186 - This is equivalent to `(S_IRGRP | S_IWGRP | S_IXGRP)'.
39188 -`S_IROTH'
39189 - Read permission bit for other users. Usually 04.
39191 -`S_IWOTH'
39192 - Write permission bit for other users. Usually 02.
39194 -`S_IXOTH'
39195 - Execute or search permission bit for other users. Usually 01.
39197 -`S_IRWXO'
39198 - This is equivalent to `(S_IROTH | S_IWOTH | S_IXOTH)'.
39200 -`S_ISUID'
39201 - This is the set-user-ID on execute bit, usually 04000. *Note How
39202 - Change Persona::.
39204 -`S_ISGID'
39205 - This is the set-group-ID on execute bit, usually 02000. *Note How
39206 - Change Persona::.
39208 -`S_ISVTX'
39209 - This is the "sticky" bit, usually 01000.
39211 - For a directory it gives permission to delete a file in that
39212 - directory only if you own that file. Ordinarily, a user can
39213 - either delete all the files in a directory or cannot delete any of
39214 - them (based on whether the user has write permission for the
39215 - directory). The same restriction applies--you must have both
39216 - write permission for the directory and own the file you want to
39217 - delete. The one exception is that the owner of the directory can
39218 - delete any file in the directory, no matter who owns it (provided
39219 - the owner has given himself write permission for the directory).
39220 - This is commonly used for the `/tmp' directory, where anyone may
39221 - create files but not delete files created by other users.
39223 - Originally the sticky bit on an executable file modified the
39224 - swapping policies of the system. Normally, when a program
39225 - terminated, its pages in core were immediately freed and reused.
39226 - If the sticky bit was set on the executable file, the system kept
39227 - the pages in core for a while as if the program were still
39228 - running. This was advantageous for a program likely to be run
39229 - many times in succession. This usage is obsolete in modern
39230 - systems. When a program terminates, its pages always remain in
39231 - core as long as there is no shortage of memory in the system.
39232 - When the program is next run, its pages will still be in core if
39233 - no shortage arose since the last run.
39235 - On some modern systems where the sticky bit has no useful meaning
39236 - for an executable file, you cannot set the bit at all for a
39237 - non-directory. If you try, `chmod' fails with `EFTYPE'; *note
39238 - Setting Permissions::.
39240 - Some systems (particularly SunOS) have yet another use for the
39241 - sticky bit. If the sticky bit is set on a file that is _not_
39242 - executable, it means the opposite: never cache the pages of this
39243 - file at all. The main use of this is for the files on an NFS
39244 - server machine which are used as the swap area of diskless client
39245 - machines. The idea is that the pages of the file will be cached
39246 - in the client's memory, so it is a waste of the server's memory to
39247 - cache them a second time. With this usage the sticky bit also
39248 - implies that the filesystem may fail to record the file's
39249 - modification time onto disk reliably (the idea being that no-one
39250 - cares for a swap file).
39252 - This bit is only available on BSD systems (and those derived from
39253 - them). Therefore one has to use the `_BSD_SOURCE' feature select
39254 - macro to get the definition (*note Feature Test Macros::).
39256 - The actual bit values of the symbols are listed in the table above
39257 -so you can decode file mode values when debugging your programs. These
39258 -bit values are correct for most systems, but they are not guaranteed.
39260 - *Warning:* Writing explicit numbers for file permissions is bad
39261 -practice. Not only is it not portable, it also requires everyone who
39262 -reads your program to remember what the bits mean. To make your program
39263 -clean use the symbolic names.
39265 -\x1f
39266 -File: libc.info, Node: Access Permission, Next: Setting Permissions, Prev: Permission Bits, Up: File Attributes
39268 -How Your Access to a File is Decided
39269 -------------------------------------
39271 - Recall that the operating system normally decides access permission
39272 -for a file based on the effective user and group IDs of the process and
39273 -its supplementary group IDs, together with the file's owner, group and
39274 -permission bits. These concepts are discussed in detail in *Note
39275 -Process Persona::.
39277 - If the effective user ID of the process matches the owner user ID of
39278 -the file, then permissions for read, write, and execute/search are
39279 -controlled by the corresponding "user" (or "owner") bits. Likewise, if
39280 -any of the effective group ID or supplementary group IDs of the process
39281 -matches the group owner ID of the file, then permissions are controlled
39282 -by the "group" bits. Otherwise, permissions are controlled by the
39283 -"other" bits.
39285 - Privileged users, like `root', can access any file regardless of its
39286 -permission bits. As a special case, for a file to be executable even
39287 -by a privileged user, at least one of its execute bits must be set.
39289 -\x1f
39290 -File: libc.info, Node: Setting Permissions, Next: Testing File Access, Prev: Access Permission, Up: File Attributes
39292 -Assigning File Permissions
39293 ---------------------------
39295 - The primitive functions for creating files (for example, `open' or
39296 -`mkdir') take a MODE argument, which specifies the file permissions to
39297 -give the newly created file. This mode is modified by the process's
39298 -"file creation mask", or "umask", before it is used.
39300 - The bits that are set in the file creation mask identify permissions
39301 -that are always to be disabled for newly created files. For example, if
39302 -you set all the "other" access bits in the mask, then newly created
39303 -files are not accessible at all to processes in the "other" category,
39304 -even if the MODE argument passed to the create function would permit
39305 -such access. In other words, the file creation mask is the complement
39306 -of the ordinary access permissions you want to grant.
39308 - Programs that create files typically specify a MODE argument that
39309 -includes all the permissions that make sense for the particular file.
39310 -For an ordinary file, this is typically read and write permission for
39311 -all classes of users. These permissions are then restricted as
39312 -specified by the individual user's own file creation mask.
39314 - To change the permission of an existing file given its name, call
39315 -`chmod'. This function uses the specified permission bits and ignores
39316 -the file creation mask.
39318 - In normal use, the file creation mask is initialized by the user's
39319 -login shell (using the `umask' shell command), and inherited by all
39320 -subprocesses. Application programs normally don't need to worry about
39321 -the file creation mask. It will automatically do what it is supposed to
39322 -do.
39324 - When your program needs to create a file and bypass the umask for its
39325 -access permissions, the easiest way to do this is to use `fchmod' after
39326 -opening the file, rather than changing the umask. In fact, changing
39327 -the umask is usually done only by shells. They use the `umask'
39328 -function.
39330 - The functions in this section are declared in `sys/stat.h'.
39332 - - Function: mode_t umask (mode_t MASK)
39333 - The `umask' function sets the file creation mask of the current
39334 - process to MASK, and returns the previous value of the file
39335 - creation mask.
39337 - Here is an example showing how to read the mask with `umask'
39338 - without changing it permanently:
39340 - mode_t
39341 - read_umask (void)
39343 - mode_t mask = umask (0);
39344 - umask (mask);
39345 - return mask;
39348 - However, it is better to use `getumask' if you just want to read
39349 - the mask value, because it is reentrant (at least if you use the
39350 - GNU operating system).
39352 - - Function: mode_t getumask (void)
39353 - Return the current value of the file creation mask for the current
39354 - process. This function is a GNU extension.
39356 - - Function: int chmod (const char *FILENAME, mode_t MODE)
39357 - The `chmod' function sets the access permission bits for the file
39358 - named by FILENAME to MODE.
39360 - If FILENAME is a symbolic link, `chmod' changes the permissions of
39361 - the file pointed to by the link, not those of the link itself.
39363 - This function returns `0' if successful and `-1' if not. In
39364 - addition to the usual file name errors (*note File Name Errors::),
39365 - the following `errno' error conditions are defined for this
39366 - function:
39368 - `ENOENT'
39369 - The named file doesn't exist.
39371 - `EPERM'
39372 - This process does not have permission to change the access
39373 - permissions of this file. Only the file's owner (as judged
39374 - by the effective user ID of the process) or a privileged user
39375 - can change them.
39377 - `EROFS'
39378 - The file resides on a read-only file system.
39380 - `EFTYPE'
39381 - MODE has the `S_ISVTX' bit (the "sticky bit") set, and the
39382 - named file is not a directory. Some systems do not allow
39383 - setting the sticky bit on non-directory files, and some do
39384 - (and only some of those assign a useful meaning to the bit
39385 - for non-directory files).
39387 - You only get `EFTYPE' on systems where the sticky bit has no
39388 - useful meaning for non-directory files, so it is always safe
39389 - to just clear the bit in MODE and call `chmod' again. *Note
39390 - Permission Bits::, for full details on the sticky bit.
39392 - - Function: int fchmod (int FILEDES, int MODE)
39393 - This is like `chmod', except that it changes the permissions of the
39394 - currently open file given by FILEDES.
39396 - The return value from `fchmod' is `0' on success and `-1' on
39397 - failure. The following `errno' error codes are defined for this
39398 - function:
39400 - `EBADF'
39401 - The FILEDES argument is not a valid file descriptor.
39403 - `EINVAL'
39404 - The FILEDES argument corresponds to a pipe or socket, or
39405 - something else that doesn't really have access permissions.
39407 - `EPERM'
39408 - This process does not have permission to change the access
39409 - permissions of this file. Only the file's owner (as judged
39410 - by the effective user ID of the process) or a privileged user
39411 - can change them.
39413 - `EROFS'
39414 - The file resides on a read-only file system.
39416 -\x1f
39417 -File: libc.info, Node: Testing File Access, Next: File Times, Prev: Setting Permissions, Up: File Attributes
39419 -Testing Permission to Access a File
39420 ------------------------------------
39422 - In some situations it is desirable to allow programs to access files
39423 -or devices even if this is not possible with the permissions granted to
39424 -the user. One possible solution is to set the setuid-bit of the program
39425 -file. If such a program is started the _effective_ user ID of the
39426 -process is changed to that of the owner of the program file. So to
39427 -allow write access to files like `/etc/passwd', which normally can be
39428 -written only by the super-user, the modifying program will have to be
39429 -owned by `root' and the setuid-bit must be set.
39431 - But beside the files the program is intended to change the user
39432 -should not be allowed to access any file to which s/he would not have
39433 -access anyway. The program therefore must explicitly check whether _the
39434 -user_ would have the necessary access to a file, before it reads or
39435 -writes the file.
39437 - To do this, use the function `access', which checks for access
39438 -permission based on the process's _real_ user ID rather than the
39439 -effective user ID. (The setuid feature does not alter the real user ID,
39440 -so it reflects the user who actually ran the program.)
39442 - There is another way you could check this access, which is easy to
39443 -describe, but very hard to use. This is to examine the file mode bits
39444 -and mimic the system's own access computation. This method is
39445 -undesirable because many systems have additional access control
39446 -features; your program cannot portably mimic them, and you would not
39447 -want to try to keep track of the diverse features that different systems
39448 -have. Using `access' is simple and automatically does whatever is
39449 -appropriate for the system you are using.
39451 - `access' is _only_ only appropriate to use in setuid programs. A
39452 -non-setuid program will always use the effective ID rather than the
39453 -real ID.
39455 - The symbols in this section are declared in `unistd.h'.
39457 - - Function: int access (const char *FILENAME, int HOW)
39458 - The `access' function checks to see whether the file named by
39459 - FILENAME can be accessed in the way specified by the HOW argument.
39460 - The HOW argument either can be the bitwise OR of the flags
39461 - `R_OK', `W_OK', `X_OK', or the existence test `F_OK'.
39463 - This function uses the _real_ user and group IDs of the calling
39464 - process, rather than the _effective_ IDs, to check for access
39465 - permission. As a result, if you use the function from a `setuid'
39466 - or `setgid' program (*note How Change Persona::), it gives
39467 - information relative to the user who actually ran the program.
39469 - The return value is `0' if the access is permitted, and `-1'
39470 - otherwise. (In other words, treated as a predicate function,
39471 - `access' returns true if the requested access is _denied_.)
39473 - In addition to the usual file name errors (*note File Name
39474 - Errors::), the following `errno' error conditions are defined for
39475 - this function:
39477 - `EACCES'
39478 - The access specified by HOW is denied.
39480 - `ENOENT'
39481 - The file doesn't exist.
39483 - `EROFS'
39484 - Write permission was requested for a file on a read-only file
39485 - system.
39487 - These macros are defined in the header file `unistd.h' for use as
39488 -the HOW argument to the `access' function. The values are integer
39489 -constants.
39491 - - Macro: int R_OK
39492 - Flag meaning test for read permission.
39494 - - Macro: int W_OK
39495 - Flag meaning test for write permission.
39497 - - Macro: int X_OK
39498 - Flag meaning test for execute/search permission.
39500 - - Macro: int F_OK
39501 - Flag meaning test for existence of the file.
39503 diff -u -udbrN glibc-2.3.2/manual/libc.info-26 glibc-2.3.2-200304020432/manual/libc.info-26
39504 --- glibc-2.3.2/manual/libc.info-26 Sat Mar 1 02:39:41 2003
39505 +++ glibc-2.3.2-200304020432/manual/libc.info-26 Thu Jan 1 01:00:00 1970
39506 @@ -1,1233 +0,0 @@
39507 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
39509 -INFO-DIR-SECTION GNU libraries
39510 -START-INFO-DIR-ENTRY
39511 -* Libc: (libc). C library.
39512 -END-INFO-DIR-ENTRY
39514 - This file documents the GNU C library.
39516 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
39517 -Reference Manual', for Version 2.3.x.
39519 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
39520 -Free Software Foundation, Inc.
39522 - Permission is granted to copy, distribute and/or modify this document
39523 -under the terms of the GNU Free Documentation License, Version 1.1 or
39524 -any later version published by the Free Software Foundation; with the
39525 -Invariant Sections being "Free Software Needs Free Documentation" and
39526 -"GNU Lesser General Public License", the Front-Cover texts being (a)
39527 -(see below), and with the Back-Cover Texts being (b) (see below). A
39528 -copy of the license is included in the section entitled "GNU Free
39529 -Documentation License".
39531 - (a) The FSF's Front-Cover Text is:
39533 - A GNU Manual
39535 - (b) The FSF's Back-Cover Text is:
39537 - You have freedom to copy and modify this GNU Manual, like GNU
39538 -software. Copies published by the Free Software Foundation raise
39539 -funds for GNU development.
39541 -\x1f
39542 -File: libc.info, Node: File Times, Next: File Size, Prev: Testing File Access, Up: File Attributes
39544 -File Times
39545 -----------
39547 - Each file has three time stamps associated with it: its access time,
39548 -its modification time, and its attribute modification time. These
39549 -correspond to the `st_atime', `st_mtime', and `st_ctime' members of the
39550 -`stat' structure; see *Note File Attributes::.
39552 - All of these times are represented in calendar time format, as
39553 -`time_t' objects. This data type is defined in `time.h'. For more
39554 -information about representation and manipulation of time values, see
39555 -*Note Calendar Time::.
39557 - Reading from a file updates its access time attribute, and writing
39558 -updates its modification time. When a file is created, all three time
39559 -stamps for that file are set to the current time. In addition, the
39560 -attribute change time and modification time fields of the directory that
39561 -contains the new entry are updated.
39563 - Adding a new name for a file with the `link' function updates the
39564 -attribute change time field of the file being linked, and both the
39565 -attribute change time and modification time fields of the directory
39566 -containing the new name. These same fields are affected if a file name
39567 -is deleted with `unlink', `remove' or `rmdir'. Renaming a file with
39568 -`rename' affects only the attribute change time and modification time
39569 -fields of the two parent directories involved, and not the times for
39570 -the file being renamed.
39572 - Changing the attributes of a file (for example, with `chmod')
39573 -updates its attribute change time field.
39575 - You can also change some of the time stamps of a file explicitly
39576 -using the `utime' function--all except the attribute change time. You
39577 -need to include the header file `utime.h' to use this facility.
39579 - - Data Type: struct utimbuf
39580 - The `utimbuf' structure is used with the `utime' function to
39581 - specify new access and modification times for a file. It contains
39582 - the following members:
39584 - `time_t actime'
39585 - This is the access time for the file.
39587 - `time_t modtime'
39588 - This is the modification time for the file.
39590 - - Function: int utime (const char *FILENAME, const struct utimbuf
39591 - *TIMES)
39592 - This function is used to modify the file times associated with the
39593 - file named FILENAME.
39595 - If TIMES is a null pointer, then the access and modification times
39596 - of the file are set to the current time. Otherwise, they are set
39597 - to the values from the `actime' and `modtime' members
39598 - (respectively) of the `utimbuf' structure pointed to by TIMES.
39600 - The attribute modification time for the file is set to the current
39601 - time in either case (since changing the time stamps is itself a
39602 - modification of the file attributes).
39604 - The `utime' function returns `0' if successful and `-1' on
39605 - failure. In addition to the usual file name errors (*note File
39606 - Name Errors::), the following `errno' error conditions are defined
39607 - for this function:
39609 - `EACCES'
39610 - There is a permission problem in the case where a null
39611 - pointer was passed as the TIMES argument. In order to update
39612 - the time stamp on the file, you must either be the owner of
39613 - the file, have write permission for the file, or be a
39614 - privileged user.
39616 - `ENOENT'
39617 - The file doesn't exist.
39619 - `EPERM'
39620 - If the TIMES argument is not a null pointer, you must either
39621 - be the owner of the file or be a privileged user.
39623 - `EROFS'
39624 - The file lives on a read-only file system.
39626 - Each of the three time stamps has a corresponding microsecond part,
39627 -which extends its resolution. These fields are called `st_atime_usec',
39628 -`st_mtime_usec', and `st_ctime_usec'; each has a value between 0 and
39629 -999,999, which indicates the time in microseconds. They correspond to
39630 -the `tv_usec' field of a `timeval' structure; see *Note High-Resolution
39631 -Calendar::.
39633 - The `utimes' function is like `utime', but also lets you specify the
39634 -fractional part of the file times. The prototype for this function is
39635 -in the header file `sys/time.h'.
39637 - - Function: int utimes (const char *FILENAME, struct timeval TVP[2])
39638 - This function sets the file access and modification times of the
39639 - file FILENAME. The new file access time is specified by `TVP[0]',
39640 - and the new modification time by `TVP[1]'. Similar to `utime', if
39641 - TVP is a null pointer then the access and modification times of
39642 - the file are set to the current time. This function comes from
39643 - BSD.
39645 - The return values and error conditions are the same as for the
39646 - `utime' function.
39648 - - Function: int lutimes (const char *FILENAME, struct timeval TVP[2])
39649 - This function is like `utimes', except that it does not follow
39650 - symbolic links. If FILENAME is the name of a symbolic link,
39651 - `lutimes' sets the file access and modification times of the
39652 - symbolic link special file itself (as seen by `lstat'; *note
39653 - Symbolic Links::) while `utimes' sets the file access and
39654 - modification times of the file the symbolic link refers to. This
39655 - function comes from FreeBSD, and is not available on all platforms
39656 - (if not available, it will fail with `ENOSYS').
39658 - The return values and error conditions are the same as for the
39659 - `utime' function.
39661 - - Function: int futimes (int *FD, struct timeval TVP[2])
39662 - This function is like `utimes', except that it takes an open file
39663 - descriptor as an argument instead of a file name. *Note Low-Level
39664 - I/O::. This function comes from FreeBSD, and is not available on
39665 - all platforms (if not available, it will fail with `ENOSYS').
39667 - Like `utimes', `futimes' returns `0' on success and `-1' on
39668 - failure. The following `errno' error conditions are defined for
39669 - `futimes':
39671 - `EACCES'
39672 - There is a permission problem in the case where a null
39673 - pointer was passed as the TIMES argument. In order to update
39674 - the time stamp on the file, you must either be the owner of
39675 - the file, have write permission for the file, or be a
39676 - privileged user.
39678 - `EBADF'
39679 - The FILEDES argument is not a valid file descriptor.
39681 - `EPERM'
39682 - If the TIMES argument is not a null pointer, you must either
39683 - be the owner of the file or be a privileged user.
39685 - `EROFS'
39686 - The file lives on a read-only file system.
39688 -\x1f
39689 -File: libc.info, Node: File Size, Prev: File Times, Up: File Attributes
39691 -File Size
39692 ----------
39694 - Normally file sizes are maintained automatically. A file begins
39695 -with a size of 0 and is automatically extended when data is written past
39696 -its end. It is also possible to empty a file completely by an `open'
39697 -or `fopen' call.
39699 - However, sometimes it is necessary to _reduce_ the size of a file.
39700 -This can be done with the `truncate' and `ftruncate' functions. They
39701 -were introduced in BSD Unix. `ftruncate' was later added to POSIX.1.
39703 - Some systems allow you to extend a file (creating holes) with these
39704 -functions. This is useful when using memory-mapped I/O (*note
39705 -Memory-mapped I/O::), where files are not automatically extended.
39706 -However, it is not portable but must be implemented if `mmap' allows
39707 -mapping of files (i.e., `_POSIX_MAPPED_FILES' is defined).
39709 - Using these functions on anything other than a regular file gives
39710 -_undefined_ results. On many systems, such a call will appear to
39711 -succeed, without actually accomplishing anything.
39713 - - Function: int truncate (const char *FILENAME, off_t LENGTH)
39714 - The `truncate' function changes the size of FILENAME to LENGTH.
39715 - If LENGTH is shorter than the previous length, data at the end
39716 - will be lost. The file must be writable by the user to perform
39717 - this operation.
39719 - If LENGTH is longer, holes will be added to the end. However, some
39720 - systems do not support this feature and will leave the file
39721 - unchanged.
39723 - When the source file is compiled with `_FILE_OFFSET_BITS == 64' the
39724 - `truncate' function is in fact `truncate64' and the type `off_t'
39725 - has 64 bits which makes it possible to handle files up to 2^63
39726 - bytes in length.
39728 - The return value is 0 for success, or -1 for an error. In
39729 - addition to the usual file name errors, the following errors may
39730 - occur:
39732 - `EACCES'
39733 - The file is a directory or not writable.
39735 - `EINVAL'
39736 - LENGTH is negative.
39738 - `EFBIG'
39739 - The operation would extend the file beyond the limits of the
39740 - operating system.
39742 - `EIO'
39743 - A hardware I/O error occurred.
39745 - `EPERM'
39746 - The file is "append-only" or "immutable".
39748 - `EINTR'
39749 - The operation was interrupted by a signal.
39752 - - Function: int truncate64 (const char *NAME, off64_t LENGTH)
39753 - This function is similar to the `truncate' function. The
39754 - difference is that the LENGTH argument is 64 bits wide even on 32
39755 - bits machines, which allows the handling of files with sizes up to
39756 - 2^63 bytes.
39758 - When the source file is compiled with `_FILE_OFFSET_BITS == 64' on
39759 - a 32 bits machine this function is actually available under the
39760 - name `truncate' and so transparently replaces the 32 bits
39761 - interface.
39763 - - Function: int ftruncate (int FD, off_t LENGTH)
39764 - This is like `truncate', but it works on a file descriptor FD for
39765 - an opened file instead of a file name to identify the object. The
39766 - file must be opened for writing to successfully carry out the
39767 - operation.
39769 - The POSIX standard leaves it implementation defined what happens
39770 - if the specified new LENGTH of the file is bigger than the
39771 - original size. The `ftruncate' function might simply leave the
39772 - file alone and do nothing or it can increase the size to the
39773 - desired size. In this later case the extended area should be
39774 - zero-filled. So using `ftruncate' is no reliable way to increase
39775 - the file size but if it is possible it is probably the fastest
39776 - way. The function also operates on POSIX shared memory segments
39777 - if these are implemented by the system.
39779 - `ftruncate' is especially useful in combination with `mmap'.
39780 - Since the mapped region must have a fixed size one cannot enlarge
39781 - the file by writing something beyond the last mapped page.
39782 - Instead one has to enlarge the file itself and then remap the file
39783 - with the new size. The example below shows how this works.
39785 - When the source file is compiled with `_FILE_OFFSET_BITS == 64' the
39786 - `ftruncate' function is in fact `ftruncate64' and the type `off_t'
39787 - has 64 bits which makes it possible to handle files up to 2^63
39788 - bytes in length.
39790 - The return value is 0 for success, or -1 for an error. The
39791 - following errors may occur:
39793 - `EBADF'
39794 - FD does not correspond to an open file.
39796 - `EACCES'
39797 - FD is a directory or not open for writing.
39799 - `EINVAL'
39800 - LENGTH is negative.
39802 - `EFBIG'
39803 - The operation would extend the file beyond the limits of the
39804 - operating system.
39806 - `EIO'
39807 - A hardware I/O error occurred.
39809 - `EPERM'
39810 - The file is "append-only" or "immutable".
39812 - `EINTR'
39813 - The operation was interrupted by a signal.
39816 - - Function: int ftruncate64 (int ID, off64_t LENGTH)
39817 - This function is similar to the `ftruncate' function. The
39818 - difference is that the LENGTH argument is 64 bits wide even on 32
39819 - bits machines which allows the handling of files with sizes up to
39820 - 2^63 bytes.
39822 - When the source file is compiled with `_FILE_OFFSET_BITS == 64' on
39823 - a 32 bits machine this function is actually available under the
39824 - name `ftruncate' and so transparently replaces the 32 bits
39825 - interface.
39827 - As announced here is a little example of how to use `ftruncate' in
39828 -combination with `mmap':
39830 - int fd;
39831 - void *start;
39832 - size_t len;
39834 - int
39835 - add (off_t at, void *block, size_t size)
39837 - if (at + size > len)
39839 - /* Resize the file and remap. */
39840 - size_t ps = sysconf (_SC_PAGESIZE);
39841 - size_t ns = (at + size + ps - 1) & ~(ps - 1);
39842 - void *np;
39843 - if (ftruncate (fd, ns) < 0)
39844 - return -1;
39845 - np = mmap (NULL, ns, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
39846 - if (np == MAP_FAILED)
39847 - return -1;
39848 - start = np;
39849 - len = ns;
39851 - memcpy ((char *) start + at, block, size);
39852 - return 0;
39855 - The function `add' writes a block of memory at an arbitrary position
39856 -in the file. If the current size of the file is too small it is
39857 -extended. Note the it is extended by a round number of pages. This is
39858 -a requirement of `mmap'. The program has to keep track of the real
39859 -size, and when it has finished a final `ftruncate' call should set the
39860 -real size of the file.
39862 -\x1f
39863 -File: libc.info, Node: Making Special Files, Next: Temporary Files, Prev: File Attributes, Up: File System Interface
39865 -Making Special Files
39866 -====================
39868 - The `mknod' function is the primitive for making special files, such
39869 -as files that correspond to devices. The GNU library includes this
39870 -function for compatibility with BSD.
39872 - The prototype for `mknod' is declared in `sys/stat.h'.
39874 - - Function: int mknod (const char *FILENAME, int MODE, int DEV)
39875 - The `mknod' function makes a special file with name FILENAME. The
39876 - MODE specifies the mode of the file, and may include the various
39877 - special file bits, such as `S_IFCHR' (for a character special file)
39878 - or `S_IFBLK' (for a block special file). *Note Testing File
39879 - Type::.
39881 - The DEV argument specifies which device the special file refers to.
39882 - Its exact interpretation depends on the kind of special file being
39883 - created.
39885 - The return value is `0' on success and `-1' on error. In addition
39886 - to the usual file name errors (*note File Name Errors::), the
39887 - following `errno' error conditions are defined for this function:
39889 - `EPERM'
39890 - The calling process is not privileged. Only the superuser
39891 - can create special files.
39893 - `ENOSPC'
39894 - The directory or file system that would contain the new file
39895 - is full and cannot be extended.
39897 - `EROFS'
39898 - The directory containing the new file can't be modified
39899 - because it's on a read-only file system.
39901 - `EEXIST'
39902 - There is already a file named FILENAME. If you want to
39903 - replace this file, you must remove the old file explicitly
39904 - first.
39906 -\x1f
39907 -File: libc.info, Node: Temporary Files, Prev: Making Special Files, Up: File System Interface
39909 -Temporary Files
39910 -===============
39912 - If you need to use a temporary file in your program, you can use the
39913 -`tmpfile' function to open it. Or you can use the `tmpnam' (better:
39914 -`tmpnam_r') function to provide a name for a temporary file and then
39915 -you can open it in the usual way with `fopen'.
39917 - The `tempnam' function is like `tmpnam' but lets you choose what
39918 -directory temporary files will go in, and something about what their
39919 -file names will look like. Important for multi-threaded programs is
39920 -that `tempnam' is reentrant, while `tmpnam' is not since it returns a
39921 -pointer to a static buffer.
39923 - These facilities are declared in the header file `stdio.h'.
39925 - - Function: FILE * tmpfile (void)
39926 - This function creates a temporary binary file for update mode, as
39927 - if by calling `fopen' with mode `"wb+"'. The file is deleted
39928 - automatically when it is closed or when the program terminates.
39929 - (On some other ISO C systems the file may fail to be deleted if
39930 - the program terminates abnormally).
39932 - This function is reentrant.
39934 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
39935 - 32-bit system this function is in fact `tmpfile64', i.e. the LFS
39936 - interface transparently replaces the old interface.
39938 - - Function: FILE * tmpfile64 (void)
39939 - This function is similar to `tmpfile', but the stream it returns a
39940 - pointer to was opened using `tmpfile64'. Therefore this stream can
39941 - be used for files larger then 2^31 bytes on 32-bit machines.
39943 - Please note that the return type is still `FILE *'. There is no
39944 - special `FILE' type for the LFS interface.
39946 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' on a 32
39947 - bits machine this function is available under the name `tmpfile'
39948 - and so transparently replaces the old interface.
39950 - - Function: char * tmpnam (char *RESULT)
39951 - This function constructs and returns a valid file name that does
39952 - not refer to any existing file. If the RESULT argument is a null
39953 - pointer, the return value is a pointer to an internal static
39954 - string, which might be modified by subsequent calls and therefore
39955 - makes this function non-reentrant. Otherwise, the RESULT argument
39956 - should be a pointer to an array of at least `L_tmpnam' characters,
39957 - and the result is written into that array.
39959 - It is possible for `tmpnam' to fail if you call it too many times
39960 - without removing previously-created files. This is because the
39961 - limited length of the temporary file names gives room for only a
39962 - finite number of different names. If `tmpnam' fails it returns a
39963 - null pointer.
39965 - *Warning:* Between the time the pathname is constructed and the
39966 - file is created another process might have created a file with the
39967 - same name using `tmpnam', leading to a possible security hole. The
39968 - implementation generates names which can hardly be predicted, but
39969 - when opening the file you should use the `O_EXCL' flag. Using
39970 - `tmpfile' or `mkstemp' is a safe way to avoid this problem.
39972 - - Function: char * tmpnam_r (char *RESULT)
39973 - This function is nearly identical to the `tmpnam' function, except
39974 - that if RESULT is a null pointer it returns a null pointer.
39976 - This guarantees reentrancy because the non-reentrant situation of
39977 - `tmpnam' cannot happen here.
39979 - *Warning*: This function has the same security problems as
39980 - `tmpnam'.
39982 - - Macro: int L_tmpnam
39983 - The value of this macro is an integer constant expression that
39984 - represents the minimum size of a string large enough to hold a
39985 - file name generated by the `tmpnam' function.
39987 - - Macro: int TMP_MAX
39988 - The macro `TMP_MAX' is a lower bound for how many temporary names
39989 - you can create with `tmpnam'. You can rely on being able to call
39990 - `tmpnam' at least this many times before it might fail saying you
39991 - have made too many temporary file names.
39993 - With the GNU library, you can create a very large number of
39994 - temporary file names. If you actually created the files, you
39995 - would probably run out of disk space before you ran out of names.
39996 - Some other systems have a fixed, small limit on the number of
39997 - temporary files. The limit is never less than `25'.
39999 - - Function: char * tempnam (const char *DIR, const char *PREFIX)
40000 - This function generates a unique temporary file name. If PREFIX
40001 - is not a null pointer, up to five characters of this string are
40002 - used as a prefix for the file name. The return value is a string
40003 - newly allocated with `malloc', so you should release its storage
40004 - with `free' when it is no longer needed.
40006 - Because the string is dynamically allocated this function is
40007 - reentrant.
40009 - The directory prefix for the temporary file name is determined by
40010 - testing each of the following in sequence. The directory must
40011 - exist and be writable.
40013 - * The environment variable `TMPDIR', if it is defined. For
40014 - security reasons this only happens if the program is not SUID
40015 - or SGID enabled.
40017 - * The DIR argument, if it is not a null pointer.
40019 - * The value of the `P_tmpdir' macro.
40021 - * The directory `/tmp'.
40023 - This function is defined for SVID compatibility.
40025 - *Warning:* Between the time the pathname is constructed and the
40026 - file is created another process might have created a file with the
40027 - same name using `tempnam', leading to a possible security hole.
40028 - The implementation generates names which can hardly be predicted,
40029 - but when opening the file you should use the `O_EXCL' flag. Using
40030 - `tmpfile' or `mkstemp' is a safe way to avoid this problem.
40032 - - SVID Macro: char * P_tmpdir
40033 - This macro is the name of the default directory for temporary
40034 - files.
40036 - Older Unix systems did not have the functions just described.
40037 -Instead they used `mktemp' and `mkstemp'. Both of these functions work
40038 -by modifying a file name template string you pass. The last six
40039 -characters of this string must be `XXXXXX'. These six `X's are
40040 -replaced with six characters which make the whole string a unique file
40041 -name. Usually the template string is something like
40042 -`/tmp/PREFIXXXXXXX', and each program uses a unique PREFIX.
40044 - *Note:* Because `mktemp' and `mkstemp' modify the template string,
40045 -you _must not_ pass string constants to them. String constants are
40046 -normally in read-only storage, so your program would crash when
40047 -`mktemp' or `mkstemp' tried to modify the string.
40049 - - Function: char * mktemp (char *TEMPLATE)
40050 - The `mktemp' function generates a unique file name by modifying
40051 - TEMPLATE as described above. If successful, it returns TEMPLATE
40052 - as modified. If `mktemp' cannot find a unique file name, it makes
40053 - TEMPLATE an empty string and returns that. If TEMPLATE does not
40054 - end with `XXXXXX', `mktemp' returns a null pointer.
40056 - *Warning:* Between the time the pathname is constructed and the
40057 - file is created another process might have created a file with the
40058 - same name using `mktemp', leading to a possible security hole. The
40059 - implementation generates names which can hardly be predicted, but
40060 - when opening the file you should use the `O_EXCL' flag. Using
40061 - `mkstemp' is a safe way to avoid this problem.
40063 - - Function: int mkstemp (char *TEMPLATE)
40064 - The `mkstemp' function generates a unique file name just as
40065 - `mktemp' does, but it also opens the file for you with `open'
40066 - (*note Opening and Closing Files::). If successful, it modifies
40067 - TEMPLATE in place and returns a file descriptor for that file open
40068 - for reading and writing. If `mkstemp' cannot create a
40069 - uniquely-named file, it returns `-1'. If TEMPLATE does not end
40070 - with `XXXXXX', `mkstemp' returns `-1' and does not modify TEMPLATE.
40072 - The file is opened using mode `0600'. If the file is meant to be
40073 - used by other users this mode must be changed explicitly.
40075 - Unlike `mktemp', `mkstemp' is actually guaranteed to create a unique
40076 -file that cannot possibly clash with any other program trying to create
40077 -a temporary file. This is because it works by calling `open' with the
40078 -`O_EXCL' flag, which says you want to create a new file and get an
40079 -error if the file already exists.
40081 - - Function: char * mkdtemp (char *TEMPLATE)
40082 - The `mkdtemp' function creates a directory with a unique name. If
40083 - it succeeds, it overwrites TEMPLATE with the name of the
40084 - directory, and returns TEMPLATE. As with `mktemp' and `mkstemp',
40085 - TEMPLATE should be a string ending with `XXXXXX'.
40087 - If `mkdtemp' cannot create an uniquely named directory, it returns
40088 - `NULL' and sets ERRNO appropriately. If TEMPLATE does not end
40089 - with `XXXXXX', `mkdtemp' returns `NULL' and does not modify
40090 - TEMPLATE. ERRNO will be set to `EINVAL' in this case.
40092 - The directory is created using mode `0700'.
40094 - The directory created by `mkdtemp' cannot clash with temporary files
40095 -or directories created by other users. This is because directory
40096 -creation always works like `open' with `O_EXCL'. *Note Creating
40097 -Directories::.
40099 - The `mkdtemp' function comes from OpenBSD.
40101 -\x1f
40102 -File: libc.info, Node: Pipes and FIFOs, Next: Sockets, Prev: File System Interface, Up: Top
40104 -Pipes and FIFOs
40105 -***************
40107 - A "pipe" is a mechanism for interprocess communication; data written
40108 -to the pipe by one process can be read by another process. The data is
40109 -handled in a first-in, first-out (FIFO) order. The pipe has no name; it
40110 -is created for one use and both ends must be inherited from the single
40111 -process which created the pipe.
40113 - A "FIFO special file" is similar to a pipe, but instead of being an
40114 -anonymous, temporary connection, a FIFO has a name or names like any
40115 -other file. Processes open the FIFO by name in order to communicate
40116 -through it.
40118 - A pipe or FIFO has to be open at both ends simultaneously. If you
40119 -read from a pipe or FIFO file that doesn't have any processes writing
40120 -to it (perhaps because they have all closed the file, or exited), the
40121 -read returns end-of-file. Writing to a pipe or FIFO that doesn't have a
40122 -reading process is treated as an error condition; it generates a
40123 -`SIGPIPE' signal, and fails with error code `EPIPE' if the signal is
40124 -handled or blocked.
40126 - Neither pipes nor FIFO special files allow file positioning. Both
40127 -reading and writing operations happen sequentially; reading from the
40128 -beginning of the file and writing at the end.
40130 -* Menu:
40132 -* Creating a Pipe:: Making a pipe with the `pipe' function.
40133 -* Pipe to a Subprocess:: Using a pipe to communicate with a
40134 - child process.
40135 -* FIFO Special Files:: Making a FIFO special file.
40136 -* Pipe Atomicity:: When pipe (or FIFO) I/O is atomic.
40138 -\x1f
40139 -File: libc.info, Node: Creating a Pipe, Next: Pipe to a Subprocess, Up: Pipes and FIFOs
40141 -Creating a Pipe
40142 -===============
40144 - The primitive for creating a pipe is the `pipe' function. This
40145 -creates both the reading and writing ends of the pipe. It is not very
40146 -useful for a single process to use a pipe to talk to itself. In typical
40147 -use, a process creates a pipe just before it forks one or more child
40148 -processes (*note Creating a Process::). The pipe is then used for
40149 -communication either between the parent or child processes, or between
40150 -two sibling processes.
40152 - The `pipe' function is declared in the header file `unistd.h'.
40154 - - Function: int pipe (int FILEDES[2])
40155 - The `pipe' function creates a pipe and puts the file descriptors
40156 - for the reading and writing ends of the pipe (respectively) into
40157 - `FILEDES[0]' and `FILEDES[1]'.
40159 - An easy way to remember that the input end comes first is that file
40160 - descriptor `0' is standard input, and file descriptor `1' is
40161 - standard output.
40163 - If successful, `pipe' returns a value of `0'. On failure, `-1' is
40164 - returned. The following `errno' error conditions are defined for
40165 - this function:
40167 - `EMFILE'
40168 - The process has too many files open.
40170 - `ENFILE'
40171 - There are too many open files in the entire system. *Note
40172 - Error Codes::, for more information about `ENFILE'. This
40173 - error never occurs in the GNU system.
40175 - Here is an example of a simple program that creates a pipe. This
40176 -program uses the `fork' function (*note Creating a Process::) to create
40177 -a child process. The parent process writes data to the pipe, which is
40178 -read by the child process.
40180 - #include <sys/types.h>
40181 - #include <unistd.h>
40182 - #include <stdio.h>
40183 - #include <stdlib.h>
40185 - /* Read characters from the pipe and echo them to `stdout'. */
40187 - void
40188 - read_from_pipe (int file)
40190 - FILE *stream;
40191 - int c;
40192 - stream = fdopen (file, "r");
40193 - while ((c = fgetc (stream)) != EOF)
40194 - putchar (c);
40195 - fclose (stream);
40198 - /* Write some random text to the pipe. */
40200 - void
40201 - write_to_pipe (int file)
40203 - FILE *stream;
40204 - stream = fdopen (file, "w");
40205 - fprintf (stream, "hello, world!\n");
40206 - fprintf (stream, "goodbye, world!\n");
40207 - fclose (stream);
40210 - int
40211 - main (void)
40213 - pid_t pid;
40214 - int mypipe[2];
40216 - /* Create the pipe. */
40217 - if (pipe (mypipe))
40219 - fprintf (stderr, "Pipe failed.\n");
40220 - return EXIT_FAILURE;
40223 - /* Create the child process. */
40224 - pid = fork ();
40225 - if (pid == (pid_t) 0)
40227 - /* This is the child process.
40228 - Close other end first. */
40229 - close (mypipe[1]);
40230 - read_from_pipe (mypipe[0]);
40231 - return EXIT_SUCCESS;
40233 - else if (pid < (pid_t) 0)
40235 - /* The fork failed. */
40236 - fprintf (stderr, "Fork failed.\n");
40237 - return EXIT_FAILURE;
40239 - else
40241 - /* This is the parent process.
40242 - Close other end first. */
40243 - close (mypipe[0]);
40244 - write_to_pipe (mypipe[1]);
40245 - return EXIT_SUCCESS;
40249 -\x1f
40250 -File: libc.info, Node: Pipe to a Subprocess, Next: FIFO Special Files, Prev: Creating a Pipe, Up: Pipes and FIFOs
40252 -Pipe to a Subprocess
40253 -====================
40255 - A common use of pipes is to send data to or receive data from a
40256 -program being run as a subprocess. One way of doing this is by using a
40257 -combination of `pipe' (to create the pipe), `fork' (to create the
40258 -subprocess), `dup2' (to force the subprocess to use the pipe as its
40259 -standard input or output channel), and `exec' (to execute the new
40260 -program). Or, you can use `popen' and `pclose'.
40262 - The advantage of using `popen' and `pclose' is that the interface is
40263 -much simpler and easier to use. But it doesn't offer as much
40264 -flexibility as using the low-level functions directly.
40266 - - Function: FILE * popen (const char *COMMAND, const char *MODE)
40267 - The `popen' function is closely related to the `system' function;
40268 - see *Note Running a Command::. It executes the shell command
40269 - COMMAND as a subprocess. However, instead of waiting for the
40270 - command to complete, it creates a pipe to the subprocess and
40271 - returns a stream that corresponds to that pipe.
40273 - If you specify a MODE argument of `"r"', you can read from the
40274 - stream to retrieve data from the standard output channel of the
40275 - subprocess. The subprocess inherits its standard input channel
40276 - from the parent process.
40278 - Similarly, if you specify a MODE argument of `"w"', you can write
40279 - to the stream to send data to the standard input channel of the
40280 - subprocess. The subprocess inherits its standard output channel
40281 - from the parent process.
40283 - In the event of an error `popen' returns a null pointer. This
40284 - might happen if the pipe or stream cannot be created, if the
40285 - subprocess cannot be forked, or if the program cannot be executed.
40287 - - Function: int pclose (FILE *STREAM)
40288 - The `pclose' function is used to close a stream created by `popen'.
40289 - It waits for the child process to terminate and returns its status
40290 - value, as for the `system' function.
40292 - Here is an example showing how to use `popen' and `pclose' to filter
40293 -output through another program, in this case the paging program `more'.
40295 - #include <stdio.h>
40296 - #include <stdlib.h>
40298 - void
40299 - write_data (FILE * stream)
40301 - int i;
40302 - for (i = 0; i < 100; i++)
40303 - fprintf (stream, "%d\n", i);
40304 - if (ferror (stream))
40306 - fprintf (stderr, "Output to stream failed.\n");
40307 - exit (EXIT_FAILURE);
40311 - int
40312 - main (void)
40314 - FILE *output;
40316 - output = popen ("more", "w");
40317 - if (!output)
40319 - fprintf (stderr,
40320 - "incorrect parameters or too many files.\n");
40321 - return EXIT_FAILURE;
40323 - write_data (output);
40324 - if (pclose (output) != 0)
40326 - fprintf (stderr,
40327 - "Could not run more or other error.\n");
40329 - return EXIT_SUCCESS;
40332 -\x1f
40333 -File: libc.info, Node: FIFO Special Files, Next: Pipe Atomicity, Prev: Pipe to a Subprocess, Up: Pipes and FIFOs
40335 -FIFO Special Files
40336 -==================
40338 - A FIFO special file is similar to a pipe, except that it is created
40339 -in a different way. Instead of being an anonymous communications
40340 -channel, a FIFO special file is entered into the file system by calling
40341 -`mkfifo'.
40343 - Once you have created a FIFO special file in this way, any process
40344 -can open it for reading or writing, in the same way as an ordinary file.
40345 -However, it has to be open at both ends simultaneously before you can
40346 -proceed to do any input or output operations on it. Opening a FIFO for
40347 -reading normally blocks until some other process opens the same FIFO for
40348 -writing, and vice versa.
40350 - The `mkfifo' function is declared in the header file `sys/stat.h'.
40352 - - Function: int mkfifo (const char *FILENAME, mode_t MODE)
40353 - The `mkfifo' function makes a FIFO special file with name
40354 - FILENAME. The MODE argument is used to set the file's
40355 - permissions; see *Note Setting Permissions::.
40357 - The normal, successful return value from `mkfifo' is `0'. In the
40358 - case of an error, `-1' is returned. In addition to the usual file
40359 - name errors (*note File Name Errors::), the following `errno'
40360 - error conditions are defined for this function:
40362 - `EEXIST'
40363 - The named file already exists.
40365 - `ENOSPC'
40366 - The directory or file system cannot be extended.
40368 - `EROFS'
40369 - The directory that would contain the file resides on a
40370 - read-only file system.
40372 -\x1f
40373 -File: libc.info, Node: Pipe Atomicity, Prev: FIFO Special Files, Up: Pipes and FIFOs
40375 -Atomicity of Pipe I/O
40376 -=====================
40378 - Reading or writing pipe data is "atomic" if the size of data written
40379 -is not greater than `PIPE_BUF'. This means that the data transfer
40380 -seems to be an instantaneous unit, in that nothing else in the system
40381 -can observe a state in which it is partially complete. Atomic I/O may
40382 -not begin right away (it may need to wait for buffer space or for data),
40383 -but once it does begin it finishes immediately.
40385 - Reading or writing a larger amount of data may not be atomic; for
40386 -example, output data from other processes sharing the descriptor may be
40387 -interspersed. Also, once `PIPE_BUF' characters have been written,
40388 -further writes will block until some characters are read.
40390 - *Note Limits for Files::, for information about the `PIPE_BUF'
40391 -parameter.
40393 -\x1f
40394 -File: libc.info, Node: Sockets, Next: Low-Level Terminal Interface, Prev: Pipes and FIFOs, Up: Top
40396 -Sockets
40397 -*******
40399 - This chapter describes the GNU facilities for interprocess
40400 -communication using sockets.
40402 - A "socket" is a generalized interprocess communication channel.
40403 -Like a pipe, a socket is represented as a file descriptor. Unlike pipes
40404 -sockets support communication between unrelated processes, and even
40405 -between processes running on different machines that communicate over a
40406 -network. Sockets are the primary means of communicating with other
40407 -machines; `telnet', `rlogin', `ftp', `talk' and the other familiar
40408 -network programs use sockets.
40410 - Not all operating systems support sockets. In the GNU library, the
40411 -header file `sys/socket.h' exists regardless of the operating system,
40412 -and the socket functions always exist, but if the system does not
40413 -really support sockets these functions always fail.
40415 - *Incomplete:* We do not currently document the facilities for
40416 -broadcast messages or for configuring Internet interfaces. The
40417 -reentrant functions and some newer functions that are related to IPv6
40418 -aren't documented either so far.
40420 -* Menu:
40422 -* Socket Concepts:: Basic concepts you need to know about.
40423 -* Communication Styles::Stream communication, datagrams and other styles.
40424 -* Socket Addresses:: How socket names (``addresses'') work.
40425 -* Interface Naming:: Identifying specific network interfaces.
40426 -* Local Namespace:: Details about the local namespace.
40427 -* Internet Namespace:: Details about the Internet namespace.
40428 -* Misc Namespaces:: Other namespaces not documented fully here.
40429 -* Open/Close Sockets:: Creating sockets and destroying them.
40430 -* Connections:: Operations on sockets with connection state.
40431 -* Datagrams:: Operations on datagram sockets.
40432 -* Inetd:: Inetd is a daemon that starts servers on request.
40433 - The most convenient way to write a server
40434 - is to make it work with Inetd.
40435 -* Socket Options:: Miscellaneous low-level socket options.
40436 -* Networks Database:: Accessing the database of network names.
40438 -\x1f
40439 -File: libc.info, Node: Socket Concepts, Next: Communication Styles, Up: Sockets
40441 -Socket Concepts
40442 -===============
40444 - When you create a socket, you must specify the style of communication
40445 -you want to use and the type of protocol that should implement it. The
40446 -"communication style" of a socket defines the user-level semantics of
40447 -sending and receiving data on the socket. Choosing a communication
40448 -style specifies the answers to questions such as these:
40450 - * *What are the units of data transmission?* Some communication
40451 - styles regard the data as a sequence of bytes with no larger
40452 - structure; others group the bytes into records (which are known in
40453 - this context as "packets").
40455 - * *Can data be lost during normal operation?* Some communication
40456 - styles guarantee that all the data sent arrives in the order it was
40457 - sent (barring system or network crashes); other styles occasionally
40458 - lose data as a normal part of operation, and may sometimes deliver
40459 - packets more than once or in the wrong order.
40461 - Designing a program to use unreliable communication styles usually
40462 - involves taking precautions to detect lost or misordered packets
40463 - and to retransmit data as needed.
40465 - * *Is communication entirely with one partner?* Some communication
40466 - styles are like a telephone call--you make a "connection" with one
40467 - remote socket and then exchange data freely. Other styles are
40468 - like mailing letters--you specify a destination address for each
40469 - message you send.
40471 - You must also choose a "namespace" for naming the socket. A socket
40472 -name ("address") is meaningful only in the context of a particular
40473 -namespace. In fact, even the data type to use for a socket name may
40474 -depend on the namespace. Namespaces are also called "domains", but we
40475 -avoid that word as it can be confused with other usage of the same
40476 -term. Each namespace has a symbolic name that starts with `PF_'. A
40477 -corresponding symbolic name starting with `AF_' designates the address
40478 -format for that namespace.
40480 - Finally you must choose the "protocol" to carry out the
40481 -communication. The protocol determines what low-level mechanism is used
40482 -to transmit and receive data. Each protocol is valid for a particular
40483 -namespace and communication style; a namespace is sometimes called a
40484 -"protocol family" because of this, which is why the namespace names
40485 -start with `PF_'.
40487 - The rules of a protocol apply to the data passing between two
40488 -programs, perhaps on different computers; most of these rules are
40489 -handled by the operating system and you need not know about them. What
40490 -you do need to know about protocols is this:
40492 - * In order to have communication between two sockets, they must
40493 - specify the _same_ protocol.
40495 - * Each protocol is meaningful with particular style/namespace
40496 - combinations and cannot be used with inappropriate combinations.
40497 - For example, the TCP protocol fits only the byte stream style of
40498 - communication and the Internet namespace.
40500 - * For each combination of style and namespace there is a "default
40501 - protocol", which you can request by specifying 0 as the protocol
40502 - number. And that's what you should normally do--use the default.
40504 - Throughout the following description at various places
40505 -variables/parameters to denote sizes are required. And here the trouble
40506 -starts. In the first implementations the type of these variables was
40507 -simply `int'. On most machines at that time an `int' was 32 bits wide,
40508 -which created a _de facto_ standard requiring 32-bit variables. This
40509 -is important since references to variables of this type are passed to
40510 -the kernel.
40512 - Then the POSIX people came and unified the interface with the words
40513 -"all size values are of type `size_t'". On 64-bit machines `size_t' is
40514 -64 bits wide, so pointers to variables were no longer possible.
40516 - The Unix98 specification provides a solution by introducing a type
40517 -`socklen_t'. This type is used in all of the cases that POSIX changed
40518 -to use `size_t'. The only requirement of this type is that it be an
40519 -unsigned type of at least 32 bits. Therefore, implementations which
40520 -require that references to 32-bit variables be passed can be as happy
40521 -as implementations which use 64-bit values.
40523 -\x1f
40524 -File: libc.info, Node: Communication Styles, Next: Socket Addresses, Prev: Socket Concepts, Up: Sockets
40526 -Communication Styles
40527 -====================
40529 - The GNU library includes support for several different kinds of
40530 -sockets, each with different characteristics. This section describes
40531 -the supported socket types. The symbolic constants listed here are
40532 -defined in `sys/socket.h'.
40534 - - Macro: int SOCK_STREAM
40535 - The `SOCK_STREAM' style is like a pipe (*note Pipes and FIFOs::).
40536 - It operates over a connection with a particular remote socket and
40537 - transmits data reliably as a stream of bytes.
40539 - Use of this style is covered in detail in *Note Connections::.
40541 - - Macro: int SOCK_DGRAM
40542 - The `SOCK_DGRAM' style is used for sending individually-addressed
40543 - packets unreliably. It is the diametrical opposite of
40544 - `SOCK_STREAM'.
40546 - Each time you write data to a socket of this kind, that data
40547 - becomes one packet. Since `SOCK_DGRAM' sockets do not have
40548 - connections, you must specify the recipient address with each
40549 - packet.
40551 - The only guarantee that the system makes about your requests to
40552 - transmit data is that it will try its best to deliver each packet
40553 - you send. It may succeed with the sixth packet after failing with
40554 - the fourth and fifth packets; the seventh packet may arrive before
40555 - the sixth, and may arrive a second time after the sixth.
40557 - The typical use for `SOCK_DGRAM' is in situations where it is
40558 - acceptable to simply re-send a packet if no response is seen in a
40559 - reasonable amount of time.
40561 - *Note Datagrams::, for detailed information about how to use
40562 - datagram sockets.
40564 - - Macro: int SOCK_RAW
40565 - This style provides access to low-level network protocols and
40566 - interfaces. Ordinary user programs usually have no need to use
40567 - this style.
40569 -\x1f
40570 -File: libc.info, Node: Socket Addresses, Next: Interface Naming, Prev: Communication Styles, Up: Sockets
40572 -Socket Addresses
40573 -================
40575 - The name of a socket is normally called an "address". The functions
40576 -and symbols for dealing with socket addresses were named
40577 -inconsistently, sometimes using the term "name" and sometimes using
40578 -"address". You can regard these terms as synonymous where sockets are
40579 -concerned.
40581 - A socket newly created with the `socket' function has no address.
40582 -Other processes can find it for communication only if you give it an
40583 -address. We call this "binding" the address to the socket, and the way
40584 -to do it is with the `bind' function.
40586 - You need be concerned with the address of a socket if other processes
40587 -are to find it and start communicating with it. You can specify an
40588 -address for other sockets, but this is usually pointless; the first time
40589 -you send data from a socket, or use it to initiate a connection, the
40590 -system assigns an address automatically if you have not specified one.
40592 - Occasionally a client needs to specify an address because the server
40593 -discriminates based on address; for example, the rsh and rlogin
40594 -protocols look at the client's socket address and only bypass password
40595 -checking if it is less than `IPPORT_RESERVED' (*note Ports::).
40597 - The details of socket addresses vary depending on what namespace you
40598 -are using. *Note Local Namespace::, or *Note Internet Namespace::, for
40599 -specific information.
40601 - Regardless of the namespace, you use the same functions `bind' and
40602 -`getsockname' to set and examine a socket's address. These functions
40603 -use a phony data type, `struct sockaddr *', to accept the address. In
40604 -practice, the address lives in a structure of some other data type
40605 -appropriate to the address format you are using, but you cast its
40606 -address to `struct sockaddr *' when you pass it to `bind'.
40608 -* Menu:
40610 -* Address Formats:: About `struct sockaddr'.
40611 -* Setting Address:: Binding an address to a socket.
40612 -* Reading Address:: Reading the address of a socket.
40614 -\x1f
40615 -File: libc.info, Node: Address Formats, Next: Setting Address, Up: Socket Addresses
40617 -Address Formats
40618 ----------------
40620 - The functions `bind' and `getsockname' use the generic data type
40621 -`struct sockaddr *' to represent a pointer to a socket address. You
40622 -can't use this data type effectively to interpret an address or
40623 -construct one; for that, you must use the proper data type for the
40624 -socket's namespace.
40626 - Thus, the usual practice is to construct an address of the proper
40627 -namespace-specific type, then cast a pointer to `struct sockaddr *'
40628 -when you call `bind' or `getsockname'.
40630 - The one piece of information that you can get from the `struct
40631 -sockaddr' data type is the "address format designator". This tells you
40632 -which data type to use to understand the address fully.
40634 - The symbols in this section are defined in the header file
40635 -`sys/socket.h'.
40637 - - Data Type: struct sockaddr
40638 - The `struct sockaddr' type itself has the following members:
40640 - `short int sa_family'
40641 - This is the code for the address format of this address. It
40642 - identifies the format of the data which follows.
40644 - `char sa_data[14]'
40645 - This is the actual socket address data, which is
40646 - format-dependent. Its length also depends on the format, and
40647 - may well be more than 14. The length 14 of `sa_data' is
40648 - essentially arbitrary.
40650 - Each address format has a symbolic name which starts with `AF_'.
40651 -Each of them corresponds to a `PF_' symbol which designates the
40652 -corresponding namespace. Here is a list of address format names:
40654 -`AF_LOCAL'
40655 - This designates the address format that goes with the local
40656 - namespace. (`PF_LOCAL' is the name of that namespace.) *Note
40657 - Local Namespace Details::, for information about this address
40658 - format.
40660 -`AF_UNIX'
40661 - This is a synonym for `AF_LOCAL'. Although `AF_LOCAL' is mandated
40662 - by POSIX.1g, `AF_UNIX' is portable to more systems. `AF_UNIX' was
40663 - the traditional name stemming from BSD, so even most POSIX systems
40664 - support it. It is also the name of choice in the Unix98
40665 - specification. (The same is true for `PF_UNIX' vs. `PF_LOCAL').
40667 -`AF_FILE'
40668 - This is another synonym for `AF_LOCAL', for compatibility.
40669 - (`PF_FILE' is likewise a synonym for `PF_LOCAL'.)
40671 -`AF_INET'
40672 - This designates the address format that goes with the Internet
40673 - namespace. (`PF_INET' is the name of that namespace.) *Note
40674 - Internet Address Formats::.
40676 -`AF_INET6'
40677 - This is similar to `AF_INET', but refers to the IPv6 protocol.
40678 - (`PF_INET6' is the name of the corresponding namespace.)
40680 -`AF_UNSPEC'
40681 - This designates no particular address format. It is used only in
40682 - rare cases, such as to clear out the default destination address
40683 - of a "connected" datagram socket. *Note Sending Datagrams::.
40685 - The corresponding namespace designator symbol `PF_UNSPEC' exists
40686 - for completeness, but there is no reason to use it in a program.
40688 - `sys/socket.h' defines symbols starting with `AF_' for many
40689 -different kinds of networks, most or all of which are not actually
40690 -implemented. We will document those that really work as we receive
40691 -information about how to use them.
40693 -\x1f
40694 -File: libc.info, Node: Setting Address, Next: Reading Address, Prev: Address Formats, Up: Socket Addresses
40696 -Setting the Address of a Socket
40697 --------------------------------
40699 - Use the `bind' function to assign an address to a socket. The
40700 -prototype for `bind' is in the header file `sys/socket.h'. For
40701 -examples of use, see *Note Local Socket Example::, or see *Note Inet
40702 -Example::.
40704 - - Function: int bind (int SOCKET, struct sockaddr *ADDR, socklen_t
40705 - LENGTH)
40706 - The `bind' function assigns an address to the socket SOCKET. The
40707 - ADDR and LENGTH arguments specify the address; the detailed format
40708 - of the address depends on the namespace. The first part of the
40709 - address is always the format designator, which specifies a
40710 - namespace, and says that the address is in the format of that
40711 - namespace.
40713 - The return value is `0' on success and `-1' on failure. The
40714 - following `errno' error conditions are defined for this function:
40716 - `EBADF'
40717 - The SOCKET argument is not a valid file descriptor.
40719 - `ENOTSOCK'
40720 - The descriptor SOCKET is not a socket.
40722 - `EADDRNOTAVAIL'
40723 - The specified address is not available on this machine.
40725 - `EADDRINUSE'
40726 - Some other socket is already using the specified address.
40728 - `EINVAL'
40729 - The socket SOCKET already has an address.
40731 - `EACCES'
40732 - You do not have permission to access the requested address.
40733 - (In the Internet domain, only the super-user is allowed to
40734 - specify a port number in the range 0 through
40735 - `IPPORT_RESERVED' minus one; see *Note Ports::.)
40737 - Additional conditions may be possible depending on the particular
40738 - namespace of the socket.
40740 diff -u -udbrN glibc-2.3.2/manual/libc.info-27 glibc-2.3.2-200304020432/manual/libc.info-27
40741 --- glibc-2.3.2/manual/libc.info-27 Sat Mar 1 02:39:41 2003
40742 +++ glibc-2.3.2-200304020432/manual/libc.info-27 Thu Jan 1 01:00:00 1970
40743 @@ -1,1225 +0,0 @@
40744 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
40746 -INFO-DIR-SECTION GNU libraries
40747 -START-INFO-DIR-ENTRY
40748 -* Libc: (libc). C library.
40749 -END-INFO-DIR-ENTRY
40751 - This file documents the GNU C library.
40753 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
40754 -Reference Manual', for Version 2.3.x.
40756 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
40757 -Free Software Foundation, Inc.
40759 - Permission is granted to copy, distribute and/or modify this document
40760 -under the terms of the GNU Free Documentation License, Version 1.1 or
40761 -any later version published by the Free Software Foundation; with the
40762 -Invariant Sections being "Free Software Needs Free Documentation" and
40763 -"GNU Lesser General Public License", the Front-Cover texts being (a)
40764 -(see below), and with the Back-Cover Texts being (b) (see below). A
40765 -copy of the license is included in the section entitled "GNU Free
40766 -Documentation License".
40768 - (a) The FSF's Front-Cover Text is:
40770 - A GNU Manual
40772 - (b) The FSF's Back-Cover Text is:
40774 - You have freedom to copy and modify this GNU Manual, like GNU
40775 -software. Copies published by the Free Software Foundation raise
40776 -funds for GNU development.
40778 -\x1f
40779 -File: libc.info, Node: Reading Address, Prev: Setting Address, Up: Socket Addresses
40781 -Reading the Address of a Socket
40782 --------------------------------
40784 - Use the function `getsockname' to examine the address of an Internet
40785 -socket. The prototype for this function is in the header file
40786 -`sys/socket.h'.
40788 - - Function: int getsockname (int SOCKET, struct sockaddr *ADDR,
40789 - socklen_t *LENGTH-PTR)
40790 - The `getsockname' function returns information about the address
40791 - of the socket SOCKET in the locations specified by the ADDR and
40792 - LENGTH-PTR arguments. Note that the LENGTH-PTR is a pointer; you
40793 - should initialize it to be the allocation size of ADDR, and on
40794 - return it contains the actual size of the address data.
40796 - The format of the address data depends on the socket namespace.
40797 - The length of the information is usually fixed for a given
40798 - namespace, so normally you can know exactly how much space is
40799 - needed and can provide that much. The usual practice is to
40800 - allocate a place for the value using the proper data type for the
40801 - socket's namespace, then cast its address to `struct sockaddr *'
40802 - to pass it to `getsockname'.
40804 - The return value is `0' on success and `-1' on error. The
40805 - following `errno' error conditions are defined for this function:
40807 - `EBADF'
40808 - The SOCKET argument is not a valid file descriptor.
40810 - `ENOTSOCK'
40811 - The descriptor SOCKET is not a socket.
40813 - `ENOBUFS'
40814 - There are not enough internal buffers available for the
40815 - operation.
40817 - You can't read the address of a socket in the file namespace. This
40818 -is consistent with the rest of the system; in general, there's no way to
40819 -find a file's name from a descriptor for that file.
40821 -\x1f
40822 -File: libc.info, Node: Interface Naming, Next: Local Namespace, Prev: Socket Addresses, Up: Sockets
40824 -Interface Naming
40825 -================
40827 - Each network interface has a name. This usually consists of a few
40828 -letters that relate to the type of interface, which may be followed by a
40829 -number if there is more than one interface of that type. Examples
40830 -might be `lo' (the loopback interface) and `eth0' (the first Ethernet
40831 -interface).
40833 - Although such names are convenient for humans, it would be clumsy to
40834 -have to use them whenever a program needs to refer to an interface. In
40835 -such situations an interface is referred to by its "index", which is an
40836 -arbitrarily-assigned small positive integer.
40838 - The following functions, constants and data types are declared in the
40839 -header file `net/if.h'.
40841 - - Constant: size_t IFNAMSIZ
40842 - This constant defines the maximum buffer size needed to hold an
40843 - interface name, including its terminating zero byte.
40845 - - Function: unsigned int if_nametoindex (const char *ifname)
40846 - This function yields the interface index corresponding to a
40847 - particular name. If no interface exists with the name given, it
40848 - returns 0.
40850 - - Function: char * if_indextoname (unsigned int ifindex, char *ifname)
40851 - This function maps an interface index to its corresponding name.
40852 - The returned name is placed in the buffer pointed to by `ifname',
40853 - which must be at least `IFNAMSIZ' bytes in length. If the index
40854 - was invalid, the function's return value is a null pointer,
40855 - otherwise it is `ifname'.
40857 - - Data Type: struct if_nameindex
40858 - This data type is used to hold the information about a single
40859 - interface. It has the following members:
40861 - `unsigned int if_index;'
40862 - This is the interface index.
40864 - `char *if_name'
40865 - This is the null-terminated index name.
40868 - - Function: struct if_nameindex * if_nameindex (void)
40869 - This function returns an array of `if_nameindex' structures, one
40870 - for every interface that is present. The end of the list is
40871 - indicated by a structure with an interface of 0 and a null name
40872 - pointer. If an error occurs, this function returns a null pointer.
40874 - The returned structure must be freed with `if_freenameindex' after
40875 - use.
40877 - - Function: void if_freenameindex (struct if_nameindex *ptr)
40878 - This function frees the structure returned by an earlier call to
40879 - `if_nameindex'.
40881 -\x1f
40882 -File: libc.info, Node: Local Namespace, Next: Internet Namespace, Prev: Interface Naming, Up: Sockets
40884 -The Local Namespace
40885 -===================
40887 - This section describes the details of the local namespace, whose
40888 -symbolic name (required when you create a socket) is `PF_LOCAL'. The
40889 -local namespace is also known as "Unix domain sockets". Another name
40890 -is file namespace since socket addresses are normally implemented as
40891 -file names.
40893 -* Menu:
40895 -* Concepts: Local Namespace Concepts. What you need to understand.
40896 -* Details: Local Namespace Details. Address format, symbolic names, etc.
40897 -* Example: Local Socket Example. Example of creating a socket.
40899 -\x1f
40900 -File: libc.info, Node: Local Namespace Concepts, Next: Local Namespace Details, Up: Local Namespace
40902 -Local Namespace Concepts
40903 -------------------------
40905 - In the local namespace socket addresses are file names. You can
40906 -specify any file name you want as the address of the socket, but you
40907 -must have write permission on the directory containing it. It's common
40908 -to put these files in the `/tmp' directory.
40910 - One peculiarity of the local namespace is that the name is only used
40911 -when opening the connection; once open the address is not meaningful and
40912 -may not exist.
40914 - Another peculiarity is that you cannot connect to such a socket from
40915 -another machine-not even if the other machine shares the file system
40916 -which contains the name of the socket. You can see the socket in a
40917 -directory listing, but connecting to it never succeeds. Some programs
40918 -take advantage of this, such as by asking the client to send its own
40919 -process ID, and using the process IDs to distinguish between clients.
40920 -However, we recommend you not use this method in protocols you design,
40921 -as we might someday permit connections from other machines that mount
40922 -the same file systems. Instead, send each new client an identifying
40923 -number if you want it to have one.
40925 - After you close a socket in the local namespace, you should delete
40926 -the file name from the file system. Use `unlink' or `remove' to do
40927 -this; see *Note Deleting Files::.
40929 - The local namespace supports just one protocol for any communication
40930 -style; it is protocol number `0'.
40932 -\x1f
40933 -File: libc.info, Node: Local Namespace Details, Next: Local Socket Example, Prev: Local Namespace Concepts, Up: Local Namespace
40935 -Details of Local Namespace
40936 ---------------------------
40938 - To create a socket in the local namespace, use the constant
40939 -`PF_LOCAL' as the NAMESPACE argument to `socket' or `socketpair'. This
40940 -constant is defined in `sys/socket.h'.
40942 - - Macro: int PF_LOCAL
40943 - This designates the local namespace, in which socket addresses are
40944 - local names, and its associated family of protocols. `PF_Local'
40945 - is the macro used by Posix.1g.
40947 - - Macro: int PF_UNIX
40948 - This is a synonym for `PF_LOCAL', for compatibility's sake.
40950 - - Macro: int PF_FILE
40951 - This is a synonym for `PF_LOCAL', for compatibility's sake.
40953 - The structure for specifying socket names in the local namespace is
40954 -defined in the header file `sys/un.h':
40956 - - Data Type: struct sockaddr_un
40957 - This structure is used to specify local namespace socket
40958 - addresses. It has the following members:
40960 - `short int sun_family'
40961 - This identifies the address family or format of the socket
40962 - address. You should store the value `AF_LOCAL' to designate
40963 - the local namespace. *Note Socket Addresses::.
40965 - `char sun_path[108]'
40966 - This is the file name to use.
40968 - *Incomplete:* Why is 108 a magic number? RMS suggests making
40969 - this a zero-length array and tweaking the following example
40970 - to use `alloca' to allocate an appropriate amount of storage
40971 - based on the length of the filename.
40973 - You should compute the LENGTH parameter for a socket address in the
40974 -local namespace as the sum of the size of the `sun_family' component
40975 -and the string length (_not_ the allocation size!) of the file name
40976 -string. This can be done using the macro `SUN_LEN':
40978 - - Macro: int SUN_LEN (_struct sockaddr_un *_ PTR)
40979 - The macro computes the length of socket address in the local
40980 - namespace.
40982 -\x1f
40983 -File: libc.info, Node: Local Socket Example, Prev: Local Namespace Details, Up: Local Namespace
40985 -Example of Local-Namespace Sockets
40986 -----------------------------------
40988 - Here is an example showing how to create and name a socket in the
40989 -local namespace.
40991 - #include <stddef.h>
40992 - #include <stdio.h>
40993 - #include <errno.h>
40994 - #include <stdlib.h>
40995 - #include <string.h>
40996 - #include <sys/socket.h>
40997 - #include <sys/un.h>
40999 - int
41000 - make_named_socket (const char *filename)
41002 - struct sockaddr_un name;
41003 - int sock;
41004 - size_t size;
41006 - /* Create the socket. */
41007 - sock = socket (PF_LOCAL, SOCK_DGRAM, 0);
41008 - if (sock < 0)
41010 - perror ("socket");
41011 - exit (EXIT_FAILURE);
41014 - /* Bind a name to the socket. */
41015 - name.sun_family = AF_LOCAL;
41016 - strncpy (name.sun_path, filename, sizeof (name.sun_path));
41017 - name.sun_path[sizeof (name.sun_path) - 1] = '\0';
41019 - /* The size of the address is
41020 - the offset of the start of the filename,
41021 - plus its length,
41022 - plus one for the terminating null byte.
41023 - Alternatively you can just do:
41024 - size = SUN_LEN (&name);
41025 - */
41026 - size = (offsetof (struct sockaddr_un, sun_path)
41027 - + strlen (name.sun_path) + 1);
41029 - if (bind (sock, (struct sockaddr *) &name, size) < 0)
41031 - perror ("bind");
41032 - exit (EXIT_FAILURE);
41035 - return sock;
41038 -\x1f
41039 -File: libc.info, Node: Internet Namespace, Next: Misc Namespaces, Prev: Local Namespace, Up: Sockets
41041 -The Internet Namespace
41042 -======================
41044 - This section describes the details of the protocols and socket naming
41045 -conventions used in the Internet namespace.
41047 - Originally the Internet namespace used only IP version 4 (IPv4).
41048 -With the growing number of hosts on the Internet, a new protocol with a
41049 -larger address space was necessary: IP version 6 (IPv6). IPv6
41050 -introduces 128-bit addresses (IPv4 has 32-bit addresses) and other
41051 -features, and will eventually replace IPv4.
41053 - To create a socket in the IPv4 Internet namespace, use the symbolic
41054 -name `PF_INET' of this namespace as the NAMESPACE argument to `socket'
41055 -or `socketpair'. For IPv6 addresses you need the macro `PF_INET6'.
41056 -These macros are defined in `sys/socket.h'.
41058 - - Macro: int PF_INET
41059 - This designates the IPv4 Internet namespace and associated family
41060 - of protocols.
41062 - - Macro: int PF_INET6
41063 - This designates the IPv6 Internet namespace and associated family
41064 - of protocols.
41066 - A socket address for the Internet namespace includes the following
41067 -components:
41069 - * The address of the machine you want to connect to. Internet
41070 - addresses can be specified in several ways; these are discussed in
41071 - *Note Internet Address Formats::, *Note Host Addresses:: and *Note
41072 - Host Names::.
41074 - * A port number for that machine. *Note Ports::.
41076 - You must ensure that the address and port number are represented in a
41077 -canonical format called "network byte order". *Note Byte Order::, for
41078 -information about this.
41080 -* Menu:
41082 -* Internet Address Formats:: How socket addresses are specified in the
41083 - Internet namespace.
41084 -* Host Addresses:: All about host addresses of Internet host.
41085 -* Protocols Database:: Referring to protocols by name.
41086 -* Ports:: Internet port numbers.
41087 -* Services Database:: Ports may have symbolic names.
41088 -* Byte Order:: Different hosts may use different byte
41089 - ordering conventions; you need to
41090 - canonicalize host address and port number.
41091 -* Inet Example:: Putting it all together.
41093 -\x1f
41094 -File: libc.info, Node: Internet Address Formats, Next: Host Addresses, Up: Internet Namespace
41096 -Internet Socket Address Formats
41097 --------------------------------
41099 - In the Internet namespace, for both IPv4 (`AF_INET') and IPv6
41100 -(`AF_INET6'), a socket address consists of a host address and a port on
41101 -that host. In addition, the protocol you choose serves effectively as
41102 -a part of the address because local port numbers are meaningful only
41103 -within a particular protocol.
41105 - The data types for representing socket addresses in the Internet
41106 -namespace are defined in the header file `netinet/in.h'.
41108 - - Data Type: struct sockaddr_in
41109 - This is the data type used to represent socket addresses in the
41110 - Internet namespace. It has the following members:
41112 - `sa_family_t sin_family'
41113 - This identifies the address family or format of the socket
41114 - address. You should store the value `AF_INET' in this member.
41115 - *Note Socket Addresses::.
41117 - `struct in_addr sin_addr'
41118 - This is the Internet address of the host machine. *Note Host
41119 - Addresses::, and *Note Host Names::, for how to get a value
41120 - to store here.
41122 - `unsigned short int sin_port'
41123 - This is the port number. *Note Ports::.
41125 - When you call `bind' or `getsockname', you should specify `sizeof
41126 -(struct sockaddr_in)' as the LENGTH parameter if you are using an IPv4
41127 -Internet namespace socket address.
41129 - - Data Type: struct sockaddr_in6
41130 - This is the data type used to represent socket addresses in the
41131 - IPv6 namespace. It has the following members:
41133 - `sa_family_t sin6_family'
41134 - This identifies the address family or format of the socket
41135 - address. You should store the value of `AF_INET6' in this
41136 - member. *Note Socket Addresses::.
41138 - `struct in6_addr sin6_addr'
41139 - This is the IPv6 address of the host machine. *Note Host
41140 - Addresses::, and *Note Host Names::, for how to get a value
41141 - to store here.
41143 - `uint32_t sin6_flowinfo'
41144 - This is a currently unimplemented field.
41146 - `uint16_t sin6_port'
41147 - This is the port number. *Note Ports::.
41150 -\x1f
41151 -File: libc.info, Node: Host Addresses, Next: Protocols Database, Prev: Internet Address Formats, Up: Internet Namespace
41153 -Host Addresses
41154 ---------------
41156 - Each computer on the Internet has one or more "Internet addresses",
41157 -numbers which identify that computer among all those on the Internet.
41158 -Users typically write IPv4 numeric host addresses as sequences of four
41159 -numbers, separated by periods, as in `128.52.46.32', and IPv6 numeric
41160 -host addresses as sequences of up to eight numbers separated by colons,
41161 -as in `5f03:1200:836f:c100::1'.
41163 - Each computer also has one or more "host names", which are strings
41164 -of words separated by periods, as in `mescaline.gnu.org'.
41166 - Programs that let the user specify a host typically accept both
41167 -numeric addresses and host names. To open a connection a program needs
41168 -a numeric address, and so must convert a host name to the numeric
41169 -address it stands for.
41171 -* Menu:
41173 -* Abstract Host Addresses:: What a host number consists of.
41174 -* Data type: Host Address Data Type. Data type for a host number.
41175 -* Functions: Host Address Functions. Functions to operate on them.
41176 -* Names: Host Names. Translating host names to host numbers.
41178 -\x1f
41179 -File: libc.info, Node: Abstract Host Addresses, Next: Host Address Data Type, Up: Host Addresses
41181 -Internet Host Addresses
41182 -.......................
41184 - Each computer on the Internet has one or more Internet addresses,
41185 -numbers which identify that computer among all those on the Internet.
41187 - An IPv4 Internet host address is a number containing four bytes of
41188 -data. Historically these are divided into two parts, a "network
41189 -number" and a "local network address number" within that network. In
41190 -the mid-1990s classless addresses were introduced which changed this
41191 -behavior. Since some functions implicitly expect the old definitions,
41192 -we first describe the class-based network and will then describe
41193 -classless addresses. IPv6 uses only classless addresses and therefore
41194 -the following paragraphs don't apply.
41196 - The class-based IPv4 network number consists of the first one, two or
41197 -three bytes; the rest of the bytes are the local address.
41199 - IPv4 network numbers are registered with the Network Information
41200 -Center (NIC), and are divided into three classes--A, B and C. The local
41201 -network address numbers of individual machines are registered with the
41202 -administrator of the particular network.
41204 - Class A networks have single-byte numbers in the range 0 to 127.
41205 -There are only a small number of Class A networks, but they can each
41206 -support a very large number of hosts. Medium-sized Class B networks
41207 -have two-byte network numbers, with the first byte in the range 128 to
41208 -191. Class C networks are the smallest; they have three-byte network
41209 -numbers, with the first byte in the range 192-255. Thus, the first 1,
41210 -2, or 3 bytes of an Internet address specify a network. The remaining
41211 -bytes of the Internet address specify the address within that network.
41213 - The Class A network 0 is reserved for broadcast to all networks. In
41214 -addition, the host number 0 within each network is reserved for
41215 -broadcast to all hosts in that network. These uses are obsolete now
41216 -but for compatibility reasons you shouldn't use network 0 and host
41217 -number 0.
41219 - The Class A network 127 is reserved for loopback; you can always use
41220 -the Internet address `127.0.0.1' to refer to the host machine.
41222 - Since a single machine can be a member of multiple networks, it can
41223 -have multiple Internet host addresses. However, there is never
41224 -supposed to be more than one machine with the same host address.
41226 - There are four forms of the "standard numbers-and-dots notation" for
41227 -Internet addresses:
41229 -`A.B.C.D'
41230 - This specifies all four bytes of the address individually and is
41231 - the commonly used representation.
41233 -`A.B.C'
41234 - The last part of the address, C, is interpreted as a 2-byte
41235 - quantity. This is useful for specifying host addresses in a Class
41236 - B network with network address number `A.B'.
41238 -`A.B'
41239 - The last part of the address, B, is interpreted as a 3-byte
41240 - quantity. This is useful for specifying host addresses in a Class
41241 - A network with network address number A.
41243 -`A'
41244 - If only one part is given, this corresponds directly to the host
41245 - address number.
41247 - Within each part of the address, the usual C conventions for
41248 -specifying the radix apply. In other words, a leading `0x' or `0X'
41249 -implies hexadecimal radix; a leading `0' implies octal; and otherwise
41250 -decimal radix is assumed.
41252 -Classless Addresses
41253 -...................
41255 - IPv4 addresses (and IPv6 addresses also) are now considered
41256 -classless; the distinction between classes A, B and C can be ignored.
41257 -Instead an IPv4 host address consists of a 32-bit address and a 32-bit
41258 -mask. The mask contains set bits for the network part and cleared bits
41259 -for the host part. The network part is contiguous from the left, with
41260 -the remaining bits representing the host. As a consequence, the
41261 -netmask can simply be specified as the number of set bits. Classes A,
41262 -B and C are just special cases of this general rule. For example,
41263 -class A addresses have a netmask of `255.0.0.0' or a prefix length of 8.
41265 - Classless IPv4 network addresses are written in numbers-and-dots
41266 -notation with the prefix length appended and a slash as separator. For
41267 -example the class A network 10 is written as `10.0.0.0/8'.
41269 -IPv6 Addresses
41270 -..............
41272 - IPv6 addresses contain 128 bits (IPv4 has 32 bits) of data. A host
41273 -address is usually written as eight 16-bit hexadecimal numbers that are
41274 -separated by colons. Two colons are used to abbreviate strings of
41275 -consecutive zeros. For example, the IPv6 loopback address
41276 -`0:0:0:0:0:0:0:1' can just be written as `::1'.
41278 -\x1f
41279 -File: libc.info, Node: Host Address Data Type, Next: Host Address Functions, Prev: Abstract Host Addresses, Up: Host Addresses
41281 -Host Address Data Type
41282 -......................
41284 - IPv4 Internet host addresses are represented in some contexts as
41285 -integers (type `uint32_t'). In other contexts, the integer is packaged
41286 -inside a structure of type `struct in_addr'. It would be better if the
41287 -usage were made consistent, but it is not hard to extract the integer
41288 -from the structure or put the integer into a structure.
41290 - You will find older code that uses `unsigned long int' for IPv4
41291 -Internet host addresses instead of `uint32_t' or `struct in_addr'.
41292 -Historically `unsigned long int' was a 32-bit number but with 64-bit
41293 -machines this has changed. Using `unsigned long int' might break the
41294 -code if it is used on machines where this type doesn't have 32 bits.
41295 -`uint32_t' is specified by Unix98 and guaranteed to have 32 bits.
41297 - IPv6 Internet host addresses have 128 bits and are packaged inside a
41298 -structure of type `struct in6_addr'.
41300 - The following basic definitions for Internet addresses are declared
41301 -in the header file `netinet/in.h':
41303 - - Data Type: struct in_addr
41304 - This data type is used in certain contexts to contain an IPv4
41305 - Internet host address. It has just one field, named `s_addr',
41306 - which records the host address number as an `uint32_t'.
41308 - - Macro: uint32_t INADDR_LOOPBACK
41309 - You can use this constant to stand for "the address of this
41310 - machine," instead of finding its actual address. It is the IPv4
41311 - Internet address `127.0.0.1', which is usually called `localhost'.
41312 - This special constant saves you the trouble of looking up the
41313 - address of your own machine. Also, the system usually implements
41314 - `INADDR_LOOPBACK' specially, avoiding any network traffic for the
41315 - case of one machine talking to itself.
41317 - - Macro: uint32_t INADDR_ANY
41318 - You can use this constant to stand for "any incoming address" when
41319 - binding to an address. *Note Setting Address::. This is the usual
41320 - address to give in the `sin_addr' member of `struct sockaddr_in'
41321 - when you want to accept Internet connections.
41323 - - Macro: uint32_t INADDR_BROADCAST
41324 - This constant is the address you use to send a broadcast message.
41326 - - Macro: uint32_t INADDR_NONE
41327 - This constant is returned by some functions to indicate an error.
41329 - - Data Type: struct in6_addr
41330 - This data type is used to store an IPv6 address. It stores 128
41331 - bits of data, which can be accessed (via a union) in a variety of
41332 - ways.
41334 - - Constant: struct in6_addr in6addr_loopback
41335 - This constant is the IPv6 address `::1', the loopback address. See
41336 - above for a description of what this means. The macro
41337 - `IN6ADDR_LOOPBACK_INIT' is provided to allow you to initialize your
41338 - own variables to this value.
41340 - - Constant: struct in6_addr in6addr_any
41341 - This constant is the IPv6 address `::', the unspecified address.
41342 - See above for a description of what this means. The macro
41343 - `IN6ADDR_ANY_INIT' is provided to allow you to initialize your own
41344 - variables to this value.
41346 -\x1f
41347 -File: libc.info, Node: Host Address Functions, Next: Host Names, Prev: Host Address Data Type, Up: Host Addresses
41349 -Host Address Functions
41350 -......................
41352 -These additional functions for manipulating Internet addresses are
41353 -declared in the header file `arpa/inet.h'. They represent Internet
41354 -addresses in network byte order, and network numbers and
41355 -local-address-within-network numbers in host byte order. *Note Byte
41356 -Order::, for an explanation of network and host byte order.
41358 - - Function: int inet_aton (const char *NAME, struct in_addr *ADDR)
41359 - This function converts the IPv4 Internet host address NAME from
41360 - the standard numbers-and-dots notation into binary data and stores
41361 - it in the `struct in_addr' that ADDR points to. `inet_aton'
41362 - returns nonzero if the address is valid, zero if not.
41364 - - Function: uint32_t inet_addr (const char *NAME)
41365 - This function converts the IPv4 Internet host address NAME from the
41366 - standard numbers-and-dots notation into binary data. If the input
41367 - is not valid, `inet_addr' returns `INADDR_NONE'. This is an
41368 - obsolete interface to `inet_aton', described immediately above. It
41369 - is obsolete because `INADDR_NONE' is a valid address
41370 - (255.255.255.255), and `inet_aton' provides a cleaner way to
41371 - indicate error return.
41373 - - Function: uint32_t inet_network (const char *NAME)
41374 - This function extracts the network number from the address NAME,
41375 - given in the standard numbers-and-dots notation. The returned
41376 - address is in host order. If the input is not valid,
41377 - `inet_network' returns `-1'.
41379 - The function works only with traditional IPv4 class A, B and C
41380 - network types. It doesn't work with classless addresses and
41381 - shouldn't be used anymore.
41383 - - Function: char * inet_ntoa (struct in_addr ADDR)
41384 - This function converts the IPv4 Internet host address ADDR to a
41385 - string in the standard numbers-and-dots notation. The return
41386 - value is a pointer into a statically-allocated buffer. Subsequent
41387 - calls will overwrite the same buffer, so you should copy the
41388 - string if you need to save it.
41390 - In multi-threaded programs each thread has an own
41391 - statically-allocated buffer. But still subsequent calls of
41392 - `inet_ntoa' in the same thread will overwrite the result of the
41393 - last call.
41395 - Instead of `inet_ntoa' the newer function `inet_ntop' which is
41396 - described below should be used since it handles both IPv4 and IPv6
41397 - addresses.
41399 - - Function: struct in_addr inet_makeaddr (uint32_t NET, uint32_t LOCAL)
41400 - This function makes an IPv4 Internet host address by combining the
41401 - network number NET with the local-address-within-network number
41402 - LOCAL.
41404 - - Function: uint32_t inet_lnaof (struct in_addr ADDR)
41405 - This function returns the local-address-within-network part of the
41406 - Internet host address ADDR.
41408 - The function works only with traditional IPv4 class A, B and C
41409 - network types. It doesn't work with classless addresses and
41410 - shouldn't be used anymore.
41412 - - Function: uint32_t inet_netof (struct in_addr ADDR)
41413 - This function returns the network number part of the Internet host
41414 - address ADDR.
41416 - The function works only with traditional IPv4 class A, B and C
41417 - network types. It doesn't work with classless addresses and
41418 - shouldn't be used anymore.
41420 - - Function: int inet_pton (int AF, const char *CP, void *BUF)
41421 - This function converts an Internet address (either IPv4 or IPv6)
41422 - from presentation (textual) to network (binary) format. AF should
41423 - be either `AF_INET' or `AF_INET6', as appropriate for the type of
41424 - address being converted. CP is a pointer to the input string, and
41425 - BUF is a pointer to a buffer for the result. It is the caller's
41426 - responsibility to make sure the buffer is large enough.
41428 - - Function: const char * inet_ntop (int AF, const void *CP, char *BUF,
41429 - size_t LEN)
41430 - This function converts an Internet address (either IPv4 or IPv6)
41431 - from network (binary) to presentation (textual) form. AF should be
41432 - either `AF_INET' or `AF_INET6', as appropriate. CP is a pointer
41433 - to the address to be converted. BUF should be a pointer to a
41434 - buffer to hold the result, and LEN is the length of this buffer.
41435 - The return value from the function will be this buffer address.
41437 -\x1f
41438 -File: libc.info, Node: Host Names, Prev: Host Address Functions, Up: Host Addresses
41440 -Host Names
41441 -..........
41443 - Besides the standard numbers-and-dots notation for Internet
41444 -addresses, you can also refer to a host by a symbolic name. The
41445 -advantage of a symbolic name is that it is usually easier to remember.
41446 -For example, the machine with Internet address `158.121.106.19' is also
41447 -known as `alpha.gnu.org'; and other machines in the `gnu.org' domain
41448 -can refer to it simply as `alpha'.
41450 - Internally, the system uses a database to keep track of the mapping
41451 -between host names and host numbers. This database is usually either
41452 -the file `/etc/hosts' or an equivalent provided by a name server. The
41453 -functions and other symbols for accessing this database are declared in
41454 -`netdb.h'. They are BSD features, defined unconditionally if you
41455 -include `netdb.h'.
41457 - - Data Type: struct hostent
41458 - This data type is used to represent an entry in the hosts
41459 - database. It has the following members:
41461 - `char *h_name'
41462 - This is the "official" name of the host.
41464 - `char **h_aliases'
41465 - These are alternative names for the host, represented as a
41466 - null-terminated vector of strings.
41468 - `int h_addrtype'
41469 - This is the host address type; in practice, its value is
41470 - always either `AF_INET' or `AF_INET6', with the latter being
41471 - used for IPv6 hosts. In principle other kinds of addresses
41472 - could be represented in the database as well as Internet
41473 - addresses; if this were done, you might find a value in this
41474 - field other than `AF_INET' or `AF_INET6'. *Note Socket
41475 - Addresses::.
41477 - `int h_length'
41478 - This is the length, in bytes, of each address.
41480 - `char **h_addr_list'
41481 - This is the vector of addresses for the host. (Recall that
41482 - the host might be connected to multiple networks and have
41483 - different addresses on each one.) The vector is terminated
41484 - by a null pointer.
41486 - `char *h_addr'
41487 - This is a synonym for `h_addr_list[0]'; in other words, it is
41488 - the first host address.
41490 - As far as the host database is concerned, each address is just a
41491 -block of memory `h_length' bytes long. But in other contexts there is
41492 -an implicit assumption that you can convert IPv4 addresses to a `struct
41493 -in_addr' or an `uint32_t'. Host addresses in a `struct hostent'
41494 -structure are always given in network byte order; see *Note Byte
41495 -Order::.
41497 - You can use `gethostbyname', `gethostbyname2' or `gethostbyaddr' to
41498 -search the hosts database for information about a particular host. The
41499 -information is returned in a statically-allocated structure; you must
41500 -copy the information if you need to save it across calls. You can also
41501 -use `getaddrinfo' and `getnameinfo' to obtain this information.
41503 - - Function: struct hostent * gethostbyname (const char *NAME)
41504 - The `gethostbyname' function returns information about the host
41505 - named NAME. If the lookup fails, it returns a null pointer.
41507 - - Function: struct hostent * gethostbyname2 (const char *NAME, int AF)
41508 - The `gethostbyname2' function is like `gethostbyname', but allows
41509 - the caller to specify the desired address family (e.g. `AF_INET'
41510 - or `AF_INET6') of the result.
41512 - - Function: struct hostent * gethostbyaddr (const char *ADDR, size_t
41513 - LENGTH, int FORMAT)
41514 - The `gethostbyaddr' function returns information about the host
41515 - with Internet address ADDR. The parameter ADDR is not really a
41516 - pointer to char - it can be a pointer to an IPv4 or an IPv6
41517 - address. The LENGTH argument is the size (in bytes) of the address
41518 - at ADDR. FORMAT specifies the address format; for an IPv4
41519 - Internet address, specify a value of `AF_INET'; for an IPv6
41520 - Internet address, use `AF_INET6'.
41522 - If the lookup fails, `gethostbyaddr' returns a null pointer.
41524 - If the name lookup by `gethostbyname' or `gethostbyaddr' fails, you
41525 -can find out the reason by looking at the value of the variable
41526 -`h_errno'. (It would be cleaner design for these functions to set
41527 -`errno', but use of `h_errno' is compatible with other systems.)
41529 - Here are the error codes that you may find in `h_errno':
41531 -`HOST_NOT_FOUND'
41532 - No such host is known in the database.
41534 -`TRY_AGAIN'
41535 - This condition happens when the name server could not be
41536 - contacted. If you try again later, you may succeed then.
41538 -`NO_RECOVERY'
41539 - A non-recoverable error occurred.
41541 -`NO_ADDRESS'
41542 - The host database contains an entry for the name, but it doesn't
41543 - have an associated Internet address.
41545 - The lookup functions above all have one in common: they are not
41546 -reentrant and therefore unusable in multi-threaded applications.
41547 -Therefore provides the GNU C library a new set of functions which can be
41548 -used in this context.
41550 - - Function: int gethostbyname_r (const char *restrict NAME, struct
41551 - hostent *restrict RESULT_BUF, char *restrict BUF, size_t
41552 - BUFLEN, struct hostent **restrict RESULT, int *restrict
41553 - H_ERRNOP)
41554 - The `gethostbyname_r' function returns information about the host
41555 - named NAME. The caller must pass a pointer to an object of type
41556 - `struct hostent' in the RESULT_BUF parameter. In addition the
41557 - function may need extra buffer space and the caller must pass an
41558 - pointer and the size of the buffer in the BUF and BUFLEN
41559 - parameters.
41561 - A pointer to the buffer, in which the result is stored, is
41562 - available in `*RESULT' after the function call successfully
41563 - returned. If an error occurs or if no entry is found, the pointer
41564 - `*RESULT' is a null pointer. Success is signalled by a zero
41565 - return value. If the function failed the return value is an error
41566 - number. In addition to the errors defined for `gethostbyname' it
41567 - can also be `ERANGE'. In this case the call should be repeated
41568 - with a larger buffer. Additional error information is not stored
41569 - in the global variable `h_errno' but instead in the object pointed
41570 - to by H_ERRNOP.
41572 - Here's a small example:
41573 - struct hostent *
41574 - gethostname (char *host)
41576 - struct hostent hostbuf, *hp;
41577 - size_t hstbuflen;
41578 - char *tmphstbuf;
41579 - int res;
41580 - int herr;
41582 - hstbuflen = 1024;
41583 - /* Allocate buffer, remember to free it to avoid memory leakage. */
41584 - tmphstbuf = malloc (hstbuflen);
41586 - while ((res = gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen,
41587 - &hp, &herr)) == ERANGE)
41589 - /* Enlarge the buffer. */
41590 - hstbuflen *= 2;
41591 - tmphstbuf = realloc (tmphstbuf, hstbuflen);
41593 - /* Check for errors. */
41594 - if (res || hp == NULL)
41595 - return NULL;
41596 - return hp;
41599 - - Function: int gethostbyname2_r (const char *NAME, int AF, struct
41600 - hostent *restrict RESULT_BUF, char *restrict BUF, size_t
41601 - BUFLEN, struct hostent **restrict RESULT, int *restrict
41602 - H_ERRNOP)
41603 - The `gethostbyname2_r' function is like `gethostbyname_r', but
41604 - allows the caller to specify the desired address family (e.g.
41605 - `AF_INET' or `AF_INET6') for the result.
41607 - - Function: int gethostbyaddr_r (const char *ADDR, size_t LENGTH, int
41608 - FORMAT, struct hostent *restrict RESULT_BUF, char *restrict
41609 - BUF, size_t BUFLEN, struct hostent **restrict RESULT, int
41610 - *restrict H_ERRNOP)
41611 - The `gethostbyaddr_r' function returns information about the host
41612 - with Internet address ADDR. The parameter ADDR is not really a
41613 - pointer to char - it can be a pointer to an IPv4 or an IPv6
41614 - address. The LENGTH argument is the size (in bytes) of the address
41615 - at ADDR. FORMAT specifies the address format; for an IPv4
41616 - Internet address, specify a value of `AF_INET'; for an IPv6
41617 - Internet address, use `AF_INET6'.
41619 - Similar to the `gethostbyname_r' function, the caller must provide
41620 - buffers for the result and memory used internally. In case of
41621 - success the function returns zero. Otherwise the value is an
41622 - error number where `ERANGE' has the special meaning that the
41623 - caller-provided buffer is too small.
41625 - You can also scan the entire hosts database one entry at a time using
41626 -`sethostent', `gethostent' and `endhostent'. Be careful when using
41627 -these functions because they are not reentrant.
41629 - - Function: void sethostent (int STAYOPEN)
41630 - This function opens the hosts database to begin scanning it. You
41631 - can then call `gethostent' to read the entries.
41633 - If the STAYOPEN argument is nonzero, this sets a flag so that
41634 - subsequent calls to `gethostbyname' or `gethostbyaddr' will not
41635 - close the database (as they usually would). This makes for more
41636 - efficiency if you call those functions several times, by avoiding
41637 - reopening the database for each call.
41639 - - Function: struct hostent * gethostent (void)
41640 - This function returns the next entry in the hosts database. It
41641 - returns a null pointer if there are no more entries.
41643 - - Function: void endhostent (void)
41644 - This function closes the hosts database.
41646 -\x1f
41647 -File: libc.info, Node: Ports, Next: Services Database, Prev: Protocols Database, Up: Internet Namespace
41649 -Internet Ports
41650 ---------------
41652 - A socket address in the Internet namespace consists of a machine's
41653 -Internet address plus a "port number" which distinguishes the sockets
41654 -on a given machine (for a given protocol). Port numbers range from 0
41655 -to 65,535.
41657 - Port numbers less than `IPPORT_RESERVED' are reserved for standard
41658 -servers, such as `finger' and `telnet'. There is a database that keeps
41659 -track of these, and you can use the `getservbyname' function to map a
41660 -service name onto a port number; see *Note Services Database::.
41662 - If you write a server that is not one of the standard ones defined in
41663 -the database, you must choose a port number for it. Use a number
41664 -greater than `IPPORT_USERRESERVED'; such numbers are reserved for
41665 -servers and won't ever be generated automatically by the system.
41666 -Avoiding conflicts with servers being run by other users is up to you.
41668 - When you use a socket without specifying its address, the system
41669 -generates a port number for it. This number is between
41670 -`IPPORT_RESERVED' and `IPPORT_USERRESERVED'.
41672 - On the Internet, it is actually legitimate to have two different
41673 -sockets with the same port number, as long as they never both try to
41674 -communicate with the same socket address (host address plus port
41675 -number). You shouldn't duplicate a port number except in special
41676 -circumstances where a higher-level protocol requires it. Normally, the
41677 -system won't let you do it; `bind' normally insists on distinct port
41678 -numbers. To reuse a port number, you must set the socket option
41679 -`SO_REUSEADDR'. *Note Socket-Level Options::.
41681 - These macros are defined in the header file `netinet/in.h'.
41683 - - Macro: int IPPORT_RESERVED
41684 - Port numbers less than `IPPORT_RESERVED' are reserved for
41685 - superuser use.
41687 - - Macro: int IPPORT_USERRESERVED
41688 - Port numbers greater than or equal to `IPPORT_USERRESERVED' are
41689 - reserved for explicit use; they will never be allocated
41690 - automatically.
41692 -\x1f
41693 -File: libc.info, Node: Services Database, Next: Byte Order, Prev: Ports, Up: Internet Namespace
41695 -The Services Database
41696 ----------------------
41698 - The database that keeps track of "well-known" services is usually
41699 -either the file `/etc/services' or an equivalent from a name server.
41700 -You can use these utilities, declared in `netdb.h', to access the
41701 -services database.
41703 - - Data Type: struct servent
41704 - This data type holds information about entries from the services
41705 - database. It has the following members:
41707 - `char *s_name'
41708 - This is the "official" name of the service.
41710 - `char **s_aliases'
41711 - These are alternate names for the service, represented as an
41712 - array of strings. A null pointer terminates the array.
41714 - `int s_port'
41715 - This is the port number for the service. Port numbers are
41716 - given in network byte order; see *Note Byte Order::.
41718 - `char *s_proto'
41719 - This is the name of the protocol to use with this service.
41720 - *Note Protocols Database::.
41722 - To get information about a particular service, use the
41723 -`getservbyname' or `getservbyport' functions. The information is
41724 -returned in a statically-allocated structure; you must copy the
41725 -information if you need to save it across calls.
41727 - - Function: struct servent * getservbyname (const char *NAME, const
41728 - char *PROTO)
41729 - The `getservbyname' function returns information about the service
41730 - named NAME using protocol PROTO. If it can't find such a service,
41731 - it returns a null pointer.
41733 - This function is useful for servers as well as for clients; servers
41734 - use it to determine which port they should listen on (*note
41735 - Listening::).
41737 - - Function: struct servent * getservbyport (int PORT, const char
41738 - *PROTO)
41739 - The `getservbyport' function returns information about the service
41740 - at port PORT using protocol PROTO. If it can't find such a
41741 - service, it returns a null pointer.
41743 -You can also scan the services database using `setservent',
41744 -`getservent' and `endservent'. Be careful when using these functions
41745 -because they are not reentrant.
41747 - - Function: void setservent (int STAYOPEN)
41748 - This function opens the services database to begin scanning it.
41750 - If the STAYOPEN argument is nonzero, this sets a flag so that
41751 - subsequent calls to `getservbyname' or `getservbyport' will not
41752 - close the database (as they usually would). This makes for more
41753 - efficiency if you call those functions several times, by avoiding
41754 - reopening the database for each call.
41756 - - Function: struct servent * getservent (void)
41757 - This function returns the next entry in the services database. If
41758 - there are no more entries, it returns a null pointer.
41760 - - Function: void endservent (void)
41761 - This function closes the services database.
41763 -\x1f
41764 -File: libc.info, Node: Byte Order, Next: Inet Example, Prev: Services Database, Up: Internet Namespace
41766 -Byte Order Conversion
41767 ----------------------
41769 - Different kinds of computers use different conventions for the
41770 -ordering of bytes within a word. Some computers put the most
41771 -significant byte within a word first (this is called "big-endian"
41772 -order), and others put it last ("little-endian" order).
41774 - So that machines with different byte order conventions can
41775 -communicate, the Internet protocols specify a canonical byte order
41776 -convention for data transmitted over the network. This is known as
41777 -"network byte order".
41779 - When establishing an Internet socket connection, you must make sure
41780 -that the data in the `sin_port' and `sin_addr' members of the
41781 -`sockaddr_in' structure are represented in network byte order. If you
41782 -are encoding integer data in the messages sent through the socket, you
41783 -should convert this to network byte order too. If you don't do this,
41784 -your program may fail when running on or talking to other kinds of
41785 -machines.
41787 - If you use `getservbyname' and `gethostbyname' or `inet_addr' to get
41788 -the port number and host address, the values are already in network
41789 -byte order, and you can copy them directly into the `sockaddr_in'
41790 -structure.
41792 - Otherwise, you have to convert the values explicitly. Use `htons'
41793 -and `ntohs' to convert values for the `sin_port' member. Use `htonl'
41794 -and `ntohl' to convert IPv4 addresses for the `sin_addr' member.
41795 -(Remember, `struct in_addr' is equivalent to `uint32_t'.) These
41796 -functions are declared in `netinet/in.h'.
41798 - - Function: uint16_t htons (uint16_t HOSTSHORT)
41799 - This function converts the `uint16_t' integer HOSTSHORT from host
41800 - byte order to network byte order.
41802 - - Function: uint16_t ntohs (uint16_t NETSHORT)
41803 - This function converts the `uint16_t' integer NETSHORT from
41804 - network byte order to host byte order.
41806 - - Function: uint32_t htonl (uint32_t HOSTLONG)
41807 - This function converts the `uint32_t' integer HOSTLONG from host
41808 - byte order to network byte order.
41810 - This is used for IPv4 Internet addresses.
41812 - - Function: uint32_t ntohl (uint32_t NETLONG)
41813 - This function converts the `uint32_t' integer NETLONG from network
41814 - byte order to host byte order.
41816 - This is used for IPv4 Internet addresses.
41818 -\x1f
41819 -File: libc.info, Node: Protocols Database, Next: Ports, Prev: Host Addresses, Up: Internet Namespace
41821 -Protocols Database
41822 -------------------
41824 - The communications protocol used with a socket controls low-level
41825 -details of how data are exchanged. For example, the protocol implements
41826 -things like checksums to detect errors in transmissions, and routing
41827 -instructions for messages. Normal user programs have little reason to
41828 -mess with these details directly.
41830 - The default communications protocol for the Internet namespace
41831 -depends on the communication style. For stream communication, the
41832 -default is TCP ("transmission control protocol"). For datagram
41833 -communication, the default is UDP ("user datagram protocol"). For
41834 -reliable datagram communication, the default is RDP ("reliable datagram
41835 -protocol"). You should nearly always use the default.
41837 - Internet protocols are generally specified by a name instead of a
41838 -number. The network protocols that a host knows about are stored in a
41839 -database. This is usually either derived from the file
41840 -`/etc/protocols', or it may be an equivalent provided by a name server.
41841 -You look up the protocol number associated with a named protocol in
41842 -the database using the `getprotobyname' function.
41844 - Here are detailed descriptions of the utilities for accessing the
41845 -protocols database. These are declared in `netdb.h'.
41847 - - Data Type: struct protoent
41848 - This data type is used to represent entries in the network
41849 - protocols database. It has the following members:
41851 - `char *p_name'
41852 - This is the official name of the protocol.
41854 - `char **p_aliases'
41855 - These are alternate names for the protocol, specified as an
41856 - array of strings. The last element of the array is a null
41857 - pointer.
41859 - `int p_proto'
41860 - This is the protocol number (in host byte order); use this
41861 - member as the PROTOCOL argument to `socket'.
41863 - You can use `getprotobyname' and `getprotobynumber' to search the
41864 -protocols database for a specific protocol. The information is
41865 -returned in a statically-allocated structure; you must copy the
41866 -information if you need to save it across calls.
41868 - - Function: struct protoent * getprotobyname (const char *NAME)
41869 - The `getprotobyname' function returns information about the
41870 - network protocol named NAME. If there is no such protocol, it
41871 - returns a null pointer.
41873 - - Function: struct protoent * getprotobynumber (int PROTOCOL)
41874 - The `getprotobynumber' function returns information about the
41875 - network protocol with number PROTOCOL. If there is no such
41876 - protocol, it returns a null pointer.
41878 - You can also scan the whole protocols database one protocol at a
41879 -time by using `setprotoent', `getprotoent' and `endprotoent'. Be
41880 -careful when using these functions because they are not reentrant.
41882 - - Function: void setprotoent (int STAYOPEN)
41883 - This function opens the protocols database to begin scanning it.
41885 - If the STAYOPEN argument is nonzero, this sets a flag so that
41886 - subsequent calls to `getprotobyname' or `getprotobynumber' will
41887 - not close the database (as they usually would). This makes for
41888 - more efficiency if you call those functions several times, by
41889 - avoiding reopening the database for each call.
41891 - - Function: struct protoent * getprotoent (void)
41892 - This function returns the next entry in the protocols database. It
41893 - returns a null pointer if there are no more entries.
41895 - - Function: void endprotoent (void)
41896 - This function closes the protocols database.
41898 -\x1f
41899 -File: libc.info, Node: Inet Example, Prev: Byte Order, Up: Internet Namespace
41901 -Internet Socket Example
41902 ------------------------
41904 - Here is an example showing how to create and name a socket in the
41905 -Internet namespace. The newly created socket exists on the machine that
41906 -the program is running on. Rather than finding and using the machine's
41907 -Internet address, this example specifies `INADDR_ANY' as the host
41908 -address; the system replaces that with the machine's actual address.
41910 - #include <stdio.h>
41911 - #include <stdlib.h>
41912 - #include <sys/socket.h>
41913 - #include <netinet/in.h>
41915 - int
41916 - make_socket (uint16_t port)
41918 - int sock;
41919 - struct sockaddr_in name;
41921 - /* Create the socket. */
41922 - sock = socket (PF_INET, SOCK_STREAM, 0);
41923 - if (sock < 0)
41925 - perror ("socket");
41926 - exit (EXIT_FAILURE);
41929 - /* Give the socket a name. */
41930 - name.sin_family = AF_INET;
41931 - name.sin_port = htons (port);
41932 - name.sin_addr.s_addr = htonl (INADDR_ANY);
41933 - if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
41935 - perror ("bind");
41936 - exit (EXIT_FAILURE);
41939 - return sock;
41942 - Here is another example, showing how you can fill in a `sockaddr_in'
41943 -structure, given a host name string and a port number:
41945 - #include <stdio.h>
41946 - #include <stdlib.h>
41947 - #include <sys/socket.h>
41948 - #include <netinet/in.h>
41949 - #include <netdb.h>
41951 - void
41952 - init_sockaddr (struct sockaddr_in *name,
41953 - const char *hostname,
41954 - uint16_t port)
41956 - struct hostent *hostinfo;
41958 - name->sin_family = AF_INET;
41959 - name->sin_port = htons (port);
41960 - hostinfo = gethostbyname (hostname);
41961 - if (hostinfo == NULL)
41963 - fprintf (stderr, "Unknown host %s.\n", hostname);
41964 - exit (EXIT_FAILURE);
41966 - name->sin_addr = *(struct in_addr *) hostinfo->h_addr;
41969 diff -u -udbrN glibc-2.3.2/manual/libc.info-28 glibc-2.3.2-200304020432/manual/libc.info-28
41970 --- glibc-2.3.2/manual/libc.info-28 Sat Mar 1 02:39:41 2003
41971 +++ glibc-2.3.2-200304020432/manual/libc.info-28 Thu Jan 1 01:00:00 1970
41972 @@ -1,1370 +0,0 @@
41973 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
41975 -INFO-DIR-SECTION GNU libraries
41976 -START-INFO-DIR-ENTRY
41977 -* Libc: (libc). C library.
41978 -END-INFO-DIR-ENTRY
41980 - This file documents the GNU C library.
41982 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
41983 -Reference Manual', for Version 2.3.x.
41985 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
41986 -Free Software Foundation, Inc.
41988 - Permission is granted to copy, distribute and/or modify this document
41989 -under the terms of the GNU Free Documentation License, Version 1.1 or
41990 -any later version published by the Free Software Foundation; with the
41991 -Invariant Sections being "Free Software Needs Free Documentation" and
41992 -"GNU Lesser General Public License", the Front-Cover texts being (a)
41993 -(see below), and with the Back-Cover Texts being (b) (see below). A
41994 -copy of the license is included in the section entitled "GNU Free
41995 -Documentation License".
41997 - (a) The FSF's Front-Cover Text is:
41999 - A GNU Manual
42001 - (b) The FSF's Back-Cover Text is:
42003 - You have freedom to copy and modify this GNU Manual, like GNU
42004 -software. Copies published by the Free Software Foundation raise
42005 -funds for GNU development.
42007 -\x1f
42008 -File: libc.info, Node: Misc Namespaces, Next: Open/Close Sockets, Prev: Internet Namespace, Up: Sockets
42010 -Other Namespaces
42011 -================
42013 - Certain other namespaces and associated protocol families are
42014 -supported but not documented yet because they are not often used.
42015 -`PF_NS' refers to the Xerox Network Software protocols. `PF_ISO' stands
42016 -for Open Systems Interconnect. `PF_CCITT' refers to protocols from
42017 -CCITT. `socket.h' defines these symbols and others naming protocols
42018 -not actually implemented.
42020 - `PF_IMPLINK' is used for communicating between hosts and Internet
42021 -Message Processors. For information on this and `PF_ROUTE', an
42022 -occasionally-used local area routing protocol, see the GNU Hurd Manual
42023 -(to appear in the future).
42025 -\x1f
42026 -File: libc.info, Node: Open/Close Sockets, Next: Connections, Prev: Misc Namespaces, Up: Sockets
42028 -Opening and Closing Sockets
42029 -===========================
42031 - This section describes the actual library functions for opening and
42032 -closing sockets. The same functions work for all namespaces and
42033 -connection styles.
42035 -* Menu:
42037 -* Creating a Socket:: How to open a socket.
42038 -* Closing a Socket:: How to close a socket.
42039 -* Socket Pairs:: These are created like pipes.
42041 -\x1f
42042 -File: libc.info, Node: Creating a Socket, Next: Closing a Socket, Up: Open/Close Sockets
42044 -Creating a Socket
42045 ------------------
42047 - The primitive for creating a socket is the `socket' function,
42048 -declared in `sys/socket.h'.
42050 - - Function: int socket (int NAMESPACE, int STYLE, int PROTOCOL)
42051 - This function creates a socket and specifies communication style
42052 - STYLE, which should be one of the socket styles listed in *Note
42053 - Communication Styles::. The NAMESPACE argument specifies the
42054 - namespace; it must be `PF_LOCAL' (*note Local Namespace::) or
42055 - `PF_INET' (*note Internet Namespace::). PROTOCOL designates the
42056 - specific protocol (*note Socket Concepts::); zero is usually right
42057 - for PROTOCOL.
42059 - The return value from `socket' is the file descriptor for the new
42060 - socket, or `-1' in case of error. The following `errno' error
42061 - conditions are defined for this function:
42063 - `EPROTONOSUPPORT'
42064 - The PROTOCOL or STYLE is not supported by the NAMESPACE
42065 - specified.
42067 - `EMFILE'
42068 - The process already has too many file descriptors open.
42070 - `ENFILE'
42071 - The system already has too many file descriptors open.
42073 - `EACCES'
42074 - The process does not have the privilege to create a socket of
42075 - the specified STYLE or PROTOCOL.
42077 - `ENOBUFS'
42078 - The system ran out of internal buffer space.
42080 - The file descriptor returned by the `socket' function supports both
42081 - read and write operations. However, like pipes, sockets do not
42082 - support file positioning operations.
42084 - For examples of how to call the `socket' function, see *Note Local
42085 -Socket Example::, or *Note Inet Example::.
42087 -\x1f
42088 -File: libc.info, Node: Closing a Socket, Next: Socket Pairs, Prev: Creating a Socket, Up: Open/Close Sockets
42090 -Closing a Socket
42091 -----------------
42093 - When you have finished using a socket, you can simply close its file
42094 -descriptor with `close'; see *Note Opening and Closing Files::. If
42095 -there is still data waiting to be transmitted over the connection,
42096 -normally `close' tries to complete this transmission. You can control
42097 -this behavior using the `SO_LINGER' socket option to specify a timeout
42098 -period; see *Note Socket Options::.
42100 - You can also shut down only reception or transmission on a
42101 -connection by calling `shutdown', which is declared in `sys/socket.h'.
42103 - - Function: int shutdown (int SOCKET, int HOW)
42104 - The `shutdown' function shuts down the connection of socket
42105 - SOCKET. The argument HOW specifies what action to perform:
42107 - `0'
42108 - Stop receiving data for this socket. If further data arrives,
42109 - reject it.
42111 - `1'
42112 - Stop trying to transmit data from this socket. Discard any
42113 - data waiting to be sent. Stop looking for acknowledgement of
42114 - data already sent; don't retransmit it if it is lost.
42116 - `2'
42117 - Stop both reception and transmission.
42119 - The return value is `0' on success and `-1' on failure. The
42120 - following `errno' error conditions are defined for this function:
42122 - `EBADF'
42123 - SOCKET is not a valid file descriptor.
42125 - `ENOTSOCK'
42126 - SOCKET is not a socket.
42128 - `ENOTCONN'
42129 - SOCKET is not connected.
42131 -\x1f
42132 -File: libc.info, Node: Socket Pairs, Prev: Closing a Socket, Up: Open/Close Sockets
42134 -Socket Pairs
42135 -------------
42137 - A "socket pair" consists of a pair of connected (but unnamed)
42138 -sockets. It is very similar to a pipe and is used in much the same
42139 -way. Socket pairs are created with the `socketpair' function, declared
42140 -in `sys/socket.h'. A socket pair is much like a pipe; the main
42141 -difference is that the socket pair is bidirectional, whereas the pipe
42142 -has one input-only end and one output-only end (*note Pipes and
42143 -FIFOs::).
42145 - - Function: int socketpair (int NAMESPACE, int STYLE, int PROTOCOL,
42146 - int FILEDES[2])
42147 - This function creates a socket pair, returning the file
42148 - descriptors in `FILEDES[0]' and `FILEDES[1]'. The socket pair is
42149 - a full-duplex communications channel, so that both reading and
42150 - writing may be performed at either end.
42152 - The NAMESPACE, STYLE and PROTOCOL arguments are interpreted as for
42153 - the `socket' function. STYLE should be one of the communication
42154 - styles listed in *Note Communication Styles::. The NAMESPACE
42155 - argument specifies the namespace, which must be `AF_LOCAL' (*note
42156 - Local Namespace::); PROTOCOL specifies the communications
42157 - protocol, but zero is the only meaningful value.
42159 - If STYLE specifies a connectionless communication style, then the
42160 - two sockets you get are not _connected_, strictly speaking, but
42161 - each of them knows the other as the default destination address,
42162 - so they can send packets to each other.
42164 - The `socketpair' function returns `0' on success and `-1' on
42165 - failure. The following `errno' error conditions are defined for
42166 - this function:
42168 - `EMFILE'
42169 - The process has too many file descriptors open.
42171 - `EAFNOSUPPORT'
42172 - The specified namespace is not supported.
42174 - `EPROTONOSUPPORT'
42175 - The specified protocol is not supported.
42177 - `EOPNOTSUPP'
42178 - The specified protocol does not support the creation of
42179 - socket pairs.
42181 -\x1f
42182 -File: libc.info, Node: Connections, Next: Datagrams, Prev: Open/Close Sockets, Up: Sockets
42184 -Using Sockets with Connections
42185 -==============================
42187 - The most common communication styles involve making a connection to a
42188 -particular other socket, and then exchanging data with that socket over
42189 -and over. Making a connection is asymmetric; one side (the "client")
42190 -acts to request a connection, while the other side (the "server") makes
42191 -a socket and waits for the connection request.
42193 -* Menu:
42195 -* Connecting:: What the client program must do.
42196 -* Listening:: How a server program waits for requests.
42197 -* Accepting Connections:: What the server does when it gets a request.
42198 -* Who is Connected:: Getting the address of the
42199 - other side of a connection.
42200 -* Transferring Data:: How to send and receive data.
42201 -* Byte Stream Example:: An example program: a client for communicating
42202 - over a byte stream socket in the Internet namespace.
42203 -* Server Example:: A corresponding server program.
42204 -* Out-of-Band Data:: This is an advanced feature.
42206 -\x1f
42207 -File: libc.info, Node: Connecting, Next: Listening, Up: Connections
42209 -Making a Connection
42210 --------------------
42212 - In making a connection, the client makes a connection while the
42213 -server waits for and accepts the connection. Here we discuss what the
42214 -client program must do with the `connect' function, which is declared in
42215 -`sys/socket.h'.
42217 - - Function: int connect (int SOCKET, struct sockaddr *ADDR, socklen_t
42218 - LENGTH)
42219 - The `connect' function initiates a connection from the socket with
42220 - file descriptor SOCKET to the socket whose address is specified by
42221 - the ADDR and LENGTH arguments. (This socket is typically on
42222 - another machine, and it must be already set up as a server.)
42223 - *Note Socket Addresses::, for information about how these
42224 - arguments are interpreted.
42226 - Normally, `connect' waits until the server responds to the request
42227 - before it returns. You can set nonblocking mode on the socket
42228 - SOCKET to make `connect' return immediately without waiting for
42229 - the response. *Note File Status Flags::, for information about
42230 - nonblocking mode.
42232 - The normal return value from `connect' is `0'. If an error
42233 - occurs, `connect' returns `-1'. The following `errno' error
42234 - conditions are defined for this function:
42236 - `EBADF'
42237 - The socket SOCKET is not a valid file descriptor.
42239 - `ENOTSOCK'
42240 - File descriptor SOCKET is not a socket.
42242 - `EADDRNOTAVAIL'
42243 - The specified address is not available on the remote machine.
42245 - `EAFNOSUPPORT'
42246 - The namespace of the ADDR is not supported by this socket.
42248 - `EISCONN'
42249 - The socket SOCKET is already connected.
42251 - `ETIMEDOUT'
42252 - The attempt to establish the connection timed out.
42254 - `ECONNREFUSED'
42255 - The server has actively refused to establish the connection.
42257 - `ENETUNREACH'
42258 - The network of the given ADDR isn't reachable from this host.
42260 - `EADDRINUSE'
42261 - The socket address of the given ADDR is already in use.
42263 - `EINPROGRESS'
42264 - The socket SOCKET is non-blocking and the connection could
42265 - not be established immediately. You can determine when the
42266 - connection is completely established with `select'; *note
42267 - Waiting for I/O::. Another `connect' call on the same
42268 - socket, before the connection is completely established, will
42269 - fail with `EALREADY'.
42271 - `EALREADY'
42272 - The socket SOCKET is non-blocking and already has a pending
42273 - connection in progress (see `EINPROGRESS' above).
42275 - This function is defined as a cancellation point in multi-threaded
42276 - programs, so one has to be prepared for this and make sure that
42277 - allocated resources (like memory, files descriptors, semaphores or
42278 - whatever) are freed even if the thread is canceled.
42280 -\x1f
42281 -File: libc.info, Node: Listening, Next: Accepting Connections, Prev: Connecting, Up: Connections
42283 -Listening for Connections
42284 --------------------------
42286 - Now let us consider what the server process must do to accept
42287 -connections on a socket. First it must use the `listen' function to
42288 -enable connection requests on the socket, and then accept each incoming
42289 -connection with a call to `accept' (*note Accepting Connections::).
42290 -Once connection requests are enabled on a server socket, the `select'
42291 -function reports when the socket has a connection ready to be accepted
42292 -(*note Waiting for I/O::).
42294 - The `listen' function is not allowed for sockets using
42295 -connectionless communication styles.
42297 - You can write a network server that does not even start running
42298 -until a connection to it is requested. *Note Inetd Servers::.
42300 - In the Internet namespace, there are no special protection mechanisms
42301 -for controlling access to a port; any process on any machine can make a
42302 -connection to your server. If you want to restrict access to your
42303 -server, make it examine the addresses associated with connection
42304 -requests or implement some other handshaking or identification protocol.
42306 - In the local namespace, the ordinary file protection bits control
42307 -who has access to connect to the socket.
42309 - - Function: int listen (int SOCKET, unsigned int N)
42310 - The `listen' function enables the socket SOCKET to accept
42311 - connections, thus making it a server socket.
42313 - The argument N specifies the length of the queue for pending
42314 - connections. When the queue fills, new clients attempting to
42315 - connect fail with `ECONNREFUSED' until the server calls `accept' to
42316 - accept a connection from the queue.
42318 - The `listen' function returns `0' on success and `-1' on failure.
42319 - The following `errno' error conditions are defined for this
42320 - function:
42322 - `EBADF'
42323 - The argument SOCKET is not a valid file descriptor.
42325 - `ENOTSOCK'
42326 - The argument SOCKET is not a socket.
42328 - `EOPNOTSUPP'
42329 - The socket SOCKET does not support this operation.
42331 -\x1f
42332 -File: libc.info, Node: Accepting Connections, Next: Who is Connected, Prev: Listening, Up: Connections
42334 -Accepting Connections
42335 ----------------------
42337 - When a server receives a connection request, it can complete the
42338 -connection by accepting the request. Use the function `accept' to do
42339 -this.
42341 - A socket that has been established as a server can accept connection
42342 -requests from multiple clients. The server's original socket _does not
42343 -become part of the connection_; instead, `accept' makes a new socket
42344 -which participates in the connection. `accept' returns the descriptor
42345 -for this socket. The server's original socket remains available for
42346 -listening for further connection requests.
42348 - The number of pending connection requests on a server socket is
42349 -finite. If connection requests arrive from clients faster than the
42350 -server can act upon them, the queue can fill up and additional requests
42351 -are refused with an `ECONNREFUSED' error. You can specify the maximum
42352 -length of this queue as an argument to the `listen' function, although
42353 -the system may also impose its own internal limit on the length of this
42354 -queue.
42356 - - Function: int accept (int SOCKET, struct sockaddr *ADDR, socklen_t
42357 - *LENGTH_PTR)
42358 - This function is used to accept a connection request on the server
42359 - socket SOCKET.
42361 - The `accept' function waits if there are no connections pending,
42362 - unless the socket SOCKET has nonblocking mode set. (You can use
42363 - `select' to wait for a pending connection, with a nonblocking
42364 - socket.) *Note File Status Flags::, for information about
42365 - nonblocking mode.
42367 - The ADDR and LENGTH-PTR arguments are used to return information
42368 - about the name of the client socket that initiated the connection.
42369 - *Note Socket Addresses::, for information about the format of the
42370 - information.
42372 - Accepting a connection does not make SOCKET part of the
42373 - connection. Instead, it creates a new socket which becomes
42374 - connected. The normal return value of `accept' is the file
42375 - descriptor for the new socket.
42377 - After `accept', the original socket SOCKET remains open and
42378 - unconnected, and continues listening until you close it. You can
42379 - accept further connections with SOCKET by calling `accept' again.
42381 - If an error occurs, `accept' returns `-1'. The following `errno'
42382 - error conditions are defined for this function:
42384 - `EBADF'
42385 - The SOCKET argument is not a valid file descriptor.
42387 - `ENOTSOCK'
42388 - The descriptor SOCKET argument is not a socket.
42390 - `EOPNOTSUPP'
42391 - The descriptor SOCKET does not support this operation.
42393 - `EWOULDBLOCK'
42394 - SOCKET has nonblocking mode set, and there are no pending
42395 - connections immediately available.
42397 - This function is defined as a cancellation point in multi-threaded
42398 - programs, so one has to be prepared for this and make sure that
42399 - allocated resources (like memory, files descriptors, semaphores or
42400 - whatever) are freed even if the thread is canceled.
42402 - The `accept' function is not allowed for sockets using
42403 -connectionless communication styles.
42405 -\x1f
42406 -File: libc.info, Node: Who is Connected, Next: Transferring Data, Prev: Accepting Connections, Up: Connections
42408 -Who is Connected to Me?
42409 ------------------------
42411 - - Function: int getpeername (int SOCKET, struct sockaddr *ADDR,
42412 - socklen_t *LENGTH-PTR)
42413 - The `getpeername' function returns the address of the socket that
42414 - SOCKET is connected to; it stores the address in the memory space
42415 - specified by ADDR and LENGTH-PTR. It stores the length of the
42416 - address in `*LENGTH-PTR'.
42418 - *Note Socket Addresses::, for information about the format of the
42419 - address. In some operating systems, `getpeername' works only for
42420 - sockets in the Internet domain.
42422 - The return value is `0' on success and `-1' on error. The
42423 - following `errno' error conditions are defined for this function:
42425 - `EBADF'
42426 - The argument SOCKET is not a valid file descriptor.
42428 - `ENOTSOCK'
42429 - The descriptor SOCKET is not a socket.
42431 - `ENOTCONN'
42432 - The socket SOCKET is not connected.
42434 - `ENOBUFS'
42435 - There are not enough internal buffers available.
42437 -\x1f
42438 -File: libc.info, Node: Transferring Data, Next: Byte Stream Example, Prev: Who is Connected, Up: Connections
42440 -Transferring Data
42441 ------------------
42443 - Once a socket has been connected to a peer, you can use the ordinary
42444 -`read' and `write' operations (*note I/O Primitives::) to transfer
42445 -data. A socket is a two-way communications channel, so read and write
42446 -operations can be performed at either end.
42448 - There are also some I/O modes that are specific to socket operations.
42449 -In order to specify these modes, you must use the `recv' and `send'
42450 -functions instead of the more generic `read' and `write' functions.
42451 -The `recv' and `send' functions take an additional argument which you
42452 -can use to specify various flags to control special I/O modes. For
42453 -example, you can specify the `MSG_OOB' flag to read or write
42454 -out-of-band data, the `MSG_PEEK' flag to peek at input, or the
42455 -`MSG_DONTROUTE' flag to control inclusion of routing information on
42456 -output.
42458 -* Menu:
42460 -* Sending Data:: Sending data with `send'.
42461 -* Receiving Data:: Reading data with `recv'.
42462 -* Socket Data Options:: Using `send' and `recv'.
42464 -\x1f
42465 -File: libc.info, Node: Sending Data, Next: Receiving Data, Up: Transferring Data
42467 -Sending Data
42468 -............
42470 - The `send' function is declared in the header file `sys/socket.h'.
42471 -If your FLAGS argument is zero, you can just as well use `write'
42472 -instead of `send'; see *Note I/O Primitives::. If the socket was
42473 -connected but the connection has broken, you get a `SIGPIPE' signal for
42474 -any use of `send' or `write' (*note Miscellaneous Signals::).
42476 - - Function: int send (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)
42477 - The `send' function is like `write', but with the additional flags
42478 - FLAGS. The possible values of FLAGS are described in *Note Socket
42479 - Data Options::.
42481 - This function returns the number of bytes transmitted, or `-1' on
42482 - failure. If the socket is nonblocking, then `send' (like `write')
42483 - can return after sending just part of the data. *Note File Status
42484 - Flags::, for information about nonblocking mode.
42486 - Note, however, that a successful return value merely indicates that
42487 - the message has been sent without error, not necessarily that it
42488 - has been received without error.
42490 - The following `errno' error conditions are defined for this
42491 - function:
42493 - `EBADF'
42494 - The SOCKET argument is not a valid file descriptor.
42496 - `EINTR'
42497 - The operation was interrupted by a signal before any data was
42498 - sent. *Note Interrupted Primitives::.
42500 - `ENOTSOCK'
42501 - The descriptor SOCKET is not a socket.
42503 - `EMSGSIZE'
42504 - The socket type requires that the message be sent atomically,
42505 - but the message is too large for this to be possible.
42507 - `EWOULDBLOCK'
42508 - Nonblocking mode has been set on the socket, and the write
42509 - operation would block. (Normally `send' blocks until the
42510 - operation can be completed.)
42512 - `ENOBUFS'
42513 - There is not enough internal buffer space available.
42515 - `ENOTCONN'
42516 - You never connected this socket.
42518 - `EPIPE'
42519 - This socket was connected but the connection is now broken.
42520 - In this case, `send' generates a `SIGPIPE' signal first; if
42521 - that signal is ignored or blocked, or if its handler returns,
42522 - then `send' fails with `EPIPE'.
42524 - This function is defined as a cancellation point in multi-threaded
42525 - programs, so one has to be prepared for this and make sure that
42526 - allocated resources (like memory, files descriptors, semaphores or
42527 - whatever) are freed even if the thread is canceled.
42529 -\x1f
42530 -File: libc.info, Node: Receiving Data, Next: Socket Data Options, Prev: Sending Data, Up: Transferring Data
42532 -Receiving Data
42533 -..............
42535 - The `recv' function is declared in the header file `sys/socket.h'.
42536 -If your FLAGS argument is zero, you can just as well use `read' instead
42537 -of `recv'; see *Note I/O Primitives::.
42539 - - Function: int recv (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)
42540 - The `recv' function is like `read', but with the additional flags
42541 - FLAGS. The possible values of FLAGS are described in *Note Socket
42542 - Data Options::.
42544 - If nonblocking mode is set for SOCKET, and no data are available to
42545 - be read, `recv' fails immediately rather than waiting. *Note File
42546 - Status Flags::, for information about nonblocking mode.
42548 - This function returns the number of bytes received, or `-1' on
42549 - failure. The following `errno' error conditions are defined for
42550 - this function:
42552 - `EBADF'
42553 - The SOCKET argument is not a valid file descriptor.
42555 - `ENOTSOCK'
42556 - The descriptor SOCKET is not a socket.
42558 - `EWOULDBLOCK'
42559 - Nonblocking mode has been set on the socket, and the read
42560 - operation would block. (Normally, `recv' blocks until there
42561 - is input available to be read.)
42563 - `EINTR'
42564 - The operation was interrupted by a signal before any data was
42565 - read. *Note Interrupted Primitives::.
42567 - `ENOTCONN'
42568 - You never connected this socket.
42570 - This function is defined as a cancellation point in multi-threaded
42571 - programs, so one has to be prepared for this and make sure that
42572 - allocated resources (like memory, files descriptors, semaphores or
42573 - whatever) are freed even if the thread is canceled.
42575 -\x1f
42576 -File: libc.info, Node: Socket Data Options, Prev: Receiving Data, Up: Transferring Data
42578 -Socket Data Options
42579 -...................
42581 - The FLAGS argument to `send' and `recv' is a bit mask. You can
42582 -bitwise-OR the values of the following macros together to obtain a
42583 -value for this argument. All are defined in the header file
42584 -`sys/socket.h'.
42586 - - Macro: int MSG_OOB
42587 - Send or receive out-of-band data. *Note Out-of-Band Data::.
42589 - - Macro: int MSG_PEEK
42590 - Look at the data but don't remove it from the input queue. This is
42591 - only meaningful with input functions such as `recv', not with
42592 - `send'.
42594 - - Macro: int MSG_DONTROUTE
42595 - Don't include routing information in the message. This is only
42596 - meaningful with output operations, and is usually only of interest
42597 - for diagnostic or routing programs. We don't try to explain it
42598 - here.
42600 -\x1f
42601 -File: libc.info, Node: Byte Stream Example, Next: Server Example, Prev: Transferring Data, Up: Connections
42603 -Byte Stream Socket Example
42604 ---------------------------
42606 - Here is an example client program that makes a connection for a byte
42607 -stream socket in the Internet namespace. It doesn't do anything
42608 -particularly interesting once it has connected to the server; it just
42609 -sends a text string to the server and exits.
42611 - This program uses `init_sockaddr' to set up the socket address; see
42612 -*Note Inet Example::.
42614 - #include <stdio.h>
42615 - #include <errno.h>
42616 - #include <stdlib.h>
42617 - #include <unistd.h>
42618 - #include <sys/types.h>
42619 - #include <sys/socket.h>
42620 - #include <netinet/in.h>
42621 - #include <netdb.h>
42623 - #define PORT 5555
42624 - #define MESSAGE "Yow!!! Are we having fun yet?!?"
42625 - #define SERVERHOST "mescaline.gnu.org"
42627 - void
42628 - write_to_server (int filedes)
42630 - int nbytes;
42632 - nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1);
42633 - if (nbytes < 0)
42635 - perror ("write");
42636 - exit (EXIT_FAILURE);
42641 - int
42642 - main (void)
42644 - extern void init_sockaddr (struct sockaddr_in *name,
42645 - const char *hostname,
42646 - uint16_t port);
42647 - int sock;
42648 - struct sockaddr_in servername;
42650 - /* Create the socket. */
42651 - sock = socket (PF_INET, SOCK_STREAM, 0);
42652 - if (sock < 0)
42654 - perror ("socket (client)");
42655 - exit (EXIT_FAILURE);
42658 - /* Connect to the server. */
42659 - init_sockaddr (&servername, SERVERHOST, PORT);
42660 - if (0 > connect (sock,
42661 - (struct sockaddr *) &servername,
42662 - sizeof (servername)))
42664 - perror ("connect (client)");
42665 - exit (EXIT_FAILURE);
42668 - /* Send data to the server. */
42669 - write_to_server (sock);
42670 - close (sock);
42671 - exit (EXIT_SUCCESS);
42674 -\x1f
42675 -File: libc.info, Node: Server Example, Next: Out-of-Band Data, Prev: Byte Stream Example, Up: Connections
42677 -Byte Stream Connection Server Example
42678 --------------------------------------
42680 - The server end is much more complicated. Since we want to allow
42681 -multiple clients to be connected to the server at the same time, it
42682 -would be incorrect to wait for input from a single client by simply
42683 -calling `read' or `recv'. Instead, the right thing to do is to use
42684 -`select' (*note Waiting for I/O::) to wait for input on all of the open
42685 -sockets. This also allows the server to deal with additional
42686 -connection requests.
42688 - This particular server doesn't do anything interesting once it has
42689 -gotten a message from a client. It does close the socket for that
42690 -client when it detects an end-of-file condition (resulting from the
42691 -client shutting down its end of the connection).
42693 - This program uses `make_socket' to set up the socket address; see
42694 -*Note Inet Example::.
42696 - #include <stdio.h>
42697 - #include <errno.h>
42698 - #include <stdlib.h>
42699 - #include <unistd.h>
42700 - #include <sys/types.h>
42701 - #include <sys/socket.h>
42702 - #include <netinet/in.h>
42703 - #include <netdb.h>
42705 - #define PORT 5555
42706 - #define MAXMSG 512
42708 - int
42709 - read_from_client (int filedes)
42711 - char buffer[MAXMSG];
42712 - int nbytes;
42714 - nbytes = read (filedes, buffer, MAXMSG);
42715 - if (nbytes < 0)
42717 - /* Read error. */
42718 - perror ("read");
42719 - exit (EXIT_FAILURE);
42721 - else if (nbytes == 0)
42722 - /* End-of-file. */
42723 - return -1;
42724 - else
42726 - /* Data read. */
42727 - fprintf (stderr, "Server: got message: `%s'\n", buffer);
42728 - return 0;
42732 - int
42733 - main (void)
42735 - extern int make_socket (uint16_t port);
42736 - int sock;
42737 - fd_set active_fd_set, read_fd_set;
42738 - int i;
42739 - struct sockaddr_in clientname;
42740 - size_t size;
42742 - /* Create the socket and set it up to accept connections. */
42743 - sock = make_socket (PORT);
42744 - if (listen (sock, 1) < 0)
42746 - perror ("listen");
42747 - exit (EXIT_FAILURE);
42750 - /* Initialize the set of active sockets. */
42751 - FD_ZERO (&active_fd_set);
42752 - FD_SET (sock, &active_fd_set);
42754 - while (1)
42756 - /* Block until input arrives on one or more active sockets. */
42757 - read_fd_set = active_fd_set;
42758 - if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, NULL) < 0)
42760 - perror ("select");
42761 - exit (EXIT_FAILURE);
42764 - /* Service all the sockets with input pending. */
42765 - for (i = 0; i < FD_SETSIZE; ++i)
42766 - if (FD_ISSET (i, &read_fd_set))
42768 - if (i == sock)
42770 - /* Connection request on original socket. */
42771 - int new;
42772 - size = sizeof (clientname);
42773 - new = accept (sock,
42774 - (struct sockaddr *) &clientname,
42775 - &size);
42776 - if (new < 0)
42778 - perror ("accept");
42779 - exit (EXIT_FAILURE);
42781 - fprintf (stderr,
42782 - "Server: connect from host %s, port %hd.\n",
42783 - inet_ntoa (clientname.sin_addr),
42784 - ntohs (clientname.sin_port));
42785 - FD_SET (new, &active_fd_set);
42787 - else
42789 - /* Data arriving on an already-connected socket. */
42790 - if (read_from_client (i) < 0)
42792 - close (i);
42793 - FD_CLR (i, &active_fd_set);
42800 -\x1f
42801 -File: libc.info, Node: Out-of-Band Data, Prev: Server Example, Up: Connections
42803 -Out-of-Band Data
42804 -----------------
42806 - Streams with connections permit "out-of-band" data that is delivered
42807 -with higher priority than ordinary data. Typically the reason for
42808 -sending out-of-band data is to send notice of an exceptional condition.
42809 -To send out-of-band data use `send', specifying the flag `MSG_OOB'
42810 -(*note Sending Data::).
42812 - Out-of-band data are received with higher priority because the
42813 -receiving process need not read it in sequence; to read the next
42814 -available out-of-band data, use `recv' with the `MSG_OOB' flag (*note
42815 -Receiving Data::). Ordinary read operations do not read out-of-band
42816 -data; they read only ordinary data.
42818 - When a socket finds that out-of-band data are on their way, it sends
42819 -a `SIGURG' signal to the owner process or process group of the socket.
42820 -You can specify the owner using the `F_SETOWN' command to the `fcntl'
42821 -function; see *Note Interrupt Input::. You must also establish a
42822 -handler for this signal, as described in *Note Signal Handling::, in
42823 -order to take appropriate action such as reading the out-of-band data.
42825 - Alternatively, you can test for pending out-of-band data, or wait
42826 -until there is out-of-band data, using the `select' function; it can
42827 -wait for an exceptional condition on the socket. *Note Waiting for
42828 -I/O::, for more information about `select'.
42830 - Notification of out-of-band data (whether with `SIGURG' or with
42831 -`select') indicates that out-of-band data are on the way; the data may
42832 -not actually arrive until later. If you try to read the out-of-band
42833 -data before it arrives, `recv' fails with an `EWOULDBLOCK' error.
42835 - Sending out-of-band data automatically places a "mark" in the stream
42836 -of ordinary data, showing where in the sequence the out-of-band data
42837 -"would have been". This is useful when the meaning of out-of-band data
42838 -is "cancel everything sent so far". Here is how you can test, in the
42839 -receiving process, whether any ordinary data was sent before the mark:
42841 - success = ioctl (socket, SIOCATMARK, &atmark);
42843 - The `integer' variable ATMARK is set to a nonzero value if the
42844 -socket's read pointer has reached the "mark".
42846 - Here's a function to discard any ordinary data preceding the
42847 -out-of-band mark:
42849 - int
42850 - discard_until_mark (int socket)
42852 - while (1)
42854 - /* This is not an arbitrary limit; any size will do. */
42855 - char buffer[1024];
42856 - int atmark, success;
42858 - /* If we have reached the mark, return. */
42859 - success = ioctl (socket, SIOCATMARK, &atmark);
42860 - if (success < 0)
42861 - perror ("ioctl");
42862 - if (result)
42863 - return;
42865 - /* Otherwise, read a bunch of ordinary data and discard it.
42866 - This is guaranteed not to read past the mark
42867 - if it starts before the mark. */
42868 - success = read (socket, buffer, sizeof buffer);
42869 - if (success < 0)
42870 - perror ("read");
42874 - If you don't want to discard the ordinary data preceding the mark,
42875 -you may need to read some of it anyway, to make room in internal system
42876 -buffers for the out-of-band data. If you try to read out-of-band data
42877 -and get an `EWOULDBLOCK' error, try reading some ordinary data (saving
42878 -it so that you can use it when you want it) and see if that makes room.
42879 -Here is an example:
42881 - struct buffer
42883 - char *buf;
42884 - int size;
42885 - struct buffer *next;
42886 - };
42888 - /* Read the out-of-band data from SOCKET and return it
42889 - as a `struct buffer', which records the address of the data
42890 - and its size.
42892 - It may be necessary to read some ordinary data
42893 - in order to make room for the out-of-band data.
42894 - If so, the ordinary data are saved as a chain of buffers
42895 - found in the `next' field of the value. */
42897 - struct buffer *
42898 - read_oob (int socket)
42900 - struct buffer *tail = 0;
42901 - struct buffer *list = 0;
42903 - while (1)
42905 - /* This is an arbitrary limit.
42906 - Does anyone know how to do this without a limit? */
42907 - #define BUF_SZ 1024
42908 - char *buf = (char *) xmalloc (BUF_SZ);
42909 - int success;
42910 - int atmark;
42912 - /* Try again to read the out-of-band data. */
42913 - success = recv (socket, buf, BUF_SZ, MSG_OOB);
42914 - if (success >= 0)
42916 - /* We got it, so return it. */
42917 - struct buffer *link
42918 - = (struct buffer *) xmalloc (sizeof (struct buffer));
42919 - link->buf = buf;
42920 - link->size = success;
42921 - link->next = list;
42922 - return link;
42925 - /* If we fail, see if we are at the mark. */
42926 - success = ioctl (socket, SIOCATMARK, &atmark);
42927 - if (success < 0)
42928 - perror ("ioctl");
42929 - if (atmark)
42931 - /* At the mark; skipping past more ordinary data cannot help.
42932 - So just wait a while. */
42933 - sleep (1);
42934 - continue;
42937 - /* Otherwise, read a bunch of ordinary data and save it.
42938 - This is guaranteed not to read past the mark
42939 - if it starts before the mark. */
42940 - success = read (socket, buf, BUF_SZ);
42941 - if (success < 0)
42942 - perror ("read");
42944 - /* Save this data in the buffer list. */
42946 - struct buffer *link
42947 - = (struct buffer *) xmalloc (sizeof (struct buffer));
42948 - link->buf = buf;
42949 - link->size = success;
42951 - /* Add the new link to the end of the list. */
42952 - if (tail)
42953 - tail->next = link;
42954 - else
42955 - list = link;
42956 - tail = link;
42961 -\x1f
42962 -File: libc.info, Node: Datagrams, Next: Inetd, Prev: Connections, Up: Sockets
42964 -Datagram Socket Operations
42965 -==========================
42967 - This section describes how to use communication styles that don't use
42968 -connections (styles `SOCK_DGRAM' and `SOCK_RDM'). Using these styles,
42969 -you group data into packets and each packet is an independent
42970 -communication. You specify the destination for each packet
42971 -individually.
42973 - Datagram packets are like letters: you send each one independently
42974 -with its own destination address, and they may arrive in the wrong
42975 -order or not at all.
42977 - The `listen' and `accept' functions are not allowed for sockets
42978 -using connectionless communication styles.
42980 -* Menu:
42982 -* Sending Datagrams:: Sending packets on a datagram socket.
42983 -* Receiving Datagrams:: Receiving packets on a datagram socket.
42984 -* Datagram Example:: An example program: packets sent over a
42985 - datagram socket in the local namespace.
42986 -* Example Receiver:: Another program, that receives those packets.
42988 -\x1f
42989 -File: libc.info, Node: Sending Datagrams, Next: Receiving Datagrams, Up: Datagrams
42991 -Sending Datagrams
42992 ------------------
42994 - The normal way of sending data on a datagram socket is by using the
42995 -`sendto' function, declared in `sys/socket.h'.
42997 - You can call `connect' on a datagram socket, but this only specifies
42998 -a default destination for further data transmission on the socket.
42999 -When a socket has a default destination you can use `send' (*note
43000 -Sending Data::) or even `write' (*note I/O Primitives::) to send a
43001 -packet there. You can cancel the default destination by calling
43002 -`connect' using an address format of `AF_UNSPEC' in the ADDR argument.
43003 -*Note Connecting::, for more information about the `connect' function.
43005 - - Function: int sendto (int SOCKET, void *BUFFER. size_t SIZE, int
43006 - FLAGS, struct sockaddr *ADDR, socklen_t LENGTH)
43007 - The `sendto' function transmits the data in the BUFFER through the
43008 - socket SOCKET to the destination address specified by the ADDR and
43009 - LENGTH arguments. The SIZE argument specifies the number of bytes
43010 - to be transmitted.
43012 - The FLAGS are interpreted the same way as for `send'; see *Note
43013 - Socket Data Options::.
43015 - The return value and error conditions are also the same as for
43016 - `send', but you cannot rely on the system to detect errors and
43017 - report them; the most common error is that the packet is lost or
43018 - there is no-one at the specified address to receive it, and the
43019 - operating system on your machine usually does not know this.
43021 - It is also possible for one call to `sendto' to report an error
43022 - owing to a problem related to a previous call.
43024 - This function is defined as a cancellation point in multi-threaded
43025 - programs, so one has to be prepared for this and make sure that
43026 - allocated resources (like memory, files descriptors, semaphores or
43027 - whatever) are freed even if the thread is canceled.
43029 -\x1f
43030 -File: libc.info, Node: Receiving Datagrams, Next: Datagram Example, Prev: Sending Datagrams, Up: Datagrams
43032 -Receiving Datagrams
43033 --------------------
43035 - The `recvfrom' function reads a packet from a datagram socket and
43036 -also tells you where it was sent from. This function is declared in
43037 -`sys/socket.h'.
43039 - - Function: int recvfrom (int SOCKET, void *BUFFER, size_t SIZE, int
43040 - FLAGS, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)
43041 - The `recvfrom' function reads one packet from the socket SOCKET
43042 - into the buffer BUFFER. The SIZE argument specifies the maximum
43043 - number of bytes to be read.
43045 - If the packet is longer than SIZE bytes, then you get the first
43046 - SIZE bytes of the packet and the rest of the packet is lost.
43047 - There's no way to read the rest of the packet. Thus, when you use
43048 - a packet protocol, you must always know how long a packet to
43049 - expect.
43051 - The ADDR and LENGTH-PTR arguments are used to return the address
43052 - where the packet came from. *Note Socket Addresses::. For a
43053 - socket in the local domain the address information won't be
43054 - meaningful, since you can't read the address of such a socket
43055 - (*note Local Namespace::). You can specify a null pointer as the
43056 - ADDR argument if you are not interested in this information.
43058 - The FLAGS are interpreted the same way as for `recv' (*note Socket
43059 - Data Options::). The return value and error conditions are also
43060 - the same as for `recv'.
43062 - This function is defined as a cancellation point in multi-threaded
43063 - programs, so one has to be prepared for this and make sure that
43064 - allocated resources (like memory, files descriptors, semaphores or
43065 - whatever) are freed even if the thread is canceled.
43067 - You can use plain `recv' (*note Receiving Data::) instead of
43068 -`recvfrom' if you don't need to find out who sent the packet (either
43069 -because you know where it should come from or because you treat all
43070 -possible senders alike). Even `read' can be used if you don't want to
43071 -specify FLAGS (*note I/O Primitives::).
43073 -\x1f
43074 -File: libc.info, Node: Datagram Example, Next: Example Receiver, Prev: Receiving Datagrams, Up: Datagrams
43076 -Datagram Socket Example
43077 ------------------------
43079 - Here is a set of example programs that send messages over a datagram
43080 -stream in the local namespace. Both the client and server programs use
43081 -the `make_named_socket' function that was presented in *Note Local
43082 -Socket Example::, to create and name their sockets.
43084 - First, here is the server program. It sits in a loop waiting for
43085 -messages to arrive, bouncing each message back to the sender.
43086 -Obviously this isn't a particularly useful program, but it does show
43087 -the general ideas involved.
43089 - #include <stdio.h>
43090 - #include <errno.h>
43091 - #include <stdlib.h>
43092 - #include <sys/socket.h>
43093 - #include <sys/un.h>
43095 - #define SERVER "/tmp/serversocket"
43096 - #define MAXMSG 512
43098 - int
43099 - main (void)
43101 - int sock;
43102 - char message[MAXMSG];
43103 - struct sockaddr_un name;
43104 - size_t size;
43105 - int nbytes;
43107 - /* Remove the filename first, it's ok if the call fails */
43108 - unlink (SERVER);
43110 - /* Make the socket, then loop endlessly. */
43111 - sock = make_named_socket (SERVER);
43112 - while (1)
43114 - /* Wait for a datagram. */
43115 - size = sizeof (name);
43116 - nbytes = recvfrom (sock, message, MAXMSG, 0,
43117 - (struct sockaddr *) & name, &size);
43118 - if (nbytes < 0)
43120 - perror ("recfrom (server)");
43121 - exit (EXIT_FAILURE);
43124 - /* Give a diagnostic message. */
43125 - fprintf (stderr, "Server: got message: %s\n", message);
43127 - /* Bounce the message back to the sender. */
43128 - nbytes = sendto (sock, message, nbytes, 0,
43129 - (struct sockaddr *) & name, size);
43130 - if (nbytes < 0)
43132 - perror ("sendto (server)");
43133 - exit (EXIT_FAILURE);
43138 -\x1f
43139 -File: libc.info, Node: Example Receiver, Prev: Datagram Example, Up: Datagrams
43141 -Example of Reading Datagrams
43142 -----------------------------
43144 - Here is the client program corresponding to the server above.
43146 - It sends a datagram to the server and then waits for a reply. Notice
43147 -that the socket for the client (as well as for the server) in this
43148 -example has to be given a name. This is so that the server can direct
43149 -a message back to the client. Since the socket has no associated
43150 -connection state, the only way the server can do this is by referencing
43151 -the name of the client.
43153 - #include <stdio.h>
43154 - #include <errno.h>
43155 - #include <unistd.h>
43156 - #include <stdlib.h>
43157 - #include <sys/socket.h>
43158 - #include <sys/un.h>
43160 - #define SERVER "/tmp/serversocket"
43161 - #define CLIENT "/tmp/mysocket"
43162 - #define MAXMSG 512
43163 - #define MESSAGE "Yow!!! Are we having fun yet?!?"
43165 - int
43166 - main (void)
43168 - extern int make_named_socket (const char *name);
43169 - int sock;
43170 - char message[MAXMSG];
43171 - struct sockaddr_un name;
43172 - size_t size;
43173 - int nbytes;
43175 - /* Make the socket. */
43176 - sock = make_named_socket (CLIENT);
43178 - /* Initialize the server socket address. */
43179 - name.sun_family = AF_LOCAL;
43180 - strcpy (name.sun_path, SERVER);
43181 - size = strlen (name.sun_path) + sizeof (name.sun_family);
43183 - /* Send the datagram. */
43184 - nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0,
43185 - (struct sockaddr *) & name, size);
43186 - if (nbytes < 0)
43188 - perror ("sendto (client)");
43189 - exit (EXIT_FAILURE);
43192 - /* Wait for a reply. */
43193 - nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0);
43194 - if (nbytes < 0)
43196 - perror ("recfrom (client)");
43197 - exit (EXIT_FAILURE);
43200 - /* Print a diagnostic message. */
43201 - fprintf (stderr, "Client: got message: %s\n", message);
43203 - /* Clean up. */
43204 - remove (CLIENT);
43205 - close (sock);
43208 - Keep in mind that datagram socket communications are unreliable. In
43209 -this example, the client program waits indefinitely if the message
43210 -never reaches the server or if the server's response never comes back.
43211 -It's up to the user running the program to kill and restart it if
43212 -desired. A more automatic solution could be to use `select' (*note
43213 -Waiting for I/O::) to establish a timeout period for the reply, and in
43214 -case of timeout either re-send the message or shut down the socket and
43215 -exit.
43217 -\x1f
43218 -File: libc.info, Node: Inetd, Next: Socket Options, Prev: Datagrams, Up: Sockets
43220 -The `inetd' Daemon
43221 -==================
43223 - We've explained above how to write a server program that does its own
43224 -listening. Such a server must already be running in order for anyone
43225 -to connect to it.
43227 - Another way to provide a service on an Internet port is to let the
43228 -daemon program `inetd' do the listening. `inetd' is a program that
43229 -runs all the time and waits (using `select') for messages on a
43230 -specified set of ports. When it receives a message, it accepts the
43231 -connection (if the socket style calls for connections) and then forks a
43232 -child process to run the corresponding server program. You specify the
43233 -ports and their programs in the file `/etc/inetd.conf'.
43235 -* Menu:
43237 -* Inetd Servers::
43238 -* Configuring Inetd::
43240 -\x1f
43241 -File: libc.info, Node: Inetd Servers, Next: Configuring Inetd, Up: Inetd
43243 -`inetd' Servers
43244 ----------------
43246 - Writing a server program to be run by `inetd' is very simple. Each
43247 -time someone requests a connection to the appropriate port, a new server
43248 -process starts. The connection already exists at this time; the socket
43249 -is available as the standard input descriptor and as the standard
43250 -output descriptor (descriptors 0 and 1) in the server process. Thus
43251 -the server program can begin reading and writing data right away.
43252 -Often the program needs only the ordinary I/O facilities; in fact, a
43253 -general-purpose filter program that knows nothing about sockets can
43254 -work as a byte stream server run by `inetd'.
43256 - You can also use `inetd' for servers that use connectionless
43257 -communication styles. For these servers, `inetd' does not try to accept
43258 -a connection since no connection is possible. It just starts the
43259 -server program, which can read the incoming datagram packet from
43260 -descriptor 0. The server program can handle one request and then exit,
43261 -or you can choose to write it to keep reading more requests until no
43262 -more arrive, and then exit. You must specify which of these two
43263 -techniques the server uses when you configure `inetd'.
43265 -\x1f
43266 -File: libc.info, Node: Configuring Inetd, Prev: Inetd Servers, Up: Inetd
43268 -Configuring `inetd'
43269 --------------------
43271 - The file `/etc/inetd.conf' tells `inetd' which ports to listen to
43272 -and what server programs to run for them. Normally each entry in the
43273 -file is one line, but you can split it onto multiple lines provided all
43274 -but the first line of the entry start with whitespace. Lines that
43275 -start with `#' are comments.
43277 - Here are two standard entries in `/etc/inetd.conf':
43279 - ftp stream tcp nowait root /libexec/ftpd ftpd
43280 - talk dgram udp wait root /libexec/talkd talkd
43282 - An entry has this format:
43284 - SERVICE STYLE PROTOCOL WAIT USERNAME PROGRAM ARGUMENTS
43286 - The SERVICE field says which service this program provides. It
43287 -should be the name of a service defined in `/etc/services'. `inetd'
43288 -uses SERVICE to decide which port to listen on for this entry.
43290 - The fields STYLE and PROTOCOL specify the communication style and
43291 -the protocol to use for the listening socket. The style should be the
43292 -name of a communication style, converted to lower case and with `SOCK_'
43293 -deleted--for example, `stream' or `dgram'. PROTOCOL should be one of
43294 -the protocols listed in `/etc/protocols'. The typical protocol names
43295 -are `tcp' for byte stream connections and `udp' for unreliable
43296 -datagrams.
43298 - The WAIT field should be either `wait' or `nowait'. Use `wait' if
43299 -STYLE is a connectionless style and the server, once started, handles
43300 -multiple requests as they come in. Use `nowait' if `inetd' should
43301 -start a new process for each message or request that comes in. If
43302 -STYLE uses connections, then WAIT *must* be `nowait'.
43304 - USER is the user name that the server should run as. `inetd' runs
43305 -as root, so it can set the user ID of its children arbitrarily. It's
43306 -best to avoid using `root' for USER if you can; but some servers, such
43307 -as Telnet and FTP, read a username and password themselves. These
43308 -servers need to be root initially so they can log in as commanded by
43309 -the data coming over the network.
43311 - PROGRAM together with ARGUMENTS specifies the command to run to
43312 -start the server. PROGRAM should be an absolute file name specifying
43313 -the executable file to run. ARGUMENTS consists of any number of
43314 -whitespace-separated words, which become the command-line arguments of
43315 -PROGRAM. The first word in ARGUMENTS is argument zero, which should by
43316 -convention be the program name itself (sans directories).
43318 - If you edit `/etc/inetd.conf', you can tell `inetd' to reread the
43319 -file and obey its new contents by sending the `inetd' process the
43320 -`SIGHUP' signal. You'll have to use `ps' to determine the process ID
43321 -of the `inetd' process as it is not fixed.
43323 -\x1f
43324 -File: libc.info, Node: Socket Options, Next: Networks Database, Prev: Inetd, Up: Sockets
43326 -Socket Options
43327 -==============
43329 - This section describes how to read or set various options that modify
43330 -the behavior of sockets and their underlying communications protocols.
43332 - When you are manipulating a socket option, you must specify which
43333 -"level" the option pertains to. This describes whether the option
43334 -applies to the socket interface, or to a lower-level communications
43335 -protocol interface.
43337 -* Menu:
43339 -* Socket Option Functions:: The basic functions for setting and getting
43340 - socket options.
43341 -* Socket-Level Options:: Details of the options at the socket level.
43343 diff -u -udbrN glibc-2.3.2/manual/libc.info-29 glibc-2.3.2-200304020432/manual/libc.info-29
43344 --- glibc-2.3.2/manual/libc.info-29 Sat Mar 1 02:39:41 2003
43345 +++ glibc-2.3.2-200304020432/manual/libc.info-29 Thu Jan 1 01:00:00 1970
43346 @@ -1,1174 +0,0 @@
43347 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
43349 -INFO-DIR-SECTION GNU libraries
43350 -START-INFO-DIR-ENTRY
43351 -* Libc: (libc). C library.
43352 -END-INFO-DIR-ENTRY
43354 - This file documents the GNU C library.
43356 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
43357 -Reference Manual', for Version 2.3.x.
43359 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
43360 -Free Software Foundation, Inc.
43362 - Permission is granted to copy, distribute and/or modify this document
43363 -under the terms of the GNU Free Documentation License, Version 1.1 or
43364 -any later version published by the Free Software Foundation; with the
43365 -Invariant Sections being "Free Software Needs Free Documentation" and
43366 -"GNU Lesser General Public License", the Front-Cover texts being (a)
43367 -(see below), and with the Back-Cover Texts being (b) (see below). A
43368 -copy of the license is included in the section entitled "GNU Free
43369 -Documentation License".
43371 - (a) The FSF's Front-Cover Text is:
43373 - A GNU Manual
43375 - (b) The FSF's Back-Cover Text is:
43377 - You have freedom to copy and modify this GNU Manual, like GNU
43378 -software. Copies published by the Free Software Foundation raise
43379 -funds for GNU development.
43381 -\x1f
43382 -File: libc.info, Node: Socket Option Functions, Next: Socket-Level Options, Up: Socket Options
43384 -Socket Option Functions
43385 ------------------------
43387 - Here are the functions for examining and modifying socket options.
43388 -They are declared in `sys/socket.h'.
43390 - - Function: int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void
43391 - *OPTVAL, socklen_t *OPTLEN-PTR)
43392 - The `getsockopt' function gets information about the value of
43393 - option OPTNAME at level LEVEL for socket SOCKET.
43395 - The option value is stored in a buffer that OPTVAL points to.
43396 - Before the call, you should supply in `*OPTLEN-PTR' the size of
43397 - this buffer; on return, it contains the number of bytes of
43398 - information actually stored in the buffer.
43400 - Most options interpret the OPTVAL buffer as a single `int' value.
43402 - The actual return value of `getsockopt' is `0' on success and `-1'
43403 - on failure. The following `errno' error conditions are defined:
43405 - `EBADF'
43406 - The SOCKET argument is not a valid file descriptor.
43408 - `ENOTSOCK'
43409 - The descriptor SOCKET is not a socket.
43411 - `ENOPROTOOPT'
43412 - The OPTNAME doesn't make sense for the given LEVEL.
43414 - - Function: int setsockopt (int SOCKET, int LEVEL, int OPTNAME, void
43415 - *OPTVAL, socklen_t OPTLEN)
43416 - This function is used to set the socket option OPTNAME at level
43417 - LEVEL for socket SOCKET. The value of the option is passed in the
43418 - buffer OPTVAL of size OPTLEN.
43420 - The return value and error codes for `setsockopt' are the same as
43421 - for `getsockopt'.
43424 -\x1f
43425 -File: libc.info, Node: Socket-Level Options, Prev: Socket Option Functions, Up: Socket Options
43427 -Socket-Level Options
43428 ---------------------
43430 - - Constant: int SOL_SOCKET
43431 - Use this constant as the LEVEL argument to `getsockopt' or
43432 - `setsockopt' to manipulate the socket-level options described in
43433 - this section.
43435 -Here is a table of socket-level option names; all are defined in the
43436 -header file `sys/socket.h'.
43438 -`SO_DEBUG'
43439 - This option toggles recording of debugging information in the
43440 - underlying protocol modules. The value has type `int'; a nonzero
43441 - value means "yes".
43443 -`SO_REUSEADDR'
43444 - This option controls whether `bind' (*note Setting Address::)
43445 - should permit reuse of local addresses for this socket. If you
43446 - enable this option, you can actually have two sockets with the
43447 - same Internet port number; but the system won't allow you to use
43448 - the two identically-named sockets in a way that would confuse the
43449 - Internet. The reason for this option is that some higher-level
43450 - Internet protocols, including FTP, require you to keep reusing the
43451 - same port number.
43453 - The value has type `int'; a nonzero value means "yes".
43455 -`SO_KEEPALIVE'
43456 - This option controls whether the underlying protocol should
43457 - periodically transmit messages on a connected socket. If the peer
43458 - fails to respond to these messages, the connection is considered
43459 - broken. The value has type `int'; a nonzero value means "yes".
43461 -`SO_DONTROUTE'
43462 - This option controls whether outgoing messages bypass the normal
43463 - message routing facilities. If set, messages are sent directly to
43464 - the network interface instead. The value has type `int'; a nonzero
43465 - value means "yes".
43467 -`SO_LINGER'
43468 - This option specifies what should happen when the socket of a type
43469 - that promises reliable delivery still has untransmitted messages
43470 - when it is closed; see *Note Closing a Socket::. The value has
43471 - type `struct linger'.
43473 - - Data Type: struct linger
43474 - This structure type has the following members:
43476 - `int l_onoff'
43477 - This field is interpreted as a boolean. If nonzero,
43478 - `close' blocks until the data are transmitted or the
43479 - timeout period has expired.
43481 - `int l_linger'
43482 - This specifies the timeout period, in seconds.
43484 -`SO_BROADCAST'
43485 - This option controls whether datagrams may be broadcast from the
43486 - socket. The value has type `int'; a nonzero value means "yes".
43488 -`SO_OOBINLINE'
43489 - If this option is set, out-of-band data received on the socket is
43490 - placed in the normal input queue. This permits it to be read using
43491 - `read' or `recv' without specifying the `MSG_OOB' flag. *Note
43492 - Out-of-Band Data::. The value has type `int'; a nonzero value
43493 - means "yes".
43495 -`SO_SNDBUF'
43496 - This option gets or sets the size of the output buffer. The value
43497 - is a `size_t', which is the size in bytes.
43499 -`SO_RCVBUF'
43500 - This option gets or sets the size of the input buffer. The value
43501 - is a `size_t', which is the size in bytes.
43503 -`SO_STYLE'
43504 -`SO_TYPE'
43505 - This option can be used with `getsockopt' only. It is used to get
43506 - the socket's communication style. `SO_TYPE' is the historical
43507 - name, and `SO_STYLE' is the preferred name in GNU. The value has
43508 - type `int' and its value designates a communication style; see
43509 - *Note Communication Styles::.
43511 -`SO_ERROR'
43512 - This option can be used with `getsockopt' only. It is used to
43513 - reset the error status of the socket. The value is an `int',
43514 - which represents the previous error status.
43516 -\x1f
43517 -File: libc.info, Node: Networks Database, Prev: Socket Options, Up: Sockets
43519 -Networks Database
43520 -=================
43522 - Many systems come with a database that records a list of networks
43523 -known to the system developer. This is usually kept either in the file
43524 -`/etc/networks' or in an equivalent from a name server. This data base
43525 -is useful for routing programs such as `route', but it is not useful
43526 -for programs that simply communicate over the network. We provide
43527 -functions to access this database, which are declared in `netdb.h'.
43529 - - Data Type: struct netent
43530 - This data type is used to represent information about entries in
43531 - the networks database. It has the following members:
43533 - `char *n_name'
43534 - This is the "official" name of the network.
43536 - `char **n_aliases'
43537 - These are alternative names for the network, represented as a
43538 - vector of strings. A null pointer terminates the array.
43540 - `int n_addrtype'
43541 - This is the type of the network number; this is always equal
43542 - to `AF_INET' for Internet networks.
43544 - `unsigned long int n_net'
43545 - This is the network number. Network numbers are returned in
43546 - host byte order; see *Note Byte Order::.
43548 - Use the `getnetbyname' or `getnetbyaddr' functions to search the
43549 -networks database for information about a specific network. The
43550 -information is returned in a statically-allocated structure; you must
43551 -copy the information if you need to save it.
43553 - - Function: struct netent * getnetbyname (const char *NAME)
43554 - The `getnetbyname' function returns information about the network
43555 - named NAME. It returns a null pointer if there is no such network.
43557 - - Function: struct netent * getnetbyaddr (unsigned long int NET, int
43558 - TYPE)
43559 - The `getnetbyaddr' function returns information about the network
43560 - of type TYPE with number NET. You should specify a value of
43561 - `AF_INET' for the TYPE argument for Internet networks.
43563 - `getnetbyaddr' returns a null pointer if there is no such network.
43565 - You can also scan the networks database using `setnetent',
43566 -`getnetent' and `endnetent'. Be careful when using these functions
43567 -because they are not reentrant.
43569 - - Function: void setnetent (int STAYOPEN)
43570 - This function opens and rewinds the networks database.
43572 - If the STAYOPEN argument is nonzero, this sets a flag so that
43573 - subsequent calls to `getnetbyname' or `getnetbyaddr' will not
43574 - close the database (as they usually would). This makes for more
43575 - efficiency if you call those functions several times, by avoiding
43576 - reopening the database for each call.
43578 - - Function: struct netent * getnetent (void)
43579 - This function returns the next entry in the networks database. It
43580 - returns a null pointer if there are no more entries.
43582 - - Function: void endnetent (void)
43583 - This function closes the networks database.
43585 -\x1f
43586 -File: libc.info, Node: Low-Level Terminal Interface, Next: Syslog, Prev: Sockets, Up: Top
43588 -Low-Level Terminal Interface
43589 -****************************
43591 - This chapter describes functions that are specific to terminal
43592 -devices. You can use these functions to do things like turn off input
43593 -echoing; set serial line characteristics such as line speed and flow
43594 -control; and change which characters are used for end-of-file,
43595 -command-line editing, sending signals, and similar control functions.
43597 - Most of the functions in this chapter operate on file descriptors.
43598 -*Note Low-Level I/O::, for more information about what a file
43599 -descriptor is and how to open a file descriptor for a terminal device.
43601 -* Menu:
43603 -* Is It a Terminal:: How to determine if a file is a terminal
43604 - device, and what its name is.
43605 -* I/O Queues:: About flow control and typeahead.
43606 -* Canonical or Not:: Two basic styles of input processing.
43607 -* Terminal Modes:: How to examine and modify flags controlling
43608 - details of terminal I/O: echoing,
43609 - signals, editing. Posix.
43610 -* BSD Terminal Modes:: BSD compatible terminal mode setting
43611 -* Line Control:: Sending break sequences, clearing
43612 - terminal buffers ...
43613 -* Noncanon Example:: How to read single characters without echo.
43614 -* Pseudo-Terminals:: How to open a pseudo-terminal.
43616 -\x1f
43617 -File: libc.info, Node: Is It a Terminal, Next: I/O Queues, Up: Low-Level Terminal Interface
43619 -Identifying Terminals
43620 -=====================
43622 - The functions described in this chapter only work on files that
43623 -correspond to terminal devices. You can find out whether a file
43624 -descriptor is associated with a terminal by using the `isatty' function.
43626 - Prototypes for the functions in this section are declared in the
43627 -header file `unistd.h'.
43629 - - Function: int isatty (int FILEDES)
43630 - This function returns `1' if FILEDES is a file descriptor
43631 - associated with an open terminal device, and 0 otherwise.
43633 - If a file descriptor is associated with a terminal, you can get its
43634 -associated file name using the `ttyname' function. See also the
43635 -`ctermid' function, described in *Note Identifying the Terminal::.
43637 - - Function: char * ttyname (int FILEDES)
43638 - If the file descriptor FILEDES is associated with a terminal
43639 - device, the `ttyname' function returns a pointer to a
43640 - statically-allocated, null-terminated string containing the file
43641 - name of the terminal file. The value is a null pointer if the
43642 - file descriptor isn't associated with a terminal, or the file name
43643 - cannot be determined.
43645 - - Function: int ttyname_r (int FILEDES, char *BUF, size_t LEN)
43646 - The `ttyname_r' function is similar to the `ttyname' function
43647 - except that it places its result into the user-specified buffer
43648 - starting at BUF with length LEN.
43650 - The normal return value from `ttyname_r' is 0. Otherwise an error
43651 - number is returned to indicate the error. The following `errno'
43652 - error conditions are defined for this function:
43654 - `EBADF'
43655 - The FILEDES argument is not a valid file descriptor.
43657 - `ENOTTY'
43658 - The FILEDES is not associated with a terminal.
43660 - `ERANGE'
43661 - The buffer length LEN is too small to store the string to be
43662 - returned.
43664 -\x1f
43665 -File: libc.info, Node: I/O Queues, Next: Canonical or Not, Prev: Is It a Terminal, Up: Low-Level Terminal Interface
43667 -I/O Queues
43668 -==========
43670 - Many of the remaining functions in this section refer to the input
43671 -and output queues of a terminal device. These queues implement a form
43672 -of buffering _within the kernel_ independent of the buffering
43673 -implemented by I/O streams (*note I/O on Streams::).
43675 - The "terminal input queue" is also sometimes referred to as its
43676 -"typeahead buffer". It holds the characters that have been received
43677 -from the terminal but not yet read by any process.
43679 - The size of the input queue is described by the `MAX_INPUT' and
43680 -`_POSIX_MAX_INPUT' parameters; see *Note Limits for Files::. You are
43681 -guaranteed a queue size of at least `MAX_INPUT', but the queue might be
43682 -larger, and might even dynamically change size. If input flow control
43683 -is enabled by setting the `IXOFF' input mode bit (*note Input Modes::),
43684 -the terminal driver transmits STOP and START characters to the terminal
43685 -when necessary to prevent the queue from overflowing. Otherwise, input
43686 -may be lost if it comes in too fast from the terminal. In canonical
43687 -mode, all input stays in the queue until a newline character is
43688 -received, so the terminal input queue can fill up when you type a very
43689 -long line. *Note Canonical or Not::.
43691 - The "terminal output queue" is like the input queue, but for output;
43692 -it contains characters that have been written by processes, but not yet
43693 -transmitted to the terminal. If output flow control is enabled by
43694 -setting the `IXON' input mode bit (*note Input Modes::), the terminal
43695 -driver obeys START and STOP characters sent by the terminal to stop and
43696 -restart transmission of output.
43698 - "Clearing" the terminal input queue means discarding any characters
43699 -that have been received but not yet read. Similarly, clearing the
43700 -terminal output queue means discarding any characters that have been
43701 -written but not yet transmitted.
43703 -\x1f
43704 -File: libc.info, Node: Canonical or Not, Next: Terminal Modes, Prev: I/O Queues, Up: Low-Level Terminal Interface
43706 -Two Styles of Input: Canonical or Not
43707 -=====================================
43709 - POSIX systems support two basic modes of input: canonical and
43710 -noncanonical.
43712 - In "canonical input processing" mode, terminal input is processed in
43713 -lines terminated by newline (`'\n''), EOF, or EOL characters. No input
43714 -can be read until an entire line has been typed by the user, and the
43715 -`read' function (*note I/O Primitives::) returns at most a single line
43716 -of input, no matter how many bytes are requested.
43718 - In canonical input mode, the operating system provides input editing
43719 -facilities: some characters are interpreted specially to perform editing
43720 -operations within the current line of text, such as ERASE and KILL.
43721 -*Note Editing Characters::.
43723 - The constants `_POSIX_MAX_CANON' and `MAX_CANON' parameterize the
43724 -maximum number of bytes which may appear in a single line of canonical
43725 -input. *Note Limits for Files::. You are guaranteed a maximum line
43726 -length of at least `MAX_CANON' bytes, but the maximum might be larger,
43727 -and might even dynamically change size.
43729 - In "noncanonical input processing" mode, characters are not grouped
43730 -into lines, and ERASE and KILL processing is not performed. The
43731 -granularity with which bytes are read in noncanonical input mode is
43732 -controlled by the MIN and TIME settings. *Note Noncanonical Input::.
43734 - Most programs use canonical input mode, because this gives the user a
43735 -way to edit input line by line. The usual reason to use noncanonical
43736 -mode is when the program accepts single-character commands or provides
43737 -its own editing facilities.
43739 - The choice of canonical or noncanonical input is controlled by the
43740 -`ICANON' flag in the `c_lflag' member of `struct termios'. *Note Local
43741 -Modes::.
43743 -\x1f
43744 -File: libc.info, Node: Terminal Modes, Next: BSD Terminal Modes, Prev: Canonical or Not, Up: Low-Level Terminal Interface
43746 -Terminal Modes
43747 -==============
43749 - This section describes the various terminal attributes that control
43750 -how input and output are done. The functions, data structures, and
43751 -symbolic constants are all declared in the header file `termios.h'.
43753 - Don't confuse terminal attributes with file attributes. A device
43754 -special file which is associated with a terminal has file attributes as
43755 -described in *Note File Attributes::. These are unrelated to the
43756 -attributes of the terminal device itself, which are discussed in this
43757 -section.
43759 -* Menu:
43761 -* Mode Data Types:: The data type `struct termios' and
43762 - related types.
43763 -* Mode Functions:: Functions to read and set the terminal
43764 - attributes.
43765 -* Setting Modes:: The right way to set terminal attributes
43766 - reliably.
43767 -* Input Modes:: Flags controlling low-level input handling.
43768 -* Output Modes:: Flags controlling low-level output handling.
43769 -* Control Modes:: Flags controlling serial port behavior.
43770 -* Local Modes:: Flags controlling high-level input handling.
43771 -* Line Speed:: How to read and set the terminal line speed.
43772 -* Special Characters:: Characters that have special effects,
43773 - and how to change them.
43774 -* Noncanonical Input:: Controlling how long to wait for input.
43776 -\x1f
43777 -File: libc.info, Node: Mode Data Types, Next: Mode Functions, Up: Terminal Modes
43779 -Terminal Mode Data Types
43780 -------------------------
43782 - The entire collection of attributes of a terminal is stored in a
43783 -structure of type `struct termios'. This structure is used with the
43784 -functions `tcgetattr' and `tcsetattr' to read and set the attributes.
43786 - - Data Type: struct termios
43787 - Structure that records all the I/O attributes of a terminal. The
43788 - structure includes at least the following members:
43790 - `tcflag_t c_iflag'
43791 - A bit mask specifying flags for input modes; see *Note Input
43792 - Modes::.
43794 - `tcflag_t c_oflag'
43795 - A bit mask specifying flags for output modes; see *Note
43796 - Output Modes::.
43798 - `tcflag_t c_cflag'
43799 - A bit mask specifying flags for control modes; see *Note
43800 - Control Modes::.
43802 - `tcflag_t c_lflag'
43803 - A bit mask specifying flags for local modes; see *Note Local
43804 - Modes::.
43806 - `cc_t c_cc[NCCS]'
43807 - An array specifying which characters are associated with
43808 - various control functions; see *Note Special Characters::.
43810 - The `struct termios' structure also contains members which encode
43811 - input and output transmission speeds, but the representation is
43812 - not specified. *Note Line Speed::, for how to examine and store
43813 - the speed values.
43815 - The following sections describe the details of the members of the
43816 -`struct termios' structure.
43818 - - Data Type: tcflag_t
43819 - This is an unsigned integer type used to represent the various bit
43820 - masks for terminal flags.
43822 - - Data Type: cc_t
43823 - This is an unsigned integer type used to represent characters
43824 - associated with various terminal control functions.
43826 - - Macro: int NCCS
43827 - The value of this macro is the number of elements in the `c_cc'
43828 - array.
43830 -\x1f
43831 -File: libc.info, Node: Mode Functions, Next: Setting Modes, Prev: Mode Data Types, Up: Terminal Modes
43833 -Terminal Mode Functions
43834 ------------------------
43836 - - Function: int tcgetattr (int FILEDES, struct termios *TERMIOS-P)
43837 - This function is used to examine the attributes of the terminal
43838 - device with file descriptor FILEDES. The attributes are returned
43839 - in the structure that TERMIOS-P points to.
43841 - If successful, `tcgetattr' returns 0. A return value of -1
43842 - indicates an error. The following `errno' error conditions are
43843 - defined for this function:
43845 - `EBADF'
43846 - The FILEDES argument is not a valid file descriptor.
43848 - `ENOTTY'
43849 - The FILEDES is not associated with a terminal.
43851 - - Function: int tcsetattr (int FILEDES, int WHEN, const struct termios
43852 - *TERMIOS-P)
43853 - This function sets the attributes of the terminal device with file
43854 - descriptor FILEDES. The new attributes are taken from the
43855 - structure that TERMIOS-P points to.
43857 - The WHEN argument specifies how to deal with input and output
43858 - already queued. It can be one of the following values:
43860 - `TCSANOW'
43861 - Make the change immediately.
43863 - `TCSADRAIN'
43864 - Make the change after waiting until all queued output has
43865 - been written. You should usually use this option when
43866 - changing parameters that affect output.
43868 - `TCSAFLUSH'
43869 - This is like `TCSADRAIN', but also discards any queued input.
43871 - `TCSASOFT'
43872 - This is a flag bit that you can add to any of the above
43873 - alternatives. Its meaning is to inhibit alteration of the
43874 - state of the terminal hardware. It is a BSD extension; it is
43875 - only supported on BSD systems and the GNU system.
43877 - Using `TCSASOFT' is exactly the same as setting the `CIGNORE'
43878 - bit in the `c_cflag' member of the structure TERMIOS-P points
43879 - to. *Note Control Modes::, for a description of `CIGNORE'.
43881 - If this function is called from a background process on its
43882 - controlling terminal, normally all processes in the process group
43883 - are sent a `SIGTTOU' signal, in the same way as if the process
43884 - were trying to write to the terminal. The exception is if the
43885 - calling process itself is ignoring or blocking `SIGTTOU' signals,
43886 - in which case the operation is performed and no signal is sent.
43887 - *Note Job Control::.
43889 - If successful, `tcsetattr' returns 0. A return value of -1
43890 - indicates an error. The following `errno' error conditions are
43891 - defined for this function:
43893 - `EBADF'
43894 - The FILEDES argument is not a valid file descriptor.
43896 - `ENOTTY'
43897 - The FILEDES is not associated with a terminal.
43899 - `EINVAL'
43900 - Either the value of the `when' argument is not valid, or
43901 - there is something wrong with the data in the TERMIOS-P
43902 - argument.
43904 - Although `tcgetattr' and `tcsetattr' specify the terminal device
43905 -with a file descriptor, the attributes are those of the terminal device
43906 -itself and not of the file descriptor. This means that the effects of
43907 -changing terminal attributes are persistent; if another process opens
43908 -the terminal file later on, it will see the changed attributes even
43909 -though it doesn't have anything to do with the open file descriptor you
43910 -originally specified in changing the attributes.
43912 - Similarly, if a single process has multiple or duplicated file
43913 -descriptors for the same terminal device, changing the terminal
43914 -attributes affects input and output to all of these file descriptors.
43915 -This means, for example, that you can't open one file descriptor or
43916 -stream to read from a terminal in the normal line-buffered, echoed
43917 -mode; and simultaneously have another file descriptor for the same
43918 -terminal that you use to read from it in single-character, non-echoed
43919 -mode. Instead, you have to explicitly switch the terminal back and
43920 -forth between the two modes.
43922 -\x1f
43923 -File: libc.info, Node: Setting Modes, Next: Input Modes, Prev: Mode Functions, Up: Terminal Modes
43925 -Setting Terminal Modes Properly
43926 --------------------------------
43928 - When you set terminal modes, you should call `tcgetattr' first to
43929 -get the current modes of the particular terminal device, modify only
43930 -those modes that you are really interested in, and store the result with
43931 -`tcsetattr'.
43933 - It's a bad idea to simply initialize a `struct termios' structure to
43934 -a chosen set of attributes and pass it directly to `tcsetattr'. Your
43935 -program may be run years from now, on systems that support members not
43936 -documented in this manual. The way to avoid setting these members to
43937 -unreasonable values is to avoid changing them.
43939 - What's more, different terminal devices may require different mode
43940 -settings in order to function properly. So you should avoid blindly
43941 -copying attributes from one terminal device to another.
43943 - When a member contains a collection of independent flags, as the
43944 -`c_iflag', `c_oflag' and `c_cflag' members do, even setting the entire
43945 -member is a bad idea, because particular operating systems have their
43946 -own flags. Instead, you should start with the current value of the
43947 -member and alter only the flags whose values matter in your program,
43948 -leaving any other flags unchanged.
43950 - Here is an example of how to set one flag (`ISTRIP') in the `struct
43951 -termios' structure while properly preserving all the other data in the
43952 -structure:
43954 - int
43955 - set_istrip (int desc, int value)
43957 - struct termios settings;
43958 - int result;
43960 - result = tcgetattr (desc, &settings);
43961 - if (result < 0)
43963 - perror ("error in tcgetattr");
43964 - return 0;
43966 - settings.c_iflag &= ~ISTRIP;
43967 - if (value)
43968 - settings.c_iflag |= ISTRIP;
43969 - result = tcsetattr (desc, TCSANOW, &settings);
43970 - if (result < 0)
43972 - perror ("error in tcsetattr");
43973 - return 0;
43975 - return 1;
43978 -\x1f
43979 -File: libc.info, Node: Input Modes, Next: Output Modes, Prev: Setting Modes, Up: Terminal Modes
43981 -Input Modes
43982 ------------
43984 - This section describes the terminal attribute flags that control
43985 -fairly low-level aspects of input processing: handling of parity errors,
43986 -break signals, flow control, and <RET> and <LFD> characters.
43988 - All of these flags are bits in the `c_iflag' member of the `struct
43989 -termios' structure. The member is an integer, and you change flags
43990 -using the operators `&', `|' and `^'. Don't try to specify the entire
43991 -value for `c_iflag'--instead, change only specific flags and leave the
43992 -rest untouched (*note Setting Modes::).
43994 - - Macro: tcflag_t INPCK
43995 - If this bit is set, input parity checking is enabled. If it is
43996 - not set, no checking at all is done for parity errors on input; the
43997 - characters are simply passed through to the application.
43999 - Parity checking on input processing is independent of whether
44000 - parity detection and generation on the underlying terminal
44001 - hardware is enabled; see *Note Control Modes::. For example, you
44002 - could clear the `INPCK' input mode flag and set the `PARENB'
44003 - control mode flag to ignore parity errors on input, but still
44004 - generate parity on output.
44006 - If this bit is set, what happens when a parity error is detected
44007 - depends on whether the `IGNPAR' or `PARMRK' bits are set. If
44008 - neither of these bits are set, a byte with a parity error is
44009 - passed to the application as a `'\0'' character.
44011 - - Macro: tcflag_t IGNPAR
44012 - If this bit is set, any byte with a framing or parity error is
44013 - ignored. This is only useful if `INPCK' is also set.
44015 - - Macro: tcflag_t PARMRK
44016 - If this bit is set, input bytes with parity or framing errors are
44017 - marked when passed to the program. This bit is meaningful only
44018 - when `INPCK' is set and `IGNPAR' is not set.
44020 - The way erroneous bytes are marked is with two preceding bytes,
44021 - `377' and `0'. Thus, the program actually reads three bytes for
44022 - one erroneous byte received from the terminal.
44024 - If a valid byte has the value `0377', and `ISTRIP' (see below) is
44025 - not set, the program might confuse it with the prefix that marks a
44026 - parity error. So a valid byte `0377' is passed to the program as
44027 - two bytes, `0377' `0377', in this case.
44029 - - Macro: tcflag_t ISTRIP
44030 - If this bit is set, valid input bytes are stripped to seven bits;
44031 - otherwise, all eight bits are available for programs to read.
44033 - - Macro: tcflag_t IGNBRK
44034 - If this bit is set, break conditions are ignored.
44036 - A "break condition" is defined in the context of asynchronous
44037 - serial data transmission as a series of zero-value bits longer
44038 - than a single byte.
44040 - - Macro: tcflag_t BRKINT
44041 - If this bit is set and `IGNBRK' is not set, a break condition
44042 - clears the terminal input and output queues and raises a `SIGINT'
44043 - signal for the foreground process group associated with the
44044 - terminal.
44046 - If neither `BRKINT' nor `IGNBRK' are set, a break condition is
44047 - passed to the application as a single `'\0'' character if `PARMRK'
44048 - is not set, or otherwise as a three-character sequence `'\377'',
44049 - `'\0'', `'\0''.
44051 - - Macro: tcflag_t IGNCR
44052 - If this bit is set, carriage return characters (`'\r'') are
44053 - discarded on input. Discarding carriage return may be useful on
44054 - terminals that send both carriage return and linefeed when you
44055 - type the <RET> key.
44057 - - Macro: tcflag_t ICRNL
44058 - If this bit is set and `IGNCR' is not set, carriage return
44059 - characters (`'\r'') received as input are passed to the
44060 - application as newline characters (`'\n'').
44062 - - Macro: tcflag_t INLCR
44063 - If this bit is set, newline characters (`'\n'') received as input
44064 - are passed to the application as carriage return characters
44065 - (`'\r'').
44067 - - Macro: tcflag_t IXOFF
44068 - If this bit is set, start/stop control on input is enabled. In
44069 - other words, the computer sends STOP and START characters as
44070 - necessary to prevent input from coming in faster than programs are
44071 - reading it. The idea is that the actual terminal hardware that is
44072 - generating the input data responds to a STOP character by
44073 - suspending transmission, and to a START character by resuming
44074 - transmission. *Note Start/Stop Characters::.
44076 - - Macro: tcflag_t IXON
44077 - If this bit is set, start/stop control on output is enabled. In
44078 - other words, if the computer receives a STOP character, it
44079 - suspends output until a START character is received. In this
44080 - case, the STOP and START characters are never passed to the
44081 - application program. If this bit is not set, then START and STOP
44082 - can be read as ordinary characters. *Note Start/Stop Characters::.
44084 - - Macro: tcflag_t IXANY
44085 - If this bit is set, any input character restarts output when
44086 - output has been suspended with the STOP character. Otherwise,
44087 - only the START character restarts output.
44089 - This is a BSD extension; it exists only on BSD systems and the GNU
44090 - system.
44092 - - Macro: tcflag_t IMAXBEL
44093 - If this bit is set, then filling up the terminal input buffer
44094 - sends a BEL character (code `007') to the terminal to ring the
44095 - bell.
44097 - This is a BSD extension.
44099 -\x1f
44100 -File: libc.info, Node: Output Modes, Next: Control Modes, Prev: Input Modes, Up: Terminal Modes
44102 -Output Modes
44103 -------------
44105 - This section describes the terminal flags and fields that control how
44106 -output characters are translated and padded for display. All of these
44107 -are contained in the `c_oflag' member of the `struct termios' structure.
44109 - The `c_oflag' member itself is an integer, and you change the flags
44110 -and fields using the operators `&', `|', and `^'. Don't try to specify
44111 -the entire value for `c_oflag'--instead, change only specific flags and
44112 -leave the rest untouched (*note Setting Modes::).
44114 - - Macro: tcflag_t OPOST
44115 - If this bit is set, output data is processed in some unspecified
44116 - way so that it is displayed appropriately on the terminal device.
44117 - This typically includes mapping newline characters (`'\n'') onto
44118 - carriage return and linefeed pairs.
44120 - If this bit isn't set, the characters are transmitted as-is.
44122 - The following three bits are BSD features, and they exist only BSD
44123 -systems and the GNU system. They are effective only if `OPOST' is set.
44125 - - Macro: tcflag_t ONLCR
44126 - If this bit is set, convert the newline character on output into a
44127 - pair of characters, carriage return followed by linefeed.
44129 - - Macro: tcflag_t OXTABS
44130 - If this bit is set, convert tab characters on output into the
44131 - appropriate number of spaces to emulate a tab stop every eight
44132 - columns.
44134 - - Macro: tcflag_t ONOEOT
44135 - If this bit is set, discard `C-d' characters (code `004') on
44136 - output. These characters cause many dial-up terminals to
44137 - disconnect.
44139 -\x1f
44140 -File: libc.info, Node: Control Modes, Next: Local Modes, Prev: Output Modes, Up: Terminal Modes
44142 -Control Modes
44143 --------------
44145 - This section describes the terminal flags and fields that control
44146 -parameters usually associated with asynchronous serial data
44147 -transmission. These flags may not make sense for other kinds of
44148 -terminal ports (such as a network connection pseudo-terminal). All of
44149 -these are contained in the `c_cflag' member of the `struct termios'
44150 -structure.
44152 - The `c_cflag' member itself is an integer, and you change the flags
44153 -and fields using the operators `&', `|', and `^'. Don't try to specify
44154 -the entire value for `c_cflag'--instead, change only specific flags and
44155 -leave the rest untouched (*note Setting Modes::).
44157 - - Macro: tcflag_t CLOCAL
44158 - If this bit is set, it indicates that the terminal is connected
44159 - "locally" and that the modem status lines (such as carrier detect)
44160 - should be ignored.
44162 - On many systems if this bit is not set and you call `open' without
44163 - the `O_NONBLOCK' flag set, `open' blocks until a modem connection
44164 - is established.
44166 - If this bit is not set and a modem disconnect is detected, a
44167 - `SIGHUP' signal is sent to the controlling process group for the
44168 - terminal (if it has one). Normally, this causes the process to
44169 - exit; see *Note Signal Handling::. Reading from the terminal
44170 - after a disconnect causes an end-of-file condition, and writing
44171 - causes an `EIO' error to be returned. The terminal device must be
44172 - closed and reopened to clear the condition.
44174 - - Macro: tcflag_t HUPCL
44175 - If this bit is set, a modem disconnect is generated when all
44176 - processes that have the terminal device open have either closed
44177 - the file or exited.
44179 - - Macro: tcflag_t CREAD
44180 - If this bit is set, input can be read from the terminal.
44181 - Otherwise, input is discarded when it arrives.
44183 - - Macro: tcflag_t CSTOPB
44184 - If this bit is set, two stop bits are used. Otherwise, only one
44185 - stop bit is used.
44187 - - Macro: tcflag_t PARENB
44188 - If this bit is set, generation and detection of a parity bit are
44189 - enabled. *Note Input Modes::, for information on how input parity
44190 - errors are handled.
44192 - If this bit is not set, no parity bit is added to output
44193 - characters, and input characters are not checked for correct
44194 - parity.
44196 - - Macro: tcflag_t PARODD
44197 - This bit is only useful if `PARENB' is set. If `PARODD' is set,
44198 - odd parity is used, otherwise even parity is used.
44200 - The control mode flags also includes a field for the number of bits
44201 -per character. You can use the `CSIZE' macro as a mask to extract the
44202 -value, like this: `settings.c_cflag & CSIZE'.
44204 - - Macro: tcflag_t CSIZE
44205 - This is a mask for the number of bits per character.
44207 - - Macro: tcflag_t CS5
44208 - This specifies five bits per byte.
44210 - - Macro: tcflag_t CS6
44211 - This specifies six bits per byte.
44213 - - Macro: tcflag_t CS7
44214 - This specifies seven bits per byte.
44216 - - Macro: tcflag_t CS8
44217 - This specifies eight bits per byte.
44219 - The following four bits are BSD extensions; this exist only on BSD
44220 -systems and the GNU system.
44222 - - Macro: tcflag_t CCTS_OFLOW
44223 - If this bit is set, enable flow control of output based on the CTS
44224 - wire (RS232 protocol).
44226 - - Macro: tcflag_t CRTS_IFLOW
44227 - If this bit is set, enable flow control of input based on the RTS
44228 - wire (RS232 protocol).
44230 - - Macro: tcflag_t MDMBUF
44231 - If this bit is set, enable carrier-based flow control of output.
44233 - - Macro: tcflag_t CIGNORE
44234 - If this bit is set, it says to ignore the control modes and line
44235 - speed values entirely. This is only meaningful in a call to
44236 - `tcsetattr'.
44238 - The `c_cflag' member and the line speed values returned by
44239 - `cfgetispeed' and `cfgetospeed' will be unaffected by the call.
44240 - `CIGNORE' is useful if you want to set all the software modes in
44241 - the other members, but leave the hardware details in `c_cflag'
44242 - unchanged. (This is how the `TCSASOFT' flag to `tcsettattr'
44243 - works.)
44245 - This bit is never set in the structure filled in by `tcgetattr'.
44247 -\x1f
44248 -File: libc.info, Node: Local Modes, Next: Line Speed, Prev: Control Modes, Up: Terminal Modes
44250 -Local Modes
44251 ------------
44253 - This section describes the flags for the `c_lflag' member of the
44254 -`struct termios' structure. These flags generally control higher-level
44255 -aspects of input processing than the input modes flags described in
44256 -*Note Input Modes::, such as echoing, signals, and the choice of
44257 -canonical or noncanonical input.
44259 - The `c_lflag' member itself is an integer, and you change the flags
44260 -and fields using the operators `&', `|', and `^'. Don't try to specify
44261 -the entire value for `c_lflag'--instead, change only specific flags and
44262 -leave the rest untouched (*note Setting Modes::).
44264 - - Macro: tcflag_t ICANON
44265 - This bit, if set, enables canonical input processing mode.
44266 - Otherwise, input is processed in noncanonical mode. *Note
44267 - Canonical or Not::.
44269 - - Macro: tcflag_t ECHO
44270 - If this bit is set, echoing of input characters back to the
44271 - terminal is enabled.
44273 - - Macro: tcflag_t ECHOE
44274 - If this bit is set, echoing indicates erasure of input with the
44275 - ERASE character by erasing the last character in the current line
44276 - from the screen. Otherwise, the character erased is re-echoed to
44277 - show what has happened (suitable for a printing terminal).
44279 - This bit only controls the display behavior; the `ICANON' bit by
44280 - itself controls actual recognition of the ERASE character and
44281 - erasure of input, without which `ECHOE' is simply irrelevant.
44283 - - Macro: tcflag_t ECHOPRT
44284 - This bit is like `ECHOE', enables display of the ERASE character in
44285 - a way that is geared to a hardcopy terminal. When you type the
44286 - ERASE character, a `\' character is printed followed by the first
44287 - character erased. Typing the ERASE character again just prints
44288 - the next character erased. Then, the next time you type a normal
44289 - character, a `/' character is printed before the character echoes.
44291 - This is a BSD extension, and exists only in BSD systems and the
44292 - GNU system.
44294 - - Macro: tcflag_t ECHOK
44295 - This bit enables special display of the KILL character by moving
44296 - to a new line after echoing the KILL character normally. The
44297 - behavior of `ECHOKE' (below) is nicer to look at.
44299 - If this bit is not set, the KILL character echoes just as it would
44300 - if it were not the KILL character. Then it is up to the user to
44301 - remember that the KILL character has erased the preceding input;
44302 - there is no indication of this on the screen.
44304 - This bit only controls the display behavior; the `ICANON' bit by
44305 - itself controls actual recognition of the KILL character and
44306 - erasure of input, without which `ECHOK' is simply irrelevant.
44308 - - Macro: tcflag_t ECHOKE
44309 - This bit is similar to `ECHOK'. It enables special display of the
44310 - KILL character by erasing on the screen the entire line that has
44311 - been killed. This is a BSD extension, and exists only in BSD
44312 - systems and the GNU system.
44314 - - Macro: tcflag_t ECHONL
44315 - If this bit is set and the `ICANON' bit is also set, then the
44316 - newline (`'\n'') character is echoed even if the `ECHO' bit is not
44317 - set.
44319 - - Macro: tcflag_t ECHOCTL
44320 - If this bit is set and the `ECHO' bit is also set, echo control
44321 - characters with `^' followed by the corresponding text character.
44322 - Thus, control-A echoes as `^A'. This is usually the preferred mode
44323 - for interactive input, because echoing a control character back to
44324 - the terminal could have some undesired effect on the terminal.
44326 - This is a BSD extension, and exists only in BSD systems and the
44327 - GNU system.
44329 - - Macro: tcflag_t ISIG
44330 - This bit controls whether the INTR, QUIT, and SUSP characters are
44331 - recognized. The functions associated with these characters are
44332 - performed if and only if this bit is set. Being in canonical or
44333 - noncanonical input mode has no affect on the interpretation of
44334 - these characters.
44336 - You should use caution when disabling recognition of these
44337 - characters. Programs that cannot be interrupted interactively are
44338 - very user-unfriendly. If you clear this bit, your program should
44339 - provide some alternate interface that allows the user to
44340 - interactively send the signals associated with these characters,
44341 - or to escape from the program.
44343 - *Note Signal Characters::.
44345 - - Macro: tcflag_t IEXTEN
44346 - POSIX.1 gives `IEXTEN' implementation-defined meaning, so you
44347 - cannot rely on this interpretation on all systems.
44349 - On BSD systems and the GNU system, it enables the LNEXT and
44350 - DISCARD characters. *Note Other Special::.
44352 - - Macro: tcflag_t NOFLSH
44353 - Normally, the INTR, QUIT, and SUSP characters cause input and
44354 - output queues for the terminal to be cleared. If this bit is set,
44355 - the queues are not cleared.
44357 - - Macro: tcflag_t TOSTOP
44358 - If this bit is set and the system supports job control, then
44359 - `SIGTTOU' signals are generated by background processes that
44360 - attempt to write to the terminal. *Note Access to the Terminal::.
44362 - The following bits are BSD extensions; they exist only in BSD systems
44363 -and the GNU system.
44365 - - Macro: tcflag_t ALTWERASE
44366 - This bit determines how far the WERASE character should erase. The
44367 - WERASE character erases back to the beginning of a word; the
44368 - question is, where do words begin?
44370 - If this bit is clear, then the beginning of a word is a
44371 - nonwhitespace character following a whitespace character. If the
44372 - bit is set, then the beginning of a word is an alphanumeric
44373 - character or underscore following a character which is none of
44374 - those.
44376 - *Note Editing Characters::, for more information about the WERASE
44377 - character.
44379 - - Macro: tcflag_t FLUSHO
44380 - This is the bit that toggles when the user types the DISCARD
44381 - character. While this bit is set, all output is discarded. *Note
44382 - Other Special::.
44384 - - Macro: tcflag_t NOKERNINFO
44385 - Setting this bit disables handling of the STATUS character. *Note
44386 - Other Special::.
44388 - - Macro: tcflag_t PENDIN
44389 - If this bit is set, it indicates that there is a line of input that
44390 - needs to be reprinted. Typing the REPRINT character sets this
44391 - bit; the bit remains set until reprinting is finished. *Note
44392 - Editing Characters::.
44394 -\x1f
44395 -File: libc.info, Node: Line Speed, Next: Special Characters, Prev: Local Modes, Up: Terminal Modes
44397 -Line Speed
44398 -----------
44400 - The terminal line speed tells the computer how fast to read and write
44401 -data on the terminal.
44403 - If the terminal is connected to a real serial line, the terminal
44404 -speed you specify actually controls the line--if it doesn't match the
44405 -terminal's own idea of the speed, communication does not work. Real
44406 -serial ports accept only certain standard speeds. Also, particular
44407 -hardware may not support even all the standard speeds. Specifying a
44408 -speed of zero hangs up a dialup connection and turns off modem control
44409 -signals.
44411 - If the terminal is not a real serial line (for example, if it is a
44412 -network connection), then the line speed won't really affect data
44413 -transmission speed, but some programs will use it to determine the
44414 -amount of padding needed. It's best to specify a line speed value that
44415 -matches the actual speed of the actual terminal, but you can safely
44416 -experiment with different values to vary the amount of padding.
44418 - There are actually two line speeds for each terminal, one for input
44419 -and one for output. You can set them independently, but most often
44420 -terminals use the same speed for both directions.
44422 - The speed values are stored in the `struct termios' structure, but
44423 -don't try to access them in the `struct termios' structure directly.
44424 -Instead, you should use the following functions to read and store them:
44426 - - Function: speed_t cfgetospeed (const struct termios *TERMIOS-P)
44427 - This function returns the output line speed stored in the structure
44428 - `*TERMIOS-P'.
44430 - - Function: speed_t cfgetispeed (const struct termios *TERMIOS-P)
44431 - This function returns the input line speed stored in the structure
44432 - `*TERMIOS-P'.
44434 - - Function: int cfsetospeed (struct termios *TERMIOS-P, speed_t SPEED)
44435 - This function stores SPEED in `*TERMIOS-P' as the output speed.
44436 - The normal return value is 0; a value of -1 indicates an error.
44437 - If SPEED is not a speed, `cfsetospeed' returns -1.
44439 - - Function: int cfsetispeed (struct termios *TERMIOS-P, speed_t SPEED)
44440 - This function stores SPEED in `*TERMIOS-P' as the input speed.
44441 - The normal return value is 0; a value of -1 indicates an error.
44442 - If SPEED is not a speed, `cfsetospeed' returns -1.
44444 - - Function: int cfsetspeed (struct termios *TERMIOS-P, speed_t SPEED)
44445 - This function stores SPEED in `*TERMIOS-P' as both the input and
44446 - output speeds. The normal return value is 0; a value of -1
44447 - indicates an error. If SPEED is not a speed, `cfsetspeed' returns
44448 - -1. This function is an extension in 4.4 BSD.
44450 - - Data Type: speed_t
44451 - The `speed_t' type is an unsigned integer data type used to
44452 - represent line speeds.
44454 - The functions `cfsetospeed' and `cfsetispeed' report errors only for
44455 -speed values that the system simply cannot handle. If you specify a
44456 -speed value that is basically acceptable, then those functions will
44457 -succeed. But they do not check that a particular hardware device can
44458 -actually support the specified speeds--in fact, they don't know which
44459 -device you plan to set the speed for. If you use `tcsetattr' to set
44460 -the speed of a particular device to a value that it cannot handle,
44461 -`tcsetattr' returns -1.
44463 - *Portability note:* In the GNU library, the functions above accept
44464 -speeds measured in bits per second as input, and return speed values
44465 -measured in bits per second. Other libraries require speeds to be
44466 -indicated by special codes. For POSIX.1 portability, you must use one
44467 -of the following symbols to represent the speed; their precise numeric
44468 -values are system-dependent, but each name has a fixed meaning: `B110'
44469 -stands for 110 bps, `B300' for 300 bps, and so on. There is no
44470 -portable way to represent any speed but these, but these are the only
44471 -speeds that typical serial lines can support.
44473 - B0 B50 B75 B110 B134 B150 B200
44474 - B300 B600 B1200 B1800 B2400 B4800
44475 - B9600 B19200 B38400 B57600 B115200
44476 - B230400 B460800
44478 - BSD defines two additional speed symbols as aliases: `EXTA' is an
44479 -alias for `B19200' and `EXTB' is an alias for `B38400'. These aliases
44480 -are obsolete.
44482 -\x1f
44483 -File: libc.info, Node: Special Characters, Next: Noncanonical Input, Prev: Line Speed, Up: Terminal Modes
44485 -Special Characters
44486 -------------------
44488 - In canonical input, the terminal driver recognizes a number of
44489 -special characters which perform various control functions. These
44490 -include the ERASE character (usually <DEL>) for editing input, and
44491 -other editing characters. The INTR character (normally `C-c') for
44492 -sending a `SIGINT' signal, and other signal-raising characters, may be
44493 -available in either canonical or noncanonical input mode. All these
44494 -characters are described in this section.
44496 - The particular characters used are specified in the `c_cc' member of
44497 -the `struct termios' structure. This member is an array; each element
44498 -specifies the character for a particular role. Each element has a
44499 -symbolic constant that stands for the index of that element--for
44500 -example, `VINTR' is the index of the element that specifies the INTR
44501 -character, so storing `'='' in `TERMIOS.c_cc[VINTR]' specifies `=' as
44502 -the INTR character.
44504 - On some systems, you can disable a particular special character
44505 -function by specifying the value `_POSIX_VDISABLE' for that role. This
44506 -value is unequal to any possible character code. *Note Options for
44507 -Files::, for more information about how to tell whether the operating
44508 -system you are using supports `_POSIX_VDISABLE'.
44510 -* Menu:
44512 -* Editing Characters:: Special characters that terminate lines and
44513 - delete text, and other editing functions.
44514 -* Signal Characters:: Special characters that send or raise signals
44515 - to or for certain classes of processes.
44516 -* Start/Stop Characters:: Special characters that suspend or resume
44517 - suspended output.
44518 -* Other Special:: Other special characters for BSD systems:
44519 - they can discard output, and print status.
44521 diff -u -udbrN glibc-2.3.2/manual/libc.info-3 glibc-2.3.2-200304020432/manual/libc.info-3
44522 --- glibc-2.3.2/manual/libc.info-3 Sat Mar 1 02:39:41 2003
44523 +++ glibc-2.3.2-200304020432/manual/libc.info-3 Thu Jan 1 01:00:00 1970
44524 @@ -1,1280 +0,0 @@
44525 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
44527 -INFO-DIR-SECTION GNU libraries
44528 -START-INFO-DIR-ENTRY
44529 -* Libc: (libc). C library.
44530 -END-INFO-DIR-ENTRY
44532 - This file documents the GNU C library.
44534 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
44535 -Reference Manual', for Version 2.3.x.
44537 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
44538 -Free Software Foundation, Inc.
44540 - Permission is granted to copy, distribute and/or modify this document
44541 -under the terms of the GNU Free Documentation License, Version 1.1 or
44542 -any later version published by the Free Software Foundation; with the
44543 -Invariant Sections being "Free Software Needs Free Documentation" and
44544 -"GNU Lesser General Public License", the Front-Cover texts being (a)
44545 -(see below), and with the Back-Cover Texts being (b) (see below). A
44546 -copy of the license is included in the section entitled "GNU Free
44547 -Documentation License".
44549 - (a) The FSF's Front-Cover Text is:
44551 - A GNU Manual
44553 - (b) The FSF's Back-Cover Text is:
44555 - You have freedom to copy and modify this GNU Manual, like GNU
44556 -software. Copies published by the Free Software Foundation raise
44557 -funds for GNU development.
44559 -\x1f
44560 -File: libc.info, Node: Error Codes, Next: Error Messages, Prev: Checking for Errors, Up: Error Reporting
44562 -Error Codes
44563 -===========
44565 - The error code macros are defined in the header file `errno.h'. All
44566 -of them expand into integer constant values. Some of these error codes
44567 -can't occur on the GNU system, but they can occur using the GNU library
44568 -on other systems.
44570 - - Macro: int EPERM
44571 - Operation not permitted; only the owner of the file (or other
44572 - resource) or processes with special privileges can perform the
44573 - operation.
44575 - - Macro: int ENOENT
44576 - No such file or directory. This is a "file doesn't exist" error
44577 - for ordinary files that are referenced in contexts where they are
44578 - expected to already exist.
44580 - - Macro: int ESRCH
44581 - No process matches the specified process ID.
44583 - - Macro: int EINTR
44584 - Interrupted function call; an asynchronous signal occurred and
44585 - prevented completion of the call. When this happens, you should
44586 - try the call again.
44588 - You can choose to have functions resume after a signal that is
44589 - handled, rather than failing with `EINTR'; see *Note Interrupted
44590 - Primitives::.
44592 - - Macro: int EIO
44593 - Input/output error; usually used for physical read or write errors.
44595 - - Macro: int ENXIO
44596 - No such device or address. The system tried to use the device
44597 - represented by a file you specified, and it couldn't find the
44598 - device. This can mean that the device file was installed
44599 - incorrectly, or that the physical device is missing or not
44600 - correctly attached to the computer.
44602 - - Macro: int E2BIG
44603 - Argument list too long; used when the arguments passed to a new
44604 - program being executed with one of the `exec' functions (*note
44605 - Executing a File::) occupy too much memory space. This condition
44606 - never arises in the GNU system.
44608 - - Macro: int ENOEXEC
44609 - Invalid executable file format. This condition is detected by the
44610 - `exec' functions; see *Note Executing a File::.
44612 - - Macro: int EBADF
44613 - Bad file descriptor; for example, I/O on a descriptor that has been
44614 - closed or reading from a descriptor open only for writing (or vice
44615 - versa).
44617 - - Macro: int ECHILD
44618 - There are no child processes. This error happens on operations
44619 - that are supposed to manipulate child processes, when there aren't
44620 - any processes to manipulate.
44622 - - Macro: int EDEADLK
44623 - Deadlock avoided; allocating a system resource would have resulted
44624 - in a deadlock situation. The system does not guarantee that it
44625 - will notice all such situations. This error means you got lucky
44626 - and the system noticed; it might just hang. *Note File Locks::,
44627 - for an example.
44629 - - Macro: int ENOMEM
44630 - No memory available. The system cannot allocate more virtual
44631 - memory because its capacity is full.
44633 - - Macro: int EACCES
44634 - Permission denied; the file permissions do not allow the attempted
44635 - operation.
44637 - - Macro: int EFAULT
44638 - Bad address; an invalid pointer was detected. In the GNU system,
44639 - this error never happens; you get a signal instead.
44641 - - Macro: int ENOTBLK
44642 - A file that isn't a block special file was given in a situation
44643 - that requires one. For example, trying to mount an ordinary file
44644 - as a file system in Unix gives this error.
44646 - - Macro: int EBUSY
44647 - Resource busy; a system resource that can't be shared is already
44648 - in use. For example, if you try to delete a file that is the root
44649 - of a currently mounted filesystem, you get this error.
44651 - - Macro: int EEXIST
44652 - File exists; an existing file was specified in a context where it
44653 - only makes sense to specify a new file.
44655 - - Macro: int EXDEV
44656 - An attempt to make an improper link across file systems was
44657 - detected. This happens not only when you use `link' (*note Hard
44658 - Links::) but also when you rename a file with `rename' (*note
44659 - Renaming Files::).
44661 - - Macro: int ENODEV
44662 - The wrong type of device was given to a function that expects a
44663 - particular sort of device.
44665 - - Macro: int ENOTDIR
44666 - A file that isn't a directory was specified when a directory is
44667 - required.
44669 - - Macro: int EISDIR
44670 - File is a directory; you cannot open a directory for writing, or
44671 - create or remove hard links to it.
44673 - - Macro: int EINVAL
44674 - Invalid argument. This is used to indicate various kinds of
44675 - problems with passing the wrong argument to a library function.
44677 - - Macro: int EMFILE
44678 - The current process has too many files open and can't open any
44679 - more. Duplicate descriptors do count toward this limit.
44681 - In BSD and GNU, the number of open files is controlled by a
44682 - resource limit that can usually be increased. If you get this
44683 - error, you might want to increase the `RLIMIT_NOFILE' limit or
44684 - make it unlimited; *note Limits on Resources::.
44686 - - Macro: int ENFILE
44687 - There are too many distinct file openings in the entire system.
44688 - Note that any number of linked channels count as just one file
44689 - opening; see *Note Linked Channels::. This error never occurs in
44690 - the GNU system.
44692 - - Macro: int ENOTTY
44693 - Inappropriate I/O control operation, such as trying to set terminal
44694 - modes on an ordinary file.
44696 - - Macro: int ETXTBSY
44697 - An attempt to execute a file that is currently open for writing, or
44698 - write to a file that is currently being executed. Often using a
44699 - debugger to run a program is considered having it open for writing
44700 - and will cause this error. (The name stands for "text file
44701 - busy".) This is not an error in the GNU system; the text is
44702 - copied as necessary.
44704 - - Macro: int EFBIG
44705 - File too big; the size of a file would be larger than allowed by
44706 - the system.
44708 - - Macro: int ENOSPC
44709 - No space left on device; write operation on a file failed because
44710 - the disk is full.
44712 - - Macro: int ESPIPE
44713 - Invalid seek operation (such as on a pipe).
44715 - - Macro: int EROFS
44716 - An attempt was made to modify something on a read-only file system.
44718 - - Macro: int EMLINK
44719 - Too many links; the link count of a single file would become too
44720 - large. `rename' can cause this error if the file being renamed
44721 - already has as many links as it can take (*note Renaming Files::).
44723 - - Macro: int EPIPE
44724 - Broken pipe; there is no process reading from the other end of a
44725 - pipe. Every library function that returns this error code also
44726 - generates a `SIGPIPE' signal; this signal terminates the program
44727 - if not handled or blocked. Thus, your program will never actually
44728 - see `EPIPE' unless it has handled or blocked `SIGPIPE'.
44730 - - Macro: int EDOM
44731 - Domain error; used by mathematical functions when an argument
44732 - value does not fall into the domain over which the function is
44733 - defined.
44735 - - Macro: int ERANGE
44736 - Range error; used by mathematical functions when the result value
44737 - is not representable because of overflow or underflow.
44739 - - Macro: int EAGAIN
44740 - Resource temporarily unavailable; the call might work if you try
44741 - again later. The macro `EWOULDBLOCK' is another name for `EAGAIN';
44742 - they are always the same in the GNU C library.
44744 - This error can happen in a few different situations:
44746 - * An operation that would block was attempted on an object that
44747 - has non-blocking mode selected. Trying the same operation
44748 - again will block until some external condition makes it
44749 - possible to read, write, or connect (whatever the operation).
44750 - You can use `select' to find out when the operation will be
44751 - possible; *note Waiting for I/O::.
44753 - *Portability Note:* In many older Unix systems, this condition
44754 - was indicated by `EWOULDBLOCK', which was a distinct error
44755 - code different from `EAGAIN'. To make your program portable,
44756 - you should check for both codes and treat them the same.
44758 - * A temporary resource shortage made an operation impossible.
44759 - `fork' can return this error. It indicates that the shortage
44760 - is expected to pass, so your program can try the call again
44761 - later and it may succeed. It is probably a good idea to
44762 - delay for a few seconds before trying it again, to allow time
44763 - for other processes to release scarce resources. Such
44764 - shortages are usually fairly serious and affect the whole
44765 - system, so usually an interactive program should report the
44766 - error to the user and return to its command loop.
44768 - - Macro: int EWOULDBLOCK
44769 - In the GNU C library, this is another name for `EAGAIN' (above).
44770 - The values are always the same, on every operating system.
44772 - C libraries in many older Unix systems have `EWOULDBLOCK' as a
44773 - separate error code.
44775 - - Macro: int EINPROGRESS
44776 - An operation that cannot complete immediately was initiated on an
44777 - object that has non-blocking mode selected. Some functions that
44778 - must always block (such as `connect'; *note Connecting::) never
44779 - return `EAGAIN'. Instead, they return `EINPROGRESS' to indicate
44780 - that the operation has begun and will take some time. Attempts to
44781 - manipulate the object before the call completes return `EALREADY'.
44782 - You can use the `select' function to find out when the pending
44783 - operation has completed; *note Waiting for I/O::.
44785 - - Macro: int EALREADY
44786 - An operation is already in progress on an object that has
44787 - non-blocking mode selected.
44789 - - Macro: int ENOTSOCK
44790 - A file that isn't a socket was specified when a socket is required.
44792 - - Macro: int EMSGSIZE
44793 - The size of a message sent on a socket was larger than the
44794 - supported maximum size.
44796 - - Macro: int EPROTOTYPE
44797 - The socket type does not support the requested communications
44798 - protocol.
44800 - - Macro: int ENOPROTOOPT
44801 - You specified a socket option that doesn't make sense for the
44802 - particular protocol being used by the socket. *Note Socket
44803 - Options::.
44805 - - Macro: int EPROTONOSUPPORT
44806 - The socket domain does not support the requested communications
44807 - protocol (perhaps because the requested protocol is completely
44808 - invalid). *Note Creating a Socket::.
44810 - - Macro: int ESOCKTNOSUPPORT
44811 - The socket type is not supported.
44813 - - Macro: int EOPNOTSUPP
44814 - The operation you requested is not supported. Some socket
44815 - functions don't make sense for all types of sockets, and others
44816 - may not be implemented for all communications protocols. In the
44817 - GNU system, this error can happen for many calls when the object
44818 - does not support the particular operation; it is a generic
44819 - indication that the server knows nothing to do for that call.
44821 - - Macro: int EPFNOSUPPORT
44822 - The socket communications protocol family you requested is not
44823 - supported.
44825 - - Macro: int EAFNOSUPPORT
44826 - The address family specified for a socket is not supported; it is
44827 - inconsistent with the protocol being used on the socket. *Note
44828 - Sockets::.
44830 - - Macro: int EADDRINUSE
44831 - The requested socket address is already in use. *Note Socket
44832 - Addresses::.
44834 - - Macro: int EADDRNOTAVAIL
44835 - The requested socket address is not available; for example, you
44836 - tried to give a socket a name that doesn't match the local host
44837 - name. *Note Socket Addresses::.
44839 - - Macro: int ENETDOWN
44840 - A socket operation failed because the network was down.
44842 - - Macro: int ENETUNREACH
44843 - A socket operation failed because the subnet containing the remote
44844 - host was unreachable.
44846 - - Macro: int ENETRESET
44847 - A network connection was reset because the remote host crashed.
44849 - - Macro: int ECONNABORTED
44850 - A network connection was aborted locally.
44852 - - Macro: int ECONNRESET
44853 - A network connection was closed for reasons outside the control of
44854 - the local host, such as by the remote machine rebooting or an
44855 - unrecoverable protocol violation.
44857 - - Macro: int ENOBUFS
44858 - The kernel's buffers for I/O operations are all in use. In GNU,
44859 - this error is always synonymous with `ENOMEM'; you may get one or
44860 - the other from network operations.
44862 - - Macro: int EISCONN
44863 - You tried to connect a socket that is already connected. *Note
44864 - Connecting::.
44866 - - Macro: int ENOTCONN
44867 - The socket is not connected to anything. You get this error when
44868 - you try to transmit data over a socket, without first specifying a
44869 - destination for the data. For a connectionless socket (for
44870 - datagram protocols, such as UDP), you get `EDESTADDRREQ' instead.
44872 - - Macro: int EDESTADDRREQ
44873 - No default destination address was set for the socket. You get
44874 - this error when you try to transmit data over a connectionless
44875 - socket, without first specifying a destination for the data with
44876 - `connect'.
44878 - - Macro: int ESHUTDOWN
44879 - The socket has already been shut down.
44881 - - Macro: int ETOOMANYREFS
44882 - ???
44884 - - Macro: int ETIMEDOUT
44885 - A socket operation with a specified timeout received no response
44886 - during the timeout period.
44888 - - Macro: int ECONNREFUSED
44889 - A remote host refused to allow the network connection (typically
44890 - because it is not running the requested service).
44892 - - Macro: int ELOOP
44893 - Too many levels of symbolic links were encountered in looking up a
44894 - file name. This often indicates a cycle of symbolic links.
44896 - - Macro: int ENAMETOOLONG
44897 - Filename too long (longer than `PATH_MAX'; *note Limits for
44898 - Files::) or host name too long (in `gethostname' or `sethostname';
44899 - *note Host Identification::).
44901 - - Macro: int EHOSTDOWN
44902 - The remote host for a requested network connection is down.
44904 - - Macro: int EHOSTUNREACH
44905 - The remote host for a requested network connection is not
44906 - reachable.
44908 - - Macro: int ENOTEMPTY
44909 - Directory not empty, where an empty directory was expected.
44910 - Typically, this error occurs when you are trying to delete a
44911 - directory.
44913 - - Macro: int EPROCLIM
44914 - This means that the per-user limit on new process would be
44915 - exceeded by an attempted `fork'. *Note Limits on Resources::, for
44916 - details on the `RLIMIT_NPROC' limit.
44918 - - Macro: int EUSERS
44919 - The file quota system is confused because there are too many users.
44921 - - Macro: int EDQUOT
44922 - The user's disk quota was exceeded.
44924 - - Macro: int ESTALE
44925 - Stale NFS file handle. This indicates an internal confusion in
44926 - the NFS system which is due to file system rearrangements on the
44927 - server host. Repairing this condition usually requires unmounting
44928 - and remounting the NFS file system on the local host.
44930 - - Macro: int EREMOTE
44931 - An attempt was made to NFS-mount a remote file system with a file
44932 - name that already specifies an NFS-mounted file. (This is an
44933 - error on some operating systems, but we expect it to work properly
44934 - on the GNU system, making this error code impossible.)
44936 - - Macro: int EBADRPC
44937 - ???
44939 - - Macro: int ERPCMISMATCH
44940 - ???
44942 - - Macro: int EPROGUNAVAIL
44943 - ???
44945 - - Macro: int EPROGMISMATCH
44946 - ???
44948 - - Macro: int EPROCUNAVAIL
44949 - ???
44951 - - Macro: int ENOLCK
44952 - No locks available. This is used by the file locking facilities;
44953 - see *Note File Locks::. This error is never generated by the GNU
44954 - system, but it can result from an operation to an NFS server
44955 - running another operating system.
44957 - - Macro: int EFTYPE
44958 - Inappropriate file type or format. The file was the wrong type
44959 - for the operation, or a data file had the wrong format.
44961 - On some systems `chmod' returns this error if you try to set the
44962 - sticky bit on a non-directory file; *note Setting Permissions::.
44964 - - Macro: int EAUTH
44965 - ???
44967 - - Macro: int ENEEDAUTH
44968 - ???
44970 - - Macro: int ENOSYS
44971 - Function not implemented. This indicates that the function called
44972 - is not implemented at all, either in the C library itself or in the
44973 - operating system. When you get this error, you can be sure that
44974 - this particular function will always fail with `ENOSYS' unless you
44975 - install a new version of the C library or the operating system.
44977 - - Macro: int ENOTSUP
44978 - Not supported. A function returns this error when certain
44979 - parameter values are valid, but the functionality they request is
44980 - not available. This can mean that the function does not implement
44981 - a particular command or option value or flag bit at all. For
44982 - functions that operate on some object given in a parameter, such
44983 - as a file descriptor or a port, it might instead mean that only
44984 - _that specific object_ (file descriptor, port, etc.) is unable to
44985 - support the other parameters given; different file descriptors
44986 - might support different ranges of parameter values.
44988 - If the entire function is not available at all in the
44989 - implementation, it returns `ENOSYS' instead.
44991 - - Macro: int EILSEQ
44992 - While decoding a multibyte character the function came along an
44993 - invalid or an incomplete sequence of bytes or the given wide
44994 - character is invalid.
44996 - - Macro: int EBACKGROUND
44997 - In the GNU system, servers supporting the `term' protocol return
44998 - this error for certain operations when the caller is not in the
44999 - foreground process group of the terminal. Users do not usually
45000 - see this error because functions such as `read' and `write'
45001 - translate it into a `SIGTTIN' or `SIGTTOU' signal. *Note Job
45002 - Control::, for information on process groups and these signals.
45004 - - Macro: int EDIED
45005 - In the GNU system, opening a file returns this error when the file
45006 - is translated by a program and the translator program dies while
45007 - starting up, before it has connected to the file.
45009 - - Macro: int ED
45010 - The experienced user will know what is wrong.
45012 - - Macro: int EGREGIOUS
45013 - You did *what*?
45015 - - Macro: int EIEIO
45016 - Go home and have a glass of warm, dairy-fresh milk.
45018 - - Macro: int EGRATUITOUS
45019 - This error code has no purpose.
45021 - - Macro: int EBADMSG
45023 - - Macro: int EIDRM
45025 - - Macro: int EMULTIHOP
45027 - - Macro: int ENODATA
45029 - - Macro: int ENOLINK
45031 - - Macro: int ENOMSG
45033 - - Macro: int ENOSR
45035 - - Macro: int ENOSTR
45037 - - Macro: int EOVERFLOW
45039 - - Macro: int EPROTO
45041 - - Macro: int ETIME
45043 - - Macro: int ECANCELED
45044 - Operation canceled; an asynchronous operation was canceled before
45045 - it completed. *Note Asynchronous I/O::. When you call
45046 - `aio_cancel', the normal result is for the operations affected to
45047 - complete with this error; *note Cancel AIO Operations::.
45049 - _The following error codes are defined by the Linux/i386 kernel.
45050 -They are not yet documented._
45052 - - Macro: int ERESTART
45054 - - Macro: int ECHRNG
45056 - - Macro: int EL2NSYNC
45058 - - Macro: int EL3HLT
45060 - - Macro: int EL3RST
45062 - - Macro: int ELNRNG
45064 - - Macro: int EUNATCH
45066 - - Macro: int ENOCSI
45068 - - Macro: int EL2HLT
45070 - - Macro: int EBADE
45072 - - Macro: int EBADR
45074 - - Macro: int EXFULL
45076 - - Macro: int ENOANO
45078 - - Macro: int EBADRQC
45080 - - Macro: int EBADSLT
45082 - - Macro: int EDEADLOCK
45084 - - Macro: int EBFONT
45086 - - Macro: int ENONET
45088 - - Macro: int ENOPKG
45090 - - Macro: int EADV
45092 - - Macro: int ESRMNT
45094 - - Macro: int ECOMM
45096 - - Macro: int EDOTDOT
45098 - - Macro: int ENOTUNIQ
45100 - - Macro: int EBADFD
45102 - - Macro: int EREMCHG
45104 - - Macro: int ELIBACC
45106 - - Macro: int ELIBBAD
45108 - - Macro: int ELIBSCN
45110 - - Macro: int ELIBMAX
45112 - - Macro: int ELIBEXEC
45114 - - Macro: int ESTRPIPE
45116 - - Macro: int EUCLEAN
45118 - - Macro: int ENOTNAM
45120 - - Macro: int ENAVAIL
45122 - - Macro: int EISNAM
45124 - - Macro: int EREMOTEIO
45126 - - Macro: int ENOMEDIUM
45128 - - Macro: int EMEDIUMTYPE
45130 -\x1f
45131 -File: libc.info, Node: Error Messages, Prev: Error Codes, Up: Error Reporting
45133 -Error Messages
45134 -==============
45136 - The library has functions and variables designed to make it easy for
45137 -your program to report informative error messages in the customary
45138 -format about the failure of a library call. The functions `strerror'
45139 -and `perror' give you the standard error message for a given error
45140 -code; the variable `program_invocation_short_name' gives you convenient
45141 -access to the name of the program that encountered the error.
45143 - - Function: char * strerror (int ERRNUM)
45144 - The `strerror' function maps the error code (*note Checking for
45145 - Errors::) specified by the ERRNUM argument to a descriptive error
45146 - message string. The return value is a pointer to this string.
45148 - The value ERRNUM normally comes from the variable `errno'.
45150 - You should not modify the string returned by `strerror'. Also, if
45151 - you make subsequent calls to `strerror', the string might be
45152 - overwritten. (But it's guaranteed that no library function ever
45153 - calls `strerror' behind your back.)
45155 - The function `strerror' is declared in `string.h'.
45157 - - Function: char * strerror_r (int ERRNUM, char *BUF, size_t N)
45158 - The `strerror_r' function works like `strerror' but instead of
45159 - returning the error message in a statically allocated buffer
45160 - shared by all threads in the process, it returns a private copy
45161 - for the thread. This might be either some permanent global data or
45162 - a message string in the user supplied buffer starting at BUF with
45163 - the length of N bytes.
45165 - At most N characters are written (including the NUL byte) so it is
45166 - up to the user to select the buffer large enough.
45168 - This function should always be used in multi-threaded programs
45169 - since there is no way to guarantee the string returned by
45170 - `strerror' really belongs to the last call of the current thread.
45172 - This function `strerror_r' is a GNU extension and it is declared in
45173 - `string.h'.
45175 - - Function: void perror (const char *MESSAGE)
45176 - This function prints an error message to the stream `stderr'; see
45177 - *Note Standard Streams::. The orientation of `stderr' is not
45178 - changed.
45180 - If you call `perror' with a MESSAGE that is either a null pointer
45181 - or an empty string, `perror' just prints the error message
45182 - corresponding to `errno', adding a trailing newline.
45184 - If you supply a non-null MESSAGE argument, then `perror' prefixes
45185 - its output with this string. It adds a colon and a space
45186 - character to separate the MESSAGE from the error string
45187 - corresponding to `errno'.
45189 - The function `perror' is declared in `stdio.h'.
45191 - `strerror' and `perror' produce the exact same message for any given
45192 -error code; the precise text varies from system to system. On the GNU
45193 -system, the messages are fairly short; there are no multi-line messages
45194 -or embedded newlines. Each error message begins with a capital letter
45195 -and does not include any terminating punctuation.
45197 - *Compatibility Note:* The `strerror' function was introduced in
45198 -ISO C89. Many older C systems do not support this function yet.
45200 - Many programs that don't read input from the terminal are designed to
45201 -exit if any system call fails. By convention, the error message from
45202 -such a program should start with the program's name, sans directories.
45203 -You can find that name in the variable `program_invocation_short_name';
45204 -the full file name is stored the variable `program_invocation_name'.
45206 - - Variable: char * program_invocation_name
45207 - This variable's value is the name that was used to invoke the
45208 - program running in the current process. It is the same as
45209 - `argv[0]'. Note that this is not necessarily a useful file name;
45210 - often it contains no directory names. *Note Program Arguments::.
45212 - - Variable: char * program_invocation_short_name
45213 - This variable's value is the name that was used to invoke the
45214 - program running in the current process, with directory names
45215 - removed. (That is to say, it is the same as
45216 - `program_invocation_name' minus everything up to the last slash,
45217 - if any.)
45219 - The library initialization code sets up both of these variables
45220 -before calling `main'.
45222 - *Portability Note:* These two variables are GNU extensions. If you
45223 -want your program to work with non-GNU libraries, you must save the
45224 -value of `argv[0]' in `main', and then strip off the directory names
45225 -yourself. We added these extensions to make it possible to write
45226 -self-contained error-reporting subroutines that require no explicit
45227 -cooperation from `main'.
45229 - Here is an example showing how to handle failure to open a file
45230 -correctly. The function `open_sesame' tries to open the named file for
45231 -reading and returns a stream if successful. The `fopen' library
45232 -function returns a null pointer if it couldn't open the file for some
45233 -reason. In that situation, `open_sesame' constructs an appropriate
45234 -error message using the `strerror' function, and terminates the
45235 -program. If we were going to make some other library calls before
45236 -passing the error code to `strerror', we'd have to save it in a local
45237 -variable instead, because those other library functions might overwrite
45238 -`errno' in the meantime.
45240 - #include <errno.h>
45241 - #include <stdio.h>
45242 - #include <stdlib.h>
45243 - #include <string.h>
45245 - FILE *
45246 - open_sesame (char *name)
45248 - FILE *stream;
45250 - errno = 0;
45251 - stream = fopen (name, "r");
45252 - if (stream == NULL)
45254 - fprintf (stderr, "%s: Couldn't open file %s; %s\n",
45255 - program_invocation_short_name, name, strerror (errno));
45256 - exit (EXIT_FAILURE);
45258 - else
45259 - return stream;
45262 - Using `perror' has the advantage that the function is portable and
45263 -available on all systems implementing ISO C. But often the text
45264 -`perror' generates is not what is wanted and there is no way to extend
45265 -or change what `perror' does. The GNU coding standard, for instance,
45266 -requires error messages to be preceded by the program name and programs
45267 -which read some input files should should provide information about the
45268 -input file name and the line number in case an error is encountered
45269 -while reading the file. For these occasions there are two functions
45270 -available which are widely used throughout the GNU project. These
45271 -functions are declared in `error.h'.
45273 - - Function: void error (int STATUS, int ERRNUM, const char *FORMAT,
45274 - ...)
45275 - The `error' function can be used to report general problems during
45276 - program execution. The FORMAT argument is a format string just
45277 - like those given to the `printf' family of functions. The
45278 - arguments required for the format can follow the FORMAT parameter.
45279 - Just like `perror', `error' also can report an error code in
45280 - textual form. But unlike `perror' the error value is explicitly
45281 - passed to the function in the ERRNUM parameter. This elimintates
45282 - the problem mentioned above that the error reporting function must
45283 - be called immediately after the function causing the error since
45284 - otherwise `errno' might have a different value.
45286 - The `error' prints first the program name. If the application
45287 - defined a global variable `error_print_progname' and points it to a
45288 - function this function will be called to print the program name.
45289 - Otherwise the string from the global variable `program_name' is
45290 - used. The program name is followed by a colon and a space which
45291 - in turn is followed by the output produced by the format string.
45292 - If the ERRNUM parameter is non-zero the format string output is
45293 - followed by a colon and a space, followed by the error message for
45294 - the error code ERRNUM. In any case is the output terminated with
45295 - a newline.
45297 - The output is directed to the `stderr' stream. If the `stderr'
45298 - wasn't oriented before the call it will be narrow-oriented
45299 - afterwards.
45301 - The function will return unless the STATUS parameter has a
45302 - non-zero value. In this case the function will call `exit' with
45303 - the STATUS value for its parameter and therefore never return. If
45304 - `error' returns the global variable `error_message_count' is
45305 - incremented by one to keep track of the number of errors reported.
45307 - - Function: void error_at_line (int STATUS, int ERRNUM, const char
45308 - *FNAME, unsigned int LINENO, const char *FORMAT, ...)
45309 - The `error_at_line' function is very similar to the `error'
45310 - function. The only difference are the additional parameters FNAME
45311 - and LINENO. The handling of the other parameters is identical to
45312 - that of `error' except that between the program name and the string
45313 - generated by the format string additional text is inserted.
45315 - Directly following the program name a colon, followed by the file
45316 - name pointer to by FNAME, another colon, and a value of LINENO is
45317 - printed.
45319 - This additional output of course is meant to be used to locate an
45320 - error in an input file (like a programming language source code
45321 - file etc).
45323 - If the global variable `error_one_per_line' is set to a non-zero
45324 - value `error_at_line' will avoid printing consecutive messages for
45325 - the same file anem line. Repetition which are not directly
45326 - following each other are not caught.
45328 - Just like `error' this function only returned if STATUS is zero.
45329 - Otherwise `exit' is called with the non-zero value. If `error'
45330 - returns the global variable `error_message_count' is incremented
45331 - by one to keep track of the number of errors reported.
45333 - As mentioned above the `error' and `error_at_line' functions can be
45334 -customized by defining a variable named `error_print_progname'.
45336 - - Variable: void (* error_print_progname ) (void)
45337 - If the `error_print_progname' variable is defined to a non-zero
45338 - value the function pointed to is called by `error' or
45339 - `error_at_line'. It is expected to print the program name or do
45340 - something similarly useful.
45342 - The function is expected to be print to the `stderr' stream and
45343 - must be able to handle whatever orientation the stream has.
45345 - The variable is global and shared by all threads.
45347 - - Variable: unsigned int error_message_count
45348 - The `error_message_count' variable is incremented whenever one of
45349 - the functions `error' or `error_at_line' returns. The variable is
45350 - global and shared by all threads.
45352 - - Variable: int error_one_per_line
45353 - The `error_one_per_line' variable influences only `error_at_line'.
45354 - Normally the `error_at_line' function creates output for every
45355 - invocation. If `error_one_per_line' is set to a non-zero value
45356 - `error_at_line' keeps track of the last file name and line number
45357 - for which an error was reported and avoid directly following
45358 - messages for the same file and line. This variable is global and
45359 - shared by all threads.
45361 -A program which read some input file and reports errors in it could look
45362 -like this:
45365 - char *line = NULL;
45366 - size_t len = 0;
45367 - unsigned int lineno = 0;
45369 - error_message_count = 0;
45370 - while (! feof_unlocked (fp))
45372 - ssize_t n = getline (&line, &len, fp);
45373 - if (n <= 0)
45374 - /* End of file or error. */
45375 - break;
45376 - ++lineno;
45378 - /* Process the line. */
45379 - ...
45381 - if (Detect error in line)
45382 - error_at_line (0, errval, filename, lineno,
45383 - "some error text %s", some_variable);
45386 - if (error_message_count != 0)
45387 - error (EXIT_FAILURE, 0, "%u errors found", error_message_count);
45390 - `error' and `error_at_line' are clearly the functions of choice and
45391 -enable the programmer to write applications which follow the GNU coding
45392 -standard. The GNU libc additionally contains functions which are used
45393 -in BSD for the same purpose. These functions are declared in `err.h'.
45394 -It is generally advised to not use these functions. They are included
45395 -only for compatibility.
45397 - - Function: void warn (const char *FORMAT, ...)
45398 - The `warn' function is roughly equivalent to a call like
45399 - error (0, errno, format, the parameters)
45401 - except that the global variables `error' respects and modifies are
45402 - not used.
45404 - - Function: void vwarn (const char *FORMAT, va_list)
45405 - The `vwarn' function is just like `warn' except that the
45406 - parameters for the handling of the format string FORMAT are passed
45407 - in as an value of type `va_list'.
45409 - - Function: void warnx (const char *FORMAT, ...)
45410 - The `warnx' function is roughly equivalent to a call like
45411 - error (0, 0, format, the parameters)
45413 - except that the global variables `error' respects and modifies are
45414 - not used. The difference to `warn' is that no error number string
45415 - is printed.
45417 - - Function: void vwarnx (const char *FORMAT, va_list)
45418 - The `vwarnx' function is just like `warnx' except that the
45419 - parameters for the handling of the format string FORMAT are passed
45420 - in as an value of type `va_list'.
45422 - - Function: void err (int STATUS, const char *FORMAT, ...)
45423 - The `err' function is roughly equivalent to a call like
45424 - error (status, errno, format, the parameters)
45426 - except that the global variables `error' respects and modifies are
45427 - not used and that the program is exited even if STATUS is zero.
45429 - - Function: void verr (int STATUS, const char *FORMAT, va_list)
45430 - The `verr' function is just like `err' except that the parameters
45431 - for the handling of the format string FORMAT are passed in as an
45432 - value of type `va_list'.
45434 - - Function: void errx (int STATUS, const char *FORMAT, ...)
45435 - The `errx' function is roughly equivalent to a call like
45436 - error (status, 0, format, the parameters)
45438 - except that the global variables `error' respects and modifies are
45439 - not used and that the program is exited even if STATUS is zero.
45440 - The difference to `err' is that no error number string is printed.
45442 - - Function: void verrx (int STATUS, const char *FORMAT, va_list)
45443 - The `verrx' function is just like `errx' except that the
45444 - parameters for the handling of the format string FORMAT are passed
45445 - in as an value of type `va_list'.
45447 -\x1f
45448 -File: libc.info, Node: Memory, Next: Character Handling, Prev: Error Reporting, Up: Top
45450 -Virtual Memory Allocation And Paging
45451 -************************************
45453 - This chapter describes how processes manage and use memory in a
45454 -system that uses the GNU C library.
45456 - The GNU C Library has several functions for dynamically allocating
45457 -virtual memory in various ways. They vary in generality and in
45458 -efficiency. The library also provides functions for controlling paging
45459 -and allocation of real memory.
45461 -* Menu:
45463 -* Memory Concepts:: An introduction to concepts and terminology.
45464 -* Memory Allocation:: Allocating storage for your program data
45465 -* Locking Pages:: Preventing page faults
45466 -* Resizing the Data Segment:: `brk', `sbrk'
45468 - Memory mapped I/O is not discussed in this chapter. *Note
45469 -Memory-mapped I/O::.
45471 -\x1f
45472 -File: libc.info, Node: Memory Concepts, Next: Memory Allocation, Up: Memory
45474 -Process Memory Concepts
45475 -=======================
45477 - One of the most basic resources a process has available to it is
45478 -memory. There are a lot of different ways systems organize memory, but
45479 -in a typical one, each process has one linear virtual address space,
45480 -with addresses running from zero to some huge maximum. It need not be
45481 -contiguous; i.e. not all of these addresses actually can be used to
45482 -store data.
45484 - The virtual memory is divided into pages (4 kilobytes is typical).
45485 -Backing each page of virtual memory is a page of real memory (called a
45486 -"frame") or some secondary storage, usually disk space. The disk space
45487 -might be swap space or just some ordinary disk file. Actually, a page
45488 -of all zeroes sometimes has nothing at all backing it - there's just a
45489 -flag saying it is all zeroes.
45491 - The same frame of real memory or backing store can back multiple
45492 -virtual pages belonging to multiple processes. This is normally the
45493 -case, for example, with virtual memory occupied by GNU C library code.
45494 -The same real memory frame containing the `printf' function backs a
45495 -virtual memory page in each of the existing processes that has a
45496 -`printf' call in its program.
45498 - In order for a program to access any part of a virtual page, the page
45499 -must at that moment be backed by ("connected to") a real frame. But
45500 -because there is usually a lot more virtual memory than real memory, the
45501 -pages must move back and forth between real memory and backing store
45502 -regularly, coming into real memory when a process needs to access them
45503 -and then retreating to backing store when not needed anymore. This
45504 -movement is called "paging".
45506 - When a program attempts to access a page which is not at that moment
45507 -backed by real memory, this is known as a "page fault". When a page
45508 -fault occurs, the kernel suspends the process, places the page into a
45509 -real page frame (this is called "paging in" or "faulting in"), then
45510 -resumes the process so that from the process' point of view, the page
45511 -was in real memory all along. In fact, to the process, all pages always
45512 -seem to be in real memory. Except for one thing: the elapsed execution
45513 -time of an instruction that would normally be a few nanoseconds is
45514 -suddenly much, much, longer (because the kernel normally has to do I/O
45515 -to complete the page-in). For programs sensitive to that, the functions
45516 -described in *Note Locking Pages:: can control it.
45518 - Within each virtual address space, a process has to keep track of
45519 -what is at which addresses, and that process is called memory
45520 -allocation. Allocation usually brings to mind meting out scarce
45521 -resources, but in the case of virtual memory, that's not a major goal,
45522 -because there is generally much more of it than anyone needs. Memory
45523 -allocation within a process is mainly just a matter of making sure that
45524 -the same byte of memory isn't used to store two different things.
45526 - Processes allocate memory in two major ways: by exec and
45527 -programmatically. Actually, forking is a third way, but it's not very
45528 -interesting. *Note Creating a Process::.
45530 - Exec is the operation of creating a virtual address space for a
45531 -process, loading its basic program into it, and executing the program.
45532 -It is done by the "exec" family of functions (e.g. `execl'). The
45533 -operation takes a program file (an executable), it allocates space to
45534 -load all the data in the executable, loads it, and transfers control to
45535 -it. That data is most notably the instructions of the program (the
45536 -"text"), but also literals and constants in the program and even some
45537 -variables: C variables with the static storage class (*note Memory
45538 -Allocation and C::).
45540 - Once that program begins to execute, it uses programmatic allocation
45541 -to gain additional memory. In a C program with the GNU C library, there
45542 -are two kinds of programmatic allocation: automatic and dynamic. *Note
45543 -Memory Allocation and C::.
45545 - Memory-mapped I/O is another form of dynamic virtual memory
45546 -allocation. Mapping memory to a file means declaring that the contents
45547 -of certain range of a process' addresses shall be identical to the
45548 -contents of a specified regular file. The system makes the virtual
45549 -memory initially contain the contents of the file, and if you modify
45550 -the memory, the system writes the same modification to the file. Note
45551 -that due to the magic of virtual memory and page faults, there is no
45552 -reason for the system to do I/O to read the file, or allocate real
45553 -memory for its contents, until the program accesses the virtual memory.
45554 -*Note Memory-mapped I/O::.
45556 - Just as it programmatically allocates memory, the program can
45557 -programmatically deallocate ("free") it. You can't free the memory
45558 -that was allocated by exec. When the program exits or execs, you might
45559 -say that all its memory gets freed, but since in both cases the address
45560 -space ceases to exist, the point is really moot. *Note Program
45561 -Termination::.
45563 - A process' virtual address space is divided into segments. A
45564 -segment is a contiguous range of virtual addresses. Three important
45565 -segments are:
45567 - * The "text segment" contains a program's instructions and literals
45568 - and static constants. It is allocated by exec and stays the same
45569 - size for the life of the virtual address space.
45571 - * The "data segment" is working storage for the program. It can be
45572 - preallocated and preloaded by exec and the process can extend or
45573 - shrink it by calling functions as described in *Note Resizing the
45574 - Data Segment::. Its lower end is fixed.
45576 - * The "stack segment" contains a program stack. It grows as the
45577 - stack grows, but doesn't shrink when the stack shrinks.
45580 -\x1f
45581 -File: libc.info, Node: Memory Allocation, Next: Locking Pages, Prev: Memory Concepts, Up: Memory
45583 -Allocating Storage For Program Data
45584 -===================================
45586 - This section covers how ordinary programs manage storage for their
45587 -data, including the famous `malloc' function and some fancier facilities
45588 -special the GNU C library and GNU Compiler.
45590 -* Menu:
45592 -* Memory Allocation and C:: How to get different kinds of allocation in C.
45593 -* Unconstrained Allocation:: The `malloc' facility allows fully general
45594 - dynamic allocation.
45595 -* Allocation Debugging:: Finding memory leaks and not freed memory.
45596 -* Obstacks:: Obstacks are less general than malloc
45597 - but more efficient and convenient.
45598 -* Variable Size Automatic:: Allocation of variable-sized blocks
45599 - of automatic storage that are freed when the
45600 - calling function returns.
45602 -\x1f
45603 -File: libc.info, Node: Memory Allocation and C, Next: Unconstrained Allocation, Up: Memory Allocation
45605 -Memory Allocation in C Programs
45606 --------------------------------
45608 - The C language supports two kinds of memory allocation through the
45609 -variables in C programs:
45611 - * "Static allocation" is what happens when you declare a static or
45612 - global variable. Each static or global variable defines one block
45613 - of space, of a fixed size. The space is allocated once, when your
45614 - program is started (part of the exec operation), and is never
45615 - freed.
45617 - * "Automatic allocation" happens when you declare an automatic
45618 - variable, such as a function argument or a local variable. The
45619 - space for an automatic variable is allocated when the compound
45620 - statement containing the declaration is entered, and is freed when
45621 - that compound statement is exited.
45623 - In GNU C, the size of the automatic storage can be an expression
45624 - that varies. In other C implementations, it must be a constant.
45626 - A third important kind of memory allocation, "dynamic allocation",
45627 -is not supported by C variables but is available via GNU C library
45628 -functions.
45630 -Dynamic Memory Allocation
45631 -.........................
45633 - "Dynamic memory allocation" is a technique in which programs
45634 -determine as they are running where to store some information. You need
45635 -dynamic allocation when the amount of memory you need, or how long you
45636 -continue to need it, depends on factors that are not known before the
45637 -program runs.
45639 - For example, you may need a block to store a line read from an input
45640 -file; since there is no limit to how long a line can be, you must
45641 -allocate the memory dynamically and make it dynamically larger as you
45642 -read more of the line.
45644 - Or, you may need a block for each record or each definition in the
45645 -input data; since you can't know in advance how many there will be, you
45646 -must allocate a new block for each record or definition as you read it.
45648 - When you use dynamic allocation, the allocation of a block of memory
45649 -is an action that the program requests explicitly. You call a function
45650 -or macro when you want to allocate space, and specify the size with an
45651 -argument. If you want to free the space, you do so by calling another
45652 -function or macro. You can do these things whenever you want, as often
45653 -as you want.
45655 - Dynamic allocation is not supported by C variables; there is no
45656 -storage class "dynamic", and there can never be a C variable whose
45657 -value is stored in dynamically allocated space. The only way to get
45658 -dynamically allocated memory is via a system call (which is generally
45659 -via a GNU C library function call), and the only way to refer to
45660 -dynamically allocated space is through a pointer. Because it is less
45661 -convenient, and because the actual process of dynamic allocation
45662 -requires more computation time, programmers generally use dynamic
45663 -allocation only when neither static nor automatic allocation will serve.
45665 - For example, if you want to allocate dynamically some space to hold a
45666 -`struct foobar', you cannot declare a variable of type `struct foobar'
45667 -whose contents are the dynamically allocated space. But you can
45668 -declare a variable of pointer type `struct foobar *' and assign it the
45669 -address of the space. Then you can use the operators `*' and `->' on
45670 -this pointer variable to refer to the contents of the space:
45673 - struct foobar *ptr
45674 - = (struct foobar *) malloc (sizeof (struct foobar));
45675 - ptr->name = x;
45676 - ptr->next = current_foobar;
45677 - current_foobar = ptr;
45680 -\x1f
45681 -File: libc.info, Node: Unconstrained Allocation, Next: Allocation Debugging, Prev: Memory Allocation and C, Up: Memory Allocation
45683 -Unconstrained Allocation
45684 -------------------------
45686 - The most general dynamic allocation facility is `malloc'. It allows
45687 -you to allocate blocks of memory of any size at any time, make them
45688 -bigger or smaller at any time, and free the blocks individually at any
45689 -time (or never).
45691 -* Menu:
45693 -* Basic Allocation:: Simple use of `malloc'.
45694 -* Malloc Examples:: Examples of `malloc'. `xmalloc'.
45695 -* Freeing after Malloc:: Use `free' to free a block you
45696 - got with `malloc'.
45697 -* Changing Block Size:: Use `realloc' to make a block
45698 - bigger or smaller.
45699 -* Allocating Cleared Space:: Use `calloc' to allocate a
45700 - block and clear it.
45701 -* Efficiency and Malloc:: Efficiency considerations in use of
45702 - these functions.
45703 -* Aligned Memory Blocks:: Allocating specially aligned memory.
45704 -* Malloc Tunable Parameters:: Use `mallopt' to adjust allocation
45705 - parameters.
45706 -* Heap Consistency Checking:: Automatic checking for errors.
45707 -* Hooks for Malloc:: You can use these hooks for debugging
45708 - programs that use `malloc'.
45709 -* Statistics of Malloc:: Getting information about how much
45710 - memory your program is using.
45711 -* Summary of Malloc:: Summary of `malloc' and related functions.
45713 -\x1f
45714 -File: libc.info, Node: Basic Allocation, Next: Malloc Examples, Up: Unconstrained Allocation
45716 -Basic Memory Allocation
45717 -.......................
45719 - To allocate a block of memory, call `malloc'. The prototype for
45720 -this function is in `stdlib.h'.
45722 - - Function: void * malloc (size_t SIZE)
45723 - This function returns a pointer to a newly allocated block SIZE
45724 - bytes long, or a null pointer if the block could not be allocated.
45726 - The contents of the block are undefined; you must initialize it
45727 -yourself (or use `calloc' instead; *note Allocating Cleared Space::).
45728 -Normally you would cast the value as a pointer to the kind of object
45729 -that you want to store in the block. Here we show an example of doing
45730 -so, and of initializing the space with zeros using the library function
45731 -`memset' (*note Copying and Concatenation::):
45733 - struct foo *ptr;
45734 - ...
45735 - ptr = (struct foo *) malloc (sizeof (struct foo));
45736 - if (ptr == 0) abort ();
45737 - memset (ptr, 0, sizeof (struct foo));
45739 - You can store the result of `malloc' into any pointer variable
45740 -without a cast, because ISO C automatically converts the type `void *'
45741 -to another type of pointer when necessary. But the cast is necessary
45742 -in contexts other than assignment operators or if you might want your
45743 -code to run in traditional C.
45745 - Remember that when allocating space for a string, the argument to
45746 -`malloc' must be one plus the length of the string. This is because a
45747 -string is terminated with a null character that doesn't count in the
45748 -"length" of the string but does need space. For example:
45750 - char *ptr;
45751 - ...
45752 - ptr = (char *) malloc (length + 1);
45754 -*Note Representation of Strings::, for more information about this.
45756 -\x1f
45757 -File: libc.info, Node: Malloc Examples, Next: Freeing after Malloc, Prev: Basic Allocation, Up: Unconstrained Allocation
45759 -Examples of `malloc'
45760 -....................
45762 - If no more space is available, `malloc' returns a null pointer. You
45763 -should check the value of _every_ call to `malloc'. It is useful to
45764 -write a subroutine that calls `malloc' and reports an error if the
45765 -value is a null pointer, returning only if the value is nonzero. This
45766 -function is conventionally called `xmalloc'. Here it is:
45768 - void *
45769 - xmalloc (size_t size)
45771 - register void *value = malloc (size);
45772 - if (value == 0)
45773 - fatal ("virtual memory exhausted");
45774 - return value;
45777 - Here is a real example of using `malloc' (by way of `xmalloc'). The
45778 -function `savestring' will copy a sequence of characters into a newly
45779 -allocated null-terminated string:
45781 - char *
45782 - savestring (const char *ptr, size_t len)
45784 - register char *value = (char *) xmalloc (len + 1);
45785 - value[len] = '\0';
45786 - return (char *) memcpy (value, ptr, len);
45789 - The block that `malloc' gives you is guaranteed to be aligned so
45790 -that it can hold any type of data. In the GNU system, the address is
45791 -always a multiple of eight on most systems, and a multiple of 16 on
45792 -64-bit systems. Only rarely is any higher boundary (such as a page
45793 -boundary) necessary; for those cases, use `memalign', `posix_memalign'
45794 -or `valloc' (*note Aligned Memory Blocks::).
45796 - Note that the memory located after the end of the block is likely to
45797 -be in use for something else; perhaps a block already allocated by
45798 -another call to `malloc'. If you attempt to treat the block as longer
45799 -than you asked for it to be, you are liable to destroy the data that
45800 -`malloc' uses to keep track of its blocks, or you may destroy the
45801 -contents of another block. If you have already allocated a block and
45802 -discover you want it to be bigger, use `realloc' (*note Changing Block
45803 -Size::).
45805 diff -u -udbrN glibc-2.3.2/manual/libc.info-30 glibc-2.3.2-200304020432/manual/libc.info-30
45806 --- glibc-2.3.2/manual/libc.info-30 Sat Mar 1 02:39:41 2003
45807 +++ glibc-2.3.2-200304020432/manual/libc.info-30 Thu Jan 1 01:00:00 1970
45808 @@ -1,1306 +0,0 @@
45809 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
45811 -INFO-DIR-SECTION GNU libraries
45812 -START-INFO-DIR-ENTRY
45813 -* Libc: (libc). C library.
45814 -END-INFO-DIR-ENTRY
45816 - This file documents the GNU C library.
45818 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
45819 -Reference Manual', for Version 2.3.x.
45821 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
45822 -Free Software Foundation, Inc.
45824 - Permission is granted to copy, distribute and/or modify this document
45825 -under the terms of the GNU Free Documentation License, Version 1.1 or
45826 -any later version published by the Free Software Foundation; with the
45827 -Invariant Sections being "Free Software Needs Free Documentation" and
45828 -"GNU Lesser General Public License", the Front-Cover texts being (a)
45829 -(see below), and with the Back-Cover Texts being (b) (see below). A
45830 -copy of the license is included in the section entitled "GNU Free
45831 -Documentation License".
45833 - (a) The FSF's Front-Cover Text is:
45835 - A GNU Manual
45837 - (b) The FSF's Back-Cover Text is:
45839 - You have freedom to copy and modify this GNU Manual, like GNU
45840 -software. Copies published by the Free Software Foundation raise
45841 -funds for GNU development.
45843 -\x1f
45844 -File: libc.info, Node: Editing Characters, Next: Signal Characters, Up: Special Characters
45846 -Characters for Input Editing
45847 -............................
45849 - These special characters are active only in canonical input mode.
45850 -*Note Canonical or Not::.
45852 - - Macro: int VEOF
45853 - This is the subscript for the EOF character in the special control
45854 - character array. `TERMIOS.c_cc[VEOF]' holds the character itself.
45856 - The EOF character is recognized only in canonical input mode. It
45857 - acts as a line terminator in the same way as a newline character,
45858 - but if the EOF character is typed at the beginning of a line it
45859 - causes `read' to return a byte count of zero, indicating
45860 - end-of-file. The EOF character itself is discarded.
45862 - Usually, the EOF character is `C-d'.
45864 - - Macro: int VEOL
45865 - This is the subscript for the EOL character in the special control
45866 - character array. `TERMIOS.c_cc[VEOL]' holds the character itself.
45868 - The EOL character is recognized only in canonical input mode. It
45869 - acts as a line terminator, just like a newline character. The EOL
45870 - character is not discarded; it is read as the last character in
45871 - the input line.
45873 - You don't need to use the EOL character to make <RET> end a line.
45874 - Just set the ICRNL flag. In fact, this is the default state of
45875 - affairs.
45877 - - Macro: int VEOL2
45878 - This is the subscript for the EOL2 character in the special control
45879 - character array. `TERMIOS.c_cc[VEOL2]' holds the character itself.
45881 - The EOL2 character works just like the EOL character (see above),
45882 - but it can be a different character. Thus, you can specify two
45883 - characters to terminate an input line, by setting EOL to one of
45884 - them and EOL2 to the other.
45886 - The EOL2 character is a BSD extension; it exists only on BSD
45887 - systems and the GNU system.
45889 - - Macro: int VERASE
45890 - This is the subscript for the ERASE character in the special
45891 - control character array. `TERMIOS.c_cc[VERASE]' holds the
45892 - character itself.
45894 - The ERASE character is recognized only in canonical input mode.
45895 - When the user types the erase character, the previous character
45896 - typed is discarded. (If the terminal generates multibyte
45897 - character sequences, this may cause more than one byte of input to
45898 - be discarded.) This cannot be used to erase past the beginning of
45899 - the current line of text. The ERASE character itself is discarded.
45901 - Usually, the ERASE character is <DEL>.
45903 - - Macro: int VWERASE
45904 - This is the subscript for the WERASE character in the special
45905 - control character array. `TERMIOS.c_cc[VWERASE]' holds the
45906 - character itself.
45908 - The WERASE character is recognized only in canonical mode. It
45909 - erases an entire word of prior input, and any whitespace after it;
45910 - whitespace characters before the word are not erased.
45912 - The definition of a "word" depends on the setting of the
45913 - `ALTWERASE' mode; *note Local Modes::.
45915 - If the `ALTWERASE' mode is not set, a word is defined as a sequence
45916 - of any characters except space or tab.
45918 - If the `ALTWERASE' mode is set, a word is defined as a sequence of
45919 - characters containing only letters, numbers, and underscores,
45920 - optionally followed by one character that is not a letter, number,
45921 - or underscore.
45923 - The WERASE character is usually `C-w'.
45925 - This is a BSD extension.
45927 - - Macro: int VKILL
45928 - This is the subscript for the KILL character in the special control
45929 - character array. `TERMIOS.c_cc[VKILL]' holds the character itself.
45931 - The KILL character is recognized only in canonical input mode.
45932 - When the user types the kill character, the entire contents of the
45933 - current line of input are discarded. The kill character itself is
45934 - discarded too.
45936 - The KILL character is usually `C-u'.
45938 - - Macro: int VREPRINT
45939 - This is the subscript for the REPRINT character in the special
45940 - control character array. `TERMIOS.c_cc[VREPRINT]' holds the
45941 - character itself.
45943 - The REPRINT character is recognized only in canonical mode. It
45944 - reprints the current input line. If some asynchronous output has
45945 - come while you are typing, this lets you see the line you are
45946 - typing clearly again.
45948 - The REPRINT character is usually `C-r'.
45950 - This is a BSD extension.
45952 -\x1f
45953 -File: libc.info, Node: Signal Characters, Next: Start/Stop Characters, Prev: Editing Characters, Up: Special Characters
45955 -Characters that Cause Signals
45956 -.............................
45958 - These special characters may be active in either canonical or
45959 -noncanonical input mode, but only when the `ISIG' flag is set (*note
45960 -Local Modes::).
45962 - - Macro: int VINTR
45963 - This is the subscript for the INTR character in the special control
45964 - character array. `TERMIOS.c_cc[VINTR]' holds the character itself.
45966 - The INTR (interrupt) character raises a `SIGINT' signal for all
45967 - processes in the foreground job associated with the terminal. The
45968 - INTR character itself is then discarded. *Note Signal Handling::,
45969 - for more information about signals.
45971 - Typically, the INTR character is `C-c'.
45973 - - Macro: int VQUIT
45974 - This is the subscript for the QUIT character in the special control
45975 - character array. `TERMIOS.c_cc[VQUIT]' holds the character itself.
45977 - The QUIT character raises a `SIGQUIT' signal for all processes in
45978 - the foreground job associated with the terminal. The QUIT
45979 - character itself is then discarded. *Note Signal Handling::, for
45980 - more information about signals.
45982 - Typically, the QUIT character is `C-\'.
45984 - - Macro: int VSUSP
45985 - This is the subscript for the SUSP character in the special control
45986 - character array. `TERMIOS.c_cc[VSUSP]' holds the character itself.
45988 - The SUSP (suspend) character is recognized only if the
45989 - implementation supports job control (*note Job Control::). It
45990 - causes a `SIGTSTP' signal to be sent to all processes in the
45991 - foreground job associated with the terminal. The SUSP character
45992 - itself is then discarded. *Note Signal Handling::, for more
45993 - information about signals.
45995 - Typically, the SUSP character is `C-z'.
45997 - Few applications disable the normal interpretation of the SUSP
45998 -character. If your program does this, it should provide some other
45999 -mechanism for the user to stop the job. When the user invokes this
46000 -mechanism, the program should send a `SIGTSTP' signal to the process
46001 -group of the process, not just to the process itself. *Note Signaling
46002 -Another Process::.
46004 - - Macro: int VDSUSP
46005 - This is the subscript for the DSUSP character in the special
46006 - control character array. `TERMIOS.c_cc[VDSUSP]' holds the
46007 - character itself.
46009 - The DSUSP (suspend) character is recognized only if the
46010 - implementation supports job control (*note Job Control::). It
46011 - sends a `SIGTSTP' signal, like the SUSP character, but not right
46012 - away--only when the program tries to read it as input. Not all
46013 - systems with job control support DSUSP; only BSD-compatible
46014 - systems (including the GNU system).
46016 - *Note Signal Handling::, for more information about signals.
46018 - Typically, the DSUSP character is `C-y'.
46020 -\x1f
46021 -File: libc.info, Node: Start/Stop Characters, Next: Other Special, Prev: Signal Characters, Up: Special Characters
46023 -Special Characters for Flow Control
46024 -...................................
46026 - These special characters may be active in either canonical or
46027 -noncanonical input mode, but their use is controlled by the flags
46028 -`IXON' and `IXOFF' (*note Input Modes::).
46030 - - Macro: int VSTART
46031 - This is the subscript for the START character in the special
46032 - control character array. `TERMIOS.c_cc[VSTART]' holds the
46033 - character itself.
46035 - The START character is used to support the `IXON' and `IXOFF'
46036 - input modes. If `IXON' is set, receiving a START character resumes
46037 - suspended output; the START character itself is discarded. If
46038 - `IXANY' is set, receiving any character at all resumes suspended
46039 - output; the resuming character is not discarded unless it is the
46040 - START character. `IXOFF' is set, the system may also transmit
46041 - START characters to the terminal.
46043 - The usual value for the START character is `C-q'. You may not be
46044 - able to change this value--the hardware may insist on using `C-q'
46045 - regardless of what you specify.
46047 - - Macro: int VSTOP
46048 - This is the subscript for the STOP character in the special control
46049 - character array. `TERMIOS.c_cc[VSTOP]' holds the character itself.
46051 - The STOP character is used to support the `IXON' and `IXOFF' input
46052 - modes. If `IXON' is set, receiving a STOP character causes output
46053 - to be suspended; the STOP character itself is discarded. If
46054 - `IXOFF' is set, the system may also transmit STOP characters to the
46055 - terminal, to prevent the input queue from overflowing.
46057 - The usual value for the STOP character is `C-s'. You may not be
46058 - able to change this value--the hardware may insist on using `C-s'
46059 - regardless of what you specify.
46061 -\x1f
46062 -File: libc.info, Node: Other Special, Prev: Start/Stop Characters, Up: Special Characters
46064 -Other Special Characters
46065 -........................
46067 - These special characters exist only in BSD systems and the GNU
46068 -system.
46070 - - Macro: int VLNEXT
46071 - This is the subscript for the LNEXT character in the special
46072 - control character array. `TERMIOS.c_cc[VLNEXT]' holds the
46073 - character itself.
46075 - The LNEXT character is recognized only when `IEXTEN' is set, but in
46076 - both canonical and noncanonical mode. It disables any special
46077 - significance of the next character the user types. Even if the
46078 - character would normally perform some editing function or generate
46079 - a signal, it is read as a plain character. This is the analogue
46080 - of the `C-q' command in Emacs. "LNEXT" stands for "literal next."
46082 - The LNEXT character is usually `C-v'.
46084 - - Macro: int VDISCARD
46085 - This is the subscript for the DISCARD character in the special
46086 - control character array. `TERMIOS.c_cc[VDISCARD]' holds the
46087 - character itself.
46089 - The DISCARD character is recognized only when `IEXTEN' is set, but
46090 - in both canonical and noncanonical mode. Its effect is to toggle
46091 - the discard-output flag. When this flag is set, all program
46092 - output is discarded. Setting the flag also discards all output
46093 - currently in the output buffer. Typing any other character resets
46094 - the flag.
46096 - - Macro: int VSTATUS
46097 - This is the subscript for the STATUS character in the special
46098 - control character array. `TERMIOS.c_cc[VSTATUS]' holds the
46099 - character itself.
46101 - The STATUS character's effect is to print out a status message
46102 - about how the current process is running.
46104 - The STATUS character is recognized only in canonical mode, and
46105 - only if `NOKERNINFO' is not set.
46107 -\x1f
46108 -File: libc.info, Node: Noncanonical Input, Prev: Special Characters, Up: Terminal Modes
46110 -Noncanonical Input
46111 -------------------
46113 - In noncanonical input mode, the special editing characters such as
46114 -ERASE and KILL are ignored. The system facilities for the user to edit
46115 -input are disabled in noncanonical mode, so that all input characters
46116 -(unless they are special for signal or flow-control purposes) are passed
46117 -to the application program exactly as typed. It is up to the
46118 -application program to give the user ways to edit the input, if
46119 -appropriate.
46121 - Noncanonical mode offers special parameters called MIN and TIME for
46122 -controlling whether and how long to wait for input to be available. You
46123 -can even use them to avoid ever waiting--to return immediately with
46124 -whatever input is available, or with no input.
46126 - The MIN and TIME are stored in elements of the `c_cc' array, which
46127 -is a member of the `struct termios' structure. Each element of this
46128 -array has a particular role, and each element has a symbolic constant
46129 -that stands for the index of that element. `VMIN' and `VMAX' are the
46130 -names for the indices in the array of the MIN and TIME slots.
46132 - - Macro: int VMIN
46133 - This is the subscript for the MIN slot in the `c_cc' array. Thus,
46134 - `TERMIOS.c_cc[VMIN]' is the value itself.
46136 - The MIN slot is only meaningful in noncanonical input mode; it
46137 - specifies the minimum number of bytes that must be available in the
46138 - input queue in order for `read' to return.
46140 - - Macro: int VTIME
46141 - This is the subscript for the TIME slot in the `c_cc' array. Thus,
46142 - `TERMIOS.c_cc[VTIME]' is the value itself.
46144 - The TIME slot is only meaningful in noncanonical input mode; it
46145 - specifies how long to wait for input before returning, in units of
46146 - 0.1 seconds.
46148 - The MIN and TIME values interact to determine the criterion for when
46149 -`read' should return; their precise meanings depend on which of them
46150 -are nonzero. There are four possible cases:
46152 - * Both TIME and MIN are nonzero.
46154 - In this case, TIME specifies how long to wait after each input
46155 - character to see if more input arrives. After the first character
46156 - received, `read' keeps waiting until either MIN bytes have arrived
46157 - in all, or TIME elapses with no further input.
46159 - `read' always blocks until the first character arrives, even if
46160 - TIME elapses first. `read' can return more than MIN characters if
46161 - more than MIN happen to be in the queue.
46163 - * Both MIN and TIME are zero.
46165 - In this case, `read' always returns immediately with as many
46166 - characters as are available in the queue, up to the number
46167 - requested. If no input is immediately available, `read' returns a
46168 - value of zero.
46170 - * MIN is zero but TIME has a nonzero value.
46172 - In this case, `read' waits for time TIME for input to become
46173 - available; the availability of a single byte is enough to satisfy
46174 - the read request and cause `read' to return. When it returns, it
46175 - returns as many characters as are available, up to the number
46176 - requested. If no input is available before the timer expires,
46177 - `read' returns a value of zero.
46179 - * TIME is zero but MIN has a nonzero value.
46181 - In this case, `read' waits until at least MIN bytes are available
46182 - in the queue. At that time, `read' returns as many characters as
46183 - are available, up to the number requested. `read' can return more
46184 - than MIN characters if more than MIN happen to be in the queue.
46186 - What happens if MIN is 50 and you ask to read just 10 bytes?
46187 -Normally, `read' waits until there are 50 bytes in the buffer (or, more
46188 -generally, the wait condition described above is satisfied), and then
46189 -reads 10 of them, leaving the other 40 buffered in the operating system
46190 -for a subsequent call to `read'.
46192 - *Portability note:* On some systems, the MIN and TIME slots are
46193 -actually the same as the EOF and EOL slots. This causes no serious
46194 -problem because the MIN and TIME slots are used only in noncanonical
46195 -input and the EOF and EOL slots are used only in canonical input, but it
46196 -isn't very clean. The GNU library allocates separate slots for these
46197 -uses.
46199 - - Function: void cfmakeraw (struct termios *TERMIOS-P)
46200 - This function provides an easy way to set up `*TERMIOS-P' for what
46201 - has traditionally been called "raw mode" in BSD. This uses
46202 - noncanonical input, and turns off most processing to give an
46203 - unmodified channel to the terminal.
46205 - It does exactly this:
46206 - TERMIOS-P->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
46207 - |INLCR|IGNCR|ICRNL|IXON);
46208 - TERMIOS-P->c_oflag &= ~OPOST;
46209 - TERMIOS-P->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
46210 - TERMIOS-P->c_cflag &= ~(CSIZE|PARENB);
46211 - TERMIOS-P->c_cflag |= CS8;
46213 -\x1f
46214 -File: libc.info, Node: BSD Terminal Modes, Next: Line Control, Prev: Terminal Modes, Up: Low-Level Terminal Interface
46216 -BSD Terminal Modes
46217 -==================
46219 - The usual way to get and set terminal modes is with the functions
46220 -described in *Note Terminal Modes::. However, on some systems you can
46221 -use the BSD-derived functions in this section to do some of the same
46222 -thing. On many systems, these functions do not exist. Even with the
46223 -GNU C library, the functions simply fail with `errno' = `ENOSYS' with
46224 -many kernels, including Linux.
46226 - The symbols used in this section are declared in `sgtty.h'.
46228 - - Data Type: struct sgttyb
46229 - This structure is an input or output parameter list for `gtty' and
46230 - `stty'.
46232 - `char sg_ispeed'
46233 - Line speed for input
46235 - `char sg_ospeed'
46236 - Line speed for output
46238 - `char sg_erase'
46239 - Erase character
46241 - `char sg_kill'
46242 - Kill character
46244 - `int sg_flags'
46245 - Various flags
46247 - - Function: int gtty (int FILEDES, struct sgttyb *ATTRIBUTES)
46248 - This function gets the attributes of a terminal.
46250 - `gtty' sets *ATTRIBUTES to describe the terminal attributes of the
46251 - terminal which is open with file descriptor FILEDES.
46253 - - Function: int stty (int FILEDES, struct sgttyb * attributes)
46254 - This function sets the attributes of a terminal.
46256 - `stty' sets the terminal attributes of the terminal which is open
46257 - with file descriptor FILEDES to those described by *FILEDES.
46259 -\x1f
46260 -File: libc.info, Node: Line Control, Next: Noncanon Example, Prev: BSD Terminal Modes, Up: Low-Level Terminal Interface
46262 -Line Control Functions
46263 -======================
46265 - These functions perform miscellaneous control actions on terminal
46266 -devices. As regards terminal access, they are treated like doing
46267 -output: if any of these functions is used by a background process on its
46268 -controlling terminal, normally all processes in the process group are
46269 -sent a `SIGTTOU' signal. The exception is if the calling process
46270 -itself is ignoring or blocking `SIGTTOU' signals, in which case the
46271 -operation is performed and no signal is sent. *Note Job Control::.
46273 - - Function: int tcsendbreak (int FILEDES, int DURATION)
46274 - This function generates a break condition by transmitting a stream
46275 - of zero bits on the terminal associated with the file descriptor
46276 - FILEDES. The duration of the break is controlled by the DURATION
46277 - argument. If zero, the duration is between 0.25 and 0.5 seconds.
46278 - The meaning of a nonzero value depends on the operating system.
46280 - This function does nothing if the terminal is not an asynchronous
46281 - serial data port.
46283 - The return value is normally zero. In the event of an error, a
46284 - value of -1 is returned. The following `errno' error conditions
46285 - are defined for this function:
46287 - `EBADF'
46288 - The FILEDES is not a valid file descriptor.
46290 - `ENOTTY'
46291 - The FILEDES is not associated with a terminal device.
46293 - - Function: int tcdrain (int FILEDES)
46294 - The `tcdrain' function waits until all queued output to the
46295 - terminal FILEDES has been transmitted.
46297 - This function is a cancellation point in multi-threaded programs.
46298 - This is a problem if the thread allocates some resources (like
46299 - memory, file descriptors, semaphores or whatever) at the time
46300 - `tcdrain' is called. If the thread gets canceled these resources
46301 - stay allocated until the program ends. To avoid this calls to
46302 - `tcdrain' should be protected using cancellation handlers.
46304 - The return value is normally zero. In the event of an error, a
46305 - value of -1 is returned. The following `errno' error conditions
46306 - are defined for this function:
46308 - `EBADF'
46309 - The FILEDES is not a valid file descriptor.
46311 - `ENOTTY'
46312 - The FILEDES is not associated with a terminal device.
46314 - `EINTR'
46315 - The operation was interrupted by delivery of a signal. *Note
46316 - Interrupted Primitives::.
46318 - - Function: int tcflush (int FILEDES, int QUEUE)
46319 - The `tcflush' function is used to clear the input and/or output
46320 - queues associated with the terminal file FILEDES. The QUEUE
46321 - argument specifies which queue(s) to clear, and can be one of the
46322 - following values:
46324 - `TCIFLUSH'
46325 - Clear any input data received, but not yet read.
46327 - `TCOFLUSH'
46328 - Clear any output data written, but not yet transmitted.
46330 - `TCIOFLUSH'
46331 - Clear both queued input and output.
46333 - The return value is normally zero. In the event of an error, a
46334 - value of -1 is returned. The following `errno' error conditions
46335 - are defined for this function:
46337 - `EBADF'
46338 - The FILEDES is not a valid file descriptor.
46340 - `ENOTTY'
46341 - The FILEDES is not associated with a terminal device.
46343 - `EINVAL'
46344 - A bad value was supplied as the QUEUE argument.
46346 - It is unfortunate that this function is named `tcflush', because
46347 - the term "flush" is normally used for quite another
46348 - operation--waiting until all output is transmitted--and using it
46349 - for discarding input or output would be confusing. Unfortunately,
46350 - the name `tcflush' comes from POSIX and we cannot change it.
46352 - - Function: int tcflow (int FILEDES, int ACTION)
46353 - The `tcflow' function is used to perform operations relating to
46354 - XON/XOFF flow control on the terminal file specified by FILEDES.
46356 - The ACTION argument specifies what operation to perform, and can
46357 - be one of the following values:
46359 - `TCOOFF'
46360 - Suspend transmission of output.
46362 - `TCOON'
46363 - Restart transmission of output.
46365 - `TCIOFF'
46366 - Transmit a STOP character.
46368 - `TCION'
46369 - Transmit a START character.
46371 - For more information about the STOP and START characters, see
46372 - *Note Special Characters::.
46374 - The return value is normally zero. In the event of an error, a
46375 - value of -1 is returned. The following `errno' error conditions
46376 - are defined for this function:
46378 - `EBADF'
46379 - The FILEDES is not a valid file descriptor.
46381 - `ENOTTY'
46382 - The FILEDES is not associated with a terminal device.
46384 - `EINVAL'
46385 - A bad value was supplied as the ACTION argument.
46387 -\x1f
46388 -File: libc.info, Node: Noncanon Example, Next: Pseudo-Terminals, Prev: Line Control, Up: Low-Level Terminal Interface
46390 -Noncanonical Mode Example
46391 -=========================
46393 - Here is an example program that shows how you can set up a terminal
46394 -device to read single characters in noncanonical input mode, without
46395 -echo.
46397 - #include <unistd.h>
46398 - #include <stdio.h>
46399 - #include <stdlib.h>
46400 - #include <termios.h>
46402 - /* Use this variable to remember original terminal attributes. */
46404 - struct termios saved_attributes;
46406 - void
46407 - reset_input_mode (void)
46409 - tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
46412 - void
46413 - set_input_mode (void)
46415 - struct termios tattr;
46416 - char *name;
46418 - /* Make sure stdin is a terminal. */
46419 - if (!isatty (STDIN_FILENO))
46421 - fprintf (stderr, "Not a terminal.\n");
46422 - exit (EXIT_FAILURE);
46425 - /* Save the terminal attributes so we can restore them later. */
46426 - tcgetattr (STDIN_FILENO, &saved_attributes);
46427 - atexit (reset_input_mode);
46429 - /* Set the funny terminal modes. */
46430 - tcgetattr (STDIN_FILENO, &tattr);
46431 - tattr.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
46432 - tattr.c_cc[VMIN] = 1;
46433 - tattr.c_cc[VTIME] = 0;
46434 - tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr);
46437 - int
46438 - main (void)
46440 - char c;
46442 - set_input_mode ();
46444 - while (1)
46446 - read (STDIN_FILENO, &c, 1);
46447 - if (c == '\004') /* `C-d' */
46448 - break;
46449 - else
46450 - putchar (c);
46453 - return EXIT_SUCCESS;
46456 - This program is careful to restore the original terminal modes before
46457 -exiting or terminating with a signal. It uses the `atexit' function
46458 -(*note Cleanups on Exit::) to make sure this is done by `exit'.
46460 - The shell is supposed to take care of resetting the terminal modes
46461 -when a process is stopped or continued; see *Note Job Control::. But
46462 -some existing shells do not actually do this, so you may wish to
46463 -establish handlers for job control signals that reset terminal modes.
46464 -The above example does so.
46466 -\x1f
46467 -File: libc.info, Node: Pseudo-Terminals, Prev: Noncanon Example, Up: Low-Level Terminal Interface
46469 -Pseudo-Terminals
46470 -================
46472 - A "pseudo-terminal" is a special interprocess communication channel
46473 -that acts like a terminal. One end of the channel is called the
46474 -"master" side or "master pseudo-terminal device", the other side is
46475 -called the "slave" side. Data written to the master side is received
46476 -by the slave side as if it was the result of a user typing at an
46477 -ordinary terminal, and data written to the slave side is sent to the
46478 -master side as if it was written on an ordinary terminal.
46480 - Pseudo terminals are the way programs like `xterm' and `emacs'
46481 -implement their terminal emulation functionality.
46483 -* Menu:
46485 -* Allocation:: Allocating a pseudo terminal.
46486 -* Pseudo-Terminal Pairs:: How to open both sides of a
46487 - pseudo-terminal in a single operation.
46489 -\x1f
46490 -File: libc.info, Node: Allocation, Next: Pseudo-Terminal Pairs, Up: Pseudo-Terminals
46492 -Allocating Pseudo-Terminals
46493 ----------------------------
46495 - This subsection describes functions for allocating a pseudo-terminal,
46496 -and for making this pseudo-terminal available for actual use. These
46497 -functions are declared in the header file `stdlib.h'.
46499 - - Function: int getpt (void)
46500 - The `getpt' function returns a new file descriptor for the next
46501 - available master pseudo-terminal. The normal return value from
46502 - `getpt' is a non-negative integer file descriptor. In the case of
46503 - an error, a value of -1 is returned instead. The following
46504 - `errno' conditions are defined for this function:
46506 - `ENOENT'
46507 - There are no free master pseudo-terminals available.
46509 - This function is a GNU extension.
46511 - - Function: int grantpt (int FILEDES)
46512 - The `grantpt' function changes the ownership and access permission
46513 - of the slave pseudo-terminal device corresponding to the master
46514 - pseudo-terminal device associated with the file descriptor
46515 - FILEDES. The owner is set from the real user ID of the calling
46516 - process (*note Process Persona::), and the group is set to a
46517 - special group (typically "tty") or from the real group ID of the
46518 - calling process. The access permission is set such that the file
46519 - is both readable and writable by the owner and only writable by
46520 - the group.
46522 - On some systems this function is implemented by invoking a special
46523 - `setuid' root program (*note How Change Persona::). As a
46524 - consequence, installing a signal handler for the `SIGCHLD' signal
46525 - (*note Job Control Signals::) may interfere with a call to
46526 - `grantpt'.
46528 - The normal return value from `grantpt' is 0; a value of -1 is
46529 - returned in case of failure. The following `errno' error
46530 - conditions are defined for this function:
46532 - `EBADF'
46533 - The FILEDES argument is not a valid file descriptor.
46535 - `EINVAL'
46536 - The FILEDES argument is not associated with a master
46537 - pseudo-terminal device.
46539 - `EACCES'
46540 - The slave pseudo-terminal device corresponding to the master
46541 - associated with FILEDES could not be accessed.
46544 - - Function: int unlockpt (int FILEDES)
46545 - The `unlockpt' function unlocks the slave pseudo-terminal device
46546 - corresponding to the master pseudo-terminal device associated with
46547 - the file descriptor FILEDES. On many systems, the slave can only
46548 - be opened after unlocking, so portable applications should always
46549 - call `unlockpt' before trying to open the slave.
46551 - The normal return value from `unlockpt' is 0; a value of -1 is
46552 - returned in case of failure. The following `errno' error
46553 - conditions are defined for this function:
46555 - `EBADF'
46556 - The FILEDES argument is not a valid file descriptor.
46558 - `EINVAL'
46559 - The FILEDES argument is not associated with a master
46560 - pseudo-terminal device.
46562 - - Function: char * ptsname (int FILEDES)
46563 - If the file descriptor FILEDES is associated with a master
46564 - pseudo-terminal device, the `ptsname' function returns a pointer
46565 - to a statically-allocated, null-terminated string containing the
46566 - file name of the associated slave pseudo-terminal file. This
46567 - string might be overwritten by subsequent calls to `ptsname'.
46569 - - Function: int ptsname_r (int FILEDES, char *BUF, size_t LEN)
46570 - The `ptsname_r' function is similar to the `ptsname' function
46571 - except that it places its result into the user-specified buffer
46572 - starting at BUF with length LEN.
46574 - This function is a GNU extension.
46576 - *Portability Note:* On System V derived systems, the file returned
46577 -by the `ptsname' and `ptsname_r' functions may be STREAMS-based, and
46578 -therefore require additional processing after opening before it
46579 -actually behaves as a pseudo terminal.
46581 - Typical usage of these functions is illustrated by the following
46582 -example:
46583 - int
46584 - open_pty_pair (int *amaster, int *aslave)
46586 - int master, slave;
46587 - char *name;
46589 - master = getpt ();
46590 - if (master < 0)
46591 - return 0;
46593 - if (grantpt (master) < 0 || unlockpt (master) < 0)
46594 - goto close_master;
46595 - name = ptsname (master);
46596 - if (name == NULL)
46597 - goto close_master;
46599 - slave = open (name, O_RDWR);
46600 - if (slave == -1)
46601 - goto close_master;
46603 - if (isastream (slave))
46605 - if (ioctl (slave, I_PUSH, "ptem") < 0
46606 - || ioctl (slave, I_PUSH, "ldterm") < 0)
46607 - goto close_slave;
46610 - *amaster = master;
46611 - *aslave = slave;
46612 - return 1;
46614 - close_slave:
46615 - close (slave);
46617 - close_master:
46618 - close (master);
46619 - return 0;
46622 -\x1f
46623 -File: libc.info, Node: Pseudo-Terminal Pairs, Prev: Allocation, Up: Pseudo-Terminals
46625 -Opening a Pseudo-Terminal Pair
46626 -------------------------------
46628 - These functions, derived from BSD, are available in the separate
46629 -`libutil' library, and declared in `pty.h'.
46631 - - Function: int openpty (int *AMASTER, int *ASLAVE, char *NAME, struct
46632 - termios *TERMP, struct winsize *WINP)
46633 - This function allocates and opens a pseudo-terminal pair,
46634 - returning the file descriptor for the master in *AMASTER, and the
46635 - file descriptor for the slave in *ASLAVE. If the argument NAME is
46636 - not a null pointer, the file name of the slave pseudo-terminal
46637 - device is stored in `*name'. If TERMP is not a null pointer, the
46638 - terminal attributes of the slave are set to the ones specified in
46639 - the structure that TERMP points to (*note Terminal Modes::).
46640 - Likewise, if the WINP is not a null pointer, the screen size of
46641 - the slave is set to the values specified in the structure that
46642 - WINP points to.
46644 - The normal return value from `openpty' is 0; a value of -1 is
46645 - returned in case of failure. The following `errno' conditions are
46646 - defined for this function:
46648 - `ENOENT'
46649 - There are no free pseudo-terminal pairs available.
46651 - *Warning:* Using the `openpty' function with NAME not set to
46652 - `NULL' is *very dangerous* because it provides no protection
46653 - against overflowing the string NAME. You should use the `ttyname'
46654 - function on the file descriptor returned in *SLAVE to find out the
46655 - file name of the slave pseudo-terminal device instead.
46657 - - Function: int forkpty (int *AMASTER, char *NAME, struct termios
46658 - *TERMP, struct winsize *WINP)
46659 - This function is similar to the `openpty' function, but in
46660 - addition, forks a new process (*note Creating a Process::) and
46661 - makes the newly opened slave pseudo-terminal device the
46662 - controlling terminal (*note Controlling Terminal::) for the child
46663 - process.
46665 - If the operation is successful, there are then both parent and
46666 - child processes and both see `forkpty' return, but with different
46667 - values: it returns a value of 0 in the child process and returns
46668 - the child's process ID in the parent process.
46670 - If the allocation of a pseudo-terminal pair or the process creation
46671 - failed, `forkpty' returns a value of -1 in the parent process.
46673 - *Warning:* The `forkpty' function has the same problems with
46674 - respect to the NAME argument as `openpty'.
46676 -\x1f
46677 -File: libc.info, Node: Syslog, Next: Mathematics, Prev: Low-Level Terminal Interface, Up: Top
46679 -Syslog
46680 -******
46682 - This chapter describes facilities for issuing and logging messages of
46683 -system administration interest. This chapter has nothing to do with
46684 -programs issuing messages to their own users or keeping private logs
46685 -(One would typically do that with the facilities described in *Note I/O
46686 -on Streams::).
46688 - Most systems have a facility called "Syslog" that allows programs to
46689 -submit messages of interest to system administrators and can be
46690 -configured to pass these messages on in various ways, such as printing
46691 -on the console, mailing to a particular person, or recording in a log
46692 -file for future reference.
46694 - A program uses the facilities in this chapter to submit such
46695 -messages.
46697 -* Menu:
46699 -* Overview of Syslog:: Overview of a system's Syslog facility
46700 -* Submitting Syslog Messages:: Functions to submit messages to Syslog
46702 -\x1f
46703 -File: libc.info, Node: Overview of Syslog, Next: Submitting Syslog Messages, Up: Syslog
46705 -Overview of Syslog
46706 -==================
46708 - System administrators have to deal with lots of different kinds of
46709 -messages from a plethora of subsystems within each system, and usually
46710 -lots of systems as well. For example, an FTP server might report every
46711 -connection it gets. The kernel might report hardware failures on a disk
46712 -drive. A DNS server might report usage statistics at regular intervals.
46714 - Some of these messages need to be brought to a system administrator's
46715 -attention immediately. And it may not be just any system administrator
46716 -- there may be a particular system administrator who deals with a
46717 -particular kind of message. Other messages just need to be recorded for
46718 -future reference if there is a problem. Still others may need to have
46719 -information extracted from them by an automated process that generates
46720 -monthly reports.
46722 - To deal with these messages, most Unix systems have a facility called
46723 -"Syslog." It is generally based on a daemon called "Syslogd" Syslogd
46724 -listens for messages on a Unix domain socket named `/dev/log'. Based
46725 -on classification information in the messages and its configuration
46726 -file (usually `/etc/syslog.conf'), Syslogd routes them in various ways.
46727 -Some of the popular routings are:
46729 - * Write to the system console
46731 - * Mail to a specific user
46733 - * Write to a log file
46735 - * Pass to another daemon
46737 - * Discard
46739 - Syslogd can also handle messages from other systems. It listens on
46740 -the `syslog' UDP port as well as the local socket for messages.
46742 - Syslog can handle messages from the kernel itself. But the kernel
46743 -doesn't write to `/dev/log'; rather, another daemon (sometimes called
46744 -"Klogd") extracts messages from the kernel and passes them on to Syslog
46745 -as any other process would (and it properly identifies them as messages
46746 -from the kernel).
46748 - Syslog can even handle messages that the kernel issued before
46749 -Syslogd or Klogd was running. A Linux kernel, for example, stores
46750 -startup messages in a kernel message ring and they are normally still
46751 -there when Klogd later starts up. Assuming Syslogd is running by the
46752 -time Klogd starts, Klogd then passes everything in the message ring to
46753 -it.
46755 - In order to classify messages for disposition, Syslog requires any
46756 -process that submits a message to it to provide two pieces of
46757 -classification information with it:
46759 -facility
46760 - This identifies who submitted the message. There are a small
46761 - number of facilities defined. The kernel, the mail subsystem, and
46762 - an FTP server are examples of recognized facilities. For the
46763 - complete list, *Note syslog; vsyslog::. Keep in mind that these
46764 - are essentially arbitrary classifications. "Mail subsystem"
46765 - doesn't have any more meaning than the system administrator gives
46766 - to it.
46768 -priority
46769 - This tells how important the content of the message is. Examples
46770 - of defined priority values are: debug, informational, warning,
46771 - critical. For the complete list, *Note syslog; vsyslog::. Except
46772 - for the fact that the priorities have a defined order, the meaning
46773 - of each of these priorities is entirely determined by the system
46774 - administrator.
46776 - A "facility/priority" is a number that indicates both the facility
46777 -and the priority.
46779 - *Warning:* This terminology is not universal. Some people use
46780 -"level" to refer to the priority and "priority" to refer to the
46781 -combination of facility and priority. A Linux kernel has a concept of a
46782 -message "level," which corresponds both to a Syslog priority and to a
46783 -Syslog facility/priority (It can be both because the facility code for
46784 -the kernel is zero, and that makes priority and facility/priority the
46785 -same value).
46787 - The GNU C library provides functions to submit messages to Syslog.
46788 -They do it by writing to the `/dev/log' socket. *Note Submitting
46789 -Syslog Messages::.
46791 - The GNU C library functions only work to submit messages to the
46792 -Syslog facility on the same system. To submit a message to the Syslog
46793 -facility on another system, use the socket I/O functions to write a UDP
46794 -datagram to the `syslog' UDP port on that system. *Note Sockets::.
46796 -\x1f
46797 -File: libc.info, Node: Submitting Syslog Messages, Prev: Overview of Syslog, Up: Syslog
46799 -Submitting Syslog Messages
46800 -==========================
46802 - The GNU C library provides functions to submit messages to the Syslog
46803 -facility:
46805 -* Menu:
46807 -* openlog:: Open connection to Syslog
46808 -* syslog; vsyslog:: Submit message to Syslog
46809 -* closelog:: Close connection to Syslog
46810 -* setlogmask:: Cause certain messages to be ignored
46811 -* Syslog Example:: Example of all of the above
46813 - These functions only work to submit messages to the Syslog facility
46814 -on the same system. To submit a message to the Syslog facility on
46815 -another system, use the socket I/O functions to write a UDP datagram to
46816 -the `syslog' UDP port on that system. *Note Sockets::.
46818 -\x1f
46819 -File: libc.info, Node: openlog, Next: syslog; vsyslog, Up: Submitting Syslog Messages
46821 -openlog
46822 --------
46824 - The symbols referred to in this section are declared in the file
46825 -`syslog.h'.
46827 - - Function: void openlog (const char *IDENT, int OPTION, int FACILITY)
46828 - `openlog' opens or reopens a connection to Syslog in preparation
46829 - for submitting messages.
46831 - IDENT is an arbitrary identification string which future `syslog'
46832 - invocations will prefix to each message. This is intended to
46833 - identify the source of the message, and people conventionally set
46834 - it to the name of the program that will submit the messages.
46836 - If IDENT is NULL, or if `openlog' is not called, the default
46837 - identification string used in Syslog messages will be the program
46838 - name, taken from argv[0].
46840 - Please note that the string pointer IDENT will be retained
46841 - internally by the Syslog routines. You must not free the memory
46842 - that IDENT points to. It is also dangerous to pass a reference to
46843 - an automatic variable since leaving the scope would mean ending the
46844 - lifetime of the variable. If you want to change the IDENT string,
46845 - you must call `openlog' again; overwriting the string pointed to by
46846 - IDENT is not thread-safe.
46848 - You can cause the Syslog routines to drop the reference to IDENT
46849 - and go back to the default string (the program name taken from
46850 - argv[0]), by calling `closelog': *Note closelog::.
46852 - In particular, if you are writing code for a shared library that
46853 - might get loaded and then unloaded (e.g. a PAM module), and you
46854 - use `openlog', you must call `closelog' before any point where
46855 - your library might get unloaded, as in this example:
46857 - #include <syslog.h>
46859 - void
46860 - shared_library_function (void)
46862 - openlog ("mylibrary", option, priority);
46864 - syslog (LOG_INFO, "shared library has been invoked");
46866 - closelog ();
46869 - Without the call to `closelog', future invocations of `syslog' by
46870 - the program using the shared library may crash, if the library gets
46871 - unloaded and the memory containing the string `"mylibrary"' becomes
46872 - unmapped. This is a limitation of the BSD syslog interface.
46874 - `openlog' may or may not open the `/dev/log' socket, depending on
46875 - OPTION. If it does, it tries to open it and connect it as a
46876 - stream socket. If that doesn't work, it tries to open it and
46877 - connect it as a datagram socket. The socket has the "Close on
46878 - Exec" attribute, so the kernel will close it if the process
46879 - performs an exec.
46881 - You don't have to use `openlog'. If you call `syslog' without
46882 - having called `openlog', `syslog' just opens the connection
46883 - implicitly and uses defaults for the information in IDENT and
46884 - OPTIONS.
46886 - OPTIONS is a bit string, with the bits as defined by the following
46887 - single bit masks:
46889 - `LOG_PERROR'
46890 - If on, `openlog' sets up the connection so that any `syslog'
46891 - on this connection writes its message to the calling process'
46892 - Standard Error stream in addition to submitting it to Syslog.
46893 - If off, `syslog' does not write the message to Standard
46894 - Error.
46896 - `LOG_CONS'
46897 - If on, `openlog' sets up the connection so that a `syslog' on
46898 - this connection that fails to submit a message to Syslog
46899 - writes the message instead to system console. If off,
46900 - `syslog' does not write to the system console (but of course
46901 - Syslog may write messages it receives to the console).
46903 - `LOG_PID'
46904 - When on, `openlog' sets up the connection so that a `syslog'
46905 - on this connection inserts the calling process' Process ID
46906 - (PID) into the message. When off, `openlog' does not insert
46907 - the PID.
46909 - `LOG_NDELAY'
46910 - When on, `openlog' opens and connects the `/dev/log' socket.
46911 - When off, a future `syslog' call must open and connect the
46912 - socket.
46914 - *Portability note:* In early systems, the sense of this bit
46915 - was exactly the opposite.
46917 - `LOG_ODELAY'
46918 - This bit does nothing. It exists for backward compatibility.
46920 - If any other bit in OPTIONS is on, the result is undefined.
46922 - FACILITY is the default facility code for this connection. A
46923 - `syslog' on this connection that specifies default facility causes
46924 - this facility to be associated with the message. See `syslog' for
46925 - possible values. A value of zero means the default default, which
46926 - is `LOG_USER'.
46928 - If a Syslog connection is already open when you call `openlog',
46929 - `openlog' "reopens" the connection. Reopening is like opening
46930 - except that if you specify zero for the default facility code, the
46931 - default facility code simply remains unchanged and if you specify
46932 - LOG_NDELAY and the socket is already open and connected, `openlog'
46933 - just leaves it that way.
46936 -\x1f
46937 -File: libc.info, Node: syslog; vsyslog, Next: closelog, Prev: openlog, Up: Submitting Syslog Messages
46939 -syslog, vsyslog
46940 ----------------
46942 - The symbols referred to in this section are declared in the file
46943 -`syslog.h'.
46945 - - Function: void syslog (int FACILITY_PRIORITY, char *FORMAT, ...)
46946 - `syslog' submits a message to the Syslog facility. It does this by
46947 - writing to the Unix domain socket `/dev/log'.
46949 - `syslog' submits the message with the facility and priority
46950 - indicated by FACILITY_PRIORITY. The macro `LOG_MAKEPRI' generates
46951 - a facility/priority from a facility and a priority, as in the
46952 - following example:
46954 - LOG_MAKEPRI(LOG_USER, LOG_WARNING)
46956 - The possible values for the facility code are (macros):
46958 - `LOG_USER'
46959 - A miscellaneous user process
46961 - `LOG_MAIL'
46962 - Mail
46964 - `LOG_DAEMON'
46965 - A miscellaneous system daemon
46967 - `LOG_AUTH'
46968 - Security (authorization)
46970 - `LOG_SYSLOG'
46971 - Syslog
46973 - `LOG_LPR'
46974 - Central printer
46976 - `LOG_NEWS'
46977 - Network news (e.g. Usenet)
46979 - `LOG_UUCP'
46980 - UUCP
46982 - `LOG_CRON'
46983 - Cron and At
46985 - `LOG_AUTHPRIV'
46986 - Private security (authorization)
46988 - `LOG_FTP'
46989 - Ftp server
46991 - `LOG_LOCAL0'
46992 - Locally defined
46994 - `LOG_LOCAL1'
46995 - Locally defined
46997 - `LOG_LOCAL2'
46998 - Locally defined
47000 - `LOG_LOCAL3'
47001 - Locally defined
47003 - `LOG_LOCAL4'
47004 - Locally defined
47006 - `LOG_LOCAL5'
47007 - Locally defined
47009 - `LOG_LOCAL6'
47010 - Locally defined
47012 - `LOG_LOCAL7'
47013 - Locally defined
47015 - Results are undefined if the facility code is anything else.
47017 - *note:* `syslog' recognizes one other facility code: that of the
47018 - kernel. But you can't specify that facility code with these
47019 - functions. If you try, it looks the same to `syslog' as if you are
47020 - requesting the default facility. But you wouldn't want to anyway,
47021 - because any program that uses the GNU C library is not the kernel.
47023 - You can use just a priority code as FACILITY_PRIORITY. In that
47024 - case, `syslog' assumes the default facility established when the
47025 - Syslog connection was opened. *Note Syslog Example::.
47027 - The possible values for the priority code are (macros):
47029 - `LOG_EMERG'
47030 - The message says the system is unusable.
47032 - `LOG_ALERT'
47033 - Action on the message must be taken immediately.
47035 - `LOG_CRIT'
47036 - The message states a critical condition.
47038 - `LOG_ERR'
47039 - The message describes an error.
47041 - `LOG_WARNING'
47042 - The message is a warning.
47044 - `LOG_NOTICE'
47045 - The message describes a normal but important event.
47047 - `LOG_INFO'
47048 - The message is purely informational.
47050 - `LOG_DEBUG'
47051 - The message is only for debugging purposes.
47053 - Results are undefined if the priority code is anything else.
47055 - If the process does not presently have a Syslog connection open
47056 - (i.e. it did not call `openlog'), `syslog' implicitly opens the
47057 - connection the same as `openlog' would, with the following defaults
47058 - for information that would otherwise be included in an `openlog'
47059 - call: The default identification string is the program name. The
47060 - default default facility is `LOG_USER'. The default for all the
47061 - connection options in OPTIONS is as if those bits were off.
47062 - `syslog' leaves the Syslog connection open.
47064 - If the `dev/log' socket is not open and connected, `syslog' opens
47065 - and connects it, the same as `openlog' with the `LOG_NDELAY'
47066 - option would.
47068 - `syslog' leaves `/dev/log' open and connected unless its attempt
47069 - to send the message failed, in which case `syslog' closes it (with
47070 - the hope that a future implicit open will restore the Syslog
47071 - connection to a usable state).
47073 - Example:
47076 - #include <syslog.h>
47077 - syslog (LOG_MAKEPRI(LOG_LOCAL1, LOG_ERROR),
47078 - "Unable to make network connection to %s. Error=%m", host);
47081 - - Function: void vsyslog (int FACILITY_PRIORITY, char *FORMAT, va_list
47082 - arglist)
47083 - This is functionally identical to `syslog', with the BSD style
47084 - variable length argument.
47087 -\x1f
47088 -File: libc.info, Node: closelog, Next: setlogmask, Prev: syslog; vsyslog, Up: Submitting Syslog Messages
47090 -closelog
47091 ---------
47093 - The symbols referred to in this section are declared in the file
47094 -`syslog.h'.
47096 - - Function: void closelog (void)
47097 - `closelog' closes the current Syslog connection, if there is one.
47098 - This includes closing the `dev/log' socket, if it is open.
47099 - `closelog' also sets the identification string for Syslog messages
47100 - back to the default, if `openlog' was called with a non-NULL
47101 - argument to IDENT. The default identification string is the
47102 - program name taken from argv[0].
47104 - If you are writing shared library code that uses `openlog' to
47105 - generate custom syslog output, you should use `closelog' to drop
47106 - the GNU C library's internal reference to the IDENT pointer when
47107 - you are done. Please read the section on `openlog' for more
47108 - information: *Note openlog::.
47110 - `closelog' does not flush any buffers. You do not have to call
47111 - `closelog' before re-opening a Syslog connection with `initlog'.
47112 - Syslog connections are automatically closed on exec or exit.
47115 diff -u -udbrN glibc-2.3.2/manual/libc.info-31 glibc-2.3.2-200304020432/manual/libc.info-31
47116 --- glibc-2.3.2/manual/libc.info-31 Sat Mar 1 02:39:41 2003
47117 +++ glibc-2.3.2-200304020432/manual/libc.info-31 Thu Jan 1 01:00:00 1970
47118 @@ -1,799 +0,0 @@
47119 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
47121 -INFO-DIR-SECTION GNU libraries
47122 -START-INFO-DIR-ENTRY
47123 -* Libc: (libc). C library.
47124 -END-INFO-DIR-ENTRY
47126 - This file documents the GNU C library.
47128 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
47129 -Reference Manual', for Version 2.3.x.
47131 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
47132 -Free Software Foundation, Inc.
47134 - Permission is granted to copy, distribute and/or modify this document
47135 -under the terms of the GNU Free Documentation License, Version 1.1 or
47136 -any later version published by the Free Software Foundation; with the
47137 -Invariant Sections being "Free Software Needs Free Documentation" and
47138 -"GNU Lesser General Public License", the Front-Cover texts being (a)
47139 -(see below), and with the Back-Cover Texts being (b) (see below). A
47140 -copy of the license is included in the section entitled "GNU Free
47141 -Documentation License".
47143 - (a) The FSF's Front-Cover Text is:
47145 - A GNU Manual
47147 - (b) The FSF's Back-Cover Text is:
47149 - You have freedom to copy and modify this GNU Manual, like GNU
47150 -software. Copies published by the Free Software Foundation raise
47151 -funds for GNU development.
47153 -\x1f
47154 -File: libc.info, Node: setlogmask, Next: Syslog Example, Prev: closelog, Up: Submitting Syslog Messages
47156 -setlogmask
47157 -----------
47159 - The symbols referred to in this section are declared in the file
47160 -`syslog.h'.
47162 - - Function: int setlogmask (int MASK)
47163 - `setlogmask' sets a mask (the "logmask") that determines which
47164 - future `syslog' calls shall be ignored. If a program has not
47165 - called `setlogmask', `syslog' doesn't ignore any calls. You can
47166 - use `setlogmask' to specify that messages of particular priorities
47167 - shall be ignored in the future.
47169 - A `setlogmask' call overrides any previous `setlogmask' call.
47171 - Note that the logmask exists entirely independently of opening and
47172 - closing of Syslog connections.
47174 - Setting the logmask has a similar effect to, but is not the same
47175 - as, configuring Syslog. The Syslog configuration may cause Syslog
47176 - to discard certain messages it receives, but the logmask causes
47177 - certain messages never to get submitted to Syslog in the first
47178 - place.
47180 - MASK is a bit string with one bit corresponding to each of the
47181 - possible message priorities. If the bit is on, `syslog' handles
47182 - messages of that priority normally. If it is off, `syslog'
47183 - discards messages of that priority. Use the message priority
47184 - macros described in *Note syslog; vsyslog:: and the `LOG_MASK' to
47185 - construct an appropriate MASK value, as in this example:
47187 - LOG_MASK(LOG_EMERG) | LOG_MASK(LOG_ERROR)
47189 - or
47191 - ~(LOG_MASK(LOG_INFO))
47193 - There is also a `LOG_UPTO' macro, which generates a mask with the
47194 - bits on for a certain priority and all priorities above it:
47196 - LOG_UPTO(LOG_ERROR)
47198 - The unfortunate naming of the macro is due to the fact that
47199 - internally, higher numbers are used for lower message priorities.
47202 -\x1f
47203 -File: libc.info, Node: Syslog Example, Prev: setlogmask, Up: Submitting Syslog Messages
47205 -Syslog Example
47206 ---------------
47208 - Here is an example of `openlog', `syslog', and `closelog':
47210 - This example sets the logmask so that debug and informational
47211 -messages get discarded without ever reaching Syslog. So the second
47212 -`syslog' in the example does nothing.
47214 - #include <syslog.h>
47216 - setlogmask (LOG_UPTO (LOG_NOTICE));
47218 - openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
47220 - syslog (LOG_NOTICE, "Program started by User %d", getuid ());
47221 - syslog (LOG_INFO, "A tree falls in a forest");
47223 - closelog ();
47225 -\x1f
47226 -File: libc.info, Node: Mathematics, Next: Arithmetic, Prev: Syslog, Up: Top
47228 -Mathematics
47229 -***********
47231 - This chapter contains information about functions for performing
47232 -mathematical computations, such as trigonometric functions. Most of
47233 -these functions have prototypes declared in the header file `math.h'.
47234 -The complex-valued functions are defined in `complex.h'.
47236 - All mathematical functions which take a floating-point argument have
47237 -three variants, one each for `double', `float', and `long double'
47238 -arguments. The `double' versions are mostly defined in ISO C89. The
47239 -`float' and `long double' versions are from the numeric extensions to C
47240 -included in ISO C99.
47242 - Which of the three versions of a function should be used depends on
47243 -the situation. For most calculations, the `float' functions are the
47244 -fastest. On the other hand, the `long double' functions have the
47245 -highest precision. `double' is somewhere in between. It is usually
47246 -wise to pick the narrowest type that can accommodate your data. Not
47247 -all machines have a distinct `long double' type; it may be the same as
47248 -`double'.
47250 -* Menu:
47252 -* Mathematical Constants:: Precise numeric values for often-used
47253 - constants.
47254 -* Trig Functions:: Sine, cosine, tangent, and friends.
47255 -* Inverse Trig Functions:: Arcsine, arccosine, etc.
47256 -* Exponents and Logarithms:: Also pow and sqrt.
47257 -* Hyperbolic Functions:: sinh, cosh, tanh, etc.
47258 -* Special Functions:: Bessel, gamma, erf.
47259 -* Errors in Math Functions:: Known Maximum Errors in Math Functions.
47260 -* Pseudo-Random Numbers:: Functions for generating pseudo-random
47261 - numbers.
47262 -* FP Function Optimizations:: Fast code or small code.
47264 -\x1f
47265 -File: libc.info, Node: Mathematical Constants, Next: Trig Functions, Up: Mathematics
47267 -Predefined Mathematical Constants
47268 -=================================
47270 - The header `math.h' defines several useful mathematical constants.
47271 -All values are defined as preprocessor macros starting with `M_'. The
47272 -values provided are:
47274 -`M_E'
47275 - The base of natural logarithms.
47277 -`M_LOG2E'
47278 - The logarithm to base `2' of `M_E'.
47280 -`M_LOG10E'
47281 - The logarithm to base `10' of `M_E'.
47283 -`M_LN2'
47284 - The natural logarithm of `2'.
47286 -`M_LN10'
47287 - The natural logarithm of `10'.
47289 -`M_PI'
47290 - Pi, the ratio of a circle's circumference to its diameter.
47292 -`M_PI_2'
47293 - Pi divided by two.
47295 -`M_PI_4'
47296 - Pi divided by four.
47298 -`M_1_PI'
47299 - The reciprocal of pi (1/pi)
47301 -`M_2_PI'
47302 - Two times the reciprocal of pi.
47304 -`M_2_SQRTPI'
47305 - Two times the reciprocal of the square root of pi.
47307 -`M_SQRT2'
47308 - The square root of two.
47310 -`M_SQRT1_2'
47311 - The reciprocal of the square root of two (also the square root of
47312 - 1/2).
47314 - These constants come from the Unix98 standard and were also
47315 -available in 4.4BSD; therefore they are only defined if `_BSD_SOURCE' or
47316 -`_XOPEN_SOURCE=500', or a more general feature select macro, is
47317 -defined. The default set of features includes these constants. *Note
47318 -Feature Test Macros::.
47320 - All values are of type `double'. As an extension, the GNU C library
47321 -also defines these constants with type `long double'. The `long
47322 -double' macros have a lowercase `l' appended to their names: `M_El',
47323 -`M_PIl', and so forth. These are only available if `_GNU_SOURCE' is
47324 -defined.
47326 - _Note:_ Some programs use a constant named `PI' which has the same
47327 -value as `M_PI'. This constant is not standard; it may have appeared
47328 -in some old AT&T headers, and is mentioned in Stroustrup's book on C++.
47329 -It infringes on the user's name space, so the GNU C library does not
47330 -define it. Fixing programs written to expect it is simple: replace
47331 -`PI' with `M_PI' throughout, or put `-DPI=M_PI' on the compiler command
47332 -line.
47334 -\x1f
47335 -File: libc.info, Node: Trig Functions, Next: Inverse Trig Functions, Prev: Mathematical Constants, Up: Mathematics
47337 -Trigonometric Functions
47338 -=======================
47340 - These are the familiar `sin', `cos', and `tan' functions. The
47341 -arguments to all of these functions are in units of radians; recall
47342 -that pi radians equals 180 degrees.
47344 - The math library normally defines `M_PI' to a `double' approximation
47345 -of pi. If strict ISO and/or POSIX compliance are requested this
47346 -constant is not defined, but you can easily define it yourself:
47348 - #define M_PI 3.14159265358979323846264338327
47350 -You can also compute the value of pi with the expression `acos (-1.0)'.
47352 - - Function: double sin (double X)
47353 - - Function: float sinf (float X)
47354 - - Function: long double sinl (long double X)
47355 - These functions return the sine of X, where X is given in radians.
47356 - The return value is in the range `-1' to `1'.
47358 - - Function: double cos (double X)
47359 - - Function: float cosf (float X)
47360 - - Function: long double cosl (long double X)
47361 - These functions return the cosine of X, where X is given in
47362 - radians. The return value is in the range `-1' to `1'.
47364 - - Function: double tan (double X)
47365 - - Function: float tanf (float X)
47366 - - Function: long double tanl (long double X)
47367 - These functions return the tangent of X, where X is given in
47368 - radians.
47370 - Mathematically, the tangent function has singularities at odd
47371 - multiples of pi/2. If the argument X is too close to one of these
47372 - singularities, `tan' will signal overflow.
47374 - In many applications where `sin' and `cos' are used, the sine and
47375 -cosine of the same angle are needed at the same time. It is more
47376 -efficient to compute them simultaneously, so the library provides a
47377 -function to do that.
47379 - - Function: void sincos (double X, double *SINX, double *COSX)
47380 - - Function: void sincosf (float X, float *SINX, float *COSX)
47381 - - Function: void sincosl (long double X, long double *SINX, long
47382 - double *COSX)
47383 - These functions return the sine of X in `*SINX' and the cosine of
47384 - X in `*COS', where X is given in radians. Both values, `*SINX'
47385 - and `*COSX', are in the range of `-1' to `1'.
47387 - This function is a GNU extension. Portable programs should be
47388 - prepared to cope with its absence.
47390 - ISO C99 defines variants of the trig functions which work on complex
47391 -numbers. The GNU C library provides these functions, but they are only
47392 -useful if your compiler supports the new complex types defined by the
47393 -standard. (As of this writing GCC supports complex numbers, but there
47394 -are bugs in the implementation.)
47396 - - Function: complex double csin (complex double Z)
47397 - - Function: complex float csinf (complex float Z)
47398 - - Function: complex long double csinl (complex long double Z)
47399 - These functions return the complex sine of Z. The mathematical
47400 - definition of the complex sine is
47402 - sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i)).
47404 - - Function: complex double ccos (complex double Z)
47405 - - Function: complex float ccosf (complex float Z)
47406 - - Function: complex long double ccosl (complex long double Z)
47407 - These functions return the complex cosine of Z. The mathematical
47408 - definition of the complex cosine is
47410 - cos (z) = 1/2 * (exp (z*i) + exp (-z*i))
47412 - - Function: complex double ctan (complex double Z)
47413 - - Function: complex float ctanf (complex float Z)
47414 - - Function: complex long double ctanl (complex long double Z)
47415 - These functions return the complex tangent of Z. The mathematical
47416 - definition of the complex tangent is
47418 - tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i))
47420 - The complex tangent has poles at pi/2 + 2n, where n is an integer.
47421 - `ctan' may signal overflow if Z is too close to a pole.
47423 -\x1f
47424 -File: libc.info, Node: Inverse Trig Functions, Next: Exponents and Logarithms, Prev: Trig Functions, Up: Mathematics
47426 -Inverse Trigonometric Functions
47427 -===============================
47429 - These are the usual arc sine, arc cosine and arc tangent functions,
47430 -which are the inverses of the sine, cosine and tangent functions
47431 -respectively.
47433 - - Function: double asin (double X)
47434 - - Function: float asinf (float X)
47435 - - Function: long double asinl (long double X)
47436 - These functions compute the arc sine of X--that is, the value whose
47437 - sine is X. The value is in units of radians. Mathematically,
47438 - there are infinitely many such values; the one actually returned
47439 - is the one between `-pi/2' and `pi/2' (inclusive).
47441 - The arc sine function is defined mathematically only over the
47442 - domain `-1' to `1'. If X is outside the domain, `asin' signals a
47443 - domain error.
47445 - - Function: double acos (double X)
47446 - - Function: float acosf (float X)
47447 - - Function: long double acosl (long double X)
47448 - These functions compute the arc cosine of X--that is, the value
47449 - whose cosine is X. The value is in units of radians.
47450 - Mathematically, there are infinitely many such values; the one
47451 - actually returned is the one between `0' and `pi' (inclusive).
47453 - The arc cosine function is defined mathematically only over the
47454 - domain `-1' to `1'. If X is outside the domain, `acos' signals a
47455 - domain error.
47457 - - Function: double atan (double X)
47458 - - Function: float atanf (float X)
47459 - - Function: long double atanl (long double X)
47460 - These functions compute the arc tangent of X--that is, the value
47461 - whose tangent is X. The value is in units of radians.
47462 - Mathematically, there are infinitely many such values; the one
47463 - actually returned is the one between `-pi/2' and `pi/2'
47464 - (inclusive).
47466 - - Function: double atan2 (double Y, double X)
47467 - - Function: float atan2f (float Y, float X)
47468 - - Function: long double atan2l (long double Y, long double X)
47469 - This function computes the arc tangent of Y/X, but the signs of
47470 - both arguments are used to determine the quadrant of the result,
47471 - and X is permitted to be zero. The return value is given in
47472 - radians and is in the range `-pi' to `pi', inclusive.
47474 - If X and Y are coordinates of a point in the plane, `atan2'
47475 - returns the signed angle between the line from the origin to that
47476 - point and the x-axis. Thus, `atan2' is useful for converting
47477 - Cartesian coordinates to polar coordinates. (To compute the
47478 - radial coordinate, use `hypot'; see *Note Exponents and
47479 - Logarithms::.)
47481 - If both X and Y are zero, `atan2' returns zero.
47483 - ISO C99 defines complex versions of the inverse trig functions.
47485 - - Function: complex double casin (complex double Z)
47486 - - Function: complex float casinf (complex float Z)
47487 - - Function: complex long double casinl (complex long double Z)
47488 - These functions compute the complex arc sine of Z--that is, the
47489 - value whose sine is Z. The value returned is in radians.
47491 - Unlike the real-valued functions, `casin' is defined for all
47492 - values of Z.
47494 - - Function: complex double cacos (complex double Z)
47495 - - Function: complex float cacosf (complex float Z)
47496 - - Function: complex long double cacosl (complex long double Z)
47497 - These functions compute the complex arc cosine of Z--that is, the
47498 - value whose cosine is Z. The value returned is in radians.
47500 - Unlike the real-valued functions, `cacos' is defined for all
47501 - values of Z.
47503 - - Function: complex double catan (complex double Z)
47504 - - Function: complex float catanf (complex float Z)
47505 - - Function: complex long double catanl (complex long double Z)
47506 - These functions compute the complex arc tangent of Z--that is, the
47507 - value whose tangent is Z. The value is in units of radians.
47509 -\x1f
47510 -File: libc.info, Node: Exponents and Logarithms, Next: Hyperbolic Functions, Prev: Inverse Trig Functions, Up: Mathematics
47512 -Exponentiation and Logarithms
47513 -=============================
47515 - - Function: double exp (double X)
47516 - - Function: float expf (float X)
47517 - - Function: long double expl (long double X)
47518 - These functions compute `e' (the base of natural logarithms) raised
47519 - to the power X.
47521 - If the magnitude of the result is too large to be representable,
47522 - `exp' signals overflow.
47524 - - Function: double exp2 (double X)
47525 - - Function: float exp2f (float X)
47526 - - Function: long double exp2l (long double X)
47527 - These functions compute `2' raised to the power X.
47528 - Mathematically, `exp2 (x)' is the same as `exp (x * log (2))'.
47530 - - Function: double exp10 (double X)
47531 - - Function: float exp10f (float X)
47532 - - Function: long double exp10l (long double X)
47533 - - Function: double pow10 (double X)
47534 - - Function: float pow10f (float X)
47535 - - Function: long double pow10l (long double X)
47536 - These functions compute `10' raised to the power X.
47537 - Mathematically, `exp10 (x)' is the same as `exp (x * log (10))'.
47539 - These functions are GNU extensions. The name `exp10' is
47540 - preferred, since it is analogous to `exp' and `exp2'.
47542 - - Function: double log (double X)
47543 - - Function: float logf (float X)
47544 - - Function: long double logl (long double X)
47545 - These functions compute the natural logarithm of X. `exp (log
47546 - (X))' equals X, exactly in mathematics and approximately in C.
47548 - If X is negative, `log' signals a domain error. If X is zero, it
47549 - returns negative infinity; if X is too close to zero, it may
47550 - signal overflow.
47552 - - Function: double log10 (double X)
47553 - - Function: float log10f (float X)
47554 - - Function: long double log10l (long double X)
47555 - These functions return the base-10 logarithm of X. `log10 (X)'
47556 - equals `log (X) / log (10)'.
47559 - - Function: double log2 (double X)
47560 - - Function: float log2f (float X)
47561 - - Function: long double log2l (long double X)
47562 - These functions return the base-2 logarithm of X. `log2 (X)'
47563 - equals `log (X) / log (2)'.
47565 - - Function: double logb (double X)
47566 - - Function: float logbf (float X)
47567 - - Function: long double logbl (long double X)
47568 - These functions extract the exponent of X and return it as a
47569 - floating-point value. If `FLT_RADIX' is two, `logb' is equal to
47570 - `floor (log2 (x))', except it's probably faster.
47572 - If X is de-normalized, `logb' returns the exponent X would have if
47573 - it were normalized. If X is infinity (positive or negative),
47574 - `logb' returns oo. If X is zero, `logb' returns oo. It does not
47575 - signal.
47577 - - Function: int ilogb (double X)
47578 - - Function: int ilogbf (float X)
47579 - - Function: int ilogbl (long double X)
47580 - These functions are equivalent to the corresponding `logb'
47581 - functions except that they return signed integer values.
47583 -Since integers cannot represent infinity and NaN, `ilogb' instead
47584 -returns an integer that can't be the exponent of a normal floating-point
47585 -number. `math.h' defines constants so you can check for this.
47587 - - Macro: int FP_ILOGB0
47588 - `ilogb' returns this value if its argument is `0'. The numeric
47589 - value is either `INT_MIN' or `-INT_MAX'.
47591 - This macro is defined in ISO C99.
47593 - - Macro: int FP_ILOGBNAN
47594 - `ilogb' returns this value if its argument is `NaN'. The numeric
47595 - value is either `INT_MIN' or `INT_MAX'.
47597 - This macro is defined in ISO C99.
47599 - These values are system specific. They might even be the same. The
47600 -proper way to test the result of `ilogb' is as follows:
47602 - i = ilogb (f);
47603 - if (i == FP_ILOGB0 || i == FP_ILOGBNAN)
47605 - if (isnan (f))
47607 - /* Handle NaN. */
47609 - else if (f == 0.0)
47611 - /* Handle 0.0. */
47613 - else
47615 - /* Some other value with large exponent,
47616 - perhaps +Inf. */
47620 - - Function: double pow (double BASE, double POWER)
47621 - - Function: float powf (float BASE, float POWER)
47622 - - Function: long double powl (long double BASE, long double POWER)
47623 - These are general exponentiation functions, returning BASE raised
47624 - to POWER.
47626 - Mathematically, `pow' would return a complex number when BASE is
47627 - negative and POWER is not an integral value. `pow' can't do that,
47628 - so instead it signals a domain error. `pow' may also underflow or
47629 - overflow the destination type.
47631 - - Function: double sqrt (double X)
47632 - - Function: float sqrtf (float X)
47633 - - Function: long double sqrtl (long double X)
47634 - These functions return the nonnegative square root of X.
47636 - If X is negative, `sqrt' signals a domain error. Mathematically,
47637 - it should return a complex number.
47639 - - Function: double cbrt (double X)
47640 - - Function: float cbrtf (float X)
47641 - - Function: long double cbrtl (long double X)
47642 - These functions return the cube root of X. They cannot fail;
47643 - every representable real value has a representable real cube root.
47645 - - Function: double hypot (double X, double Y)
47646 - - Function: float hypotf (float X, float Y)
47647 - - Function: long double hypotl (long double X, long double Y)
47648 - These functions return `sqrt (X*X + Y*Y)'. This is the length of
47649 - the hypotenuse of a right triangle with sides of length X and Y,
47650 - or the distance of the point (X, Y) from the origin. Using this
47651 - function instead of the direct formula is wise, since the error is
47652 - much smaller. See also the function `cabs' in *Note Absolute
47653 - Value::.
47655 - - Function: double expm1 (double X)
47656 - - Function: float expm1f (float X)
47657 - - Function: long double expm1l (long double X)
47658 - These functions return a value equivalent to `exp (X) - 1'. They
47659 - are computed in a way that is accurate even if X is near zero--a
47660 - case where `exp (X) - 1' would be inaccurate owing to subtraction
47661 - of two numbers that are nearly equal.
47663 - - Function: double log1p (double X)
47664 - - Function: float log1pf (float X)
47665 - - Function: long double log1pl (long double X)
47666 - These functions returns a value equivalent to `log (1 + X)'. They
47667 - are computed in a way that is accurate even if X is near zero.
47669 - ISO C99 defines complex variants of some of the exponentiation and
47670 -logarithm functions.
47672 - - Function: complex double cexp (complex double Z)
47673 - - Function: complex float cexpf (complex float Z)
47674 - - Function: complex long double cexpl (complex long double Z)
47675 - These functions return `e' (the base of natural logarithms) raised
47676 - to the power of Z. Mathematically, this corresponds to the value
47678 - exp (z) = exp (creal (z)) * (cos (cimag (z)) + I * sin (cimag (z)))
47680 - - Function: complex double clog (complex double Z)
47681 - - Function: complex float clogf (complex float Z)
47682 - - Function: complex long double clogl (complex long double Z)
47683 - These functions return the natural logarithm of Z.
47684 - Mathematically, this corresponds to the value
47686 - log (z) = log (cabs (z)) + I * carg (z)
47688 - `clog' has a pole at 0, and will signal overflow if Z equals or is
47689 - very close to 0. It is well-defined for all other values of Z.
47691 - - Function: complex double clog10 (complex double Z)
47692 - - Function: complex float clog10f (complex float Z)
47693 - - Function: complex long double clog10l (complex long double Z)
47694 - These functions return the base 10 logarithm of the complex value
47695 - Z. Mathematically, this corresponds to the value
47697 - log (z) = log10 (cabs (z)) + I * carg (z)
47699 - These functions are GNU extensions.
47701 - - Function: complex double csqrt (complex double Z)
47702 - - Function: complex float csqrtf (complex float Z)
47703 - - Function: complex long double csqrtl (complex long double Z)
47704 - These functions return the complex square root of the argument Z.
47705 - Unlike the real-valued functions, they are defined for all values
47706 - of Z.
47708 - - Function: complex double cpow (complex double BASE, complex double
47709 - POWER)
47710 - - Function: complex float cpowf (complex float BASE, complex float
47711 - POWER)
47712 - - Function: complex long double cpowl (complex long double BASE,
47713 - complex long double POWER)
47714 - These functions return BASE raised to the power of POWER. This is
47715 - equivalent to `cexp (y * clog (x))'
47717 -\x1f
47718 -File: libc.info, Node: Hyperbolic Functions, Next: Special Functions, Prev: Exponents and Logarithms, Up: Mathematics
47720 -Hyperbolic Functions
47721 -====================
47723 - The functions in this section are related to the exponential
47724 -functions; see *Note Exponents and Logarithms::.
47726 - - Function: double sinh (double X)
47727 - - Function: float sinhf (float X)
47728 - - Function: long double sinhl (long double X)
47729 - These functions return the hyperbolic sine of X, defined
47730 - mathematically as `(exp (X) - exp (-X)) / 2'. They may signal
47731 - overflow if X is too large.
47733 - - Function: double cosh (double X)
47734 - - Function: float coshf (float X)
47735 - - Function: long double coshl (long double X)
47736 - These function return the hyperbolic cosine of X, defined
47737 - mathematically as `(exp (X) + exp (-X)) / 2'. They may signal
47738 - overflow if X is too large.
47740 - - Function: double tanh (double X)
47741 - - Function: float tanhf (float X)
47742 - - Function: long double tanhl (long double X)
47743 - These functions return the hyperbolic tangent of X, defined
47744 - mathematically as `sinh (X) / cosh (X)'. They may signal overflow
47745 - if X is too large.
47747 - There are counterparts for the hyperbolic functions which take
47748 -complex arguments.
47750 - - Function: complex double csinh (complex double Z)
47751 - - Function: complex float csinhf (complex float Z)
47752 - - Function: complex long double csinhl (complex long double Z)
47753 - These functions return the complex hyperbolic sine of Z, defined
47754 - mathematically as `(exp (Z) - exp (-Z)) / 2'.
47756 - - Function: complex double ccosh (complex double Z)
47757 - - Function: complex float ccoshf (complex float Z)
47758 - - Function: complex long double ccoshl (complex long double Z)
47759 - These functions return the complex hyperbolic cosine of Z, defined
47760 - mathematically as `(exp (Z) + exp (-Z)) / 2'.
47762 - - Function: complex double ctanh (complex double Z)
47763 - - Function: complex float ctanhf (complex float Z)
47764 - - Function: complex long double ctanhl (complex long double Z)
47765 - These functions return the complex hyperbolic tangent of Z,
47766 - defined mathematically as `csinh (Z) / ccosh (Z)'.
47768 - - Function: double asinh (double X)
47769 - - Function: float asinhf (float X)
47770 - - Function: long double asinhl (long double X)
47771 - These functions return the inverse hyperbolic sine of X--the value
47772 - whose hyperbolic sine is X.
47774 - - Function: double acosh (double X)
47775 - - Function: float acoshf (float X)
47776 - - Function: long double acoshl (long double X)
47777 - These functions return the inverse hyperbolic cosine of X--the
47778 - value whose hyperbolic cosine is X. If X is less than `1',
47779 - `acosh' signals a domain error.
47781 - - Function: double atanh (double X)
47782 - - Function: float atanhf (float X)
47783 - - Function: long double atanhl (long double X)
47784 - These functions return the inverse hyperbolic tangent of X--the
47785 - value whose hyperbolic tangent is X. If the absolute value of X
47786 - is greater than `1', `atanh' signals a domain error; if it is
47787 - equal to 1, `atanh' returns infinity.
47789 - - Function: complex double casinh (complex double Z)
47790 - - Function: complex float casinhf (complex float Z)
47791 - - Function: complex long double casinhl (complex long double Z)
47792 - These functions return the inverse complex hyperbolic sine of
47793 - Z--the value whose complex hyperbolic sine is Z.
47795 - - Function: complex double cacosh (complex double Z)
47796 - - Function: complex float cacoshf (complex float Z)
47797 - - Function: complex long double cacoshl (complex long double Z)
47798 - These functions return the inverse complex hyperbolic cosine of
47799 - Z--the value whose complex hyperbolic cosine is Z. Unlike the
47800 - real-valued functions, there are no restrictions on the value of Z.
47802 - - Function: complex double catanh (complex double Z)
47803 - - Function: complex float catanhf (complex float Z)
47804 - - Function: complex long double catanhl (complex long double Z)
47805 - These functions return the inverse complex hyperbolic tangent of
47806 - Z--the value whose complex hyperbolic tangent is Z. Unlike the
47807 - real-valued functions, there are no restrictions on the value of Z.
47809 -\x1f
47810 -File: libc.info, Node: Special Functions, Next: Errors in Math Functions, Prev: Hyperbolic Functions, Up: Mathematics
47812 -Special Functions
47813 -=================
47815 - These are some more exotic mathematical functions which are sometimes
47816 -useful. Currently they only have real-valued versions.
47818 - - Function: double erf (double X)
47819 - - Function: float erff (float X)
47820 - - Function: long double erfl (long double X)
47821 - `erf' returns the error function of X. The error function is
47822 - defined as
47823 - erf (x) = 2/sqrt(pi) * integral from 0 to x of exp(-t^2) dt
47825 - - Function: double erfc (double X)
47826 - - Function: float erfcf (float X)
47827 - - Function: long double erfcl (long double X)
47828 - `erfc' returns `1.0 - erf(X)', but computed in a fashion that
47829 - avoids round-off error when X is large.
47831 - - Function: double lgamma (double X)
47832 - - Function: float lgammaf (float X)
47833 - - Function: long double lgammal (long double X)
47834 - `lgamma' returns the natural logarithm of the absolute value of
47835 - the gamma function of X. The gamma function is defined as
47836 - gamma (x) = integral from 0 to oo of t^(x-1) e^-t dt
47838 - The sign of the gamma function is stored in the global variable
47839 - SIGNGAM, which is declared in `math.h'. It is `1' if the
47840 - intermediate result was positive or zero, or `-1' if it was
47841 - negative.
47843 - To compute the real gamma function you can use the `tgamma'
47844 - function or you can compute the values as follows:
47845 - lgam = lgamma(x);
47846 - gam = signgam*exp(lgam);
47848 - The gamma function has singularities at the non-positive integers.
47849 - `lgamma' will raise the zero divide exception if evaluated at a
47850 - singularity.
47852 - - Function: double lgamma_r (double X, int *SIGNP)
47853 - - Function: float lgammaf_r (float X, int *SIGNP)
47854 - - Function: long double lgammal_r (long double X, int *SIGNP)
47855 - `lgamma_r' is just like `lgamma', but it stores the sign of the
47856 - intermediate result in the variable pointed to by SIGNP instead of
47857 - in the SIGNGAM global. This means it is reentrant.
47859 - - Function: double gamma (double X)
47860 - - Function: float gammaf (float X)
47861 - - Function: long double gammal (long double X)
47862 - These functions exist for compatibility reasons. They are
47863 - equivalent to `lgamma' etc. It is better to use `lgamma' since
47864 - for one the name reflects better the actual computation, moreover
47865 - `lgamma' is standardized in ISO C99 while `gamma' is not.
47867 - - Function: double tgamma (double X)
47868 - - Function: float tgammaf (float X)
47869 - - Function: long double tgammal (long double X)
47870 - `tgamma' applies the gamma function to X. The gamma function is
47871 - defined as
47872 - gamma (x) = integral from 0 to oo of t^(x-1) e^-t dt
47874 - This function was introduced in ISO C99.
47876 - - Function: double j0 (double X)
47877 - - Function: float j0f (float X)
47878 - - Function: long double j0l (long double X)
47879 - `j0' returns the Bessel function of the first kind of order 0 of
47880 - X. It may signal underflow if X is too large.
47882 - - Function: double j1 (double X)
47883 - - Function: float j1f (float X)
47884 - - Function: long double j1l (long double X)
47885 - `j1' returns the Bessel function of the first kind of order 1 of
47886 - X. It may signal underflow if X is too large.
47888 - - Function: double jn (int n, double X)
47889 - - Function: float jnf (int n, float X)
47890 - - Function: long double jnl (int n, long double X)
47891 - `jn' returns the Bessel function of the first kind of order N of
47892 - X. It may signal underflow if X is too large.
47894 - - Function: double y0 (double X)
47895 - - Function: float y0f (float X)
47896 - - Function: long double y0l (long double X)
47897 - `y0' returns the Bessel function of the second kind of order 0 of
47898 - X. It may signal underflow if X is too large. If X is negative,
47899 - `y0' signals a domain error; if it is zero, `y0' signals overflow
47900 - and returns -oo.
47902 - - Function: double y1 (double X)
47903 - - Function: float y1f (float X)
47904 - - Function: long double y1l (long double X)
47905 - `y1' returns the Bessel function of the second kind of order 1 of
47906 - X. It may signal underflow if X is too large. If X is negative,
47907 - `y1' signals a domain error; if it is zero, `y1' signals overflow
47908 - and returns -oo.
47910 - - Function: double yn (int n, double X)
47911 - - Function: float ynf (int n, float X)
47912 - - Function: long double ynl (int n, long double X)
47913 - `yn' returns the Bessel function of the second kind of order N of
47914 - X. It may signal underflow if X is too large. If X is negative,
47915 - `yn' signals a domain error; if it is zero, `yn' signals overflow
47916 - and returns -oo.
47918 diff -u -udbrN glibc-2.3.2/manual/libc.info-32 glibc-2.3.2-200304020432/manual/libc.info-32
47919 --- glibc-2.3.2/manual/libc.info-32 Sat Mar 1 02:39:41 2003
47920 +++ glibc-2.3.2-200304020432/manual/libc.info-32 Thu Jan 1 01:00:00 1970
47921 @@ -1,865 +0,0 @@
47922 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
47924 -INFO-DIR-SECTION GNU libraries
47925 -START-INFO-DIR-ENTRY
47926 -* Libc: (libc). C library.
47927 -END-INFO-DIR-ENTRY
47929 - This file documents the GNU C library.
47931 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
47932 -Reference Manual', for Version 2.3.x.
47934 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
47935 -Free Software Foundation, Inc.
47937 - Permission is granted to copy, distribute and/or modify this document
47938 -under the terms of the GNU Free Documentation License, Version 1.1 or
47939 -any later version published by the Free Software Foundation; with the
47940 -Invariant Sections being "Free Software Needs Free Documentation" and
47941 -"GNU Lesser General Public License", the Front-Cover texts being (a)
47942 -(see below), and with the Back-Cover Texts being (b) (see below). A
47943 -copy of the license is included in the section entitled "GNU Free
47944 -Documentation License".
47946 - (a) The FSF's Front-Cover Text is:
47948 - A GNU Manual
47950 - (b) The FSF's Back-Cover Text is:
47952 - You have freedom to copy and modify this GNU Manual, like GNU
47953 -software. Copies published by the Free Software Foundation raise
47954 -funds for GNU development.
47956 -\x1f
47957 -File: libc.info, Node: Errors in Math Functions, Next: Pseudo-Random Numbers, Prev: Special Functions, Up: Mathematics
47959 -Known Maximum Errors in Math Functions
47960 -======================================
47962 - This section lists the known errors of the functions in the math
47963 -library. Errors are measured in "units of the last place". This is a
47964 -measure for the relative error. For a number z with the representation
47965 -d.d...d*2^e (we assume IEEE floating-point numbers with base 2) the ULP
47966 -is represented by
47968 - |d.d...d - (z / 2^e)| / 2^(p - 1)
47970 -where p is the number of bits in the mantissa of the floating-point
47971 -number representation. Ideally the error for all functions is always
47972 -less than 0.5ulps. Using rounding bits this is also possible and
47973 -normally implemented for the basic operations. To achieve the same for
47974 -the complex math functions requires a lot more work and this has not
47975 -yet been done.
47977 - Therefore many of the functions in the math library have errors. The
47978 -table lists the maximum error for each function which is exposed by one
47979 -of the existing tests in the test suite. The table tries to cover as
47980 -much as possible and list the actual maximum error (or at least a
47981 -ballpark figure) but this is often not achieved due to the large search
47982 -space.
47984 - The table lists the ULP values for different architectures.
47985 -Different architectures have different results since their hardware
47986 -support for floating-point operations varies and also the existing
47987 -hardware support is different.
47989 -Function Alpha ARM Generic ix86 IA64
47990 -acosf - - - - -
47991 -acos - - - - -
47992 -acosl - - - 1150 -
47993 -acoshf - - - - -
47994 -acosh - - - - -
47995 -acoshl - - - 1 -
47996 -asinf 2 2 - - -
47997 -asin 1 1 - 1 1
47998 -asinl - - - 1 -
47999 -asinhf - - - - -
48000 -asinh - - - - -
48001 -asinhl - - - 656 14
48002 -atanf - - - - -
48003 -atan - - - - -
48004 -atanl - - - 549 -
48005 -atanhf - - - - -
48006 -atanh 1 1 - 1 -
48007 -atanhl - - - 1605 -
48008 -atan2f 4 - - - -
48009 -atan2 - - - - -
48010 -atan2l - - - 549 -
48011 -cabsf 1 1 - 1 1
48012 -cabs 1 1 - 1 1
48013 -cabsl - - - 560 1
48014 -cacosf 1 + i 1 1 + i 1 - 1 + i 2 1 + i 2
48015 -cacos 1 + i 0 1 + i 0 - 1 + i 0 1 + i 0
48016 -cacosl - - - 151 + i 329 1 + i 1
48017 -cacoshf 7 + i 3 7 + i 3 - 4 + i 4 7 + i 0
48018 -cacosh 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
48019 -cacoshl - - - 328 + i 151 7 + i 1
48020 -cargf - - - - -
48021 -carg - - - - -
48022 -cargl - - - - -
48023 -casinf 2 + i 1 2 + i 1 - 2 + i 2 2 + i 2
48024 -casin 3 + i 0 3 + i 0 - 3 + i 0 3 + i 0
48025 -casinl - - - 603 + i 329 0 + i 1
48026 -casinhf 1 + i 6 1 + i 6 - 1 + i 6 1 + i 6
48027 -casinh 5 + i 3 5 + i 3 - 5 + i 3 5 + i 3
48028 -casinhl - - - 892 + i 12 5 + i 5
48029 -catanf 4 + i 1 4 + i 1 - 0 + i 1 0 + i 1
48030 -catan 0 + i 1 0 + i 1 - 0 + i 1 0 + i 1
48031 -catanl - - - 251 + i 474 1 + i 0
48032 -catanhf 1 + i 6 1 + i 6 - 1 + i 0 -
48033 -catanh 4 + i 1 4 + i 1 - 2 + i 0 4 + i 0
48034 -catanhl - - - 66 + i 447 1 + i 0
48035 -cbrtf - - - - -
48036 -cbrt 1 1 - 1 1
48037 -cbrtl - - - 716 -
48038 -ccosf 0 + i 1 0 + i 1 - 1 + i 1 1 + i 1
48039 -ccos 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
48040 -ccosl - - - 5 + i 1901 0 + i 1
48041 -ccoshf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
48042 -ccosh 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
48043 -ccoshl - - - 1467 + i 1183 1 + i 1
48044 -ceilf - - - - -
48045 -ceil - - - - -
48046 -ceill - - - - -
48047 -cexpf 1 + i 1 1 + i 1 - 1 + i 0 1 + i 1
48048 -cexp 1 + i 0 1 + i 0 - - 1 + i 0
48049 -cexpl - - - 940 + i 1067 2 + i 0
48050 -cimagf - - - - -
48051 -cimag - - - - -
48052 -cimagl - - - - -
48053 -clogf 0 + i 3 0 + i 3 - - -
48054 -clog 0 + i 1 0 + i 1 - - -
48055 -clogl - - - 0 + i 1 -
48056 -clog10f 1 + i 5 1 + i 5 - 1 + i 1 1 + i 1
48057 -clog10 1 + i 1 1 + i 1 - 2 + i 1 2 + i 1
48058 -clog10l - - - 1403 + i 186 1 + i 2
48059 -conjf - - - - -
48060 -conj - - - - -
48061 -conjl - - - - -
48062 -copysignf - - - - -
48063 -copysign - - - - -
48064 -copysignl - - - - -
48065 -cosf 1 1 - 1 1
48066 -cos 2 2 - 2 2
48067 -cosl - - - 529 0.5
48068 -coshf - - - - -
48069 -cosh - - - - -
48070 -coshl - - - 309 2
48071 -cpowf 4 + i 2 4 + i 2 - 4 + i 2.5333 5 + i 2.5333
48072 -cpow 1 + i 1.1031 1 + i 1.1031 - 1 + i 1.104 1 + i 1.1031
48073 -cpowl - - - 2 + i 9 1 + i 4
48074 -cprojf - - - - -
48075 -cproj - - - - -
48076 -cprojl - - - - -
48077 -crealf - - - - -
48078 -creal - - - - -
48079 -creall - - - - -
48080 -csinf 0 + i 1 0 + i 1 - - -
48081 -csin - - - - -
48082 -csinl - - - 966 + i 168 0 + i 1
48083 -csinhf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
48084 -csinh 0 + i 1 0 + i 1 - 1 + i 1 1 + i 1
48085 -csinhl - - - 413 + i 477 2 + i 2
48086 -csqrtf 1 + i 1 1 + i 1 - - 1 + i 1
48087 -csqrt 1 + i 0 1 + i 0 - 1 + i 0 1 + i 0
48088 -csqrtl - - - 237 + i 128 -
48089 -ctanf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
48090 -ctan 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
48091 -ctanl - - - 690 + i 367 436 + i 1
48092 -ctanhf 2 + i 1 2 + i 1 - 1 + i 1 1 + i 1
48093 -ctanh 2 + i 2 2 + i 2 - 0 + i 1 0 + i 1
48094 -ctanhl - - - 286 + i 3074 1 + i 24
48095 -erff - - - - -
48096 -erf - - - - -
48097 -erfl - - - - -
48098 -erfcf 12 12 - 12 12
48099 -erfc 24 24 - 24 24
48100 -erfcl - - - 36 12
48101 -expf - - - - -
48102 -exp - - - - -
48103 -expl - - - 754 -
48104 -exp10f 2 2 - - 2
48105 -exp10 6 6 - 1 6
48106 -exp10l - - - 1182 3
48107 -exp2f - - - - -
48108 -exp2 - - - - -
48109 -exp2l - - - 462 -
48110 -expm1f 1 1 - - -
48111 -expm1 - - - - -
48112 -expm1l - - - 825 1
48113 -fabsf - - - - -
48114 -fabs - - - - -
48115 -fabsl - - - - -
48116 -fdimf - - - - -
48117 -fdim - - - - -
48118 -fdiml - - - - -
48119 -floorf - - - - -
48120 -floor - - - - -
48121 -floorl - - - - -
48122 -fmaf - - - - -
48123 -fma - - - - -
48124 -fmal - - - - -
48125 -fmaxf - - - - -
48126 -fmax - - - - -
48127 -fmaxl - - - - -
48128 -fminf - - - - -
48129 -fmin - - - - -
48130 -fminl - - - - -
48131 -fmodf 1 1 - 1 1
48132 -fmod 2 2 - 2 2
48133 -fmodl - - - 4096 1
48134 -frexpf - - - - -
48135 -frexp - - - - -
48136 -frexpl - - - - -
48137 -gammaf - - - - -
48138 -gamma - - - 1 -
48139 -gammal - - - 1 1
48140 -hypotf 1 1 - 1 1
48141 -hypot 1 1 - 1 1
48142 -hypotl - - - 560 1
48143 -ilogbf - - - - -
48144 -ilogb - - - - -
48145 -ilogbl - - - - -
48146 -j0f 2 2 - 1 1
48147 -j0 2 2 - 2 2
48148 -j0l - - - 1 2
48149 -j1f 2 2 - 1 2
48150 -j1 1 1 - 2 1
48151 -j1l - - - 2 -
48152 -jnf 4 4 - 2 4
48153 -jn 6 6 - 5 6
48154 -jnl - - - 2 2
48155 -lgammaf 2 2 - 2 2
48156 -lgamma 1 1 - 1 1
48157 -lgammal - - - 1 1
48158 -lrintf - - - - -
48159 -lrint - - - - -
48160 -lrintl - - - - -
48161 -llrintf - - - - -
48162 -llrint - - - - -
48163 -llrintl - - - - -
48164 -logf 1 1 - 1 1
48165 -log 1 1 - 1 1
48166 -logl - - - 2341 1
48167 -log10f 1 1 - 1 1
48168 -log10 1 1 - 1 1
48169 -log10l - - - 2033 1
48170 -log1pf 1 1 - 1 1
48171 -log1p 1 1 - 1 1
48172 -log1pl - - - 585 1
48173 -log2f 1 1 - 1 1
48174 -log2 1 1 - 1 1
48175 -log2l - - - 1688 -
48176 -logbf - - - - -
48177 -logb - - - - -
48178 -logbl - - - - -
48179 -lroundf - - - - -
48180 -lround - - - - -
48181 -lroundl - - - - -
48182 -llroundf - - - - -
48183 -llround - - - - -
48184 -llroundl - - - - -
48185 -modff - - - - -
48186 -modf - - - - -
48187 -modfl - - - - -
48188 -nearbyintf - - - - -
48189 -nearbyint - - - - -
48190 -nearbyintl - - - - -
48191 -nextafterf - - - - -
48192 -nextafter - - - - -
48193 -nextafterl - - - - -
48194 -nexttowardf - - - - -
48195 -nexttoward - - - - -
48196 -nexttowardl - - - - -
48197 -powf - - - - -
48198 -pow - - - - -
48199 -powl - - - 725 1
48200 -remainderf - - - - -
48201 -remainder - - - - -
48202 -remainderl - - - - -
48203 -remquof - - - - -
48204 -remquo - - - - -
48205 -remquol - - - - -
48206 -rintf - - - - -
48207 -rint - - - - -
48208 -rintl - - - - -
48209 -roundf - - - - -
48210 -round - - - - -
48211 -roundl - - - - -
48212 -scalbf - - - - -
48213 -scalb - - - - -
48214 -scalbl - - - - -
48215 -scalbnf - - - - -
48216 -scalbn - - - - -
48217 -scalbnl - - - - -
48218 -scalblnf - - - - -
48219 -scalbln - - - - -
48220 -scalblnl - - - - -
48221 -sinf - - - - -
48222 -sin - - - - -
48223 -sinl - - - 627 1
48224 -sincosf 1 1 - 1 1
48225 -sincos 1 1 - 1 1
48226 -sincosl - - - 627 1
48227 -sinhf 1 1 - 1 1
48228 -sinh 1 1 - - -
48229 -sinhl - - - 1029 1
48230 -sqrtf - - - - -
48231 -sqrt - - - - -
48232 -sqrtl - - - 489 -
48233 -tanf - - - - -
48234 -tan 0.5 0.5 - 0.5 0.5
48235 -tanl - - - 1401 1
48236 -tanhf 1 1 - - 1
48237 -tanh 1 1 - - 1
48238 -tanhl - - - 521 1
48239 -tgammaf 1 1 - 1 1
48240 -tgamma 1 1 - 2 1
48241 -tgammal - - - 2 1
48242 -truncf - - - - -
48243 -trunc - - - - -
48244 -truncl - - - - -
48245 -y0f 1 1 - 1 1
48246 -y0 2 2 - 3 2
48247 -y0l - - - 2 2
48248 -y1f 2 2 - 2 2
48249 -y1 3 3 - 3 3
48250 -y1l - - - 2 1
48251 -ynf 2 2 - 3 2
48252 -yn 3 3 - 6 3
48253 -ynl - - - 7 7
48255 -Function M68k MIPS PowerPC S/390 SH4
48256 -acosf - - - - -
48257 -acos - - - - -
48258 -acosl 1 - - - -
48259 -acoshf - - - - -
48260 -acosh - - - - -
48261 -acoshl 1 - - - -
48262 -asinf - 2 2 2 2
48263 -asin 1 1 1 1 1
48264 -asinl 1 - - - -
48265 -asinhf - - - - -
48266 -asinh - - - - -
48267 -asinhl 14 - - - -
48268 -atanf - - - - -
48269 -atan - - - - -
48270 -atanl - - - - -
48271 -atanhf - - - - -
48272 -atanh 1 1 1 1 1
48273 -atanhl - - - - -
48274 -atan2f - 4 4 4 4
48275 -atan2 - - - - -
48276 -atan2l - - - - -
48277 -cabsf 1 1 1 1 1
48278 -cabs - 1 1 1 1
48279 -cabsl 1 - - - -
48280 -cacosf 1 + i 2 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48281 -cacos 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
48282 -cacosl 1 + i 1 - - - -
48283 -cacoshf 7 + i 0 7 + i 3 7 + i 3 7 + i 3 7 + i 3
48284 -cacosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48285 -cacoshl 6 + i 2 - - - -
48286 -cargf - - - - -
48287 -carg - - - - -
48288 -cargl - - - - -
48289 -casinf 2 + i 2 2 + i 1 2 + i 1 2 + i 1 2 + i 1
48290 -casin 3 + i 0 3 + i 0 3 + i 0 3 + i 0 3 + i 0
48291 -casinl 0 + i 1 - - - -
48292 -casinhf 19 + i 2 1 + i 6 1 + i 6 1 + i 6 1 + i 6
48293 -casinh 6 + i 13 5 + i 3 5 + i 3 5 + i 3 5 + i 3
48294 -casinhl 5 + i 6 - - - -
48295 -catanf 0 + i 1 4 + i 1 4 + i 1 4 + i 1 4 + i 1
48296 -catan 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
48297 -catanl 1 + i 0 - - - -
48298 -catanhf - 1 + i 6 0 + i 6 1 + i 6 1 + i 6
48299 -catanh - 4 + i 1 4 + i 1 4 + i 1 4 + i 1
48300 -catanhl 1 + i 0 - - - -
48301 -cbrtf - - - - -
48302 -cbrt 1 1 1 1 1
48303 -cbrtl 1 - - - -
48304 -ccosf 1 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
48305 -ccos 0 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48306 -ccosl 0 + i 1 - - - -
48307 -ccoshf 3 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48308 -ccosh 1 + i 0 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48309 -ccoshl 1 + i 2 - - - -
48310 -ceilf - - - - -
48311 -ceil - - - - -
48312 -ceill - - - - -
48313 -cexpf 3 + i 2 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48314 -cexp - 1 + i 0 1 + i 0 1 + i 0 1 + i 0
48315 -cexpl 2 + i 0 - - - -
48316 -cimagf - - - - -
48317 -cimag - - - - -
48318 -cimagl - - - - -
48319 -clogf - 0 + i 3 0 + i 3 0 + i 3 0 + i 3
48320 -clog - 0 + i 1 0 + i 1 0 + i 1 0 + i 1
48321 -clogl - - - - -
48322 -clog10f 1 + i 1 1 + i 5 1 + i 5 1 + i 5 1 + i 5
48323 -clog10 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48324 -clog10l 1 + i 3 - - - -
48325 -conjf - - - - -
48326 -conj - - - - -
48327 -conjl - - - - -
48328 -copysignf - - - - -
48329 -copysign - - - - -
48330 -copysignl - - - - -
48331 -cosf 1 1 1 1 1
48332 -cos 2 2 2 2 2
48333 -cosl 1 - - - -
48334 -coshf - - - - -
48335 -cosh - - - - -
48336 -coshl 2 - - - -
48337 -cpowf 1 + i 6 4 + i 2 4 + i 2 4 + i 2 4 + i 2
48338 -cpow 1 + i 2 1 + i 1.1031 1 + i 2 1 + i 1.1031 1 + i 1.1031
48339 -cpowl 5 + i 2 - - - -
48340 -cprojf - - - - -
48341 -cproj - - - - -
48342 -cprojl - - - - -
48343 -crealf - - - - -
48344 -creal - - - - -
48345 -creall - - - - -
48346 -csinf 1 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
48347 -csin - - - - -
48348 -csinl - - - - -
48349 -csinhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48350 -csinh - 0 + i 1 0 + i 1 0 + i 1 0 + i 1
48351 -csinhl 1 + i 2 - - - -
48352 -csqrtf 1 + i 0 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48353 -csqrt - 1 + i 0 1 + i 0 1 + i 0 1 + i 0
48354 -csqrtl - - - - -
48355 -ctanf 1 + i 0 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48356 -ctan 1 + i 0 1 + i 1 1 + i 1 1 + i 1 1 + i 1
48357 -ctanl 439 + i 2 - - - -
48358 -ctanhf 1 + i 0 2 + i 1 2 + i 1 2 + i 1 2 + i 1
48359 -ctanh 0 + i 1 2 + i 2 2 + i 2 2 + i 2 2 + i 2
48360 -ctanhl 2 + i 25 - - - -
48361 -erff - - - - -
48362 -erf - - - - -
48363 -erfl - - - - -
48364 -erfcf 11 12 12 12 12
48365 -erfc 24 24 24 24 24
48366 -erfcl 12 - - - -
48367 -expf - - - - -
48368 -exp - - - - -
48369 -expl - - - - -
48370 -exp10f - 2 2 2 2
48371 -exp10 1 6 6 6 6
48372 -exp10l 1 - - - -
48373 -exp2f - - - - -
48374 -exp2 - - - - -
48375 -exp2l - - - - -
48376 -expm1f - 1 1 1 1
48377 -expm1 - - - - -
48378 -expm1l 1 - - - -
48379 -fabsf - - - - -
48380 -fabs - - - - -
48381 -fabsl - - - - -
48382 -fdimf - - - - -
48383 -fdim - - - - -
48384 -fdiml - - - - -
48385 -floorf - - - - -
48386 -floor - - - - -
48387 -floorl - - - - -
48388 -fmaf - - - - -
48389 -fma - - - - -
48390 -fmal - - - - -
48391 -fmaxf - - - - -
48392 -fmax - - - - -
48393 -fmaxl - - - - -
48394 -fminf - - - - -
48395 -fmin - - - - -
48396 -fminl - - - - -
48397 -fmodf 1 1 1 1 1
48398 -fmod 2 2 2 2 2
48399 -fmodl 1 - - - -
48400 -frexpf - - - - -
48401 -frexp - - - - -
48402 -frexpl - - - - -
48403 -gammaf - - - - -
48404 -gamma - - - - -
48405 -gammal 1 - - - -
48406 -hypotf 1 1 1 1 1
48407 -hypot - 1 1 1 1
48408 -hypotl 1 - - - -
48409 -ilogbf - - - - -
48410 -ilogb - - - - -
48411 -ilogbl - - - - -
48412 -j0f 1 2 1 2 2
48413 -j0 1 2 2 2 2
48414 -j0l 1 - - - -
48415 -j1f 2 2 2 2 2
48416 -j1 - 1 1 1 1
48417 -j1l 2 - - - -
48418 -jnf 11 4 4 4 4
48419 -jn 4 6 6 6 6
48420 -jnl 2 - - - -
48421 -lgammaf 2 2 2 2 2
48422 -lgamma 1 1 1 1 1
48423 -lgammal 1 - - - -
48424 -lrintf - - - - -
48425 -lrint - - - - -
48426 -lrintl - - - - -
48427 -llrintf - - - - -
48428 -llrint - - - - -
48429 -llrintl - - - - -
48430 -logf 1 1 1 1 1
48431 -log 1 1 1 1 1
48432 -logl 2 - - - -
48433 -log10f 1 1 1 1 1
48434 -log10 1 1 1 1 1
48435 -log10l 1 - - - -
48436 -log1pf 1 1 1 1 1
48437 -log1p 1 1 1 1 1
48438 -log1pl 2 - - - -
48439 -log2f 1 1 1 1 1
48440 -log2 1 1 1 1 1
48441 -log2l 1 - - - -
48442 -logbf - - - - -
48443 -logb - - - - -
48444 -logbl - - - - -
48445 -lroundf - - - - -
48446 -lround - - - - -
48447 -lroundl - - - - -
48448 -llroundf - - - - -
48449 -llround - - - - -
48450 -llroundl - - - - -
48451 -modff - - - - -
48452 -modf - - - - -
48453 -modfl - - - - -
48454 -nearbyintf - - - - -
48455 -nearbyint - - - - -
48456 -nearbyintl - - - - -
48457 -nextafterf - - - - -
48458 -nextafter - - - - -
48459 -nextafterl - - - - -
48460 -nexttowardf - - - - -
48461 -nexttoward - - - - -
48462 -nexttowardl - - - - -
48463 -powf - - - - -
48464 -pow - - - - -
48465 -powl 1 - - - -
48466 -remainderf - - - - -
48467 -remainder - - - - -
48468 -remainderl - - - - -
48469 -remquof - - - - -
48470 -remquo - - - - -
48471 -remquol - - - - -
48472 -rintf - - - - -
48473 -rint - - - - -
48474 -rintl - - - - -
48475 -roundf - - - - -
48476 -round - - - - -
48477 -roundl - - - - -
48478 -scalbf - - - - -
48479 -scalb - - - - -
48480 -scalbl - - - - -
48481 -scalbnf - - - - -
48482 -scalbn - - - - -
48483 -scalbnl - - - - -
48484 -scalblnf - - - - -
48485 -scalbln - - - - -
48486 -scalblnl - - - - -
48487 -sinf - - - - -
48488 -sin - - - - -
48489 -sinl 1 - - - -
48490 -sincosf 1 1 1 1 1
48491 -sincos 1 1 1 1 1
48492 -sincosl 1 - - - -
48493 -sinhf 1 1 1 1 1
48494 -sinh - 1 1 1 1
48495 -sinhl - - - - -
48496 -sqrtf - - - - -
48497 -sqrt - - - - -
48498 -sqrtl - - - - -
48499 -tanf - - - - -
48500 -tan 1 0.5 1 0.5 0.5
48501 -tanl 1 - - - -
48502 -tanhf - 1 1 1 1
48503 -tanh - 1 1 1 1
48504 -tanhl - - - - -
48505 -tgammaf 1 1 1 1 1
48506 -tgamma 1 1 1 1 1
48507 -tgammal 1 - - - -
48508 -truncf - - - - -
48509 -trunc - - - - -
48510 -truncl - - - - -
48511 -y0f 2 1 1 1 1
48512 -y0 2 2 2 2 2
48513 -y0l 2 - - - -
48514 -y1f 2 2 2 2 2
48515 -y1 1 3 3 3 3
48516 -y1l 2 - - - -
48517 -ynf 2 2 2 2 2
48518 -yn 6 3 3 3 3
48519 -ynl 7 - - - -
48521 -Function Sparc 32-bit Sparc 64-bit x86_64/fpu
48522 -acosf - - -
48523 -acos - - -
48524 -acosl - 1 -
48525 -acoshf - - -
48526 -acosh - - -
48527 -acoshl - - -
48528 -asinf 2 2 -
48529 -asin 1 1 1
48530 -asinl - - 1
48531 -asinhf - - -
48532 -asinh - - -
48533 -asinhl - - 15
48534 -atanf - - -
48535 -atan - - -
48536 -atanl - 1 -
48537 -atanhf - - -
48538 -atanh 1 1 1
48539 -atanhl - - 1
48540 -atan2f 4.0000 4 4
48541 -atan2 - - -
48542 -atan2l - 1 -
48543 -cabsf 1 1 1
48544 -cabs 1 1 1
48545 -cabsl - - 1
48546 -cacosf 1 + i 1 1 + i 1 1 + i 1
48547 -cacos 1 + i 0 1 + i 0 1 + i 0
48548 -cacosl - 0 + i 3 1 + i 1
48549 -cacoshf 7 + i 3 7 + i 3 7 + i 3
48550 -cacosh 1 + i 1 1 + i 1 1 + i 1
48551 -cacoshl - 5 + i 1 6 + i 1
48552 -cargf - - -
48553 -carg - - -
48554 -cargl - - -
48555 -casinf 2 + i 1 2 + i 1 2 + i 1
48556 -casin 3 + i 0 3 + i 0 3 + i 0
48557 -casinl - 1 + i 3 0 + i 1
48558 -casinhf 1 + i 6 1 + i 6 1 + i 6
48559 -casinh 5 + i 3 5 + i 3 5 + i 3
48560 -casinhl - 4 + i 2 5 + i 5
48561 -catanf 4 + i 1 4 + i 1 4 + i 1
48562 -catan 0 + i 1 0 + i 1 0 + i 1
48563 -catanl - 0 + i 1 1 + i 0
48564 -catanhf 1 + i 6 1 + i 6 1 + i 6
48565 -catanh 4 + i 1 4 + i 1 4 + i 0
48566 -catanhl - - 1 + i 0
48567 -cbrtf - - -
48568 -cbrt 1 1 1
48569 -cbrtl - - 948
48570 -ccosf 0 + i 1 0 + i 1 0 + i 1
48571 -ccos 1 + i 1 1 + i 1 1 + i 1
48572 -ccosl - - 0 + i 1
48573 -ccoshf 1 + i 1 1 + i 1 1 + i 1
48574 -ccosh 1 + i 1 1 + i 1 1 + i 1
48575 -ccoshl - - 1 + i 1
48576 -ceilf - - -
48577 -ceil - - -
48578 -ceill - - -
48579 -cexpf 1 + i 1 1 + i 1 1 + i 1
48580 -cexp 1 + i 0 1 + i 0 1 + i 0
48581 -cexpl - 1 + i 1 2 + i 1
48582 -cimagf - - -
48583 -cimag - - -
48584 -cimagl - - -
48585 -clogf 0 + i 3 0 + i 3 0 + i 3
48586 -clog 0 + i 1 0 + i 1 -
48587 -clogl - - -
48588 -clog10f 1 + i 5 1 + i 5 1 + i 5
48589 -clog10 1 + i 1 1 + i 1 1 + i 1
48590 -clog10l - - 1 + i 3
48591 -conjf - - -
48592 -conj - - -
48593 -conjl - - -
48594 -copysignf - - -
48595 -copysign - - -
48596 -copysignl - - -
48597 -cosf 1 1 1
48598 -cos 2 2 2
48599 -cosl - 1 0.5
48600 -coshf - - -
48601 -cosh - - -
48602 -coshl - - 2
48603 -cpowf 4 + i 2 4 + i 2 4 + i 2
48604 -cpow 1 + i 1.1031 1 + i 1.1031 1 + i 1.1031
48605 -cpowl - 3 + i 0.9006 1 + i 2
48606 -cprojf - - -
48607 -cproj - - -
48608 -cprojl - - -
48609 -crealf - - -
48610 -creal - - -
48611 -creall - - -
48612 -csinf 0 + i 1 0 + i 1 0 + i 1
48613 -csin - - -
48614 -csinl - - 0 + i 2
48615 -csinhf 1 + i 1 1 + i 1 1 + i 1
48616 -csinh 0 + i 1 0 + i 1 0 + i 1
48617 -csinhl - - 2 + i 2
48618 -csqrtf 1 + i 1 1 + i 1 1 + i 1
48619 -csqrt 1 + i 0 1 + i 0 1 + i 0
48620 -csqrtl - 1 + i 1 -
48621 -ctanf 1 + i 1 1 + i 1 1 + i 1
48622 -ctan 1 + i 1 1 + i 1 1 + i 1
48623 -ctanl - - 439 + i 2
48624 -ctanhf 2 + i 1 2 + i 1 2 + i 1
48625 -ctanh 2 + i 2 2 + i 2 2 + i 2
48626 -ctanhl - - 5 + i 25
48627 -erff - - -
48628 -erf - - -
48629 -erfl - - -
48630 -erfcf 12 12 12
48631 -erfc 24 24 24
48632 -erfcl - - 36
48633 -expf - - -
48634 -exp - - -
48635 -expl - - -
48636 -exp10f 2 2 2
48637 -exp10 6 6 6
48638 -exp10l - 1 3
48639 -exp2f - - -
48640 -exp2 - - -
48641 -exp2l - - -
48642 -expm1f 1 1 1
48643 -expm1 - 1 1
48644 -expm1l - - 1
48645 -fabsf - - -
48646 -fabs - - -
48647 -fabsl - - -
48648 -fdimf - - -
48649 -fdim - - -
48650 -fdiml - - -
48651 -floorf - - -
48652 -floor - - -
48653 -floorl - - -
48654 -fmaf - - -
48655 -fma - - -
48656 -fmal - - -
48657 -fmaxf - - -
48658 -fmax - - -
48659 -fmaxl - - -
48660 -fminf - - -
48661 -fmin - - -
48662 -fminl - - -
48663 -fmodf 1 1 1
48664 -fmod 2 2 2
48665 -fmodl - 2 1
48666 -frexpf - - -
48667 -frexp - - -
48668 -frexpl - - -
48669 -gammaf - - -
48670 -gamma - - -
48671 -gammal - - 1
48672 -hypotf 1 1 1
48673 -hypot 1 1 1
48674 -hypotl - - 1
48675 -ilogbf - - -
48676 -ilogb - - -
48677 -ilogbl - - -
48678 -j0f 2 2 2
48679 -j0 2 2 2
48680 -j0l - - -
48681 -j1f 2 2 2
48682 -j1 1 1 1
48683 -j1l - - 2
48684 -jnf 4 4 4
48685 -jn 6 6 6
48686 -jnl - - 2
48687 -lgammaf 2 2 2
48688 -lgamma 1 1 1
48689 -lgammal - - 1
48690 -lrintf - - -
48691 -lrint - - -
48692 -lrintl - - -
48693 -llrintf - - -
48694 -llrint - - -
48695 -llrintl - - -
48696 -logf 1 1 1
48697 -log 1 1 1
48698 -logl - 1 1
48699 -log10f 1 1 1
48700 -log10 1 1 1
48701 -log10l - - 1
48702 -log1pf 1 1 1
48703 -log1p 1 1 1
48704 -log1pl - 1 1
48705 -log2f 1 1 1
48706 -log2 1 1 1
48707 -log2l - - -
48708 -logbf - - -
48709 -logb - - -
48710 -logbl - - -
48711 -lroundf - - -
48712 -lround - - -
48713 -lroundl - - -
48714 -llroundf - - -
48715 -llround - - -
48716 -llroundl - - -
48717 -modff - - -
48718 -modf - - -
48719 -modfl - - -
48720 -nearbyintf - - -
48721 -nearbyint - - -
48722 -nearbyintl - - -
48723 -nextafterf - - -
48724 -nextafter - - -
48725 -nextafterl - - -
48726 -nexttowardf - - -
48727 -nexttoward - - -
48728 -nexttowardl - - -
48729 -powf - - -
48730 -pow - - -
48731 -powl - - -
48732 -remainderf - - -
48733 -remainder - - -
48734 -remainderl - - -
48735 -remquof - - -
48736 -remquo - - -
48737 -remquol - - -
48738 -rintf - - -
48739 -rint - - -
48740 -rintl - - -
48741 -roundf - - -
48742 -round - - -
48743 -roundl - - -
48744 -scalbf - - -
48745 -scalb - - -
48746 -scalbl - - -
48747 -scalbnf - - -
48748 -scalbn - - -
48749 -scalbnl - - -
48750 -scalblnf - - -
48751 -scalbln - - -
48752 -scalblnl - - -
48753 -sinf - - -
48754 -sin - - -
48755 -sinl - - 1
48756 -sincosf 1 1 1
48757 -sincos 1 1 1
48758 -sincosl - 1 1
48759 -sinhf 1 1 1
48760 -sinh 1 1 1
48761 -sinhl - - 1
48762 -sqrtf - - -
48763 -sqrt - - -
48764 -sqrtl - 1 -
48765 -tanf - - -
48766 -tan 0.5 0.5 0.5
48767 -tanl - 1 1
48768 -tanhf 1 1 1
48769 -tanh 1 1 1
48770 -tanhl - - 1
48771 -tgammaf 1 1 1
48772 -tgamma 1 1 1
48773 -tgammal - - 2
48774 -truncf - - -
48775 -trunc - - -
48776 -truncl - - -
48777 -y0f 1 1 1
48778 -y0 2 2 2
48779 -y0l - - 2
48780 -y1f 2 2 2
48781 -y1 3 3 3
48782 -y1l - - 2
48783 -ynf 2 2 2
48784 -yn 3 3 3
48785 -ynl - - 7
48787 diff -u -udbrN glibc-2.3.2/manual/libc.info-33 glibc-2.3.2-200304020432/manual/libc.info-33
48788 --- glibc-2.3.2/manual/libc.info-33 Sat Mar 1 02:39:41 2003
48789 +++ glibc-2.3.2-200304020432/manual/libc.info-33 Thu Jan 1 01:00:00 1970
48790 @@ -1,1234 +0,0 @@
48791 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
48793 -INFO-DIR-SECTION GNU libraries
48794 -START-INFO-DIR-ENTRY
48795 -* Libc: (libc). C library.
48796 -END-INFO-DIR-ENTRY
48798 - This file documents the GNU C library.
48800 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
48801 -Reference Manual', for Version 2.3.x.
48803 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
48804 -Free Software Foundation, Inc.
48806 - Permission is granted to copy, distribute and/or modify this document
48807 -under the terms of the GNU Free Documentation License, Version 1.1 or
48808 -any later version published by the Free Software Foundation; with the
48809 -Invariant Sections being "Free Software Needs Free Documentation" and
48810 -"GNU Lesser General Public License", the Front-Cover texts being (a)
48811 -(see below), and with the Back-Cover Texts being (b) (see below). A
48812 -copy of the license is included in the section entitled "GNU Free
48813 -Documentation License".
48815 - (a) The FSF's Front-Cover Text is:
48817 - A GNU Manual
48819 - (b) The FSF's Back-Cover Text is:
48821 - You have freedom to copy and modify this GNU Manual, like GNU
48822 -software. Copies published by the Free Software Foundation raise
48823 -funds for GNU development.
48825 -\x1f
48826 -File: libc.info, Node: Pseudo-Random Numbers, Next: FP Function Optimizations, Prev: Errors in Math Functions, Up: Mathematics
48828 -Pseudo-Random Numbers
48829 -=====================
48831 - This section describes the GNU facilities for generating a series of
48832 -pseudo-random numbers. The numbers generated are not truly random;
48833 -typically, they form a sequence that repeats periodically, with a period
48834 -so large that you can ignore it for ordinary purposes. The random
48835 -number generator works by remembering a "seed" value which it uses to
48836 -compute the next random number and also to compute a new seed.
48838 - Although the generated numbers look unpredictable within one run of a
48839 -program, the sequence of numbers is _exactly the same_ from one run to
48840 -the next. This is because the initial seed is always the same. This
48841 -is convenient when you are debugging a program, but it is unhelpful if
48842 -you want the program to behave unpredictably. If you want a different
48843 -pseudo-random series each time your program runs, you must specify a
48844 -different seed each time. For ordinary purposes, basing the seed on the
48845 -current time works well.
48847 - You can obtain repeatable sequences of numbers on a particular
48848 -machine type by specifying the same initial seed value for the random
48849 -number generator. There is no standard meaning for a particular seed
48850 -value; the same seed, used in different C libraries or on different CPU
48851 -types, will give you different random numbers.
48853 - The GNU library supports the standard ISO C random number functions
48854 -plus two other sets derived from BSD and SVID. The BSD and ISO C
48855 -functions provide identical, somewhat limited functionality. If only a
48856 -small number of random bits are required, we recommend you use the
48857 -ISO C interface, `rand' and `srand'. The SVID functions provide a more
48858 -flexible interface, which allows better random number generator
48859 -algorithms, provides more random bits (up to 48) per call, and can
48860 -provide random floating-point numbers. These functions are required by
48861 -the XPG standard and therefore will be present in all modern Unix
48862 -systems.
48864 -* Menu:
48866 -* ISO Random:: `rand' and friends.
48867 -* BSD Random:: `random' and friends.
48868 -* SVID Random:: `drand48' and friends.
48870 -\x1f
48871 -File: libc.info, Node: ISO Random, Next: BSD Random, Up: Pseudo-Random Numbers
48873 -ISO C Random Number Functions
48874 ------------------------------
48876 - This section describes the random number functions that are part of
48877 -the ISO C standard.
48879 - To use these facilities, you should include the header file
48880 -`stdlib.h' in your program.
48882 - - Macro: int RAND_MAX
48883 - The value of this macro is an integer constant representing the
48884 - largest value the `rand' function can return. In the GNU library,
48885 - it is `2147483647', which is the largest signed integer
48886 - representable in 32 bits. In other libraries, it may be as low as
48887 - `32767'.
48889 - - Function: int rand (void)
48890 - The `rand' function returns the next pseudo-random number in the
48891 - series. The value ranges from `0' to `RAND_MAX'.
48893 - - Function: void srand (unsigned int SEED)
48894 - This function establishes SEED as the seed for a new series of
48895 - pseudo-random numbers. If you call `rand' before a seed has been
48896 - established with `srand', it uses the value `1' as a default seed.
48898 - To produce a different pseudo-random series each time your program
48899 - is run, do `srand (time (0))'.
48901 - POSIX.1 extended the C standard functions to support reproducible
48902 -random numbers in multi-threaded programs. However, the extension is
48903 -badly designed and unsuitable for serious work.
48905 - - Function: int rand_r (unsigned int *SEED)
48906 - This function returns a random number in the range 0 to `RAND_MAX'
48907 - just as `rand' does. However, all its state is stored in the SEED
48908 - argument. This means the RNG's state can only have as many bits
48909 - as the type `unsigned int' has. This is far too few to provide a
48910 - good RNG.
48912 - If your program requires a reentrant RNG, we recommend you use the
48913 - reentrant GNU extensions to the SVID random number generator. The
48914 - POSIX.1 interface should only be used when the GNU extensions are
48915 - not available.
48917 -\x1f
48918 -File: libc.info, Node: BSD Random, Next: SVID Random, Prev: ISO Random, Up: Pseudo-Random Numbers
48920 -BSD Random Number Functions
48921 ----------------------------
48923 - This section describes a set of random number generation functions
48924 -that are derived from BSD. There is no advantage to using these
48925 -functions with the GNU C library; we support them for BSD compatibility
48926 -only.
48928 - The prototypes for these functions are in `stdlib.h'.
48930 - - Function: long int random (void)
48931 - This function returns the next pseudo-random number in the
48932 - sequence. The value returned ranges from `0' to `RAND_MAX'.
48934 - *Note:* Temporarily this function was defined to return a
48935 - `int32_t' value to indicate that the return value always contains
48936 - 32 bits even if `long int' is wider. The standard demands it
48937 - differently. Users must always be aware of the 32-bit limitation,
48938 - though.
48940 - - Function: void srandom (unsigned int SEED)
48941 - The `srandom' function sets the state of the random number
48942 - generator based on the integer SEED. If you supply a SEED value
48943 - of `1', this will cause `random' to reproduce the default set of
48944 - random numbers.
48946 - To produce a different set of pseudo-random numbers each time your
48947 - program runs, do `srandom (time (0))'.
48949 - - Function: void * initstate (unsigned int SEED, void *STATE, size_t
48950 - SIZE)
48951 - The `initstate' function is used to initialize the random number
48952 - generator state. The argument STATE is an array of SIZE bytes,
48953 - used to hold the state information. It is initialized based on
48954 - SEED. The size must be between 8 and 256 bytes, and should be a
48955 - power of two. The bigger the STATE array, the better.
48957 - The return value is the previous value of the state information
48958 - array. You can use this value later as an argument to `setstate'
48959 - to restore that state.
48961 - - Function: void * setstate (void *STATE)
48962 - The `setstate' function restores the random number state
48963 - information STATE. The argument must have been the result of a
48964 - previous call to INITSTATE or SETSTATE.
48966 - The return value is the previous value of the state information
48967 - array. You can use this value later as an argument to `setstate'
48968 - to restore that state.
48970 - If the function fails the return value is `NULL'.
48972 - The four functions described so far in this section all work on a
48973 -state which is shared by all threads. The state is not directly
48974 -accessible to the user and can only be modified by these functions.
48975 -This makes it hard to deal with situations where each thread should
48976 -have its own pseudo-random number generator.
48978 - The GNU C library contains four additional functions which contain
48979 -the state as an explicit parameter and therefore make it possible to
48980 -handle thread-local PRNGs. Beside this there are no difference. In
48981 -fact, the four functions already discussed are implemented internally
48982 -using the following interfaces.
48984 - The `stdlib.h' header contains a definition of the following type:
48986 - - Data Type: struct random_data
48987 - Objects of type `struct random_data' contain the information
48988 - necessary to represent the state of the PRNG. Although a complete
48989 - definition of the type is present the type should be treated as
48990 - opaque.
48992 - The functions modifying the state follow exactly the already
48993 -described functions.
48995 - - Function: int random_r (struct random_data *restrict BUF, int32_t
48996 - *restrict RESULT)
48997 - The `random_r' function behaves exactly like the `random' function
48998 - except that it uses and modifies the state in the object pointed
48999 - to by the first parameter instead of the global state.
49001 - - Function: int srandom_r (unsigned int SEED, struct random_data *BUF)
49002 - The `srandom_r' function behaves exactly like the `srandom'
49003 - function except that it uses and modifies the state in the object
49004 - pointed to by the second parameter instead of the global state.
49006 - - Function: int initstate_r (unsigned int SEED, char *restrict
49007 - STATEBUF, size_t STATELEN, struct random_data *restrict BUF)
49008 - The `initstate_r' function behaves exactly like the `initstate'
49009 - function except that it uses and modifies the state in the object
49010 - pointed to by the fourth parameter instead of the global state.
49012 - - Function: int setstate_r (char *restrict STATEBUF, struct
49013 - random_data *restrict BUF)
49014 - The `setstate_r' function behaves exactly like the `setstate'
49015 - function except that it uses and modifies the state in the object
49016 - pointed to by the first parameter instead of the global state.
49018 -\x1f
49019 -File: libc.info, Node: SVID Random, Prev: BSD Random, Up: Pseudo-Random Numbers
49021 -SVID Random Number Function
49022 ----------------------------
49024 - The C library on SVID systems contains yet another kind of random
49025 -number generator functions. They use a state of 48 bits of data. The
49026 -user can choose among a collection of functions which return the random
49027 -bits in different forms.
49029 - Generally there are two kinds of function. The first uses a state of
49030 -the random number generator which is shared among several functions and
49031 -by all threads of the process. The second requires the user to handle
49032 -the state.
49034 - All functions have in common that they use the same congruential
49035 -formula with the same constants. The formula is
49037 - Y = (a * X + c) mod m
49039 -where X is the state of the generator at the beginning and Y the state
49040 -at the end. `a' and `c' are constants determining the way the
49041 -generator works. By default they are
49043 - a = 0x5DEECE66D = 25214903917
49044 - c = 0xb = 11
49046 -but they can also be changed by the user. `m' is of course 2^48 since
49047 -the state consists of a 48-bit array.
49049 - The prototypes for these functions are in `stdlib.h'.
49051 - - Function: double drand48 (void)
49052 - This function returns a `double' value in the range of `0.0' to
49053 - `1.0' (exclusive). The random bits are determined by the global
49054 - state of the random number generator in the C library.
49056 - Since the `double' type according to IEEE 754 has a 52-bit
49057 - mantissa this means 4 bits are not initialized by the random number
49058 - generator. These are (of course) chosen to be the least
49059 - significant bits and they are initialized to `0'.
49061 - - Function: double erand48 (unsigned short int XSUBI[3])
49062 - This function returns a `double' value in the range of `0.0' to
49063 - `1.0' (exclusive), similarly to `drand48'. The argument is an
49064 - array describing the state of the random number generator.
49066 - This function can be called subsequently since it updates the
49067 - array to guarantee random numbers. The array should have been
49068 - initialized before initial use to obtain reproducible results.
49070 - - Function: long int lrand48 (void)
49071 - The `lrand48' function returns an integer value in the range of
49072 - `0' to `2^31' (exclusive). Even if the size of the `long int'
49073 - type can take more than 32 bits, no higher numbers are returned.
49074 - The random bits are determined by the global state of the random
49075 - number generator in the C library.
49077 - - Function: long int nrand48 (unsigned short int XSUBI[3])
49078 - This function is similar to the `lrand48' function in that it
49079 - returns a number in the range of `0' to `2^31' (exclusive) but the
49080 - state of the random number generator used to produce the random
49081 - bits is determined by the array provided as the parameter to the
49082 - function.
49084 - The numbers in the array are updated afterwards so that subsequent
49085 - calls to this function yield different results (as is expected of
49086 - a random number generator). The array should have been
49087 - initialized before the first call to obtain reproducible results.
49089 - - Function: long int mrand48 (void)
49090 - The `mrand48' function is similar to `lrand48'. The only
49091 - difference is that the numbers returned are in the range `-2^31' to
49092 - `2^31' (exclusive).
49094 - - Function: long int jrand48 (unsigned short int XSUBI[3])
49095 - The `jrand48' function is similar to `nrand48'. The only
49096 - difference is that the numbers returned are in the range `-2^31' to
49097 - `2^31' (exclusive). For the `xsubi' parameter the same
49098 - requirements are necessary.
49100 - The internal state of the random number generator can be initialized
49101 -in several ways. The methods differ in the completeness of the
49102 -information provided.
49104 - - Function: void srand48 (long int SEEDVAL)
49105 - The `srand48' function sets the most significant 32 bits of the
49106 - internal state of the random number generator to the least
49107 - significant 32 bits of the SEEDVAL parameter. The lower 16 bits
49108 - are initialized to the value `0x330E'. Even if the `long int'
49109 - type contains more than 32 bits only the lower 32 bits are used.
49111 - Owing to this limitation, initialization of the state of this
49112 - function is not very useful. But it makes it easy to use a
49113 - construct like `srand48 (time (0))'.
49115 - A side-effect of this function is that the values `a' and `c' from
49116 - the internal state, which are used in the congruential formula,
49117 - are reset to the default values given above. This is of
49118 - importance once the user has called the `lcong48' function (see
49119 - below).
49121 - - Function: unsigned short int * seed48 (unsigned short int SEED16V[3])
49122 - The `seed48' function initializes all 48 bits of the state of the
49123 - internal random number generator from the contents of the parameter
49124 - SEED16V. Here the lower 16 bits of the first element of SEE16V
49125 - initialize the least significant 16 bits of the internal state,
49126 - the lower 16 bits of `SEED16V[1]' initialize the mid-order 16 bits
49127 - of the state and the 16 lower bits of `SEED16V[2]' initialize the
49128 - most significant 16 bits of the state.
49130 - Unlike `srand48' this function lets the user initialize all 48 bits
49131 - of the state.
49133 - The value returned by `seed48' is a pointer to an array containing
49134 - the values of the internal state before the change. This might be
49135 - useful to restart the random number generator at a certain state.
49136 - Otherwise the value can simply be ignored.
49138 - As for `srand48', the values `a' and `c' from the congruential
49139 - formula are reset to the default values.
49141 - There is one more function to initialize the random number generator
49142 -which enables you to specify even more information by allowing you to
49143 -change the parameters in the congruential formula.
49145 - - Function: void lcong48 (unsigned short int PARAM[7])
49146 - The `lcong48' function allows the user to change the complete state
49147 - of the random number generator. Unlike `srand48' and `seed48',
49148 - this function also changes the constants in the congruential
49149 - formula.
49151 - From the seven elements in the array PARAM the least significant
49152 - 16 bits of the entries `PARAM[0]' to `PARAM[2]' determine the
49153 - initial state, the least significant 16 bits of `PARAM[3]' to
49154 - `PARAM[5]' determine the 48 bit constant `a' and `PARAM[6]'
49155 - determines the 16-bit value `c'.
49157 - All the above functions have in common that they use the global
49158 -parameters for the congruential formula. In multi-threaded programs it
49159 -might sometimes be useful to have different parameters in different
49160 -threads. For this reason all the above functions have a counterpart
49161 -which works on a description of the random number generator in the
49162 -user-supplied buffer instead of the global state.
49164 - Please note that it is no problem if several threads use the global
49165 -state if all threads use the functions which take a pointer to an array
49166 -containing the state. The random numbers are computed following the
49167 -same loop but if the state in the array is different all threads will
49168 -obtain an individual random number generator.
49170 - The user-supplied buffer must be of type `struct drand48_data'.
49171 -This type should be regarded as opaque and not manipulated directly.
49173 - - Function: int drand48_r (struct drand48_data *BUFFER, double *RESULT)
49174 - This function is equivalent to the `drand48' function with the
49175 - difference that it does not modify the global random number
49176 - generator parameters but instead the parameters in the buffer
49177 - supplied through the pointer BUFFER. The random number is
49178 - returned in the variable pointed to by RESULT.
49180 - The return value of the function indicates whether the call
49181 - succeeded. If the value is less than `0' an error occurred and
49182 - ERRNO is set to indicate the problem.
49184 - This function is a GNU extension and should not be used in portable
49185 - programs.
49187 - - Function: int erand48_r (unsigned short int XSUBI[3], struct
49188 - drand48_data *BUFFER, double *RESULT)
49189 - The `erand48_r' function works like `erand48', but in addition it
49190 - takes an argument BUFFER which describes the random number
49191 - generator. The state of the random number generator is taken from
49192 - the `xsubi' array, the parameters for the congruential formula
49193 - from the global random number generator data. The random number
49194 - is returned in the variable pointed to by RESULT.
49196 - The return value is non-negative if the call succeeded.
49198 - This function is a GNU extension and should not be used in portable
49199 - programs.
49201 - - Function: int lrand48_r (struct drand48_data *BUFFER, double *RESULT)
49202 - This function is similar to `lrand48', but in addition it takes a
49203 - pointer to a buffer describing the state of the random number
49204 - generator just like `drand48'.
49206 - If the return value of the function is non-negative the variable
49207 - pointed to by RESULT contains the result. Otherwise an error
49208 - occurred.
49210 - This function is a GNU extension and should not be used in portable
49211 - programs.
49213 - - Function: int nrand48_r (unsigned short int XSUBI[3], struct
49214 - drand48_data *BUFFER, long int *RESULT)
49215 - The `nrand48_r' function works like `nrand48' in that it produces
49216 - a random number in the range `0' to `2^31'. But instead of using
49217 - the global parameters for the congruential formula it uses the
49218 - information from the buffer pointed to by BUFFER. The state is
49219 - described by the values in XSUBI.
49221 - If the return value is non-negative the variable pointed to by
49222 - RESULT contains the result.
49224 - This function is a GNU extension and should not be used in portable
49225 - programs.
49227 - - Function: int mrand48_r (struct drand48_data *BUFFER, double *RESULT)
49228 - This function is similar to `mrand48' but like the other reentrant
49229 - functions it uses the random number generator described by the
49230 - value in the buffer pointed to by BUFFER.
49232 - If the return value is non-negative the variable pointed to by
49233 - RESULT contains the result.
49235 - This function is a GNU extension and should not be used in portable
49236 - programs.
49238 - - Function: int jrand48_r (unsigned short int XSUBI[3], struct
49239 - drand48_data *BUFFER, long int *RESULT)
49240 - The `jrand48_r' function is similar to `jrand48'. Like the other
49241 - reentrant functions of this function family it uses the
49242 - congruential formula parameters from the buffer pointed to by
49243 - BUFFER.
49245 - If the return value is non-negative the variable pointed to by
49246 - RESULT contains the result.
49248 - This function is a GNU extension and should not be used in portable
49249 - programs.
49251 - Before any of the above functions are used the buffer of type
49252 -`struct drand48_data' should be initialized. The easiest way to do
49253 -this is to fill the whole buffer with null bytes, e.g. by
49255 - memset (buffer, '\0', sizeof (struct drand48_data));
49257 -Using any of the reentrant functions of this family now will
49258 -automatically initialize the random number generator to the default
49259 -values for the state and the parameters of the congruential formula.
49261 - The other possibility is to use any of the functions which explicitly
49262 -initialize the buffer. Though it might be obvious how to initialize the
49263 -buffer from looking at the parameter to the function, it is highly
49264 -recommended to use these functions since the result might not always be
49265 -what you expect.
49267 - - Function: int srand48_r (long int SEEDVAL, struct drand48_data
49268 - *BUFFER)
49269 - The description of the random number generator represented by the
49270 - information in BUFFER is initialized similarly to what the function
49271 - `srand48' does. The state is initialized from the parameter
49272 - SEEDVAL and the parameters for the congruential formula are
49273 - initialized to their default values.
49275 - If the return value is non-negative the function call succeeded.
49277 - This function is a GNU extension and should not be used in portable
49278 - programs.
49280 - - Function: int seed48_r (unsigned short int SEED16V[3], struct
49281 - drand48_data *BUFFER)
49282 - This function is similar to `srand48_r' but like `seed48' it
49283 - initializes all 48 bits of the state from the parameter SEED16V.
49285 - If the return value is non-negative the function call succeeded.
49286 - It does not return a pointer to the previous state of the random
49287 - number generator like the `seed48' function does. If the user
49288 - wants to preserve the state for a later re-run s/he can copy the
49289 - whole buffer pointed to by BUFFER.
49291 - This function is a GNU extension and should not be used in portable
49292 - programs.
49294 - - Function: int lcong48_r (unsigned short int PARAM[7], struct
49295 - drand48_data *BUFFER)
49296 - This function initializes all aspects of the random number
49297 - generator described in BUFFER with the data in PARAM. Here it is
49298 - especially true that the function does more than just copying the
49299 - contents of PARAM and BUFFER. More work is required and therefore
49300 - it is important to use this function rather than initializing the
49301 - random number generator directly.
49303 - If the return value is non-negative the function call succeeded.
49305 - This function is a GNU extension and should not be used in portable
49306 - programs.
49308 -\x1f
49309 -File: libc.info, Node: FP Function Optimizations, Prev: Pseudo-Random Numbers, Up: Mathematics
49311 -Is Fast Code or Small Code preferred?
49312 -=====================================
49314 - If an application uses many floating point functions it is often the
49315 -case that the cost of the function calls themselves is not negligible.
49316 -Modern processors can often execute the operations themselves very
49317 -fast, but the function call disrupts the instruction pipeline.
49319 - For this reason the GNU C Library provides optimizations for many of
49320 -the frequently-used math functions. When GNU CC is used and the user
49321 -activates the optimizer, several new inline functions and macros are
49322 -defined. These new functions and macros have the same names as the
49323 -library functions and so are used instead of the latter. In the case of
49324 -inline functions the compiler will decide whether it is reasonable to
49325 -use them, and this decision is usually correct.
49327 - This means that no calls to the library functions may be necessary,
49328 -and can increase the speed of generated code significantly. The
49329 -drawback is that code size will increase, and the increase is not
49330 -always negligible.
49332 - There are two kind of inline functions: Those that give the same
49333 -result as the library functions and others that might not set `errno'
49334 -and might have a reduced precision and/or argument range in comparison
49335 -with the library functions. The latter inline functions are only
49336 -available if the flag `-ffast-math' is given to GNU CC.
49338 - In cases where the inline functions and macros are not wanted the
49339 -symbol `__NO_MATH_INLINES' should be defined before any system header is
49340 -included. This will ensure that only library functions are used. Of
49341 -course, it can be determined for each file in the project whether
49342 -giving this option is preferable or not.
49344 - Not all hardware implements the entire IEEE 754 standard, and even
49345 -if it does there may be a substantial performance penalty for using some
49346 -of its features. For example, enabling traps on some processors forces
49347 -the FPU to run un-pipelined, which can more than double calculation
49348 -time.
49350 -\x1f
49351 -File: libc.info, Node: Arithmetic, Next: Date and Time, Prev: Mathematics, Up: Top
49353 -Arithmetic Functions
49354 -********************
49356 - This chapter contains information about functions for doing basic
49357 -arithmetic operations, such as splitting a float into its integer and
49358 -fractional parts or retrieving the imaginary part of a complex value.
49359 -These functions are declared in the header files `math.h' and
49360 -`complex.h'.
49362 -* Menu:
49364 -* Integers:: Basic integer types and concepts
49365 -* Integer Division:: Integer division with guaranteed rounding.
49366 -* Floating Point Numbers:: Basic concepts. IEEE 754.
49367 -* Floating Point Classes:: The five kinds of floating-point number.
49368 -* Floating Point Errors:: When something goes wrong in a calculation.
49369 -* Rounding:: Controlling how results are rounded.
49370 -* Control Functions:: Saving and restoring the FPU's state.
49371 -* Arithmetic Functions:: Fundamental operations provided by the library.
49372 -* Complex Numbers:: The types. Writing complex constants.
49373 -* Operations on Complex:: Projection, conjugation, decomposition.
49374 -* Parsing of Numbers:: Converting strings to numbers.
49375 -* System V Number Conversion:: An archaic way to convert numbers to strings.
49377 -\x1f
49378 -File: libc.info, Node: Integers, Next: Integer Division, Up: Arithmetic
49380 -Integers
49381 -========
49383 - The C language defines several integer data types: integer, short
49384 -integer, long integer, and character, all in both signed and unsigned
49385 -varieties. The GNU C compiler extends the language to contain long
49386 -long integers as well.
49388 - The C integer types were intended to allow code to be portable among
49389 -machines with different inherent data sizes (word sizes), so each type
49390 -may have different ranges on different machines. The problem with this
49391 -is that a program often needs to be written for a particular range of
49392 -integers, and sometimes must be written for a particular size of
49393 -storage, regardless of what machine the program runs on.
49395 - To address this problem, the GNU C library contains C type
49396 -definitions you can use to declare integers that meet your exact needs.
49397 -Because the GNU C library header files are customized to a specific
49398 -machine, your program source code doesn't have to be.
49400 - These `typedef's are in `stdint.h'.
49402 - If you require that an integer be represented in exactly N bits, use
49403 -one of the following types, with the obvious mapping to bit size and
49404 -signedness:
49406 - * int8_t
49408 - * int16_t
49410 - * int32_t
49412 - * int64_t
49414 - * uint8_t
49416 - * uint16_t
49418 - * uint32_t
49420 - * uint64_t
49422 - If your C compiler and target machine do not allow integers of a
49423 -certain size, the corresponding above type does not exist.
49425 - If you don't need a specific storage size, but want the smallest data
49426 -structure with _at least_ N bits, use one of these:
49428 - * int_least8_t
49430 - * int_least16_t
49432 - * int_least32_t
49434 - * int_least64_t
49436 - * uint_least8_t
49438 - * uint_least16_t
49440 - * uint_least32_t
49442 - * uint_least64_t
49444 - If you don't need a specific storage size, but want the data
49445 -structure that allows the fastest access while having at least N bits
49446 -(and among data structures with the same access speed, the smallest
49447 -one), use one of these:
49449 - * int_fast8_t
49451 - * int_fast16_t
49453 - * int_fast32_t
49455 - * int_fast64_t
49457 - * uint_fast8_t
49459 - * uint_fast16_t
49461 - * uint_fast32_t
49463 - * uint_fast64_t
49465 - If you want an integer with the widest range possible on the
49466 -platform on which it is being used, use one of the following. If you
49467 -use these, you should write code that takes into account the variable
49468 -size and range of the integer.
49470 - * intmax_t
49472 - * uintmax_t
49474 - The GNU C library also provides macros that tell you the maximum and
49475 -minimum possible values for each integer data type. The macro names
49476 -follow these examples: `INT32_MAX', `UINT8_MAX', `INT_FAST32_MIN',
49477 -`INT_LEAST64_MIN', `UINTMAX_MAX', `INTMAX_MAX', `INTMAX_MIN'. Note
49478 -that there are no macros for unsigned integer minima. These are always
49479 -zero.
49481 - There are similar macros for use with C's built in integer types
49482 -which should come with your C compiler. These are described in *Note
49483 -Data Type Measurements::.
49485 - Don't forget you can use the C `sizeof' function with any of these
49486 -data types to get the number of bytes of storage each uses.
49488 -\x1f
49489 -File: libc.info, Node: Integer Division, Next: Floating Point Numbers, Prev: Integers, Up: Arithmetic
49491 -Integer Division
49492 -================
49494 - This section describes functions for performing integer division.
49495 -These functions are redundant when GNU CC is used, because in GNU C the
49496 -`/' operator always rounds towards zero. But in other C
49497 -implementations, `/' may round differently with negative arguments.
49498 -`div' and `ldiv' are useful because they specify how to round the
49499 -quotient: towards zero. The remainder has the same sign as the
49500 -numerator.
49502 - These functions are specified to return a result R such that the
49503 -value `R.quot*DENOMINATOR + R.rem' equals NUMERATOR.
49505 - To use these facilities, you should include the header file
49506 -`stdlib.h' in your program.
49508 - - Data Type: div_t
49509 - This is a structure type used to hold the result returned by the
49510 - `div' function. It has the following members:
49512 - `int quot'
49513 - The quotient from the division.
49515 - `int rem'
49516 - The remainder from the division.
49518 - - Function: div_t div (int NUMERATOR, int DENOMINATOR)
49519 - This function `div' computes the quotient and remainder from the
49520 - division of NUMERATOR by DENOMINATOR, returning the result in a
49521 - structure of type `div_t'.
49523 - If the result cannot be represented (as in a division by zero), the
49524 - behavior is undefined.
49526 - Here is an example, albeit not a very useful one.
49528 - div_t result;
49529 - result = div (20, -6);
49531 - Now `result.quot' is `-3' and `result.rem' is `2'.
49533 - - Data Type: ldiv_t
49534 - This is a structure type used to hold the result returned by the
49535 - `ldiv' function. It has the following members:
49537 - `long int quot'
49538 - The quotient from the division.
49540 - `long int rem'
49541 - The remainder from the division.
49543 - (This is identical to `div_t' except that the components are of
49544 - type `long int' rather than `int'.)
49546 - - Function: ldiv_t ldiv (long int NUMERATOR, long int DENOMINATOR)
49547 - The `ldiv' function is similar to `div', except that the arguments
49548 - are of type `long int' and the result is returned as a structure
49549 - of type `ldiv_t'.
49551 - - Data Type: lldiv_t
49552 - This is a structure type used to hold the result returned by the
49553 - `lldiv' function. It has the following members:
49555 - `long long int quot'
49556 - The quotient from the division.
49558 - `long long int rem'
49559 - The remainder from the division.
49561 - (This is identical to `div_t' except that the components are of
49562 - type `long long int' rather than `int'.)
49564 - - Function: lldiv_t lldiv (long long int NUMERATOR, long long int
49565 - DENOMINATOR)
49566 - The `lldiv' function is like the `div' function, but the arguments
49567 - are of type `long long int' and the result is returned as a
49568 - structure of type `lldiv_t'.
49570 - The `lldiv' function was added in ISO C99.
49572 - - Data Type: imaxdiv_t
49573 - This is a structure type used to hold the result returned by the
49574 - `imaxdiv' function. It has the following members:
49576 - `intmax_t quot'
49577 - The quotient from the division.
49579 - `intmax_t rem'
49580 - The remainder from the division.
49582 - (This is identical to `div_t' except that the components are of
49583 - type `intmax_t' rather than `int'.)
49585 - See *Note Integers:: for a description of the `intmax_t' type.
49588 - - Function: imaxdiv_t imaxdiv (intmax_t NUMERATOR, intmax_t
49589 - DENOMINATOR)
49590 - The `imaxdiv' function is like the `div' function, but the
49591 - arguments are of type `intmax_t' and the result is returned as a
49592 - structure of type `imaxdiv_t'.
49594 - See *Note Integers:: for a description of the `intmax_t' type.
49596 - The `imaxdiv' function was added in ISO C99.
49598 -\x1f
49599 -File: libc.info, Node: Floating Point Numbers, Next: Floating Point Classes, Prev: Integer Division, Up: Arithmetic
49601 -Floating Point Numbers
49602 -======================
49604 - Most computer hardware has support for two different kinds of
49605 -numbers: integers (...-3, -2, -1, 0, 1, 2, 3...) and floating-point
49606 -numbers. Floating-point numbers have three parts: the "mantissa", the
49607 -"exponent", and the "sign bit". The real number represented by a
49608 -floating-point value is given by (s ? -1 : 1) * 2^e * M where s is the
49609 -sign bit, e the exponent, and M the mantissa. *Note Floating Point
49610 -Concepts::, for details. (It is possible to have a different "base"
49611 -for the exponent, but all modern hardware uses 2.)
49613 - Floating-point numbers can represent a finite subset of the real
49614 -numbers. While this subset is large enough for most purposes, it is
49615 -important to remember that the only reals that can be represented
49616 -exactly are rational numbers that have a terminating binary expansion
49617 -shorter than the width of the mantissa. Even simple fractions such as
49618 -1/5 can only be approximated by floating point.
49620 - Mathematical operations and functions frequently need to produce
49621 -values that are not representable. Often these values can be
49622 -approximated closely enough for practical purposes, but sometimes they
49623 -can't. Historically there was no way to tell when the results of a
49624 -calculation were inaccurate. Modern computers implement the IEEE 754
49625 -standard for numerical computations, which defines a framework for
49626 -indicating to the program when the results of calculation are not
49627 -trustworthy. This framework consists of a set of "exceptions" that
49628 -indicate why a result could not be represented, and the special values
49629 -"infinity" and "not a number" (NaN).
49631 -\x1f
49632 -File: libc.info, Node: Floating Point Classes, Next: Floating Point Errors, Prev: Floating Point Numbers, Up: Arithmetic
49634 -Floating-Point Number Classification Functions
49635 -==============================================
49637 - ISO C99 defines macros that let you determine what sort of
49638 -floating-point number a variable holds.
49640 - - Macro: int fpclassify (_float-type_ X)
49641 - This is a generic macro which works on all floating-point types and
49642 - which returns a value of type `int'. The possible values are:
49644 - `FP_NAN'
49645 - The floating-point number X is "Not a Number" (*note Infinity
49646 - and NaN::)
49648 - `FP_INFINITE'
49649 - The value of X is either plus or minus infinity (*note
49650 - Infinity and NaN::)
49652 - `FP_ZERO'
49653 - The value of X is zero. In floating-point formats like
49654 - IEEE 754, where zero can be signed, this value is also
49655 - returned if X is negative zero.
49657 - `FP_SUBNORMAL'
49658 - Numbers whose absolute value is too small to be represented
49659 - in the normal format are represented in an alternate,
49660 - "denormalized" format (*note Floating Point Concepts::).
49661 - This format is less precise but can represent values closer
49662 - to zero. `fpclassify' returns this value for values of X in
49663 - this alternate format.
49665 - `FP_NORMAL'
49666 - This value is returned for all other values of X. It
49667 - indicates that there is nothing special about the number.
49670 - `fpclassify' is most useful if more than one property of a number
49671 -must be tested. There are more specific macros which only test one
49672 -property at a time. Generally these macros execute faster than
49673 -`fpclassify', since there is special hardware support for them. You
49674 -should therefore use the specific macros whenever possible.
49676 - - Macro: int isfinite (_float-type_ X)
49677 - This macro returns a nonzero value if X is finite: not plus or
49678 - minus infinity, and not NaN. It is equivalent to
49680 - (fpclassify (x) != FP_NAN && fpclassify (x) != FP_INFINITE)
49682 - `isfinite' is implemented as a macro which accepts any
49683 - floating-point type.
49685 - - Macro: int isnormal (_float-type_ X)
49686 - This macro returns a nonzero value if X is finite and normalized.
49687 - It is equivalent to
49689 - (fpclassify (x) == FP_NORMAL)
49691 - - Macro: int isnan (_float-type_ X)
49692 - This macro returns a nonzero value if X is NaN. It is equivalent
49693 - to
49695 - (fpclassify (x) == FP_NAN)
49697 - Another set of floating-point classification functions was provided
49698 -by BSD. The GNU C library also supports these functions; however, we
49699 -recommend that you use the ISO C99 macros in new code. Those are
49700 -standard and will be available more widely. Also, since they are
49701 -macros, you do not have to worry about the type of their argument.
49703 - - Function: int isinf (double X)
49704 - - Function: int isinff (float X)
49705 - - Function: int isinfl (long double X)
49706 - This function returns `-1' if X represents negative infinity, `1'
49707 - if X represents positive infinity, and `0' otherwise.
49709 - - Function: int isnan (double X)
49710 - - Function: int isnanf (float X)
49711 - - Function: int isnanl (long double X)
49712 - This function returns a nonzero value if X is a "not a number"
49713 - value, and zero otherwise.
49715 - *Note:* The `isnan' macro defined by ISO C99 overrides the BSD
49716 - function. This is normally not a problem, because the two
49717 - routines behave identically. However, if you really need to get
49718 - the BSD function for some reason, you can write
49720 - (isnan) (x)
49722 - - Function: int finite (double X)
49723 - - Function: int finitef (float X)
49724 - - Function: int finitel (long double X)
49725 - This function returns a nonzero value if X is finite or a "not a
49726 - number" value, and zero otherwise.
49728 - *Portability Note:* The functions listed in this section are BSD
49729 -extensions.
49731 -\x1f
49732 -File: libc.info, Node: Floating Point Errors, Next: Rounding, Prev: Floating Point Classes, Up: Arithmetic
49734 -Errors in Floating-Point Calculations
49735 -=====================================
49737 -* Menu:
49739 -* FP Exceptions:: IEEE 754 math exceptions and how to detect them.
49740 -* Infinity and NaN:: Special values returned by calculations.
49741 -* Status bit operations:: Checking for exceptions after the fact.
49742 -* Math Error Reporting:: How the math functions report errors.
49744 -\x1f
49745 -File: libc.info, Node: FP Exceptions, Next: Infinity and NaN, Up: Floating Point Errors
49747 -FP Exceptions
49748 --------------
49750 - The IEEE 754 standard defines five "exceptions" that can occur
49751 -during a calculation. Each corresponds to a particular sort of error,
49752 -such as overflow.
49754 - When exceptions occur (when exceptions are "raised", in the language
49755 -of the standard), one of two things can happen. By default the
49756 -exception is simply noted in the floating-point "status word", and the
49757 -program continues as if nothing had happened. The operation produces a
49758 -default value, which depends on the exception (see the table below).
49759 -Your program can check the status word to find out which exceptions
49760 -happened.
49762 - Alternatively, you can enable "traps" for exceptions. In that case,
49763 -when an exception is raised, your program will receive the `SIGFPE'
49764 -signal. The default action for this signal is to terminate the
49765 -program. *Note Signal Handling::, for how you can change the effect of
49766 -the signal.
49768 - In the System V math library, the user-defined function `matherr' is
49769 -called when certain exceptions occur inside math library functions.
49770 -However, the Unix98 standard deprecates this interface. We support it
49771 -for historical compatibility, but recommend that you do not use it in
49772 -new programs.
49774 -The exceptions defined in IEEE 754 are:
49776 -`Invalid Operation'
49777 - This exception is raised if the given operands are invalid for the
49778 - operation to be performed. Examples are (see IEEE 754, section 7):
49779 - 1. Addition or subtraction: oo - oo. (But oo + oo = oo).
49781 - 2. Multiplication: 0 * oo.
49783 - 3. Division: 0/0 or oo/oo.
49785 - 4. Remainder: x REM y, where y is zero or x is infinite.
49787 - 5. Square root if the operand is less then zero. More
49788 - generally, any mathematical function evaluated outside its
49789 - domain produces this exception.
49791 - 6. Conversion of a floating-point number to an integer or decimal
49792 - string, when the number cannot be represented in the target
49793 - format (due to overflow, infinity, or NaN).
49795 - 7. Conversion of an unrecognizable input string.
49797 - 8. Comparison via predicates involving < or >, when one or other
49798 - of the operands is NaN. You can prevent this exception by
49799 - using the unordered comparison functions instead; see *Note
49800 - FP Comparison Functions::.
49802 - If the exception does not trap, the result of the operation is NaN.
49804 -`Division by Zero'
49805 - This exception is raised when a finite nonzero number is divided
49806 - by zero. If no trap occurs the result is either +oo or -oo,
49807 - depending on the signs of the operands.
49809 -`Overflow'
49810 - This exception is raised whenever the result cannot be represented
49811 - as a finite value in the precision format of the destination. If
49812 - no trap occurs the result depends on the sign of the intermediate
49813 - result and the current rounding mode (IEEE 754, section 7.3):
49814 - 1. Round to nearest carries all overflows to oo with the sign of
49815 - the intermediate result.
49817 - 2. Round toward 0 carries all overflows to the largest
49818 - representable finite number with the sign of the intermediate
49819 - result.
49821 - 3. Round toward -oo carries positive overflows to the largest
49822 - representable finite number and negative overflows to -oo.
49824 - 4. Round toward oo carries negative overflows to the most
49825 - negative representable finite number and positive overflows
49826 - to oo.
49828 - Whenever the overflow exception is raised, the inexact exception
49829 - is also raised.
49831 -`Underflow'
49832 - The underflow exception is raised when an intermediate result is
49833 - too small to be calculated accurately, or if the operation's
49834 - result rounded to the destination precision is too small to be
49835 - normalized.
49837 - When no trap is installed for the underflow exception, underflow is
49838 - signaled (via the underflow flag) only when both tininess and loss
49839 - of accuracy have been detected. If no trap handler is installed
49840 - the operation continues with an imprecise small value, or zero if
49841 - the destination precision cannot hold the small exact result.
49843 -`Inexact'
49844 - This exception is signalled if a rounded result is not exact (such
49845 - as when calculating the square root of two) or a result overflows
49846 - without an overflow trap.
49848 -\x1f
49849 -File: libc.info, Node: Infinity and NaN, Next: Status bit operations, Prev: FP Exceptions, Up: Floating Point Errors
49851 -Infinity and NaN
49852 -----------------
49854 - IEEE 754 floating point numbers can represent positive or negative
49855 -infinity, and "NaN" (not a number). These three values arise from
49856 -calculations whose result is undefined or cannot be represented
49857 -accurately. You can also deliberately set a floating-point variable to
49858 -any of them, which is sometimes useful. Some examples of calculations
49859 -that produce infinity or NaN:
49861 - 1/0 = oo
49862 - log (0) = -oo
49863 - sqrt (-1) = NaN
49865 - When a calculation produces any of these values, an exception also
49866 -occurs; see *Note FP Exceptions::.
49868 - The basic operations and math functions all accept infinity and NaN
49869 -and produce sensible output. Infinities propagate through calculations
49870 -as one would expect: for example, 2 + oo = oo, 4/oo = 0, atan (oo) =
49871 -pi/2. NaN, on the other hand, infects any calculation that involves
49872 -it. Unless the calculation would produce the same result no matter
49873 -what real value replaced NaN, the result is NaN.
49875 - In comparison operations, positive infinity is larger than all values
49876 -except itself and NaN, and negative infinity is smaller than all values
49877 -except itself and NaN. NaN is "unordered": it is not equal to, greater
49878 -than, or less than anything, _including itself_. `x == x' is false if
49879 -the value of `x' is NaN. You can use this to test whether a value is
49880 -NaN or not, but the recommended way to test for NaN is with the `isnan'
49881 -function (*note Floating Point Classes::). In addition, `<', `>',
49882 -`<=', and `>=' will raise an exception when applied to NaNs.
49884 - `math.h' defines macros that allow you to explicitly set a variable
49885 -to infinity or NaN.
49887 - - Macro: float INFINITY
49888 - An expression representing positive infinity. It is equal to the
49889 - value produced by mathematical operations like `1.0 / 0.0'.
49890 - `-INFINITY' represents negative infinity.
49892 - You can test whether a floating-point value is infinite by
49893 - comparing it to this macro. However, this is not recommended; you
49894 - should use the `isfinite' macro instead. *Note Floating Point
49895 - Classes::.
49897 - This macro was introduced in the ISO C99 standard.
49899 - - Macro: float NAN
49900 - An expression representing a value which is "not a number". This
49901 - macro is a GNU extension, available only on machines that support
49902 - the "not a number" value--that is to say, on all machines that
49903 - support IEEE floating point.
49905 - You can use `#ifdef NAN' to test whether the machine supports NaN.
49906 - (Of course, you must arrange for GNU extensions to be visible,
49907 - such as by defining `_GNU_SOURCE', and then you must include
49908 - `math.h'.)
49910 - IEEE 754 also allows for another unusual value: negative zero. This
49911 -value is produced when you divide a positive number by negative
49912 -infinity, or when a negative result is smaller than the limits of
49913 -representation. Negative zero behaves identically to zero in all
49914 -calculations, unless you explicitly test the sign bit with `signbit' or
49915 -`copysign'.
49917 -\x1f
49918 -File: libc.info, Node: Status bit operations, Next: Math Error Reporting, Prev: Infinity and NaN, Up: Floating Point Errors
49920 -Examining the FPU status word
49921 ------------------------------
49923 - ISO C99 defines functions to query and manipulate the floating-point
49924 -status word. You can use these functions to check for untrapped
49925 -exceptions when it's convenient, rather than worrying about them in the
49926 -middle of a calculation.
49928 - These constants represent the various IEEE 754 exceptions. Not all
49929 -FPUs report all the different exceptions. Each constant is defined if
49930 -and only if the FPU you are compiling for supports that exception, so
49931 -you can test for FPU support with `#ifdef'. They are defined in
49932 -`fenv.h'.
49934 -`FE_INEXACT'
49935 - The inexact exception.
49937 -`FE_DIVBYZERO'
49938 - The divide by zero exception.
49940 -`FE_UNDERFLOW'
49941 - The underflow exception.
49943 -`FE_OVERFLOW'
49944 - The overflow exception.
49946 -`FE_INVALID'
49947 - The invalid exception.
49949 - The macro `FE_ALL_EXCEPT' is the bitwise OR of all exception macros
49950 -which are supported by the FP implementation.
49952 - These functions allow you to clear exception flags, test for
49953 -exceptions, and save and restore the set of exceptions flagged.
49955 - - Function: int feclearexcept (int EXCEPTS)
49956 - This function clears all of the supported exception flags
49957 - indicated by EXCEPTS.
49959 - The function returns zero in case the operation was successful, a
49960 - non-zero value otherwise.
49962 - - Function: int feraiseexcept (int EXCEPTS)
49963 - This function raises the supported exceptions indicated by
49964 - EXCEPTS. If more than one exception bit in EXCEPTS is set the
49965 - order in which the exceptions are raised is undefined except that
49966 - overflow (`FE_OVERFLOW') or underflow (`FE_UNDERFLOW') are raised
49967 - before inexact (`FE_INEXACT'). Whether for overflow or underflow
49968 - the inexact exception is also raised is also implementation
49969 - dependent.
49971 - The function returns zero in case the operation was successful, a
49972 - non-zero value otherwise.
49974 - - Function: int fetestexcept (int EXCEPTS)
49975 - Test whether the exception flags indicated by the parameter EXCEPT
49976 - are currently set. If any of them are, a nonzero value is returned
49977 - which specifies which exceptions are set. Otherwise the result is
49978 - zero.
49980 - To understand these functions, imagine that the status word is an
49981 -integer variable named STATUS. `feclearexcept' is then equivalent to
49982 -`status &= ~excepts' and `fetestexcept' is equivalent to `(status &
49983 -excepts)'. The actual implementation may be very different, of course.
49985 - Exception flags are only cleared when the program explicitly
49986 -requests it, by calling `feclearexcept'. If you want to check for
49987 -exceptions from a set of calculations, you should clear all the flags
49988 -first. Here is a simple example of the way to use `fetestexcept':
49991 - double f;
49992 - int raised;
49993 - feclearexcept (FE_ALL_EXCEPT);
49994 - f = compute ();
49995 - raised = fetestexcept (FE_OVERFLOW | FE_INVALID);
49996 - if (raised & FE_OVERFLOW) { /* ... */ }
49997 - if (raised & FE_INVALID) { /* ... */ }
49998 - /* ... */
50001 - You cannot explicitly set bits in the status word. You can, however,
50002 -save the entire status word and restore it later. This is done with the
50003 -following functions:
50005 - - Function: int fegetexceptflag (fexcept_t *FLAGP, int EXCEPTS)
50006 - This function stores in the variable pointed to by FLAGP an
50007 - implementation-defined value representing the current setting of
50008 - the exception flags indicated by EXCEPTS.
50010 - The function returns zero in case the operation was successful, a
50011 - non-zero value otherwise.
50013 - - Function: int fesetexceptflag (const fexcept_t *FLAGP, int
50014 - EXCEPTS) This function restores the flags for the exceptions
50015 - indicated by EXCEPTS to the values stored in the variable pointed
50016 - to by FLAGP.
50018 - The function returns zero in case the operation was successful, a
50019 - non-zero value otherwise.
50021 - Note that the value stored in `fexcept_t' bears no resemblance to
50022 -the bit mask returned by `fetestexcept'. The type may not even be an
50023 -integer. Do not attempt to modify an `fexcept_t' variable.
50025 diff -u -udbrN glibc-2.3.2/manual/libc.info-34 glibc-2.3.2-200304020432/manual/libc.info-34
50026 --- glibc-2.3.2/manual/libc.info-34 Sat Mar 1 02:39:41 2003
50027 +++ glibc-2.3.2-200304020432/manual/libc.info-34 Thu Jan 1 01:00:00 1970
50028 @@ -1,1120 +0,0 @@
50029 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
50031 -INFO-DIR-SECTION GNU libraries
50032 -START-INFO-DIR-ENTRY
50033 -* Libc: (libc). C library.
50034 -END-INFO-DIR-ENTRY
50036 - This file documents the GNU C library.
50038 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
50039 -Reference Manual', for Version 2.3.x.
50041 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
50042 -Free Software Foundation, Inc.
50044 - Permission is granted to copy, distribute and/or modify this document
50045 -under the terms of the GNU Free Documentation License, Version 1.1 or
50046 -any later version published by the Free Software Foundation; with the
50047 -Invariant Sections being "Free Software Needs Free Documentation" and
50048 -"GNU Lesser General Public License", the Front-Cover texts being (a)
50049 -(see below), and with the Back-Cover Texts being (b) (see below). A
50050 -copy of the license is included in the section entitled "GNU Free
50051 -Documentation License".
50053 - (a) The FSF's Front-Cover Text is:
50055 - A GNU Manual
50057 - (b) The FSF's Back-Cover Text is:
50059 - You have freedom to copy and modify this GNU Manual, like GNU
50060 -software. Copies published by the Free Software Foundation raise
50061 -funds for GNU development.
50063 -\x1f
50064 -File: libc.info, Node: Math Error Reporting, Prev: Status bit operations, Up: Floating Point Errors
50066 -Error Reporting by Mathematical Functions
50067 ------------------------------------------
50069 - Many of the math functions are defined only over a subset of the
50070 -real or complex numbers. Even if they are mathematically defined,
50071 -their result may be larger or smaller than the range representable by
50072 -their return type. These are known as "domain errors", "overflows", and
50073 -"underflows", respectively. Math functions do several things when one
50074 -of these errors occurs. In this manual we will refer to the complete
50075 -response as "signalling" a domain error, overflow, or underflow.
50077 - When a math function suffers a domain error, it raises the invalid
50078 -exception and returns NaN. It also sets ERRNO to `EDOM'; this is for
50079 -compatibility with old systems that do not support IEEE 754 exception
50080 -handling. Likewise, when overflow occurs, math functions raise the
50081 -overflow exception and return oo or -oo as appropriate. They also set
50082 -ERRNO to `ERANGE'. When underflow occurs, the underflow exception is
50083 -raised, and zero (appropriately signed) is returned. ERRNO may be set
50084 -to `ERANGE', but this is not guaranteed.
50086 - Some of the math functions are defined mathematically to result in a
50087 -complex value over parts of their domains. The most familiar example of
50088 -this is taking the square root of a negative number. The complex math
50089 -functions, such as `csqrt', will return the appropriate complex value
50090 -in this case. The real-valued functions, such as `sqrt', will signal a
50091 -domain error.
50093 - Some older hardware does not support infinities. On that hardware,
50094 -overflows instead return a particular very large number (usually the
50095 -largest representable number). `math.h' defines macros you can use to
50096 -test for overflow on both old and new hardware.
50098 - - Macro: double HUGE_VAL
50099 - - Macro: float HUGE_VALF
50100 - - Macro: long double HUGE_VALL
50101 - An expression representing a particular very large number. On
50102 - machines that use IEEE 754 floating point format, `HUGE_VAL' is
50103 - infinity. On other machines, it's typically the largest positive
50104 - number that can be represented.
50106 - Mathematical functions return the appropriately typed version of
50107 - `HUGE_VAL' or `-HUGE_VAL' when the result is too large to be
50108 - represented.
50110 -\x1f
50111 -File: libc.info, Node: Rounding, Next: Control Functions, Prev: Floating Point Errors, Up: Arithmetic
50113 -Rounding Modes
50114 -==============
50116 - Floating-point calculations are carried out internally with extra
50117 -precision, and then rounded to fit into the destination type. This
50118 -ensures that results are as precise as the input data. IEEE 754
50119 -defines four possible rounding modes:
50121 -Round to nearest.
50122 - This is the default mode. It should be used unless there is a
50123 - specific need for one of the others. In this mode results are
50124 - rounded to the nearest representable value. If the result is
50125 - midway between two representable values, the even representable is
50126 - chosen. "Even" here means the lowest-order bit is zero. This
50127 - rounding mode prevents statistical bias and guarantees numeric
50128 - stability: round-off errors in a lengthy calculation will remain
50129 - smaller than half of `FLT_EPSILON'.
50131 -Round toward plus Infinity.
50132 - All results are rounded to the smallest representable value which
50133 - is greater than the result.
50135 -Round toward minus Infinity.
50136 - All results are rounded to the largest representable value which
50137 - is less than the result.
50139 -Round toward zero.
50140 - All results are rounded to the largest representable value whose
50141 - magnitude is less than that of the result. In other words, if the
50142 - result is negative it is rounded up; if it is positive, it is
50143 - rounded down.
50145 -`fenv.h' defines constants which you can use to refer to the various
50146 -rounding modes. Each one will be defined if and only if the FPU
50147 -supports the corresponding rounding mode.
50149 -`FE_TONEAREST'
50150 - Round to nearest.
50152 -`FE_UPWARD'
50153 - Round toward +oo.
50155 -`FE_DOWNWARD'
50156 - Round toward -oo.
50158 -`FE_TOWARDZERO'
50159 - Round toward zero.
50161 - Underflow is an unusual case. Normally, IEEE 754 floating point
50162 -numbers are always normalized (*note Floating Point Concepts::).
50163 -Numbers smaller than 2^r (where r is the minimum exponent,
50164 -`FLT_MIN_RADIX-1' for FLOAT) cannot be represented as normalized
50165 -numbers. Rounding all such numbers to zero or 2^r would cause some
50166 -algorithms to fail at 0. Therefore, they are left in denormalized
50167 -form. That produces loss of precision, since some bits of the mantissa
50168 -are stolen to indicate the decimal point.
50170 - If a result is too small to be represented as a denormalized number,
50171 -it is rounded to zero. However, the sign of the result is preserved; if
50172 -the calculation was negative, the result is "negative zero". Negative
50173 -zero can also result from some operations on infinity, such as 4/-oo.
50174 -Negative zero behaves identically to zero except when the `copysign' or
50175 -`signbit' functions are used to check the sign bit directly.
50177 - At any time one of the above four rounding modes is selected. You
50178 -can find out which one with this function:
50180 - - Function: int fegetround (void)
50181 - Returns the currently selected rounding mode, represented by one
50182 - of the values of the defined rounding mode macros.
50184 -To change the rounding mode, use this function:
50186 - - Function: int fesetround (int ROUND)
50187 - Changes the currently selected rounding mode to ROUND. If ROUND
50188 - does not correspond to one of the supported rounding modes nothing
50189 - is changed. `fesetround' returns zero if it changed the rounding
50190 - mode, a nonzero value if the mode is not supported.
50192 - You should avoid changing the rounding mode if possible. It can be
50193 -an expensive operation; also, some hardware requires you to compile your
50194 -program differently for it to work. The resulting code may run slower.
50195 -See your compiler documentation for details.
50197 -\x1f
50198 -File: libc.info, Node: Control Functions, Next: Arithmetic Functions, Prev: Rounding, Up: Arithmetic
50200 -Floating-Point Control Functions
50201 -================================
50203 - IEEE 754 floating-point implementations allow the programmer to
50204 -decide whether traps will occur for each of the exceptions, by setting
50205 -bits in the "control word". In C, traps result in the program
50206 -receiving the `SIGFPE' signal; see *Note Signal Handling::.
50208 - *Note:* IEEE 754 says that trap handlers are given details of the
50209 -exceptional situation, and can set the result value. C signals do not
50210 -provide any mechanism to pass this information back and forth.
50211 -Trapping exceptions in C is therefore not very useful.
50213 - It is sometimes necessary to save the state of the floating-point
50214 -unit while you perform some calculation. The library provides functions
50215 -which save and restore the exception flags, the set of exceptions that
50216 -generate traps, and the rounding mode. This information is known as the
50217 -"floating-point environment".
50219 - The functions to save and restore the floating-point environment all
50220 -use a variable of type `fenv_t' to store information. This type is
50221 -defined in `fenv.h'. Its size and contents are implementation-defined.
50222 -You should not attempt to manipulate a variable of this type directly.
50224 - To save the state of the FPU, use one of these functions:
50226 - - Function: int fegetenv (fenv_t *ENVP)
50227 - Store the floating-point environment in the variable pointed to by
50228 - ENVP.
50230 - The function returns zero in case the operation was successful, a
50231 - non-zero value otherwise.
50233 - - Function: int feholdexcept (fenv_t *ENVP)
50234 - Store the current floating-point environment in the object pointed
50235 - to by ENVP. Then clear all exception flags, and set the FPU to
50236 - trap no exceptions. Not all FPUs support trapping no exceptions;
50237 - if `feholdexcept' cannot set this mode, it returns nonzero value.
50238 - If it succeeds, it returns zero.
50240 - The functions which restore the floating-point environment can take
50241 -these kinds of arguments:
50243 - * Pointers to `fenv_t' objects, which were initialized previously by
50244 - a call to `fegetenv' or `feholdexcept'.
50246 - * The special macro `FE_DFL_ENV' which represents the floating-point
50247 - environment as it was available at program start.
50249 - * Implementation defined macros with names starting with `FE_' and
50250 - having type `fenv_t *'.
50252 - If possible, the GNU C Library defines a macro `FE_NOMASK_ENV'
50253 - which represents an environment where every exception raised
50254 - causes a trap to occur. You can test for this macro using
50255 - `#ifdef'. It is only defined if `_GNU_SOURCE' is defined.
50257 - Some platforms might define other predefined environments.
50259 -To set the floating-point environment, you can use either of these
50260 -functions:
50262 - - Function: int fesetenv (const fenv_t *ENVP)
50263 - Set the floating-point environment to that described by ENVP.
50265 - The function returns zero in case the operation was successful, a
50266 - non-zero value otherwise.
50268 - - Function: int feupdateenv (const fenv_t *ENVP)
50269 - Like `fesetenv', this function sets the floating-point environment
50270 - to that described by ENVP. However, if any exceptions were
50271 - flagged in the status word before `feupdateenv' was called, they
50272 - remain flagged after the call. In other words, after `feupdateenv'
50273 - is called, the status word is the bitwise OR of the previous
50274 - status word and the one saved in ENVP.
50276 - The function returns zero in case the operation was successful, a
50277 - non-zero value otherwise.
50279 -To control for individual exceptions if raising them causes a trap to
50280 -occur, you can use the following two functions.
50282 - *Portability Note:* These functions are all GNU extensions.
50284 - - Function: int feenableexcept (int EXCEPTS)
50285 - This functions enables traps for each of the exceptions as
50286 - indicated by the parameter EXCEPT. The individual excepetions are
50287 - described in *Note Status bit operations::. Only the specified
50288 - exceptions are enabled, the status of the other exceptions is not
50289 - changed.
50291 - The function returns the previous enabled exceptions in case the
50292 - operation was successful, `-1' otherwise.
50294 - - Function: int fedisableexcept (int EXCEPTS)
50295 - This functions disables traps for each of the exceptions as
50296 - indicated by the parameter EXCEPT. The individual excepetions are
50297 - described in *Note Status bit operations::. Only the specified
50298 - exceptions are disabled, the status of the other exceptions is not
50299 - changed.
50301 - The function returns the previous enabled exceptions in case the
50302 - operation was successful, `-1' otherwise.
50304 - - Function: int fegetexcept (int EXCEPTS)
50305 - The function returns a bitmask of all currently enabled
50306 - exceptions. It returns `-1' in case of failure.
50308 -\x1f
50309 -File: libc.info, Node: Arithmetic Functions, Next: Complex Numbers, Prev: Control Functions, Up: Arithmetic
50311 -Arithmetic Functions
50312 -====================
50314 - The C library provides functions to do basic operations on
50315 -floating-point numbers. These include absolute value, maximum and
50316 -minimum, normalization, bit twiddling, rounding, and a few others.
50318 -* Menu:
50320 -* Absolute Value:: Absolute values of integers and floats.
50321 -* Normalization Functions:: Extracting exponents and putting them back.
50322 -* Rounding Functions:: Rounding floats to integers.
50323 -* Remainder Functions:: Remainders on division, precisely defined.
50324 -* FP Bit Twiddling:: Sign bit adjustment. Adding epsilon.
50325 -* FP Comparison Functions:: Comparisons without risk of exceptions.
50326 -* Misc FP Arithmetic:: Max, min, positive difference, multiply-add.
50328 -\x1f
50329 -File: libc.info, Node: Absolute Value, Next: Normalization Functions, Up: Arithmetic Functions
50331 -Absolute Value
50332 ---------------
50334 - These functions are provided for obtaining the "absolute value" (or
50335 -"magnitude") of a number. The absolute value of a real number X is X
50336 -if X is positive, -X if X is negative. For a complex number Z, whose
50337 -real part is X and whose imaginary part is Y, the absolute value is
50338 -`sqrt (X*X + Y*Y)'.
50340 - Prototypes for `abs', `labs' and `llabs' are in `stdlib.h';
50341 -`imaxabs' is declared in `inttypes.h'; `fabs', `fabsf' and `fabsl' are
50342 -declared in `math.h'. `cabs', `cabsf' and `cabsl' are declared in
50343 -`complex.h'.
50345 - - Function: int abs (int NUMBER)
50346 - - Function: long int labs (long int NUMBER)
50347 - - Function: long long int llabs (long long int NUMBER)
50348 - - Function: intmax_t imaxabs (intmax_t NUMBER)
50349 - These functions return the absolute value of NUMBER.
50351 - Most computers use a two's complement integer representation, in
50352 - which the absolute value of `INT_MIN' (the smallest possible `int')
50353 - cannot be represented; thus, `abs (INT_MIN)' is not defined.
50355 - `llabs' and `imaxdiv' are new to ISO C99.
50357 - See *Note Integers:: for a description of the `intmax_t' type.
50360 - - Function: double fabs (double NUMBER)
50361 - - Function: float fabsf (float NUMBER)
50362 - - Function: long double fabsl (long double NUMBER)
50363 - This function returns the absolute value of the floating-point
50364 - number NUMBER.
50366 - - Function: double cabs (complex double Z)
50367 - - Function: float cabsf (complex float Z)
50368 - - Function: long double cabsl (complex long double Z)
50369 - These functions return the absolute value of the complex number Z
50370 - (*note Complex Numbers::). The absolute value of a complex number
50371 - is:
50373 - sqrt (creal (Z) * creal (Z) + cimag (Z) * cimag (Z))
50375 - This function should always be used instead of the direct formula
50376 - because it takes special care to avoid losing precision. It may
50377 - also take advantage of hardware support for this operation. See
50378 - `hypot' in *Note Exponents and Logarithms::.
50380 -\x1f
50381 -File: libc.info, Node: Normalization Functions, Next: Rounding Functions, Prev: Absolute Value, Up: Arithmetic Functions
50383 -Normalization Functions
50384 ------------------------
50386 - The functions described in this section are primarily provided as a
50387 -way to efficiently perform certain low-level manipulations on floating
50388 -point numbers that are represented internally using a binary radix; see
50389 -*Note Floating Point Concepts::. These functions are required to have
50390 -equivalent behavior even if the representation does not use a radix of
50391 -2, but of course they are unlikely to be particularly efficient in
50392 -those cases.
50394 - All these functions are declared in `math.h'.
50396 - - Function: double frexp (double VALUE, int *EXPONENT)
50397 - - Function: float frexpf (float VALUE, int *EXPONENT)
50398 - - Function: long double frexpl (long double VALUE, int *EXPONENT)
50399 - These functions are used to split the number VALUE into a
50400 - normalized fraction and an exponent.
50402 - If the argument VALUE is not zero, the return value is VALUE times
50403 - a power of two, and is always in the range 1/2 (inclusive) to 1
50404 - (exclusive). The corresponding exponent is stored in `*EXPONENT';
50405 - the return value multiplied by 2 raised to this exponent equals
50406 - the original number VALUE.
50408 - For example, `frexp (12.8, &exponent)' returns `0.8' and stores
50409 - `4' in `exponent'.
50411 - If VALUE is zero, then the return value is zero and zero is stored
50412 - in `*EXPONENT'.
50414 - - Function: double ldexp (double VALUE, int EXPONENT)
50415 - - Function: float ldexpf (float VALUE, int EXPONENT)
50416 - - Function: long double ldexpl (long double VALUE, int EXPONENT)
50417 - These functions return the result of multiplying the floating-point
50418 - number VALUE by 2 raised to the power EXPONENT. (It can be used
50419 - to reassemble floating-point numbers that were taken apart by
50420 - `frexp'.)
50422 - For example, `ldexp (0.8, 4)' returns `12.8'.
50424 - The following functions, which come from BSD, provide facilities
50425 -equivalent to those of `ldexp' and `frexp'. See also the ISO C
50426 -function `logb' which originally also appeared in BSD.
50428 - - Function: double scalb (double VALUE, int EXPONENT)
50429 - - Function: float scalbf (float VALUE, int EXPONENT)
50430 - - Function: long double scalbl (long double VALUE, int EXPONENT)
50431 - The `scalb' function is the BSD name for `ldexp'.
50433 - - Function: long long int scalbn (double X, int n)
50434 - - Function: long long int scalbnf (float X, int n)
50435 - - Function: long long int scalbnl (long double X, int n)
50436 - `scalbn' is identical to `scalb', except that the exponent N is an
50437 - `int' instead of a floating-point number.
50439 - - Function: long long int scalbln (double X, long int n)
50440 - - Function: long long int scalblnf (float X, long int n)
50441 - - Function: long long int scalblnl (long double X, long int n)
50442 - `scalbln' is identical to `scalb', except that the exponent N is a
50443 - `long int' instead of a floating-point number.
50445 - - Function: long long int significand (double X)
50446 - - Function: long long int significandf (float X)
50447 - - Function: long long int significandl (long double X)
50448 - `significand' returns the mantissa of X scaled to the range [1, 2).
50449 - It is equivalent to `scalb (X, (double) -ilogb (X))'.
50451 - This function exists mainly for use in certain standardized tests
50452 - of IEEE 754 conformance.
50454 -\x1f
50455 -File: libc.info, Node: Rounding Functions, Next: Remainder Functions, Prev: Normalization Functions, Up: Arithmetic Functions
50457 -Rounding Functions
50458 -------------------
50460 - The functions listed here perform operations such as rounding and
50461 -truncation of floating-point values. Some of these functions convert
50462 -floating point numbers to integer values. They are all declared in
50463 -`math.h'.
50465 - You can also convert floating-point numbers to integers simply by
50466 -casting them to `int'. This discards the fractional part, effectively
50467 -rounding towards zero. However, this only works if the result can
50468 -actually be represented as an `int'--for very large numbers, this is
50469 -impossible. The functions listed here return the result as a `double'
50470 -instead to get around this problem.
50472 - - Function: double ceil (double X)
50473 - - Function: float ceilf (float X)
50474 - - Function: long double ceill (long double X)
50475 - These functions round X upwards to the nearest integer, returning
50476 - that value as a `double'. Thus, `ceil (1.5)' is `2.0'.
50478 - - Function: double floor (double X)
50479 - - Function: float floorf (float X)
50480 - - Function: long double floorl (long double X)
50481 - These functions round X downwards to the nearest integer,
50482 - returning that value as a `double'. Thus, `floor (1.5)' is `1.0'
50483 - and `floor (-1.5)' is `-2.0'.
50485 - - Function: double trunc (double X)
50486 - - Function: float truncf (float X)
50487 - - Function: long double truncl (long double X)
50488 - The `trunc' functions round X towards zero to the nearest integer
50489 - (returned in floating-point format). Thus, `trunc (1.5)' is `1.0'
50490 - and `trunc (-1.5)' is `-1.0'.
50492 - - Function: double rint (double X)
50493 - - Function: float rintf (float X)
50494 - - Function: long double rintl (long double X)
50495 - These functions round X to an integer value according to the
50496 - current rounding mode. *Note Floating Point Parameters::, for
50497 - information about the various rounding modes. The default
50498 - rounding mode is to round to the nearest integer; some machines
50499 - support other modes, but round-to-nearest is always used unless
50500 - you explicitly select another.
50502 - If X was not initially an integer, these functions raise the
50503 - inexact exception.
50505 - - Function: double nearbyint (double X)
50506 - - Function: float nearbyintf (float X)
50507 - - Function: long double nearbyintl (long double X)
50508 - These functions return the same value as the `rint' functions, but
50509 - do not raise the inexact exception if X is not an integer.
50511 - - Function: double round (double X)
50512 - - Function: float roundf (float X)
50513 - - Function: long double roundl (long double X)
50514 - These functions are similar to `rint', but they round halfway
50515 - cases away from zero instead of to the nearest even integer.
50517 - - Function: long int lrint (double X)
50518 - - Function: long int lrintf (float X)
50519 - - Function: long int lrintl (long double X)
50520 - These functions are just like `rint', but they return a `long int'
50521 - instead of a floating-point number.
50523 - - Function: long long int llrint (double X)
50524 - - Function: long long int llrintf (float X)
50525 - - Function: long long int llrintl (long double X)
50526 - These functions are just like `rint', but they return a `long long
50527 - int' instead of a floating-point number.
50529 - - Function: long int lround (double X)
50530 - - Function: long int lroundf (float X)
50531 - - Function: long int lroundl (long double X)
50532 - These functions are just like `round', but they return a `long
50533 - int' instead of a floating-point number.
50535 - - Function: long long int llround (double X)
50536 - - Function: long long int llroundf (float X)
50537 - - Function: long long int llroundl (long double X)
50538 - These functions are just like `round', but they return a `long
50539 - long int' instead of a floating-point number.
50541 - - Function: double modf (double VALUE, double *INTEGER-PART)
50542 - - Function: float modff (float VALUE, float *INTEGER-PART)
50543 - - Function: long double modfl (long double VALUE, long double
50544 - *INTEGER-PART)
50545 - These functions break the argument VALUE into an integer part and a
50546 - fractional part (between `-1' and `1', exclusive). Their sum
50547 - equals VALUE. Each of the parts has the same sign as VALUE, and
50548 - the integer part is always rounded toward zero.
50550 - `modf' stores the integer part in `*INTEGER-PART', and returns the
50551 - fractional part. For example, `modf (2.5, &intpart)' returns
50552 - `0.5' and stores `2.0' into `intpart'.
50554 -\x1f
50555 -File: libc.info, Node: Remainder Functions, Next: FP Bit Twiddling, Prev: Rounding Functions, Up: Arithmetic Functions
50557 -Remainder Functions
50558 --------------------
50560 - The functions in this section compute the remainder on division of
50561 -two floating-point numbers. Each is a little different; pick the one
50562 -that suits your problem.
50564 - - Function: double fmod (double NUMERATOR, double DENOMINATOR)
50565 - - Function: float fmodf (float NUMERATOR, float DENOMINATOR)
50566 - - Function: long double fmodl (long double NUMERATOR, long double
50567 - DENOMINATOR)
50568 - These functions compute the remainder from the division of
50569 - NUMERATOR by DENOMINATOR. Specifically, the return value is
50570 - `NUMERATOR - N * DENOMINATOR', where N is the quotient of
50571 - NUMERATOR divided by DENOMINATOR, rounded towards zero to an
50572 - integer. Thus, `fmod (6.5, 2.3)' returns `1.9', which is `6.5'
50573 - minus `4.6'.
50575 - The result has the same sign as the NUMERATOR and has magnitude
50576 - less than the magnitude of the DENOMINATOR.
50578 - If DENOMINATOR is zero, `fmod' signals a domain error.
50580 - - Function: double drem (double NUMERATOR, double DENOMINATOR)
50581 - - Function: float dremf (float NUMERATOR, float DENOMINATOR)
50582 - - Function: long double dreml (long double NUMERATOR, long double
50583 - DENOMINATOR)
50584 - These functions are like `fmod' except that they rounds the
50585 - internal quotient N to the nearest integer instead of towards zero
50586 - to an integer. For example, `drem (6.5, 2.3)' returns `-0.4',
50587 - which is `6.5' minus `6.9'.
50589 - The absolute value of the result is less than or equal to half the
50590 - absolute value of the DENOMINATOR. The difference between `fmod
50591 - (NUMERATOR, DENOMINATOR)' and `drem (NUMERATOR, DENOMINATOR)' is
50592 - always either DENOMINATOR, minus DENOMINATOR, or zero.
50594 - If DENOMINATOR is zero, `drem' signals a domain error.
50596 - - Function: double remainder (double NUMERATOR, double DENOMINATOR)
50597 - - Function: float remainderf (float NUMERATOR, float DENOMINATOR)
50598 - - Function: long double remainderl (long double NUMERATOR, long double
50599 - DENOMINATOR)
50600 - This function is another name for `drem'.
50602 -\x1f
50603 -File: libc.info, Node: FP Bit Twiddling, Next: FP Comparison Functions, Prev: Remainder Functions, Up: Arithmetic Functions
50605 -Setting and modifying single bits of FP values
50606 -----------------------------------------------
50608 - There are some operations that are too complicated or expensive to
50609 -perform by hand on floating-point numbers. ISO C99 defines functions
50610 -to do these operations, which mostly involve changing single bits.
50612 - - Function: double copysign (double X, double Y)
50613 - - Function: float copysignf (float X, float Y)
50614 - - Function: long double copysignl (long double X, long double Y)
50615 - These functions return X but with the sign of Y. They work even
50616 - if X or Y are NaN or zero. Both of these can carry a sign
50617 - (although not all implementations support it) and this is one of
50618 - the few operations that can tell the difference.
50620 - `copysign' never raises an exception.
50622 - This function is defined in IEC 559 (and the appendix with
50623 - recommended functions in IEEE 754/IEEE 854).
50625 - - Function: int signbit (_float-type_ X)
50626 - `signbit' is a generic macro which can work on all floating-point
50627 - types. It returns a nonzero value if the value of X has its sign
50628 - bit set.
50630 - This is not the same as `x < 0.0', because IEEE 754 floating point
50631 - allows zero to be signed. The comparison `-0.0 < 0.0' is false,
50632 - but `signbit (-0.0)' will return a nonzero value.
50634 - - Function: double nextafter (double X, double Y)
50635 - - Function: float nextafterf (float X, float Y)
50636 - - Function: long double nextafterl (long double X, long double Y)
50637 - The `nextafter' function returns the next representable neighbor of
50638 - X in the direction towards Y. The size of the step between X and
50639 - the result depends on the type of the result. If X = Y the
50640 - function simply returns Y. If either value is `NaN', `NaN' is
50641 - returned. Otherwise a value corresponding to the value of the
50642 - least significant bit in the mantissa is added or subtracted,
50643 - depending on the direction. `nextafter' will signal overflow or
50644 - underflow if the result goes outside of the range of normalized
50645 - numbers.
50647 - This function is defined in IEC 559 (and the appendix with
50648 - recommended functions in IEEE 754/IEEE 854).
50650 - - Function: double nexttoward (double X, long double Y)
50651 - - Function: float nexttowardf (float X, long double Y)
50652 - - Function: long double nexttowardl (long double X, long double Y)
50653 - These functions are identical to the corresponding versions of
50654 - `nextafter' except that their second argument is a `long double'.
50656 - - Function: double nan (const char *TAGP)
50657 - - Function: float nanf (const char *TAGP)
50658 - - Function: long double nanl (const char *TAGP)
50659 - The `nan' function returns a representation of NaN, provided that
50660 - NaN is supported by the target platform. `nan
50661 - ("N-CHAR-SEQUENCE")' is equivalent to `strtod
50662 - ("NAN(N-CHAR-SEQUENCE)")'.
50664 - The argument TAGP is used in an unspecified manner. On IEEE 754
50665 - systems, there are many representations of NaN, and TAGP selects
50666 - one. On other systems it may do nothing.
50668 -\x1f
50669 -File: libc.info, Node: FP Comparison Functions, Next: Misc FP Arithmetic, Prev: FP Bit Twiddling, Up: Arithmetic Functions
50671 -Floating-Point Comparison Functions
50672 ------------------------------------
50674 - The standard C comparison operators provoke exceptions when one or
50675 -other of the operands is NaN. For example,
50677 - int v = a < 1.0;
50679 -will raise an exception if A is NaN. (This does _not_ happen with `=='
50680 -and `!='; those merely return false and true, respectively, when NaN is
50681 -examined.) Frequently this exception is undesirable. ISO C99
50682 -therefore defines comparison functions that do not raise exceptions
50683 -when NaN is examined. All of the functions are implemented as macros
50684 -which allow their arguments to be of any floating-point type. The
50685 -macros are guaranteed to evaluate their arguments only once.
50687 - - Macro: int isgreater (_real-floating_ X, _real-floating_ Y)
50688 - This macro determines whether the argument X is greater than Y.
50689 - It is equivalent to `(X) > (Y)', but no exception is raised if X
50690 - or Y are NaN.
50692 - - Macro: int isgreaterequal (_real-floating_ X, _real-floating_ Y)
50693 - This macro determines whether the argument X is greater than or
50694 - equal to Y. It is equivalent to `(X) >= (Y)', but no exception is
50695 - raised if X or Y are NaN.
50697 - - Macro: int isless (_real-floating_ X, _real-floating_ Y)
50698 - This macro determines whether the argument X is less than Y. It
50699 - is equivalent to `(X) < (Y)', but no exception is raised if X or Y
50700 - are NaN.
50702 - - Macro: int islessequal (_real-floating_ X, _real-floating_ Y)
50703 - This macro determines whether the argument X is less than or equal
50704 - to Y. It is equivalent to `(X) <= (Y)', but no exception is
50705 - raised if X or Y are NaN.
50707 - - Macro: int islessgreater (_real-floating_ X, _real-floating_ Y)
50708 - This macro determines whether the argument X is less or greater
50709 - than Y. It is equivalent to `(X) < (Y) || (X) > (Y)' (although it
50710 - only evaluates X and Y once), but no exception is raised if X or Y
50711 - are NaN.
50713 - This macro is not equivalent to `X != Y', because that expression
50714 - is true if X or Y are NaN.
50716 - - Macro: int isunordered (_real-floating_ X, _real-floating_ Y)
50717 - This macro determines whether its arguments are unordered. In
50718 - other words, it is true if X or Y are NaN, and false otherwise.
50720 - Not all machines provide hardware support for these operations. On
50721 -machines that don't, the macros can be very slow. Therefore, you should
50722 -not use these functions when NaN is not a concern.
50724 - *Note:* There are no macros `isequal' or `isunequal'. They are
50725 -unnecessary, because the `==' and `!=' operators do _not_ throw an
50726 -exception if one or both of the operands are NaN.
50728 -\x1f
50729 -File: libc.info, Node: Misc FP Arithmetic, Prev: FP Comparison Functions, Up: Arithmetic Functions
50731 -Miscellaneous FP arithmetic functions
50732 --------------------------------------
50734 - The functions in this section perform miscellaneous but common
50735 -operations that are awkward to express with C operators. On some
50736 -processors these functions can use special machine instructions to
50737 -perform these operations faster than the equivalent C code.
50739 - - Function: double fmin (double X, double Y)
50740 - - Function: float fminf (float X, float Y)
50741 - - Function: long double fminl (long double X, long double Y)
50742 - The `fmin' function returns the lesser of the two values X and Y.
50743 - It is similar to the expression
50744 - ((x) < (y) ? (x) : (y))
50745 - except that X and Y are only evaluated once.
50747 - If an argument is NaN, the other argument is returned. If both
50748 - arguments are NaN, NaN is returned.
50750 - - Function: double fmax (double X, double Y)
50751 - - Function: float fmaxf (float X, float Y)
50752 - - Function: long double fmaxl (long double X, long double Y)
50753 - The `fmax' function returns the greater of the two values X and Y.
50755 - If an argument is NaN, the other argument is returned. If both
50756 - arguments are NaN, NaN is returned.
50758 - - Function: double fdim (double X, double Y)
50759 - - Function: float fdimf (float X, float Y)
50760 - - Function: long double fdiml (long double X, long double Y)
50761 - The `fdim' function returns the positive difference between X and
50762 - Y. The positive difference is X - Y if X is greater than Y, and 0
50763 - otherwise.
50765 - If X, Y, or both are NaN, NaN is returned.
50767 - - Function: double fma (double X, double Y, double Z)
50768 - - Function: float fmaf (float X, float Y, float Z)
50769 - - Function: long double fmal (long double X, long double Y, long
50770 - double Z)
50771 - The `fma' function performs floating-point multiply-add. This is
50772 - the operation (X * Y) + Z, but the intermediate result is not
50773 - rounded to the destination type. This can sometimes improve the
50774 - precision of a calculation.
50776 - This function was introduced because some processors have a special
50777 - instruction to perform multiply-add. The C compiler cannot use it
50778 - directly, because the expression `x*y + z' is defined to round the
50779 - intermediate result. `fma' lets you choose when you want to round
50780 - only once.
50782 - On processors which do not implement multiply-add in hardware,
50783 - `fma' can be very slow since it must avoid intermediate rounding.
50784 - `math.h' defines the symbols `FP_FAST_FMA', `FP_FAST_FMAF', and
50785 - `FP_FAST_FMAL' when the corresponding version of `fma' is no
50786 - slower than the expression `x*y + z'. In the GNU C library, this
50787 - always means the operation is implemented in hardware.
50789 -\x1f
50790 -File: libc.info, Node: Complex Numbers, Next: Operations on Complex, Prev: Arithmetic Functions, Up: Arithmetic
50792 -Complex Numbers
50793 -===============
50795 - ISO C99 introduces support for complex numbers in C. This is done
50796 -with a new type qualifier, `complex'. It is a keyword if and only if
50797 -`complex.h' has been included. There are three complex types,
50798 -corresponding to the three real types: `float complex', `double
50799 -complex', and `long double complex'.
50801 - To construct complex numbers you need a way to indicate the imaginary
50802 -part of a number. There is no standard notation for an imaginary
50803 -floating point constant. Instead, `complex.h' defines two macros that
50804 -can be used to create complex numbers.
50806 - - Macro: const float complex _Complex_I
50807 - This macro is a representation of the complex number "0+1i".
50808 - Multiplying a real floating-point value by `_Complex_I' gives a
50809 - complex number whose value is purely imaginary. You can use this
50810 - to construct complex constants:
50812 - 3.0 + 4.0i = `3.0 + 4.0 * _Complex_I'
50814 - Note that `_Complex_I * _Complex_I' has the value `-1', but the
50815 - type of that value is `complex'.
50817 -`_Complex_I' is a bit of a mouthful. `complex.h' also defines a
50818 -shorter name for the same constant.
50820 - - Macro: const float complex I
50821 - This macro has exactly the same value as `_Complex_I'. Most of the
50822 - time it is preferable. However, it causes problems if you want to
50823 - use the identifier `I' for something else. You can safely write
50825 - #include <complex.h>
50826 - #undef I
50828 - if you need `I' for your own purposes. (In that case we recommend
50829 - you also define some other short name for `_Complex_I', such as
50830 - `J'.)
50833 -\x1f
50834 -File: libc.info, Node: Operations on Complex, Next: Parsing of Numbers, Prev: Complex Numbers, Up: Arithmetic
50836 -Projections, Conjugates, and Decomposing of Complex Numbers
50837 -===========================================================
50839 - ISO C99 also defines functions that perform basic operations on
50840 -complex numbers, such as decomposition and conjugation. The prototypes
50841 -for all these functions are in `complex.h'. All functions are
50842 -available in three variants, one for each of the three complex types.
50844 - - Function: double creal (complex double Z)
50845 - - Function: float crealf (complex float Z)
50846 - - Function: long double creall (complex long double Z)
50847 - These functions return the real part of the complex number Z.
50849 - - Function: double cimag (complex double Z)
50850 - - Function: float cimagf (complex float Z)
50851 - - Function: long double cimagl (complex long double Z)
50852 - These functions return the imaginary part of the complex number Z.
50854 - - Function: complex double conj (complex double Z)
50855 - - Function: complex float conjf (complex float Z)
50856 - - Function: complex long double conjl (complex long double Z)
50857 - These functions return the conjugate value of the complex number
50858 - Z. The conjugate of a complex number has the same real part and a
50859 - negated imaginary part. In other words, `conj(a + bi) = a + -bi'.
50861 - - Function: double carg (complex double Z)
50862 - - Function: float cargf (complex float Z)
50863 - - Function: long double cargl (complex long double Z)
50864 - These functions return the argument of the complex number Z. The
50865 - argument of a complex number is the angle in the complex plane
50866 - between the positive real axis and a line passing through zero and
50867 - the number. This angle is measured in the usual fashion and
50868 - ranges from 0 to 2pi.
50870 - `carg' has a branch cut along the positive real axis.
50872 - - Function: complex double cproj (complex double Z)
50873 - - Function: complex float cprojf (complex float Z)
50874 - - Function: complex long double cprojl (complex long double Z)
50875 - These functions return the projection of the complex value Z onto
50876 - the Riemann sphere. Values with a infinite imaginary part are
50877 - projected to positive infinity on the real axis, even if the real
50878 - part is NaN. If the real part is infinite, the result is
50879 - equivalent to
50881 - INFINITY + I * copysign (0.0, cimag (z))
50883 -\x1f
50884 -File: libc.info, Node: Parsing of Numbers, Next: System V Number Conversion, Prev: Operations on Complex, Up: Arithmetic
50886 -Parsing of Numbers
50887 -==================
50889 - This section describes functions for "reading" integer and
50890 -floating-point numbers from a string. It may be more convenient in some
50891 -cases to use `sscanf' or one of the related functions; see *Note
50892 -Formatted Input::. But often you can make a program more robust by
50893 -finding the tokens in the string by hand, then converting the numbers
50894 -one by one.
50896 -* Menu:
50898 -* Parsing of Integers:: Functions for conversion of integer values.
50899 -* Parsing of Floats:: Functions for conversion of floating-point
50900 - values.
50902 -\x1f
50903 -File: libc.info, Node: Parsing of Integers, Next: Parsing of Floats, Up: Parsing of Numbers
50905 -Parsing of Integers
50906 --------------------
50908 - The `str' functions are declared in `stdlib.h' and those beginning
50909 -with `wcs' are declared in `wchar.h'. One might wonder about the use
50910 -of `restrict' in the prototypes of the functions in this section. It
50911 -is seemingly useless but the ISO C standard uses it (for the functions
50912 -defined there) so we have to do it as well.
50914 - - Function: long int strtol (const char *restrict STRING, char
50915 - **restrict TAILPTR, int BASE)
50916 - The `strtol' ("string-to-long") function converts the initial part
50917 - of STRING to a signed integer, which is returned as a value of
50918 - type `long int'.
50920 - This function attempts to decompose STRING as follows:
50922 - * A (possibly empty) sequence of whitespace characters. Which
50923 - characters are whitespace is determined by the `isspace'
50924 - function (*note Classification of Characters::). These are
50925 - discarded.
50927 - * An optional plus or minus sign (`+' or `-').
50929 - * A nonempty sequence of digits in the radix specified by BASE.
50931 - If BASE is zero, decimal radix is assumed unless the series of
50932 - digits begins with `0' (specifying octal radix), or `0x' or
50933 - `0X' (specifying hexadecimal radix); in other words, the same
50934 - syntax used for integer constants in C.
50936 - Otherwise BASE must have a value between `2' and `36'. If
50937 - BASE is `16', the digits may optionally be preceded by `0x'
50938 - or `0X'. If base has no legal value the value returned is
50939 - `0l' and the global variable `errno' is set to `EINVAL'.
50941 - * Any remaining characters in the string. If TAILPTR is not a
50942 - null pointer, `strtol' stores a pointer to this tail in
50943 - `*TAILPTR'.
50945 - If the string is empty, contains only whitespace, or does not
50946 - contain an initial substring that has the expected syntax for an
50947 - integer in the specified BASE, no conversion is performed. In
50948 - this case, `strtol' returns a value of zero and the value stored in
50949 - `*TAILPTR' is the value of STRING.
50951 - In a locale other than the standard `"C"' locale, this function
50952 - may recognize additional implementation-dependent syntax.
50954 - If the string has valid syntax for an integer but the value is not
50955 - representable because of overflow, `strtol' returns either
50956 - `LONG_MAX' or `LONG_MIN' (*note Range of Type::), as appropriate
50957 - for the sign of the value. It also sets `errno' to `ERANGE' to
50958 - indicate there was overflow.
50960 - You should not check for errors by examining the return value of
50961 - `strtol', because the string might be a valid representation of
50962 - `0l', `LONG_MAX', or `LONG_MIN'. Instead, check whether TAILPTR
50963 - points to what you expect after the number (e.g. `'\0'' if the
50964 - string should end after the number). You also need to clear ERRNO
50965 - before the call and check it afterward, in case there was overflow.
50967 - There is an example at the end of this section.
50969 - - Function: long int wcstol (const wchar_t *restrict STRING, wchar_t
50970 - **restrict TAILPTR, int BASE)
50971 - The `wcstol' function is equivalent to the `strtol' function in
50972 - nearly all aspects but handles wide character strings.
50974 - The `wcstol' function was introduced in Amendment 1 of ISO C90.
50976 - - Function: unsigned long int strtoul (const char *retrict STRING,
50977 - char **restrict TAILPTR, int BASE)
50978 - The `strtoul' ("string-to-unsigned-long") function is like
50979 - `strtol' except it converts to an `unsigned long int' value. The
50980 - syntax is the same as described above for `strtol'. The value
50981 - returned on overflow is `ULONG_MAX' (*note Range of Type::).
50983 - If STRING depicts a negative number, `strtoul' acts the same as
50984 - STRTOL but casts the result to an unsigned integer. That means
50985 - for example that `strtoul' on `"-1"' returns `ULONG_MAX' and an
50986 - input more negative than `LONG_MIN' returns (`ULONG_MAX' + 1) / 2.
50988 - `strtoul' sets ERRNO to `EINVAL' if BASE is out of range, or
50989 - `ERANGE' on overflow.
50991 - - Function: unsigned long int wcstoul (const wchar_t *restrict STRING,
50992 - wchar_t **restrict TAILPTR, int BASE)
50993 - The `wcstoul' function is equivalent to the `strtoul' function in
50994 - nearly all aspects but handles wide character strings.
50996 - The `wcstoul' function was introduced in Amendment 1 of ISO C90.
50998 - - Function: long long int strtoll (const char *restrict STRING, char
50999 - **restrict TAILPTR, int BASE)
51000 - The `strtoll' function is like `strtol' except that it returns a
51001 - `long long int' value, and accepts numbers with a correspondingly
51002 - larger range.
51004 - If the string has valid syntax for an integer but the value is not
51005 - representable because of overflow, `strtoll' returns either
51006 - `LONG_LONG_MAX' or `LONG_LONG_MIN' (*note Range of Type::), as
51007 - appropriate for the sign of the value. It also sets `errno' to
51008 - `ERANGE' to indicate there was overflow.
51010 - The `strtoll' function was introduced in ISO C99.
51012 - - Function: long long int wcstoll (const wchar_t *restrict STRING,
51013 - wchar_t **restrict TAILPTR, int BASE)
51014 - The `wcstoll' function is equivalent to the `strtoll' function in
51015 - nearly all aspects but handles wide character strings.
51017 - The `wcstoll' function was introduced in Amendment 1 of ISO C90.
51019 - - Function: long long int strtoq (const char *restrict STRING, char
51020 - **restrict TAILPTR, int BASE)
51021 - `strtoq' ("string-to-quad-word") is the BSD name for `strtoll'.
51023 - - Function: long long int wcstoq (const wchar_t *restrict STRING,
51024 - wchar_t **restrict TAILPTR, int BASE)
51025 - The `wcstoq' function is equivalent to the `strtoq' function in
51026 - nearly all aspects but handles wide character strings.
51028 - The `wcstoq' function is a GNU extension.
51030 - - Function: unsigned long long int strtoull (const char *restrict
51031 - STRING, char **restrict TAILPTR, int BASE)
51032 - The `strtoull' function is related to `strtoll' the same way
51033 - `strtoul' is related to `strtol'.
51035 - The `strtoull' function was introduced in ISO C99.
51037 - - Function: unsigned long long int wcstoull (const wchar_t *restrict
51038 - STRING, wchar_t **restrict TAILPTR, int BASE)
51039 - The `wcstoull' function is equivalent to the `strtoull' function
51040 - in nearly all aspects but handles wide character strings.
51042 - The `wcstoull' function was introduced in Amendment 1 of ISO C90.
51044 - - Function: unsigned long long int strtouq (const char *restrict
51045 - STRING, char **restrict TAILPTR, int BASE)
51046 - `strtouq' is the BSD name for `strtoull'.
51048 - - Function: unsigned long long int wcstouq (const wchar_t *restrict
51049 - STRING, wchar_t **restrict TAILPTR, int BASE)
51050 - The `wcstouq' function is equivalent to the `strtouq' function in
51051 - nearly all aspects but handles wide character strings.
51053 - The `wcstoq' function is a GNU extension.
51055 - - Function: intmax_t strtoimax (const char *restrict STRING, char
51056 - **restrict TAILPTR, int BASE)
51057 - The `strtoimax' function is like `strtol' except that it returns a
51058 - `intmax_t' value, and accepts numbers of a corresponding range.
51060 - If the string has valid syntax for an integer but the value is not
51061 - representable because of overflow, `strtoimax' returns either
51062 - `INTMAX_MAX' or `INTMAX_MIN' (*note Integers::), as appropriate
51063 - for the sign of the value. It also sets `errno' to `ERANGE' to
51064 - indicate there was overflow.
51066 - See *Note Integers:: for a description of the `intmax_t' type. The
51067 - `strtoimax' function was introduced in ISO C99.
51069 - - Function: intmax_t wcstoimax (const wchar_t *restrict STRING,
51070 - wchar_t **restrict TAILPTR, int BASE)
51071 - The `wcstoimax' function is equivalent to the `strtoimax' function
51072 - in nearly all aspects but handles wide character strings.
51074 - The `wcstoimax' function was introduced in ISO C99.
51076 - - Function: uintmax_t strtoumax (const char *restrict STRING, char
51077 - **restrict TAILPTR, int BASE)
51078 - The `strtoumax' function is related to `strtoimax' the same way
51079 - that `strtoul' is related to `strtol'.
51081 - See *Note Integers:: for a description of the `intmax_t' type. The
51082 - `strtoumax' function was introduced in ISO C99.
51084 - - Function: uintmax_t wcstoumax (const wchar_t *restrict STRING,
51085 - wchar_t **restrict TAILPTR, int BASE)
51086 - The `wcstoumax' function is equivalent to the `strtoumax' function
51087 - in nearly all aspects but handles wide character strings.
51089 - The `wcstoumax' function was introduced in ISO C99.
51091 - - Function: long int atol (const char *STRING)
51092 - This function is similar to the `strtol' function with a BASE
51093 - argument of `10', except that it need not detect overflow errors.
51094 - The `atol' function is provided mostly for compatibility with
51095 - existing code; using `strtol' is more robust.
51097 - - Function: int atoi (const char *STRING)
51098 - This function is like `atol', except that it returns an `int'.
51099 - The `atoi' function is also considered obsolete; use `strtol'
51100 - instead.
51102 - - Function: long long int atoll (const char *STRING)
51103 - This function is similar to `atol', except it returns a `long long
51104 - int'.
51106 - The `atoll' function was introduced in ISO C99. It too is
51107 - obsolete (despite having just been added); use `strtoll' instead.
51109 - All the functions mentioned in this section so far do not handle
51110 -alternative representations of characters as described in the locale
51111 -data. Some locales specify thousands separator and the way they have to
51112 -be used which can help to make large numbers more readable. To read
51113 -such numbers one has to use the `scanf' functions with the `'' flag.
51115 - Here is a function which parses a string as a sequence of integers
51116 -and returns the sum of them:
51118 - int
51119 - sum_ints_from_string (char *string)
51121 - int sum = 0;
51123 - while (1) {
51124 - char *tail;
51125 - int next;
51127 - /* Skip whitespace by hand, to detect the end. */
51128 - while (isspace (*string)) string++;
51129 - if (*string == 0)
51130 - break;
51132 - /* There is more nonwhitespace, */
51133 - /* so it ought to be another number. */
51134 - errno = 0;
51135 - /* Parse it. */
51136 - next = strtol (string, &tail, 0);
51137 - /* Add it in, if not overflow. */
51138 - if (errno)
51139 - printf ("Overflow\n");
51140 - else
51141 - sum += next;
51142 - /* Advance past it. */
51143 - string = tail;
51146 - return sum;
51149 diff -u -udbrN glibc-2.3.2/manual/libc.info-35 glibc-2.3.2-200304020432/manual/libc.info-35
51150 --- glibc-2.3.2/manual/libc.info-35 Sat Mar 1 02:39:41 2003
51151 +++ glibc-2.3.2-200304020432/manual/libc.info-35 Thu Jan 1 01:00:00 1970
51152 @@ -1,1168 +0,0 @@
51153 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
51155 -INFO-DIR-SECTION GNU libraries
51156 -START-INFO-DIR-ENTRY
51157 -* Libc: (libc). C library.
51158 -END-INFO-DIR-ENTRY
51160 - This file documents the GNU C library.
51162 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
51163 -Reference Manual', for Version 2.3.x.
51165 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
51166 -Free Software Foundation, Inc.
51168 - Permission is granted to copy, distribute and/or modify this document
51169 -under the terms of the GNU Free Documentation License, Version 1.1 or
51170 -any later version published by the Free Software Foundation; with the
51171 -Invariant Sections being "Free Software Needs Free Documentation" and
51172 -"GNU Lesser General Public License", the Front-Cover texts being (a)
51173 -(see below), and with the Back-Cover Texts being (b) (see below). A
51174 -copy of the license is included in the section entitled "GNU Free
51175 -Documentation License".
51177 - (a) The FSF's Front-Cover Text is:
51179 - A GNU Manual
51181 - (b) The FSF's Back-Cover Text is:
51183 - You have freedom to copy and modify this GNU Manual, like GNU
51184 -software. Copies published by the Free Software Foundation raise
51185 -funds for GNU development.
51187 -\x1f
51188 -File: libc.info, Node: Parsing of Floats, Prev: Parsing of Integers, Up: Parsing of Numbers
51190 -Parsing of Floats
51191 ------------------
51193 - The `str' functions are declared in `stdlib.h' and those beginning
51194 -with `wcs' are declared in `wchar.h'. One might wonder about the use
51195 -of `restrict' in the prototypes of the functions in this section. It
51196 -is seemingly useless but the ISO C standard uses it (for the functions
51197 -defined there) so we have to do it as well.
51199 - - Function: double strtod (const char *restrict STRING, char
51200 - **restrict TAILPTR)
51201 - The `strtod' ("string-to-double") function converts the initial
51202 - part of STRING to a floating-point number, which is returned as a
51203 - value of type `double'.
51205 - This function attempts to decompose STRING as follows:
51207 - * A (possibly empty) sequence of whitespace characters. Which
51208 - characters are whitespace is determined by the `isspace'
51209 - function (*note Classification of Characters::). These are
51210 - discarded.
51212 - * An optional plus or minus sign (`+' or `-').
51214 - * A floating point number in decimal or hexadecimal format. The
51215 - decimal format is:
51216 - - A nonempty sequence of digits optionally containing a
51217 - decimal-point character--normally `.', but it depends on
51218 - the locale (*note General Numeric::).
51220 - - An optional exponent part, consisting of a character `e'
51221 - or `E', an optional sign, and a sequence of digits.
51224 - The hexadecimal format is as follows:
51225 - - A 0x or 0X followed by a nonempty sequence of
51226 - hexadecimal digits optionally containing a decimal-point
51227 - character--normally `.', but it depends on the locale
51228 - (*note General Numeric::).
51230 - - An optional binary-exponent part, consisting of a
51231 - character `p' or `P', an optional sign, and a sequence
51232 - of digits.
51235 - * Any remaining characters in the string. If TAILPTR is not a
51236 - null pointer, a pointer to this tail of the string is stored
51237 - in `*TAILPTR'.
51239 - If the string is empty, contains only whitespace, or does not
51240 - contain an initial substring that has the expected syntax for a
51241 - floating-point number, no conversion is performed. In this case,
51242 - `strtod' returns a value of zero and the value returned in
51243 - `*TAILPTR' is the value of STRING.
51245 - In a locale other than the standard `"C"' or `"POSIX"' locales,
51246 - this function may recognize additional locale-dependent syntax.
51248 - If the string has valid syntax for a floating-point number but the
51249 - value is outside the range of a `double', `strtod' will signal
51250 - overflow or underflow as described in *Note Math Error Reporting::.
51252 - `strtod' recognizes four special input strings. The strings
51253 - `"inf"' and `"infinity"' are converted to oo, or to the largest
51254 - representable value if the floating-point format doesn't support
51255 - infinities. You can prepend a `"+"' or `"-"' to specify the sign.
51256 - Case is ignored when scanning these strings.
51258 - The strings `"nan"' and `"nan(CHARS...)"' are converted to NaN.
51259 - Again, case is ignored. If CHARS... are provided, they are used
51260 - in some unspecified fashion to select a particular representation
51261 - of NaN (there can be several).
51263 - Since zero is a valid result as well as the value returned on
51264 - error, you should check for errors in the same way as for
51265 - `strtol', by examining ERRNO and TAILPTR.
51267 - - Function: float strtof (const char *STRING, char **TAILPTR)
51268 - - Function: long double strtold (const char *STRING, char **TAILPTR)
51269 - These functions are analogous to `strtod', but return `float' and
51270 - `long double' values respectively. They report errors in the same
51271 - way as `strtod'. `strtof' can be substantially faster than
51272 - `strtod', but has less precision; conversely, `strtold' can be
51273 - much slower but has more precision (on systems where `long double'
51274 - is a separate type).
51276 - These functions have been GNU extensions and are new to ISO C99.
51278 - - Function: double wcstod (const wchar_t *restrict STRING, wchar_t
51279 - **restrict TAILPTR)
51280 - - Function: float wcstof (const wchar_t *STRING, wchar_t **TAILPTR)
51281 - - Function: long double wcstold (const wchar_t *STRING, wchar_t
51282 - **TAILPTR)
51283 - The `wcstod', `wcstof', and `wcstol' functions are equivalent in
51284 - nearly all aspect to the `strtod', `strtof', and `strtold'
51285 - functions but it handles wide character string.
51287 - The `wcstod' function was introduced in Amendment 1 of ISO C90.
51288 - The `wcstof' and `wcstold' functions were introduced in ISO C99.
51290 - - Function: double atof (const char *STRING)
51291 - This function is similar to the `strtod' function, except that it
51292 - need not detect overflow and underflow errors. The `atof' function
51293 - is provided mostly for compatibility with existing code; using
51294 - `strtod' is more robust.
51296 - The GNU C library also provides `_l' versions of these functions,
51297 -which take an additional argument, the locale to use in conversion.
51298 -*Note Parsing of Integers::.
51300 -\x1f
51301 -File: libc.info, Node: System V Number Conversion, Prev: Parsing of Numbers, Up: Arithmetic
51303 -Old-fashioned System V number-to-string functions
51304 -=================================================
51306 - The old System V C library provided three functions to convert
51307 -numbers to strings, with unusual and hard-to-use semantics. The GNU C
51308 -library also provides these functions and some natural extensions.
51310 - These functions are only available in glibc and on systems descended
51311 -from AT&T Unix. Therefore, unless these functions do precisely what you
51312 -need, it is better to use `sprintf', which is standard.
51314 - All these functions are defined in `stdlib.h'.
51316 - - Function: char * ecvt (double VALUE, int NDIGIT, int *DECPT, int
51317 - *NEG)
51318 - The function `ecvt' converts the floating-point number VALUE to a
51319 - string with at most NDIGIT decimal digits. The returned string
51320 - contains no decimal point or sign. The first digit of the string
51321 - is non-zero (unless VALUE is actually zero) and the last digit is
51322 - rounded to nearest. `*DECPT' is set to the index in the string of
51323 - the first digit after the decimal point. `*NEG' is set to a
51324 - nonzero value if VALUE is negative, zero otherwise.
51326 - If NDIGIT decimal digits would exceed the precision of a `double'
51327 - it is reduced to a system-specific value.
51329 - The returned string is statically allocated and overwritten by
51330 - each call to `ecvt'.
51332 - If VALUE is zero, it is implementation defined whether `*DECPT' is
51333 - `0' or `1'.
51335 - For example: `ecvt (12.3, 5, &d, &n)' returns `"12300"' and sets D
51336 - to `2' and N to `0'.
51338 - - Function: char * fcvt (double VALUE, int NDIGIT, int *DECPT, int
51339 - *NEG)
51340 - The function `fcvt' is like `ecvt', but NDIGIT specifies the
51341 - number of digits after the decimal point. If NDIGIT is less than
51342 - zero, VALUE is rounded to the NDIGIT+1'th place to the left of the
51343 - decimal point. For example, if NDIGIT is `-1', VALUE will be
51344 - rounded to the nearest 10. If NDIGIT is negative and larger than
51345 - the number of digits to the left of the decimal point in VALUE,
51346 - VALUE will be rounded to one significant digit.
51348 - If NDIGIT decimal digits would exceed the precision of a `double'
51349 - it is reduced to a system-specific value.
51351 - The returned string is statically allocated and overwritten by
51352 - each call to `fcvt'.
51354 - - Function: char * gcvt (double VALUE, int NDIGIT, char *BUF)
51355 - `gcvt' is functionally equivalent to `sprintf(buf, "%*g", ndigit,
51356 - value'. It is provided only for compatibility's sake. It returns
51357 - BUF.
51359 - If NDIGIT decimal digits would exceed the precision of a `double'
51360 - it is reduced to a system-specific value.
51362 - As extensions, the GNU C library provides versions of these three
51363 -functions that take `long double' arguments.
51365 - - Function: char * qecvt (long double VALUE, int NDIGIT, int *DECPT,
51366 - int *NEG)
51367 - This function is equivalent to `ecvt' except that it takes a `long
51368 - double' for the first parameter and that NDIGIT is restricted by
51369 - the precision of a `long double'.
51371 - - Function: char * qfcvt (long double VALUE, int NDIGIT, int *DECPT,
51372 - int *NEG)
51373 - This function is equivalent to `fcvt' except that it takes a `long
51374 - double' for the first parameter and that NDIGIT is restricted by
51375 - the precision of a `long double'.
51377 - - Function: char * qgcvt (long double VALUE, int NDIGIT, char *BUF)
51378 - This function is equivalent to `gcvt' except that it takes a `long
51379 - double' for the first parameter and that NDIGIT is restricted by
51380 - the precision of a `long double'.
51382 - The `ecvt' and `fcvt' functions, and their `long double'
51383 -equivalents, all return a string located in a static buffer which is
51384 -overwritten by the next call to the function. The GNU C library
51385 -provides another set of extended functions which write the converted
51386 -string into a user-supplied buffer. These have the conventional `_r'
51387 -suffix.
51389 - `gcvt_r' is not necessary, because `gcvt' already uses a
51390 -user-supplied buffer.
51392 - - Function: char * ecvt_r (double VALUE, int NDIGIT, int *DECPT, int
51393 - *NEG, char *BUF, size_t LEN)
51394 - The `ecvt_r' function is the same as `ecvt', except that it places
51395 - its result into the user-specified buffer pointed to by BUF, with
51396 - length LEN.
51398 - This function is a GNU extension.
51400 - - Function: char * fcvt_r (double VALUE, int NDIGIT, int *DECPT, int
51401 - *NEG, char *BUF, size_t LEN)
51402 - The `fcvt_r' function is the same as `fcvt', except that it places
51403 - its result into the user-specified buffer pointed to by BUF, with
51404 - length LEN.
51406 - This function is a GNU extension.
51408 - - Function: char * qecvt_r (long double VALUE, int NDIGIT, int *DECPT,
51409 - int *NEG, char *BUF, size_t LEN)
51410 - The `qecvt_r' function is the same as `qecvt', except that it
51411 - places its result into the user-specified buffer pointed to by
51412 - BUF, with length LEN.
51414 - This function is a GNU extension.
51416 - - Function: char * qfcvt_r (long double VALUE, int NDIGIT, int *DECPT,
51417 - int *NEG, char *BUF, size_t LEN)
51418 - The `qfcvt_r' function is the same as `qfcvt', except that it
51419 - places its result into the user-specified buffer pointed to by
51420 - BUF, with length LEN.
51422 - This function is a GNU extension.
51424 -\x1f
51425 -File: libc.info, Node: Date and Time, Next: Resource Usage And Limitation, Prev: Arithmetic, Up: Top
51427 -Date and Time
51428 -*************
51430 - This chapter describes functions for manipulating dates and times,
51431 -including functions for determining what time it is and conversion
51432 -between different time representations.
51434 -* Menu:
51436 -* Time Basics:: Concepts and definitions.
51437 -* Elapsed Time:: Data types to represent elapsed times
51438 -* Processor And CPU Time:: Time a program has spent executing.
51439 -* Calendar Time:: Manipulation of ``real'' dates and times.
51440 -* Setting an Alarm:: Sending a signal after a specified time.
51441 -* Sleeping:: Waiting for a period of time.
51443 -\x1f
51444 -File: libc.info, Node: Time Basics, Next: Elapsed Time, Up: Date and Time
51446 -Time Basics
51447 -===========
51449 - Discussing time in a technical manual can be difficult because the
51450 -word "time" in English refers to lots of different things. In this
51451 -manual, we use a rigorous terminology to avoid confusion, and the only
51452 -thing we use the simple word "time" for is to talk about the abstract
51453 -concept.
51455 - A "calendar time" is a point in the time continuum, for example
51456 -November 4, 1990 at 18:02.5 UTC. Sometimes this is called "absolute
51457 -time".
51459 - We don't speak of a "date", because that is inherent in a calendar
51460 -time.
51462 - An "interval" is a contiguous part of the time continuum between two
51463 -calendar times, for example the hour between 9:00 and 10:00 on July 4,
51464 -1980.
51466 - An "elapsed time" is the length of an interval, for example, 35
51467 -minutes. People sometimes sloppily use the word "interval" to refer to
51468 -the elapsed time of some interval.
51470 - An "amount of time" is a sum of elapsed times, which need not be of
51471 -any specific intervals. For example, the amount of time it takes to
51472 -read a book might be 9 hours, independently of when and in how many
51473 -sittings it is read.
51475 - A "period" is the elapsed time of an interval between two events,
51476 -especially when they are part of a sequence of regularly repeating
51477 -events.
51479 - "CPU time" is like calendar time, except that it is based on the
51480 -subset of the time continuum when a particular process is actively
51481 -using a CPU. CPU time is, therefore, relative to a process.
51483 - "Processor time" is an amount of time that a CPU is in use. In
51484 -fact, it's a basic system resource, since there's a limit to how much
51485 -can exist in any given interval (that limit is the elapsed time of the
51486 -interval times the number of CPUs in the processor). People often call
51487 -this CPU time, but we reserve the latter term in this manual for the
51488 -definition above.
51490 -\x1f
51491 -File: libc.info, Node: Elapsed Time, Next: Processor And CPU Time, Prev: Time Basics, Up: Date and Time
51493 -Elapsed Time
51494 -============
51496 - One way to represent an elapsed time is with a simple arithmetic data
51497 -type, as with the following function to compute the elapsed time between
51498 -two calendar times. This function is declared in `time.h'.
51500 - - Function: double difftime (time_t TIME1, time_t TIME0)
51501 - The `difftime' function returns the number of seconds of elapsed
51502 - time between calendar time TIME1 and calendar time TIME0, as a
51503 - value of type `double'. The difference ignores leap seconds
51504 - unless leap second support is enabled.
51506 - In the GNU system, you can simply subtract `time_t' values. But on
51507 - other systems, the `time_t' data type might use some other encoding
51508 - where subtraction doesn't work directly.
51510 - The GNU C library provides two data types specifically for
51511 -representing an elapsed time. They are used by various GNU C library
51512 -functions, and you can use them for your own purposes too. They're
51513 -exactly the same except that one has a resolution in microseconds, and
51514 -the other, newer one, is in nanoseconds.
51516 - - Data Type: struct timeval
51517 - The `struct timeval' structure represents an elapsed time. It is
51518 - declared in `sys/time.h' and has the following members:
51520 - `long int tv_sec'
51521 - This represents the number of whole seconds of elapsed time.
51523 - `long int tv_usec'
51524 - This is the rest of the elapsed time (a fraction of a second),
51525 - represented as the number of microseconds. It is always less
51526 - than one million.
51529 - - Data Type: struct timespec
51530 - The `struct timespec' structure represents an elapsed time. It is
51531 - declared in `time.h' and has the following members:
51533 - `long int tv_sec'
51534 - This represents the number of whole seconds of elapsed time.
51536 - `long int tv_nsec'
51537 - This is the rest of the elapsed time (a fraction of a second),
51538 - represented as the number of nanoseconds. It is always less
51539 - than one billion.
51542 - It is often necessary to subtract two values of type
51543 -`struct timeval' or `struct timespec'. Here is the best way to do
51544 -this. It works even on some peculiar operating systems where the
51545 -`tv_sec' member has an unsigned type.
51547 - /* Subtract the `struct timeval' values X and Y,
51548 - storing the result in RESULT.
51549 - Return 1 if the difference is negative, otherwise 0. */
51551 - int
51552 - timeval_subtract (result, x, y)
51553 - struct timeval *result, *x, *y;
51555 - /* Perform the carry for the later subtraction by updating Y. */
51556 - if (x->tv_usec < y->tv_usec) {
51557 - int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
51558 - y->tv_usec -= 1000000 * nsec;
51559 - y->tv_sec += nsec;
51561 - if (x->tv_usec - y->tv_usec > 1000000) {
51562 - int nsec = (x->tv_usec - y->tv_usec) / 1000000;
51563 - y->tv_usec += 1000000 * nsec;
51564 - y->tv_sec -= nsec;
51567 - /* Compute the time remaining to wait.
51568 - `tv_usec' is certainly positive. */
51569 - result->tv_sec = x->tv_sec - y->tv_sec;
51570 - result->tv_usec = x->tv_usec - y->tv_usec;
51572 - /* Return 1 if result is negative. */
51573 - return x->tv_sec < y->tv_sec;
51576 - Common functions that use `struct timeval' are `gettimeofday' and
51577 -`settimeofday'.
51579 - There are no GNU C library functions specifically oriented toward
51580 -dealing with elapsed times, but the calendar time, processor time, and
51581 -alarm and sleeping functions have a lot to do with them.
51583 -\x1f
51584 -File: libc.info, Node: Processor And CPU Time, Next: Calendar Time, Prev: Elapsed Time, Up: Date and Time
51586 -Processor And CPU Time
51587 -======================
51589 - If you're trying to optimize your program or measure its efficiency,
51590 -it's very useful to know how much processor time it uses. For that,
51591 -calendar time and elapsed times are useless because a process may spend
51592 -time waiting for I/O or for other processes to use the CPU. However,
51593 -you can get the information with the functions in this section.
51595 - CPU time (*note Time Basics::) is represented by the data type
51596 -`clock_t', which is a number of "clock ticks". It gives the total
51597 -amount of time a process has actively used a CPU since some arbitrary
51598 -event. On the GNU system, that event is the creation of the process.
51599 -While arbitrary in general, the event is always the same event for any
51600 -particular process, so you can always measure how much time on the CPU
51601 -a particular computation takes by examinining the process' CPU time
51602 -before and after the computation.
51604 - In the GNU system, `clock_t' is equivalent to `long int' and
51605 -`CLOCKS_PER_SEC' is an integer value. But in other systems, both
51606 -`clock_t' and the macro `CLOCKS_PER_SEC' can be either integer or
51607 -floating-point types. Casting CPU time values to `double', as in the
51608 -example above, makes sure that operations such as arithmetic and
51609 -printing work properly and consistently no matter what the underlying
51610 -representation is.
51612 - Note that the clock can wrap around. On a 32bit system with
51613 -`CLOCKS_PER_SEC' set to one million this function will return the same
51614 -value approximately every 72 minutes.
51616 - For additional functions to examine a process' use of processor time,
51617 -and to control it, *Note Resource Usage And Limitation::.
51619 -* Menu:
51621 -* CPU Time:: The `clock' function.
51622 -* Processor Time:: The `times' function.
51624 -\x1f
51625 -File: libc.info, Node: CPU Time, Next: Processor Time, Up: Processor And CPU Time
51627 -CPU Time Inquiry
51628 -----------------
51630 - To get a process' CPU time, you can use the `clock' function. This
51631 -facility is declared in the header file `time.h'.
51633 - In typical usage, you call the `clock' function at the beginning and
51634 -end of the interval you want to time, subtract the values, and then
51635 -divide by `CLOCKS_PER_SEC' (the number of clock ticks per second) to
51636 -get processor time, like this:
51638 - #include <time.h>
51640 - clock_t start, end;
51641 - double cpu_time_used;
51643 - start = clock();
51644 - ... /* Do the work. */
51645 - end = clock();
51646 - cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
51648 - Do not use a single CPU time as an amount of time; it doesn't work
51649 -that way. Either do a subtraction as shown above or query processor
51650 -time directly. *Note Processor Time::.
51652 - Different computers and operating systems vary wildly in how they
51653 -keep track of CPU time. It's common for the internal processor clock
51654 -to have a resolution somewhere between a hundredth and millionth of a
51655 -second.
51657 - - Macro: int CLOCKS_PER_SEC
51658 - The value of this macro is the number of clock ticks per second
51659 - measured by the `clock' function. POSIX requires that this value
51660 - be one million independent of the actual resolution.
51662 - - Macro: int CLK_TCK
51663 - This is an obsolete name for `CLOCKS_PER_SEC'.
51665 - - Data Type: clock_t
51666 - This is the type of the value returned by the `clock' function.
51667 - Values of type `clock_t' are numbers of clock ticks.
51669 - - Function: clock_t clock (void)
51670 - This function returns the calling process' current CPU time. If
51671 - the CPU time is not available or cannot be represented, `clock'
51672 - returns the value `(clock_t)(-1)'.
51674 -\x1f
51675 -File: libc.info, Node: Processor Time, Prev: CPU Time, Up: Processor And CPU Time
51677 -Processor Time Inquiry
51678 -----------------------
51680 - The `times' function returns information about a process'
51681 -consumption of processor time in a `struct tms' object, in addition to
51682 -the process' CPU time. *Note Time Basics::. You should include the
51683 -header file `sys/times.h' to use this facility.
51685 - - Data Type: struct tms
51686 - The `tms' structure is used to return information about process
51687 - times. It contains at least the following members:
51689 - `clock_t tms_utime'
51690 - This is the total processor time the calling process has used
51691 - in executing the instructions of its program.
51693 - `clock_t tms_stime'
51694 - This is the processor time the system has used on behalf of
51695 - the calling process.
51697 - `clock_t tms_cutime'
51698 - This is the sum of the `tms_utime' values and the `tms_cutime'
51699 - values of all terminated child processes of the calling
51700 - process, whose status has been reported to the parent process
51701 - by `wait' or `waitpid'; see *Note Process Completion::. In
51702 - other words, it represents the total processor time used in
51703 - executing the instructions of all the terminated child
51704 - processes of the calling process, excluding child processes
51705 - which have not yet been reported by `wait' or `waitpid'.
51707 - `clock_t tms_cstime'
51708 - This is similar to `tms_cutime', but represents the total
51709 - processor time system has used on behalf of all the
51710 - terminated child processes of the calling process.
51712 - All of the times are given in numbers of clock ticks. Unlike CPU
51713 - time, these are the actual amounts of time; not relative to any
51714 - event. *Note Creating a Process::.
51716 - - Function: clock_t times (struct tms *BUFFER)
51717 - The `times' function stores the processor time information for the
51718 - calling process in BUFFER.
51720 - The return value is the calling process' CPU time (the same value
51721 - you get from `clock()'. `times' returns `(clock_t)(-1)' to
51722 - indicate failure.
51724 - *Portability Note:* The `clock' function described in *Note CPU
51725 -Time:: is specified by the ISO C standard. The `times' function is a
51726 -feature of POSIX.1. In the GNU system, the CPU time is defined to be
51727 -equivalent to the sum of the `tms_utime' and `tms_stime' fields
51728 -returned by `times'.
51730 -\x1f
51731 -File: libc.info, Node: Calendar Time, Next: Setting an Alarm, Prev: Processor And CPU Time, Up: Date and Time
51733 -Calendar Time
51734 -=============
51736 - This section describes facilities for keeping track of calendar time.
51737 -*Note Time Basics::.
51739 - The GNU C library represents calendar time three ways:
51741 - * "Simple time" (the `time_t' data type) is a compact
51742 - representation, typically giving the number of seconds of elapsed
51743 - time since some implementation-specific base time.
51745 - * There is also a "high-resolution time" representation. Like simple
51746 - time, this represents a calendar time as an elapsed time since a
51747 - base time, but instead of measuring in whole seconds, it uses a
51748 - `struct timeval' data type, which includes fractions of a second.
51749 - Use this time representation instead of simple time when you need
51750 - greater precision.
51752 - * "Local time" or "broken-down time" (the `struct tm' data type)
51753 - represents a calendar time as a set of components specifying the
51754 - year, month, and so on in the Gregorian calendar, for a specific
51755 - time zone. This calendar time representation is usually used only
51756 - to communicate with people.
51758 -* Menu:
51760 -* Simple Calendar Time:: Facilities for manipulating calendar time.
51761 -* High-Resolution Calendar:: A time representation with greater precision.
51762 -* Broken-down Time:: Facilities for manipulating local time.
51763 -* High Accuracy Clock:: Maintaining a high accuracy system clock.
51764 -* Formatting Calendar Time:: Converting times to strings.
51765 -* Parsing Date and Time:: Convert textual time and date information back
51766 - into broken-down time values.
51767 -* TZ Variable:: How users specify the time zone.
51768 -* Time Zone Functions:: Functions to examine or specify the time zone.
51769 -* Time Functions Example:: An example program showing use of some of
51770 - the time functions.
51772 -\x1f
51773 -File: libc.info, Node: Simple Calendar Time, Next: High-Resolution Calendar, Up: Calendar Time
51775 -Simple Calendar Time
51776 ---------------------
51778 - This section describes the `time_t' data type for representing
51779 -calendar time as simple time, and the functions which operate on simple
51780 -time objects. These facilities are declared in the header file
51781 -`time.h'.
51783 - - Data Type: time_t
51784 - This is the data type used to represent simple time. Sometimes,
51785 - it also represents an elapsed time. When interpreted as a
51786 - calendar time value, it represents the number of seconds elapsed
51787 - since 00:00:00 on January 1, 1970, Coordinated Universal Time.
51788 - (This calendar time is sometimes referred to as the "epoch".)
51789 - POSIX requires that this count not include leap seconds, but on
51790 - some systems this count includes leap seconds if you set `TZ' to
51791 - certain values (*note TZ Variable::).
51793 - Note that a simple time has no concept of local time zone.
51794 - Calendar Time T is the same instant in time regardless of where on
51795 - the globe the computer is.
51797 - In the GNU C library, `time_t' is equivalent to `long int'. In
51798 - other systems, `time_t' might be either an integer or
51799 - floating-point type.
51801 - The function `difftime' tells you the elapsed time between two
51802 -simple calendar times, which is not always as easy to compute as just
51803 -subtracting. *Note Elapsed Time::.
51805 - - Function: time_t time (time_t *RESULT)
51806 - The `time' function returns the current calendar time as a value of
51807 - type `time_t'. If the argument RESULT is not a null pointer, the
51808 - calendar time value is also stored in `*RESULT'. If the current
51809 - calendar time is not available, the value `(time_t)(-1)' is
51810 - returned.
51812 - - Function: int stime (time_t *NEWTIME)
51813 - `stime' sets the system clock, i.e. it tells the system that the
51814 - current calendar time is NEWTIME, where `newtime' is interpreted
51815 - as described in the above definition of `time_t'.
51817 - `settimeofday' is a newer function which sets the system clock to
51818 - better than one second precision. `settimeofday' is generally a
51819 - better choice than `stime'. *Note High-Resolution Calendar::.
51821 - Only the superuser can set the system clock.
51823 - If the function succeeds, the return value is zero. Otherwise, it
51824 - is `-1' and `errno' is set accordingly:
51826 - `EPERM'
51827 - The process is not superuser.
51829 -\x1f
51830 -File: libc.info, Node: High-Resolution Calendar, Next: Broken-down Time, Prev: Simple Calendar Time, Up: Calendar Time
51832 -High-Resolution Calendar
51833 -------------------------
51835 - The `time_t' data type used to represent simple times has a
51836 -resolution of only one second. Some applications need more precision.
51838 - So, the GNU C library also contains functions which are capable of
51839 -representing calendar times to a higher resolution than one second. The
51840 -functions and the associated data types described in this section are
51841 -declared in `sys/time.h'.
51843 - - Data Type: struct timezone
51844 - The `struct timezone' structure is used to hold minimal information
51845 - about the local time zone. It has the following members:
51847 - `int tz_minuteswest'
51848 - This is the number of minutes west of UTC.
51850 - `int tz_dsttime'
51851 - If nonzero, Daylight Saving Time applies during some part of
51852 - the year.
51854 - The `struct timezone' type is obsolete and should never be used.
51855 - Instead, use the facilities described in *Note Time Zone
51856 - Functions::.
51858 - - Function: int gettimeofday (struct timeval *TP, struct timezone *TZP)
51859 - The `gettimeofday' function returns the current calendar time as
51860 - the elapsed time since the epoch in the `struct timeval' structure
51861 - indicated by TP. (*note Elapsed Time:: for a description of
51862 - `struct timespec'). Information about the time zone is returned in
51863 - the structure pointed at TZP. If the TZP argument is a null
51864 - pointer, time zone information is ignored.
51866 - The return value is `0' on success and `-1' on failure. The
51867 - following `errno' error condition is defined for this function:
51869 - `ENOSYS'
51870 - The operating system does not support getting time zone
51871 - information, and TZP is not a null pointer. The GNU
51872 - operating system does not support using `struct timezone' to
51873 - represent time zone information; that is an obsolete feature
51874 - of 4.3 BSD. Instead, use the facilities described in *Note
51875 - Time Zone Functions::.
51877 - - Function: int settimeofday (const struct timeval *TP, const struct
51878 - timezone *TZP)
51879 - The `settimeofday' function sets the current calendar time in the
51880 - system clock according to the arguments. As for `gettimeofday',
51881 - the calendar time is represented as the elapsed time since the
51882 - epoch. As for `gettimeofday', time zone information is ignored if
51883 - TZP is a null pointer.
51885 - You must be a privileged user in order to use `settimeofday'.
51887 - Some kernels automatically set the system clock from some source
51888 - such as a hardware clock when they start up. Others, including
51889 - Linux, place the system clock in an "invalid" state (in which
51890 - attempts to read the clock fail). A call of `stime' removes the
51891 - system clock from an invalid state, and system startup scripts
51892 - typically run a program that calls `stime'.
51894 - `settimeofday' causes a sudden jump forwards or backwards, which
51895 - can cause a variety of problems in a system. Use `adjtime' (below)
51896 - to make a smooth transition from one time to another by temporarily
51897 - speeding up or slowing down the clock.
51899 - With a Linux kernel, `adjtimex' does the same thing and can also
51900 - make permanent changes to the speed of the system clock so it
51901 - doesn't need to be corrected as often.
51903 - The return value is `0' on success and `-1' on failure. The
51904 - following `errno' error conditions are defined for this function:
51906 - `EPERM'
51907 - This process cannot set the clock because it is not
51908 - privileged.
51910 - `ENOSYS'
51911 - The operating system does not support setting time zone
51912 - information, and TZP is not a null pointer.
51914 - - Function: int adjtime (const struct timeval *DELTA, struct timeval
51915 - *OLDDELTA)
51916 - This function speeds up or slows down the system clock in order to
51917 - make a gradual adjustment. This ensures that the calendar time
51918 - reported by the system clock is always monotonically increasing,
51919 - which might not happen if you simply set the clock.
51921 - The DELTA argument specifies a relative adjustment to be made to
51922 - the clock time. If negative, the system clock is slowed down for a
51923 - while until it has lost this much elapsed time. If positive, the
51924 - system clock is speeded up for a while.
51926 - If the OLDDELTA argument is not a null pointer, the `adjtime'
51927 - function returns information about any previous time adjustment
51928 - that has not yet completed.
51930 - This function is typically used to synchronize the clocks of
51931 - computers in a local network. You must be a privileged user to
51932 - use it.
51934 - With a Linux kernel, you can use the `adjtimex' function to
51935 - permanently change the clock speed.
51937 - The return value is `0' on success and `-1' on failure. The
51938 - following `errno' error condition is defined for this function:
51940 - `EPERM'
51941 - You do not have privilege to set the time.
51943 - *Portability Note:* The `gettimeofday', `settimeofday', and
51944 -`adjtime' functions are derived from BSD.
51946 - Symbols for the following function are declared in `sys/timex.h'.
51948 - - Function: int adjtimex (struct timex *TIMEX)
51949 - `adjtimex' is functionally identical to `ntp_adjtime'. *Note High
51950 - Accuracy Clock::.
51952 - This function is present only with a Linux kernel.
51955 -\x1f
51956 -File: libc.info, Node: Broken-down Time, Next: High Accuracy Clock, Prev: High-Resolution Calendar, Up: Calendar Time
51958 -Broken-down Time
51959 -----------------
51961 - Calendar time is represented by the usual GNU C library functions as
51962 -an elapsed time since a fixed base calendar time. This is convenient
51963 -for computation, but has no relation to the way people normally think of
51964 -calendar time. By contrast, "broken-down time" is a binary
51965 -representation of calendar time separated into year, month, day, and so
51966 -on. Broken-down time values are not useful for calculations, but they
51967 -are useful for printing human readable time information.
51969 - A broken-down time value is always relative to a choice of time
51970 -zone, and it also indicates which time zone that is.
51972 - The symbols in this section are declared in the header file `time.h'.
51974 - - Data Type: struct tm
51975 - This is the data type used to represent a broken-down time. The
51976 - structure contains at least the following members, which can
51977 - appear in any order.
51979 - `int tm_sec'
51980 - This is the number of full seconds since the top of the
51981 - minute (normally in the range `0' through `59', but the
51982 - actual upper limit is `60', to allow for leap seconds if leap
51983 - second support is available).
51985 - `int tm_min'
51986 - This is the number of full minutes since the top of the hour
51987 - (in the range `0' through `59').
51989 - `int tm_hour'
51990 - This is the number of full hours past midnight (in the range
51991 - `0' through `23').
51993 - `int tm_mday'
51994 - This is the ordinal day of the month (in the range `1'
51995 - through `31'). Watch out for this one! As the only ordinal
51996 - number in the structure, it is inconsistent with the rest of
51997 - the structure.
51999 - `int tm_mon'
52000 - This is the number of full calendar months since the
52001 - beginning of the year (in the range `0' through `11'). Watch
52002 - out for this one! People usually use ordinal numbers for
52003 - month-of-year (where January = 1).
52005 - `int tm_year'
52006 - This is the number of full calendar years since 1900.
52008 - `int tm_wday'
52009 - This is the number of full days since Sunday (in the range
52010 - `0' through `6').
52012 - `int tm_yday'
52013 - This is the number of full days since the beginning of the
52014 - year (in the range `0' through `365').
52016 - `int tm_isdst'
52017 - This is a flag that indicates whether Daylight Saving Time is
52018 - (or was, or will be) in effect at the time described. The
52019 - value is positive if Daylight Saving Time is in effect, zero
52020 - if it is not, and negative if the information is not
52021 - available.
52023 - `long int tm_gmtoff'
52024 - This field describes the time zone that was used to compute
52025 - this broken-down time value, including any adjustment for
52026 - daylight saving; it is the number of seconds that you must
52027 - add to UTC to get local time. You can also think of this as
52028 - the number of seconds east of UTC. For example, for U.S.
52029 - Eastern Standard Time, the value is `-5*60*60'. The
52030 - `tm_gmtoff' field is derived from BSD and is a GNU library
52031 - extension; it is not visible in a strict ISO C environment.
52033 - `const char *tm_zone'
52034 - This field is the name for the time zone that was used to
52035 - compute this broken-down time value. Like `tm_gmtoff', this
52036 - field is a BSD and GNU extension, and is not visible in a
52037 - strict ISO C environment.
52039 - - Function: struct tm * localtime (const time_t *TIME)
52040 - The `localtime' function converts the simple time pointed to by
52041 - TIME to broken-down time representation, expressed relative to the
52042 - user's specified time zone.
52044 - The return value is a pointer to a static broken-down time
52045 - structure, which might be overwritten by subsequent calls to
52046 - `ctime', `gmtime', or `localtime'. (But no other library function
52047 - overwrites the contents of this object.)
52049 - The return value is the null pointer if TIME cannot be represented
52050 - as a broken-down time; typically this is because the year cannot
52051 - fit into an `int'.
52053 - Calling `localtime' has one other effect: it sets the variable
52054 - `tzname' with information about the current time zone. *Note Time
52055 - Zone Functions::.
52057 - Using the `localtime' function is a big problem in multi-threaded
52058 -programs. The result is returned in a static buffer and this is used in
52059 -all threads. POSIX.1c introduced a variant of this function.
52061 - - Function: struct tm * localtime_r (const time_t *TIME, struct tm
52062 - *RESULTP)
52063 - The `localtime_r' function works just like the `localtime'
52064 - function. It takes a pointer to a variable containing a simple
52065 - time and converts it to the broken-down time format.
52067 - But the result is not placed in a static buffer. Instead it is
52068 - placed in the object of type `struct tm' to which the parameter
52069 - RESULTP points.
52071 - If the conversion is successful the function returns a pointer to
52072 - the object the result was written into, i.e., it returns RESULTP.
52074 - - Function: struct tm * gmtime (const time_t *TIME)
52075 - This function is similar to `localtime', except that the
52076 - broken-down time is expressed as Coordinated Universal Time (UTC)
52077 - (formerly called Greenwich Mean Time (GMT)) rather than relative
52078 - to a local time zone.
52081 - As for the `localtime' function we have the problem that the result
52082 -is placed in a static variable. POSIX.1c also provides a replacement
52083 -for `gmtime'.
52085 - - Function: struct tm * gmtime_r (const time_t *TIME, struct tm
52086 - *RESULTP)
52087 - This function is similar to `localtime_r', except that it converts
52088 - just like `gmtime' the given time as Coordinated Universal Time.
52090 - If the conversion is successful the function returns a pointer to
52091 - the object the result was written into, i.e., it returns RESULTP.
52093 - - Function: time_t mktime (struct tm *BROKENTIME)
52094 - The `mktime' function is used to convert a broken-down time
52095 - structure to a simple time representation. It also "normalizes"
52096 - the contents of the broken-down time structure, by filling in the
52097 - day of week and day of year based on the other date and time
52098 - components.
52100 - The `mktime' function ignores the specified contents of the
52101 - `tm_wday' and `tm_yday' members of the broken-down time structure.
52102 - It uses the values of the other components to determine the
52103 - calendar time; it's permissible for these components to have
52104 - unnormalized values outside their normal ranges. The last thing
52105 - that `mktime' does is adjust the components of the BROKENTIME
52106 - structure (including the `tm_wday' and `tm_yday').
52108 - If the specified broken-down time cannot be represented as a
52109 - simple time, `mktime' returns a value of `(time_t)(-1)' and does
52110 - not modify the contents of BROKENTIME.
52112 - Calling `mktime' also sets the variable `tzname' with information
52113 - about the current time zone. *Note Time Zone Functions::.
52115 - - Function: time_t timelocal (struct tm *BROKENTIME)
52116 - `timelocal' is functionally identical to `mktime', but more
52117 - mnemonically named. Note that it is the inverse of the `localtime'
52118 - function.
52120 - *Portability note:* `mktime' is essentially universally
52121 - available. `timelocal' is rather rare.
52124 - - Function: time_t timegm (struct tm *BROKENTIME)
52125 - `timegm' is functionally identical to `mktime' except it always
52126 - takes the input values to be Coordinated Universal Time (UTC)
52127 - regardless of any local time zone setting.
52129 - Note that `timegm' is the inverse of `gmtime'.
52131 - *Portability note:* `mktime' is essentially universally
52132 - available. `timegm' is rather rare. For the most portable
52133 - conversion from a UTC broken-down time to a simple time, set the
52134 - `TZ' environment variable to UTC, call `mktime', then set `TZ'
52135 - back.
52138 -\x1f
52139 -File: libc.info, Node: High Accuracy Clock, Next: Formatting Calendar Time, Prev: Broken-down Time, Up: Calendar Time
52141 -High Accuracy Clock
52142 --------------------
52144 - The `ntp_gettime' and `ntp_adjtime' functions provide an interface
52145 -to monitor and manipulate the system clock to maintain high accuracy
52146 -time. For example, you can fine tune the speed of the clock or
52147 -synchronize it with another time source.
52149 - A typical use of these functions is by a server implementing the
52150 -Network Time Protocol to synchronize the clocks of multiple systems and
52151 -high precision clocks.
52153 - These functions are declared in `sys/timex.h'.
52155 - - Data Type: struct ntptimeval
52156 - This structure is used for information about the system clock. It
52157 - contains the following members:
52158 - `struct timeval time'
52159 - This is the current calendar time, expressed as the elapsed
52160 - time since the epoch. The `struct timeval' data type is
52161 - described in *Note Elapsed Time::.
52163 - `long int maxerror'
52164 - This is the maximum error, measured in microseconds. Unless
52165 - updated via `ntp_adjtime' periodically, this value will reach
52166 - some platform-specific maximum value.
52168 - `long int esterror'
52169 - This is the estimated error, measured in microseconds. This
52170 - value can be set by `ntp_adjtime' to indicate the estimated
52171 - offset of the system clock from the true calendar time.
52173 - - Function: int ntp_gettime (struct ntptimeval *TPTR)
52174 - The `ntp_gettime' function sets the structure pointed to by TPTR
52175 - to current values. The elements of the structure afterwards
52176 - contain the values the timer implementation in the kernel assumes.
52177 - They might or might not be correct. If they are not a
52178 - `ntp_adjtime' call is necessary.
52180 - The return value is `0' on success and other values on failure.
52181 - The following `errno' error conditions are defined for this
52182 - function:
52184 - `TIME_ERROR'
52185 - The precision clock model is not properly set up at the
52186 - moment, thus the clock must be considered unsynchronized, and
52187 - the values should be treated with care.
52189 - - Data Type: struct timex
52190 - This structure is used to control and monitor the system clock. It
52191 - contains the following members:
52192 - `unsigned int modes'
52193 - This variable controls whether and which values are set.
52194 - Several symbolic constants have to be combined with _binary
52195 - or_ to specify the effective mode. These constants start
52196 - with `MOD_'.
52198 - `long int offset'
52199 - This value indicates the current offset of the system clock
52200 - from the true calendar time. The value is given in
52201 - microseconds. If bit `MOD_OFFSET' is set in `modes', the
52202 - offset (and possibly other dependent values) can be set. The
52203 - offset's absolute value must not exceed `MAXPHASE'.
52205 - `long int frequency'
52206 - This value indicates the difference in frequency between the
52207 - true calendar time and the system clock. The value is
52208 - expressed as scaled PPM (parts per million, 0.0001%). The
52209 - scaling is `1 << SHIFT_USEC'. The value can be set with bit
52210 - `MOD_FREQUENCY', but the absolute value must not exceed
52211 - `MAXFREQ'.
52213 - `long int maxerror'
52214 - This is the maximum error, measured in microseconds. A new
52215 - value can be set using bit `MOD_MAXERROR'. Unless updated via
52216 - `ntp_adjtime' periodically, this value will increase steadily
52217 - and reach some platform-specific maximum value.
52219 - `long int esterror'
52220 - This is the estimated error, measured in microseconds. This
52221 - value can be set using bit `MOD_ESTERROR'.
52223 - `int status'
52224 - This variable reflects the various states of the clock
52225 - machinery. There are symbolic constants for the significant
52226 - bits, starting with `STA_'. Some of these flags can be
52227 - updated using the `MOD_STATUS' bit.
52229 - `long int constant'
52230 - This value represents the bandwidth or stiffness of the PLL
52231 - (phase locked loop) implemented in the kernel. The value can
52232 - be changed using bit `MOD_TIMECONST'.
52234 - `long int precision'
52235 - This value represents the accuracy or the maximum error when
52236 - reading the system clock. The value is expressed in
52237 - microseconds.
52239 - `long int tolerance'
52240 - This value represents the maximum frequency error of the
52241 - system clock in scaled PPM. This value is used to increase
52242 - the `maxerror' every second.
52244 - `struct timeval time'
52245 - The current calendar time.
52247 - `long int tick'
52248 - The elapsed time between clock ticks in microseconds. A
52249 - clock tick is a periodic timer interrupt on which the system
52250 - clock is based.
52252 - `long int ppsfreq'
52253 - This is the first of a few optional variables that are
52254 - present only if the system clock can use a PPS (pulse per
52255 - second) signal to discipline the system clock. The value is
52256 - expressed in scaled PPM and it denotes the difference in
52257 - frequency between the system clock and the PPS signal.
52259 - `long int jitter'
52260 - This value expresses a median filtered average of the PPS
52261 - signal's dispersion in microseconds.
52263 - `int shift'
52264 - This value is a binary exponent for the duration of the PPS
52265 - calibration interval, ranging from `PPS_SHIFT' to
52266 - `PPS_SHIFTMAX'.
52268 - `long int stabil'
52269 - This value represents the median filtered dispersion of the
52270 - PPS frequency in scaled PPM.
52272 - `long int jitcnt'
52273 - This counter represents the number of pulses where the jitter
52274 - exceeded the allowed maximum `MAXTIME'.
52276 - `long int calcnt'
52277 - This counter reflects the number of successful calibration
52278 - intervals.
52280 - `long int errcnt'
52281 - This counter represents the number of calibration errors
52282 - (caused by large offsets or jitter).
52284 - `long int stbcnt'
52285 - This counter denotes the number of of calibrations where the
52286 - stability exceeded the threshold.
52288 - - Function: int ntp_adjtime (struct timex *TPTR)
52289 - The `ntp_adjtime' function sets the structure specified by TPTR to
52290 - current values.
52292 - In addition, `ntp_adjtime' updates some settings to match what you
52293 - pass to it in *TPTR. Use the `modes' element of *TPTR to select
52294 - what settings to update. You can set `offset', `freq',
52295 - `maxerror', `esterror', `status', `constant', and `tick'.
52297 - `modes' = zero means set nothing.
52299 - Only the superuser can update settings.
52301 - The return value is `0' on success and other values on failure.
52302 - The following `errno' error conditions are defined for this
52303 - function:
52305 - `TIME_ERROR'
52306 - The high accuracy clock model is not properly set up at the
52307 - moment, thus the clock must be considered unsynchronized, and
52308 - the values should be treated with care. Another reason could
52309 - be that the specified new values are not allowed.
52311 - `EPERM'
52312 - The process specified a settings update, but is not superuser.
52314 - For more details see RFC1305 (Network Time Protocol, Version 3) and
52315 - related documents.
52317 - *Portability note:* Early versions of the GNU C library did not
52318 - have this function but did have the synonymous `adjtimex'.
52321 diff -u -udbrN glibc-2.3.2/manual/libc.info-36 glibc-2.3.2-200304020432/manual/libc.info-36
52322 --- glibc-2.3.2/manual/libc.info-36 Sat Mar 1 02:39:41 2003
52323 +++ glibc-2.3.2-200304020432/manual/libc.info-36 Thu Jan 1 01:00:00 1970
52324 @@ -1,1261 +0,0 @@
52325 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
52327 -INFO-DIR-SECTION GNU libraries
52328 -START-INFO-DIR-ENTRY
52329 -* Libc: (libc). C library.
52330 -END-INFO-DIR-ENTRY
52332 - This file documents the GNU C library.
52334 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
52335 -Reference Manual', for Version 2.3.x.
52337 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
52338 -Free Software Foundation, Inc.
52340 - Permission is granted to copy, distribute and/or modify this document
52341 -under the terms of the GNU Free Documentation License, Version 1.1 or
52342 -any later version published by the Free Software Foundation; with the
52343 -Invariant Sections being "Free Software Needs Free Documentation" and
52344 -"GNU Lesser General Public License", the Front-Cover texts being (a)
52345 -(see below), and with the Back-Cover Texts being (b) (see below). A
52346 -copy of the license is included in the section entitled "GNU Free
52347 -Documentation License".
52349 - (a) The FSF's Front-Cover Text is:
52351 - A GNU Manual
52353 - (b) The FSF's Back-Cover Text is:
52355 - You have freedom to copy and modify this GNU Manual, like GNU
52356 -software. Copies published by the Free Software Foundation raise
52357 -funds for GNU development.
52359 -\x1f
52360 -File: libc.info, Node: Formatting Calendar Time, Next: Parsing Date and Time, Prev: High Accuracy Clock, Up: Calendar Time
52362 -Formatting Calendar Time
52363 -------------------------
52365 - The functions described in this section format calendar time values
52366 -as strings. These functions are declared in the header file `time.h'.
52368 - - Function: char * asctime (const struct tm *BROKENTIME)
52369 - The `asctime' function converts the broken-down time value that
52370 - BROKENTIME points to into a string in a standard format:
52372 - "Tue May 21 13:46:22 1991\n"
52374 - The abbreviations for the days of week are: `Sun', `Mon', `Tue',
52375 - `Wed', `Thu', `Fri', and `Sat'.
52377 - The abbreviations for the months are: `Jan', `Feb', `Mar', `Apr',
52378 - `May', `Jun', `Jul', `Aug', `Sep', `Oct', `Nov', and `Dec'.
52380 - The return value points to a statically allocated string, which
52381 - might be overwritten by subsequent calls to `asctime' or `ctime'.
52382 - (But no other library function overwrites the contents of this
52383 - string.)
52385 - - Function: char * asctime_r (const struct tm *BROKENTIME, char
52386 - *BUFFER)
52387 - This function is similar to `asctime' but instead of placing the
52388 - result in a static buffer it writes the string in the buffer
52389 - pointed to by the parameter BUFFER. This buffer should have room
52390 - for at least 26 bytes, including the terminating null.
52392 - If no error occurred the function returns a pointer to the string
52393 - the result was written into, i.e., it returns BUFFER. Otherwise
52394 - return `NULL'.
52396 - - Function: char * ctime (const time_t *TIME)
52397 - The `ctime' function is similar to `asctime', except that you
52398 - specify the calendar time argument as a `time_t' simple time value
52399 - rather than in broken-down local time format. It is equivalent to
52401 - asctime (localtime (TIME))
52403 - `ctime' sets the variable `tzname', because `localtime' does so.
52404 - *Note Time Zone Functions::.
52406 - - Function: char * ctime_r (const time_t *TIME, char *BUFFER)
52407 - This function is similar to `ctime', but places the result in the
52408 - string pointed to by BUFFER. It is equivalent to (written using
52409 - gcc extensions, *note Statement Exprs: (gcc)Statement Exprs.):
52411 - ({ struct tm tm; asctime_r (localtime_r (time, &tm), buf); })
52413 - If no error occurred the function returns a pointer to the string
52414 - the result was written into, i.e., it returns BUFFER. Otherwise
52415 - return `NULL'.
52417 - - Function: size_t strftime (char *S, size_t SIZE, const char
52418 - *TEMPLATE, const struct tm *BROKENTIME)
52419 - This function is similar to the `sprintf' function (*note
52420 - Formatted Input::), but the conversion specifications that can
52421 - appear in the format template TEMPLATE are specialized for
52422 - printing components of the date and time BROKENTIME according to
52423 - the locale currently specified for time conversion (*note
52424 - Locales::).
52426 - Ordinary characters appearing in the TEMPLATE are copied to the
52427 - output string S; this can include multibyte character sequences.
52428 - Conversion specifiers are introduced by a `%' character, followed
52429 - by an optional flag which can be one of the following. These flags
52430 - are all GNU extensions. The first three affect only the output of
52431 - numbers:
52433 - `_'
52434 - The number is padded with spaces.
52436 - `-'
52437 - The number is not padded at all.
52439 - `0'
52440 - The number is padded with zeros even if the format specifies
52441 - padding with spaces.
52443 - `^'
52444 - The output uses uppercase characters, but only if this is
52445 - possible (*note Case Conversion::).
52447 - The default action is to pad the number with zeros to keep it a
52448 - constant width. Numbers that do not have a range indicated below
52449 - are never padded, since there is no natural width for them.
52451 - Following the flag an optional specification of the width is
52452 - possible. This is specified in decimal notation. If the natural
52453 - size of the output is of the field has less than the specified
52454 - number of characters, the result is written right adjusted and
52455 - space padded to the given size.
52457 - An optional modifier can follow the optional flag and width
52458 - specification. The modifiers, which were first standardized by
52459 - POSIX.2-1992 and by ISO C99, are:
52461 - `E'
52462 - Use the locale's alternate representation for date and time.
52463 - This modifier applies to the `%c', `%C', `%x', `%X', `%y' and
52464 - `%Y' format specifiers. In a Japanese locale, for example,
52465 - `%Ex' might yield a date format based on the Japanese
52466 - Emperors' reigns.
52468 - `O'
52469 - Use the locale's alternate numeric symbols for numbers. This
52470 - modifier applies only to numeric format specifiers.
52472 - If the format supports the modifier but no alternate representation
52473 - is available, it is ignored.
52475 - The conversion specifier ends with a format specifier taken from
52476 - the following list. The whole `%' sequence is replaced in the
52477 - output string as follows:
52479 - `%a'
52480 - The abbreviated weekday name according to the current locale.
52482 - `%A'
52483 - The full weekday name according to the current locale.
52485 - `%b'
52486 - The abbreviated month name according to the current locale.
52488 - `%B'
52489 - The full month name according to the current locale.
52491 - `%c'
52492 - The preferred calendar time representation for the current
52493 - locale.
52495 - `%C'
52496 - The century of the year. This is equivalent to the greatest
52497 - integer not greater than the year divided by 100.
52499 - This format was first standardized by POSIX.2-1992 and by
52500 - ISO C99.
52502 - `%d'
52503 - The day of the month as a decimal number (range `01' through
52504 - `31').
52506 - `%D'
52507 - The date using the format `%m/%d/%y'.
52509 - This format was first standardized by POSIX.2-1992 and by
52510 - ISO C99.
52512 - `%e'
52513 - The day of the month like with `%d', but padded with blank
52514 - (range ` 1' through `31').
52516 - This format was first standardized by POSIX.2-1992 and by
52517 - ISO C99.
52519 - `%F'
52520 - The date using the format `%Y-%m-%d'. This is the form
52521 - specified in the ISO 8601 standard and is the preferred form
52522 - for all uses.
52524 - This format was first standardized by ISO C99 and by
52525 - POSIX.1-2001.
52527 - `%g'
52528 - The year corresponding to the ISO week number, but without
52529 - the century (range `00' through `99'). This has the same
52530 - format and value as `%y', except that if the ISO week number
52531 - (see `%V') belongs to the previous or next year, that year is
52532 - used instead.
52534 - This format was first standardized by ISO C99 and by
52535 - POSIX.1-2001.
52537 - `%G'
52538 - The year corresponding to the ISO week number. This has the
52539 - same format and value as `%Y', except that if the ISO week
52540 - number (see `%V') belongs to the previous or next year, that
52541 - year is used instead.
52543 - This format was first standardized by ISO C99 and by
52544 - POSIX.1-2001 but was previously available as a GNU extension.
52546 - `%h'
52547 - The abbreviated month name according to the current locale.
52548 - The action is the same as for `%b'.
52550 - This format was first standardized by POSIX.2-1992 and by
52551 - ISO C99.
52553 - `%H'
52554 - The hour as a decimal number, using a 24-hour clock (range
52555 - `00' through `23').
52557 - `%I'
52558 - The hour as a decimal number, using a 12-hour clock (range
52559 - `01' through `12').
52561 - `%j'
52562 - The day of the year as a decimal number (range `001' through
52563 - `366').
52565 - `%k'
52566 - The hour as a decimal number, using a 24-hour clock like
52567 - `%H', but padded with blank (range ` 0' through `23').
52569 - This format is a GNU extension.
52571 - `%l'
52572 - The hour as a decimal number, using a 12-hour clock like
52573 - `%I', but padded with blank (range ` 1' through `12').
52575 - This format is a GNU extension.
52577 - `%m'
52578 - The month as a decimal number (range `01' through `12').
52580 - `%M'
52581 - The minute as a decimal number (range `00' through `59').
52583 - `%n'
52584 - A single `\n' (newline) character.
52586 - This format was first standardized by POSIX.2-1992 and by
52587 - ISO C99.
52589 - `%p'
52590 - Either `AM' or `PM', according to the given time value; or the
52591 - corresponding strings for the current locale. Noon is
52592 - treated as `PM' and midnight as `AM'. In most locales
52593 - `AM'/`PM' format is not supported, in such cases `"%p"'
52594 - yields an empty string.
52596 - `%P'
52597 - Either `am' or `pm', according to the given time value; or the
52598 - corresponding strings for the current locale, printed in
52599 - lowercase characters. Noon is treated as `pm' and midnight
52600 - as `am'. In most locales `AM'/`PM' format is not supported,
52601 - in such cases `"%P"' yields an empty string.
52603 - This format is a GNU extension.
52605 - `%r'
52606 - The complete calendar time using the AM/PM format of the
52607 - current locale.
52609 - This format was first standardized by POSIX.2-1992 and by
52610 - ISO C99. In the POSIX locale, this format is equivalent to
52611 - `%I:%M:%S %p'.
52613 - `%R'
52614 - The hour and minute in decimal numbers using the format
52615 - `%H:%M'.
52617 - This format was first standardized by ISO C99 and by
52618 - POSIX.1-2001 but was previously available as a GNU extension.
52620 - `%s'
52621 - The number of seconds since the epoch, i.e., since 1970-01-01
52622 - 00:00:00 UTC. Leap seconds are not counted unless leap
52623 - second support is available.
52625 - This format is a GNU extension.
52627 - `%S'
52628 - The seconds as a decimal number (range `00' through `60').
52630 - `%t'
52631 - A single `\t' (tabulator) character.
52633 - This format was first standardized by POSIX.2-1992 and by
52634 - ISO C99.
52636 - `%T'
52637 - The time of day using decimal numbers using the format
52638 - `%H:%M:%S'.
52640 - This format was first standardized by POSIX.2-1992 and by
52641 - ISO C99.
52643 - `%u'
52644 - The day of the week as a decimal number (range `1' through
52645 - `7'), Monday being `1'.
52647 - This format was first standardized by POSIX.2-1992 and by
52648 - ISO C99.
52650 - `%U'
52651 - The week number of the current year as a decimal number
52652 - (range `00' through `53'), starting with the first Sunday as
52653 - the first day of the first week. Days preceding the first
52654 - Sunday in the year are considered to be in week `00'.
52656 - `%V'
52657 - The ISO 8601:1988 week number as a decimal number (range `01'
52658 - through `53'). ISO weeks start with Monday and end with
52659 - Sunday. Week `01' of a year is the first week which has the
52660 - majority of its days in that year; this is equivalent to the
52661 - week containing the year's first Thursday, and it is also
52662 - equivalent to the week containing January 4. Week `01' of a
52663 - year can contain days from the previous year. The week
52664 - before week `01' of a year is the last week (`52' or `53') of
52665 - the previous year even if it contains days from the new year.
52667 - This format was first standardized by POSIX.2-1992 and by
52668 - ISO C99.
52670 - `%w'
52671 - The day of the week as a decimal number (range `0' through
52672 - `6'), Sunday being `0'.
52674 - `%W'
52675 - The week number of the current year as a decimal number
52676 - (range `00' through `53'), starting with the first Monday as
52677 - the first day of the first week. All days preceding the
52678 - first Monday in the year are considered to be in week `00'.
52680 - `%x'
52681 - The preferred date representation for the current locale.
52683 - `%X'
52684 - The preferred time of day representation for the current
52685 - locale.
52687 - `%y'
52688 - The year without a century as a decimal number (range `00'
52689 - through `99'). This is equivalent to the year modulo 100.
52691 - `%Y'
52692 - The year as a decimal number, using the Gregorian calendar.
52693 - Years before the year `1' are numbered `0', `-1', and so on.
52695 - `%z'
52696 - RFC 822/ISO 8601:1988 style numeric time zone (e.g., `-0600'
52697 - or `+0100'), or nothing if no time zone is determinable.
52699 - This format was first standardized by ISO C99 and by
52700 - POSIX.1-2001 but was previously available as a GNU extension.
52702 - In the POSIX locale, a full RFC 822 timestamp is generated by
52703 - the format `"%a, %d %b %Y %H:%M:%S %z"' (or the equivalent
52704 - `"%a, %d %b %Y %T %z"').
52706 - `%Z'
52707 - The time zone abbreviation (empty if the time zone can't be
52708 - determined).
52710 - `%%'
52711 - A literal `%' character.
52713 - The SIZE parameter can be used to specify the maximum number of
52714 - characters to be stored in the array S, including the terminating
52715 - null character. If the formatted time requires more than SIZE
52716 - characters, `strftime' returns zero and the contents of the array
52717 - S are undefined. Otherwise the return value indicates the number
52718 - of characters placed in the array S, not including the terminating
52719 - null character.
52721 - _Warning:_ This convention for the return value which is prescribed
52722 - in ISO C can lead to problems in some situations. For certain
52723 - format strings and certain locales the output really can be the
52724 - empty string and this cannot be discovered by testing the return
52725 - value only. E.g., in most locales the AM/PM time format is not
52726 - supported (most of the world uses the 24 hour time
52727 - representation). In such locales `"%p"' will return the empty
52728 - string, i.e., the return value is zero. To detect situations like
52729 - this something similar to the following code should be used:
52731 - buf[0] = '\1';
52732 - len = strftime (buf, bufsize, format, tp);
52733 - if (len == 0 && buf[0] != '\0')
52735 - /* Something went wrong in the strftime call. */
52736 - ...
52739 - If S is a null pointer, `strftime' does not actually write
52740 - anything, but instead returns the number of characters it would
52741 - have written.
52743 - According to POSIX.1 every call to `strftime' implies a call to
52744 - `tzset'. So the contents of the environment variable `TZ' is
52745 - examined before any output is produced.
52747 - For an example of `strftime', see *Note Time Functions Example::.
52749 - - Function: size_t wcsftime (wchar_t *S, size_t SIZE, const wchar_t
52750 - *TEMPLATE, const struct tm *BROKENTIME)
52751 - The `wcsftime' function is equivalent to the `strftime' function
52752 - with the difference that it operates on wide character strings.
52753 - The buffer where the result is stored, pointed to by S, must be an
52754 - array of wide characters. The parameter SIZE which specifies the
52755 - size of the output buffer gives the number of wide character, not
52756 - the number of bytes.
52758 - Also the format string TEMPLATE is a wide character string. Since
52759 - all characters needed to specify the format string are in the basic
52760 - character set it is portably possible to write format strings in
52761 - the C source code using the `L"..."' notation. The parameter
52762 - BROKENTIME has the same meaning as in the `strftime' call.
52764 - The `wcsftime' function supports the same flags, modifiers, and
52765 - format specifiers as the `strftime' function.
52767 - The return value of `wcsftime' is the number of wide characters
52768 - stored in `s'. When more characters would have to be written than
52769 - can be placed in the buffer S the return value is zero, with the
52770 - same problems indicated in the `strftime' documentation.
52772 -\x1f
52773 -File: libc.info, Node: Parsing Date and Time, Next: TZ Variable, Prev: Formatting Calendar Time, Up: Calendar Time
52775 -Convert textual time and date information back
52776 -----------------------------------------------
52778 - The ISO C standard does not specify any functions which can convert
52779 -the output of the `strftime' function back into a binary format. This
52780 -led to a variety of more-or-less successful implementations with
52781 -different interfaces over the years. Then the Unix standard was
52782 -extended by the addition of two functions: `strptime' and `getdate'.
52783 -Both have strange interfaces but at least they are widely available.
52785 -* Menu:
52787 -* Low-Level Time String Parsing:: Interpret string according to given format.
52788 -* General Time String Parsing:: User-friendly function to parse data and
52789 - time strings.
52791 -\x1f
52792 -File: libc.info, Node: Low-Level Time String Parsing, Next: General Time String Parsing, Up: Parsing Date and Time
52794 -Interpret string according to given format
52795 -..........................................
52797 - he first function is rather low-level. It is nevertheless frequently
52798 -used in software since it is better known. Its interface and
52799 -implementation are heavily influenced by the `getdate' function, which
52800 -is defined and implemented in terms of calls to `strptime'.
52802 - - Function: char * strptime (const char *S, const char *FMT, struct tm
52803 - *TP)
52804 - The `strptime' function parses the input string S according to the
52805 - format string FMT and stores its results in the structure TP.
52807 - The input string could be generated by a `strftime' call or
52808 - obtained any other way. It does not need to be in a
52809 - human-recognizable format; e.g. a date passed as `"02:1999:9"' is
52810 - acceptable, even though it is ambiguous without context. As long
52811 - as the format string FMT matches the input string the function
52812 - will succeed.
52814 - The user has to make sure, though, that the input can be parsed in
52815 - a unambiguous way. The string `"1999112"' can be parsed using the
52816 - format `"%Y%m%d"' as 1999-1-12, 1999-11-2, or even 19991-1-2. It
52817 - is necessary to add appropriate separators to reliably get results.
52819 - The format string consists of the same components as the format
52820 - string of the `strftime' function. The only difference is that
52821 - the flags `_', `-', `0', and `^' are not allowed. Several of the
52822 - distinct formats of `strftime' do the same work in `strptime'
52823 - since differences like case of the input do not matter. For
52824 - reasons of symmetry all formats are supported, though.
52826 - The modifiers `E' and `O' are also allowed everywhere the
52827 - `strftime' function allows them.
52829 - The formats are:
52831 - `%a'
52832 - `%A'
52833 - The weekday name according to the current locale, in
52834 - abbreviated form or the full name.
52836 - `%b'
52837 - `%B'
52838 - `%h'
52839 - The month name according to the current locale, in
52840 - abbreviated form or the full name.
52842 - `%c'
52843 - The date and time representation for the current locale.
52845 - `%Ec'
52846 - Like `%c' but the locale's alternative date and time format
52847 - is used.
52849 - `%C'
52850 - The century of the year.
52852 - It makes sense to use this format only if the format string
52853 - also contains the `%y' format.
52855 - `%EC'
52856 - The locale's representation of the period.
52858 - Unlike `%C' it sometimes makes sense to use this format since
52859 - some cultures represent years relative to the beginning of
52860 - eras instead of using the Gregorian years.
52862 - `%d'
52864 - `%e'
52865 - The day of the month as a decimal number (range `1' through
52866 - `31'). Leading zeroes are permitted but not required.
52868 - `%Od'
52869 - `%Oe'
52870 - Same as `%d' but using the locale's alternative numeric
52871 - symbols.
52873 - Leading zeroes are permitted but not required.
52875 - `%D'
52876 - Equivalent to `%m/%d/%y'.
52878 - `%F'
52879 - Equivalent to `%Y-%m-%d', which is the ISO 8601 date format.
52881 - This is a GNU extension following an ISO C99 extension to
52882 - `strftime'.
52884 - `%g'
52885 - The year corresponding to the ISO week number, but without
52886 - the century (range `00' through `99').
52888 - _Note:_ Currently, this is not fully implemented. The format
52889 - is recognized, input is consumed but no field in TM is set.
52891 - This format is a GNU extension following a GNU extension of
52892 - `strftime'.
52894 - `%G'
52895 - The year corresponding to the ISO week number.
52897 - _Note:_ Currently, this is not fully implemented. The format
52898 - is recognized, input is consumed but no field in TM is set.
52900 - This format is a GNU extension following a GNU extension of
52901 - `strftime'.
52903 - `%H'
52904 - `%k'
52905 - The hour as a decimal number, using a 24-hour clock (range
52906 - `00' through `23').
52908 - `%k' is a GNU extension following a GNU extension of
52909 - `strftime'.
52911 - `%OH'
52912 - Same as `%H' but using the locale's alternative numeric
52913 - symbols.
52915 - `%I'
52916 - `%l'
52917 - The hour as a decimal number, using a 12-hour clock (range
52918 - `01' through `12').
52920 - `%l' is a GNU extension following a GNU extension of
52921 - `strftime'.
52923 - `%OI'
52924 - Same as `%I' but using the locale's alternative numeric
52925 - symbols.
52927 - `%j'
52928 - The day of the year as a decimal number (range `1' through
52929 - `366').
52931 - Leading zeroes are permitted but not required.
52933 - `%m'
52934 - The month as a decimal number (range `1' through `12').
52936 - Leading zeroes are permitted but not required.
52938 - `%Om'
52939 - Same as `%m' but using the locale's alternative numeric
52940 - symbols.
52942 - `%M'
52943 - The minute as a decimal number (range `0' through `59').
52945 - Leading zeroes are permitted but not required.
52947 - `%OM'
52948 - Same as `%M' but using the locale's alternative numeric
52949 - symbols.
52951 - `%n'
52952 - `%t'
52953 - Matches any white space.
52955 - `%p'
52957 - `%P'
52958 - The locale-dependent equivalent to `AM' or `PM'.
52960 - This format is not useful unless `%I' or `%l' is also used.
52961 - Another complication is that the locale might not define
52962 - these values at all and therefore the conversion fails.
52964 - `%P' is a GNU extension following a GNU extension to
52965 - `strftime'.
52967 - `%r'
52968 - The complete time using the AM/PM format of the current
52969 - locale.
52971 - A complication is that the locale might not define this
52972 - format at all and therefore the conversion fails.
52974 - `%R'
52975 - The hour and minute in decimal numbers using the format
52976 - `%H:%M'.
52978 - `%R' is a GNU extension following a GNU extension to
52979 - `strftime'.
52981 - `%s'
52982 - The number of seconds since the epoch, i.e., since 1970-01-01
52983 - 00:00:00 UTC. Leap seconds are not counted unless leap
52984 - second support is available.
52986 - `%s' is a GNU extension following a GNU extension to
52987 - `strftime'.
52989 - `%S'
52990 - The seconds as a decimal number (range `0' through `60').
52992 - Leading zeroes are permitted but not required.
52994 - *Note:* The Unix specification says the upper bound on this
52995 - value is `61', a result of a decision to allow double leap
52996 - seconds. You will not see the value `61' because no minute
52997 - has more than one leap second, but the myth persists.
52999 - `%OS'
53000 - Same as `%S' but using the locale's alternative numeric
53001 - symbols.
53003 - `%T'
53004 - Equivalent to the use of `%H:%M:%S' in this place.
53006 - `%u'
53007 - The day of the week as a decimal number (range `1' through
53008 - `7'), Monday being `1'.
53010 - Leading zeroes are permitted but not required.
53012 - _Note:_ Currently, this is not fully implemented. The format
53013 - is recognized, input is consumed but no field in TM is set.
53015 - `%U'
53016 - The week number of the current year as a decimal number
53017 - (range `0' through `53').
53019 - Leading zeroes are permitted but not required.
53021 - `%OU'
53022 - Same as `%U' but using the locale's alternative numeric
53023 - symbols.
53025 - `%V'
53026 - The ISO 8601:1988 week number as a decimal number (range `1'
53027 - through `53').
53029 - Leading zeroes are permitted but not required.
53031 - _Note:_ Currently, this is not fully implemented. The format
53032 - is recognized, input is consumed but no field in TM is set.
53034 - `%w'
53035 - The day of the week as a decimal number (range `0' through
53036 - `6'), Sunday being `0'.
53038 - Leading zeroes are permitted but not required.
53040 - _Note:_ Currently, this is not fully implemented. The format
53041 - is recognized, input is consumed but no field in TM is set.
53043 - `%Ow'
53044 - Same as `%w' but using the locale's alternative numeric
53045 - symbols.
53047 - `%W'
53048 - The week number of the current year as a decimal number
53049 - (range `0' through `53').
53051 - Leading zeroes are permitted but not required.
53053 - _Note:_ Currently, this is not fully implemented. The format
53054 - is recognized, input is consumed but no field in TM is set.
53056 - `%OW'
53057 - Same as `%W' but using the locale's alternative numeric
53058 - symbols.
53060 - `%x'
53061 - The date using the locale's date format.
53063 - `%Ex'
53064 - Like `%x' but the locale's alternative data representation is
53065 - used.
53067 - `%X'
53068 - The time using the locale's time format.
53070 - `%EX'
53071 - Like `%X' but the locale's alternative time representation is
53072 - used.
53074 - `%y'
53075 - The year without a century as a decimal number (range `0'
53076 - through `99').
53078 - Leading zeroes are permitted but not required.
53080 - Note that it is questionable to use this format without the
53081 - `%C' format. The `strptime' function does regard input
53082 - values in the range 68 to 99 as the years 1969 to 1999 and
53083 - the values 0 to 68 as the years 2000 to 2068. But maybe this
53084 - heuristic fails for some input data.
53086 - Therefore it is best to avoid `%y' completely and use `%Y'
53087 - instead.
53089 - `%Ey'
53090 - The offset from `%EC' in the locale's alternative
53091 - representation.
53093 - `%Oy'
53094 - The offset of the year (from `%C') using the locale's
53095 - alternative numeric symbols.
53097 - `%Y'
53098 - The year as a decimal number, using the Gregorian calendar.
53100 - `%EY'
53101 - The full alternative year representation.
53103 - `%z'
53104 - The offset from GMT in ISO 8601/RFC822 format.
53106 - `%Z'
53107 - The timezone name.
53109 - _Note:_ Currently, this is not fully implemented. The format
53110 - is recognized, input is consumed but no field in TM is set.
53112 - `%%'
53113 - A literal `%' character.
53115 - All other characters in the format string must have a matching
53116 - character in the input string. Exceptions are white spaces in the
53117 - input string which can match zero or more whitespace characters in
53118 - the format string.
53120 - *Portability Note:* The XPG standard advises applications to use
53121 - at least one whitespace character (as specified by `isspace') or
53122 - other non-alphanumeric characters between any two conversion
53123 - specifications. The GNU C Library does not have this limitation
53124 - but other libraries might have trouble parsing formats like
53125 - `"%d%m%Y%H%M%S"'.
53127 - The `strptime' function processes the input string from right to
53128 - left. Each of the three possible input elements (white space,
53129 - literal, or format) are handled one after the other. If the input
53130 - cannot be matched to the format string the function stops. The
53131 - remainder of the format and input strings are not processed.
53133 - The function returns a pointer to the first character it was
53134 - unable to process. If the input string contains more characters
53135 - than required by the format string the return value points right
53136 - after the last consumed input character. If the whole input
53137 - string is consumed the return value points to the `NULL' byte at
53138 - the end of the string. If an error occurs, i.e. `strptime' fails
53139 - to match all of the format string, the function returns `NULL'.
53141 - The specification of the function in the XPG standard is rather
53142 -vague, leaving out a few important pieces of information. Most
53143 -importantly, it does not specify what happens to those elements of TM
53144 -which are not directly initialized by the different formats. The
53145 -implementations on different Unix systems vary here.
53147 - The GNU libc implementation does not touch those fields which are not
53148 -directly initialized. Exceptions are the `tm_wday' and `tm_yday'
53149 -elements, which are recomputed if any of the year, month, or date
53150 -elements changed. This has two implications:
53152 - * Before calling the `strptime' function for a new input string, you
53153 - should prepare the TM structure you pass. Normally this will mean
53154 - initializing all values are to zero. Alternatively, you can set
53155 - all fields to values like `INT_MAX', allowing you to determine
53156 - which elements were set by the function call. Zero does not work
53157 - here since it is a valid value for many of the fields.
53159 - Careful initialization is necessary if you want to find out
53160 - whether a certain field in TM was initialized by the function call.
53162 - * You can construct a `struct tm' value with several consecutive
53163 - `strptime' calls. A useful application of this is e.g. the parsing
53164 - of two separate strings, one containing date information and the
53165 - other time information. By parsing one after the other without
53166 - clearing the structure in-between, you can construct a complete
53167 - broken-down time.
53169 - The following example shows a function which parses a string which is
53170 -contains the date information in either US style or ISO 8601 form:
53172 - const char *
53173 - parse_date (const char *input, struct tm *tm)
53175 - const char *cp;
53177 - /* First clear the result structure. */
53178 - memset (tm, '\0', sizeof (*tm));
53180 - /* Try the ISO format first. */
53181 - cp = strptime (input, "%F", tm);
53182 - if (cp == NULL)
53184 - /* Does not match. Try the US form. */
53185 - cp = strptime (input, "%D", tm);
53188 - return cp;
53191 -\x1f
53192 -File: libc.info, Node: General Time String Parsing, Prev: Low-Level Time String Parsing, Up: Parsing Date and Time
53194 -A More User-friendly Way to Parse Times and Dates
53195 -.................................................
53197 - The Unix standard defines another function for parsing date strings.
53198 -The interface is weird, but if the function happens to suit your
53199 -application it is just fine. It is problematic to use this function in
53200 -multi-threaded programs or libraries, since it returns a pointer to a
53201 -static variable, and uses a global variable and global state (an
53202 -environment variable).
53204 - - Variable: getdate_err
53205 - This variable of type `int' contains the error code of the last
53206 - unsuccessful call to `getdate'. Defined values are:
53209 - The environment variable `DATEMSK' is not defined or null.
53212 - The template file denoted by the `DATEMSK' environment
53213 - variable cannot be opened.
53216 - Information about the template file cannot retrieved.
53219 - The template file is not a regular file.
53222 - An I/O error occurred while reading the template file.
53225 - Not enough memory available to execute the function.
53228 - The template file contains no matching template.
53231 - The input date is invalid, but would match a template
53232 - otherwise. This includes dates like February 31st, and dates
53233 - which cannot be represented in a `time_t' variable.
53235 - - Function: struct tm * getdate (const char *STRING)
53236 - The interface to `getdate' is the simplest possible for a function
53237 - to parse a string and return the value. STRING is the input
53238 - string and the result is returned in a statically-allocated
53239 - variable.
53241 - The details about how the string is processed are hidden from the
53242 - user. In fact, they can be outside the control of the program.
53243 - Which formats are recognized is controlled by the file named by
53244 - the environment variable `DATEMSK'. This file should contain
53245 - lines of valid format strings which could be passed to `strptime'.
53247 - The `getdate' function reads these format strings one after the
53248 - other and tries to match the input string. The first line which
53249 - completely matches the input string is used.
53251 - Elements not initialized through the format string retain the
53252 - values present at the time of the `getdate' function call.
53254 - The formats recognized by `getdate' are the same as for
53255 - `strptime'. See above for an explanation. There are only a few
53256 - extensions to the `strptime' behavior:
53258 - * If the `%Z' format is given the broken-down time is based on
53259 - the current time of the timezone matched, not of the current
53260 - timezone of the runtime environment.
53262 - _Note_: This is not implemented (currently). The problem is
53263 - that timezone names are not unique. If a fixed timezone is
53264 - assumed for a given string (say `EST' meaning US East Coast
53265 - time), then uses for countries other than the USA will fail.
53266 - So far we have found no good solution to this.
53268 - * If only the weekday is specified the selected day depends on
53269 - the current date. If the current weekday is greater or equal
53270 - to the `tm_wday' value the current week's day is chosen,
53271 - otherwise the day next week is chosen.
53273 - * A similar heuristic is used when only the month is given and
53274 - not the year. If the month is greater than or equal to the
53275 - current month, then the current year is used. Otherwise it
53276 - wraps to next year. The first day of the month is assumed if
53277 - one is not explicitly specified.
53279 - * The current hour, minute, and second are used if the
53280 - appropriate value is not set through the format.
53282 - * If no date is given tomorrow's date is used if the time is
53283 - smaller than the current time. Otherwise today's date is
53284 - taken.
53286 - It should be noted that the format in the template file need not
53287 - only contain format elements. The following is a list of possible
53288 - format strings (taken from the Unix standard):
53290 - %m
53291 - %A %B %d, %Y %H:%M:%S
53292 - %A
53293 - %B
53294 - %m/%d/%y %I %p
53295 - %d,%m,%Y %H:%M
53296 - at %A the %dst of %B in %Y
53297 - run job at %I %p,%B %dnd
53298 - %A den %d. %B %Y %H.%M Uhr
53300 - As you can see, the template list can contain very specific
53301 - strings like `run job at %I %p,%B %dnd'. Using the above list of
53302 - templates and assuming the current time is Mon Sep 22 12:19:47 EDT
53303 - 1986 we can obtain the following results for the given input.
53305 - Input Match Result
53306 - Mon %a Mon Sep 22 12:19:47 EDT 1986
53307 - Sun %a Sun Sep 28 12:19:47 EDT 1986
53308 - Fri %a Fri Sep 26 12:19:47 EDT 1986
53309 - September %B Mon Sep 1 12:19:47 EDT 1986
53310 - January %B Thu Jan 1 12:19:47 EST 1987
53311 - December %B Mon Dec 1 12:19:47 EST 1986
53312 - Sep Mon %b %a Mon Sep 1 12:19:47 EDT 1986
53313 - Jan Fri %b %a Fri Jan 2 12:19:47 EST 1987
53314 - Dec Mon %b %a Mon Dec 1 12:19:47 EST 1986
53315 - Jan Wed 1989 %b %a %Y Wed Jan 4 12:19:47 EST 1989
53316 - Fri 9 %a %H Fri Sep 26 09:00:00 EDT 1986
53317 - Feb 10:30 %b %H:%S Sun Feb 1 10:00:30 EST 1987
53318 - 10:30 %H:%M Tue Sep 23 10:30:00 EDT 1986
53319 - 13:30 %H:%M Mon Sep 22 13:30:00 EDT 1986
53321 - The return value of the function is a pointer to a static variable
53322 - of type `struct tm', or a null pointer if an error occurred. The
53323 - result is only valid until the next `getdate' call, making this
53324 - function unusable in multi-threaded applications.
53326 - The `errno' variable is _not_ changed. Error conditions are
53327 - stored in the global variable `getdate_err'. See the description
53328 - above for a list of the possible error values.
53330 - _Warning:_ The `getdate' function should _never_ be used in
53331 - SUID-programs. The reason is obvious: using the `DATEMSK'
53332 - environment variable you can get the function to open any
53333 - arbitrary file and chances are high that with some bogus input
53334 - (such as a binary file) the program will crash.
53336 - - Function: int getdate_r (const char *STRING, struct tm *TP)
53337 - The `getdate_r' function is the reentrant counterpart of
53338 - `getdate'. It does not use the global variable `getdate_err' to
53339 - signal an error, but instead returns an error code. The same error
53340 - codes as described in the `getdate_err' documentation above are
53341 - used, with 0 meaning success.
53343 - Moreover, `getdate_r' stores the broken-down time in the variable
53344 - of type `struct tm' pointed to by the second argument, rather than
53345 - in a static variable.
53347 - This function is not defined in the Unix standard. Nevertheless
53348 - it is available on some other Unix systems as well.
53350 - The warning against using `getdate' in SUID-programs applies to
53351 - `getdate_r' as well.
53353 -\x1f
53354 -File: libc.info, Node: TZ Variable, Next: Time Zone Functions, Prev: Parsing Date and Time, Up: Calendar Time
53356 -Specifying the Time Zone with `TZ'
53357 -----------------------------------
53359 - In POSIX systems, a user can specify the time zone by means of the
53360 -`TZ' environment variable. For information about how to set
53361 -environment variables, see *Note Environment Variables::. The functions
53362 -for accessing the time zone are declared in `time.h'.
53364 - You should not normally need to set `TZ'. If the system is
53365 -configured properly, the default time zone will be correct. You might
53366 -set `TZ' if you are using a computer over a network from a different
53367 -time zone, and would like times reported to you in the time zone local
53368 -to you, rather than what is local to the computer.
53370 - In POSIX.1 systems the value of the `TZ' variable can be in one of
53371 -three formats. With the GNU C library, the most common format is the
53372 -last one, which can specify a selection from a large database of time
53373 -zone information for many regions of the world. The first two formats
53374 -are used to describe the time zone information directly, which is both
53375 -more cumbersome and less precise. But the POSIX.1 standard only
53376 -specifies the details of the first two formats, so it is good to be
53377 -familiar with them in case you come across a POSIX.1 system that doesn't
53378 -support a time zone information database.
53380 - The first format is used when there is no Daylight Saving Time (or
53381 -summer time) in the local time zone:
53383 - STD OFFSET
53385 - The STD string specifies the name of the time zone. It must be
53386 -three or more characters long and must not contain a leading colon,
53387 -embedded digits, commas, nor plus and minus signs. There is no space
53388 -character separating the time zone name from the OFFSET, so these
53389 -restrictions are necessary to parse the specification correctly.
53391 - The OFFSET specifies the time value you must add to the local time
53392 -to get a Coordinated Universal Time value. It has syntax like
53393 -[`+'|`-']HH[`:'MM[`:'SS]]. This is positive if the local time zone is
53394 -west of the Prime Meridian and negative if it is east. The hour must
53395 -be between `0' and `23', and the minute and seconds between `0' and
53396 -`59'.
53398 - For example, here is how we would specify Eastern Standard Time, but
53399 -without any Daylight Saving Time alternative:
53401 - EST+5
53403 - The second format is used when there is Daylight Saving Time:
53405 - STD OFFSET DST [OFFSET]`,'START[`/'TIME]`,'END[`/'TIME]
53407 - The initial STD and OFFSET specify the standard time zone, as
53408 -described above. The DST string and OFFSET specify the name and offset
53409 -for the corresponding Daylight Saving Time zone; if the OFFSET is
53410 -omitted, it defaults to one hour ahead of standard time.
53412 - The remainder of the specification describes when Daylight Saving
53413 -Time is in effect. The START field is when Daylight Saving Time goes
53414 -into effect and the END field is when the change is made back to
53415 -standard time. The following formats are recognized for these fields:
53417 -`JN'
53418 - This specifies the Julian day, with N between `1' and `365'.
53419 - February 29 is never counted, even in leap years.
53421 -`N'
53422 - This specifies the Julian day, with N between `0' and `365'.
53423 - February 29 is counted in leap years.
53425 -`MM.W.D'
53426 - This specifies day D of week W of month M. The day D must be
53427 - between `0' (Sunday) and `6'. The week W must be between `1' and
53428 - `5'; week `1' is the first week in which day D occurs, and week
53429 - `5' specifies the _last_ D day in the month. The month M should be
53430 - between `1' and `12'.
53432 - The TIME fields specify when, in the local time currently in effect,
53433 -the change to the other time occurs. If omitted, the default is
53434 -`02:00:00'.
53436 - For example, here is how you would specify the Eastern time zone in
53437 -the United States, including the appropriate Daylight Saving Time and
53438 -its dates of applicability. The normal offset from UTC is 5 hours;
53439 -since this is west of the prime meridian, the sign is positive. Summer
53440 -time begins on the first Sunday in April at 2:00am, and ends on the
53441 -last Sunday in October at 2:00am.
53443 - EST+5EDT,M4.1.0/2,M10.5.0/2
53445 - The schedule of Daylight Saving Time in any particular jurisdiction
53446 -has changed over the years. To be strictly correct, the conversion of
53447 -dates and times in the past should be based on the schedule that was in
53448 -effect then. However, this format has no facilities to let you specify
53449 -how the schedule has changed from year to year. The most you can do is
53450 -specify one particular schedule--usually the present day schedule--and
53451 -this is used to convert any date, no matter when. For precise time zone
53452 -specifications, it is best to use the time zone information database
53453 -(see below).
53455 - The third format looks like this:
53457 - :CHARACTERS
53459 - Each operating system interprets this format differently; in the GNU
53460 -C library, CHARACTERS is the name of a file which describes the time
53461 -zone.
53463 - If the `TZ' environment variable does not have a value, the
53464 -operation chooses a time zone by default. In the GNU C library, the
53465 -default time zone is like the specification `TZ=:/etc/localtime' (or
53466 -`TZ=:/usr/local/etc/localtime', depending on how GNU C library was
53467 -configured; *note Installation::). Other C libraries use their own
53468 -rule for choosing the default time zone, so there is little we can say
53469 -about them.
53471 - If CHARACTERS begins with a slash, it is an absolute file name;
53472 -otherwise the library looks for the file
53473 -`/share/lib/zoneinfo/CHARACTERS'. The `zoneinfo' directory contains
53474 -data files describing local time zones in many different parts of the
53475 -world. The names represent major cities, with subdirectories for
53476 -geographical areas; for example, `America/New_York', `Europe/London',
53477 -`Asia/Hong_Kong'. These data files are installed by the system
53478 -administrator, who also sets `/etc/localtime' to point to the data file
53479 -for the local time zone. The GNU C library comes with a large database
53480 -of time zone information for most regions of the world, which is
53481 -maintained by a community of volunteers and put in the public domain.
53483 -\x1f
53484 -File: libc.info, Node: Time Zone Functions, Next: Time Functions Example, Prev: TZ Variable, Up: Calendar Time
53486 -Functions and Variables for Time Zones
53487 ---------------------------------------
53489 - - Variable: char * tzname [2]
53490 - The array `tzname' contains two strings, which are the standard
53491 - names of the pair of time zones (standard and Daylight Saving)
53492 - that the user has selected. `tzname[0]' is the name of the
53493 - standard time zone (for example, `"EST"'), and `tzname[1]' is the
53494 - name for the time zone when Daylight Saving Time is in use (for
53495 - example, `"EDT"'). These correspond to the STD and DST strings
53496 - (respectively) from the `TZ' environment variable. If Daylight
53497 - Saving Time is never used, `tzname[1]' is the empty string.
53499 - The `tzname' array is initialized from the `TZ' environment
53500 - variable whenever `tzset', `ctime', `strftime', `mktime', or
53501 - `localtime' is called. If multiple abbreviations have been used
53502 - (e.g. `"EWT"' and `"EDT"' for U.S. Eastern War Time and Eastern
53503 - Daylight Time), the array contains the most recent abbreviation.
53505 - The `tzname' array is required for POSIX.1 compatibility, but in
53506 - GNU programs it is better to use the `tm_zone' member of the
53507 - broken-down time structure, since `tm_zone' reports the correct
53508 - abbreviation even when it is not the latest one.
53510 - Though the strings are declared as `char *' the user must refrain
53511 - from modifying these strings. Modifying the strings will almost
53512 - certainly lead to trouble.
53515 - - Function: void tzset (void)
53516 - The `tzset' function initializes the `tzname' variable from the
53517 - value of the `TZ' environment variable. It is not usually
53518 - necessary for your program to call this function, because it is
53519 - called automatically when you use the other time conversion
53520 - functions that depend on the time zone.
53522 - The following variables are defined for compatibility with System V
53523 -Unix. Like `tzname', these variables are set by calling `tzset' or the
53524 -other time conversion functions.
53526 - - Variable: long int timezone
53527 - This contains the difference between UTC and the latest local
53528 - standard time, in seconds west of UTC. For example, in the U.S.
53529 - Eastern time zone, the value is `5*60*60'. Unlike the `tm_gmtoff'
53530 - member of the broken-down time structure, this value is not
53531 - adjusted for daylight saving, and its sign is reversed. In GNU
53532 - programs it is better to use `tm_gmtoff', since it contains the
53533 - correct offset even when it is not the latest one.
53535 - - Variable: int daylight
53536 - This variable has a nonzero value if Daylight Saving Time rules
53537 - apply. A nonzero value does not necessarily mean that Daylight
53538 - Saving Time is now in effect; it means only that Daylight Saving
53539 - Time is sometimes in effect.
53541 -\x1f
53542 -File: libc.info, Node: Time Functions Example, Prev: Time Zone Functions, Up: Calendar Time
53544 -Time Functions Example
53545 -----------------------
53547 - Here is an example program showing the use of some of the calendar
53548 -time functions.
53550 - #include <time.h>
53551 - #include <stdio.h>
53553 - #define SIZE 256
53555 - int
53556 - main (void)
53558 - char buffer[SIZE];
53559 - time_t curtime;
53560 - struct tm *loctime;
53562 - /* Get the current time. */
53563 - curtime = time (NULL);
53565 - /* Convert it to local time representation. */
53566 - loctime = localtime (&curtime);
53568 - /* Print out the date and time in the standard format. */
53569 - fputs (asctime (loctime), stdout);
53571 - /* Print it out in a nice format. */
53572 - strftime (buffer, SIZE, "Today is %A, %B %d.\n", loctime);
53573 - fputs (buffer, stdout);
53574 - strftime (buffer, SIZE, "The time is %I:%M %p.\n", loctime);
53575 - fputs (buffer, stdout);
53577 - return 0;
53580 - It produces output like this:
53582 - Wed Jul 31 13:02:36 1991
53583 - Today is Wednesday, July 31.
53584 - The time is 01:02 PM.
53586 diff -u -udbrN glibc-2.3.2/manual/libc.info-37 glibc-2.3.2-200304020432/manual/libc.info-37
53587 --- glibc-2.3.2/manual/libc.info-37 Sat Mar 1 02:39:41 2003
53588 +++ glibc-2.3.2-200304020432/manual/libc.info-37 Thu Jan 1 01:00:00 1970
53589 @@ -1,1233 +0,0 @@
53590 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
53592 -INFO-DIR-SECTION GNU libraries
53593 -START-INFO-DIR-ENTRY
53594 -* Libc: (libc). C library.
53595 -END-INFO-DIR-ENTRY
53597 - This file documents the GNU C library.
53599 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
53600 -Reference Manual', for Version 2.3.x.
53602 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
53603 -Free Software Foundation, Inc.
53605 - Permission is granted to copy, distribute and/or modify this document
53606 -under the terms of the GNU Free Documentation License, Version 1.1 or
53607 -any later version published by the Free Software Foundation; with the
53608 -Invariant Sections being "Free Software Needs Free Documentation" and
53609 -"GNU Lesser General Public License", the Front-Cover texts being (a)
53610 -(see below), and with the Back-Cover Texts being (b) (see below). A
53611 -copy of the license is included in the section entitled "GNU Free
53612 -Documentation License".
53614 - (a) The FSF's Front-Cover Text is:
53616 - A GNU Manual
53618 - (b) The FSF's Back-Cover Text is:
53620 - You have freedom to copy and modify this GNU Manual, like GNU
53621 -software. Copies published by the Free Software Foundation raise
53622 -funds for GNU development.
53624 -\x1f
53625 -File: libc.info, Node: Setting an Alarm, Next: Sleeping, Prev: Calendar Time, Up: Date and Time
53627 -Setting an Alarm
53628 -================
53630 - The `alarm' and `setitimer' functions provide a mechanism for a
53631 -process to interrupt itself in the future. They do this by setting a
53632 -timer; when the timer expires, the process receives a signal.
53634 - Each process has three independent interval timers available:
53636 - * A real-time timer that counts elapsed time. This timer sends a
53637 - `SIGALRM' signal to the process when it expires.
53639 - * A virtual timer that counts processor time used by the process.
53640 - This timer sends a `SIGVTALRM' signal to the process when it
53641 - expires.
53643 - * A profiling timer that counts both processor time used by the
53644 - process, and processor time spent in system calls on behalf of the
53645 - process. This timer sends a `SIGPROF' signal to the process when
53646 - it expires.
53648 - This timer is useful for profiling in interpreters. The interval
53649 - timer mechanism does not have the fine granularity necessary for
53650 - profiling native code.
53652 - You can only have one timer of each kind set at any given time. If
53653 -you set a timer that has not yet expired, that timer is simply reset to
53654 -the new value.
53656 - You should establish a handler for the appropriate alarm signal using
53657 -`signal' or `sigaction' before issuing a call to `setitimer' or
53658 -`alarm'. Otherwise, an unusual chain of events could cause the timer
53659 -to expire before your program establishes the handler. In this case it
53660 -would be terminated, since termination is the default action for the
53661 -alarm signals. *Note Signal Handling::.
53663 - To be able to use the alarm function to interrupt a system call which
53664 -might block otherwise indefinitely it is important to _not_ set the
53665 -`SA_RESTART' flag when registering the signal handler using
53666 -`sigaction'. When not using `sigaction' things get even uglier: the
53667 -`signal' function has to fixed semantics with respect to restarts. The
53668 -BSD semantics for this function is to set the flag. Therefore, if
53669 -`sigaction' for whatever reason cannot be used, it is necessary to use
53670 -`sysv_signal' and not `signal'.
53672 - The `setitimer' function is the primary means for setting an alarm.
53673 -This facility is declared in the header file `sys/time.h'. The `alarm'
53674 -function, declared in `unistd.h', provides a somewhat simpler interface
53675 -for setting the real-time timer.
53677 - - Data Type: struct itimerval
53678 - This structure is used to specify when a timer should expire. It
53679 - contains the following members:
53680 - `struct timeval it_interval'
53681 - This is the period between successive timer interrupts. If
53682 - zero, the alarm will only be sent once.
53684 - `struct timeval it_value'
53685 - This is the period between now and the first timer interrupt.
53686 - If zero, the alarm is disabled.
53688 - The `struct timeval' data type is described in *Note Elapsed
53689 - Time::.
53691 - - Function: int setitimer (int WHICH, struct itimerval *NEW, struct
53692 - itimerval *OLD)
53693 - The `setitimer' function sets the timer specified by WHICH
53694 - according to NEW. The WHICH argument can have a value of
53695 - `ITIMER_REAL', `ITIMER_VIRTUAL', or `ITIMER_PROF'.
53697 - If OLD is not a null pointer, `setitimer' returns information
53698 - about any previous unexpired timer of the same kind in the
53699 - structure it points to.
53701 - The return value is `0' on success and `-1' on failure. The
53702 - following `errno' error conditions are defined for this function:
53704 - `EINVAL'
53705 - The timer period is too large.
53707 - - Function: int getitimer (int WHICH, struct itimerval *OLD)
53708 - The `getitimer' function stores information about the timer
53709 - specified by WHICH in the structure pointed at by OLD.
53711 - The return value and error conditions are the same as for
53712 - `setitimer'.
53714 -`ITIMER_REAL'
53715 - This constant can be used as the WHICH argument to the `setitimer'
53716 - and `getitimer' functions to specify the real-time timer.
53718 -`ITIMER_VIRTUAL'
53719 - This constant can be used as the WHICH argument to the `setitimer'
53720 - and `getitimer' functions to specify the virtual timer.
53722 -`ITIMER_PROF'
53723 - This constant can be used as the WHICH argument to the `setitimer'
53724 - and `getitimer' functions to specify the profiling timer.
53726 - - Function: unsigned int alarm (unsigned int SECONDS)
53727 - The `alarm' function sets the real-time timer to expire in SECONDS
53728 - seconds. If you want to cancel any existing alarm, you can do
53729 - this by calling `alarm' with a SECONDS argument of zero.
53731 - The return value indicates how many seconds remain before the
53732 - previous alarm would have been sent. If there is no previous
53733 - alarm, `alarm' returns zero.
53735 - The `alarm' function could be defined in terms of `setitimer' like
53736 -this:
53738 - unsigned int
53739 - alarm (unsigned int seconds)
53741 - struct itimerval old, new;
53742 - new.it_interval.tv_usec = 0;
53743 - new.it_interval.tv_sec = 0;
53744 - new.it_value.tv_usec = 0;
53745 - new.it_value.tv_sec = (long int) seconds;
53746 - if (setitimer (ITIMER_REAL, &new, &old) < 0)
53747 - return 0;
53748 - else
53749 - return old.it_value.tv_sec;
53752 - There is an example showing the use of the `alarm' function in *Note
53753 -Handler Returns::.
53755 - If you simply want your process to wait for a given number of
53756 -seconds, you should use the `sleep' function. *Note Sleeping::.
53758 - You shouldn't count on the signal arriving precisely when the timer
53759 -expires. In a multiprocessing environment there is typically some
53760 -amount of delay involved.
53762 - *Portability Note:* The `setitimer' and `getitimer' functions are
53763 -derived from BSD Unix, while the `alarm' function is specified by the
53764 -POSIX.1 standard. `setitimer' is more powerful than `alarm', but
53765 -`alarm' is more widely used.
53767 -\x1f
53768 -File: libc.info, Node: Sleeping, Prev: Setting an Alarm, Up: Date and Time
53770 -Sleeping
53771 -========
53773 - The function `sleep' gives a simple way to make the program wait for
53774 -a short interval. If your program doesn't use signals (except to
53775 -terminate), then you can expect `sleep' to wait reliably throughout the
53776 -specified interval. Otherwise, `sleep' can return sooner if a signal
53777 -arrives; if you want to wait for a given interval regardless of
53778 -signals, use `select' (*note Waiting for I/O::) and don't specify any
53779 -descriptors to wait for.
53781 - - Function: unsigned int sleep (unsigned int SECONDS)
53782 - The `sleep' function waits for SECONDS or until a signal is
53783 - delivered, whichever happens first.
53785 - If `sleep' function returns because the requested interval is over,
53786 - it returns a value of zero. If it returns because of delivery of a
53787 - signal, its return value is the remaining time in the sleep
53788 - interval.
53790 - The `sleep' function is declared in `unistd.h'.
53792 - Resist the temptation to implement a sleep for a fixed amount of
53793 -time by using the return value of `sleep', when nonzero, to call
53794 -`sleep' again. This will work with a certain amount of accuracy as
53795 -long as signals arrive infrequently. But each signal can cause the
53796 -eventual wakeup time to be off by an additional second or so. Suppose a
53797 -few signals happen to arrive in rapid succession by bad luck--there is
53798 -no limit on how much this could shorten or lengthen the wait.
53800 - Instead, compute the calendar time at which the program should stop
53801 -waiting, and keep trying to wait until that calendar time. This won't
53802 -be off by more than a second. With just a little more work, you can use
53803 -`select' and make the waiting period quite accurate. (Of course, heavy
53804 -system load can cause additional unavoidable delays--unless the machine
53805 -is dedicated to one application, there is no way you can avoid this.)
53807 - On some systems, `sleep' can do strange things if your program uses
53808 -`SIGALRM' explicitly. Even if `SIGALRM' signals are being ignored or
53809 -blocked when `sleep' is called, `sleep' might return prematurely on
53810 -delivery of a `SIGALRM' signal. If you have established a handler for
53811 -`SIGALRM' signals and a `SIGALRM' signal is delivered while the process
53812 -is sleeping, the action taken might be just to cause `sleep' to return
53813 -instead of invoking your handler. And, if `sleep' is interrupted by
53814 -delivery of a signal whose handler requests an alarm or alters the
53815 -handling of `SIGALRM', this handler and `sleep' will interfere.
53817 - On the GNU system, it is safe to use `sleep' and `SIGALRM' in the
53818 -same program, because `sleep' does not work by means of `SIGALRM'.
53820 - - Function: int nanosleep (const struct timespec *REQUESTED_TIME,
53821 - struct timespec *REMAINING)
53822 - If resolution to seconds is not enough the `nanosleep' function can
53823 - be used. As the name suggests the sleep interval can be specified
53824 - in nanoseconds. The actual elapsed time of the sleep interval
53825 - might be longer since the system rounds the elapsed time you
53826 - request up to the next integer multiple of the actual resolution
53827 - the system can deliver.
53829 - *`requested_time' is the elapsed time of the interval you want to
53830 - sleep.
53832 - The function returns as *`remaining' the elapsed time left in the
53833 - interval for which you requested to sleep. If the interval
53834 - completed without getting interrupted by a signal, this is zero.
53836 - `struct timespec' is described in *Note Elapsed Time::.
53838 - If the function returns because the interval is over the return
53839 - value is zero. If the function returns -1 the global variable
53840 - ERRNO is set to the following values:
53842 - `EINTR'
53843 - The call was interrupted because a signal was delivered to
53844 - the thread. If the REMAINING parameter is not the null
53845 - pointer the structure pointed to by REMAINING is updated to
53846 - contain the remaining elapsed time.
53848 - `EINVAL'
53849 - The nanosecond value in the REQUESTED_TIME parameter contains
53850 - an illegal value. Either the value is negative or greater
53851 - than or equal to 1000 million.
53853 - This function is a cancellation point in multi-threaded programs.
53854 - This is a problem if the thread allocates some resources (like
53855 - memory, file descriptors, semaphores or whatever) at the time
53856 - `nanosleep' is called. If the thread gets canceled these
53857 - resources stay allocated until the program ends. To avoid this
53858 - calls to `nanosleep' should be protected using cancellation
53859 - handlers.
53861 - The `nanosleep' function is declared in `time.h'.
53863 -\x1f
53864 -File: libc.info, Node: Resource Usage And Limitation, Next: Non-Local Exits, Prev: Date and Time, Up: Top
53866 -Resource Usage And Limitation
53867 -*****************************
53869 - This chapter describes functions for examining how much of various
53870 -kinds of resources (CPU time, memory, etc.) a process has used and
53871 -getting and setting limits on future usage.
53873 -* Menu:
53875 -* Resource Usage:: Measuring various resources used.
53876 -* Limits on Resources:: Specifying limits on resource usage.
53877 -* Priority:: Reading or setting process run priority.
53878 -* Memory Resources:: Querying memory available resources.
53879 -* Processor Resources:: Learn about the processors available.
53881 -\x1f
53882 -File: libc.info, Node: Resource Usage, Next: Limits on Resources, Up: Resource Usage And Limitation
53884 -Resource Usage
53885 -==============
53887 - The function `getrusage' and the data type `struct rusage' are used
53888 -to examine the resource usage of a process. They are declared in
53889 -`sys/resource.h'.
53891 - - Function: int getrusage (int PROCESSES, struct rusage *RUSAGE)
53892 - This function reports resource usage totals for processes
53893 - specified by PROCESSES, storing the information in `*RUSAGE'.
53895 - In most systems, PROCESSES has only two valid values:
53897 - `RUSAGE_SELF'
53898 - Just the current process.
53900 - `RUSAGE_CHILDREN'
53901 - All child processes (direct and indirect) that have already
53902 - terminated.
53904 - In the GNU system, you can also inquire about a particular child
53905 - process by specifying its process ID.
53907 - The return value of `getrusage' is zero for success, and `-1' for
53908 - failure.
53910 - `EINVAL'
53911 - The argument PROCESSES is not valid.
53913 - One way of getting resource usage for a particular child process is
53914 -with the function `wait4', which returns totals for a child when it
53915 -terminates. *Note BSD Wait Functions::.
53917 - - Data Type: struct rusage
53918 - This data type stores various resource usage statistics. It has
53919 - the following members, and possibly others:
53921 - `struct timeval ru_utime'
53922 - Time spent executing user instructions.
53924 - `struct timeval ru_stime'
53925 - Time spent in operating system code on behalf of PROCESSES.
53927 - `long int ru_maxrss'
53928 - The maximum resident set size used, in kilobytes. That is,
53929 - the maximum number of kilobytes of physical memory that
53930 - PROCESSES used simultaneously.
53932 - `long int ru_ixrss'
53933 - An integral value expressed in kilobytes times ticks of
53934 - execution, which indicates the amount of memory used by text
53935 - that was shared with other processes.
53937 - `long int ru_idrss'
53938 - An integral value expressed the same way, which is the amount
53939 - of unshared memory used for data.
53941 - `long int ru_isrss'
53942 - An integral value expressed the same way, which is the amount
53943 - of unshared memory used for stack space.
53945 - `long int ru_minflt'
53946 - The number of page faults which were serviced without
53947 - requiring any I/O.
53949 - `long int ru_majflt'
53950 - The number of page faults which were serviced by doing I/O.
53952 - `long int ru_nswap'
53953 - The number of times PROCESSES was swapped entirely out of
53954 - main memory.
53956 - `long int ru_inblock'
53957 - The number of times the file system had to read from the disk
53958 - on behalf of PROCESSES.
53960 - `long int ru_oublock'
53961 - The number of times the file system had to write to the disk
53962 - on behalf of PROCESSES.
53964 - `long int ru_msgsnd'
53965 - Number of IPC messages sent.
53967 - `long int ru_msgrcv'
53968 - Number of IPC messages received.
53970 - `long int ru_nsignals'
53971 - Number of signals received.
53973 - `long int ru_nvcsw'
53974 - The number of times PROCESSES voluntarily invoked a context
53975 - switch (usually to wait for some service).
53977 - `long int ru_nivcsw'
53978 - The number of times an involuntary context switch took place
53979 - (because a time slice expired, or another process of higher
53980 - priority was scheduled).
53982 - `vtimes' is a historical function that does some of what `getrusage'
53983 -does. `getrusage' is a better choice.
53985 - `vtimes' and its `vtimes' data structure are declared in
53986 -`sys/vtimes.h'.
53988 - - Function: int vtimes (struct vtimes CURRENT, struct vtimes CHILD)
53989 - `vtimes' reports resource usage totals for a process.
53991 - If CURRENT is non-null, `vtimes' stores resource usage totals for
53992 - the invoking process alone in the structure to which it points. If
53993 - CHILD is non-null, `vtimes' stores resource usage totals for all
53994 - past children (which have terminated) of the invoking process in
53995 - the structure to which it points.
53997 - - Data Type: struct vtimes
53998 - This data type contains information about the resource usage
53999 - of a process. Each member corresponds to a member of the
54000 - `struct rusage' data type described above.
54002 - `vm_utime'
54003 - User CPU time. Analogous to `ru_utime' in `struct
54004 - rusage'
54006 - `vm_stime'
54007 - System CPU time. Analogous to `ru_stime' in `struct
54008 - rusage'
54010 - `vm_idsrss'
54011 - Data and stack memory. The sum of the values that would
54012 - be reported as `ru_idrss' and `ru_isrss' in `struct
54013 - rusage'
54015 - `vm_ixrss'
54016 - Shared memory. Analogous to `ru_ixrss' in `struct
54017 - rusage'
54019 - `vm_maxrss'
54020 - Maximent resident set size. Analogous to `ru_maxrss' in
54021 - `struct rusage'
54023 - `vm_majflt'
54024 - Major page faults. Analogous to `ru_majflt' in `struct
54025 - rusage'
54027 - `vm_minflt'
54028 - Minor page faults. Analogous to `ru_minflt' in `struct
54029 - rusage'
54031 - `vm_nswap'
54032 - Swap count. Analogous to `ru_nswap' in `struct rusage'
54034 - `vm_inblk'
54035 - Disk reads. Analogous to `ru_inblk' in `struct rusage'
54037 - `vm_oublk'
54038 - Disk writes. Analogous to `ru_oublk' in `struct rusage'
54040 - The return value is zero if the function succeeds; `-1' otherwise.
54042 - An additional historical function for examining resource usage,
54043 -`vtimes', is supported but not documented here. It is declared in
54044 -`sys/vtimes.h'.
54046 -\x1f
54047 -File: libc.info, Node: Limits on Resources, Next: Priority, Prev: Resource Usage, Up: Resource Usage And Limitation
54049 -Limiting Resource Usage
54050 -=======================
54052 - You can specify limits for the resource usage of a process. When the
54053 -process tries to exceed a limit, it may get a signal, or the system call
54054 -by which it tried to do so may fail, depending on the resource. Each
54055 -process initially inherits its limit values from its parent, but it can
54056 -subsequently change them.
54058 - There are two per-process limits associated with a resource:
54060 -"current limit"
54061 - The current limit is the value the system will not allow usage to
54062 - exceed. It is also called the "soft limit" because the process
54063 - being limited can generally raise the current limit at will.
54065 -"maximum limit"
54066 - The maximum limit is the maximum value to which a process is
54067 - allowed to set its current limit. It is also called the "hard
54068 - limit" because there is no way for a process to get around it. A
54069 - process may lower its own maximum limit, but only the superuser
54070 - may increase a maximum limit.
54072 - The symbols for use with `getrlimit', `setrlimit', `getrlimit64',
54073 -and `setrlimit64' are defined in `sys/resource.h'.
54075 - - Function: int getrlimit (int RESOURCE, struct rlimit *RLP)
54076 - Read the current and maximum limits for the resource RESOURCE and
54077 - store them in `*RLP'.
54079 - The return value is `0' on success and `-1' on failure. The only
54080 - possible `errno' error condition is `EFAULT'.
54082 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
54083 - 32-bit system this function is in fact `getrlimit64'. Thus, the
54084 - LFS interface transparently replaces the old interface.
54086 - - Function: int getrlimit64 (int RESOURCE, struct rlimit64 *RLP)
54087 - This function is similar to `getrlimit' but its second parameter is
54088 - a pointer to a variable of type `struct rlimit64', which allows it
54089 - to read values which wouldn't fit in the member of a `struct
54090 - rlimit'.
54092 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
54093 - 32-bit machine, this function is available under the name
54094 - `getrlimit' and so transparently replaces the old interface.
54096 - - Function: int setrlimit (int RESOURCE, const struct rlimit *RLP)
54097 - Store the current and maximum limits for the resource RESOURCE in
54098 - `*RLP'.
54100 - The return value is `0' on success and `-1' on failure. The
54101 - following `errno' error condition is possible:
54103 - `EPERM'
54104 - * The process tried to raise a current limit beyond the
54105 - maximum limit.
54107 - * The process tried to raise a maximum limit, but is not
54108 - superuser.
54110 - When the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
54111 - 32-bit system this function is in fact `setrlimit64'. Thus, the
54112 - LFS interface transparently replaces the old interface.
54114 - - Function: int setrlimit64 (int RESOURCE, const struct rlimit64 *RLP)
54115 - This function is similar to `setrlimit' but its second parameter is
54116 - a pointer to a variable of type `struct rlimit64' which allows it
54117 - to set values which wouldn't fit in the member of a `struct
54118 - rlimit'.
54120 - If the sources are compiled with `_FILE_OFFSET_BITS == 64' on a
54121 - 32-bit machine this function is available under the name
54122 - `setrlimit' and so transparently replaces the old interface.
54124 - - Data Type: struct rlimit
54125 - This structure is used with `getrlimit' to receive limit values,
54126 - and with `setrlimit' to specify limit values for a particular
54127 - process and resource. It has two fields:
54129 - `rlim_t rlim_cur'
54130 - The current limit
54132 - `rlim_t rlim_max'
54133 - The maximum limit.
54135 - For `getrlimit', the structure is an output; it receives the
54136 - current values. For `setrlimit', it specifies the new values.
54138 - For the LFS functions a similar type is defined in `sys/resource.h'.
54140 - - Data Type: struct rlimit64
54141 - This structure is analogous to the `rlimit' structure above, but
54142 - its components have wider ranges. It has two fields:
54144 - `rlim64_t rlim_cur'
54145 - This is analogous to `rlimit.rlim_cur', but with a different
54146 - type.
54148 - `rlim64_t rlim_max'
54149 - This is analogous to `rlimit.rlim_max', but with a different
54150 - type.
54153 - Here is a list of resources for which you can specify a limit.
54154 -Memory and file sizes are measured in bytes.
54156 -`RLIMIT_CPU'
54157 - The maximum amount of CPU time the process can use. If it runs for
54158 - longer than this, it gets a signal: `SIGXCPU'. The value is
54159 - measured in seconds. *Note Operation Error Signals::.
54161 -`RLIMIT_FSIZE'
54162 - The maximum size of file the process can create. Trying to write a
54163 - larger file causes a signal: `SIGXFSZ'. *Note Operation Error
54164 - Signals::.
54166 -`RLIMIT_DATA'
54167 - The maximum size of data memory for the process. If the process
54168 - tries to allocate data memory beyond this amount, the allocation
54169 - function fails.
54171 -`RLIMIT_STACK'
54172 - The maximum stack size for the process. If the process tries to
54173 - extend its stack past this size, it gets a `SIGSEGV' signal.
54174 - *Note Program Error Signals::.
54176 -`RLIMIT_CORE'
54177 - The maximum size core file that this process can create. If the
54178 - process terminates and would dump a core file larger than this,
54179 - then no core file is created. So setting this limit to zero
54180 - prevents core files from ever being created.
54182 -`RLIMIT_RSS'
54183 - The maximum amount of physical memory that this process should get.
54184 - This parameter is a guide for the system's scheduler and memory
54185 - allocator; the system may give the process more memory when there
54186 - is a surplus.
54188 -`RLIMIT_MEMLOCK'
54189 - The maximum amount of memory that can be locked into physical
54190 - memory (so it will never be paged out).
54192 -`RLIMIT_NPROC'
54193 - The maximum number of processes that can be created with the same
54194 - user ID. If you have reached the limit for your user ID, `fork'
54195 - will fail with `EAGAIN'. *Note Creating a Process::.
54197 -`RLIMIT_NOFILE'
54198 -`RLIMIT_OFILE'
54199 - The maximum number of files that the process can open. If it
54200 - tries to open more files than this, its open attempt fails with
54201 - `errno' `EMFILE'. *Note Error Codes::. Not all systems support
54202 - this limit; GNU does, and 4.4 BSD does.
54204 -`RLIMIT_AS'
54205 - The maximum size of total memory that this process should get. If
54206 - the process tries to allocate more memory beyond this amount with,
54207 - for example, `brk', `malloc', `mmap' or `sbrk', the allocation
54208 - function fails.
54210 -`RLIM_NLIMITS'
54211 - The number of different resource limits. Any valid RESOURCE
54212 - operand must be less than `RLIM_NLIMITS'.
54214 - - Constant: int RLIM_INFINITY
54215 - This constant stands for a value of "infinity" when supplied as
54216 - the limit value in `setrlimit'.
54218 - The following are historical functions to do some of what the
54219 -functions above do. The functions above are better choices.
54221 - `ulimit' and the command symbols are declared in `ulimit.h'.
54223 - - Function: int ulimit (int CMD, ...)
54224 - `ulimit' gets the current limit or sets the current and maximum
54225 - limit for a particular resource for the calling process according
54226 - to the command CMD.a
54228 - If you are getting a limit, the command argument is the only
54229 - argument. If you are setting a limit, there is a second argument:
54230 - `long int' LIMIT which is the value to which you are setting the
54231 - limit.
54233 - The CMD values and the operations they specify are:
54234 - `GETFSIZE'
54235 - Get the current limit on the size of a file, in units of 512
54236 - bytes.
54238 - `SETFSIZE'
54239 - Set the current and maximum limit on the size of a file to
54240 - LIMIT * 512 bytes.
54242 - There are also some other CMD values that may do things on some
54243 - systems, but they are not supported.
54245 - Only the superuser may increase a maximum limit.
54247 - When you successfully get a limit, the return value of `ulimit' is
54248 - that limit, which is never negative. When you successfully set a
54249 - limit, the return value is zero. When the function fails, the
54250 - return value is `-1' and `errno' is set according to the reason:
54252 - `EPERM'
54253 - A process tried to increase a maximum limit, but is not
54254 - superuser.
54257 - `vlimit' and its resource symbols are declared in `sys/vlimit.h'.
54259 - - Function: int vlimit (int RESOURCE, int LIMIT)
54260 - `vlimit' sets the current limit for a resource for a process.
54262 - RESOURCE identifies the resource:
54264 - `LIM_CPU'
54265 - Maximum CPU time. Same as `RLIMIT_CPU' for `setrlimit'.
54267 - `LIM_FSIZE'
54268 - Maximum file size. Same as `RLIMIT_FSIZE' for `setrlimit'.
54270 - `LIM_DATA'
54271 - Maximum data memory. Same as `RLIMIT_DATA' for `setrlimit'.
54273 - `LIM_STACK'
54274 - Maximum stack size. Same as `RLIMIT_STACK' for `setrlimit'.
54276 - `LIM_CORE'
54277 - Maximum core file size. Same as `RLIMIT_COR' for `setrlimit'.
54279 - `LIM_MAXRSS'
54280 - Maximum physical memory. Same as `RLIMIT_RSS' for
54281 - `setrlimit'.
54283 - The return value is zero for success, and `-1' with `errno' set
54284 - accordingly for failure:
54286 - `EPERM'
54287 - The process tried to set its current limit beyond its maximum
54288 - limit.
54291 -\x1f
54292 -File: libc.info, Node: Priority, Next: Memory Resources, Prev: Limits on Resources, Up: Resource Usage And Limitation
54294 -Process CPU Priority And Scheduling
54295 -===================================
54297 - When multiple processes simultaneously require CPU time, the system's
54298 -scheduling policy and process CPU priorities determine which processes
54299 -get it. This section describes how that determination is made and GNU
54300 -C library functions to control it.
54302 - It is common to refer to CPU scheduling simply as scheduling and a
54303 -process' CPU priority simply as the process' priority, with the CPU
54304 -resource being implied. Bear in mind, though, that CPU time is not the
54305 -only resource a process uses or that processes contend for. In some
54306 -cases, it is not even particularly important. Giving a process a high
54307 -"priority" may have very little effect on how fast a process runs with
54308 -respect to other processes. The priorities discussed in this section
54309 -apply only to CPU time.
54311 - CPU scheduling is a complex issue and different systems do it in
54312 -wildly different ways. New ideas continually develop and find their
54313 -way into the intricacies of the various systems' scheduling algorithms.
54314 -This section discusses the general concepts, some specifics of systems
54315 -that commonly use the GNU C library, and some standards.
54317 - For simplicity, we talk about CPU contention as if there is only one
54318 -CPU in the system. But all the same principles apply when a processor
54319 -has multiple CPUs, and knowing that the number of processes that can
54320 -run at any one time is equal to the number of CPUs, you can easily
54321 -extrapolate the information.
54323 - The functions described in this section are all defined by the
54324 -POSIX.1 and POSIX.1b standards (the `sched...' functions are POSIX.1b).
54325 -However, POSIX does not define any semantics for the values that these
54326 -functions get and set. In this chapter, the semantics are based on the
54327 -Linux kernel's implementation of the POSIX standard. As you will see,
54328 -the Linux implementation is quite the inverse of what the authors of the
54329 -POSIX syntax had in mind.
54331 -* Menu:
54333 -* Absolute Priority:: The first tier of priority. Posix
54334 -* Realtime Scheduling:: Scheduling among the process nobility
54335 -* Basic Scheduling Functions:: Get/set scheduling policy, priority
54336 -* Traditional Scheduling:: Scheduling among the vulgar masses
54338 -\x1f
54339 -File: libc.info, Node: Absolute Priority, Next: Realtime Scheduling, Up: Priority
54341 -Absolute Priority
54342 ------------------
54344 - Every process has an absolute priority, and it is represented by a
54345 -number. The higher the number, the higher the absolute priority.
54347 - On systems of the past, and most systems today, all processes have
54348 -absolute priority 0 and this section is irrelevant. In that case,
54349 -*Note Traditional Scheduling::. Absolute priorities were invented to
54350 -accommodate realtime systems, in which it is vital that certain
54351 -processes be able to respond to external events happening in real time,
54352 -which means they cannot wait around while some other process that _wants
54353 -to_, but doesn't _need to_ run occupies the CPU.
54355 - When two processes are in contention to use the CPU at any instant,
54356 -the one with the higher absolute priority always gets it. This is true
54357 -even if the process with the lower priority is already using the CPU
54358 -(i.e. the scheduling is preemptive). Of course, we're only talking
54359 -about processes that are running or "ready to run," which means they are
54360 -ready to execute instructions right now. When a process blocks to wait
54361 -for something like I/O, its absolute priority is irrelevant.
54363 - *Note:* The term "runnable" is a synonym for "ready to run."
54365 - When two processes are running or ready to run and both have the same
54366 -absolute priority, it's more interesting. In that case, who gets the
54367 -CPU is determined by the scheduling policy. If the processes have
54368 -absolute priority 0, the traditional scheduling policy described in
54369 -*Note Traditional Scheduling:: applies. Otherwise, the policies
54370 -described in *Note Realtime Scheduling:: apply.
54372 - You normally give an absolute priority above 0 only to a process that
54373 -can be trusted not to hog the CPU. Such processes are designed to block
54374 -(or terminate) after relatively short CPU runs.
54376 - A process begins life with the same absolute priority as its parent
54377 -process. Functions described in *Note Basic Scheduling Functions:: can
54378 -change it.
54380 - Only a privileged process can change a process' absolute priority to
54381 -something other than `0'. Only a privileged process or the target
54382 -process' owner can change its absolute priority at all.
54384 - POSIX requires absolute priority values used with the realtime
54385 -scheduling policies to be consecutive with a range of at least 32. On
54386 -Linux, they are 1 through 99. The functions `sched_get_priority_max'
54387 -and `sched_set_priority_min' portably tell you what the range is on a
54388 -particular system.
54390 -Using Absolute Priority
54391 -.......................
54393 - One thing you must keep in mind when designing real time
54394 -applications is that having higher absolute priority than any other
54395 -process doesn't guarantee the process can run continuously. Two things
54396 -that can wreck a good CPU run are interrupts and page faults.
54398 - Interrupt handlers live in that limbo between processes. The CPU is
54399 -executing instructions, but they aren't part of any process. An
54400 -interrupt will stop even the highest priority process. So you must
54401 -allow for slight delays and make sure that no device in the system has
54402 -an interrupt handler that could cause too long a delay between
54403 -instructions for your process.
54405 - Similarly, a page fault causes what looks like a straightforward
54406 -sequence of instructions to take a long time. The fact that other
54407 -processes get to run while the page faults in is of no consequence,
54408 -because as soon as the I/O is complete, the high priority process will
54409 -kick them out and run again, but the wait for the I/O itself could be a
54410 -problem. To neutralize this threat, use `mlock' or `mlockall'.
54412 - There are a few ramifications of the absoluteness of this priority
54413 -on a single-CPU system that you need to keep in mind when you choose to
54414 -set a priority and also when you're working on a program that runs with
54415 -high absolute priority. Consider a process that has higher absolute
54416 -priority than any other process in the system and due to a bug in its
54417 -program, it gets into an infinite loop. It will never cede the CPU.
54418 -You can't run a command to kill it because your command would need to
54419 -get the CPU in order to run. The errant program is in complete
54420 -control. It controls the vertical, it controls the horizontal.
54422 - There are two ways to avoid this: 1) keep a shell running somewhere
54423 -with a higher absolute priority. 2) keep a controlling terminal
54424 -attached to the high priority process group. All the priority in the
54425 -world won't stop an interrupt handler from running and delivering a
54426 -signal to the process if you hit Control-C.
54428 - Some systems use absolute priority as a means of allocating a fixed
54429 -percentage of CPU time to a process. To do this, a super high priority
54430 -privileged process constantly monitors the process' CPU usage and raises
54431 -its absolute priority when the process isn't getting its entitled share
54432 -and lowers it when the process is exceeding it.
54434 - *Note:* The absolute priority is sometimes called the "static
54435 -priority." We don't use that term in this manual because it misses the
54436 -most important feature of the absolute priority: its absoluteness.
54438 -\x1f
54439 -File: libc.info, Node: Realtime Scheduling, Next: Basic Scheduling Functions, Prev: Absolute Priority, Up: Priority
54441 -Realtime Scheduling
54442 --------------------
54444 - Whenever two processes with the same absolute priority are ready to
54445 -run, the kernel has a decision to make, because only one can run at a
54446 -time. If the processes have absolute priority 0, the kernel makes this
54447 -decision as described in *Note Traditional Scheduling::. Otherwise,
54448 -the decision is as described in this section.
54450 - If two processes are ready to run but have different absolute
54451 -priorities, the decision is much simpler, and is described in *Note
54452 -Absolute Priority::.
54454 - Each process has a scheduling policy. For processes with absolute
54455 -priority other than zero, there are two available:
54457 - 1. First Come First Served
54459 - 2. Round Robin
54461 - The most sensible case is where all the processes with a certain
54462 -absolute priority have the same scheduling policy. We'll discuss that
54463 -first.
54465 - In Round Robin, processes share the CPU, each one running for a small
54466 -quantum of time ("time slice") and then yielding to another in a
54467 -circular fashion. Of course, only processes that are ready to run and
54468 -have the same absolute priority are in this circle.
54470 - In First Come First Served, the process that has been waiting the
54471 -longest to run gets the CPU, and it keeps it until it voluntarily
54472 -relinquishes the CPU, runs out of things to do (blocks), or gets
54473 -preempted by a higher priority process.
54475 - First Come First Served, along with maximal absolute priority and
54476 -careful control of interrupts and page faults, is the one to use when a
54477 -process absolutely, positively has to run at full CPU speed or not at
54478 -all.
54480 - Judicious use of `sched_yield' function invocations by processes
54481 -with First Come First Served scheduling policy forms a good compromise
54482 -between Round Robin and First Come First Served.
54484 - To understand how scheduling works when processes of different
54485 -scheduling policies occupy the same absolute priority, you have to know
54486 -the nitty gritty details of how processes enter and exit the ready to
54487 -run list:
54489 - In both cases, the ready to run list is organized as a true queue,
54490 -where a process gets pushed onto the tail when it becomes ready to run
54491 -and is popped off the head when the scheduler decides to run it. Note
54492 -that ready to run and running are two mutually exclusive states. When
54493 -the scheduler runs a process, that process is no longer ready to run
54494 -and no longer in the ready to run list. When the process stops
54495 -running, it may go back to being ready to run again.
54497 - The only difference between a process that is assigned the Round
54498 -Robin scheduling policy and a process that is assigned First Come First
54499 -Serve is that in the former case, the process is automatically booted
54500 -off the CPU after a certain amount of time. When that happens, the
54501 -process goes back to being ready to run, which means it enters the
54502 -queue at the tail. The time quantum we're talking about is small.
54503 -Really small. This is not your father's timesharing. For example,
54504 -with the Linux kernel, the round robin time slice is a thousand times
54505 -shorter than its typical time slice for traditional scheduling.
54507 - A process begins life with the same scheduling policy as its parent
54508 -process. Functions described in *Note Basic Scheduling Functions:: can
54509 -change it.
54511 - Only a privileged process can set the scheduling policy of a process
54512 -that has absolute priority higher than 0.
54514 -\x1f
54515 -File: libc.info, Node: Basic Scheduling Functions, Next: Traditional Scheduling, Prev: Realtime Scheduling, Up: Priority
54517 -Basic Scheduling Functions
54518 ---------------------------
54520 - This section describes functions in the GNU C library for setting the
54521 -absolute priority and scheduling policy of a process.
54523 - *Portability Note:* On systems that have the functions in this
54524 -section, the macro _POSIX_PRIORITY_SCHEDULING is defined in
54525 -`<unistd.h>'.
54527 - For the case that the scheduling policy is traditional scheduling,
54528 -more functions to fine tune the scheduling are in *Note Traditional
54529 -Scheduling::.
54531 - Don't try to make too much out of the naming and structure of these
54532 -functions. They don't match the concepts described in this manual
54533 -because the functions are as defined by POSIX.1b, but the implementation
54534 -on systems that use the GNU C library is the inverse of what the POSIX
54535 -structure contemplates. The POSIX scheme assumes that the primary
54536 -scheduling parameter is the scheduling policy and that the priority
54537 -value, if any, is a parameter of the scheduling policy. In the
54538 -implementation, though, the priority value is king and the scheduling
54539 -policy, if anything, only fine tunes the effect of that priority.
54541 - The symbols in this section are declared by including file `sched.h'.
54543 - - Data Type: struct sched_param
54544 - This structure describes an absolute priority.
54545 - `int sched_priority'
54546 - absolute priority value
54548 - - Function: int sched_setscheduler (pid_t PID, int POLICY, const
54549 - struct sched_param *PARAM)
54550 - This function sets both the absolute priority and the scheduling
54551 - policy for a process.
54553 - It assigns the absolute priority value given by PARAM and the
54554 - scheduling policy POLICY to the process with Process ID PID, or
54555 - the calling process if PID is zero. If POLICY is negative,
54556 - `sched_setscheduler' keeps the existing scheduling policy.
54558 - The following macros represent the valid values for POLICY:
54560 - `SCHED_OTHER'
54561 - Traditional Scheduling
54563 - `SCHED_FIFO'
54564 - First In First Out
54566 - `SCHED_RR'
54567 - Round Robin
54569 - On success, the return value is `0'. Otherwise, it is `-1' and
54570 - `ERRNO' is set accordingly. The `errno' values specific to this
54571 - function are:
54573 - `EPERM'
54574 - * The calling process does not have `CAP_SYS_NICE'
54575 - permission and POLICY is not `SCHED_OTHER' (or it's
54576 - negative and the existing policy is not `SCHED_OTHER'.
54578 - * The calling process does not have `CAP_SYS_NICE'
54579 - permission and its owner is not the target process'
54580 - owner. I.e. the effective uid of the calling process
54581 - is neither the effective nor the real uid of process PID.
54583 - `ESRCH'
54584 - There is no process with pid PID and PID is not zero.
54586 - `EINVAL'
54587 - * POLICY does not identify an existing scheduling policy.
54589 - * The absolute priority value identified by *PARAM is
54590 - outside the valid range for the scheduling policy POLICY
54591 - (or the existing scheduling policy if POLICY is
54592 - negative) or PARAM is null. `sched_get_priority_max'
54593 - and `sched_get_priority_min' tell you what the valid
54594 - range is.
54596 - * PID is negative.
54599 - - Function: int sched_getscheduler (pid_t PID)
54600 - This function returns the scheduling policy assigned to the
54601 - process with Process ID (pid) PID, or the calling process if PID
54602 - is zero.
54604 - The return value is the scheduling policy. See
54605 - `sched_setscheduler' for the possible values.
54607 - If the function fails, the return value is instead `-1' and
54608 - `errno' is set accordingly.
54610 - The `errno' values specific to this function are:
54612 - `ESRCH'
54613 - There is no process with pid PID and it is not zero.
54615 - `EINVAL'
54616 - PID is negative.
54618 - Note that this function is not an exact mate to
54619 - `sched_setscheduler' because while that function sets the
54620 - scheduling policy and the absolute priority, this function gets
54621 - only the scheduling policy. To get the absolute priority, use
54622 - `sched_getparam'.
54625 - - Function: int sched_setparam (pid_t PID, const struct sched_param
54626 - *PARAM)
54627 - This function sets a process' absolute priority.
54629 - It is functionally identical to `sched_setscheduler' with POLICY =
54630 - `-1'.
54633 - - Function: int sched_getparam (pid_t PID, const struct sched_param
54634 - *PARAM)
54635 - This function returns a process' absolute priority.
54637 - PID is the Process ID (pid) of the process whose absolute priority
54638 - you want to know.
54640 - PARAM is a pointer to a structure in which the function stores the
54641 - absolute priority of the process.
54643 - On success, the return value is `0'. Otherwise, it is `-1' and
54644 - `ERRNO' is set accordingly. The `errno' values specific to this
54645 - function are:
54647 - `ESRCH'
54648 - There is no process with pid PID and it is not zero.
54650 - `EINVAL'
54651 - PID is negative.
54654 - - Function: int sched_get_priority_min (int *POLICY);
54655 - This function returns the lowest absolute priority value that is
54656 - allowable for a process with scheduling policy POLICY.
54658 - On Linux, it is 0 for SCHED_OTHER and 1 for everything else.
54660 - On success, the return value is `0'. Otherwise, it is `-1' and
54661 - `ERRNO' is set accordingly. The `errno' values specific to this
54662 - function are:
54664 - `EINVAL'
54665 - POLICY does not identify an existing scheduling policy.
54668 - - Function: int sched_get_priority_max (int *POLICY);
54669 - This function returns the highest absolute priority value that is
54670 - allowable for a process that with scheduling policy POLICY.
54672 - On Linux, it is 0 for SCHED_OTHER and 99 for everything else.
54674 - On success, the return value is `0'. Otherwise, it is `-1' and
54675 - `ERRNO' is set accordingly. The `errno' values specific to this
54676 - function are:
54678 - `EINVAL'
54679 - POLICY does not identify an existing scheduling policy.
54682 - - Function: int sched_rr_get_interval (pid_t PID, struct timespec
54683 - *INTERVAL)
54684 - This function returns the length of the quantum (time slice) used
54685 - with the Round Robin scheduling policy, if it is used, for the
54686 - process with Process ID PID.
54688 - It returns the length of time as INTERVAL.
54690 - With a Linux kernel, the round robin time slice is always 150
54691 - microseconds, and PID need not even be a real pid.
54693 - The return value is `0' on success and in the pathological case
54694 - that it fails, the return value is `-1' and `errno' is set
54695 - accordingly. There is nothing specific that can go wrong with this
54696 - function, so there are no specific `errno' values.
54699 - - Function: int sched_yield (void)
54700 - This function voluntarily gives up the process' claim on the CPU.
54702 - Technically, `sched_yield' causes the calling process to be made
54703 - immediately ready to run (as opposed to running, which is what it
54704 - was before). This means that if it has absolute priority higher
54705 - than 0, it gets pushed onto the tail of the queue of processes
54706 - that share its absolute priority and are ready to run, and it will
54707 - run again when its turn next arrives. If its absolute priority is
54708 - 0, it is more complicated, but still has the effect of yielding
54709 - the CPU to other processes.
54711 - If there are no other processes that share the calling process'
54712 - absolute priority, this function doesn't have any effect.
54714 - To the extent that the containing program is oblivious to what
54715 - other processes in the system are doing and how fast it executes,
54716 - this function appears as a no-op.
54718 - The return value is `0' on success and in the pathological case
54719 - that it fails, the return value is `-1' and `errno' is set
54720 - accordingly. There is nothing specific that can go wrong with this
54721 - function, so there are no specific `errno' values.
54724 -\x1f
54725 -File: libc.info, Node: Traditional Scheduling, Prev: Basic Scheduling Functions, Up: Priority
54727 -Traditional Scheduling
54728 -----------------------
54730 - This section is about the scheduling among processes whose absolute
54731 -priority is 0. When the system hands out the scraps of CPU time that
54732 -are left over after the processes with higher absolute priority have
54733 -taken all they want, the scheduling described herein determines who
54734 -among the great unwashed processes gets them.
54736 -* Menu:
54738 -* Traditional Scheduling Intro::
54739 -* Traditional Scheduling Functions::
54741 -\x1f
54742 -File: libc.info, Node: Traditional Scheduling Intro, Next: Traditional Scheduling Functions, Up: Traditional Scheduling
54744 -Introduction To Traditional Scheduling
54745 -......................................
54747 - Long before there was absolute priority (See *Note Absolute
54748 -Priority::), Unix systems were scheduling the CPU using this system.
54749 -When Posix came in like the Romans and imposed absolute priorities to
54750 -accommodate the needs of realtime processing, it left the indigenous
54751 -Absolute Priority Zero processes to govern themselves by their own
54752 -familiar scheduling policy.
54754 - Indeed, absolute priorities higher than zero are not available on
54755 -many systems today and are not typically used when they are, being
54756 -intended mainly for computers that do realtime processing. So this
54757 -section describes the only scheduling many programmers need to be
54758 -concerned about.
54760 - But just to be clear about the scope of this scheduling: Any time a
54761 -process with a absolute priority of 0 and a process with an absolute
54762 -priority higher than 0 are ready to run at the same time, the one with
54763 -absolute priority 0 does not run. If it's already running when the
54764 -higher priority ready-to-run process comes into existence, it stops
54765 -immediately.
54767 - In addition to its absolute priority of zero, every process has
54768 -another priority, which we will refer to as "dynamic priority" because
54769 -it changes over time. The dynamic priority is meaningless for
54770 -processes with an absolute priority higher than zero.
54772 - The dynamic priority sometimes determines who gets the next turn on
54773 -the CPU. Sometimes it determines how long turns last. Sometimes it
54774 -determines whether a process can kick another off the CPU.
54776 - In Linux, the value is a combination of these things, but mostly it
54777 -is just determines the length of the time slice. The higher a process'
54778 -dynamic priority, the longer a shot it gets on the CPU when it gets one.
54779 -If it doesn't use up its time slice before giving up the CPU to do
54780 -something like wait for I/O, it is favored for getting the CPU back when
54781 -it's ready for it, to finish out its time slice. Other than that,
54782 -selection of processes for new time slices is basically round robin.
54783 -But the scheduler does throw a bone to the low priority processes: A
54784 -process' dynamic priority rises every time it is snubbed in the
54785 -scheduling process. In Linux, even the fat kid gets to play.
54787 - The fluctuation of a process' dynamic priority is regulated by
54788 -another value: The "nice" value. The nice value is an integer, usually
54789 -in the range -20 to 20, and represents an upper limit on a process'
54790 -dynamic priority. The higher the nice number, the lower that limit.
54792 - On a typical Linux system, for example, a process with a nice value
54793 -of 20 can get only 10 milliseconds on the CPU at a time, whereas a
54794 -process with a nice value of -20 can achieve a high enough priority to
54795 -get 400 milliseconds.
54797 - The idea of the nice value is deferential courtesy. In the
54798 -beginning, in the Unix garden of Eden, all processes shared equally in
54799 -the bounty of the computer system. But not all processes really need
54800 -the same share of CPU time, so the nice value gave a courteous process
54801 -the ability to refuse its equal share of CPU time that others might
54802 -prosper. Hence, the higher a process' nice value, the nicer the
54803 -process is. (Then a snake came along and offered some process a
54804 -negative nice value and the system became the crass resource allocation
54805 -system we know today).
54807 - Dynamic priorities tend upward and downward with an objective of
54808 -smoothing out allocation of CPU time and giving quick response time to
54809 -infrequent requests. But they never exceed their nice limits, so on a
54810 -heavily loaded CPU, the nice value effectively determines how fast a
54811 -process runs.
54813 - In keeping with the socialistic heritage of Unix process priority, a
54814 -process begins life with the same nice value as its parent process and
54815 -can raise it at will. A process can also raise the nice value of any
54816 -other process owned by the same user (or effective user). But only a
54817 -privileged process can lower its nice value. A privileged process can
54818 -also raise or lower another process' nice value.
54820 - GNU C Library functions for getting and setting nice values are
54821 -described in *Note Traditional Scheduling Functions::.
54823 diff -u -udbrN glibc-2.3.2/manual/libc.info-38 glibc-2.3.2-200304020432/manual/libc.info-38
54824 --- glibc-2.3.2/manual/libc.info-38 Sat Mar 1 02:39:41 2003
54825 +++ glibc-2.3.2-200304020432/manual/libc.info-38 Thu Jan 1 01:00:00 1970
54826 @@ -1,1105 +0,0 @@
54827 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
54829 -INFO-DIR-SECTION GNU libraries
54830 -START-INFO-DIR-ENTRY
54831 -* Libc: (libc). C library.
54832 -END-INFO-DIR-ENTRY
54834 - This file documents the GNU C library.
54836 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
54837 -Reference Manual', for Version 2.3.x.
54839 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
54840 -Free Software Foundation, Inc.
54842 - Permission is granted to copy, distribute and/or modify this document
54843 -under the terms of the GNU Free Documentation License, Version 1.1 or
54844 -any later version published by the Free Software Foundation; with the
54845 -Invariant Sections being "Free Software Needs Free Documentation" and
54846 -"GNU Lesser General Public License", the Front-Cover texts being (a)
54847 -(see below), and with the Back-Cover Texts being (b) (see below). A
54848 -copy of the license is included in the section entitled "GNU Free
54849 -Documentation License".
54851 - (a) The FSF's Front-Cover Text is:
54853 - A GNU Manual
54855 - (b) The FSF's Back-Cover Text is:
54857 - You have freedom to copy and modify this GNU Manual, like GNU
54858 -software. Copies published by the Free Software Foundation raise
54859 -funds for GNU development.
54861 -\x1f
54862 -File: libc.info, Node: Traditional Scheduling Functions, Prev: Traditional Scheduling Intro, Up: Traditional Scheduling
54864 -Functions For Traditional Scheduling
54865 -....................................
54867 - This section describes how you can read and set the nice value of a
54868 -process. All these symbols are declared in `sys/resource.h'.
54870 - The function and macro names are defined by POSIX, and refer to
54871 -"priority," but the functions actually have to do with nice values, as
54872 -the terms are used both in the manual and POSIX.
54874 - The range of valid nice values depends on the kernel, but typically
54875 -it runs from `-20' to `20'. A lower nice value corresponds to higher
54876 -priority for the process. These constants describe the range of
54877 -priority values:
54879 -`PRIO_MIN'
54880 - The lowest valid nice value.
54882 -`PRIO_MAX'
54883 - The highest valid nice value.
54885 - - Function: int getpriority (int CLASS, int ID)
54886 - Return the nice value of a set of processes; CLASS and ID specify
54887 - which ones (see below). If the processes specified do not all
54888 - have the same nice value, this returns the lowest value that any
54889 - of them has.
54891 - On success, the return value is `0'. Otherwise, it is `-1' and
54892 - `ERRNO' is set accordingly. The `errno' values specific to this
54893 - function are:
54895 - `ESRCH'
54896 - The combination of CLASS and ID does not match any existing
54897 - process.
54899 - `EINVAL'
54900 - The value of CLASS is not valid.
54902 - If the return value is `-1', it could indicate failure, or it could
54903 - be the nice value. The only way to make certain is to set `errno =
54904 - 0' before calling `getpriority', then use `errno != 0' afterward
54905 - as the criterion for failure.
54907 - - Function: int setpriority (int CLASS, int ID, int NICEVAL)
54908 - Set the nice value of a set of processes to NICEVAL; CLASS and ID
54909 - specify which ones (see below).
54911 - The return value is `0' on success, and `-1' on failure. The
54912 - following `errno' error condition are possible for this function:
54914 - `ESRCH'
54915 - The combination of CLASS and ID does not match any existing
54916 - process.
54918 - `EINVAL'
54919 - The value of CLASS is not valid.
54921 - `EPERM'
54922 - The call would set the nice value of a process which is owned
54923 - by a different user than the calling process (i.e. the target
54924 - process' real or effective uid does not match the calling
54925 - process' effective uid) and the calling process does not have
54926 - `CAP_SYS_NICE' permission.
54928 - `EACCES'
54929 - The call would lower the process' nice value and the process
54930 - does not have `CAP_SYS_NICE' permission.
54933 - The arguments CLASS and ID together specify a set of processes in
54934 -which you are interested. These are the possible values of CLASS:
54936 -`PRIO_PROCESS'
54937 - One particular process. The argument ID is a process ID (pid).
54939 -`PRIO_PGRP'
54940 - All the processes in a particular process group. The argument ID
54941 - is a process group ID (pgid).
54943 -`PRIO_USER'
54944 - All the processes owned by a particular user (i.e. whose real uid
54945 - indicates the user). The argument ID is a user ID (uid).
54947 - If the argument ID is 0, it stands for the calling process, its
54948 -process group, or its owner (real uid), according to CLASS.
54950 - - Function: int nice (int INCREMENT)
54951 - Increment the nice value of the calling process by INCREMENT. The
54952 - return value is the new nice value on success, and `-1' on
54953 - failure. In the case of failure, `errno' will be set to the same
54954 - values as for `setpriority'.
54956 - Here is an equivalent definition of `nice':
54958 - int
54959 - nice (int increment)
54961 - int result, old = getpriority (PRIO_PROCESS, 0);
54962 - result = setpriority (PRIO_PROCESS, 0, old + increment);
54963 - if (result != -1)
54964 - return old + increment;
54965 - else
54966 - return -1;
54969 -\x1f
54970 -File: libc.info, Node: Memory Resources, Next: Processor Resources, Prev: Priority, Up: Resource Usage And Limitation
54972 -Querying memory available resources
54973 -===================================
54975 - The amount of memory available in the system and the way it is
54976 -organized determines oftentimes the way programs can and have to work.
54977 -For functions like `mmap' it is necessary to know about the size of
54978 -individual memory pages and knowing how much memory is available enables
54979 -a program to select appropriate sizes for, say, caches. Before we get
54980 -into these details a few words about memory subsystems in traditional
54981 -Unix systems will be given.
54983 -* Menu:
54985 -* Memory Subsystem:: Overview about traditional Unix memory handling.
54986 -* Query Memory Parameters:: How to get information about the memory
54987 - subsystem?
54989 -\x1f
54990 -File: libc.info, Node: Memory Subsystem, Next: Query Memory Parameters, Up: Memory Resources
54992 -Overview about traditional Unix memory handling
54993 ------------------------------------------------
54995 - Unix systems normally provide processes virtual address spaces. This
54996 -means that the addresses of the memory regions do not have to correspond
54997 -directly to the addresses of the actual physical memory which stores the
54998 -data. An extra level of indirection is introduced which translates
54999 -virtual addresses into physical addresses. This is normally done by the
55000 -hardware of the processor.
55002 - Using a virtual address space has several advantage. The most
55003 -important is process isolation. The different processes running on the
55004 -system cannot interfere directly with each other. No process can write
55005 -into the address space of another process (except when shared memory is
55006 -used but then it is wanted and controlled).
55008 - Another advantage of virtual memory is that the address space the
55009 -processes see can actually be larger than the physical memory available.
55010 -The physical memory can be extended by storage on an external media
55011 -where the content of currently unused memory regions is stored. The
55012 -address translation can then intercept accesses to these memory regions
55013 -and make memory content available again by loading the data back into
55014 -memory. This concept makes it necessary that programs which have to use
55015 -lots of memory know the difference between available virtual address
55016 -space and available physical memory. If the working set of virtual
55017 -memory of all the processes is larger than the available physical memory
55018 -the system will slow down dramatically due to constant swapping of
55019 -memory content from the memory to the storage media and back. This is
55020 -called "thrashing".
55022 - A final aspect of virtual memory which is important and follows from
55023 -what is said in the last paragraph is the granularity of the virtual
55024 -address space handling. When we said that the virtual address handling
55025 -stores memory content externally it cannot do this on a byte-by-byte
55026 -basis. The administrative overhead does not allow this (leaving alone
55027 -the processor hardware). Instead several thousand bytes are handled
55028 -together and form a "page". The size of each page is always a power of
55029 -two byte. The smallest page size in use today is 4096, with 8192,
55030 -16384, and 65536 being other popular sizes.
55032 -\x1f
55033 -File: libc.info, Node: Query Memory Parameters, Prev: Memory Subsystem, Up: Memory Resources
55035 -How to get information about the memory subsystem?
55036 ---------------------------------------------------
55038 - The page size of the virtual memory the process sees is essential to
55039 -know in several situations. Some programming interface (e.g., `mmap',
55040 -*note Memory-mapped I/O::) require the user to provide information
55041 -adjusted to the page size. In the case of `mmap' is it necessary to
55042 -provide a length argument which is a multiple of the page size.
55043 -Another place where the knowledge about the page size is useful is in
55044 -memory allocation. If one allocates pieces of memory in larger chunks
55045 -which are then subdivided by the application code it is useful to
55046 -adjust the size of the larger blocks to the page size. If the total
55047 -memory requirement for the block is close (but not larger) to a multiple
55048 -of the page size the kernel's memory handling can work more effectively
55049 -since it only has to allocate memory pages which are fully used. (To do
55050 -this optimization it is necessary to know a bit about the memory
55051 -allocator which will require a bit of memory itself for each block and
55052 -this overhead must not push the total size over the page size multiple.
55054 - The page size traditionally was a compile time constant. But recent
55055 -development of processors changed this. Processors now support
55056 -different page sizes and they can possibly even vary among different
55057 -processes on the same system. Therefore the system should be queried at
55058 -runtime about the current page size and no assumptions (except about it
55059 -being a power of two) should be made.
55061 - The correct interface to query about the page size is `sysconf'
55062 -(*note Sysconf Definition::) with the parameter `_SC_PAGESIZE'. There
55063 -is a much older interface available, too.
55065 - - Function: int getpagesize (void)
55066 - The `getpagesize' function returns the page size of the process.
55067 - This value is fixed for the runtime of the process but can vary in
55068 - different runs of the application.
55070 - The function is declared in `unistd.h'.
55072 - Widely available on System V derived systems is a method to get
55073 -information about the physical memory the system has. The call
55075 - sysconf (_SC_PHYS_PAGES)
55077 -returns the total number of pages of physical the system has. This
55078 -does not mean all this memory is available. This information can be
55079 -found using
55081 - sysconf (_SC_AVPHYS_PAGES)
55083 - These two values help to optimize applications. The value returned
55084 -for `_SC_AVPHYS_PAGES' is the amount of memory the application can use
55085 -without hindering any other process (given that no other process
55086 -increases its memory usage). The value returned for `_SC_PHYS_PAGES'
55087 -is more or less a hard limit for the working set. If all applications
55088 -together constantly use more than that amount of memory the system is
55089 -in trouble.
55091 - The GNU C library provides in addition to these already described
55092 -way to get this information two functions. They are declared in the
55093 -file `sys/sysinfo.h'. Programmers should prefer to use the `sysconf'
55094 -method described above.
55096 - - Function: long int get_phys_pages (void)
55097 - The `get_phys_pages' function returns the total number of pages of
55098 - physical the system has. To get the amount of memory this number
55099 - has to be multiplied by the page size.
55101 - This function is a GNU extension.
55103 - - Function: long int get_avphys_pages (void)
55104 - The `get_phys_pages' function returns the number of available
55105 - pages of physical the system has. To get the amount of memory
55106 - this number has to be multiplied by the page size.
55108 - This function is a GNU extension.
55110 -\x1f
55111 -File: libc.info, Node: Processor Resources, Prev: Memory Resources, Up: Resource Usage And Limitation
55113 -Learn about the processors available
55114 -====================================
55116 - The use of threads or processes with shared memory allows an
55117 -application to take advantage of all the processing power a system can
55118 -provide. If the task can be parallelized the optimal way to write an
55119 -application is to have at any time as many processes running as there
55120 -are processors. To determine the number of processors available to the
55121 -system one can run
55123 - sysconf (_SC_NPROCESSORS_CONF)
55125 -which returns the number of processors the operating system configured.
55126 -But it might be possible for the operating system to disable individual
55127 -processors and so the call
55129 - sysconf (_SC_NPROCESSORS_ONLN)
55131 -returns the number of processors which are currently inline (i.e.,
55132 -available).
55134 - For these two pieces of information the GNU C library also provides
55135 -functions to get the information directly. The functions are declared
55136 -in `sys/sysinfo.h'.
55138 - - Function: int get_nprocs_conf (void)
55139 - The `get_nprocs_conf' function returns the number of processors the
55140 - operating system configured.
55142 - This function is a GNU extension.
55144 - - Function: int get_nprocs (void)
55145 - The `get_nprocs' function returns the number of available
55146 - processors.
55148 - This function is a GNU extension.
55150 - Before starting more threads it should be checked whether the
55151 -processors are not already overused. Unix systems calculate something
55152 -called the "load average". This is a number indicating how many
55153 -processes were running. This number is average over different periods
55154 -of times (normally 1, 5, and 15 minutes).
55156 - - Function: int getloadavg (double LOADAVG[], int NELEM)
55157 - This function gets the 1, 5 and 15 minute load averages of the
55158 - system. The values are placed in LOADAVG. `getloadavg' will place
55159 - at most NELEM elements into the array but never more than three
55160 - elements. The return value is the number of elements written to
55161 - LOADAVG, or -1 on error.
55163 - This function is declared in `stdlib.h'.
55165 -\x1f
55166 -File: libc.info, Node: Non-Local Exits, Next: Signal Handling, Prev: Resource Usage And Limitation, Up: Top
55168 -Non-Local Exits
55169 -***************
55171 - Sometimes when your program detects an unusual situation inside a
55172 -deeply nested set of function calls, you would like to be able to
55173 -immediately return to an outer level of control. This section
55174 -describes how you can do such "non-local exits" using the `setjmp' and
55175 -`longjmp' functions.
55177 -* Menu:
55179 -* Intro: Non-Local Intro. When and how to use these facilities.
55180 -* Details: Non-Local Details. Functions for non-local exits.
55181 -* Non-Local Exits and Signals:: Portability issues.
55182 -* System V contexts:: Complete context control a la System V.
55184 -\x1f
55185 -File: libc.info, Node: Non-Local Intro, Next: Non-Local Details, Up: Non-Local Exits
55187 -Introduction to Non-Local Exits
55188 -===============================
55190 - As an example of a situation where a non-local exit can be useful,
55191 -suppose you have an interactive program that has a "main loop" that
55192 -prompts for and executes commands. Suppose the "read" command reads
55193 -input from a file, doing some lexical analysis and parsing of the input
55194 -while processing it. If a low-level input error is detected, it would
55195 -be useful to be able to return immediately to the "main loop" instead
55196 -of having to make each of the lexical analysis, parsing, and processing
55197 -phases all have to explicitly deal with error situations initially
55198 -detected by nested calls.
55200 - (On the other hand, if each of these phases has to do a substantial
55201 -amount of cleanup when it exits--such as closing files, deallocating
55202 -buffers or other data structures, and the like--then it can be more
55203 -appropriate to do a normal return and have each phase do its own
55204 -cleanup, because a non-local exit would bypass the intervening phases
55205 -and their associated cleanup code entirely. Alternatively, you could
55206 -use a non-local exit but do the cleanup explicitly either before or
55207 -after returning to the "main loop".)
55209 - In some ways, a non-local exit is similar to using the `return'
55210 -statement to return from a function. But while `return' abandons only
55211 -a single function call, transferring control back to the point at which
55212 -it was called, a non-local exit can potentially abandon many levels of
55213 -nested function calls.
55215 - You identify return points for non-local exits by calling the
55216 -function `setjmp'. This function saves information about the execution
55217 -environment in which the call to `setjmp' appears in an object of type
55218 -`jmp_buf'. Execution of the program continues normally after the call
55219 -to `setjmp', but if an exit is later made to this return point by
55220 -calling `longjmp' with the corresponding `jmp_buf' object, control is
55221 -transferred back to the point where `setjmp' was called. The return
55222 -value from `setjmp' is used to distinguish between an ordinary return
55223 -and a return made by a call to `longjmp', so calls to `setjmp' usually
55224 -appear in an `if' statement.
55226 - Here is how the example program described above might be set up:
55228 - #include <setjmp.h>
55229 - #include <stdlib.h>
55230 - #include <stdio.h>
55232 - jmp_buf main_loop;
55234 - void
55235 - abort_to_main_loop (int status)
55237 - longjmp (main_loop, status);
55240 - int
55241 - main (void)
55243 - while (1)
55244 - if (setjmp (main_loop))
55245 - puts ("Back at main loop....");
55246 - else
55247 - do_command ();
55251 - void
55252 - do_command (void)
55254 - char buffer[128];
55255 - if (fgets (buffer, 128, stdin) == NULL)
55256 - abort_to_main_loop (-1);
55257 - else
55258 - exit (EXIT_SUCCESS);
55261 - The function `abort_to_main_loop' causes an immediate transfer of
55262 -control back to the main loop of the program, no matter where it is
55263 -called from.
55265 - The flow of control inside the `main' function may appear a little
55266 -mysterious at first, but it is actually a common idiom with `setjmp'.
55267 -A normal call to `setjmp' returns zero, so the "else" clause of the
55268 -conditional is executed. If `abort_to_main_loop' is called somewhere
55269 -within the execution of `do_command', then it actually appears as if
55270 -the _same_ call to `setjmp' in `main' were returning a second time with
55271 -a value of `-1'.
55273 - So, the general pattern for using `setjmp' looks something like:
55275 - if (setjmp (BUFFER))
55276 - /* Code to clean up after premature return. */
55277 - ...
55278 - else
55279 - /* Code to be executed normally after setting up the return point. */
55280 - ...
55282 -\x1f
55283 -File: libc.info, Node: Non-Local Details, Next: Non-Local Exits and Signals, Prev: Non-Local Intro, Up: Non-Local Exits
55285 -Details of Non-Local Exits
55286 -==========================
55288 - Here are the details on the functions and data structures used for
55289 -performing non-local exits. These facilities are declared in
55290 -`setjmp.h'.
55292 - - Data Type: jmp_buf
55293 - Objects of type `jmp_buf' hold the state information to be
55294 - restored by a non-local exit. The contents of a `jmp_buf'
55295 - identify a specific place to return to.
55297 - - Macro: int setjmp (jmp_buf STATE)
55298 - When called normally, `setjmp' stores information about the
55299 - execution state of the program in STATE and returns zero. If
55300 - `longjmp' is later used to perform a non-local exit to this STATE,
55301 - `setjmp' returns a nonzero value.
55303 - - Function: void longjmp (jmp_buf STATE, int VALUE)
55304 - This function restores current execution to the state saved in
55305 - STATE, and continues execution from the call to `setjmp' that
55306 - established that return point. Returning from `setjmp' by means of
55307 - `longjmp' returns the VALUE argument that was passed to `longjmp',
55308 - rather than `0'. (But if VALUE is given as `0', `setjmp' returns
55309 - `1').
55311 - There are a lot of obscure but important restrictions on the use of
55312 -`setjmp' and `longjmp'. Most of these restrictions are present because
55313 -non-local exits require a fair amount of magic on the part of the C
55314 -compiler and can interact with other parts of the language in strange
55315 -ways.
55317 - The `setjmp' function is actually a macro without an actual function
55318 -definition, so you shouldn't try to `#undef' it or take its address.
55319 -In addition, calls to `setjmp' are safe in only the following contexts:
55321 - * As the test expression of a selection or iteration statement (such
55322 - as `if', `switch', or `while').
55324 - * As one operand of a equality or comparison operator that appears
55325 - as the test expression of a selection or iteration statement. The
55326 - other operand must be an integer constant expression.
55328 - * As the operand of a unary `!' operator, that appears as the test
55329 - expression of a selection or iteration statement.
55331 - * By itself as an expression statement.
55333 - Return points are valid only during the dynamic extent of the
55334 -function that called `setjmp' to establish them. If you `longjmp' to a
55335 -return point that was established in a function that has already
55336 -returned, unpredictable and disastrous things are likely to happen.
55338 - You should use a nonzero VALUE argument to `longjmp'. While
55339 -`longjmp' refuses to pass back a zero argument as the return value from
55340 -`setjmp', this is intended as a safety net against accidental misuse
55341 -and is not really good programming style.
55343 - When you perform a non-local exit, accessible objects generally
55344 -retain whatever values they had at the time `longjmp' was called. The
55345 -exception is that the values of automatic variables local to the
55346 -function containing the `setjmp' call that have been changed since the
55347 -call to `setjmp' are indeterminate, unless you have declared them
55348 -`volatile'.
55350 -\x1f
55351 -File: libc.info, Node: Non-Local Exits and Signals, Next: System V contexts, Prev: Non-Local Details, Up: Non-Local Exits
55353 -Non-Local Exits and Signals
55354 -===========================
55356 - In BSD Unix systems, `setjmp' and `longjmp' also save and restore
55357 -the set of blocked signals; see *Note Blocking Signals::. However, the
55358 -POSIX.1 standard requires `setjmp' and `longjmp' not to change the set
55359 -of blocked signals, and provides an additional pair of functions
55360 -(`sigsetjmp' and `siglongjmp') to get the BSD behavior.
55362 - The behavior of `setjmp' and `longjmp' in the GNU library is
55363 -controlled by feature test macros; see *Note Feature Test Macros::. The
55364 -default in the GNU system is the POSIX.1 behavior rather than the BSD
55365 -behavior.
55367 - The facilities in this section are declared in the header file
55368 -`setjmp.h'.
55370 - - Data Type: sigjmp_buf
55371 - This is similar to `jmp_buf', except that it can also store state
55372 - information about the set of blocked signals.
55374 - - Function: int sigsetjmp (sigjmp_buf STATE, int SAVESIGS)
55375 - This is similar to `setjmp'. If SAVESIGS is nonzero, the set of
55376 - blocked signals is saved in STATE and will be restored if a
55377 - `siglongjmp' is later performed with this STATE.
55379 - - Function: void siglongjmp (sigjmp_buf STATE, int VALUE)
55380 - This is similar to `longjmp' except for the type of its STATE
55381 - argument. If the `sigsetjmp' call that set this STATE used a
55382 - nonzero SAVESIGS flag, `siglongjmp' also restores the set of
55383 - blocked signals.
55385 -\x1f
55386 -File: libc.info, Node: System V contexts, Prev: Non-Local Exits and Signals, Up: Non-Local Exits
55388 -Complete Context Control
55389 -========================
55391 - The Unix standard one more set of function to control the execution
55392 -path and these functions are more powerful than those discussed in this
55393 -chapter so far. These function were part of the original System V API
55394 -and by this route were added to the Unix API. Beside on branded Unix
55395 -implementations these interfaces are not widely available. Not all
55396 -platforms and/or architectures the GNU C Library is available on provide
55397 -this interface. Use `configure' to detect the availability.
55399 - Similar to the `jmp_buf' and `sigjmp_buf' types used for the
55400 -variables to contain the state of the `longjmp' functions the
55401 -interfaces of interest here have an appropriate type as well. Objects
55402 -of this type are normally much larger since more information is
55403 -contained. The type is also used in a few more places as we will see.
55404 -The types and functions described in this section are all defined and
55405 -declared respectively in the `ucontext.h' header file.
55407 - - Data Type: ucontext_t
55408 - The `ucontext_t' type is defined as a structure with as least the
55409 - following elements:
55411 - `ucontext_t *uc_link'
55412 - This is a pointer to the next context structure which is used
55413 - if the context described in the current structure returns.
55415 - `sigset_t uc_sigmask'
55416 - Set of signals which are blocked when this context is used.
55418 - `stack_t uc_stack'
55419 - Stack used for this context. The value need not be (and
55420 - normally is not) the stack pointer. *Note Signal Stack::.
55422 - `mcontext_t uc_mcontext'
55423 - This element contains the actual state of the process. The
55424 - `mcontext_t' type is also defined in this header but the
55425 - definition should be treated as opaque. Any use of knowledge
55426 - of the type makes applications less portable.
55429 - Objects of this type have to be created by the user. The
55430 -initialization and modification happens through one of the following
55431 -functions:
55433 - - Function: int getcontext (ucontext_t *UCP)
55434 - The `getcontext' function initializes the variable pointed to by
55435 - UCP with the context of the calling thread. The context contains
55436 - the content of the registers, the signal mask, and the current
55437 - stack. Executing the contents would start at the point where the
55438 - `getcontext' call just returned.
55440 - The function returns `0' if successful. Otherwise it returns `-1'
55441 - and sets ERRNO accordingly.
55443 - The `getcontext' function is similar to `setjmp' but it does not
55444 -provide an indication of whether the function returns for the first
55445 -time or whether the initialized context was used and the execution is
55446 -resumed at just that point. If this is necessary the user has to take
55447 -determine this herself. This must be done carefully since the context
55448 -contains registers which might contain register variables. This is a
55449 -good situation to define variables with `volatile'.
55451 - Once the context variable is initialized it can be used as is or it
55452 -can be modified. The latter is normally done to implement co-routines
55453 -or similar constructs. The `makecontext' function is what has to be
55454 -used to do that.
55456 - - Function: void makecontext (ucontext_t *UCP, void (*FUNC) (void),
55457 - int ARGC, ...)
55458 - The UCP parameter passed to the `makecontext' shall be initialized
55459 - by a call to `getcontext'. The context will be modified to in a
55460 - way so that if the context is resumed it will start by calling the
55461 - function `func' which gets ARGC integer arguments passed. The
55462 - integer arguments which are to be passed should follow the ARGC
55463 - parameter in the call to `makecontext'.
55465 - Before the call to this function the `uc_stack' and `uc_link'
55466 - element of the UCP structure should be initialized. The
55467 - `uc_stack' element describes the stack which is used for this
55468 - context. No two contexts which are used at the same time should
55469 - use the same memory region for a stack.
55471 - The `uc_link' element of the object pointed to by UCP should be a
55472 - pointer to the context to be executed when the function FUNC
55473 - returns or it should be a null pointer. See `setcontext' for more
55474 - information about the exact use.
55476 - While allocating the memory for the stack one has to be careful.
55477 -Most modern processors keep track of whether a certain memory region is
55478 -allowed to contain code which is executed or not. Data segments and
55479 -heap memory is normally not tagged to allow this. The result is that
55480 -programs would fail. Examples for such code include the calling
55481 -sequences the GNU C compiler generates for calls to nested functions.
55482 -Safe ways to allocate stacks correctly include using memory on the
55483 -original threads stack or explicitly allocate memory tagged for
55484 -execution using (*note Memory-mapped I/O::).
55486 - *Compatibility note*: The current Unix standard is very imprecise
55487 -about the way the stack is allocated. All implementations seem to agree
55488 -that the `uc_stack' element must be used but the values stored in the
55489 -elements of the `stack_t' value are unclear. The GNU C library and
55490 -most other Unix implementations require the `ss_sp' value of the
55491 -`uc_stack' element to point to the base of the memory region allocated
55492 -for the stack and the size of the memory region is stored in `ss_size'.
55493 -There are implements out there which require `ss_sp' to be set to the
55494 -value the stack pointer will have (which can depending on the direction
55495 -the stack grows be different). This difference makes the `makecontext'
55496 -function hard to use and it requires detection of the platform at
55497 -compile time.
55499 - - Function: int setcontext (const ucontext_t *UCP)
55500 - The `setcontext' function restores the context described by UCP.
55501 - The context is not modified and can be reused as often as wanted.
55503 - If the context was created by `getcontext' execution resumes with
55504 - the registers filled with the same values and the same stack as if
55505 - the `getcontext' call just returned.
55507 - If the context was modified with a call to `makecontext' execution
55508 - continues with the function passed to `makecontext' which gets the
55509 - specified parameters passed. If this function returns execution is
55510 - resumed in the context which was referenced by the `uc_link'
55511 - element of the context structure passed to `makecontext' at the
55512 - time of the call. If `uc_link' was a null pointer the application
55513 - terminates in this case.
55515 - Since the context contains information about the stack no two
55516 - threads should use the same context at the same time. The result
55517 - in most cases would be disastrous.
55519 - The `setcontext' function does not return unless an error occurred
55520 - in which case it returns `-1'.
55522 - The `setcontext' function simply replaces the current context with
55523 -the one described by the UCP parameter. This is often useful but there
55524 -are situations where the current context has to be preserved.
55526 - - Function: int swapcontext (ucontext_t *restrict OUCP, const
55527 - ucontext_t *restrict UCP)
55528 - The `swapcontext' function is similar to `setcontext' but instead
55529 - of just replacing the current context the latter is first saved in
55530 - the object pointed to by OUCP as if this was a call to
55531 - `getcontext'. The saved context would resume after the call to
55532 - `swapcontext'.
55534 - Once the current context is saved the context described in UCP is
55535 - installed and execution continues as described in this context.
55537 - If `swapcontext' succeeds the function does not return unless the
55538 - context OUCP is used without prior modification by `makecontext'.
55539 - The return value in this case is `0'. If the function fails it
55540 - returns `-1' and set ERRNO accordingly.
55542 -Example for SVID Context Handling
55543 -=================================
55545 - The easiest way to use the context handling functions is as a
55546 -replacement for `setjmp' and `longjmp'. The context contains on most
55547 -platforms more information which might lead to less surprises but this
55548 -also means using these functions is more expensive (beside being less
55549 -portable).
55551 - int
55552 - random_search (int n, int (*fp) (int, ucontext_t *))
55554 - volatile int cnt = 0;
55555 - ucontext_t uc;
55557 - /* Safe current context. */
55558 - if (getcontext (&uc) < 0)
55559 - return -1;
55561 - /* If we have not tried N times try again. */
55562 - if (cnt++ < n)
55563 - /* Call the function with a new random number
55564 - and the context. */
55565 - if (fp (rand (), &uc) != 0)
55566 - /* We found what we were looking for. */
55567 - return 1;
55569 - /* Not found. */
55570 - return 0;
55573 - Using contexts in such a way enables emulating exception handling.
55574 -The search functions passed in the FP parameter could be very large,
55575 -nested, and complex which would make it complicated (or at least would
55576 -require a lot of code) to leave the function with an error value which
55577 -has to be passed down to the caller. By using the context it is
55578 -possible to leave the search function in one step and allow restarting
55579 -the search which also has the nice side effect that it can be
55580 -significantly faster.
55582 - Something which is harder to implement with `setjmp' and `longjmp'
55583 -is to switch temporarily to a different execution path and then resume
55584 -where execution was stopped.
55586 - #include <signal.h>
55587 - #include <stdio.h>
55588 - #include <stdlib.h>
55589 - #include <ucontext.h>
55590 - #include <sys/time.h>
55592 - /* Set by the signal handler. */
55593 - static volatile int expired;
55595 - /* The contexts. */
55596 - static ucontext_t uc[3];
55598 - /* We do only a certain number of switches. */
55599 - static int switches;
55602 - /* This is the function doing the work. It is just a
55603 - skeleton, real code has to be filled in. */
55604 - static void
55605 - f (int n)
55607 - int m = 0;
55608 - while (1)
55610 - /* This is where the work would be done. */
55611 - if (++m % 100 == 0)
55613 - putchar ('.');
55614 - fflush (stdout);
55617 - /* Regularly the EXPIRE variable must be checked. */
55618 - if (expired)
55620 - /* We do not want the program to run forever. */
55621 - if (++switches == 20)
55622 - return;
55624 - printf ("\nswitching from %d to %d\n", n, 3 - n);
55625 - expired = 0;
55626 - /* Switch to the other context, saving the current one. */
55627 - swapcontext (&uc[n], &uc[3 - n]);
55632 - /* This is the signal handler which simply set the variable. */
55633 - void
55634 - handler (int signal)
55636 - expired = 1;
55640 - int
55641 - main (void)
55643 - struct sigaction sa;
55644 - struct itimerval it;
55645 - char st1[8192];
55646 - char st2[8192];
55648 - /* Initialize the data structures for the interval timer. */
55649 - sa.sa_flags = SA_RESTART;
55650 - sigfillset (&sa.sa_mask);
55651 - sa.sa_handler = handler;
55652 - it.it_interval.tv_sec = 0;
55653 - it.it_interval.tv_usec = 1;
55654 - it.it_value = it.it_interval;
55656 - /* Install the timer and get the context we can manipulate. */
55657 - if (sigaction (SIGPROF, &sa, NULL) < 0
55658 - || setitimer (ITIMER_PROF, &it, NULL) < 0
55659 - || getcontext (&uc[1]) == -1
55660 - || getcontext (&uc[2]) == -1)
55661 - abort ();
55663 - /* Create a context with a separate stack which causes the
55664 - function `f' to be call with the parameter `1'.
55665 - Note that the `uc_link' points to the main context
55666 - which will cause the program to terminate once the function
55667 - return. */
55668 - uc[1].uc_link = &uc[0];
55669 - uc[1].uc_stack.ss_sp = st1;
55670 - uc[1].uc_stack.ss_size = sizeof st1;
55671 - makecontext (&uc[1], (void (*) (void)) f, 1, 1);
55673 - /* Similarly, but `2' is passed as the parameter to `f'. */
55674 - uc[2].uc_link = &uc[0];
55675 - uc[2].uc_stack.ss_sp = st2;
55676 - uc[2].uc_stack.ss_size = sizeof st2;
55677 - makecontext (&uc[2], (void (*) (void)) f, 1, 2);
55679 - /* Start running. */
55680 - swapcontext (&uc[0], &uc[1]);
55681 - putchar ('\n');
55683 - return 0;
55686 - This an example how the context functions can be used to implement
55687 -co-routines or cooperative multi-threading. All that has to be done is
55688 -to call every once in a while `swapcontext' to continue running a
55689 -different context. It is not allowed to do the context switching from
55690 -the signal handler directly since neither `setcontext' nor
55691 -`swapcontext' are functions which can be called from a signal handler.
55692 -But setting a variable in the signal handler and checking it in the
55693 -body of the functions which are executed. Since `swapcontext' is
55694 -saving the current context it is possible to have multiple different
55695 -scheduling points in the code. Execution will always resume where it
55696 -was left.
55698 -\x1f
55699 -File: libc.info, Node: Signal Handling, Next: Program Basics, Prev: Non-Local Exits, Up: Top
55701 -Signal Handling
55702 -***************
55704 - A "signal" is a software interrupt delivered to a process. The
55705 -operating system uses signals to report exceptional situations to an
55706 -executing program. Some signals report errors such as references to
55707 -invalid memory addresses; others report asynchronous events, such as
55708 -disconnection of a phone line.
55710 - The GNU C library defines a variety of signal types, each for a
55711 -particular kind of event. Some kinds of events make it inadvisable or
55712 -impossible for the program to proceed as usual, and the corresponding
55713 -signals normally abort the program. Other kinds of signals that report
55714 -harmless events are ignored by default.
55716 - If you anticipate an event that causes signals, you can define a
55717 -handler function and tell the operating system to run it when that
55718 -particular type of signal arrives.
55720 - Finally, one process can send a signal to another process; this
55721 -allows a parent process to abort a child, or two related processes to
55722 -communicate and synchronize.
55724 -* Menu:
55726 -* Concepts of Signals:: Introduction to the signal facilities.
55727 -* Standard Signals:: Particular kinds of signals with
55728 - standard names and meanings.
55729 -* Signal Actions:: Specifying what happens when a
55730 - particular signal is delivered.
55731 -* Defining Handlers:: How to write a signal handler function.
55732 -* Interrupted Primitives:: Signal handlers affect use of `open',
55733 - `read', `write' and other functions.
55734 -* Generating Signals:: How to send a signal to a process.
55735 -* Blocking Signals:: Making the system hold signals temporarily.
55736 -* Waiting for a Signal:: Suspending your program until a signal
55737 - arrives.
55738 -* Signal Stack:: Using a Separate Signal Stack.
55739 -* BSD Signal Handling:: Additional functions for backward
55740 - compatibility with BSD.
55742 -\x1f
55743 -File: libc.info, Node: Concepts of Signals, Next: Standard Signals, Up: Signal Handling
55745 -Basic Concepts of Signals
55746 -=========================
55748 - This section explains basic concepts of how signals are generated,
55749 -what happens after a signal is delivered, and how programs can handle
55750 -signals.
55752 -* Menu:
55754 -* Kinds of Signals:: Some examples of what can cause a signal.
55755 -* Signal Generation:: Concepts of why and how signals occur.
55756 -* Delivery of Signal:: Concepts of what a signal does to the
55757 - process.
55759 -\x1f
55760 -File: libc.info, Node: Kinds of Signals, Next: Signal Generation, Up: Concepts of Signals
55762 -Some Kinds of Signals
55763 ----------------------
55765 - A signal reports the occurrence of an exceptional event. These are
55766 -some of the events that can cause (or "generate", or "raise") a signal:
55768 - * A program error such as dividing by zero or issuing an address
55769 - outside the valid range.
55771 - * A user request to interrupt or terminate the program. Most
55772 - environments are set up to let a user suspend the program by
55773 - typing `C-z', or terminate it with `C-c'. Whatever key sequence
55774 - is used, the operating system sends the proper signal to interrupt
55775 - the process.
55777 - * The termination of a child process.
55779 - * Expiration of a timer or alarm.
55781 - * A call to `kill' or `raise' by the same process.
55783 - * A call to `kill' from another process. Signals are a limited but
55784 - useful form of interprocess communication.
55786 - * An attempt to perform an I/O operation that cannot be done.
55787 - Examples are reading from a pipe that has no writer (*note Pipes
55788 - and FIFOs::), and reading or writing to a terminal in certain
55789 - situations (*note Job Control::).
55791 - Each of these kinds of events (excepting explicit calls to `kill'
55792 -and `raise') generates its own particular kind of signal. The various
55793 -kinds of signals are listed and described in detail in *Note Standard
55794 -Signals::.
55796 -\x1f
55797 -File: libc.info, Node: Signal Generation, Next: Delivery of Signal, Prev: Kinds of Signals, Up: Concepts of Signals
55799 -Concepts of Signal Generation
55800 ------------------------------
55802 - In general, the events that generate signals fall into three major
55803 -categories: errors, external events, and explicit requests.
55805 - An error means that a program has done something invalid and cannot
55806 -continue execution. But not all kinds of errors generate signals--in
55807 -fact, most do not. For example, opening a nonexistent file is an error,
55808 -but it does not raise a signal; instead, `open' returns `-1'. In
55809 -general, errors that are necessarily associated with certain library
55810 -functions are reported by returning a value that indicates an error.
55811 -The errors which raise signals are those which can happen anywhere in
55812 -the program, not just in library calls. These include division by zero
55813 -and invalid memory addresses.
55815 - An external event generally has to do with I/O or other processes.
55816 -These include the arrival of input, the expiration of a timer, and the
55817 -termination of a child process.
55819 - An explicit request means the use of a library function such as
55820 -`kill' whose purpose is specifically to generate a signal.
55822 - Signals may be generated "synchronously" or "asynchronously". A
55823 -synchronous signal pertains to a specific action in the program, and is
55824 -delivered (unless blocked) during that action. Most errors generate
55825 -signals synchronously, and so do explicit requests by a process to
55826 -generate a signal for that same process. On some machines, certain
55827 -kinds of hardware errors (usually floating-point exceptions) are not
55828 -reported completely synchronously, but may arrive a few instructions
55829 -later.
55831 - Asynchronous signals are generated by events outside the control of
55832 -the process that receives them. These signals arrive at unpredictable
55833 -times during execution. External events generate signals
55834 -asynchronously, and so do explicit requests that apply to some other
55835 -process.
55837 - A given type of signal is either typically synchronous or typically
55838 -asynchronous. For example, signals for errors are typically synchronous
55839 -because errors generate signals synchronously. But any type of signal
55840 -can be generated synchronously or asynchronously with an explicit
55841 -request.
55843 -\x1f
55844 -File: libc.info, Node: Delivery of Signal, Prev: Signal Generation, Up: Concepts of Signals
55846 -How Signals Are Delivered
55847 --------------------------
55849 - When a signal is generated, it becomes "pending". Normally it
55850 -remains pending for just a short period of time and then is "delivered"
55851 -to the process that was signaled. However, if that kind of signal is
55852 -currently "blocked", it may remain pending indefinitely--until signals
55853 -of that kind are "unblocked". Once unblocked, it will be delivered
55854 -immediately. *Note Blocking Signals::.
55856 - When the signal is delivered, whether right away or after a long
55857 -delay, the "specified action" for that signal is taken. For certain
55858 -signals, such as `SIGKILL' and `SIGSTOP', the action is fixed, but for
55859 -most signals, the program has a choice: ignore the signal, specify a
55860 -"handler function", or accept the "default action" for that kind of
55861 -signal. The program specifies its choice using functions such as
55862 -`signal' or `sigaction' (*note Signal Actions::). We sometimes say
55863 -that a handler "catches" the signal. While the handler is running,
55864 -that particular signal is normally blocked.
55866 - If the specified action for a kind of signal is to ignore it, then
55867 -any such signal which is generated is discarded immediately. This
55868 -happens even if the signal is also blocked at the time. A signal
55869 -discarded in this way will never be delivered, not even if the program
55870 -subsequently specifies a different action for that kind of signal and
55871 -then unblocks it.
55873 - If a signal arrives which the program has neither handled nor
55874 -ignored, its "default action" takes place. Each kind of signal has its
55875 -own default action, documented below (*note Standard Signals::). For
55876 -most kinds of signals, the default action is to terminate the process.
55877 -For certain kinds of signals that represent "harmless" events, the
55878 -default action is to do nothing.
55880 - When a signal terminates a process, its parent process can determine
55881 -the cause of termination by examining the termination status code
55882 -reported by the `wait' or `waitpid' functions. (This is discussed in
55883 -more detail in *Note Process Completion::.) The information it can get
55884 -includes the fact that termination was due to a signal and the kind of
55885 -signal involved. If a program you run from a shell is terminated by a
55886 -signal, the shell typically prints some kind of error message.
55888 - The signals that normally represent program errors have a special
55889 -property: when one of these signals terminates the process, it also
55890 -writes a "core dump file" which records the state of the process at the
55891 -time of termination. You can examine the core dump with a debugger to
55892 -investigate what caused the error.
55894 - If you raise a "program error" signal by explicit request, and this
55895 -terminates the process, it makes a core dump file just as if the signal
55896 -had been due directly to an error.
55898 -\x1f
55899 -File: libc.info, Node: Standard Signals, Next: Signal Actions, Prev: Concepts of Signals, Up: Signal Handling
55901 -Standard Signals
55902 -================
55904 - This section lists the names for various standard kinds of signals
55905 -and describes what kind of event they mean. Each signal name is a macro
55906 -which stands for a positive integer--the "signal number" for that kind
55907 -of signal. Your programs should never make assumptions about the
55908 -numeric code for a particular kind of signal, but rather refer to them
55909 -always by the names defined here. This is because the number for a
55910 -given kind of signal can vary from system to system, but the meanings of
55911 -the names are standardized and fairly uniform.
55913 - The signal names are defined in the header file `signal.h'.
55915 - - Macro: int NSIG
55916 - The value of this symbolic constant is the total number of signals
55917 - defined. Since the signal numbers are allocated consecutively,
55918 - `NSIG' is also one greater than the largest defined signal number.
55920 -* Menu:
55922 -* Program Error Signals:: Used to report serious program errors.
55923 -* Termination Signals:: Used to interrupt and/or terminate the
55924 - program.
55925 -* Alarm Signals:: Used to indicate expiration of timers.
55926 -* Asynchronous I/O Signals:: Used to indicate input is available.
55927 -* Job Control Signals:: Signals used to support job control.
55928 -* Operation Error Signals:: Used to report operational system errors.
55929 -* Miscellaneous Signals:: Miscellaneous Signals.
55930 -* Signal Messages:: Printing a message describing a signal.
55932 diff -u -udbrN glibc-2.3.2/manual/libc.info-39 glibc-2.3.2-200304020432/manual/libc.info-39
55933 --- glibc-2.3.2/manual/libc.info-39 Sat Mar 1 02:39:41 2003
55934 +++ glibc-2.3.2-200304020432/manual/libc.info-39 Thu Jan 1 01:00:00 1970
55935 @@ -1,1212 +0,0 @@
55936 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
55938 -INFO-DIR-SECTION GNU libraries
55939 -START-INFO-DIR-ENTRY
55940 -* Libc: (libc). C library.
55941 -END-INFO-DIR-ENTRY
55943 - This file documents the GNU C library.
55945 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
55946 -Reference Manual', for Version 2.3.x.
55948 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
55949 -Free Software Foundation, Inc.
55951 - Permission is granted to copy, distribute and/or modify this document
55952 -under the terms of the GNU Free Documentation License, Version 1.1 or
55953 -any later version published by the Free Software Foundation; with the
55954 -Invariant Sections being "Free Software Needs Free Documentation" and
55955 -"GNU Lesser General Public License", the Front-Cover texts being (a)
55956 -(see below), and with the Back-Cover Texts being (b) (see below). A
55957 -copy of the license is included in the section entitled "GNU Free
55958 -Documentation License".
55960 - (a) The FSF's Front-Cover Text is:
55962 - A GNU Manual
55964 - (b) The FSF's Back-Cover Text is:
55966 - You have freedom to copy and modify this GNU Manual, like GNU
55967 -software. Copies published by the Free Software Foundation raise
55968 -funds for GNU development.
55970 -\x1f
55971 -File: libc.info, Node: Program Error Signals, Next: Termination Signals, Up: Standard Signals
55973 -Program Error Signals
55974 ----------------------
55976 - The following signals are generated when a serious program error is
55977 -detected by the operating system or the computer itself. In general,
55978 -all of these signals are indications that your program is seriously
55979 -broken in some way, and there's usually no way to continue the
55980 -computation which encountered the error.
55982 - Some programs handle program error signals in order to tidy up before
55983 -terminating; for example, programs that turn off echoing of terminal
55984 -input should handle program error signals in order to turn echoing back
55985 -on. The handler should end by specifying the default action for the
55986 -signal that happened and then reraising it; this will cause the program
55987 -to terminate with that signal, as if it had not had a handler. (*Note
55988 -Termination in Handler::.)
55990 - Termination is the sensible ultimate outcome from a program error in
55991 -most programs. However, programming systems such as Lisp that can load
55992 -compiled user programs might need to keep executing even if a user
55993 -program incurs an error. These programs have handlers which use
55994 -`longjmp' to return control to the command level.
55996 - The default action for all of these signals is to cause the process
55997 -to terminate. If you block or ignore these signals or establish
55998 -handlers for them that return normally, your program will probably
55999 -break horribly when such signals happen, unless they are generated by
56000 -`raise' or `kill' instead of a real error.
56002 - When one of these program error signals terminates a process, it also
56003 -writes a "core dump file" which records the state of the process at the
56004 -time of termination. The core dump file is named `core' and is written
56005 -in whichever directory is current in the process at the time. (On the
56006 -GNU system, you can specify the file name for core dumps with the
56007 -environment variable `COREFILE'.) The purpose of core dump files is so
56008 -that you can examine them with a debugger to investigate what caused
56009 -the error.
56011 - - Macro: int SIGFPE
56012 - The `SIGFPE' signal reports a fatal arithmetic error. Although the
56013 - name is derived from "floating-point exception", this signal
56014 - actually covers all arithmetic errors, including division by zero
56015 - and overflow. If a program stores integer data in a location
56016 - which is then used in a floating-point operation, this often
56017 - causes an "invalid operation" exception, because the processor
56018 - cannot recognize the data as a floating-point number.
56020 - Actual floating-point exceptions are a complicated subject because
56021 - there are many types of exceptions with subtly different meanings,
56022 - and the `SIGFPE' signal doesn't distinguish between them. The
56023 - `IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std
56024 - 754-1985 and ANSI/IEEE Std 854-1987)' defines various
56025 - floating-point exceptions and requires conforming computer systems
56026 - to report their occurrences. However, this standard does not
56027 - specify how the exceptions are reported, or what kinds of handling
56028 - and control the operating system can offer to the programmer.
56030 - BSD systems provide the `SIGFPE' handler with an extra argument that
56031 -distinguishes various causes of the exception. In order to access this
56032 -argument, you must define the handler to accept two arguments, which
56033 -means you must cast it to a one-argument function type in order to
56034 -establish the handler. The GNU library does provide this extra
56035 -argument, but the value is meaningful only on operating systems that
56036 -provide the information (BSD systems and GNU systems).
56038 -`FPE_INTOVF_TRAP'
56039 - Integer overflow (impossible in a C program unless you enable
56040 - overflow trapping in a hardware-specific fashion).
56042 -`FPE_INTDIV_TRAP'
56043 - Integer division by zero.
56045 -`FPE_SUBRNG_TRAP'
56046 - Subscript-range (something that C programs never check for).
56048 -`FPE_FLTOVF_TRAP'
56049 - Floating overflow trap.
56051 -`FPE_FLTDIV_TRAP'
56052 - Floating/decimal division by zero.
56054 -`FPE_FLTUND_TRAP'
56055 - Floating underflow trap. (Trapping on floating underflow is not
56056 - normally enabled.)
56058 -`FPE_DECOVF_TRAP'
56059 - Decimal overflow trap. (Only a few machines have decimal
56060 - arithmetic and C never uses it.)
56062 - - Macro: int SIGILL
56063 - The name of this signal is derived from "illegal instruction"; it
56064 - usually means your program is trying to execute garbage or a
56065 - privileged instruction. Since the C compiler generates only valid
56066 - instructions, `SIGILL' typically indicates that the executable
56067 - file is corrupted, or that you are trying to execute data. Some
56068 - common ways of getting into the latter situation are by passing an
56069 - invalid object where a pointer to a function was expected, or by
56070 - writing past the end of an automatic array (or similar problems
56071 - with pointers to automatic variables) and corrupting other data on
56072 - the stack such as the return address of a stack frame.
56074 - `SIGILL' can also be generated when the stack overflows, or when
56075 - the system has trouble running the handler for a signal.
56077 - - Macro: int SIGSEGV
56078 - This signal is generated when a program tries to read or write
56079 - outside the memory that is allocated for it, or to write memory
56080 - that can only be read. (Actually, the signals only occur when the
56081 - program goes far enough outside to be detected by the system's
56082 - memory protection mechanism.) The name is an abbreviation for
56083 - "segmentation violation".
56085 - Common ways of getting a `SIGSEGV' condition include dereferencing
56086 - a null or uninitialized pointer, or when you use a pointer to step
56087 - through an array, but fail to check for the end of the array. It
56088 - varies among systems whether dereferencing a null pointer generates
56089 - `SIGSEGV' or `SIGBUS'.
56091 - - Macro: int SIGBUS
56092 - This signal is generated when an invalid pointer is dereferenced.
56093 - Like `SIGSEGV', this signal is typically the result of
56094 - dereferencing an uninitialized pointer. The difference between
56095 - the two is that `SIGSEGV' indicates an invalid access to valid
56096 - memory, while `SIGBUS' indicates an access to an invalid address.
56097 - In particular, `SIGBUS' signals often result from dereferencing a
56098 - misaligned pointer, such as referring to a four-word integer at an
56099 - address not divisible by four. (Each kind of computer has its own
56100 - requirements for address alignment.)
56102 - The name of this signal is an abbreviation for "bus error".
56104 - - Macro: int SIGABRT
56105 - This signal indicates an error detected by the program itself and
56106 - reported by calling `abort'. *Note Aborting a Program::.
56108 - - Macro: int SIGIOT
56109 - Generated by the PDP-11 "iot" instruction. On most machines, this
56110 - is just another name for `SIGABRT'.
56112 - - Macro: int SIGTRAP
56113 - Generated by the machine's breakpoint instruction, and possibly
56114 - other trap instructions. This signal is used by debuggers. Your
56115 - program will probably only see `SIGTRAP' if it is somehow
56116 - executing bad instructions.
56118 - - Macro: int SIGEMT
56119 - Emulator trap; this results from certain unimplemented instructions
56120 - which might be emulated in software, or the operating system's
56121 - failure to properly emulate them.
56123 - - Macro: int SIGSYS
56124 - Bad system call; that is to say, the instruction to trap to the
56125 - operating system was executed, but the code number for the system
56126 - call to perform was invalid.
56128 -\x1f
56129 -File: libc.info, Node: Termination Signals, Next: Alarm Signals, Prev: Program Error Signals, Up: Standard Signals
56131 -Termination Signals
56132 --------------------
56134 - These signals are all used to tell a process to terminate, in one way
56135 -or another. They have different names because they're used for slightly
56136 -different purposes, and programs might want to handle them differently.
56138 - The reason for handling these signals is usually so your program can
56139 -tidy up as appropriate before actually terminating. For example, you
56140 -might want to save state information, delete temporary files, or restore
56141 -the previous terminal modes. Such a handler should end by specifying
56142 -the default action for the signal that happened and then reraising it;
56143 -this will cause the program to terminate with that signal, as if it had
56144 -not had a handler. (*Note Termination in Handler::.)
56146 - The (obvious) default action for all of these signals is to cause the
56147 -process to terminate.
56149 - - Macro: int SIGTERM
56150 - The `SIGTERM' signal is a generic signal used to cause program
56151 - termination. Unlike `SIGKILL', this signal can be blocked,
56152 - handled, and ignored. It is the normal way to politely ask a
56153 - program to terminate.
56155 - The shell command `kill' generates `SIGTERM' by default.
56157 - - Macro: int SIGINT
56158 - The `SIGINT' ("program interrupt") signal is sent when the user
56159 - types the INTR character (normally `C-c'). *Note Special
56160 - Characters::, for information about terminal driver support for
56161 - `C-c'.
56163 - - Macro: int SIGQUIT
56164 - The `SIGQUIT' signal is similar to `SIGINT', except that it's
56165 - controlled by a different key--the QUIT character, usually
56166 - `C-\'--and produces a core dump when it terminates the process,
56167 - just like a program error signal. You can think of this as a
56168 - program error condition "detected" by the user.
56170 - *Note Program Error Signals::, for information about core dumps.
56171 - *Note Special Characters::, for information about terminal driver
56172 - support.
56174 - Certain kinds of cleanups are best omitted in handling `SIGQUIT'.
56175 - For example, if the program creates temporary files, it should
56176 - handle the other termination requests by deleting the temporary
56177 - files. But it is better for `SIGQUIT' not to delete them, so that
56178 - the user can examine them in conjunction with the core dump.
56180 - - Macro: int SIGKILL
56181 - The `SIGKILL' signal is used to cause immediate program
56182 - termination. It cannot be handled or ignored, and is therefore
56183 - always fatal. It is also not possible to block this signal.
56185 - This signal is usually generated only by explicit request. Since
56186 - it cannot be handled, you should generate it only as a last
56187 - resort, after first trying a less drastic method such as `C-c' or
56188 - `SIGTERM'. If a process does not respond to any other termination
56189 - signals, sending it a `SIGKILL' signal will almost always cause it
56190 - to go away.
56192 - In fact, if `SIGKILL' fails to terminate a process, that by itself
56193 - constitutes an operating system bug which you should report.
56195 - The system will generate `SIGKILL' for a process itself under some
56196 - unusual conditions where the program cannot possibly continue to
56197 - run (even to run a signal handler).
56199 - - Macro: int SIGHUP
56200 - The `SIGHUP' ("hang-up") signal is used to report that the user's
56201 - terminal is disconnected, perhaps because a network or telephone
56202 - connection was broken. For more information about this, see *Note
56203 - Control Modes::.
56205 - This signal is also used to report the termination of the
56206 - controlling process on a terminal to jobs associated with that
56207 - session; this termination effectively disconnects all processes in
56208 - the session from the controlling terminal. For more information,
56209 - see *Note Termination Internals::.
56211 -\x1f
56212 -File: libc.info, Node: Alarm Signals, Next: Asynchronous I/O Signals, Prev: Termination Signals, Up: Standard Signals
56214 -Alarm Signals
56215 --------------
56217 - These signals are used to indicate the expiration of timers. *Note
56218 -Setting an Alarm::, for information about functions that cause these
56219 -signals to be sent.
56221 - The default behavior for these signals is to cause program
56222 -termination. This default is rarely useful, but no other default would
56223 -be useful; most of the ways of using these signals would require
56224 -handler functions in any case.
56226 - - Macro: int SIGALRM
56227 - This signal typically indicates expiration of a timer that
56228 - measures real or clock time. It is used by the `alarm' function,
56229 - for example.
56231 - - Macro: int SIGVTALRM
56232 - This signal typically indicates expiration of a timer that
56233 - measures CPU time used by the current process. The name is an
56234 - abbreviation for "virtual time alarm".
56236 - - Macro: int SIGPROF
56237 - This signal typically indicates expiration of a timer that measures
56238 - both CPU time used by the current process, and CPU time expended on
56239 - behalf of the process by the system. Such a timer is used to
56240 - implement code profiling facilities, hence the name of this signal.
56242 -\x1f
56243 -File: libc.info, Node: Asynchronous I/O Signals, Next: Job Control Signals, Prev: Alarm Signals, Up: Standard Signals
56245 -Asynchronous I/O Signals
56246 -------------------------
56248 - The signals listed in this section are used in conjunction with
56249 -asynchronous I/O facilities. You have to take explicit action by
56250 -calling `fcntl' to enable a particular file descriptor to generate
56251 -these signals (*note Interrupt Input::). The default action for these
56252 -signals is to ignore them.
56254 - - Macro: int SIGIO
56255 - This signal is sent when a file descriptor is ready to perform
56256 - input or output.
56258 - On most operating systems, terminals and sockets are the only
56259 - kinds of files that can generate `SIGIO'; other kinds, including
56260 - ordinary files, never generate `SIGIO' even if you ask them to.
56262 - In the GNU system `SIGIO' will always be generated properly if you
56263 - successfully set asynchronous mode with `fcntl'.
56265 - - Macro: int SIGURG
56266 - This signal is sent when "urgent" or out-of-band data arrives on a
56267 - socket. *Note Out-of-Band Data::.
56269 - - Macro: int SIGPOLL
56270 - This is a System V signal name, more or less similar to `SIGIO'.
56271 - It is defined only for compatibility.
56273 -\x1f
56274 -File: libc.info, Node: Job Control Signals, Next: Operation Error Signals, Prev: Asynchronous I/O Signals, Up: Standard Signals
56276 -Job Control Signals
56277 --------------------
56279 - These signals are used to support job control. If your system
56280 -doesn't support job control, then these macros are defined but the
56281 -signals themselves can't be raised or handled.
56283 - You should generally leave these signals alone unless you really
56284 -understand how job control works. *Note Job Control::.
56286 - - Macro: int SIGCHLD
56287 - This signal is sent to a parent process whenever one of its child
56288 - processes terminates or stops.
56290 - The default action for this signal is to ignore it. If you
56291 - establish a handler for this signal while there are child
56292 - processes that have terminated but not reported their status via
56293 - `wait' or `waitpid' (*note Process Completion::), whether your new
56294 - handler applies to those processes or not depends on the
56295 - particular operating system.
56297 - - Macro: int SIGCLD
56298 - This is an obsolete name for `SIGCHLD'.
56300 - - Macro: int SIGCONT
56301 - You can send a `SIGCONT' signal to a process to make it continue.
56302 - This signal is special--it always makes the process continue if it
56303 - is stopped, before the signal is delivered. The default behavior
56304 - is to do nothing else. You cannot block this signal. You can set
56305 - a handler, but `SIGCONT' always makes the process continue
56306 - regardless.
56308 - Most programs have no reason to handle `SIGCONT'; they simply
56309 - resume execution without realizing they were ever stopped. You
56310 - can use a handler for `SIGCONT' to make a program do something
56311 - special when it is stopped and continued--for example, to reprint
56312 - a prompt when it is suspended while waiting for input.
56314 - - Macro: int SIGSTOP
56315 - The `SIGSTOP' signal stops the process. It cannot be handled,
56316 - ignored, or blocked.
56318 - - Macro: int SIGTSTP
56319 - The `SIGTSTP' signal is an interactive stop signal. Unlike
56320 - `SIGSTOP', this signal can be handled and ignored.
56322 - Your program should handle this signal if you have a special need
56323 - to leave files or system tables in a secure state when a process is
56324 - stopped. For example, programs that turn off echoing should handle
56325 - `SIGTSTP' so they can turn echoing back on before stopping.
56327 - This signal is generated when the user types the SUSP character
56328 - (normally `C-z'). For more information about terminal driver
56329 - support, see *Note Special Characters::.
56331 - - Macro: int SIGTTIN
56332 - A process cannot read from the user's terminal while it is running
56333 - as a background job. When any process in a background job tries to
56334 - read from the terminal, all of the processes in the job are sent a
56335 - `SIGTTIN' signal. The default action for this signal is to stop
56336 - the process. For more information about how this interacts with
56337 - the terminal driver, see *Note Access to the Terminal::.
56339 - - Macro: int SIGTTOU
56340 - This is similar to `SIGTTIN', but is generated when a process in a
56341 - background job attempts to write to the terminal or set its modes.
56342 - Again, the default action is to stop the process. `SIGTTOU' is
56343 - only generated for an attempt to write to the terminal if the
56344 - `TOSTOP' output mode is set; *note Output Modes::.
56346 - While a process is stopped, no more signals can be delivered to it
56347 -until it is continued, except `SIGKILL' signals and (obviously)
56348 -`SIGCONT' signals. The signals are marked as pending, but not
56349 -delivered until the process is continued. The `SIGKILL' signal always
56350 -causes termination of the process and can't be blocked, handled or
56351 -ignored. You can ignore `SIGCONT', but it always causes the process to
56352 -be continued anyway if it is stopped. Sending a `SIGCONT' signal to a
56353 -process causes any pending stop signals for that process to be
56354 -discarded. Likewise, any pending `SIGCONT' signals for a process are
56355 -discarded when it receives a stop signal.
56357 - When a process in an orphaned process group (*note Orphaned Process
56358 -Groups::) receives a `SIGTSTP', `SIGTTIN', or `SIGTTOU' signal and does
56359 -not handle it, the process does not stop. Stopping the process would
56360 -probably not be very useful, since there is no shell program that will
56361 -notice it stop and allow the user to continue it. What happens instead
56362 -depends on the operating system you are using. Some systems may do
56363 -nothing; others may deliver another signal instead, such as `SIGKILL'
56364 -or `SIGHUP'. In the GNU system, the process dies with `SIGKILL'; this
56365 -avoids the problem of many stopped, orphaned processes lying around the
56366 -system.
56368 -\x1f
56369 -File: libc.info, Node: Operation Error Signals, Next: Miscellaneous Signals, Prev: Job Control Signals, Up: Standard Signals
56371 -Operation Error Signals
56372 ------------------------
56374 - These signals are used to report various errors generated by an
56375 -operation done by the program. They do not necessarily indicate a
56376 -programming error in the program, but an error that prevents an
56377 -operating system call from completing. The default action for all of
56378 -them is to cause the process to terminate.
56380 - - Macro: int SIGPIPE
56381 - Broken pipe. If you use pipes or FIFOs, you have to design your
56382 - application so that one process opens the pipe for reading before
56383 - another starts writing. If the reading process never starts, or
56384 - terminates unexpectedly, writing to the pipe or FIFO raises a
56385 - `SIGPIPE' signal. If `SIGPIPE' is blocked, handled or ignored,
56386 - the offending call fails with `EPIPE' instead.
56388 - Pipes and FIFO special files are discussed in more detail in *Note
56389 - Pipes and FIFOs::.
56391 - Another cause of `SIGPIPE' is when you try to output to a socket
56392 - that isn't connected. *Note Sending Data::.
56394 - - Macro: int SIGLOST
56395 - Resource lost. This signal is generated when you have an advisory
56396 - lock on an NFS file, and the NFS server reboots and forgets about
56397 - your lock.
56399 - In the GNU system, `SIGLOST' is generated when any server program
56400 - dies unexpectedly. It is usually fine to ignore the signal;
56401 - whatever call was made to the server that died just returns an
56402 - error.
56404 - - Macro: int SIGXCPU
56405 - CPU time limit exceeded. This signal is generated when the process
56406 - exceeds its soft resource limit on CPU time. *Note Limits on
56407 - Resources::.
56409 - - Macro: int SIGXFSZ
56410 - File size limit exceeded. This signal is generated when the
56411 - process attempts to extend a file so it exceeds the process's soft
56412 - resource limit on file size. *Note Limits on Resources::.
56414 -\x1f
56415 -File: libc.info, Node: Miscellaneous Signals, Next: Signal Messages, Prev: Operation Error Signals, Up: Standard Signals
56417 -Miscellaneous Signals
56418 ----------------------
56420 - These signals are used for various other purposes. In general, they
56421 -will not affect your program unless it explicitly uses them for
56422 -something.
56424 - - Macro: int SIGUSR1
56425 - - Macro: int SIGUSR2
56426 - The `SIGUSR1' and `SIGUSR2' signals are set aside for you to use
56427 - any way you want. They're useful for simple interprocess
56428 - communication, if you write a signal handler for them in the
56429 - program that receives the signal.
56431 - There is an example showing the use of `SIGUSR1' and `SIGUSR2' in
56432 - *Note Signaling Another Process::.
56434 - The default action is to terminate the process.
56436 - - Macro: int SIGWINCH
56437 - Window size change. This is generated on some systems (including
56438 - GNU) when the terminal driver's record of the number of rows and
56439 - columns on the screen is changed. The default action is to ignore
56440 - it.
56442 - If a program does full-screen display, it should handle `SIGWINCH'.
56443 - When the signal arrives, it should fetch the new screen size and
56444 - reformat its display accordingly.
56446 - - Macro: int SIGINFO
56447 - Information request. In 4.4 BSD and the GNU system, this signal
56448 - is sent to all the processes in the foreground process group of
56449 - the controlling terminal when the user types the STATUS character
56450 - in canonical mode; *note Signal Characters::.
56452 - If the process is the leader of the process group, the default
56453 - action is to print some status information about the system and
56454 - what the process is doing. Otherwise the default is to do nothing.
56456 -\x1f
56457 -File: libc.info, Node: Signal Messages, Prev: Miscellaneous Signals, Up: Standard Signals
56459 -Signal Messages
56460 ----------------
56462 - We mentioned above that the shell prints a message describing the
56463 -signal that terminated a child process. The clean way to print a
56464 -message describing a signal is to use the functions `strsignal' and
56465 -`psignal'. These functions use a signal number to specify which kind
56466 -of signal to describe. The signal number may come from the termination
56467 -status of a child process (*note Process Completion::) or it may come
56468 -from a signal handler in the same process.
56470 - - Function: char * strsignal (int SIGNUM)
56471 - This function returns a pointer to a statically-allocated string
56472 - containing a message describing the signal SIGNUM. You should not
56473 - modify the contents of this string; and, since it can be rewritten
56474 - on subsequent calls, you should save a copy of it if you need to
56475 - reference it later.
56477 - This function is a GNU extension, declared in the header file
56478 - `string.h'.
56480 - - Function: void psignal (int SIGNUM, const char *MESSAGE)
56481 - This function prints a message describing the signal SIGNUM to the
56482 - standard error output stream `stderr'; see *Note Standard
56483 - Streams::.
56485 - If you call `psignal' with a MESSAGE that is either a null pointer
56486 - or an empty string, `psignal' just prints the message
56487 - corresponding to SIGNUM, adding a trailing newline.
56489 - If you supply a non-null MESSAGE argument, then `psignal' prefixes
56490 - its output with this string. It adds a colon and a space
56491 - character to separate the MESSAGE from the string corresponding to
56492 - SIGNUM.
56494 - This function is a BSD feature, declared in the header file
56495 - `signal.h'.
56497 - There is also an array `sys_siglist' which contains the messages for
56498 -the various signal codes. This array exists on BSD systems, unlike
56499 -`strsignal'.
56501 -\x1f
56502 -File: libc.info, Node: Signal Actions, Next: Defining Handlers, Prev: Standard Signals, Up: Signal Handling
56504 -Specifying Signal Actions
56505 -=========================
56507 - The simplest way to change the action for a signal is to use the
56508 -`signal' function. You can specify a built-in action (such as to
56509 -ignore the signal), or you can "establish a handler".
56511 - The GNU library also implements the more versatile `sigaction'
56512 -facility. This section describes both facilities and gives suggestions
56513 -on which to use when.
56515 -* Menu:
56517 -* Basic Signal Handling:: The simple `signal' function.
56518 -* Advanced Signal Handling:: The more powerful `sigaction' function.
56519 -* Signal and Sigaction:: How those two functions interact.
56520 -* Sigaction Function Example:: An example of using the sigaction function.
56521 -* Flags for Sigaction:: Specifying options for signal handling.
56522 -* Initial Signal Actions:: How programs inherit signal actions.
56524 -\x1f
56525 -File: libc.info, Node: Basic Signal Handling, Next: Advanced Signal Handling, Up: Signal Actions
56527 -Basic Signal Handling
56528 ----------------------
56530 - The `signal' function provides a simple interface for establishing
56531 -an action for a particular signal. The function and associated macros
56532 -are declared in the header file `signal.h'.
56534 - - Data Type: sighandler_t
56535 - This is the type of signal handler functions. Signal handlers
56536 - take one integer argument specifying the signal number, and have
56537 - return type `void'. So, you should define handler functions like
56538 - this:
56540 - void HANDLER (int `signum') { ... }
56542 - The name `sighandler_t' for this data type is a GNU extension.
56544 - - Function: sighandler_t signal (int SIGNUM, sighandler_t ACTION)
56545 - The `signal' function establishes ACTION as the action for the
56546 - signal SIGNUM.
56548 - The first argument, SIGNUM, identifies the signal whose behavior
56549 - you want to control, and should be a signal number. The proper
56550 - way to specify a signal number is with one of the symbolic signal
56551 - names (*note Standard Signals::)--don't use an explicit number,
56552 - because the numerical code for a given kind of signal may vary
56553 - from operating system to operating system.
56555 - The second argument, ACTION, specifies the action to use for the
56556 - signal SIGNUM. This can be one of the following:
56558 - `SIG_DFL'
56559 - `SIG_DFL' specifies the default action for the particular
56560 - signal. The default actions for various kinds of signals are
56561 - stated in *Note Standard Signals::.
56563 - `SIG_IGN'
56564 - `SIG_IGN' specifies that the signal should be ignored.
56566 - Your program generally should not ignore signals that
56567 - represent serious events or that are normally used to request
56568 - termination. You cannot ignore the `SIGKILL' or `SIGSTOP'
56569 - signals at all. You can ignore program error signals like
56570 - `SIGSEGV', but ignoring the error won't enable the program to
56571 - continue executing meaningfully. Ignoring user requests such
56572 - as `SIGINT', `SIGQUIT', and `SIGTSTP' is unfriendly.
56574 - When you do not wish signals to be delivered during a certain
56575 - part of the program, the thing to do is to block them, not
56576 - ignore them. *Note Blocking Signals::.
56578 - `HANDLER'
56579 - Supply the address of a handler function in your program, to
56580 - specify running this handler as the way to deliver the signal.
56582 - For more information about defining signal handler functions,
56583 - see *Note Defining Handlers::.
56585 - If you set the action for a signal to `SIG_IGN', or if you set it
56586 - to `SIG_DFL' and the default action is to ignore that signal, then
56587 - any pending signals of that type are discarded (even if they are
56588 - blocked). Discarding the pending signals means that they will
56589 - never be delivered, not even if you subsequently specify another
56590 - action and unblock this kind of signal.
56592 - The `signal' function returns the action that was previously in
56593 - effect for the specified SIGNUM. You can save this value and
56594 - restore it later by calling `signal' again.
56596 - If `signal' can't honor the request, it returns `SIG_ERR' instead.
56597 - The following `errno' error conditions are defined for this
56598 - function:
56600 - `EINVAL'
56601 - You specified an invalid SIGNUM; or you tried to ignore or
56602 - provide a handler for `SIGKILL' or `SIGSTOP'.
56604 - *Compatibility Note:* A problem encountered when working with the
56605 -`signal' function is that it has different semantics on BSD and SVID
56606 -systems. The difference is that on SVID systems the signal handler is
56607 -deinstalled after signal delivery. On BSD systems the handler must be
56608 -explicitly deinstalled. In the GNU C Library we use the BSD version by
56609 -default. To use the SVID version you can either use the function
56610 -`sysv_signal' (see below) or use the `_XOPEN_SOURCE' feature select
56611 -macro (*note Feature Test Macros::). In general, use of these
56612 -functions should be avoided because of compatibility problems. It is
56613 -better to use `sigaction' if it is available since the results are much
56614 -more reliable.
56616 - Here is a simple example of setting up a handler to delete temporary
56617 -files when certain fatal signals happen:
56619 - #include <signal.h>
56621 - void
56622 - termination_handler (int signum)
56624 - struct temp_file *p;
56626 - for (p = temp_file_list; p; p = p->next)
56627 - unlink (p->name);
56630 - int
56631 - main (void)
56633 - ...
56634 - if (signal (SIGINT, termination_handler) == SIG_IGN)
56635 - signal (SIGINT, SIG_IGN);
56636 - if (signal (SIGHUP, termination_handler) == SIG_IGN)
56637 - signal (SIGHUP, SIG_IGN);
56638 - if (signal (SIGTERM, termination_handler) == SIG_IGN)
56639 - signal (SIGTERM, SIG_IGN);
56640 - ...
56643 -Note that if a given signal was previously set to be ignored, this code
56644 -avoids altering that setting. This is because non-job-control shells
56645 -often ignore certain signals when starting children, and it is important
56646 -for the children to respect this.
56648 - We do not handle `SIGQUIT' or the program error signals in this
56649 -example because these are designed to provide information for debugging
56650 -(a core dump), and the temporary files may give useful information.
56652 - - Function: sighandler_t sysv_signal (int SIGNUM, sighandler_t ACTION)
56653 - The `sysv_signal' implements the behavior of the standard `signal'
56654 - function as found on SVID systems. The difference to BSD systems
56655 - is that the handler is deinstalled after a delivery of a signal.
56657 - *Compatibility Note:* As said above for `signal', this function
56658 - should be avoided when possible. `sigaction' is the preferred
56659 - method.
56661 - - Function: sighandler_t ssignal (int SIGNUM, sighandler_t ACTION)
56662 - The `ssignal' function does the same thing as `signal'; it is
56663 - provided only for compatibility with SVID.
56665 - - Macro: sighandler_t SIG_ERR
56666 - The value of this macro is used as the return value from `signal'
56667 - to indicate an error.
56669 -\x1f
56670 -File: libc.info, Node: Advanced Signal Handling, Next: Signal and Sigaction, Prev: Basic Signal Handling, Up: Signal Actions
56672 -Advanced Signal Handling
56673 -------------------------
56675 - The `sigaction' function has the same basic effect as `signal': to
56676 -specify how a signal should be handled by the process. However,
56677 -`sigaction' offers more control, at the expense of more complexity. In
56678 -particular, `sigaction' allows you to specify additional flags to
56679 -control when the signal is generated and how the handler is invoked.
56681 - The `sigaction' function is declared in `signal.h'.
56683 - - Data Type: struct sigaction
56684 - Structures of type `struct sigaction' are used in the `sigaction'
56685 - function to specify all the information about how to handle a
56686 - particular signal. This structure contains at least the following
56687 - members:
56689 - `sighandler_t sa_handler'
56690 - This is used in the same way as the ACTION argument to the
56691 - `signal' function. The value can be `SIG_DFL', `SIG_IGN', or
56692 - a function pointer. *Note Basic Signal Handling::.
56694 - `sigset_t sa_mask'
56695 - This specifies a set of signals to be blocked while the
56696 - handler runs. Blocking is explained in *Note Blocking for
56697 - Handler::. Note that the signal that was delivered is
56698 - automatically blocked by default before its handler is
56699 - started; this is true regardless of the value in `sa_mask'.
56700 - If you want that signal not to be blocked within its handler,
56701 - you must write code in the handler to unblock it.
56703 - `int sa_flags'
56704 - This specifies various flags which can affect the behavior of
56705 - the signal. These are described in more detail in *Note
56706 - Flags for Sigaction::.
56708 - - Function: int sigaction (int SIGNUM, const struct sigaction
56709 - *restrict ACTION, struct sigaction *restrict OLD-ACTION)
56710 - The ACTION argument is used to set up a new action for the signal
56711 - SIGNUM, while the OLD-ACTION argument is used to return
56712 - information about the action previously associated with this
56713 - symbol. (In other words, OLD-ACTION has the same purpose as the
56714 - `signal' function's return value--you can check to see what the
56715 - old action in effect for the signal was, and restore it later if
56716 - you want.)
56718 - Either ACTION or OLD-ACTION can be a null pointer. If OLD-ACTION
56719 - is a null pointer, this simply suppresses the return of
56720 - information about the old action. If ACTION is a null pointer,
56721 - the action associated with the signal SIGNUM is unchanged; this
56722 - allows you to inquire about how a signal is being handled without
56723 - changing that handling.
56725 - The return value from `sigaction' is zero if it succeeds, and `-1'
56726 - on failure. The following `errno' error conditions are defined
56727 - for this function:
56729 - `EINVAL'
56730 - The SIGNUM argument is not valid, or you are trying to trap
56731 - or ignore `SIGKILL' or `SIGSTOP'.
56733 -\x1f
56734 -File: libc.info, Node: Signal and Sigaction, Next: Sigaction Function Example, Prev: Advanced Signal Handling, Up: Signal Actions
56736 -Interaction of `signal' and `sigaction'
56737 ----------------------------------------
56739 - It's possible to use both the `signal' and `sigaction' functions
56740 -within a single program, but you have to be careful because they can
56741 -interact in slightly strange ways.
56743 - The `sigaction' function specifies more information than the
56744 -`signal' function, so the return value from `signal' cannot express the
56745 -full range of `sigaction' possibilities. Therefore, if you use
56746 -`signal' to save and later reestablish an action, it may not be able to
56747 -reestablish properly a handler that was established with `sigaction'.
56749 - To avoid having problems as a result, always use `sigaction' to save
56750 -and restore a handler if your program uses `sigaction' at all. Since
56751 -`sigaction' is more general, it can properly save and reestablish any
56752 -action, regardless of whether it was established originally with
56753 -`signal' or `sigaction'.
56755 - On some systems if you establish an action with `signal' and then
56756 -examine it with `sigaction', the handler address that you get may not
56757 -be the same as what you specified with `signal'. It may not even be
56758 -suitable for use as an action argument with `signal'. But you can rely
56759 -on using it as an argument to `sigaction'. This problem never happens
56760 -on the GNU system.
56762 - So, you're better off using one or the other of the mechanisms
56763 -consistently within a single program.
56765 - *Portability Note:* The basic `signal' function is a feature of
56766 -ISO C, while `sigaction' is part of the POSIX.1 standard. If you are
56767 -concerned about portability to non-POSIX systems, then you should use
56768 -the `signal' function instead.
56770 -\x1f
56771 -File: libc.info, Node: Sigaction Function Example, Next: Flags for Sigaction, Prev: Signal and Sigaction, Up: Signal Actions
56773 -`sigaction' Function Example
56774 -----------------------------
56776 - In *Note Basic Signal Handling::, we gave an example of establishing
56777 -a simple handler for termination signals using `signal'. Here is an
56778 -equivalent example using `sigaction':
56780 - #include <signal.h>
56782 - void
56783 - termination_handler (int signum)
56785 - struct temp_file *p;
56787 - for (p = temp_file_list; p; p = p->next)
56788 - unlink (p->name);
56791 - int
56792 - main (void)
56794 - ...
56795 - struct sigaction new_action, old_action;
56797 - /* Set up the structure to specify the new action. */
56798 - new_action.sa_handler = termination_handler;
56799 - sigemptyset (&new_action.sa_mask);
56800 - new_action.sa_flags = 0;
56802 - sigaction (SIGINT, NULL, &old_action);
56803 - if (old_action.sa_handler != SIG_IGN)
56804 - sigaction (SIGINT, &new_action, NULL);
56805 - sigaction (SIGHUP, NULL, &old_action);
56806 - if (old_action.sa_handler != SIG_IGN)
56807 - sigaction (SIGHUP, &new_action, NULL);
56808 - sigaction (SIGTERM, NULL, &old_action);
56809 - if (old_action.sa_handler != SIG_IGN)
56810 - sigaction (SIGTERM, &new_action, NULL);
56811 - ...
56814 - The program just loads the `new_action' structure with the desired
56815 -parameters and passes it in the `sigaction' call. The usage of
56816 -`sigemptyset' is described later; see *Note Blocking Signals::.
56818 - As in the example using `signal', we avoid handling signals
56819 -previously set to be ignored. Here we can avoid altering the signal
56820 -handler even momentarily, by using the feature of `sigaction' that lets
56821 -us examine the current action without specifying a new one.
56823 - Here is another example. It retrieves information about the current
56824 -action for `SIGINT' without changing that action.
56826 - struct sigaction query_action;
56828 - if (sigaction (SIGINT, NULL, &query_action) < 0)
56829 - /* `sigaction' returns -1 in case of error. */
56830 - else if (query_action.sa_handler == SIG_DFL)
56831 - /* `SIGINT' is handled in the default, fatal manner. */
56832 - else if (query_action.sa_handler == SIG_IGN)
56833 - /* `SIGINT' is ignored. */
56834 - else
56835 - /* A programmer-defined signal handler is in effect. */
56837 -\x1f
56838 -File: libc.info, Node: Flags for Sigaction, Next: Initial Signal Actions, Prev: Sigaction Function Example, Up: Signal Actions
56840 -Flags for `sigaction'
56841 ----------------------
56843 - The `sa_flags' member of the `sigaction' structure is a catch-all
56844 -for special features. Most of the time, `SA_RESTART' is a good value
56845 -to use for this field.
56847 - The value of `sa_flags' is interpreted as a bit mask. Thus, you
56848 -should choose the flags you want to set, OR those flags together, and
56849 -store the result in the `sa_flags' member of your `sigaction' structure.
56851 - Each signal number has its own set of flags. Each call to
56852 -`sigaction' affects one particular signal number, and the flags that
56853 -you specify apply only to that particular signal.
56855 - In the GNU C library, establishing a handler with `signal' sets all
56856 -the flags to zero except for `SA_RESTART', whose value depends on the
56857 -settings you have made with `siginterrupt'. *Note Interrupted
56858 -Primitives::, to see what this is about.
56860 - These macros are defined in the header file `signal.h'.
56862 - - Macro: int SA_NOCLDSTOP
56863 - This flag is meaningful only for the `SIGCHLD' signal. When the
56864 - flag is set, the system delivers the signal for a terminated child
56865 - process but not for one that is stopped. By default, `SIGCHLD' is
56866 - delivered for both terminated children and stopped children.
56868 - Setting this flag for a signal other than `SIGCHLD' has no effect.
56870 - - Macro: int SA_ONSTACK
56871 - If this flag is set for a particular signal number, the system
56872 - uses the signal stack when delivering that kind of signal. *Note
56873 - Signal Stack::. If a signal with this flag arrives and you have
56874 - not set a signal stack, the system terminates the program with
56875 - `SIGILL'.
56877 - - Macro: int SA_RESTART
56878 - This flag controls what happens when a signal is delivered during
56879 - certain primitives (such as `open', `read' or `write'), and the
56880 - signal handler returns normally. There are two alternatives: the
56881 - library function can resume, or it can return failure with error
56882 - code `EINTR'.
56884 - The choice is controlled by the `SA_RESTART' flag for the
56885 - particular kind of signal that was delivered. If the flag is set,
56886 - returning from a handler resumes the library function. If the
56887 - flag is clear, returning from a handler makes the function fail.
56888 - *Note Interrupted Primitives::.
56890 -\x1f
56891 -File: libc.info, Node: Initial Signal Actions, Prev: Flags for Sigaction, Up: Signal Actions
56893 -Initial Signal Actions
56894 -----------------------
56896 - When a new process is created (*note Creating a Process::), it
56897 -inherits handling of signals from its parent process. However, when
56898 -you load a new process image using the `exec' function (*note Executing
56899 -a File::), any signals that you've defined your own handlers for revert
56900 -to their `SIG_DFL' handling. (If you think about it a little, this
56901 -makes sense; the handler functions from the old program are specific to
56902 -that program, and aren't even present in the address space of the new
56903 -program image.) Of course, the new program can establish its own
56904 -handlers.
56906 - When a program is run by a shell, the shell normally sets the initial
56907 -actions for the child process to `SIG_DFL' or `SIG_IGN', as
56908 -appropriate. It's a good idea to check to make sure that the shell has
56909 -not set up an initial action of `SIG_IGN' before you establish your own
56910 -signal handlers.
56912 - Here is an example of how to establish a handler for `SIGHUP', but
56913 -not if `SIGHUP' is currently ignored:
56915 - ...
56916 - struct sigaction temp;
56918 - sigaction (SIGHUP, NULL, &temp);
56920 - if (temp.sa_handler != SIG_IGN)
56922 - temp.sa_handler = handle_sighup;
56923 - sigemptyset (&temp.sa_mask);
56924 - sigaction (SIGHUP, &temp, NULL);
56927 -\x1f
56928 -File: libc.info, Node: Defining Handlers, Next: Interrupted Primitives, Prev: Signal Actions, Up: Signal Handling
56930 -Defining Signal Handlers
56931 -========================
56933 - This section describes how to write a signal handler function that
56934 -can be established with the `signal' or `sigaction' functions.
56936 - A signal handler is just a function that you compile together with
56937 -the rest of the program. Instead of directly invoking the function,
56938 -you use `signal' or `sigaction' to tell the operating system to call it
56939 -when a signal arrives. This is known as "establishing" the handler.
56940 -*Note Signal Actions::.
56942 - There are two basic strategies you can use in signal handler
56943 -functions:
56945 - * You can have the handler function note that the signal arrived by
56946 - tweaking some global data structures, and then return normally.
56948 - * You can have the handler function terminate the program or transfer
56949 - control to a point where it can recover from the situation that
56950 - caused the signal.
56952 - You need to take special care in writing handler functions because
56953 -they can be called asynchronously. That is, a handler might be called
56954 -at any point in the program, unpredictably. If two signals arrive
56955 -during a very short interval, one handler can run within another. This
56956 -section describes what your handler should do, and what you should
56957 -avoid.
56959 -* Menu:
56961 -* Handler Returns:: Handlers that return normally, and what
56962 - this means.
56963 -* Termination in Handler:: How handler functions terminate a program.
56964 -* Longjmp in Handler:: Nonlocal transfer of control out of a
56965 - signal handler.
56966 -* Signals in Handler:: What happens when signals arrive while
56967 - the handler is already occupied.
56968 -* Merged Signals:: When a second signal arrives before the
56969 - first is handled.
56970 -* Nonreentrancy:: Do not call any functions unless you know they
56971 - are reentrant with respect to signals.
56972 -* Atomic Data Access:: A single handler can run in the middle of
56973 - reading or writing a single object.
56975 -\x1f
56976 -File: libc.info, Node: Handler Returns, Next: Termination in Handler, Up: Defining Handlers
56978 -Signal Handlers that Return
56979 ----------------------------
56981 - Handlers which return normally are usually used for signals such as
56982 -`SIGALRM' and the I/O and interprocess communication signals. But a
56983 -handler for `SIGINT' might also return normally after setting a flag
56984 -that tells the program to exit at a convenient time.
56986 - It is not safe to return normally from the handler for a program
56987 -error signal, because the behavior of the program when the handler
56988 -function returns is not defined after a program error. *Note Program
56989 -Error Signals::.
56991 - Handlers that return normally must modify some global variable in
56992 -order to have any effect. Typically, the variable is one that is
56993 -examined periodically by the program during normal operation. Its data
56994 -type should be `sig_atomic_t' for reasons described in *Note Atomic
56995 -Data Access::.
56997 - Here is a simple example of such a program. It executes the body of
56998 -the loop until it has noticed that a `SIGALRM' signal has arrived.
56999 -This technique is useful because it allows the iteration in progress
57000 -when the signal arrives to complete before the loop exits.
57002 - #include <signal.h>
57003 - #include <stdio.h>
57004 - #include <stdlib.h>
57006 - /* This flag controls termination of the main loop. */
57007 - volatile sig_atomic_t keep_going = 1;
57009 - /* The signal handler just clears the flag and re-enables itself. */
57010 - void
57011 - catch_alarm (int sig)
57013 - keep_going = 0;
57014 - signal (sig, catch_alarm);
57017 - void
57018 - do_stuff (void)
57020 - puts ("Doing stuff while waiting for alarm....");
57023 - int
57024 - main (void)
57026 - /* Establish a handler for SIGALRM signals. */
57027 - signal (SIGALRM, catch_alarm);
57029 - /* Set an alarm to go off in a little while. */
57030 - alarm (2);
57032 - /* Check the flag once in a while to see when to quit. */
57033 - while (keep_going)
57034 - do_stuff ();
57036 - return EXIT_SUCCESS;
57039 -\x1f
57040 -File: libc.info, Node: Termination in Handler, Next: Longjmp in Handler, Prev: Handler Returns, Up: Defining Handlers
57042 -Handlers That Terminate the Process
57043 ------------------------------------
57045 - Handler functions that terminate the program are typically used to
57046 -cause orderly cleanup or recovery from program error signals and
57047 -interactive interrupts.
57049 - The cleanest way for a handler to terminate the process is to raise
57050 -the same signal that ran the handler in the first place. Here is how
57051 -to do this:
57053 - volatile sig_atomic_t fatal_error_in_progress = 0;
57055 - void
57056 - fatal_error_signal (int sig)
57058 - /* Since this handler is established for more than one kind of signal,
57059 - it might still get invoked recursively by delivery of some other kind
57060 - of signal. Use a static variable to keep track of that. */
57061 - if (fatal_error_in_progress)
57062 - raise (sig);
57063 - fatal_error_in_progress = 1;
57065 - /* Now do the clean up actions:
57066 - - reset terminal modes
57067 - - kill child processes
57068 - - remove lock files */
57069 - ...
57071 - /* Now reraise the signal. We reactivate the signal's
57072 - default handling, which is to terminate the process.
57073 - We could just call `exit' or `abort',
57074 - but reraising the signal sets the return status
57075 - from the process correctly. */
57076 - signal (sig, SIG_DFL);
57077 - raise (sig);
57080 -\x1f
57081 -File: libc.info, Node: Longjmp in Handler, Next: Signals in Handler, Prev: Termination in Handler, Up: Defining Handlers
57083 -Nonlocal Control Transfer in Handlers
57084 --------------------------------------
57086 - You can do a nonlocal transfer of control out of a signal handler
57087 -using the `setjmp' and `longjmp' facilities (*note Non-Local Exits::).
57089 - When the handler does a nonlocal control transfer, the part of the
57090 -program that was running will not continue. If this part of the program
57091 -was in the middle of updating an important data structure, the data
57092 -structure will remain inconsistent. Since the program does not
57093 -terminate, the inconsistency is likely to be noticed later on.
57095 - There are two ways to avoid this problem. One is to block the signal
57096 -for the parts of the program that update important data structures.
57097 -Blocking the signal delays its delivery until it is unblocked, once the
57098 -critical updating is finished. *Note Blocking Signals::.
57100 - The other way to re-initialize the crucial data structures in the
57101 -signal handler, or make their values consistent.
57103 - Here is a rather schematic example showing the reinitialization of
57104 -one global variable.
57106 - #include <signal.h>
57107 - #include <setjmp.h>
57109 - jmp_buf return_to_top_level;
57111 - volatile sig_atomic_t waiting_for_input;
57113 - void
57114 - handle_sigint (int signum)
57116 - /* We may have been waiting for input when the signal arrived,
57117 - but we are no longer waiting once we transfer control. */
57118 - waiting_for_input = 0;
57119 - longjmp (return_to_top_level, 1);
57122 - int
57123 - main (void)
57125 - ...
57126 - signal (SIGINT, sigint_handler);
57127 - ...
57128 - while (1) {
57129 - prepare_for_command ();
57130 - if (setjmp (return_to_top_level) == 0)
57131 - read_and_execute_command ();
57135 - /* Imagine this is a subroutine used by various commands. */
57136 - char *
57137 - read_data ()
57139 - if (input_from_terminal) {
57140 - waiting_for_input = 1;
57141 - ...
57142 - waiting_for_input = 0;
57143 - } else {
57144 - ...
57148 diff -u -udbrN glibc-2.3.2/manual/libc.info-4 glibc-2.3.2-200304020432/manual/libc.info-4
57149 --- glibc-2.3.2/manual/libc.info-4 Sat Mar 1 02:39:41 2003
57150 +++ glibc-2.3.2-200304020432/manual/libc.info-4 Thu Jan 1 01:00:00 1970
57151 @@ -1,1208 +0,0 @@
57152 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
57154 -INFO-DIR-SECTION GNU libraries
57155 -START-INFO-DIR-ENTRY
57156 -* Libc: (libc). C library.
57157 -END-INFO-DIR-ENTRY
57159 - This file documents the GNU C library.
57161 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
57162 -Reference Manual', for Version 2.3.x.
57164 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
57165 -Free Software Foundation, Inc.
57167 - Permission is granted to copy, distribute and/or modify this document
57168 -under the terms of the GNU Free Documentation License, Version 1.1 or
57169 -any later version published by the Free Software Foundation; with the
57170 -Invariant Sections being "Free Software Needs Free Documentation" and
57171 -"GNU Lesser General Public License", the Front-Cover texts being (a)
57172 -(see below), and with the Back-Cover Texts being (b) (see below). A
57173 -copy of the license is included in the section entitled "GNU Free
57174 -Documentation License".
57176 - (a) The FSF's Front-Cover Text is:
57178 - A GNU Manual
57180 - (b) The FSF's Back-Cover Text is:
57182 - You have freedom to copy and modify this GNU Manual, like GNU
57183 -software. Copies published by the Free Software Foundation raise
57184 -funds for GNU development.
57186 -\x1f
57187 -File: libc.info, Node: Freeing after Malloc, Next: Changing Block Size, Prev: Malloc Examples, Up: Unconstrained Allocation
57189 -Freeing Memory Allocated with `malloc'
57190 -......................................
57192 - When you no longer need a block that you got with `malloc', use the
57193 -function `free' to make the block available to be allocated again. The
57194 -prototype for this function is in `stdlib.h'.
57196 - - Function: void free (void *PTR)
57197 - The `free' function deallocates the block of memory pointed at by
57198 - PTR.
57200 - - Function: void cfree (void *PTR)
57201 - This function does the same thing as `free'. It's provided for
57202 - backward compatibility with SunOS; you should use `free' instead.
57204 - Freeing a block alters the contents of the block. *Do not expect to
57205 -find any data (such as a pointer to the next block in a chain of
57206 -blocks) in the block after freeing it.* Copy whatever you need out of
57207 -the block before freeing it! Here is an example of the proper way to
57208 -free all the blocks in a chain, and the strings that they point to:
57210 - struct chain
57212 - struct chain *next;
57213 - char *name;
57216 - void
57217 - free_chain (struct chain *chain)
57219 - while (chain != 0)
57221 - struct chain *next = chain->next;
57222 - free (chain->name);
57223 - free (chain);
57224 - chain = next;
57228 - Occasionally, `free' can actually return memory to the operating
57229 -system and make the process smaller. Usually, all it can do is allow a
57230 -later call to `malloc' to reuse the space. In the meantime, the space
57231 -remains in your program as part of a free-list used internally by
57232 -`malloc'.
57234 - There is no point in freeing blocks at the end of a program, because
57235 -all of the program's space is given back to the system when the process
57236 -terminates.
57238 -\x1f
57239 -File: libc.info, Node: Changing Block Size, Next: Allocating Cleared Space, Prev: Freeing after Malloc, Up: Unconstrained Allocation
57241 -Changing the Size of a Block
57242 -............................
57244 - Often you do not know for certain how big a block you will
57245 -ultimately need at the time you must begin to use the block. For
57246 -example, the block might be a buffer that you use to hold a line being
57247 -read from a file; no matter how long you make the buffer initially, you
57248 -may encounter a line that is longer.
57250 - You can make the block longer by calling `realloc'. This function
57251 -is declared in `stdlib.h'.
57253 - - Function: void * realloc (void *PTR, size_t NEWSIZE)
57254 - The `realloc' function changes the size of the block whose address
57255 - is PTR to be NEWSIZE.
57257 - Since the space after the end of the block may be in use, `realloc'
57258 - may find it necessary to copy the block to a new address where
57259 - more free space is available. The value of `realloc' is the new
57260 - address of the block. If the block needs to be moved, `realloc'
57261 - copies the old contents.
57263 - If you pass a null pointer for PTR, `realloc' behaves just like
57264 - `malloc (NEWSIZE)'. This can be convenient, but beware that older
57265 - implementations (before ISO C) may not support this behavior, and
57266 - will probably crash when `realloc' is passed a null pointer.
57268 - Like `malloc', `realloc' may return a null pointer if no memory
57269 -space is available to make the block bigger. When this happens, the
57270 -original block is untouched; it has not been modified or relocated.
57272 - In most cases it makes no difference what happens to the original
57273 -block when `realloc' fails, because the application program cannot
57274 -continue when it is out of memory, and the only thing to do is to give
57275 -a fatal error message. Often it is convenient to write and use a
57276 -subroutine, conventionally called `xrealloc', that takes care of the
57277 -error message as `xmalloc' does for `malloc':
57279 - void *
57280 - xrealloc (void *ptr, size_t size)
57282 - register void *value = realloc (ptr, size);
57283 - if (value == 0)
57284 - fatal ("Virtual memory exhausted");
57285 - return value;
57288 - You can also use `realloc' to make a block smaller. The reason you
57289 -would do this is to avoid tying up a lot of memory space when only a
57290 -little is needed. In several allocation implementations, making a
57291 -block smaller sometimes necessitates copying it, so it can fail if no
57292 -other space is available.
57294 - If the new size you specify is the same as the old size, `realloc'
57295 -is guaranteed to change nothing and return the same address that you
57296 -gave.
57298 -\x1f
57299 -File: libc.info, Node: Allocating Cleared Space, Next: Efficiency and Malloc, Prev: Changing Block Size, Up: Unconstrained Allocation
57301 -Allocating Cleared Space
57302 -........................
57304 - The function `calloc' allocates memory and clears it to zero. It is
57305 -declared in `stdlib.h'.
57307 - - Function: void * calloc (size_t COUNT, size_t ELTSIZE)
57308 - This function allocates a block long enough to contain a vector of
57309 - COUNT elements, each of size ELTSIZE. Its contents are cleared to
57310 - zero before `calloc' returns.
57312 - You could define `calloc' as follows:
57314 - void *
57315 - calloc (size_t count, size_t eltsize)
57317 - size_t size = count * eltsize;
57318 - void *value = malloc (size);
57319 - if (value != 0)
57320 - memset (value, 0, size);
57321 - return value;
57324 - But in general, it is not guaranteed that `calloc' calls `malloc'
57325 -internally. Therefore, if an application provides its own
57326 -`malloc'/`realloc'/`free' outside the C library, it should always
57327 -define `calloc', too.
57329 -\x1f
57330 -File: libc.info, Node: Efficiency and Malloc, Next: Aligned Memory Blocks, Prev: Allocating Cleared Space, Up: Unconstrained Allocation
57332 -Efficiency Considerations for `malloc'
57333 -......................................
57335 - As opposed to other versions, the `malloc' in the GNU C Library does
57336 -not round up block sizes to powers of two, neither for large nor for
57337 -small sizes. Neighboring chunks can be coalesced on a `free' no matter
57338 -what their size is. This makes the implementation suitable for all
57339 -kinds of allocation patterns without generally incurring high memory
57340 -waste through fragmentation.
57342 - Very large blocks (much larger than a page) are allocated with
57343 -`mmap' (anonymous or via `/dev/zero') by this implementation. This has
57344 -the great advantage that these chunks are returned to the system
57345 -immediately when they are freed. Therefore, it cannot happen that a
57346 -large chunk becomes "locked" in between smaller ones and even after
57347 -calling `free' wastes memory. The size threshold for `mmap' to be used
57348 -can be adjusted with `mallopt'. The use of `mmap' can also be disabled
57349 -completely.
57351 -\x1f
57352 -File: libc.info, Node: Aligned Memory Blocks, Next: Malloc Tunable Parameters, Prev: Efficiency and Malloc, Up: Unconstrained Allocation
57354 -Allocating Aligned Memory Blocks
57355 -................................
57357 - The address of a block returned by `malloc' or `realloc' in the GNU
57358 -system is always a multiple of eight (or sixteen on 64-bit systems).
57359 -If you need a block whose address is a multiple of a higher power of
57360 -two than that, use `memalign', `posix_memalign', or `valloc'.
57361 -`memalign' is declared in `malloc.h' and `posix_memalign' is declared
57362 -in `stdlib.h'.
57364 - With the GNU library, you can use `free' to free the blocks that
57365 -`memalign', `posix_memalign', and `valloc' return. That does not work
57366 -in BSD, however--BSD does not provide any way to free such blocks.
57368 - - Function: void * memalign (size_t BOUNDARY, size_t SIZE)
57369 - The `memalign' function allocates a block of SIZE bytes whose
57370 - address is a multiple of BOUNDARY. The BOUNDARY must be a power
57371 - of two! The function `memalign' works by allocating a somewhat
57372 - larger block, and then returning an address within the block that
57373 - is on the specified boundary.
57375 - - Function: int posix_memalign (void **MEMPTR, size_t ALIGNMENT,
57376 - size_t SIZE)
57377 - The `posix_memalign' function is similar to the `memalign'
57378 - function in that it returns a buffer of SIZE bytes aligned to a
57379 - multiple of ALIGNMENT. But it adds one requirement to the
57380 - parameter ALIGNMENT: the value must be a power of two multiple of
57381 - `sizeof (void *)'.
57383 - If the function succeeds in allocation memory a pointer to the
57384 - allocated memory is returned in `*MEMPTR' and the return value is
57385 - zero. Otherwise the function returns an error value indicating
57386 - the problem.
57388 - This function was introduced in POSIX 1003.1d.
57390 - - Function: void * valloc (size_t SIZE)
57391 - Using `valloc' is like using `memalign' and passing the page size
57392 - as the value of the second argument. It is implemented like this:
57394 - void *
57395 - valloc (size_t size)
57397 - return memalign (getpagesize (), size);
57400 - *Note Query Memory Parameters:: for more information about the
57401 - memory subsystem.
57403 -\x1f
57404 -File: libc.info, Node: Malloc Tunable Parameters, Next: Heap Consistency Checking, Prev: Aligned Memory Blocks, Up: Unconstrained Allocation
57406 -Malloc Tunable Parameters
57407 -.........................
57409 - You can adjust some parameters for dynamic memory allocation with the
57410 -`mallopt' function. This function is the general SVID/XPG interface,
57411 -defined in `malloc.h'.
57413 - - Function: int mallopt (int PARAM, int VALUE)
57414 - When calling `mallopt', the PARAM argument specifies the parameter
57415 - to be set, and VALUE the new value to be set. Possible choices
57416 - for PARAM, as defined in `malloc.h', are:
57418 - `M_TRIM_THRESHOLD'
57419 - This is the minimum size (in bytes) of the top-most,
57420 - releasable chunk that will cause `sbrk' to be called with a
57421 - negative argument in order to return memory to the system.
57423 - `M_TOP_PAD'
57424 - This parameter determines the amount of extra memory to
57425 - obtain from the system when a call to `sbrk' is required. It
57426 - also specifies the number of bytes to retain when shrinking
57427 - the heap by calling `sbrk' with a negative argument. This
57428 - provides the necessary hysteresis in heap size such that
57429 - excessive amounts of system calls can be avoided.
57431 - `M_MMAP_THRESHOLD'
57432 - All chunks larger than this value are allocated outside the
57433 - normal heap, using the `mmap' system call. This way it is
57434 - guaranteed that the memory for these chunks can be returned
57435 - to the system on `free'. Note that requests smaller than
57436 - this threshold might still be allocated via `mmap'.
57438 - `M_MMAP_MAX'
57439 - The maximum number of chunks to allocate with `mmap'.
57440 - Setting this to zero disables all use of `mmap'.
57443 -\x1f
57444 -File: libc.info, Node: Heap Consistency Checking, Next: Hooks for Malloc, Prev: Malloc Tunable Parameters, Up: Unconstrained Allocation
57446 -Heap Consistency Checking
57447 -.........................
57449 - You can ask `malloc' to check the consistency of dynamic memory by
57450 -using the `mcheck' function. This function is a GNU extension,
57451 -declared in `mcheck.h'.
57453 - - Function: int mcheck (void (*ABORTFN) (enum mcheck_status STATUS))
57454 - Calling `mcheck' tells `malloc' to perform occasional consistency
57455 - checks. These will catch things such as writing past the end of a
57456 - block that was allocated with `malloc'.
57458 - The ABORTFN argument is the function to call when an inconsistency
57459 - is found. If you supply a null pointer, then `mcheck' uses a
57460 - default function which prints a message and calls `abort' (*note
57461 - Aborting a Program::). The function you supply is called with one
57462 - argument, which says what sort of inconsistency was detected; its
57463 - type is described below.
57465 - It is too late to begin allocation checking once you have allocated
57466 - anything with `malloc'. So `mcheck' does nothing in that case.
57467 - The function returns `-1' if you call it too late, and `0'
57468 - otherwise (when it is successful).
57470 - The easiest way to arrange to call `mcheck' early enough is to use
57471 - the option `-lmcheck' when you link your program; then you don't
57472 - need to modify your program source at all. Alternatively you
57473 - might use a debugger to insert a call to `mcheck' whenever the
57474 - program is started, for example these gdb commands will
57475 - automatically call `mcheck' whenever the program starts:
57477 - (gdb) break main
57478 - Breakpoint 1, main (argc=2, argv=0xbffff964) at whatever.c:10
57479 - (gdb) command 1
57480 - Type commands for when breakpoint 1 is hit, one per line.
57481 - End with a line saying just "end".
57482 - >call mcheck(0)
57483 - >continue
57484 - >end
57485 - (gdb) ...
57487 - This will however only work if no initialization function of any
57488 - object involved calls any of the `malloc' functions since `mcheck'
57489 - must be called before the first such function.
57492 - - Function: enum mcheck_status mprobe (void *POINTER)
57493 - The `mprobe' function lets you explicitly check for inconsistencies
57494 - in a particular allocated block. You must have already called
57495 - `mcheck' at the beginning of the program, to do its occasional
57496 - checks; calling `mprobe' requests an additional consistency check
57497 - to be done at the time of the call.
57499 - The argument POINTER must be a pointer returned by `malloc' or
57500 - `realloc'. `mprobe' returns a value that says what inconsistency,
57501 - if any, was found. The values are described below.
57503 - - Data Type: enum mcheck_status
57504 - This enumerated type describes what kind of inconsistency was
57505 - detected in an allocated block, if any. Here are the possible
57506 - values:
57508 - `MCHECK_DISABLED'
57509 - `mcheck' was not called before the first allocation. No
57510 - consistency checking can be done.
57512 - `MCHECK_OK'
57513 - No inconsistency detected.
57515 - `MCHECK_HEAD'
57516 - The data immediately before the block was modified. This
57517 - commonly happens when an array index or pointer is
57518 - decremented too far.
57520 - `MCHECK_TAIL'
57521 - The data immediately after the block was modified. This
57522 - commonly happens when an array index or pointer is
57523 - incremented too far.
57525 - `MCHECK_FREE'
57526 - The block was already freed.
57528 - Another possibility to check for and guard against bugs in the use of
57529 -`malloc', `realloc' and `free' is to set the environment variable
57530 -`MALLOC_CHECK_'. When `MALLOC_CHECK_' is set, a special (less
57531 -efficient) implementation is used which is designed to be tolerant
57532 -against simple errors, such as double calls of `free' with the same
57533 -argument, or overruns of a single byte (off-by-one bugs). Not all such
57534 -errors can be protected against, however, and memory leaks can result.
57535 -If `MALLOC_CHECK_' is set to `0', any detected heap corruption is
57536 -silently ignored; if set to `1', a diagnostic is printed on `stderr';
57537 -if set to `2', `abort' is called immediately. This can be useful
57538 -because otherwise a crash may happen much later, and the true cause for
57539 -the problem is then very hard to track down.
57541 - There is one problem with `MALLOC_CHECK_': in SUID or SGID binaries
57542 -it could possibly be exploited since diverging from the normal programs
57543 -behavior it now writes something to the standard error descriptor.
57544 -Therefore the use of `MALLOC_CHECK_' is disabled by default for SUID
57545 -and SGID binaries. It can be enabled again by the system administrator
57546 -by adding a file `/etc/suid-debug' (the content is not important it
57547 -could be empty).
57549 - So, what's the difference between using `MALLOC_CHECK_' and linking
57550 -with `-lmcheck'? `MALLOC_CHECK_' is orthogonal with respect to
57551 -`-lmcheck'. `-lmcheck' has been added for backward compatibility.
57552 -Both `MALLOC_CHECK_' and `-lmcheck' should uncover the same bugs - but
57553 -using `MALLOC_CHECK_' you don't need to recompile your application.
57555 -\x1f
57556 -File: libc.info, Node: Hooks for Malloc, Next: Statistics of Malloc, Prev: Heap Consistency Checking, Up: Unconstrained Allocation
57558 -Memory Allocation Hooks
57559 -.......................
57561 - The GNU C library lets you modify the behavior of `malloc',
57562 -`realloc', and `free' by specifying appropriate hook functions. You
57563 -can use these hooks to help you debug programs that use dynamic memory
57564 -allocation, for example.
57566 - The hook variables are declared in `malloc.h'.
57568 - - Variable: __malloc_hook
57569 - The value of this variable is a pointer to the function that
57570 - `malloc' uses whenever it is called. You should define this
57571 - function to look like `malloc'; that is, like:
57573 - void *FUNCTION (size_t SIZE, const void *CALLER)
57575 - The value of CALLER is the return address found on the stack when
57576 - the `malloc' function was called. This value allows you to trace
57577 - the memory consumption of the program.
57579 - - Variable: __realloc_hook
57580 - The value of this variable is a pointer to function that `realloc'
57581 - uses whenever it is called. You should define this function to
57582 - look like `realloc'; that is, like:
57584 - void *FUNCTION (void *PTR, size_t SIZE, const void *CALLER)
57586 - The value of CALLER is the return address found on the stack when
57587 - the `realloc' function was called. This value allows you to trace
57588 - the memory consumption of the program.
57590 - - Variable: __free_hook
57591 - The value of this variable is a pointer to function that `free'
57592 - uses whenever it is called. You should define this function to
57593 - look like `free'; that is, like:
57595 - void FUNCTION (void *PTR, const void *CALLER)
57597 - The value of CALLER is the return address found on the stack when
57598 - the `free' function was called. This value allows you to trace the
57599 - memory consumption of the program.
57601 - - Variable: __memalign_hook
57602 - The value of this variable is a pointer to function that `memalign'
57603 - uses whenever it is called. You should define this function to
57604 - look like `memalign'; that is, like:
57606 - void *FUNCTION (size_t ALIGNMENT, size_t SIZE, const void *CALLER)
57608 - The value of CALLER is the return address found on the stack when
57609 - the `memalign' function was called. This value allows you to
57610 - trace the memory consumption of the program.
57612 - You must make sure that the function you install as a hook for one of
57613 -these functions does not call that function recursively without
57614 -restoring the old value of the hook first! Otherwise, your program
57615 -will get stuck in an infinite recursion. Before calling the function
57616 -recursively, one should make sure to restore all the hooks to their
57617 -previous value. When coming back from the recursive call, all the
57618 -hooks should be resaved since a hook might modify itself.
57620 - - Variable: __malloc_initialize_hook
57621 - The value of this variable is a pointer to a function that is
57622 - called once when the malloc implementation is initialized. This
57623 - is a weak variable, so it can be overridden in the application
57624 - with a definition like the following:
57626 - void (*__MALLOC_INITIALIZE_HOOK) (void) = my_init_hook;
57628 - An issue to look out for is the time at which the malloc hook
57629 -functions can be safely installed. If the hook functions call the
57630 -malloc-related functions recursively, it is necessary that malloc has
57631 -already properly initialized itself at the time when `__malloc_hook'
57632 -etc. is assigned to. On the other hand, if the hook functions provide a
57633 -complete malloc implementation of their own, it is vital that the hooks
57634 -are assigned to _before_ the very first `malloc' call has completed,
57635 -because otherwise a chunk obtained from the ordinary, un-hooked malloc
57636 -may later be handed to `__free_hook', for example.
57638 - In both cases, the problem can be solved by setting up the hooks from
57639 -within a user-defined function pointed to by
57640 -`__malloc_initialize_hook'--then the hooks will be set up safely at the
57641 -right time.
57643 - Here is an example showing how to use `__malloc_hook' and
57644 -`__free_hook' properly. It installs a function that prints out
57645 -information every time `malloc' or `free' is called. We just assume
57646 -here that `realloc' and `memalign' are not used in our program.
57648 - /* Prototypes for __malloc_hook, __free_hook */
57649 - #include <malloc.h>
57651 - /* Prototypes for our hooks. */
57652 - static void *my_init_hook (void);
57653 - static void *my_malloc_hook (size_t, const void *);
57654 - static void my_free_hook (void*, const void *);
57656 - /* Override initializing hook from the C library. */
57657 - void (*__malloc_initialize_hook) (void) = my_init_hook;
57659 - static void
57660 - my_init_hook (void)
57662 - old_malloc_hook = __malloc_hook;
57663 - old_free_hook = __free_hook;
57664 - __malloc_hook = my_malloc_hook;
57665 - __free_hook = my_free_hook;
57668 - static void *
57669 - my_malloc_hook (size_t size, const void *caller)
57671 - void *result;
57672 - /* Restore all old hooks */
57673 - __malloc_hook = old_malloc_hook;
57674 - __free_hook = old_free_hook;
57675 - /* Call recursively */
57676 - result = malloc (size);
57677 - /* Save underlying hooks */
57678 - old_malloc_hook = __malloc_hook;
57679 - old_free_hook = __free_hook;
57680 - /* `printf' might call `malloc', so protect it too. */
57681 - printf ("malloc (%u) returns %p\n", (unsigned int) size, result);
57682 - /* Restore our own hooks */
57683 - __malloc_hook = my_malloc_hook;
57684 - __free_hook = my_free_hook;
57685 - return result;
57688 - static void *
57689 - my_free_hook (void *ptr, const void *caller)
57691 - /* Restore all old hooks */
57692 - __malloc_hook = old_malloc_hook;
57693 - __free_hook = old_free_hook;
57694 - /* Call recursively */
57695 - free (ptr);
57696 - /* Save underlying hooks */
57697 - old_malloc_hook = __malloc_hook;
57698 - old_free_hook = __free_hook;
57699 - /* `printf' might call `free', so protect it too. */
57700 - printf ("freed pointer %p\n", ptr);
57701 - /* Restore our own hooks */
57702 - __malloc_hook = my_malloc_hook;
57703 - __free_hook = my_free_hook;
57706 - main ()
57708 - ...
57711 - The `mcheck' function (*note Heap Consistency Checking::) works by
57712 -installing such hooks.
57714 -\x1f
57715 -File: libc.info, Node: Statistics of Malloc, Next: Summary of Malloc, Prev: Hooks for Malloc, Up: Unconstrained Allocation
57717 -Statistics for Memory Allocation with `malloc'
57718 -..............................................
57720 - You can get information about dynamic memory allocation by calling
57721 -the `mallinfo' function. This function and its associated data type
57722 -are declared in `malloc.h'; they are an extension of the standard
57723 -SVID/XPG version.
57725 - - Data Type: struct mallinfo
57726 - This structure type is used to return information about the dynamic
57727 - memory allocator. It contains the following members:
57729 - `int arena'
57730 - This is the total size of memory allocated with `sbrk' by
57731 - `malloc', in bytes.
57733 - `int ordblks'
57734 - This is the number of chunks not in use. (The memory
57735 - allocator internally gets chunks of memory from the operating
57736 - system, and then carves them up to satisfy individual
57737 - `malloc' requests; see *Note Efficiency and Malloc::.)
57739 - `int smblks'
57740 - This field is unused.
57742 - `int hblks'
57743 - This is the total number of chunks allocated with `mmap'.
57745 - `int hblkhd'
57746 - This is the total size of memory allocated with `mmap', in
57747 - bytes.
57749 - `int usmblks'
57750 - This field is unused.
57752 - `int fsmblks'
57753 - This field is unused.
57755 - `int uordblks'
57756 - This is the total size of memory occupied by chunks handed
57757 - out by `malloc'.
57759 - `int fordblks'
57760 - This is the total size of memory occupied by free (not in
57761 - use) chunks.
57763 - `int keepcost'
57764 - This is the size of the top-most releasable chunk that
57765 - normally borders the end of the heap (i.e. the high end of
57766 - the virtual address space's data segment).
57769 - - Function: struct mallinfo mallinfo (void)
57770 - This function returns information about the current dynamic memory
57771 - usage in a structure of type `struct mallinfo'.
57773 -\x1f
57774 -File: libc.info, Node: Summary of Malloc, Prev: Statistics of Malloc, Up: Unconstrained Allocation
57776 -Summary of `malloc'-Related Functions
57777 -.....................................
57779 - Here is a summary of the functions that work with `malloc':
57781 -`void *malloc (size_t SIZE)'
57782 - Allocate a block of SIZE bytes. *Note Basic Allocation::.
57784 -`void free (void *ADDR)'
57785 - Free a block previously allocated by `malloc'. *Note Freeing
57786 - after Malloc::.
57788 -`void *realloc (void *ADDR, size_t SIZE)'
57789 - Make a block previously allocated by `malloc' larger or smaller,
57790 - possibly by copying it to a new location. *Note Changing Block
57791 - Size::.
57793 -`void *calloc (size_t COUNT, size_t ELTSIZE)'
57794 - Allocate a block of COUNT * ELTSIZE bytes using `malloc', and set
57795 - its contents to zero. *Note Allocating Cleared Space::.
57797 -`void *valloc (size_t SIZE)'
57798 - Allocate a block of SIZE bytes, starting on a page boundary.
57799 - *Note Aligned Memory Blocks::.
57801 -`void *memalign (size_t SIZE, size_t BOUNDARY)'
57802 - Allocate a block of SIZE bytes, starting on an address that is a
57803 - multiple of BOUNDARY. *Note Aligned Memory Blocks::.
57805 -`int mallopt (int PARAM, int VALUE)'
57806 - Adjust a tunable parameter. *Note Malloc Tunable Parameters::.
57808 -`int mcheck (void (*ABORTFN) (void))'
57809 - Tell `malloc' to perform occasional consistency checks on
57810 - dynamically allocated memory, and to call ABORTFN when an
57811 - inconsistency is found. *Note Heap Consistency Checking::.
57813 -`void *(*__malloc_hook) (size_t SIZE, const void *CALLER)'
57814 - A pointer to a function that `malloc' uses whenever it is called.
57816 -`void *(*__realloc_hook) (void *PTR, size_t SIZE, const void *CALLER)'
57817 - A pointer to a function that `realloc' uses whenever it is called.
57819 -`void (*__free_hook) (void *PTR, const void *CALLER)'
57820 - A pointer to a function that `free' uses whenever it is called.
57822 -`void (*__memalign_hook) (size_t SIZE, size_t ALIGNMENT, const void *CALLER)'
57823 - A pointer to a function that `memalign' uses whenever it is called.
57825 -`struct mallinfo mallinfo (void)'
57826 - Return information about the current dynamic memory usage. *Note
57827 - Statistics of Malloc::.
57829 -\x1f
57830 -File: libc.info, Node: Allocation Debugging, Next: Obstacks, Prev: Unconstrained Allocation, Up: Memory Allocation
57832 -Allocation Debugging
57833 ---------------------
57835 - A complicated task when programming with languages which do not use
57836 -garbage collected dynamic memory allocation is to find memory leaks.
57837 -Long running programs must assure that dynamically allocated objects are
57838 -freed at the end of their lifetime. If this does not happen the system
57839 -runs out of memory, sooner or later.
57841 - The `malloc' implementation in the GNU C library provides some
57842 -simple means to detect such leaks and obtain some information to find
57843 -the location. To do this the application must be started in a special
57844 -mode which is enabled by an environment variable. There are no speed
57845 -penalties for the program if the debugging mode is not enabled.
57847 -* Menu:
57849 -* Tracing malloc:: How to install the tracing functionality.
57850 -* Using the Memory Debugger:: Example programs excerpts.
57851 -* Tips for the Memory Debugger:: Some more or less clever ideas.
57852 -* Interpreting the traces:: What do all these lines mean?
57854 -\x1f
57855 -File: libc.info, Node: Tracing malloc, Next: Using the Memory Debugger, Up: Allocation Debugging
57857 -How to install the tracing functionality
57858 -........................................
57860 - - Function: void mtrace (void)
57861 - When the `mtrace' function is called it looks for an environment
57862 - variable named `MALLOC_TRACE'. This variable is supposed to
57863 - contain a valid file name. The user must have write access. If
57864 - the file already exists it is truncated. If the environment
57865 - variable is not set or it does not name a valid file which can be
57866 - opened for writing nothing is done. The behavior of `malloc' etc.
57867 - is not changed. For obvious reasons this also happens if the
57868 - application is installed with the SUID or SGID bit set.
57870 - If the named file is successfully opened, `mtrace' installs special
57871 - handlers for the functions `malloc', `realloc', and `free' (*note
57872 - Hooks for Malloc::). From then on, all uses of these functions
57873 - are traced and protocolled into the file. There is now of course
57874 - a speed penalty for all calls to the traced functions so tracing
57875 - should not be enabled during normal use.
57877 - This function is a GNU extension and generally not available on
57878 - other systems. The prototype can be found in `mcheck.h'.
57880 - - Function: void muntrace (void)
57881 - The `muntrace' function can be called after `mtrace' was used to
57882 - enable tracing the `malloc' calls. If no (successful) call of
57883 - `mtrace' was made `muntrace' does nothing.
57885 - Otherwise it deinstalls the handlers for `malloc', `realloc', and
57886 - `free' and then closes the protocol file. No calls are
57887 - protocolled anymore and the program runs again at full speed.
57889 - This function is a GNU extension and generally not available on
57890 - other systems. The prototype can be found in `mcheck.h'.
57892 -\x1f
57893 -File: libc.info, Node: Using the Memory Debugger, Next: Tips for the Memory Debugger, Prev: Tracing malloc, Up: Allocation Debugging
57895 -Example program excerpts
57896 -........................
57898 - Even though the tracing functionality does not influence the runtime
57899 -behavior of the program it is not a good idea to call `mtrace' in all
57900 -programs. Just imagine that you debug a program using `mtrace' and all
57901 -other programs used in the debugging session also trace their `malloc'
57902 -calls. The output file would be the same for all programs and thus is
57903 -unusable. Therefore one should call `mtrace' only if compiled for
57904 -debugging. A program could therefore start like this:
57906 - #include <mcheck.h>
57908 - int
57909 - main (int argc, char *argv[])
57911 - #ifdef DEBUGGING
57912 - mtrace ();
57913 - #endif
57914 - ...
57917 - This is all what is needed if you want to trace the calls during the
57918 -whole runtime of the program. Alternatively you can stop the tracing at
57919 -any time with a call to `muntrace'. It is even possible to restart the
57920 -tracing again with a new call to `mtrace'. But this can cause
57921 -unreliable results since there may be calls of the functions which are
57922 -not called. Please note that not only the application uses the traced
57923 -functions, also libraries (including the C library itself) use these
57924 -functions.
57926 - This last point is also why it is no good idea to call `muntrace'
57927 -before the program terminated. The libraries are informed about the
57928 -termination of the program only after the program returns from `main'
57929 -or calls `exit' and so cannot free the memory they use before this time.
57931 - So the best thing one can do is to call `mtrace' as the very first
57932 -function in the program and never call `muntrace'. So the program
57933 -traces almost all uses of the `malloc' functions (except those calls
57934 -which are executed by constructors of the program or used libraries).
57936 -\x1f
57937 -File: libc.info, Node: Tips for the Memory Debugger, Next: Interpreting the traces, Prev: Using the Memory Debugger, Up: Allocation Debugging
57939 -Some more or less clever ideas
57940 -..............................
57942 - You know the situation. The program is prepared for debugging and in
57943 -all debugging sessions it runs well. But once it is started without
57944 -debugging the error shows up. A typical example is a memory leak that
57945 -becomes visible only when we turn off the debugging. If you foresee
57946 -such situations you can still win. Simply use something equivalent to
57947 -the following little program:
57949 - #include <mcheck.h>
57950 - #include <signal.h>
57952 - static void
57953 - enable (int sig)
57955 - mtrace ();
57956 - signal (SIGUSR1, enable);
57959 - static void
57960 - disable (int sig)
57962 - muntrace ();
57963 - signal (SIGUSR2, disable);
57966 - int
57967 - main (int argc, char *argv[])
57969 - ...
57971 - signal (SIGUSR1, enable);
57972 - signal (SIGUSR2, disable);
57974 - ...
57977 - I.e., the user can start the memory debugger any time s/he wants if
57978 -the program was started with `MALLOC_TRACE' set in the environment.
57979 -The output will of course not show the allocations which happened before
57980 -the first signal but if there is a memory leak this will show up
57981 -nevertheless.
57983 -\x1f
57984 -File: libc.info, Node: Interpreting the traces, Prev: Tips for the Memory Debugger, Up: Allocation Debugging
57986 -Interpreting the traces
57987 -.......................
57989 - If you take a look at the output it will look similar to this:
57991 - = Start
57992 - [0x8048209] - 0x8064cc8
57993 - [0x8048209] - 0x8064ce0
57994 - [0x8048209] - 0x8064cf8
57995 - [0x80481eb] + 0x8064c48 0x14
57996 - [0x80481eb] + 0x8064c60 0x14
57997 - [0x80481eb] + 0x8064c78 0x14
57998 - [0x80481eb] + 0x8064c90 0x14
57999 - = End
58001 - What this all means is not really important since the trace file is
58002 -not meant to be read by a human. Therefore no attention is given to
58003 -readability. Instead there is a program which comes with the GNU C
58004 -library which interprets the traces and outputs a summary in an
58005 -user-friendly way. The program is called `mtrace' (it is in fact a
58006 -Perl script) and it takes one or two arguments. In any case the name of
58007 -the file with the trace output must be specified. If an optional
58008 -argument precedes the name of the trace file this must be the name of
58009 -the program which generated the trace.
58011 - drepper$ mtrace tst-mtrace log
58012 - No memory leaks.
58014 - In this case the program `tst-mtrace' was run and it produced a
58015 -trace file `log'. The message printed by `mtrace' shows there are no
58016 -problems with the code, all allocated memory was freed afterwards.
58018 - If we call `mtrace' on the example trace given above we would get a
58019 -different outout:
58021 - drepper$ mtrace errlog
58022 - - 0x08064cc8 Free 2 was never alloc'd 0x8048209
58023 - - 0x08064ce0 Free 3 was never alloc'd 0x8048209
58024 - - 0x08064cf8 Free 4 was never alloc'd 0x8048209
58026 - Memory not freed:
58027 - -----------------
58028 - Address Size Caller
58029 - 0x08064c48 0x14 at 0x80481eb
58030 - 0x08064c60 0x14 at 0x80481eb
58031 - 0x08064c78 0x14 at 0x80481eb
58032 - 0x08064c90 0x14 at 0x80481eb
58034 - We have called `mtrace' with only one argument and so the script has
58035 -no chance to find out what is meant with the addresses given in the
58036 -trace. We can do better:
58038 - drepper$ mtrace tst errlog
58039 - - 0x08064cc8 Free 2 was never alloc'd /home/drepper/tst.c:39
58040 - - 0x08064ce0 Free 3 was never alloc'd /home/drepper/tst.c:39
58041 - - 0x08064cf8 Free 4 was never alloc'd /home/drepper/tst.c:39
58043 - Memory not freed:
58044 - -----------------
58045 - Address Size Caller
58046 - 0x08064c48 0x14 at /home/drepper/tst.c:33
58047 - 0x08064c60 0x14 at /home/drepper/tst.c:33
58048 - 0x08064c78 0x14 at /home/drepper/tst.c:33
58049 - 0x08064c90 0x14 at /home/drepper/tst.c:33
58051 - Suddenly the output makes much more sense and the user can see
58052 -immediately where the function calls causing the trouble can be found.
58054 - Interpreting this output is not complicated. There are at most two
58055 -different situations being detected. First, `free' was called for
58056 -pointers which were never returned by one of the allocation functions.
58057 -This is usually a very bad problem and what this looks like is shown in
58058 -the first three lines of the output. Situations like this are quite
58059 -rare and if they appear they show up very drastically: the program
58060 -normally crashes.
58062 - The other situation which is much harder to detect are memory leaks.
58063 -As you can see in the output the `mtrace' function collects all this
58064 -information and so can say that the program calls an allocation function
58065 -from line 33 in the source file `/home/drepper/tst-mtrace.c' four times
58066 -without freeing this memory before the program terminates. Whether
58067 -this is a real problem remains to be investigated.
58069 -\x1f
58070 -File: libc.info, Node: Obstacks, Next: Variable Size Automatic, Prev: Allocation Debugging, Up: Memory Allocation
58072 -Obstacks
58073 ---------
58075 - An "obstack" is a pool of memory containing a stack of objects. You
58076 -can create any number of separate obstacks, and then allocate objects in
58077 -specified obstacks. Within each obstack, the last object allocated must
58078 -always be the first one freed, but distinct obstacks are independent of
58079 -each other.
58081 - Aside from this one constraint of order of freeing, obstacks are
58082 -totally general: an obstack can contain any number of objects of any
58083 -size. They are implemented with macros, so allocation is usually very
58084 -fast as long as the objects are usually small. And the only space
58085 -overhead per object is the padding needed to start each object on a
58086 -suitable boundary.
58088 -* Menu:
58090 -* Creating Obstacks:: How to declare an obstack in your program.
58091 -* Preparing for Obstacks:: Preparations needed before you can
58092 - use obstacks.
58093 -* Allocation in an Obstack:: Allocating objects in an obstack.
58094 -* Freeing Obstack Objects:: Freeing objects in an obstack.
58095 -* Obstack Functions:: The obstack functions are both
58096 - functions and macros.
58097 -* Growing Objects:: Making an object bigger by stages.
58098 -* Extra Fast Growing:: Extra-high-efficiency (though more
58099 - complicated) growing objects.
58100 -* Status of an Obstack:: Inquiries about the status of an obstack.
58101 -* Obstacks Data Alignment:: Controlling alignment of objects in obstacks.
58102 -* Obstack Chunks:: How obstacks obtain and release chunks;
58103 - efficiency considerations.
58104 -* Summary of Obstacks::
58106 -\x1f
58107 -File: libc.info, Node: Creating Obstacks, Next: Preparing for Obstacks, Up: Obstacks
58109 -Creating Obstacks
58110 -.................
58112 - The utilities for manipulating obstacks are declared in the header
58113 -file `obstack.h'.
58115 - - Data Type: struct obstack
58116 - An obstack is represented by a data structure of type `struct
58117 - obstack'. This structure has a small fixed size; it records the
58118 - status of the obstack and how to find the space in which objects
58119 - are allocated. It does not contain any of the objects themselves.
58120 - You should not try to access the contents of the structure
58121 - directly; use only the functions described in this chapter.
58123 - You can declare variables of type `struct obstack' and use them as
58124 -obstacks, or you can allocate obstacks dynamically like any other kind
58125 -of object. Dynamic allocation of obstacks allows your program to have a
58126 -variable number of different stacks. (You can even allocate an obstack
58127 -structure in another obstack, but this is rarely useful.)
58129 - All the functions that work with obstacks require you to specify
58130 -which obstack to use. You do this with a pointer of type `struct
58131 -obstack *'. In the following, we often say "an obstack" when strictly
58132 -speaking the object at hand is such a pointer.
58134 - The objects in the obstack are packed into large blocks called
58135 -"chunks". The `struct obstack' structure points to a chain of the
58136 -chunks currently in use.
58138 - The obstack library obtains a new chunk whenever you allocate an
58139 -object that won't fit in the previous chunk. Since the obstack library
58140 -manages chunks automatically, you don't need to pay much attention to
58141 -them, but you do need to supply a function which the obstack library
58142 -should use to get a chunk. Usually you supply a function which uses
58143 -`malloc' directly or indirectly. You must also supply a function to
58144 -free a chunk. These matters are described in the following section.
58146 -\x1f
58147 -File: libc.info, Node: Preparing for Obstacks, Next: Allocation in an Obstack, Prev: Creating Obstacks, Up: Obstacks
58149 -Preparing for Using Obstacks
58150 -............................
58152 - Each source file in which you plan to use the obstack functions must
58153 -include the header file `obstack.h', like this:
58155 - #include <obstack.h>
58157 - Also, if the source file uses the macro `obstack_init', it must
58158 -declare or define two functions or macros that will be called by the
58159 -obstack library. One, `obstack_chunk_alloc', is used to allocate the
58160 -chunks of memory into which objects are packed. The other,
58161 -`obstack_chunk_free', is used to return chunks when the objects in them
58162 -are freed. These macros should appear before any use of obstacks in
58163 -the source file.
58165 - Usually these are defined to use `malloc' via the intermediary
58166 -`xmalloc' (*note Unconstrained Allocation::). This is done with the
58167 -following pair of macro definitions:
58169 - #define obstack_chunk_alloc xmalloc
58170 - #define obstack_chunk_free free
58172 -Though the memory you get using obstacks really comes from `malloc',
58173 -using obstacks is faster because `malloc' is called less often, for
58174 -larger blocks of memory. *Note Obstack Chunks::, for full details.
58176 - At run time, before the program can use a `struct obstack' object as
58177 -an obstack, it must initialize the obstack by calling `obstack_init'.
58179 - - Function: int obstack_init (struct obstack *OBSTACK-PTR)
58180 - Initialize obstack OBSTACK-PTR for allocation of objects. This
58181 - function calls the obstack's `obstack_chunk_alloc' function. If
58182 - allocation of memory fails, the function pointed to by
58183 - `obstack_alloc_failed_handler' is called. The `obstack_init'
58184 - function always returns 1 (Compatibility notice: Former versions of
58185 - obstack returned 0 if allocation failed).
58187 - Here are two examples of how to allocate the space for an obstack and
58188 -initialize it. First, an obstack that is a static variable:
58190 - static struct obstack myobstack;
58191 - ...
58192 - obstack_init (&myobstack);
58194 -Second, an obstack that is itself dynamically allocated:
58196 - struct obstack *myobstack_ptr
58197 - = (struct obstack *) xmalloc (sizeof (struct obstack));
58199 - obstack_init (myobstack_ptr);
58201 - - Variable: obstack_alloc_failed_handler
58202 - The value of this variable is a pointer to a function that
58203 - `obstack' uses when `obstack_chunk_alloc' fails to allocate
58204 - memory. The default action is to print a message and abort. You
58205 - should supply a function that either calls `exit' (*note Program
58206 - Termination::) or `longjmp' (*note Non-Local Exits::) and doesn't
58207 - return.
58209 - void my_obstack_alloc_failed (void)
58210 - ...
58211 - obstack_alloc_failed_handler = &my_obstack_alloc_failed;
58214 -\x1f
58215 -File: libc.info, Node: Allocation in an Obstack, Next: Freeing Obstack Objects, Prev: Preparing for Obstacks, Up: Obstacks
58217 -Allocation in an Obstack
58218 -........................
58220 - The most direct way to allocate an object in an obstack is with
58221 -`obstack_alloc', which is invoked almost like `malloc'.
58223 - - Function: void * obstack_alloc (struct obstack *OBSTACK-PTR, int
58224 - SIZE)
58225 - This allocates an uninitialized block of SIZE bytes in an obstack
58226 - and returns its address. Here OBSTACK-PTR specifies which obstack
58227 - to allocate the block in; it is the address of the `struct obstack'
58228 - object which represents the obstack. Each obstack function or
58229 - macro requires you to specify an OBSTACK-PTR as the first argument.
58231 - This function calls the obstack's `obstack_chunk_alloc' function if
58232 - it needs to allocate a new chunk of memory; it calls
58233 - `obstack_alloc_failed_handler' if allocation of memory by
58234 - `obstack_chunk_alloc' failed.
58236 - For example, here is a function that allocates a copy of a string STR
58237 -in a specific obstack, which is in the variable `string_obstack':
58239 - struct obstack string_obstack;
58241 - char *
58242 - copystring (char *string)
58244 - size_t len = strlen (string) + 1;
58245 - char *s = (char *) obstack_alloc (&string_obstack, len);
58246 - memcpy (s, string, len);
58247 - return s;
58250 - To allocate a block with specified contents, use the function
58251 -`obstack_copy', declared like this:
58253 - - Function: void * obstack_copy (struct obstack *OBSTACK-PTR, void
58254 - *ADDRESS, int SIZE)
58255 - This allocates a block and initializes it by copying SIZE bytes of
58256 - data starting at ADDRESS. It calls `obstack_alloc_failed_handler'
58257 - if allocation of memory by `obstack_chunk_alloc' failed.
58259 - - Function: void * obstack_copy0 (struct obstack *OBSTACK-PTR, void
58260 - *ADDRESS, int SIZE)
58261 - Like `obstack_copy', but appends an extra byte containing a null
58262 - character. This extra byte is not counted in the argument SIZE.
58264 - The `obstack_copy0' function is convenient for copying a sequence of
58265 -characters into an obstack as a null-terminated string. Here is an
58266 -example of its use:
58268 - char *
58269 - obstack_savestring (char *addr, int size)
58271 - return obstack_copy0 (&myobstack, addr, size);
58274 -Contrast this with the previous example of `savestring' using `malloc'
58275 -(*note Basic Allocation::).
58277 -\x1f
58278 -File: libc.info, Node: Freeing Obstack Objects, Next: Obstack Functions, Prev: Allocation in an Obstack, Up: Obstacks
58280 -Freeing Objects in an Obstack
58281 -.............................
58283 - To free an object allocated in an obstack, use the function
58284 -`obstack_free'. Since the obstack is a stack of objects, freeing one
58285 -object automatically frees all other objects allocated more recently in
58286 -the same obstack.
58288 - - Function: void obstack_free (struct obstack *OBSTACK-PTR, void
58289 - *OBJECT)
58290 - If OBJECT is a null pointer, everything allocated in the obstack
58291 - is freed. Otherwise, OBJECT must be the address of an object
58292 - allocated in the obstack. Then OBJECT is freed, along with
58293 - everything allocated in OBSTACK since OBJECT.
58295 - Note that if OBJECT is a null pointer, the result is an
58296 -uninitialized obstack. To free all memory in an obstack but leave it
58297 -valid for further allocation, call `obstack_free' with the address of
58298 -the first object allocated on the obstack:
58300 - obstack_free (obstack_ptr, first_object_allocated_ptr);
58302 - Recall that the objects in an obstack are grouped into chunks. When
58303 -all the objects in a chunk become free, the obstack library
58304 -automatically frees the chunk (*note Preparing for Obstacks::). Then
58305 -other obstacks, or non-obstack allocation, can reuse the space of the
58306 -chunk.
58308 -\x1f
58309 -File: libc.info, Node: Obstack Functions, Next: Growing Objects, Prev: Freeing Obstack Objects, Up: Obstacks
58311 -Obstack Functions and Macros
58312 -............................
58314 - The interfaces for using obstacks may be defined either as functions
58315 -or as macros, depending on the compiler. The obstack facility works
58316 -with all C compilers, including both ISO C and traditional C, but there
58317 -are precautions you must take if you plan to use compilers other than
58318 -GNU C.
58320 - If you are using an old-fashioned non-ISO C compiler, all the obstack
58321 -"functions" are actually defined only as macros. You can call these
58322 -macros like functions, but you cannot use them in any other way (for
58323 -example, you cannot take their address).
58325 - Calling the macros requires a special precaution: namely, the first
58326 -operand (the obstack pointer) may not contain any side effects, because
58327 -it may be computed more than once. For example, if you write this:
58329 - obstack_alloc (get_obstack (), 4);
58331 -you will find that `get_obstack' may be called several times. If you
58332 -use `*obstack_list_ptr++' as the obstack pointer argument, you will get
58333 -very strange results since the incrementation may occur several times.
58335 - In ISO C, each function has both a macro definition and a function
58336 -definition. The function definition is used if you take the address of
58337 -the function without calling it. An ordinary call uses the macro
58338 -definition by default, but you can request the function definition
58339 -instead by writing the function name in parentheses, as shown here:
58341 - char *x;
58342 - void *(*funcp) ();
58343 - /* Use the macro. */
58344 - x = (char *) obstack_alloc (obptr, size);
58345 - /* Call the function. */
58346 - x = (char *) (obstack_alloc) (obptr, size);
58347 - /* Take the address of the function. */
58348 - funcp = obstack_alloc;
58350 -This is the same situation that exists in ISO C for the standard library
58351 -functions. *Note Macro Definitions::.
58353 - *Warning:* When you do use the macros, you must observe the
58354 -precaution of avoiding side effects in the first operand, even in ISO C.
58356 - If you use the GNU C compiler, this precaution is not necessary,
58357 -because various language extensions in GNU C permit defining the macros
58358 -so as to compute each argument only once.
58360 diff -u -udbrN glibc-2.3.2/manual/libc.info-40 glibc-2.3.2-200304020432/manual/libc.info-40
58361 --- glibc-2.3.2/manual/libc.info-40 Sat Mar 1 02:39:41 2003
58362 +++ glibc-2.3.2-200304020432/manual/libc.info-40 Thu Jan 1 01:00:00 1970
58363 @@ -1,1192 +0,0 @@
58364 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
58366 -INFO-DIR-SECTION GNU libraries
58367 -START-INFO-DIR-ENTRY
58368 -* Libc: (libc). C library.
58369 -END-INFO-DIR-ENTRY
58371 - This file documents the GNU C library.
58373 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
58374 -Reference Manual', for Version 2.3.x.
58376 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
58377 -Free Software Foundation, Inc.
58379 - Permission is granted to copy, distribute and/or modify this document
58380 -under the terms of the GNU Free Documentation License, Version 1.1 or
58381 -any later version published by the Free Software Foundation; with the
58382 -Invariant Sections being "Free Software Needs Free Documentation" and
58383 -"GNU Lesser General Public License", the Front-Cover texts being (a)
58384 -(see below), and with the Back-Cover Texts being (b) (see below). A
58385 -copy of the license is included in the section entitled "GNU Free
58386 -Documentation License".
58388 - (a) The FSF's Front-Cover Text is:
58390 - A GNU Manual
58392 - (b) The FSF's Back-Cover Text is:
58394 - You have freedom to copy and modify this GNU Manual, like GNU
58395 -software. Copies published by the Free Software Foundation raise
58396 -funds for GNU development.
58398 -\x1f
58399 -File: libc.info, Node: Signals in Handler, Next: Merged Signals, Prev: Longjmp in Handler, Up: Defining Handlers
58401 -Signals Arriving While a Handler Runs
58402 --------------------------------------
58404 - What happens if another signal arrives while your signal handler
58405 -function is running?
58407 - When the handler for a particular signal is invoked, that signal is
58408 -automatically blocked until the handler returns. That means that if two
58409 -signals of the same kind arrive close together, the second one will be
58410 -held until the first has been handled. (The handler can explicitly
58411 -unblock the signal using `sigprocmask', if you want to allow more
58412 -signals of this type to arrive; see *Note Process Signal Mask::.)
58414 - However, your handler can still be interrupted by delivery of another
58415 -kind of signal. To avoid this, you can use the `sa_mask' member of the
58416 -action structure passed to `sigaction' to explicitly specify which
58417 -signals should be blocked while the signal handler runs. These signals
58418 -are in addition to the signal for which the handler was invoked, and
58419 -any other signals that are normally blocked by the process. *Note
58420 -Blocking for Handler::.
58422 - When the handler returns, the set of blocked signals is restored to
58423 -the value it had before the handler ran. So using `sigprocmask' inside
58424 -the handler only affects what signals can arrive during the execution of
58425 -the handler itself, not what signals can arrive once the handler
58426 -returns.
58428 - *Portability Note:* Always use `sigaction' to establish a handler
58429 -for a signal that you expect to receive asynchronously, if you want
58430 -your program to work properly on System V Unix. On this system, the
58431 -handling of a signal whose handler was established with `signal'
58432 -automatically sets the signal's action back to `SIG_DFL', and the
58433 -handler must re-establish itself each time it runs. This practice,
58434 -while inconvenient, does work when signals cannot arrive in succession.
58435 -However, if another signal can arrive right away, it may arrive before
58436 -the handler can re-establish itself. Then the second signal would
58437 -receive the default handling, which could terminate the process.
58439 -\x1f
58440 -File: libc.info, Node: Merged Signals, Next: Nonreentrancy, Prev: Signals in Handler, Up: Defining Handlers
58442 -Signals Close Together Merge into One
58443 --------------------------------------
58445 - If multiple signals of the same type are delivered to your process
58446 -before your signal handler has a chance to be invoked at all, the
58447 -handler may only be invoked once, as if only a single signal had
58448 -arrived. In effect, the signals merge into one. This situation can
58449 -arise when the signal is blocked, or in a multiprocessing environment
58450 -where the system is busy running some other processes while the signals
58451 -are delivered. This means, for example, that you cannot reliably use a
58452 -signal handler to count signals. The only distinction you can reliably
58453 -make is whether at least one signal has arrived since a given time in
58454 -the past.
58456 - Here is an example of a handler for `SIGCHLD' that compensates for
58457 -the fact that the number of signals received may not equal the number of
58458 -child processes that generate them. It assumes that the program keeps
58459 -track of all the child processes with a chain of structures as follows:
58461 - struct process
58463 - struct process *next;
58464 - /* The process ID of this child. */
58465 - int pid;
58466 - /* The descriptor of the pipe or pseudo terminal
58467 - on which output comes from this child. */
58468 - int input_descriptor;
58469 - /* Nonzero if this process has stopped or terminated. */
58470 - sig_atomic_t have_status;
58471 - /* The status of this child; 0 if running,
58472 - otherwise a status value from `waitpid'. */
58473 - int status;
58474 - };
58476 - struct process *process_list;
58478 - This example also uses a flag to indicate whether signals have
58479 -arrived since some time in the past--whenever the program last cleared
58480 -it to zero.
58482 - /* Nonzero means some child's status has changed
58483 - so look at `process_list' for the details. */
58484 - int process_status_change;
58486 - Here is the handler itself:
58488 - void
58489 - sigchld_handler (int signo)
58491 - int old_errno = errno;
58493 - while (1) {
58494 - register int pid;
58495 - int w;
58496 - struct process *p;
58498 - /* Keep asking for a status until we get a definitive result. */
58499 - do
58501 - errno = 0;
58502 - pid = waitpid (WAIT_ANY, &w, WNOHANG | WUNTRACED);
58504 - while (pid <= 0 && errno == EINTR);
58506 - if (pid <= 0) {
58507 - /* A real failure means there are no more
58508 - stopped or terminated child processes, so return. */
58509 - errno = old_errno;
58510 - return;
58513 - /* Find the process that signaled us, and record its status. */
58515 - for (p = process_list; p; p = p->next)
58516 - if (p->pid == pid) {
58517 - p->status = w;
58518 - /* Indicate that the `status' field
58519 - has data to look at. We do this only after storing it. */
58520 - p->have_status = 1;
58522 - /* If process has terminated, stop waiting for its output. */
58523 - if (WIFSIGNALED (w) || WIFEXITED (w))
58524 - if (p->input_descriptor)
58525 - FD_CLR (p->input_descriptor, &input_wait_mask);
58527 - /* The program should check this flag from time to time
58528 - to see if there is any news in `process_list'. */
58529 - ++process_status_change;
58532 - /* Loop around to handle all the processes
58533 - that have something to tell us. */
58537 - Here is the proper way to check the flag `process_status_change':
58539 - if (process_status_change) {
58540 - struct process *p;
58541 - process_status_change = 0;
58542 - for (p = process_list; p; p = p->next)
58543 - if (p->have_status) {
58544 - ... Examine `p->status' ...
58548 -It is vital to clear the flag before examining the list; otherwise, if a
58549 -signal were delivered just before the clearing of the flag, and after
58550 -the appropriate element of the process list had been checked, the status
58551 -change would go unnoticed until the next signal arrived to set the flag
58552 -again. You could, of course, avoid this problem by blocking the signal
58553 -while scanning the list, but it is much more elegant to guarantee
58554 -correctness by doing things in the right order.
58556 - The loop which checks process status avoids examining `p->status'
58557 -until it sees that status has been validly stored. This is to make sure
58558 -that the status cannot change in the middle of accessing it. Once
58559 -`p->have_status' is set, it means that the child process is stopped or
58560 -terminated, and in either case, it cannot stop or terminate again until
58561 -the program has taken notice. *Note Atomic Usage::, for more
58562 -information about coping with interruptions during accesses of a
58563 -variable.
58565 - Here is another way you can test whether the handler has run since
58566 -the last time you checked. This technique uses a counter which is never
58567 -changed outside the handler. Instead of clearing the count, the program
58568 -remembers the previous value and sees whether it has changed since the
58569 -previous check. The advantage of this method is that different parts of
58570 -the program can check independently, each part checking whether there
58571 -has been a signal since that part last checked.
58573 - sig_atomic_t process_status_change;
58575 - sig_atomic_t last_process_status_change;
58577 - ...
58579 - sig_atomic_t prev = last_process_status_change;
58580 - last_process_status_change = process_status_change;
58581 - if (last_process_status_change != prev) {
58582 - struct process *p;
58583 - for (p = process_list; p; p = p->next)
58584 - if (p->have_status) {
58585 - ... Examine `p->status' ...
58590 -\x1f
58591 -File: libc.info, Node: Nonreentrancy, Next: Atomic Data Access, Prev: Merged Signals, Up: Defining Handlers
58593 -Signal Handling and Nonreentrant Functions
58594 -------------------------------------------
58596 - Handler functions usually don't do very much. The best practice is
58597 -to write a handler that does nothing but set an external variable that
58598 -the program checks regularly, and leave all serious work to the program.
58599 -This is best because the handler can be called asynchronously, at
58600 -unpredictable times--perhaps in the middle of a primitive function, or
58601 -even between the beginning and the end of a C operator that requires
58602 -multiple instructions. The data structures being manipulated might
58603 -therefore be in an inconsistent state when the handler function is
58604 -invoked. Even copying one `int' variable into another can take two
58605 -instructions on most machines.
58607 - This means you have to be very careful about what you do in a signal
58608 -handler.
58610 - * If your handler needs to access any global variables from your
58611 - program, declare those variables `volatile'. This tells the
58612 - compiler that the value of the variable might change
58613 - asynchronously, and inhibits certain optimizations that would be
58614 - invalidated by such modifications.
58616 - * If you call a function in the handler, make sure it is "reentrant"
58617 - with respect to signals, or else make sure that the signal cannot
58618 - interrupt a call to a related function.
58620 - A function can be non-reentrant if it uses memory that is not on the
58621 -stack.
58623 - * If a function uses a static variable or a global variable, or a
58624 - dynamically-allocated object that it finds for itself, then it is
58625 - non-reentrant and any two calls to the function can interfere.
58627 - For example, suppose that the signal handler uses `gethostbyname'.
58628 - This function returns its value in a static object, reusing the
58629 - same object each time. If the signal happens to arrive during a
58630 - call to `gethostbyname', or even after one (while the program is
58631 - still using the value), it will clobber the value that the program
58632 - asked for.
58634 - However, if the program does not use `gethostbyname' or any other
58635 - function that returns information in the same object, or if it
58636 - always blocks signals around each use, then you are safe.
58638 - There are a large number of library functions that return values
58639 - in a fixed object, always reusing the same object in this fashion,
58640 - and all of them cause the same problem. Function descriptions in
58641 - this manual always mention this behavior.
58643 - * If a function uses and modifies an object that you supply, then it
58644 - is potentially non-reentrant; two calls can interfere if they use
58645 - the same object.
58647 - This case arises when you do I/O using streams. Suppose that the
58648 - signal handler prints a message with `fprintf'. Suppose that the
58649 - program was in the middle of an `fprintf' call using the same
58650 - stream when the signal was delivered. Both the signal handler's
58651 - message and the program's data could be corrupted, because both
58652 - calls operate on the same data structure--the stream itself.
58654 - However, if you know that the stream that the handler uses cannot
58655 - possibly be used by the program at a time when signals can arrive,
58656 - then you are safe. It is no problem if the program uses some
58657 - other stream.
58659 - * On most systems, `malloc' and `free' are not reentrant, because
58660 - they use a static data structure which records what memory blocks
58661 - are free. As a result, no library functions that allocate or free
58662 - memory are reentrant. This includes functions that allocate space
58663 - to store a result.
58665 - The best way to avoid the need to allocate memory in a handler is
58666 - to allocate in advance space for signal handlers to use.
58668 - The best way to avoid freeing memory in a handler is to flag or
58669 - record the objects to be freed, and have the program check from
58670 - time to time whether anything is waiting to be freed. But this
58671 - must be done with care, because placing an object on a chain is
58672 - not atomic, and if it is interrupted by another signal handler
58673 - that does the same thing, you could "lose" one of the objects.
58675 - * Any function that modifies `errno' is non-reentrant, but you can
58676 - correct for this: in the handler, save the original value of
58677 - `errno' and restore it before returning normally. This prevents
58678 - errors that occur within the signal handler from being confused
58679 - with errors from system calls at the point the program is
58680 - interrupted to run the handler.
58682 - This technique is generally applicable; if you want to call in a
58683 - handler a function that modifies a particular object in memory,
58684 - you can make this safe by saving and restoring that object.
58686 - * Merely reading from a memory object is safe provided that you can
58687 - deal with any of the values that might appear in the object at a
58688 - time when the signal can be delivered. Keep in mind that
58689 - assignment to some data types requires more than one instruction,
58690 - which means that the handler could run "in the middle of" an
58691 - assignment to the variable if its type is not atomic. *Note
58692 - Atomic Data Access::.
58694 - * Merely writing into a memory object is safe as long as a sudden
58695 - change in the value, at any time when the handler might run, will
58696 - not disturb anything.
58698 -\x1f
58699 -File: libc.info, Node: Atomic Data Access, Prev: Nonreentrancy, Up: Defining Handlers
58701 -Atomic Data Access and Signal Handling
58702 ---------------------------------------
58704 - Whether the data in your application concerns atoms, or mere text,
58705 -you have to be careful about the fact that access to a single datum is
58706 -not necessarily "atomic". This means that it can take more than one
58707 -instruction to read or write a single object. In such cases, a signal
58708 -handler might be invoked in the middle of reading or writing the object.
58710 - There are three ways you can cope with this problem. You can use
58711 -data types that are always accessed atomically; you can carefully
58712 -arrange that nothing untoward happens if an access is interrupted, or
58713 -you can block all signals around any access that had better not be
58714 -interrupted (*note Blocking Signals::).
58716 -* Menu:
58718 -* Non-atomic Example:: A program illustrating interrupted access.
58719 -* Types: Atomic Types. Data types that guarantee no interruption.
58720 -* Usage: Atomic Usage. Proving that interruption is harmless.
58722 -\x1f
58723 -File: libc.info, Node: Non-atomic Example, Next: Atomic Types, Up: Atomic Data Access
58725 -Problems with Non-Atomic Access
58726 -...............................
58728 - Here is an example which shows what can happen if a signal handler
58729 -runs in the middle of modifying a variable. (Interrupting the reading
58730 -of a variable can also lead to paradoxical results, but here we only
58731 -show writing.)
58733 - #include <signal.h>
58734 - #include <stdio.h>
58736 - struct two_words { int a, b; } memory;
58738 - void
58739 - handler(int signum)
58741 - printf ("%d,%d\n", memory.a, memory.b);
58742 - alarm (1);
58745 - int
58746 - main (void)
58748 - static struct two_words zeros = { 0, 0 }, ones = { 1, 1 };
58749 - signal (SIGALRM, handler);
58750 - memory = zeros;
58751 - alarm (1);
58752 - while (1)
58754 - memory = zeros;
58755 - memory = ones;
58759 - This program fills `memory' with zeros, ones, zeros, ones,
58760 -alternating forever; meanwhile, once per second, the alarm signal
58761 -handler prints the current contents. (Calling `printf' in the handler
58762 -is safe in this program because it is certainly not being called outside
58763 -the handler when the signal happens.)
58765 - Clearly, this program can print a pair of zeros or a pair of ones.
58766 -But that's not all it can do! On most machines, it takes several
58767 -instructions to store a new value in `memory', and the value is stored
58768 -one word at a time. If the signal is delivered in between these
58769 -instructions, the handler might find that `memory.a' is zero and
58770 -`memory.b' is one (or vice versa).
58772 - On some machines it may be possible to store a new value in `memory'
58773 -with just one instruction that cannot be interrupted. On these
58774 -machines, the handler will always print two zeros or two ones.
58776 -\x1f
58777 -File: libc.info, Node: Atomic Types, Next: Atomic Usage, Prev: Non-atomic Example, Up: Atomic Data Access
58779 -Atomic Types
58780 -............
58782 - To avoid uncertainty about interrupting access to a variable, you can
58783 -use a particular data type for which access is always atomic:
58784 -`sig_atomic_t'. Reading and writing this data type is guaranteed to
58785 -happen in a single instruction, so there's no way for a handler to run
58786 -"in the middle" of an access.
58788 - The type `sig_atomic_t' is always an integer data type, but which
58789 -one it is, and how many bits it contains, may vary from machine to
58790 -machine.
58792 - - Data Type: sig_atomic_t
58793 - This is an integer data type. Objects of this type are always
58794 - accessed atomically.
58796 - In practice, you can assume that `int' and other integer types no
58797 -longer than `int' are atomic. You can also assume that pointer types
58798 -are atomic; that is very convenient. Both of these assumptions are
58799 -true on all of the machines that the GNU C library supports and on all
58800 -POSIX systems we know of.
58802 -\x1f
58803 -File: libc.info, Node: Atomic Usage, Prev: Atomic Types, Up: Atomic Data Access
58805 -Atomic Usage Patterns
58806 -.....................
58808 - Certain patterns of access avoid any problem even if an access is
58809 -interrupted. For example, a flag which is set by the handler, and
58810 -tested and cleared by the main program from time to time, is always safe
58811 -even if access actually requires two instructions. To show that this is
58812 -so, we must consider each access that could be interrupted, and show
58813 -that there is no problem if it is interrupted.
58815 - An interrupt in the middle of testing the flag is safe because
58816 -either it's recognized to be nonzero, in which case the precise value
58817 -doesn't matter, or it will be seen to be nonzero the next time it's
58818 -tested.
58820 - An interrupt in the middle of clearing the flag is no problem because
58821 -either the value ends up zero, which is what happens if a signal comes
58822 -in just before the flag is cleared, or the value ends up nonzero, and
58823 -subsequent events occur as if the signal had come in just after the flag
58824 -was cleared. As long as the code handles both of these cases properly,
58825 -it can also handle a signal in the middle of clearing the flag. (This
58826 -is an example of the sort of reasoning you need to do to figure out
58827 -whether non-atomic usage is safe.)
58829 - Sometimes you can insure uninterrupted access to one object by
58830 -protecting its use with another object, perhaps one whose type
58831 -guarantees atomicity. *Note Merged Signals::, for an example.
58833 -\x1f
58834 -File: libc.info, Node: Interrupted Primitives, Next: Generating Signals, Prev: Defining Handlers, Up: Signal Handling
58836 -Primitives Interrupted by Signals
58837 -=================================
58839 - A signal can arrive and be handled while an I/O primitive such as
58840 -`open' or `read' is waiting for an I/O device. If the signal handler
58841 -returns, the system faces the question: what should happen next?
58843 - POSIX specifies one approach: make the primitive fail right away.
58844 -The error code for this kind of failure is `EINTR'. This is flexible,
58845 -but usually inconvenient. Typically, POSIX applications that use signal
58846 -handlers must check for `EINTR' after each library function that can
58847 -return it, in order to try the call again. Often programmers forget to
58848 -check, which is a common source of error.
58850 - The GNU library provides a convenient way to retry a call after a
58851 -temporary failure, with the macro `TEMP_FAILURE_RETRY':
58853 - - Macro: TEMP_FAILURE_RETRY (EXPRESSION)
58854 - This macro evaluates EXPRESSION once. If it fails and reports
58855 - error code `EINTR', `TEMP_FAILURE_RETRY' evaluates it again, and
58856 - over and over until the result is not a temporary failure.
58858 - The value returned by `TEMP_FAILURE_RETRY' is whatever value
58859 - EXPRESSION produced.
58861 - BSD avoids `EINTR' entirely and provides a more convenient approach:
58862 -to restart the interrupted primitive, instead of making it fail. If
58863 -you choose this approach, you need not be concerned with `EINTR'.
58865 - You can choose either approach with the GNU library. If you use
58866 -`sigaction' to establish a signal handler, you can specify how that
58867 -handler should behave. If you specify the `SA_RESTART' flag, return
58868 -from that handler will resume a primitive; otherwise, return from that
58869 -handler will cause `EINTR'. *Note Flags for Sigaction::.
58871 - Another way to specify the choice is with the `siginterrupt'
58872 -function. *Note BSD Handler::.
58874 - When you don't specify with `sigaction' or `siginterrupt' what a
58875 -particular handler should do, it uses a default choice. The default
58876 -choice in the GNU library depends on the feature test macros you have
58877 -defined. If you define `_BSD_SOURCE' or `_GNU_SOURCE' before calling
58878 -`signal', the default is to resume primitives; otherwise, the default
58879 -is to make them fail with `EINTR'. (The library contains alternate
58880 -versions of the `signal' function, and the feature test macros
58881 -determine which one you really call.) *Note Feature Test Macros::.
58883 - The description of each primitive affected by this issue lists
58884 -`EINTR' among the error codes it can return.
58886 - There is one situation where resumption never happens no matter which
58887 -choice you make: when a data-transfer function such as `read' or
58888 -`write' is interrupted by a signal after transferring part of the data.
58889 -In this case, the function returns the number of bytes already
58890 -transferred, indicating partial success.
58892 - This might at first appear to cause unreliable behavior on
58893 -record-oriented devices (including datagram sockets; *note Datagrams::),
58894 -where splitting one `read' or `write' into two would read or write two
58895 -records. Actually, there is no problem, because interruption after a
58896 -partial transfer cannot happen on such devices; they always transfer an
58897 -entire record in one burst, with no waiting once data transfer has
58898 -started.
58900 -\x1f
58901 -File: libc.info, Node: Generating Signals, Next: Blocking Signals, Prev: Interrupted Primitives, Up: Signal Handling
58903 -Generating Signals
58904 -==================
58906 - Besides signals that are generated as a result of a hardware trap or
58907 -interrupt, your program can explicitly send signals to itself or to
58908 -another process.
58910 -* Menu:
58912 -* Signaling Yourself:: A process can send a signal to itself.
58913 -* Signaling Another Process:: Send a signal to another process.
58914 -* Permission for kill:: Permission for using `kill'.
58915 -* Kill Example:: Using `kill' for Communication.
58917 -\x1f
58918 -File: libc.info, Node: Signaling Yourself, Next: Signaling Another Process, Up: Generating Signals
58920 -Signaling Yourself
58921 -------------------
58923 - A process can send itself a signal with the `raise' function. This
58924 -function is declared in `signal.h'.
58926 - - Function: int raise (int SIGNUM)
58927 - The `raise' function sends the signal SIGNUM to the calling
58928 - process. It returns zero if successful and a nonzero value if it
58929 - fails. About the only reason for failure would be if the value of
58930 - SIGNUM is invalid.
58932 - - Function: int gsignal (int SIGNUM)
58933 - The `gsignal' function does the same thing as `raise'; it is
58934 - provided only for compatibility with SVID.
58936 - One convenient use for `raise' is to reproduce the default behavior
58937 -of a signal that you have trapped. For instance, suppose a user of your
58938 -program types the SUSP character (usually `C-z'; *note Special
58939 -Characters::) to send it an interactive stop signal (`SIGTSTP'), and
58940 -you want to clean up some internal data buffers before stopping. You
58941 -might set this up like this:
58943 - #include <signal.h>
58945 - /* When a stop signal arrives, set the action back to the default
58946 - and then resend the signal after doing cleanup actions. */
58948 - void
58949 - tstp_handler (int sig)
58951 - signal (SIGTSTP, SIG_DFL);
58952 - /* Do cleanup actions here. */
58953 - ...
58954 - raise (SIGTSTP);
58957 - /* When the process is continued again, restore the signal handler. */
58959 - void
58960 - cont_handler (int sig)
58962 - signal (SIGCONT, cont_handler);
58963 - signal (SIGTSTP, tstp_handler);
58966 - /* Enable both handlers during program initialization. */
58968 - int
58969 - main (void)
58971 - signal (SIGCONT, cont_handler);
58972 - signal (SIGTSTP, tstp_handler);
58973 - ...
58976 - *Portability note:* `raise' was invented by the ISO C committee.
58977 -Older systems may not support it, so using `kill' may be more portable.
58978 -*Note Signaling Another Process::.
58980 -\x1f
58981 -File: libc.info, Node: Signaling Another Process, Next: Permission for kill, Prev: Signaling Yourself, Up: Generating Signals
58983 -Signaling Another Process
58984 --------------------------
58986 - The `kill' function can be used to send a signal to another process.
58987 -In spite of its name, it can be used for a lot of things other than
58988 -causing a process to terminate. Some examples of situations where you
58989 -might want to send signals between processes are:
58991 - * A parent process starts a child to perform a task--perhaps having
58992 - the child running an infinite loop--and then terminates the child
58993 - when the task is no longer needed.
58995 - * A process executes as part of a group, and needs to terminate or
58996 - notify the other processes in the group when an error or other
58997 - event occurs.
58999 - * Two processes need to synchronize while working together.
59001 - This section assumes that you know a little bit about how processes
59002 -work. For more information on this subject, see *Note Processes::.
59004 - The `kill' function is declared in `signal.h'.
59006 - - Function: int kill (pid_t PID, int SIGNUM)
59007 - The `kill' function sends the signal SIGNUM to the process or
59008 - process group specified by PID. Besides the signals listed in
59009 - *Note Standard Signals::, SIGNUM can also have a value of zero to
59010 - check the validity of the PID.
59012 - The PID specifies the process or process group to receive the
59013 - signal:
59015 - `PID > 0'
59016 - The process whose identifier is PID.
59018 - `PID == 0'
59019 - All processes in the same process group as the sender.
59021 - `PID < -1'
59022 - The process group whose identifier is -PID.
59024 - `PID == -1'
59025 - If the process is privileged, send the signal to all
59026 - processes except for some special system processes.
59027 - Otherwise, send the signal to all processes with the same
59028 - effective user ID.
59030 - A process can send a signal to itself with a call like
59031 - `kill (getpid(), SIGNUM)'. If `kill' is used by a process to send
59032 - a signal to itself, and the signal is not blocked, then `kill'
59033 - delivers at least one signal (which might be some other pending
59034 - unblocked signal instead of the signal SIGNUM) to that process
59035 - before it returns.
59037 - The return value from `kill' is zero if the signal can be sent
59038 - successfully. Otherwise, no signal is sent, and a value of `-1' is
59039 - returned. If PID specifies sending a signal to several processes,
59040 - `kill' succeeds if it can send the signal to at least one of them.
59041 - There's no way you can tell which of the processes got the signal
59042 - or whether all of them did.
59044 - The following `errno' error conditions are defined for this
59045 - function:
59047 - `EINVAL'
59048 - The SIGNUM argument is an invalid or unsupported number.
59050 - `EPERM'
59051 - You do not have the privilege to send a signal to the process
59052 - or any of the processes in the process group named by PID.
59054 - `ESCRH'
59055 - The PID argument does not refer to an existing process or
59056 - group.
59058 - - Function: int killpg (int PGID, int SIGNUM)
59059 - This is similar to `kill', but sends signal SIGNUM to the process
59060 - group PGID. This function is provided for compatibility with BSD;
59061 - using `kill' to do this is more portable.
59063 - As a simple example of `kill', the call `kill (getpid (), SIG)' has
59064 -the same effect as `raise (SIG)'.
59066 -\x1f
59067 -File: libc.info, Node: Permission for kill, Next: Kill Example, Prev: Signaling Another Process, Up: Generating Signals
59069 -Permission for using `kill'
59070 ----------------------------
59072 - There are restrictions that prevent you from using `kill' to send
59073 -signals to any random process. These are intended to prevent antisocial
59074 -behavior such as arbitrarily killing off processes belonging to another
59075 -user. In typical use, `kill' is used to pass signals between parent,
59076 -child, and sibling processes, and in these situations you normally do
59077 -have permission to send signals. The only common exception is when you
59078 -run a setuid program in a child process; if the program changes its
59079 -real UID as well as its effective UID, you may not have permission to
59080 -send a signal. The `su' program does this.
59082 - Whether a process has permission to send a signal to another process
59083 -is determined by the user IDs of the two processes. This concept is
59084 -discussed in detail in *Note Process Persona::.
59086 - Generally, for a process to be able to send a signal to another
59087 -process, either the sending process must belong to a privileged user
59088 -(like `root'), or the real or effective user ID of the sending process
59089 -must match the real or effective user ID of the receiving process. If
59090 -the receiving process has changed its effective user ID from the
59091 -set-user-ID mode bit on its process image file, then the owner of the
59092 -process image file is used in place of its current effective user ID.
59093 -In some implementations, a parent process might be able to send signals
59094 -to a child process even if the user ID's don't match, and other
59095 -implementations might enforce other restrictions.
59097 - The `SIGCONT' signal is a special case. It can be sent if the
59098 -sender is part of the same session as the receiver, regardless of user
59099 -IDs.
59101 -\x1f
59102 -File: libc.info, Node: Kill Example, Prev: Permission for kill, Up: Generating Signals
59104 -Using `kill' for Communication
59105 -------------------------------
59107 - Here is a longer example showing how signals can be used for
59108 -interprocess communication. This is what the `SIGUSR1' and `SIGUSR2'
59109 -signals are provided for. Since these signals are fatal by default,
59110 -the process that is supposed to receive them must trap them through
59111 -`signal' or `sigaction'.
59113 - In this example, a parent process forks a child process and then
59114 -waits for the child to complete its initialization. The child process
59115 -tells the parent when it is ready by sending it a `SIGUSR1' signal,
59116 -using the `kill' function.
59118 - #include <signal.h>
59119 - #include <stdio.h>
59120 - #include <sys/types.h>
59121 - #include <unistd.h>
59123 - /* When a `SIGUSR1' signal arrives, set this variable. */
59124 - volatile sig_atomic_t usr_interrupt = 0;
59126 - void
59127 - synch_signal (int sig)
59129 - usr_interrupt = 1;
59132 - /* The child process executes this function. */
59133 - void
59134 - child_function (void)
59136 - /* Perform initialization. */
59137 - printf ("I'm here!!! My pid is %d.\n", (int) getpid ());
59139 - /* Let parent know you're done. */
59140 - kill (getppid (), SIGUSR1);
59142 - /* Continue with execution. */
59143 - puts ("Bye, now....");
59144 - exit (0);
59147 - int
59148 - main (void)
59150 - struct sigaction usr_action;
59151 - sigset_t block_mask;
59152 - pid_t child_id;
59154 - /* Establish the signal handler. */
59155 - sigfillset (&block_mask);
59156 - usr_action.sa_handler = synch_signal;
59157 - usr_action.sa_mask = block_mask;
59158 - usr_action.sa_flags = 0;
59159 - sigaction (SIGUSR1, &usr_action, NULL);
59161 - /* Create the child process. */
59162 - child_id = fork ();
59163 - if (child_id == 0)
59164 - child_function (); /* Does not return. */
59166 - /* Busy wait for the child to send a signal. */
59167 - while (!usr_interrupt)
59170 - /* Now continue execution. */
59171 - puts ("That's all, folks!");
59173 - return 0;
59176 - This example uses a busy wait, which is bad, because it wastes CPU
59177 -cycles that other programs could otherwise use. It is better to ask the
59178 -system to wait until the signal arrives. See the example in *Note
59179 -Waiting for a Signal::.
59181 -\x1f
59182 -File: libc.info, Node: Blocking Signals, Next: Waiting for a Signal, Prev: Generating Signals, Up: Signal Handling
59184 -Blocking Signals
59185 -================
59187 - Blocking a signal means telling the operating system to hold it and
59188 -deliver it later. Generally, a program does not block signals
59189 -indefinitely--it might as well ignore them by setting their actions to
59190 -`SIG_IGN'. But it is useful to block signals briefly, to prevent them
59191 -from interrupting sensitive operations. For instance:
59193 - * You can use the `sigprocmask' function to block signals while you
59194 - modify global variables that are also modified by the handlers for
59195 - these signals.
59197 - * You can set `sa_mask' in your `sigaction' call to block certain
59198 - signals while a particular signal handler runs. This way, the
59199 - signal handler can run without being interrupted itself by signals.
59201 -* Menu:
59203 -* Why Block:: The purpose of blocking signals.
59204 -* Signal Sets:: How to specify which signals to
59205 - block.
59206 -* Process Signal Mask:: Blocking delivery of signals to your
59207 - process during normal execution.
59208 -* Testing for Delivery:: Blocking to Test for Delivery of
59209 - a Signal.
59210 -* Blocking for Handler:: Blocking additional signals while a
59211 - handler is being run.
59212 -* Checking for Pending Signals:: Checking for Pending Signals
59213 -* Remembering a Signal:: How you can get almost the same
59214 - effect as blocking a signal, by
59215 - handling it and setting a flag
59216 - to be tested later.
59218 -\x1f
59219 -File: libc.info, Node: Why Block, Next: Signal Sets, Up: Blocking Signals
59221 -Why Blocking Signals is Useful
59222 -------------------------------
59224 - Temporary blocking of signals with `sigprocmask' gives you a way to
59225 -prevent interrupts during critical parts of your code. If signals
59226 -arrive in that part of the program, they are delivered later, after you
59227 -unblock them.
59229 - One example where this is useful is for sharing data between a signal
59230 -handler and the rest of the program. If the type of the data is not
59231 -`sig_atomic_t' (*note Atomic Data Access::), then the signal handler
59232 -could run when the rest of the program has only half finished reading
59233 -or writing the data. This would lead to confusing consequences.
59235 - To make the program reliable, you can prevent the signal handler from
59236 -running while the rest of the program is examining or modifying that
59237 -data--by blocking the appropriate signal around the parts of the
59238 -program that touch the data.
59240 - Blocking signals is also necessary when you want to perform a certain
59241 -action only if a signal has not arrived. Suppose that the handler for
59242 -the signal sets a flag of type `sig_atomic_t'; you would like to test
59243 -the flag and perform the action if the flag is not set. This is
59244 -unreliable. Suppose the signal is delivered immediately after you test
59245 -the flag, but before the consequent action: then the program will
59246 -perform the action even though the signal has arrived.
59248 - The only way to test reliably for whether a signal has yet arrived
59249 -is to test while the signal is blocked.
59251 -\x1f
59252 -File: libc.info, Node: Signal Sets, Next: Process Signal Mask, Prev: Why Block, Up: Blocking Signals
59254 -Signal Sets
59255 ------------
59257 - All of the signal blocking functions use a data structure called a
59258 -"signal set" to specify what signals are affected. Thus, every
59259 -activity involves two stages: creating the signal set, and then passing
59260 -it as an argument to a library function.
59262 - These facilities are declared in the header file `signal.h'.
59264 - - Data Type: sigset_t
59265 - The `sigset_t' data type is used to represent a signal set.
59266 - Internally, it may be implemented as either an integer or structure
59267 - type.
59269 - For portability, use only the functions described in this section
59270 - to initialize, change, and retrieve information from `sigset_t'
59271 - objects--don't try to manipulate them directly.
59273 - There are two ways to initialize a signal set. You can initially
59274 -specify it to be empty with `sigemptyset' and then add specified
59275 -signals individually. Or you can specify it to be full with
59276 -`sigfillset' and then delete specified signals individually.
59278 - You must always initialize the signal set with one of these two
59279 -functions before using it in any other way. Don't try to set all the
59280 -signals explicitly because the `sigset_t' object might include some
59281 -other information (like a version field) that needs to be initialized as
59282 -well. (In addition, it's not wise to put into your program an
59283 -assumption that the system has no signals aside from the ones you know
59284 -about.)
59286 - - Function: int sigemptyset (sigset_t *SET)
59287 - This function initializes the signal set SET to exclude all of the
59288 - defined signals. It always returns `0'.
59290 - - Function: int sigfillset (sigset_t *SET)
59291 - This function initializes the signal set SET to include all of the
59292 - defined signals. Again, the return value is `0'.
59294 - - Function: int sigaddset (sigset_t *SET, int SIGNUM)
59295 - This function adds the signal SIGNUM to the signal set SET. All
59296 - `sigaddset' does is modify SET; it does not block or unblock any
59297 - signals.
59299 - The return value is `0' on success and `-1' on failure. The
59300 - following `errno' error condition is defined for this function:
59302 - `EINVAL'
59303 - The SIGNUM argument doesn't specify a valid signal.
59305 - - Function: int sigdelset (sigset_t *SET, int SIGNUM)
59306 - This function removes the signal SIGNUM from the signal set SET.
59307 - All `sigdelset' does is modify SET; it does not block or unblock
59308 - any signals. The return value and error conditions are the same
59309 - as for `sigaddset'.
59311 - Finally, there is a function to test what signals are in a signal
59312 -set:
59314 - - Function: int sigismember (const sigset_t *SET, int SIGNUM)
59315 - The `sigismember' function tests whether the signal SIGNUM is a
59316 - member of the signal set SET. It returns `1' if the signal is in
59317 - the set, `0' if not, and `-1' if there is an error.
59319 - The following `errno' error condition is defined for this function:
59321 - `EINVAL'
59322 - The SIGNUM argument doesn't specify a valid signal.
59324 -\x1f
59325 -File: libc.info, Node: Process Signal Mask, Next: Testing for Delivery, Prev: Signal Sets, Up: Blocking Signals
59327 -Process Signal Mask
59328 --------------------
59330 - The collection of signals that are currently blocked is called the
59331 -"signal mask". Each process has its own signal mask. When you create
59332 -a new process (*note Creating a Process::), it inherits its parent's
59333 -mask. You can block or unblock signals with total flexibility by
59334 -modifying the signal mask.
59336 - The prototype for the `sigprocmask' function is in `signal.h'.
59338 - Note that you must not use `sigprocmask' in multi-threaded processes,
59339 -because each thread has its own signal mask and there is no single
59340 -process signal mask. According to POSIX, the behavior of `sigprocmask'
59341 -in a multi-threaded process is "unspeficied". Instead, use
59342 -`pthread_sigmask'. *Note Threads and Signal Handling::.
59344 - - Function: int sigprocmask (int HOW, const sigset_t *restrict SET,
59345 - sigset_t *restrict OLDSET)
59346 - The `sigprocmask' function is used to examine or change the calling
59347 - process's signal mask. The HOW argument determines how the signal
59348 - mask is changed, and must be one of the following values:
59350 - `SIG_BLOCK'
59351 - Block the signals in `set'--add them to the existing mask. In
59352 - other words, the new mask is the union of the existing mask
59353 - and SET.
59355 - `SIG_UNBLOCK'
59356 - Unblock the signals in SET--remove them from the existing
59357 - mask.
59359 - `SIG_SETMASK'
59360 - Use SET for the mask; ignore the previous value of the mask.
59362 - The last argument, OLDSET, is used to return information about the
59363 - old process signal mask. If you just want to change the mask
59364 - without looking at it, pass a null pointer as the OLDSET argument.
59365 - Similarly, if you want to know what's in the mask without changing
59366 - it, pass a null pointer for SET (in this case the HOW argument is
59367 - not significant). The OLDSET argument is often used to remember
59368 - the previous signal mask in order to restore it later. (Since the
59369 - signal mask is inherited over `fork' and `exec' calls, you can't
59370 - predict what its contents are when your program starts running.)
59372 - If invoking `sigprocmask' causes any pending signals to be
59373 - unblocked, at least one of those signals is delivered to the
59374 - process before `sigprocmask' returns. The order in which pending
59375 - signals are delivered is not specified, but you can control the
59376 - order explicitly by making multiple `sigprocmask' calls to unblock
59377 - various signals one at a time.
59379 - The `sigprocmask' function returns `0' if successful, and `-1' to
59380 - indicate an error. The following `errno' error conditions are
59381 - defined for this function:
59383 - `EINVAL'
59384 - The HOW argument is invalid.
59386 - You can't block the `SIGKILL' and `SIGSTOP' signals, but if the
59387 - signal set includes these, `sigprocmask' just ignores them instead
59388 - of returning an error status.
59390 - Remember, too, that blocking program error signals such as `SIGFPE'
59391 - leads to undesirable results for signals generated by an actual
59392 - program error (as opposed to signals sent with `raise' or `kill').
59393 - This is because your program may be too broken to be able to
59394 - continue executing to a point where the signal is unblocked again.
59395 - *Note Program Error Signals::.
59397 -\x1f
59398 -File: libc.info, Node: Testing for Delivery, Next: Blocking for Handler, Prev: Process Signal Mask, Up: Blocking Signals
59400 -Blocking to Test for Delivery of a Signal
59401 ------------------------------------------
59403 - Now for a simple example. Suppose you establish a handler for
59404 -`SIGALRM' signals that sets a flag whenever a signal arrives, and your
59405 -main program checks this flag from time to time and then resets it.
59406 -You can prevent additional `SIGALRM' signals from arriving in the
59407 -meantime by wrapping the critical part of the code with calls to
59408 -`sigprocmask', like this:
59410 - /* This variable is set by the SIGALRM signal handler. */
59411 - volatile sig_atomic_t flag = 0;
59413 - int
59414 - main (void)
59416 - sigset_t block_alarm;
59418 - ...
59420 - /* Initialize the signal mask. */
59421 - sigemptyset (&block_alarm);
59422 - sigaddset (&block_alarm, SIGALRM);
59424 - while (1)
59426 - /* Check if a signal has arrived; if so, reset the flag. */
59427 - sigprocmask (SIG_BLOCK, &block_alarm, NULL);
59428 - if (flag)
59430 - ACTIONS-IF-NOT-ARRIVED
59431 - flag = 0;
59433 - sigprocmask (SIG_UNBLOCK, &block_alarm, NULL);
59435 - ...
59439 -\x1f
59440 -File: libc.info, Node: Blocking for Handler, Next: Checking for Pending Signals, Prev: Testing for Delivery, Up: Blocking Signals
59442 -Blocking Signals for a Handler
59443 -------------------------------
59445 - When a signal handler is invoked, you usually want it to be able to
59446 -finish without being interrupted by another signal. From the moment the
59447 -handler starts until the moment it finishes, you must block signals that
59448 -might confuse it or corrupt its data.
59450 - When a handler function is invoked on a signal, that signal is
59451 -automatically blocked (in addition to any other signals that are already
59452 -in the process's signal mask) during the time the handler is running.
59453 -If you set up a handler for `SIGTSTP', for instance, then the arrival
59454 -of that signal forces further `SIGTSTP' signals to wait during the
59455 -execution of the handler.
59457 - However, by default, other kinds of signals are not blocked; they can
59458 -arrive during handler execution.
59460 - The reliable way to block other kinds of signals during the
59461 -execution of the handler is to use the `sa_mask' member of the
59462 -`sigaction' structure.
59464 - Here is an example:
59466 - #include <signal.h>
59467 - #include <stddef.h>
59469 - void catch_stop ();
59471 - void
59472 - install_handler (void)
59474 - struct sigaction setup_action;
59475 - sigset_t block_mask;
59477 - sigemptyset (&block_mask);
59478 - /* Block other terminal-generated signals while handler runs. */
59479 - sigaddset (&block_mask, SIGINT);
59480 - sigaddset (&block_mask, SIGQUIT);
59481 - setup_action.sa_handler = catch_stop;
59482 - setup_action.sa_mask = block_mask;
59483 - setup_action.sa_flags = 0;
59484 - sigaction (SIGTSTP, &setup_action, NULL);
59487 - This is more reliable than blocking the other signals explicitly in
59488 -the code for the handler. If you block signals explicitly in the
59489 -handler, you can't avoid at least a short interval at the beginning of
59490 -the handler where they are not yet blocked.
59492 - You cannot remove signals from the process's current mask using this
59493 -mechanism. However, you can make calls to `sigprocmask' within your
59494 -handler to block or unblock signals as you wish.
59496 - In any case, when the handler returns, the system restores the mask
59497 -that was in place before the handler was entered. If any signals that
59498 -become unblocked by this restoration are pending, the process will
59499 -receive those signals immediately, before returning to the code that was
59500 -interrupted.
59502 -\x1f
59503 -File: libc.info, Node: Checking for Pending Signals, Next: Remembering a Signal, Prev: Blocking for Handler, Up: Blocking Signals
59505 -Checking for Pending Signals
59506 -----------------------------
59508 - You can find out which signals are pending at any time by calling
59509 -`sigpending'. This function is declared in `signal.h'.
59511 - - Function: int sigpending (sigset_t *SET)
59512 - The `sigpending' function stores information about pending signals
59513 - in SET. If there is a pending signal that is blocked from
59514 - delivery, then that signal is a member of the returned set. (You
59515 - can test whether a particular signal is a member of this set using
59516 - `sigismember'; see *Note Signal Sets::.)
59518 - The return value is `0' if successful, and `-1' on failure.
59520 - Testing whether a signal is pending is not often useful. Testing
59521 -when that signal is not blocked is almost certainly bad design.
59523 - Here is an example.
59525 - #include <signal.h>
59526 - #include <stddef.h>
59528 - sigset_t base_mask, waiting_mask;
59530 - sigemptyset (&base_mask);
59531 - sigaddset (&base_mask, SIGINT);
59532 - sigaddset (&base_mask, SIGTSTP);
59534 - /* Block user interrupts while doing other processing. */
59535 - sigprocmask (SIG_SETMASK, &base_mask, NULL);
59536 - ...
59538 - /* After a while, check to see whether any signals are pending. */
59539 - sigpending (&waiting_mask);
59540 - if (sigismember (&waiting_mask, SIGINT)) {
59541 - /* User has tried to kill the process. */
59543 - else if (sigismember (&waiting_mask, SIGTSTP)) {
59544 - /* User has tried to stop the process. */
59547 - Remember that if there is a particular signal pending for your
59548 -process, additional signals of that same type that arrive in the
59549 -meantime might be discarded. For example, if a `SIGINT' signal is
59550 -pending when another `SIGINT' signal arrives, your program will
59551 -probably only see one of them when you unblock this signal.
59553 - *Portability Note:* The `sigpending' function is new in POSIX.1.
59554 -Older systems have no equivalent facility.
59556 diff -u -udbrN glibc-2.3.2/manual/libc.info-41 glibc-2.3.2-200304020432/manual/libc.info-41
59557 --- glibc-2.3.2/manual/libc.info-41 Sat Mar 1 02:39:41 2003
59558 +++ glibc-2.3.2-200304020432/manual/libc.info-41 Thu Jan 1 01:00:00 1970
59559 @@ -1,1252 +0,0 @@
59560 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
59562 -INFO-DIR-SECTION GNU libraries
59563 -START-INFO-DIR-ENTRY
59564 -* Libc: (libc). C library.
59565 -END-INFO-DIR-ENTRY
59567 - This file documents the GNU C library.
59569 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
59570 -Reference Manual', for Version 2.3.x.
59572 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
59573 -Free Software Foundation, Inc.
59575 - Permission is granted to copy, distribute and/or modify this document
59576 -under the terms of the GNU Free Documentation License, Version 1.1 or
59577 -any later version published by the Free Software Foundation; with the
59578 -Invariant Sections being "Free Software Needs Free Documentation" and
59579 -"GNU Lesser General Public License", the Front-Cover texts being (a)
59580 -(see below), and with the Back-Cover Texts being (b) (see below). A
59581 -copy of the license is included in the section entitled "GNU Free
59582 -Documentation License".
59584 - (a) The FSF's Front-Cover Text is:
59586 - A GNU Manual
59588 - (b) The FSF's Back-Cover Text is:
59590 - You have freedom to copy and modify this GNU Manual, like GNU
59591 -software. Copies published by the Free Software Foundation raise
59592 -funds for GNU development.
59594 -\x1f
59595 -File: libc.info, Node: Remembering a Signal, Prev: Checking for Pending Signals, Up: Blocking Signals
59597 -Remembering a Signal to Act On Later
59598 -------------------------------------
59600 - Instead of blocking a signal using the library facilities, you can
59601 -get almost the same results by making the handler set a flag to be
59602 -tested later, when you "unblock". Here is an example:
59604 - /* If this flag is nonzero, don't handle the signal right away. */
59605 - volatile sig_atomic_t signal_pending;
59607 - /* This is nonzero if a signal arrived and was not handled. */
59608 - volatile sig_atomic_t defer_signal;
59610 - void
59611 - handler (int signum)
59613 - if (defer_signal)
59614 - signal_pending = signum;
59615 - else
59616 - ... /* "Really" handle the signal. */
59619 - ...
59621 - void
59622 - update_mumble (int frob)
59624 - /* Prevent signals from having immediate effect. */
59625 - defer_signal++;
59626 - /* Now update `mumble', without worrying about interruption. */
59627 - mumble.a = 1;
59628 - mumble.b = hack ();
59629 - mumble.c = frob;
59630 - /* We have updated `mumble'. Handle any signal that came in. */
59631 - defer_signal--;
59632 - if (defer_signal == 0 && signal_pending != 0)
59633 - raise (signal_pending);
59636 - Note how the particular signal that arrives is stored in
59637 -`signal_pending'. That way, we can handle several types of
59638 -inconvenient signals with the same mechanism.
59640 - We increment and decrement `defer_signal' so that nested critical
59641 -sections will work properly; thus, if `update_mumble' were called with
59642 -`signal_pending' already nonzero, signals would be deferred not only
59643 -within `update_mumble', but also within the caller. This is also why
59644 -we do not check `signal_pending' if `defer_signal' is still nonzero.
59646 - The incrementing and decrementing of `defer_signal' each require more
59647 -than one instruction; it is possible for a signal to happen in the
59648 -middle. But that does not cause any problem. If the signal happens
59649 -early enough to see the value from before the increment or decrement,
59650 -that is equivalent to a signal which came before the beginning of the
59651 -increment or decrement, which is a case that works properly.
59653 - It is absolutely vital to decrement `defer_signal' before testing
59654 -`signal_pending', because this avoids a subtle bug. If we did these
59655 -things in the other order, like this,
59657 - if (defer_signal == 1 && signal_pending != 0)
59658 - raise (signal_pending);
59659 - defer_signal--;
59661 -then a signal arriving in between the `if' statement and the decrement
59662 -would be effectively "lost" for an indefinite amount of time. The
59663 -handler would merely set `defer_signal', but the program having already
59664 -tested this variable, it would not test the variable again.
59666 - Bugs like these are called "timing errors". They are especially bad
59667 -because they happen only rarely and are nearly impossible to reproduce.
59668 -You can't expect to find them with a debugger as you would find a
59669 -reproducible bug. So it is worth being especially careful to avoid
59670 -them.
59672 - (You would not be tempted to write the code in this order, given the
59673 -use of `defer_signal' as a counter which must be tested along with
59674 -`signal_pending'. After all, testing for zero is cleaner than testing
59675 -for one. But if you did not use `defer_signal' as a counter, and gave
59676 -it values of zero and one only, then either order might seem equally
59677 -simple. This is a further advantage of using a counter for
59678 -`defer_signal': it will reduce the chance you will write the code in
59679 -the wrong order and create a subtle bug.)
59681 -\x1f
59682 -File: libc.info, Node: Waiting for a Signal, Next: Signal Stack, Prev: Blocking Signals, Up: Signal Handling
59684 -Waiting for a Signal
59685 -====================
59687 - If your program is driven by external events, or uses signals for
59688 -synchronization, then when it has nothing to do it should probably wait
59689 -until a signal arrives.
59691 -* Menu:
59693 -* Using Pause:: The simple way, using `pause'.
59694 -* Pause Problems:: Why the simple way is often not very good.
59695 -* Sigsuspend:: Reliably waiting for a specific signal.
59697 -\x1f
59698 -File: libc.info, Node: Using Pause, Next: Pause Problems, Up: Waiting for a Signal
59700 -Using `pause'
59701 --------------
59703 - The simple way to wait until a signal arrives is to call `pause'.
59704 -Please read about its disadvantages, in the following section, before
59705 -you use it.
59707 - - Function: int pause ()
59708 - The `pause' function suspends program execution until a signal
59709 - arrives whose action is either to execute a handler function, or to
59710 - terminate the process.
59712 - If the signal causes a handler function to be executed, then
59713 - `pause' returns. This is considered an unsuccessful return (since
59714 - "successful" behavior would be to suspend the program forever), so
59715 - the return value is `-1'. Even if you specify that other
59716 - primitives should resume when a system handler returns (*note
59717 - Interrupted Primitives::), this has no effect on `pause'; it
59718 - always fails when a signal is handled.
59720 - The following `errno' error conditions are defined for this
59721 - function:
59723 - `EINTR'
59724 - The function was interrupted by delivery of a signal.
59726 - If the signal causes program termination, `pause' doesn't return
59727 - (obviously).
59729 - This function is a cancellation point in multithreaded programs.
59730 - This is a problem if the thread allocates some resources (like
59731 - memory, file descriptors, semaphores or whatever) at the time
59732 - `pause' is called. If the thread gets cancelled these resources
59733 - stay allocated until the program ends. To avoid this calls to
59734 - `pause' should be protected using cancellation handlers.
59736 - The `pause' function is declared in `unistd.h'.
59738 -\x1f
59739 -File: libc.info, Node: Pause Problems, Next: Sigsuspend, Prev: Using Pause, Up: Waiting for a Signal
59741 -Problems with `pause'
59742 ----------------------
59744 - The simplicity of `pause' can conceal serious timing errors that can
59745 -make a program hang mysteriously.
59747 - It is safe to use `pause' if the real work of your program is done
59748 -by the signal handlers themselves, and the "main program" does nothing
59749 -but call `pause'. Each time a signal is delivered, the handler will do
59750 -the next batch of work that is to be done, and then return, so that the
59751 -main loop of the program can call `pause' again.
59753 - You can't safely use `pause' to wait until one more signal arrives,
59754 -and then resume real work. Even if you arrange for the signal handler
59755 -to cooperate by setting a flag, you still can't use `pause' reliably.
59756 -Here is an example of this problem:
59758 - /* `usr_interrupt' is set by the signal handler. */
59759 - if (!usr_interrupt)
59760 - pause ();
59762 - /* Do work once the signal arrives. */
59763 - ...
59765 -This has a bug: the signal could arrive after the variable
59766 -`usr_interrupt' is checked, but before the call to `pause'. If no
59767 -further signals arrive, the process would never wake up again.
59769 - You can put an upper limit on the excess waiting by using `sleep' in
59770 -a loop, instead of using `pause'. (*Note Sleeping::, for more about
59771 -`sleep'.) Here is what this looks like:
59773 - /* `usr_interrupt' is set by the signal handler.
59774 - while (!usr_interrupt)
59775 - sleep (1);
59777 - /* Do work once the signal arrives. */
59778 - ...
59780 - For some purposes, that is good enough. But with a little more
59781 -complexity, you can wait reliably until a particular signal handler is
59782 -run, using `sigsuspend'. *Note Sigsuspend::.
59784 -\x1f
59785 -File: libc.info, Node: Sigsuspend, Prev: Pause Problems, Up: Waiting for a Signal
59787 -Using `sigsuspend'
59788 -------------------
59790 - The clean and reliable way to wait for a signal to arrive is to
59791 -block it and then use `sigsuspend'. By using `sigsuspend' in a loop,
59792 -you can wait for certain kinds of signals, while letting other kinds of
59793 -signals be handled by their handlers.
59795 - - Function: int sigsuspend (const sigset_t *SET)
59796 - This function replaces the process's signal mask with SET and then
59797 - suspends the process until a signal is delivered whose action is
59798 - either to terminate the process or invoke a signal handling
59799 - function. In other words, the program is effectively suspended
59800 - until one of the signals that is not a member of SET arrives.
59802 - If the process is woken up by delivery of a signal that invokes a
59803 - handler function, and the handler function returns, then
59804 - `sigsuspend' also returns.
59806 - The mask remains SET only as long as `sigsuspend' is waiting. The
59807 - function `sigsuspend' always restores the previous signal mask
59808 - when it returns.
59810 - The return value and error conditions are the same as for `pause'.
59812 - With `sigsuspend', you can replace the `pause' or `sleep' loop in
59813 -the previous section with something completely reliable:
59815 - sigset_t mask, oldmask;
59817 - ...
59819 - /* Set up the mask of signals to temporarily block. */
59820 - sigemptyset (&mask);
59821 - sigaddset (&mask, SIGUSR1);
59823 - ...
59825 - /* Wait for a signal to arrive. */
59826 - sigprocmask (SIG_BLOCK, &mask, &oldmask);
59827 - while (!usr_interrupt)
59828 - sigsuspend (&oldmask);
59829 - sigprocmask (SIG_UNBLOCK, &mask, NULL);
59831 - This last piece of code is a little tricky. The key point to
59832 -remember here is that when `sigsuspend' returns, it resets the process's
59833 -signal mask to the original value, the value from before the call to
59834 -`sigsuspend'--in this case, the `SIGUSR1' signal is once again blocked.
59835 -The second call to `sigprocmask' is necessary to explicitly unblock
59836 -this signal.
59838 - One other point: you may be wondering why the `while' loop is
59839 -necessary at all, since the program is apparently only waiting for one
59840 -`SIGUSR1' signal. The answer is that the mask passed to `sigsuspend'
59841 -permits the process to be woken up by the delivery of other kinds of
59842 -signals, as well--for example, job control signals. If the process is
59843 -woken up by a signal that doesn't set `usr_interrupt', it just suspends
59844 -itself again until the "right" kind of signal eventually arrives.
59846 - This technique takes a few more lines of preparation, but that is
59847 -needed just once for each kind of wait criterion you want to use. The
59848 -code that actually waits is just four lines.
59850 -\x1f
59851 -File: libc.info, Node: Signal Stack, Next: BSD Signal Handling, Prev: Waiting for a Signal, Up: Signal Handling
59853 -Using a Separate Signal Stack
59854 -=============================
59856 - A signal stack is a special area of memory to be used as the
59857 -execution stack during signal handlers. It should be fairly large, to
59858 -avoid any danger that it will overflow in turn; the macro `SIGSTKSZ' is
59859 -defined to a canonical size for signal stacks. You can use `malloc' to
59860 -allocate the space for the stack. Then call `sigaltstack' or
59861 -`sigstack' to tell the system to use that space for the signal stack.
59863 - You don't need to write signal handlers differently in order to use a
59864 -signal stack. Switching from one stack to the other happens
59865 -automatically. (Some non-GNU debuggers on some machines may get
59866 -confused if you examine a stack trace while a handler that uses the
59867 -signal stack is running.)
59869 - There are two interfaces for telling the system to use a separate
59870 -signal stack. `sigstack' is the older interface, which comes from 4.2
59871 -BSD. `sigaltstack' is the newer interface, and comes from 4.4 BSD.
59872 -The `sigaltstack' interface has the advantage that it does not require
59873 -your program to know which direction the stack grows, which depends on
59874 -the specific machine and operating system.
59876 - - Data Type: stack_t
59877 - This structure describes a signal stack. It contains the
59878 - following members:
59880 - `void *ss_sp'
59881 - This points to the base of the signal stack.
59883 - `size_t ss_size'
59884 - This is the size (in bytes) of the signal stack which `ss_sp'
59885 - points to. You should set this to however much space you
59886 - allocated for the stack.
59888 - There are two macros defined in `signal.h' that you should
59889 - use in calculating this size:
59891 - `SIGSTKSZ'
59892 - This is the canonical size for a signal stack. It is
59893 - judged to be sufficient for normal uses.
59895 - `MINSIGSTKSZ'
59896 - This is the amount of signal stack space the operating
59897 - system needs just to implement signal delivery. The
59898 - size of a signal stack *must* be greater than this.
59900 - For most cases, just using `SIGSTKSZ' for `ss_size' is
59901 - sufficient. But if you know how much stack space your
59902 - program's signal handlers will need, you may want to use
59903 - a different size. In this case, you should allocate
59904 - `MINSIGSTKSZ' additional bytes for the signal stack and
59905 - increase `ss_size' accordingly.
59907 - `int ss_flags'
59908 - This field contains the bitwise OR of these flags:
59910 - `SS_DISABLE'
59911 - This tells the system that it should not use the signal
59912 - stack.
59914 - `SS_ONSTACK'
59915 - This is set by the system, and indicates that the signal
59916 - stack is currently in use. If this bit is not set, then
59917 - signals will be delivered on the normal user stack.
59919 - - Function: int sigaltstack (const stack_t *restrict STACK, stack_t
59920 - *restrict OLDSTACK)
59921 - The `sigaltstack' function specifies an alternate stack for use
59922 - during signal handling. When a signal is received by the process
59923 - and its action indicates that the signal stack is used, the system
59924 - arranges a switch to the currently installed signal stack while
59925 - the handler for that signal is executed.
59927 - If OLDSTACK is not a null pointer, information about the currently
59928 - installed signal stack is returned in the location it points to.
59929 - If STACK is not a null pointer, then this is installed as the new
59930 - stack for use by signal handlers.
59932 - The return value is `0' on success and `-1' on failure. If
59933 - `sigaltstack' fails, it sets `errno' to one of these values:
59935 - `EINVAL'
59936 - You tried to disable a stack that was in fact currently in
59937 - use.
59939 - `ENOMEM'
59940 - The size of the alternate stack was too small. It must be
59941 - greater than `MINSIGSTKSZ'.
59943 - Here is the older `sigstack' interface. You should use
59944 -`sigaltstack' instead on systems that have it.
59946 - - Data Type: struct sigstack
59947 - This structure describes a signal stack. It contains the
59948 - following members:
59950 - `void *ss_sp'
59951 - This is the stack pointer. If the stack grows downwards on
59952 - your machine, this should point to the top of the area you
59953 - allocated. If the stack grows upwards, it should point to
59954 - the bottom.
59956 - `int ss_onstack'
59957 - This field is true if the process is currently using this
59958 - stack.
59960 - - Function: int sigstack (const struct sigstack *STACK, struct
59961 - sigstack *OLDSTACK)
59962 - The `sigstack' function specifies an alternate stack for use during
59963 - signal handling. When a signal is received by the process and its
59964 - action indicates that the signal stack is used, the system
59965 - arranges a switch to the currently installed signal stack while
59966 - the handler for that signal is executed.
59968 - If OLDSTACK is not a null pointer, information about the currently
59969 - installed signal stack is returned in the location it points to.
59970 - If STACK is not a null pointer, then this is installed as the new
59971 - stack for use by signal handlers.
59973 - The return value is `0' on success and `-1' on failure.
59975 -\x1f
59976 -File: libc.info, Node: BSD Signal Handling, Prev: Signal Stack, Up: Signal Handling
59978 -BSD Signal Handling
59979 -===================
59981 - This section describes alternative signal handling functions derived
59982 -from BSD Unix. These facilities were an advance, in their time; today,
59983 -they are mostly obsolete, and supported mainly for compatibility with
59984 -BSD Unix.
59986 - There are many similarities between the BSD and POSIX signal handling
59987 -facilities, because the POSIX facilities were inspired by the BSD
59988 -facilities. Besides having different names for all the functions to
59989 -avoid conflicts, the main differences between the two are:
59991 - * BSD Unix represents signal masks as an `int' bit mask, rather than
59992 - as a `sigset_t' object.
59994 - * The BSD facilities use a different default for whether an
59995 - interrupted primitive should fail or resume. The POSIX facilities
59996 - make system calls fail unless you specify that they should resume.
59997 - With the BSD facility, the default is to make system calls resume
59998 - unless you say they should fail. *Note Interrupted Primitives::.
60000 - The BSD facilities are declared in `signal.h'.
60002 -* Menu:
60004 -* BSD Handler:: BSD Function to Establish a Handler.
60005 -* Blocking in BSD:: BSD Functions for Blocking Signals.
60007 -\x1f
60008 -File: libc.info, Node: BSD Handler, Next: Blocking in BSD, Up: BSD Signal Handling
60010 -BSD Function to Establish a Handler
60011 ------------------------------------
60013 - - Data Type: struct sigvec
60014 - This data type is the BSD equivalent of `struct sigaction' (*note
60015 - Advanced Signal Handling::); it is used to specify signal actions
60016 - to the `sigvec' function. It contains the following members:
60018 - `sighandler_t sv_handler'
60019 - This is the handler function.
60021 - `int sv_mask'
60022 - This is the mask of additional signals to be blocked while
60023 - the handler function is being called.
60025 - `int sv_flags'
60026 - This is a bit mask used to specify various flags which affect
60027 - the behavior of the signal. You can also refer to this field
60028 - as `sv_onstack'.
60030 - These symbolic constants can be used to provide values for the
60031 -`sv_flags' field of a `sigvec' structure. This field is a bit mask
60032 -value, so you bitwise-OR the flags of interest to you together.
60034 - - Macro: int SV_ONSTACK
60035 - If this bit is set in the `sv_flags' field of a `sigvec'
60036 - structure, it means to use the signal stack when delivering the
60037 - signal.
60039 - - Macro: int SV_INTERRUPT
60040 - If this bit is set in the `sv_flags' field of a `sigvec'
60041 - structure, it means that system calls interrupted by this kind of
60042 - signal should not be restarted if the handler returns; instead,
60043 - the system calls should return with a `EINTR' error status. *Note
60044 - Interrupted Primitives::.
60046 - - Macro: int SV_RESETHAND
60047 - If this bit is set in the `sv_flags' field of a `sigvec'
60048 - structure, it means to reset the action for the signal back to
60049 - `SIG_DFL' when the signal is received.
60051 - - Function: int sigvec (int SIGNUM, const struct sigvec *ACTION,struct
60052 - sigvec *OLD-ACTION)
60053 - This function is the equivalent of `sigaction' (*note Advanced
60054 - Signal Handling::); it installs the action ACTION for the signal
60055 - SIGNUM, returning information about the previous action in effect
60056 - for that signal in OLD-ACTION.
60058 - - Function: int siginterrupt (int SIGNUM, int FAILFLAG)
60059 - This function specifies which approach to use when certain
60060 - primitives are interrupted by handling signal SIGNUM. If FAILFLAG
60061 - is false, signal SIGNUM restarts primitives. If FAILFLAG is true,
60062 - handling SIGNUM causes these primitives to fail with error code
60063 - `EINTR'. *Note Interrupted Primitives::.
60065 -\x1f
60066 -File: libc.info, Node: Blocking in BSD, Prev: BSD Handler, Up: BSD Signal Handling
60068 -BSD Functions for Blocking Signals
60069 -----------------------------------
60071 - - Macro: int sigmask (int SIGNUM)
60072 - This macro returns a signal mask that has the bit for signal SIGNUM
60073 - set. You can bitwise-OR the results of several calls to `sigmask'
60074 - together to specify more than one signal. For example,
60076 - (sigmask (SIGTSTP) | sigmask (SIGSTOP)
60077 - | sigmask (SIGTTIN) | sigmask (SIGTTOU))
60079 - specifies a mask that includes all the job-control stop signals.
60081 - - Function: int sigblock (int MASK)
60082 - This function is equivalent to `sigprocmask' (*note Process Signal
60083 - Mask::) with a HOW argument of `SIG_BLOCK': it adds the signals
60084 - specified by MASK to the calling process's set of blocked signals.
60085 - The return value is the previous set of blocked signals.
60087 - - Function: int sigsetmask (int MASK)
60088 - This function equivalent to `sigprocmask' (*note Process Signal
60089 - Mask::) with a HOW argument of `SIG_SETMASK': it sets the calling
60090 - process's signal mask to MASK. The return value is the previous
60091 - set of blocked signals.
60093 - - Function: int sigpause (int MASK)
60094 - This function is the equivalent of `sigsuspend' (*note Waiting for
60095 - a Signal::): it sets the calling process's signal mask to MASK,
60096 - and waits for a signal to arrive. On return the previous set of
60097 - blocked signals is restored.
60099 -\x1f
60100 -File: libc.info, Node: Program Basics, Next: Processes, Prev: Signal Handling, Up: Top
60102 -The Basic Program/System Interface
60103 -**********************************
60105 - "Processes" are the primitive units for allocation of system
60106 -resources. Each process has its own address space and (usually) one
60107 -thread of control. A process executes a program; you can have multiple
60108 -processes executing the same program, but each process has its own copy
60109 -of the program within its own address space and executes it
60110 -independently of the other copies. Though it may have multiple threads
60111 -of control within the same program and a program may be composed of
60112 -multiple logically separate modules, a process always executes exactly
60113 -one program.
60115 - Note that we are using a specific definition of "program" for the
60116 -purposes of this manual, which corresponds to a common definition in the
60117 -context of Unix system. In popular usage, "program" enjoys a much
60118 -broader definition; it can refer for example to a system's kernel, an
60119 -editor macro, a complex package of software, or a discrete section of
60120 -code executing within a process.
60122 - Writing the program is what this manual is all about. This chapter
60123 -explains the most basic interface between your program and the system
60124 -that runs, or calls, it. This includes passing of parameters (arguments
60125 -and environment) from the system, requesting basic services from the
60126 -system, and telling the system the program is done.
60128 - A program starts another program with the `exec' family of system
60129 -calls. This chapter looks at program startup from the execee's point
60130 -of view. To see the event from the execor's point of view, *Note
60131 -Executing a File::.
60133 -* Menu:
60135 -* Program Arguments:: Parsing your program's command-line arguments.
60136 -* Environment Variables:: Less direct parameters affecting your program
60137 -* System Calls:: Requesting service from the system
60138 -* Program Termination:: Telling the system you're done; return status
60140 -\x1f
60141 -File: libc.info, Node: Program Arguments, Next: Environment Variables, Up: Program Basics
60143 -Program Arguments
60144 -=================
60146 - The system starts a C program by calling the function `main'. It is
60147 -up to you to write a function named `main'--otherwise, you won't even
60148 -be able to link your program without errors.
60150 - In ISO C you can define `main' either to take no arguments, or to
60151 -take two arguments that represent the command line arguments to the
60152 -program, like this:
60154 - int main (int ARGC, char *ARGV[])
60156 - The command line arguments are the whitespace-separated tokens given
60157 -in the shell command used to invoke the program; thus, in `cat foo
60158 -bar', the arguments are `foo' and `bar'. The only way a program can
60159 -look at its command line arguments is via the arguments of `main'. If
60160 -`main' doesn't take arguments, then you cannot get at the command line.
60162 - The value of the ARGC argument is the number of command line
60163 -arguments. The ARGV argument is a vector of C strings; its elements
60164 -are the individual command line argument strings. The file name of the
60165 -program being run is also included in the vector as the first element;
60166 -the value of ARGC counts this element. A null pointer always follows
60167 -the last element: `ARGV[ARGC]' is this null pointer.
60169 - For the command `cat foo bar', ARGC is 3 and ARGV has three
60170 -elements, `"cat"', `"foo"' and `"bar"'.
60172 - In Unix systems you can define `main' a third way, using three
60173 -arguments:
60175 - int main (int ARGC, char *ARGV[], char *ENVP[])
60177 - The first two arguments are just the same. The third argument ENVP
60178 -gives the program's environment; it is the same as the value of
60179 -`environ'. *Note Environment Variables::. POSIX.1 does not allow this
60180 -three-argument form, so to be portable it is best to write `main' to
60181 -take two arguments, and use the value of `environ'.
60183 -* Menu:
60185 -* Argument Syntax:: By convention, options start with a hyphen.
60186 -* Parsing Program Arguments:: Ways to parse program options and arguments.
60188 -\x1f
60189 -File: libc.info, Node: Argument Syntax, Next: Parsing Program Arguments, Up: Program Arguments
60191 -Program Argument Syntax Conventions
60192 ------------------------------------
60194 - POSIX recommends these conventions for command line arguments.
60195 -`getopt' (*note Getopt::) and `argp_parse' (*note Argp::) make it easy
60196 -to implement them.
60198 - * Arguments are options if they begin with a hyphen delimiter (`-').
60200 - * Multiple options may follow a hyphen delimiter in a single token if
60201 - the options do not take arguments. Thus, `-abc' is equivalent to
60202 - `-a -b -c'.
60204 - * Option names are single alphanumeric characters (as for `isalnum';
60205 - *note Classification of Characters::).
60207 - * Certain options require an argument. For example, the `-o' command
60208 - of the `ld' command requires an argument--an output file name.
60210 - * An option and its argument may or may not appear as separate
60211 - tokens. (In other words, the whitespace separating them is
60212 - optional.) Thus, `-o foo' and `-ofoo' are equivalent.
60214 - * Options typically precede other non-option arguments.
60216 - The implementations of `getopt' and `argp_parse' in the GNU C
60217 - library normally make it appear as if all the option arguments were
60218 - specified before all the non-option arguments for the purposes of
60219 - parsing, even if the user of your program intermixed option and
60220 - non-option arguments. They do this by reordering the elements of
60221 - the ARGV array. This behavior is nonstandard; if you want to
60222 - suppress it, define the `_POSIX_OPTION_ORDER' environment variable.
60223 - *Note Standard Environment::.
60225 - * The argument `--' terminates all options; any following arguments
60226 - are treated as non-option arguments, even if they begin with a
60227 - hyphen.
60229 - * A token consisting of a single hyphen character is interpreted as
60230 - an ordinary non-option argument. By convention, it is used to
60231 - specify input from or output to the standard input and output
60232 - streams.
60234 - * Options may be supplied in any order, or appear multiple times.
60235 - The interpretation is left up to the particular application
60236 - program.
60238 - GNU adds "long options" to these conventions. Long options consist
60239 -of `--' followed by a name made of alphanumeric characters and dashes.
60240 -Option names are typically one to three words long, with hyphens to
60241 -separate words. Users can abbreviate the option names as long as the
60242 -abbreviations are unique.
60244 - To specify an argument for a long option, write `--NAME=VALUE'.
60245 -This syntax enables a long option to accept an argument that is itself
60246 -optional.
60248 - Eventually, the GNU system will provide completion for long option
60249 -names in the shell.
60251 -\x1f
60252 -File: libc.info, Node: Parsing Program Arguments, Prev: Argument Syntax, Up: Program Arguments
60254 -Parsing Program Arguments
60255 --------------------------
60257 - If the syntax for the command line arguments to your program is
60258 -simple enough, you can simply pick the arguments off from ARGV by hand.
60259 -But unless your program takes a fixed number of arguments, or all of the
60260 -arguments are interpreted in the same way (as file names, for example),
60261 -you are usually better off using `getopt' (*note Getopt::) or
60262 -`argp_parse' (*note Argp::) to do the parsing.
60264 - `getopt' is more standard (the short-option only version of it is a
60265 -part of the POSIX standard), but using `argp_parse' is often easier,
60266 -both for very simple and very complex option structures, because it
60267 -does more of the dirty work for you.
60269 -* Menu:
60271 -* Getopt:: Parsing program options using `getopt'.
60272 -* Argp:: Parsing program options using `argp_parse'.
60273 -* Suboptions:: Some programs need more detailed options.
60274 -* Suboptions Example:: This shows how it could be done for `mount'.
60276 -\x1f
60277 -File: libc.info, Node: Getopt, Next: Argp, Up: Parsing Program Arguments
60279 -Parsing program options using `getopt'
60280 -======================================
60282 - The `getopt' and `getopt_long' functions automate some of the chore
60283 -involved in parsing typical unix command line options.
60285 -* Menu:
60287 -* Using Getopt:: Using the `getopt' function.
60288 -* Example of Getopt:: An example of parsing options with `getopt'.
60289 -* Getopt Long Options:: GNU suggests utilities accept long-named
60290 - options; here is one way to do.
60291 -* Getopt Long Option Example:: An example of using `getopt_long'.
60293 -\x1f
60294 -File: libc.info, Node: Using Getopt, Next: Example of Getopt, Up: Getopt
60296 -Using the `getopt' function
60297 ----------------------------
60299 - Here are the details about how to call the `getopt' function. To
60300 -use this facility, your program must include the header file `unistd.h'.
60302 - - Variable: int opterr
60303 - If the value of this variable is nonzero, then `getopt' prints an
60304 - error message to the standard error stream if it encounters an
60305 - unknown option character or an option with a missing required
60306 - argument. This is the default behavior. If you set this variable
60307 - to zero, `getopt' does not print any messages, but it still
60308 - returns the character `?' to indicate an error.
60310 - - Variable: int optopt
60311 - When `getopt' encounters an unknown option character or an option
60312 - with a missing required argument, it stores that option character
60313 - in this variable. You can use this for providing your own
60314 - diagnostic messages.
60316 - - Variable: int optind
60317 - This variable is set by `getopt' to the index of the next element
60318 - of the ARGV array to be processed. Once `getopt' has found all of
60319 - the option arguments, you can use this variable to determine where
60320 - the remaining non-option arguments begin. The initial value of
60321 - this variable is `1'.
60323 - - Variable: char * optarg
60324 - This variable is set by `getopt' to point at the value of the
60325 - option argument, for those options that accept arguments.
60327 - - Function: int getopt (int ARGC, char **ARGV, const char *OPTIONS)
60328 - The `getopt' function gets the next option argument from the
60329 - argument list specified by the ARGV and ARGC arguments. Normally
60330 - these values come directly from the arguments received by `main'.
60332 - The OPTIONS argument is a string that specifies the option
60333 - characters that are valid for this program. An option character
60334 - in this string can be followed by a colon (`:') to indicate that
60335 - it takes a required argument. If an option character is followed
60336 - by two colons (`::'), its argument is optional; this is a GNU
60337 - extension.
60339 - `getopt' has three ways to deal with options that follow
60340 - non-options ARGV elements. The special argument `--' forces in
60341 - all cases the end of option scanning.
60343 - * The default is to permute the contents of ARGV while scanning
60344 - it so that eventually all the non-options are at the end.
60345 - This allows options to be given in any order, even with
60346 - programs that were not written to expect this.
60348 - * If the OPTIONS argument string begins with a hyphen (`-'),
60349 - this is treated specially. It permits arguments that are not
60350 - options to be returned as if they were associated with option
60351 - character `\1'.
60353 - * POSIX demands the following behavior: The first non-option
60354 - stops option processing. This mode is selected by either
60355 - setting the environment variable `POSIXLY_CORRECT' or
60356 - beginning the OPTIONS argument string with a plus sign (`+').
60358 - The `getopt' function returns the option character for the next
60359 - command line option. When no more option arguments are available,
60360 - it returns `-1'. There may still be more non-option arguments; you
60361 - must compare the external variable `optind' against the ARGC
60362 - parameter to check this.
60364 - If the option has an argument, `getopt' returns the argument by
60365 - storing it in the variable OPTARG. You don't ordinarily need to
60366 - copy the `optarg' string, since it is a pointer into the original
60367 - ARGV array, not into a static area that might be overwritten.
60369 - If `getopt' finds an option character in ARGV that was not
60370 - included in OPTIONS, or a missing option argument, it returns `?'
60371 - and sets the external variable `optopt' to the actual option
60372 - character. If the first character of OPTIONS is a colon (`:'),
60373 - then `getopt' returns `:' instead of `?' to indicate a missing
60374 - option argument. In addition, if the external variable `opterr'
60375 - is nonzero (which is the default), `getopt' prints an error
60376 - message.
60378 -\x1f
60379 -File: libc.info, Node: Example of Getopt, Next: Getopt Long Options, Prev: Using Getopt, Up: Getopt
60381 -Example of Parsing Arguments with `getopt'
60382 -------------------------------------------
60384 - Here is an example showing how `getopt' is typically used. The key
60385 -points to notice are:
60387 - * Normally, `getopt' is called in a loop. When `getopt' returns
60388 - `-1', indicating no more options are present, the loop terminates.
60390 - * A `switch' statement is used to dispatch on the return value from
60391 - `getopt'. In typical use, each case just sets a variable that is
60392 - used later in the program.
60394 - * A second loop is used to process the remaining non-option
60395 - arguments.
60397 - #include <unistd.h>
60398 - #include <stdio.h>
60400 - int
60401 - main (int argc, char **argv)
60403 - int aflag = 0;
60404 - int bflag = 0;
60405 - char *cvalue = NULL;
60406 - int index;
60407 - int c;
60409 - opterr = 0;
60411 - while ((c = getopt (argc, argv, "abc:")) != -1)
60412 - switch (c)
60414 - case 'a':
60415 - aflag = 1;
60416 - break;
60417 - case 'b':
60418 - bflag = 1;
60419 - break;
60420 - case 'c':
60421 - cvalue = optarg;
60422 - break;
60423 - case '?':
60424 - if (isprint (optopt))
60425 - fprintf (stderr, "Unknown option `-%c'.\n", optopt);
60426 - else
60427 - fprintf (stderr,
60428 - "Unknown option character `\\x%x'.\n",
60429 - optopt);
60430 - return 1;
60431 - default:
60432 - abort ();
60435 - printf ("aflag = %d, bflag = %d, cvalue = %s\n",
60436 - aflag, bflag, cvalue);
60438 - for (index = optind; index < argc; index++)
60439 - printf ("Non-option argument %s\n", argv[index]);
60440 - return 0;
60443 - Here are some examples showing what this program prints with
60444 -different combinations of arguments:
60446 - % testopt
60447 - aflag = 0, bflag = 0, cvalue = (null)
60449 - % testopt -a -b
60450 - aflag = 1, bflag = 1, cvalue = (null)
60452 - % testopt -ab
60453 - aflag = 1, bflag = 1, cvalue = (null)
60455 - % testopt -c foo
60456 - aflag = 0, bflag = 0, cvalue = foo
60458 - % testopt -cfoo
60459 - aflag = 0, bflag = 0, cvalue = foo
60461 - % testopt arg1
60462 - aflag = 0, bflag = 0, cvalue = (null)
60463 - Non-option argument arg1
60465 - % testopt -a arg1
60466 - aflag = 1, bflag = 0, cvalue = (null)
60467 - Non-option argument arg1
60469 - % testopt -c foo arg1
60470 - aflag = 0, bflag = 0, cvalue = foo
60471 - Non-option argument arg1
60473 - % testopt -a -- -b
60474 - aflag = 1, bflag = 0, cvalue = (null)
60475 - Non-option argument -b
60477 - % testopt -a -
60478 - aflag = 1, bflag = 0, cvalue = (null)
60479 - Non-option argument -
60481 -\x1f
60482 -File: libc.info, Node: Getopt Long Options, Next: Getopt Long Option Example, Prev: Example of Getopt, Up: Getopt
60484 -Parsing Long Options with `getopt_long'
60485 ----------------------------------------
60487 - To accept GNU-style long options as well as single-character options,
60488 -use `getopt_long' instead of `getopt'. This function is declared in
60489 -`getopt.h', not `unistd.h'. You should make every program accept long
60490 -options if it uses any options, for this takes little extra work and
60491 -helps beginners remember how to use the program.
60493 - - Data Type: struct option
60494 - This structure describes a single long option name for the sake of
60495 - `getopt_long'. The argument LONGOPTS must be an array of these
60496 - structures, one for each long option. Terminate the array with an
60497 - element containing all zeros.
60499 - The `struct option' structure has these fields:
60501 - `const char *name'
60502 - This field is the name of the option. It is a string.
60504 - `int has_arg'
60505 - This field says whether the option takes an argument. It is
60506 - an integer, and there are three legitimate values:
60507 - `no_argument', `required_argument' and `optional_argument'.
60509 - `int *flag'
60510 - `int val'
60511 - These fields control how to report or act on the option when
60512 - it occurs.
60514 - If `flag' is a null pointer, then the `val' is a value which
60515 - identifies this option. Often these values are chosen to
60516 - uniquely identify particular long options.
60518 - If `flag' is not a null pointer, it should be the address of
60519 - an `int' variable which is the flag for this option. The
60520 - value in `val' is the value to store in the flag to indicate
60521 - that the option was seen.
60523 - - Function: int getopt_long (int ARGC, char *const *ARGV, const char
60524 - *SHORTOPTS, const struct option *LONGOPTS, int *INDEXPTR)
60525 - Decode options from the vector ARGV (whose length is ARGC). The
60526 - argument SHORTOPTS describes the short options to accept, just as
60527 - it does in `getopt'. The argument LONGOPTS describes the long
60528 - options to accept (see above).
60530 - When `getopt_long' encounters a short option, it does the same
60531 - thing that `getopt' would do: it returns the character code for the
60532 - option, and stores the options argument (if it has one) in
60533 - `optarg'.
60535 - When `getopt_long' encounters a long option, it takes actions based
60536 - on the `flag' and `val' fields of the definition of that option.
60538 - If `flag' is a null pointer, then `getopt_long' returns the
60539 - contents of `val' to indicate which option it found. You should
60540 - arrange distinct values in the `val' field for options with
60541 - different meanings, so you can decode these values after
60542 - `getopt_long' returns. If the long option is equivalent to a short
60543 - option, you can use the short option's character code in `val'.
60545 - If `flag' is not a null pointer, that means this option should just
60546 - set a flag in the program. The flag is a variable of type `int'
60547 - that you define. Put the address of the flag in the `flag' field.
60548 - Put in the `val' field the value you would like this option to
60549 - store in the flag. In this case, `getopt_long' returns `0'.
60551 - For any long option, `getopt_long' tells you the index in the array
60552 - LONGOPTS of the options definition, by storing it into
60553 - `*INDEXPTR'. You can get the name of the option with
60554 - `LONGOPTS[*INDEXPTR].name'. So you can distinguish among long
60555 - options either by the values in their `val' fields or by their
60556 - indices. You can also distinguish in this way among long options
60557 - that set flags.
60559 - When a long option has an argument, `getopt_long' puts the argument
60560 - value in the variable `optarg' before returning. When the option
60561 - has no argument, the value in `optarg' is a null pointer. This is
60562 - how you can tell whether an optional argument was supplied.
60564 - When `getopt_long' has no more options to handle, it returns `-1',
60565 - and leaves in the variable `optind' the index in ARGV of the next
60566 - remaining argument.
60568 - Since long option names were used before before the `getopt_long'
60569 -options was invented there are program interfaces which require programs
60570 -to recognize options like `-option value' instead of `--option value'.
60571 -To enable these programs to use the GNU getopt functionality there is
60572 -one more function available.
60574 - - Function: int getopt_long_only (int ARGC, char *const *ARGV, const
60575 - char *SHORTOPTS, const struct option *LONGOPTS, int *INDEXPTR)
60576 - The `getopt_long_only' function is equivalent to the `getopt_long'
60577 - function but it allows to specify the user of the application to
60578 - pass long options with only `-' instead of `--'. The `--' prefix
60579 - is still recognized but instead of looking through the short
60580 - options if a `-' is seen it is first tried whether this parameter
60581 - names a long option. If not, it is parsed as a short option.
60583 - Assuming `getopt_long_only' is used starting an application with
60585 - app -foo
60587 - the `getopt_long_only' will first look for a long option named
60588 - `foo'. If this is not found, the short options `f', `o', and
60589 - again `o' are recognized.
60591 -\x1f
60592 -File: libc.info, Node: Getopt Long Option Example, Prev: Getopt Long Options, Up: Getopt
60594 -Example of Parsing Long Options with `getopt_long'
60595 ---------------------------------------------------
60597 - #include <stdio.h>
60598 - #include <stdlib.h>
60599 - #include <getopt.h>
60601 - /* Flag set by `--verbose'. */
60602 - static int verbose_flag;
60604 - int
60605 - main (argc, argv)
60606 - int argc;
60607 - char **argv;
60609 - int c;
60611 - while (1)
60613 - static struct option long_options[] =
60615 - /* These options set a flag. */
60616 - {"verbose", no_argument, &verbose_flag, 1},
60617 - {"brief", no_argument, &verbose_flag, 0},
60618 - /* These options don't set a flag.
60619 - We distinguish them by their indices. */
60620 - {"add", no_argument, 0, 'a'},
60621 - {"append", no_argument, 0, 'b'},
60622 - {"delete", required_argument, 0, 'd'},
60623 - {"create", required_argument, 0, 'c'},
60624 - {"file", required_argument, 0, 'f'},
60625 - {0, 0, 0, 0}
60626 - };
60627 - /* `getopt_long' stores the option index here. */
60628 - int option_index = 0;
60630 - c = getopt_long (argc, argv, "abc:d:f:",
60631 - long_options, &option_index);
60633 - /* Detect the end of the options. */
60634 - if (c == -1)
60635 - break;
60637 - switch (c)
60639 - case 0:
60640 - /* If this option set a flag, do nothing else now. */
60641 - if (long_options[option_index].flag != 0)
60642 - break;
60643 - printf ("option %s", long_options[option_index].name);
60644 - if (optarg)
60645 - printf (" with arg %s", optarg);
60646 - printf ("\n");
60647 - break;
60649 - case 'a':
60650 - puts ("option -a\n");
60651 - break;
60653 - case 'b':
60654 - puts ("option -b\n");
60655 - break;
60657 - case 'c':
60658 - printf ("option -c with value `%s'\n", optarg);
60659 - break;
60661 - case 'd':
60662 - printf ("option -d with value `%s'\n", optarg);
60663 - break;
60665 - case 'f':
60666 - printf ("option -f with value `%s'\n", optarg);
60667 - break;
60669 - case '?':
60670 - /* `getopt_long' already printed an error message. */
60671 - break;
60673 - default:
60674 - abort ();
60678 - /* Instead of reporting `--verbose'
60679 - and `--brief' as they are encountered,
60680 - we report the final status resulting from them. */
60681 - if (verbose_flag)
60682 - puts ("verbose flag is set");
60684 - /* Print any remaining command line arguments (not options). */
60685 - if (optind < argc)
60687 - printf ("non-option ARGV-elements: ");
60688 - while (optind < argc)
60689 - printf ("%s ", argv[optind++]);
60690 - putchar ('\n');
60693 - exit (0);
60696 -\x1f
60697 -File: libc.info, Node: Argp, Next: Suboptions, Prev: Getopt, Up: Parsing Program Arguments
60699 -Parsing Program Options with Argp
60700 -=================================
60702 - "Argp" is an interface for parsing unix-style argument vectors.
60703 -*Note Program Arguments::.
60705 - Argp provides features unavailable in the more commonly used
60706 -`getopt' interface. These features include automatically producing
60707 -output in response to the `--help' and `--version' options, as
60708 -described in the GNU coding standards. Using argp makes it less likely
60709 -that programmers will neglect to implement these additional options or
60710 -keep them up to date.
60712 - Argp also provides the ability to merge several independently defined
60713 -option parsers into one, mediating conflicts between them and making the
60714 -result appear seamless. A library can export an argp option parser that
60715 -user programs might employ in conjunction with their own option parsers,
60716 -resulting in less work for the user programs. Some programs may use
60717 -only argument parsers exported by libraries, thereby achieving
60718 -consistent and efficient option-parsing for abstractions implemented by
60719 -the libraries.
60721 - The header file `<argp.h>' should be included to use argp.
60723 -The `argp_parse' Function
60724 --------------------------
60726 - The main interface to argp is the `argp_parse' function. In many
60727 -cases, calling `argp_parse' is the only argument-parsing code needed in
60728 -`main'. *Note Program Arguments::.
60730 - - Function: error_t argp_parse (const struct argp *ARGP, int ARGC,
60731 - char **ARGV, unsigned FLAGS, int *ARG_INDEX, void *INPUT)
60732 - The `argp_parse' function parses the arguments in ARGV, of length
60733 - ARGC, using the argp parser ARGP. *Note Argp Parsers::.
60735 - A value of zero is the same as a `struct argp'containing all
60736 - zeros. FLAGS is a set of flag bits that modify the parsing
60737 - behavior. *Note Argp Flags::. INPUT is passed through to the argp
60738 - parser ARGP, and has meaning defined by ARGP. A typical usage is
60739 - to pass a pointer to a structure which is used for specifying
60740 - parameters to the parser and passing back the results.
60742 - Unless the `ARGP_NO_EXIT' or `ARGP_NO_HELP' flags are included in
60743 - FLAGS, calling `argp_parse' may result in the program exiting.
60744 - This behavior is true if an error is detected, or when an unknown
60745 - option is encountered. *Note Program Termination::.
60747 - If ARG_INDEX is non-null, the index of the first unparsed option
60748 - in ARGV is returned as a value.
60750 - The return value is zero for successful parsing, or an error code
60751 - (*note Error Codes::) if an error is detected. Different argp
60752 - parsers may return arbitrary error codes, but the standard error
60753 - codes are: `ENOMEM' if a memory allocation error occurred, or
60754 - `EINVAL' if an unknown option or option argument is encountered.
60756 -* Menu:
60758 -* Globals: Argp Global Variables. Global argp parameters.
60759 -* Parsers: Argp Parsers. Defining parsers for use with `argp_parse'.
60760 -* Flags: Argp Flags. Flags that modify the behavior of `argp_parse'.
60761 -* Help: Argp Help. Printing help messages when not parsing.
60762 -* Examples: Argp Examples. Simple examples of programs using argp.
60763 -* Customization: Argp User Customization.
60764 - Users may control the `--help' output format.
60766 -\x1f
60767 -File: libc.info, Node: Argp Global Variables, Next: Argp Parsers, Up: Argp
60769 -Argp Global Variables
60770 ----------------------
60772 - These variables make it easy for user programs to implement the
60773 -`--version' option and provide a bug-reporting address in the `--help'
60774 -output. These are implemented in argp by default.
60776 - - Variable: const char * argp_program_version
60777 - If defined or set by the user program to a non-zero value, then a
60778 - `--version' option is added when parsing with `argp_parse', which
60779 - will print the `--version' string followed by a newline and exit.
60780 - The exception to this is if the `ARGP_NO_EXIT' flag is used.
60782 - - Variable: const char * argp_program_bug_address
60783 - If defined or set by the user program to a non-zero value,
60784 - `argp_program_bug_address' should point to a string that will be
60785 - printed at the end of the standard output for the `--help' option,
60786 - embedded in a sentence that says `Report bugs to ADDRESS.'.
60788 - - Variable: argp_program_version_hook
60789 - If defined or set by the user program to a non-zero value, a
60790 - `--version' option is added when parsing with `arg_parse', which
60791 - prints the program version and exits with a status of zero. This
60792 - is not the case if the `ARGP_NO_HELP' flag is used. If the
60793 - `ARGP_NO_EXIT' flag is set, the exit behavior of the program is
60794 - suppressed or modified, as when the argp parser is going to be
60795 - used by other programs.
60797 - It should point to a function with this type of signature:
60799 - void PRINT-VERSION (FILE *STREAM, struct argp_state *STATE)
60801 - *Note Argp Parsing State::, for an explanation of STATE.
60803 - This variable takes precedence over `argp_program_version', and is
60804 - useful if a program has version information not easily expressed
60805 - in a simple string.
60807 - - Variable: error_t argp_err_exit_status
60808 - This is the exit status used when argp exits due to a parsing
60809 - error. If not defined or set by the user program, this defaults
60810 - to: `EX_USAGE' from `<sysexits.h>'.
60812 diff -u -udbrN glibc-2.3.2/manual/libc.info-42 glibc-2.3.2-200304020432/manual/libc.info-42
60813 --- glibc-2.3.2/manual/libc.info-42 Sat Mar 1 02:39:41 2003
60814 +++ glibc-2.3.2-200304020432/manual/libc.info-42 Thu Jan 1 01:00:00 1970
60815 @@ -1,1121 +0,0 @@
60816 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
60818 -INFO-DIR-SECTION GNU libraries
60819 -START-INFO-DIR-ENTRY
60820 -* Libc: (libc). C library.
60821 -END-INFO-DIR-ENTRY
60823 - This file documents the GNU C library.
60825 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
60826 -Reference Manual', for Version 2.3.x.
60828 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
60829 -Free Software Foundation, Inc.
60831 - Permission is granted to copy, distribute and/or modify this document
60832 -under the terms of the GNU Free Documentation License, Version 1.1 or
60833 -any later version published by the Free Software Foundation; with the
60834 -Invariant Sections being "Free Software Needs Free Documentation" and
60835 -"GNU Lesser General Public License", the Front-Cover texts being (a)
60836 -(see below), and with the Back-Cover Texts being (b) (see below). A
60837 -copy of the license is included in the section entitled "GNU Free
60838 -Documentation License".
60840 - (a) The FSF's Front-Cover Text is:
60842 - A GNU Manual
60844 - (b) The FSF's Back-Cover Text is:
60846 - You have freedom to copy and modify this GNU Manual, like GNU
60847 -software. Copies published by the Free Software Foundation raise
60848 -funds for GNU development.
60850 -\x1f
60851 -File: libc.info, Node: Argp Parsers, Next: Argp Flags, Prev: Argp Global Variables, Up: Argp
60853 -Specifying Argp Parsers
60854 ------------------------
60856 - The first argument to the `argp_parse' function is a pointer to a
60857 -`struct argp', which is known as an "argp parser":
60859 - - Data Type: struct argp
60860 - This structure specifies how to parse a given set of options and
60861 - arguments, perhaps in conjunction with other argp parsers. It has
60862 - the following fields:
60864 - `const struct argp_option *options'
60865 - A pointer to a vector of `argp_option' structures specifying
60866 - which options this argp parser understands; it may be zero if
60867 - there are no options at all. *Note Argp Option Vectors::.
60869 - `argp_parser_t parser'
60870 - A pointer to a function that defines actions for this parser;
60871 - it is called for each option parsed, and at other
60872 - well-defined points in the parsing process. A value of zero
60873 - is the same as a pointer to a function that always returns
60874 - `ARGP_ERR_UNKNOWN'. *Note Argp Parser Functions::.
60876 - `const char *args_doc'
60877 - If non-zero, a string describing what non-option arguments
60878 - are called by this parser. This is only used to print the
60879 - `Usage:' message. If it contains newlines, the strings
60880 - separated by them are considered alternative usage patterns
60881 - and printed on separate lines. Lines after the first are
60882 - prefixed by ` or: ' instead of `Usage:'.
60884 - `const char *doc'
60885 - If non-zero, a string containing extra text to be printed
60886 - before and after the options in a long help message, with the
60887 - two sections separated by a vertical tab (`'\v'', `'\013'')
60888 - character. By convention, the documentation before the
60889 - options is just a short string explaining what the program
60890 - does. Documentation printed after the options describe
60891 - behavior in more detail.
60893 - `const struct argp_child *children'
60894 - A pointer to a vector of `argp_children' structures. This
60895 - pointer specifies which additional argp parsers should be
60896 - combined with this one. *Note Argp Children::.
60898 - `char *(*help_filter)(int KEY, const char *TEXT, void *INPUT)'
60899 - If non-zero, a pointer to a function that filters the output
60900 - of help messages. *Note Argp Help Filtering::.
60902 - `const char *argp_domain'
60903 - If non-zero, the strings used in the argp library are
60904 - translated using the domain described by this string. If
60905 - zero, the current default domain is used.
60908 - Of the above group, `options', `parser', `args_doc', and the `doc'
60909 -fields are usually all that are needed. If an argp parser is defined
60910 -as an initialized C variable, only the fields used need be specified in
60911 -the initializer. The rest will default to zero due to the way C
60912 -structure initialization works. This design is exploited in most argp
60913 -structures; the most-used fields are grouped near the beginning, the
60914 -unused fields left unspecified.
60916 -* Menu:
60918 -* Options: Argp Option Vectors. Specifying options in an argp parser.
60919 -* Argp Parser Functions:: Defining actions for an argp parser.
60920 -* Children: Argp Children. Combining multiple argp parsers.
60921 -* Help Filtering: Argp Help Filtering. Customizing help output for an argp parser.
60923 -\x1f
60924 -File: libc.info, Node: Argp Option Vectors, Next: Argp Parser Functions, Prev: Argp Parsers, Up: Argp Parsers
60926 -Specifying Options in an Argp Parser
60927 -------------------------------------
60929 - The `options' field in a `struct argp' points to a vector of `struct
60930 -argp_option' structures, each of which specifies an option that the
60931 -argp parser supports. Multiple entries may be used for a single option
60932 -provided it has multiple names. This should be terminated by an entry
60933 -with zero in all fields. Note that when using an initialized C array
60934 -for options, writing `{ 0 }' is enough to achieve this.
60936 - - Data Type: struct argp_option
60937 - This structure specifies a single option that an argp parser
60938 - understands, as well as how to parse and document that option. It
60939 - has the following fields:
60941 - `const char *name'
60942 - The long name for this option, corresponding to the long
60943 - option `--NAME'; this field may be zero if this option _only_
60944 - has a short name. To specify multiple names for an option,
60945 - additional entries may follow this one, with the
60946 - `OPTION_ALIAS' flag set. *Note Argp Option Flags::.
60948 - `int key'
60949 - The integer key provided by the current option to the option
60950 - parser. If KEY has a value that is a printable ASCII
60951 - character (i.e., `isascii (KEY)' is true), it _also_
60952 - specifies a short option `-CHAR', where CHAR is the ASCII
60953 - character with the code KEY.
60955 - `const char *arg'
60956 - If non-zero, this is the name of an argument associated with
60957 - this option, which must be provided (e.g., with the
60958 - `--NAME=VALUE' or `-CHAR VALUE' syntaxes), unless the
60959 - `OPTION_ARG_OPTIONAL' flag (*note Argp Option Flags::) is
60960 - set, in which case it _may_ be provided.
60962 - `int flags'
60963 - Flags associated with this option, some of which are referred
60964 - to above. *Note Argp Option Flags::.
60966 - `const char *doc'
60967 - A documentation string for this option, for printing in help
60968 - messages.
60970 - If both the `name' and `key' fields are zero, this string
60971 - will be printed tabbed left from the normal option column,
60972 - making it useful as a group header. This will be the first
60973 - thing printed in its group. In this usage, it's conventional
60974 - to end the string with a `:' character.
60976 - `int group'
60977 - Group identity for this option.
60979 - In a long help message, options are sorted alphabetically
60980 - within each group, and the groups presented in the order 0,
60981 - 1, 2, ..., N, -M, ..., -2, -1.
60983 - Every entry in an options array with this field 0 will
60984 - inherit the group number of the previous entry, or zero if
60985 - it's the first one. If it's a group header with `name' and
60986 - `key' fields both zero, the previous entry + 1 is the
60987 - default. Automagic options such as `--help' are put into
60988 - group -1.
60990 - Note that because of C structure initialization rules, this
60991 - field often need not be specified, because 0 is the correct
60992 - value.
60994 -* Menu:
60996 -* Flags: Argp Option Flags. Flags for options.
60998 -\x1f
60999 -File: libc.info, Node: Argp Option Flags, Up: Argp Option Vectors
61001 -Flags for Argp Options
61002 -......................
61004 - The following flags may be or'd together in the `flags' field of a
61005 -`struct argp_option'. These flags control various aspects of how that
61006 -option is parsed or displayed in help messages:
61008 -`OPTION_ARG_OPTIONAL'
61009 - The argument associated with this option is optional.
61011 -`OPTION_HIDDEN'
61012 - This option isn't displayed in any help messages.
61014 -`OPTION_ALIAS'
61015 - This option is an alias for the closest previous non-alias option.
61016 - This means that it will be displayed in the same help entry, and
61017 - will inherit fields other than `name' and `key' from the option
61018 - being aliased.
61020 -`OPTION_DOC'
61021 - This option isn't actually an option and should be ignored by the
61022 - actual option parser. It is an arbitrary section of documentation
61023 - that should be displayed in much the same manner as the options.
61024 - This is known as a "documentation option".
61026 - If this flag is set, then the option `name' field is displayed
61027 - unmodified (e.g., no `--' prefix is added) at the left-margin where
61028 - a _short_ option would normally be displayed, and this
61029 - documentation string is left in it's usual place. For purposes of
61030 - sorting, any leading whitespace and punctuation is ignored, unless
61031 - the first non-whitespace character is `-'. This entry is displayed
61032 - after all options, after `OPTION_DOC' entries with a leading `-',
61033 - in the same group.
61035 -`OPTION_NO_USAGE'
61036 - This option shouldn't be included in `long' usage messages, but
61037 - should still be included in other help messages. This is intended
61038 - for options that are completely documented in an argp's `args_doc'
61039 - field. *Note Argp Parsers::. Including this option in the
61040 - generic usage list would be redundant, and should be avoided.
61042 - For instance, if `args_doc' is `"FOO BAR\n-x BLAH"', and the `-x'
61043 - option's purpose is to distinguish these two cases, `-x' should
61044 - probably be marked `OPTION_NO_USAGE'.
61046 -\x1f
61047 -File: libc.info, Node: Argp Parser Functions, Next: Argp Children, Prev: Argp Option Vectors, Up: Argp Parsers
61049 -Argp Parser Functions
61050 ----------------------
61052 - The function pointed to by the `parser' field in a `struct argp'
61053 -(*note Argp Parsers::) defines what actions take place in response to
61054 -each option or argument parsed. It is also used as a hook, allowing a
61055 -parser to perform tasks at certain other points during parsing.
61057 - Argp parser functions have the following type signature:
61059 - error_t PARSER (int KEY, char *ARG, struct argp_state *STATE)
61061 -where the arguments are as follows:
61063 -KEY
61064 - For each option that is parsed, PARSER is called with a value of
61065 - KEY from that option's `key' field in the option vector. *Note
61066 - Argp Option Vectors::. PARSER is also called at other times with
61067 - special reserved keys, such as `ARGP_KEY_ARG' for non-option
61068 - arguments. *Note Argp Special Keys::.
61070 -ARG
61071 - If KEY is an option, ARG is its given value. This defaults to
61072 - zero if no value is specified. Only options that have a non-zero
61073 - `arg' field can ever have a value. These must _always_ have a
61074 - value unless the `OPTION_ARG_OPTIONAL' flag is specified. If the
61075 - input being parsed specifies a value for an option that doesn't
61076 - allow one, an error results before PARSER ever gets called.
61078 - If KEY is `ARGP_KEY_ARG', ARG is a non-option argument. Other
61079 - special keys always have a zero ARG.
61081 -STATE
61082 - STATE points to a `struct argp_state', containing useful
61083 - information about the current parsing state for use by PARSER.
61084 - *Note Argp Parsing State::.
61086 - When PARSER is called, it should perform whatever action is
61087 -appropriate for KEY, and return `0' for success, `ARGP_ERR_UNKNOWN' if
61088 -the value of KEY is not handled by this parser function, or a unix
61089 -error code if a real error occurred. *Note Error Codes::.
61091 - - Macro: int ARGP_ERR_UNKNOWN
61092 - Argp parser functions should return `ARGP_ERR_UNKNOWN' for any KEY
61093 - value they do not recognize, or for non-option arguments (`KEY ==
61094 - ARGP_KEY_ARG') that they are not equipped to handle.
61096 - A typical parser function uses a switch statement on KEY:
61098 - error_t
61099 - parse_opt (int key, char *arg, struct argp_state *state)
61101 - switch (key)
61103 - case OPTION_KEY:
61104 - ACTION
61105 - break;
61106 - ...
61107 - default:
61108 - return ARGP_ERR_UNKNOWN;
61110 - return 0;
61113 -* Menu:
61115 -* Keys: Argp Special Keys. Special values for the KEY argument.
61116 -* State: Argp Parsing State. What the STATE argument refers to.
61117 -* Functions: Argp Helper Functions. Functions to help during argp parsing.
61119 -\x1f
61120 -File: libc.info, Node: Argp Special Keys, Next: Argp Parsing State, Up: Argp Parser Functions
61122 -Special Keys for Argp Parser Functions
61123 -......................................
61125 - In addition to key values corresponding to user options, the KEY
61126 -argument to argp parser functions may have a number of other special
61127 -values. In the following example ARG and STATE refer to parser
61128 -function arguments. *Note Argp Parser Functions::.
61130 -`ARGP_KEY_ARG'
61131 - This is not an option at all, but rather a command line argument,
61132 - whose value is pointed to by ARG.
61134 - When there are multiple parser functions in play due to argp
61135 - parsers being combined, it's impossible to know which one will
61136 - handle a specific argument. Each is called until one returns 0 or
61137 - an error other than `ARGP_ERR_UNKNOWN'; if an argument is not
61138 - handled, `argp_parse' immediately returns success, without parsing
61139 - any more arguments.
61141 - Once a parser function returns success for this key, that fact is
61142 - recorded, and the `ARGP_KEY_NO_ARGS' case won't be used.
61143 - _However_, if while processing the argument a parser function
61144 - decrements the `next' field of its STATE argument, the option
61145 - won't be considered processed; this is to allow you to actually
61146 - modify the argument, perhaps into an option, and have it processed
61147 - again.
61149 -`ARGP_KEY_ARGS'
61150 - If a parser function returns `ARGP_ERR_UNKNOWN' for
61151 - `ARGP_KEY_ARG', it is immediately called again with the key
61152 - `ARGP_KEY_ARGS', which has a similar meaning, but is slightly more
61153 - convenient for consuming all remaining arguments. ARG is 0, and
61154 - the tail of the argument vector may be found at `STATE->argv +
61155 - STATE->next'. If success is returned for this key, and
61156 - `STATE->next' is unchanged, all remaining arguments are considered
61157 - to have been consumed. Otherwise, the amount by which
61158 - `STATE->next' has been adjusted indicates how many were used.
61159 - Here's an example that uses both, for different args:
61161 - ...
61162 - case ARGP_KEY_ARG:
61163 - if (STATE->arg_num == 0)
61164 - /* First argument */
61165 - first_arg = ARG;
61166 - else
61167 - /* Let the next case parse it. */
61168 - return ARGP_KEY_UNKNOWN;
61169 - break;
61170 - case ARGP_KEY_ARGS:
61171 - remaining_args = STATE->argv + STATE->next;
61172 - num_remaining_args = STATE->argc - STATE->next;
61173 - break;
61175 -`ARGP_KEY_END'
61176 - This indicates that there are no more command line arguments.
61177 - Parser functions are called in a different order, children first.
61178 - This allows each parser to clean up its state for the parent.
61180 -`ARGP_KEY_NO_ARGS'
61181 - Because it's common to do some special processing if there aren't
61182 - any non-option args, parser functions are called with this key if
61183 - they didn't successfully process any non-option arguments. This
61184 - is called just before `ARGP_KEY_END', where more general validity
61185 - checks on previously parsed arguments take place.
61187 -`ARGP_KEY_INIT'
61188 - This is passed in before any parsing is done. Afterwards, the
61189 - values of each element of the `child_input' field of STATE, if
61190 - any, are copied to each child's state to be the initial value of
61191 - the `input' when _their_ parsers are called.
61193 -`ARGP_KEY_SUCCESS'
61194 - Passed in when parsing has successfully been completed, even if
61195 - arguments remain.
61197 -`ARGP_KEY_ERROR'
61198 - Passed in if an error has occurred and parsing is terminated. In
61199 - this case a call with a key of `ARGP_KEY_SUCCESS' is never made.
61201 -`ARGP_KEY_FINI'
61202 - The final key ever seen by any parser, even after
61203 - `ARGP_KEY_SUCCESS' and `ARGP_KEY_ERROR'. Any resources allocated
61204 - by `ARGP_KEY_INIT' may be freed here. At times, certain resources
61205 - allocated are to be returned to the caller after a successful
61206 - parse. In that case, those particular resources can be freed in
61207 - the `ARGP_KEY_ERROR' case.
61209 - In all cases, `ARGP_KEY_INIT' is the first key seen by parser
61210 -functions, and `ARGP_KEY_FINI' the last, unless an error was returned
61211 -by the parser for `ARGP_KEY_INIT'. Other keys can occur in one the
61212 -following orders. OPT refers to an arbitrary option key:
61214 -OPT... `ARGP_KEY_NO_ARGS' `ARGP_KEY_END' `ARGP_KEY_SUCCESS'
61215 - The arguments being parsed did not contain any non-option
61216 - arguments.
61218 -( OPT | `ARGP_KEY_ARG' )... `ARGP_KEY_END' `ARGP_KEY_SUCCESS'
61219 - All non-option arguments were successfully handled by a parser
61220 - function. There may be multiple parser functions if multiple argp
61221 - parsers were combined.
61223 -( OPT | `ARGP_KEY_ARG' )... `ARGP_KEY_SUCCESS'
61224 - Some non-option argument went unrecognized.
61226 - This occurs when every parser function returns `ARGP_KEY_UNKNOWN'
61227 - for an argument, in which case parsing stops at that argument if
61228 - ARG_INDEX is a null pointer. Otherwise an error occurs.
61230 - In all cases, if a non-null value for ARG_INDEX gets passed to
61231 -`argp_parse', the index of the first unparsed command-line argument is
61232 -passed back in that value.
61234 - If an error occurs and is either detected by argp or because a parser
61235 -function returned an error value, each parser is called with
61236 -`ARGP_KEY_ERROR'. No further calls are made, except the final call
61237 -with `ARGP_KEY_FINI'.
61239 -\x1f
61240 -File: libc.info, Node: Argp Helper Functions, Prev: Argp Parsing State, Up: Argp Parser Functions
61242 -Functions For Use in Argp Parsers
61243 -.................................
61245 - Argp provides a number of functions available to the user of argp
61246 -(*note Argp Parser Functions::), mostly for producing error messages.
61247 -These take as their first argument the STATE argument to the parser
61248 -function. *Note Argp Parsing State::.
61250 - - Function: void argp_usage (const struct argp_state *STATE)
61251 - Outputs the standard usage message for the argp parser referred to
61252 - by STATE to `STATE->err_stream' and terminate the program with
61253 - `exit (argp_err_exit_status)'. *Note Argp Global Variables::.
61255 - - Function: void argp_error (const struct argp_state *STATE, const
61256 - char *FMT, ...)
61257 - Prints the printf format string FMT and following args, preceded
61258 - by the program name and `:', and followed by a `Try ... --help'
61259 - message, and terminates the program with an exit status of
61260 - `argp_err_exit_status'. *Note Argp Global Variables::.
61262 - - Function: void argp_failure (const struct argp_state *STATE, int
61263 - STATUS, int ERRNUM, const char *FMT, ...)
61264 - Similar to the standard gnu error-reporting function `error', this
61265 - prints the program name and `:', the printf format string FMT, and
61266 - the appropriate following args. If it is non-zero, the standard
61267 - unix error text for ERRNUM is printed. If STATUS is non-zero, it
61268 - terminates the program with that value as its exit status.
61270 - The difference between `argp_failure' and `argp_error' is that
61271 - `argp_error' is for _parsing errors_, whereas `argp_failure' is
61272 - for other problems that occur during parsing but don't reflect a
61273 - syntactic problem with the input, such as illegal values for
61274 - options, bad phase of the moon, etc.
61276 - - Function: void argp_state_help (const struct argp_state *STATE, FILE
61277 - *STREAM, unsigned FLAGS)
61278 - Outputs a help message for the argp parser referred to by STATE,
61279 - to STREAM. The FLAGS argument determines what sort of help
61280 - message is produced. *Note Argp Help Flags::.
61282 - Error output is sent to `STATE->err_stream', and the program name
61283 -printed is `STATE->name'.
61285 - The output or program termination behavior of these functions may be
61286 -suppressed if the `ARGP_NO_EXIT' or `ARGP_NO_ERRS' flags are passed to
61287 -`argp_parse'. *Note Argp Flags::.
61289 - This behavior is useful if an argp parser is exported for use by
61290 -other programs (e.g., by a library), and may be used in a context where
61291 -it is not desirable to terminate the program in response to parsing
61292 -errors. In argp parsers intended for such general use, and for the
61293 -case where the program _doesn't_ terminate, calls to any of these
61294 -functions should be followed by code that returns the appropriate error
61295 -code:
61297 - if (BAD ARGUMENT SYNTAX)
61299 - argp_usage (STATE);
61300 - return EINVAL;
61303 -If a parser function will _only_ be used when `ARGP_NO_EXIT' is not
61304 -set, the return may be omitted.
61306 -\x1f
61307 -File: libc.info, Node: Argp Parsing State, Next: Argp Helper Functions, Prev: Argp Special Keys, Up: Argp Parser Functions
61309 -Argp Parsing State
61310 -..................
61312 - The third argument to argp parser functions (*note Argp Parser
61313 -Functions::) is a pointer to a `struct argp_state', which contains
61314 -information about the state of the option parsing.
61316 - - Data Type: struct argp_state
61317 - This structure has the following fields, which may be modified as
61318 - noted:
61320 - `const struct argp *const root_argp'
61321 - The top level argp parser being parsed. Note that this is
61322 - often _not_ the same `struct argp' passed into `argp_parse' by
61323 - the invoking program. *Note Argp::. It is an internal argp
61324 - parser that contains options implemented by `argp_parse'
61325 - itself, such as `--help'.
61327 - `int argc'
61328 - `char **argv'
61329 - The argument vector being parsed. This may be modified.
61331 - `int next'
61332 - The index in `argv' of the next argument to be parsed. This
61333 - may be modified.
61335 - One way to consume all remaining arguments in the input is to
61336 - set `STATE->next = STATE->argc', perhaps after recording the
61337 - value of the `next' field to find the consumed arguments. The
61338 - current option can be re-parsed immediately by decrementing
61339 - this field, then modifying `STATE->argv[STATE->next]' to
61340 - reflect the option that should be reexamined.
61342 - `unsigned flags'
61343 - The flags supplied to `argp_parse'. These may be modified,
61344 - although some flags may only take effect when `argp_parse' is
61345 - first invoked. *Note Argp Flags::.
61347 - `unsigned arg_num'
61348 - While calling a parsing function with the KEY argument
61349 - `ARGP_KEY_ARG', this represents the number of the current arg,
61350 - starting at 0. It is incremented after each `ARGP_KEY_ARG'
61351 - call returns. At all other times, this is the number of
61352 - `ARGP_KEY_ARG' arguments that have been processed.
61354 - `int quoted'
61355 - If non-zero, the index in `argv' of the first argument
61356 - following a special `--' argument. This prevents anything
61357 - that follows from being interpreted as an option. It is only
61358 - set after argument parsing has proceeded past this point.
61360 - `void *input'
61361 - An arbitrary pointer passed in from the caller of
61362 - `argp_parse', in the INPUT argument.
61364 - `void **child_inputs'
61365 - These are values that will be passed to child parsers. This
61366 - vector will be the same length as the number of children in
61367 - the current parser. Each child parser will be given the
61368 - value of `STATE->child_inputs[I]' as _its_ `STATE->input'
61369 - field, where I is the index of the child in the this parser's
61370 - `children' field. *Note Argp Children::.
61372 - `void *hook'
61373 - For the parser function's use. Initialized to 0, but
61374 - otherwise ignored by argp.
61376 - `char *name'
61377 - The name used when printing messages. This is initialized to
61378 - `argv[0]', or `program_invocation_name' if `argv[0]' is
61379 - unavailable.
61381 - `FILE *err_stream'
61382 - `FILE *out_stream'
61383 - The stdio streams used when argp prints. Error messages are
61384 - printed to `err_stream', all other output, such as `--help'
61385 - output) to `out_stream'. These are initialized to `stderr'
61386 - and `stdout' respectively. *Note Standard Streams::.
61388 - `void *pstate'
61389 - Private, for use by the argp implementation.
61391 -\x1f
61392 -File: libc.info, Node: Argp Children, Next: Argp Help Filtering, Prev: Argp Parser Functions, Up: Argp Parsers
61394 -Combining Multiple Argp Parsers
61395 --------------------------------
61397 - The `children' field in a `struct argp' enables other argp parsers
61398 -to be combined with the referencing one for the parsing of a single set
61399 -of arguments. This field should point to a vector of `struct
61400 -argp_child', which is terminated by an entry having a value of zero in
61401 -the `argp' field.
61403 - Where conflicts between combined parsers arise, as when two specify
61404 -an option with the same name, the parser conflicts are resolved in
61405 -favor of the parent argp parser(s), or the earlier of the argp parsers
61406 -in the list of children.
61408 - - Data Type: struct argp_child
61409 - An entry in the list of subsidiary argp parsers pointed to by the
61410 - `children' field in a `struct argp'. The fields are as follows:
61412 - `const struct argp *argp'
61413 - The child argp parser, or zero to end of the list.
61415 - `int flags'
61416 - Flags for this child.
61418 - `const char *header'
61419 - If non-zero, this is an optional header to be printed within
61420 - help output before the child options. As a side-effect, a
61421 - non-zero value forces the child options to be grouped
61422 - together. To achieve this effect without actually printing a
61423 - header string, use a value of `""'. As with header strings
61424 - specified in an option entry, the conventional value of the
61425 - last character is `:'. *Note Argp Option Vectors::.
61427 - `int group'
61428 - This is where the child options are grouped relative to the
61429 - other `consolidated' options in the parent argp parser. The
61430 - values are the same as the `group' field in `struct
61431 - argp_option'. *Note Argp Option Vectors::. All
61432 - child-groupings follow parent options at a particular group
61433 - level. If both this field and `header' are zero, then the
61434 - child's options aren't grouped together, they are merged with
61435 - parent options at the parent option group level.
61438 -\x1f
61439 -File: libc.info, Node: Argp Flags, Next: Argp Help, Prev: Argp Parsers, Up: Argp
61441 -Flags for `argp_parse'
61442 -----------------------
61444 - The default behavior of `argp_parse' is designed to be convenient
61445 -for the most common case of parsing program command line argument. To
61446 -modify these defaults, the following flags may be or'd together in the
61447 -FLAGS argument to `argp_parse':
61449 -`ARGP_PARSE_ARGV0'
61450 - Don't ignore the first element of the ARGV argument to
61451 - `argp_parse'. Unless `ARGP_NO_ERRS' is set, the first element of
61452 - the argument vector is skipped for option parsing purposes, as it
61453 - corresponds to the program name in a command line.
61455 -`ARGP_NO_ERRS'
61456 - Don't print error messages for unknown options to `stderr'; unless
61457 - this flag is set, `ARGP_PARSE_ARGV0' is ignored, as `argv[0]' is
61458 - used as the program name in the error messages. This flag implies
61459 - `ARGP_NO_EXIT'. This is based on the assumption that silent
61460 - exiting upon errors is bad behavior.
61462 -`ARGP_NO_ARGS'
61463 - Don't parse any non-option args. Normally these are parsed by
61464 - calling the parse functions with a key of `ARGP_KEY_ARG', the
61465 - actual argument being the value. This flag needn't normally be
61466 - set, as the default behavior is to stop parsing as soon as an
61467 - argument fails to be parsed. *Note Argp Parser Functions::.
61469 -`ARGP_IN_ORDER'
61470 - Parse options and arguments in the same order they occur on the
61471 - command line. Normally they're rearranged so that all options
61472 - come first.
61474 -`ARGP_NO_HELP'
61475 - Don't provide the standard long option `--help', which ordinarily
61476 - causes usage and option help information to be output to `stdout'
61477 - and `exit (0)'.
61479 -`ARGP_NO_EXIT'
61480 - Don't exit on errors, although they may still result in error
61481 - messages.
61483 -`ARGP_LONG_ONLY'
61484 - Use the gnu getopt `long-only' rules for parsing arguments. This
61485 - allows long-options to be recognized with only a single `-' (i.e.
61486 - `-help'). This results in a less useful interface, and its use is
61487 - discouraged as it conflicts with the way most GNU programs work as
61488 - well as the GNU coding standards.
61490 -`ARGP_SILENT'
61491 - Turns off any message-printing/exiting options, specifically
61492 - `ARGP_NO_EXIT', `ARGP_NO_ERRS', and `ARGP_NO_HELP'.
61494 -\x1f
61495 -File: libc.info, Node: Argp Help Filtering, Prev: Argp Children, Up: Argp Parsers
61497 -Customizing Argp Help Output
61498 -----------------------------
61500 - The `help_filter' field in a `struct argp' is a pointer to a
61501 -function that filters the text of help messages before displaying them.
61502 -They have a function signature like:
61504 - char *HELP-FILTER (int KEY, const char *TEXT, void *INPUT)
61506 -Where KEY is either a key from an option, in which case TEXT is that
61507 -option's help text. *Note Argp Option Vectors::. Alternately, one of
61508 -the special keys with names beginning with `ARGP_KEY_HELP_' might be
61509 -used, describing which other help text TEXT will contain. *Note Argp
61510 -Help Filter Keys::.
61512 - The function should return either TEXT if it remains as-is, or a
61513 -replacement string allocated using `malloc'. This will be either be
61514 -freed by argp or zero, which prints nothing. The value of TEXT is
61515 -supplied _after_ any translation has been done, so if any of the
61516 -replacement text needs translation, it will be done by the filter
61517 -function. INPUT is either the input supplied to `argp_parse' or it is
61518 -zero, if `argp_help' was called directly by the user.
61520 -* Menu:
61522 -* Keys: Argp Help Filter Keys. Special KEY values for help filter functions.
61524 -\x1f
61525 -File: libc.info, Node: Argp Help Filter Keys, Up: Argp Help Filtering
61527 -Special Keys for Argp Help Filter Functions
61528 -...........................................
61530 - The following special values may be passed to an argp help filter
61531 -function as the first argument in addition to key values for user
61532 -options. They specify which help text the TEXT argument contains:
61534 -`ARGP_KEY_HELP_PRE_DOC'
61535 - The help text preceding options.
61537 -`ARGP_KEY_HELP_POST_DOC'
61538 - The help text following options.
61540 -`ARGP_KEY_HELP_HEADER'
61541 - The option header string.
61543 -`ARGP_KEY_HELP_EXTRA'
61544 - This is used after all other documentation; TEXT is zero for this
61545 - key.
61547 -`ARGP_KEY_HELP_DUP_ARGS_NOTE'
61548 - The explanatory note printed when duplicate option arguments have
61549 - been suppressed.
61551 -`ARGP_KEY_HELP_ARGS_DOC'
61552 - The argument doc string; formally the `args_doc' field from the
61553 - argp parser. *Note Argp Parsers::.
61555 -\x1f
61556 -File: libc.info, Node: Argp Help, Next: Argp Examples, Prev: Argp Flags, Up: Argp
61558 -The `argp_help' Function
61559 -------------------------
61561 - Normally programs using argp need not be written with particular
61562 -printing argument-usage-type help messages in mind as the standard
61563 -`--help' option is handled automatically by argp. Typical error cases
61564 -can be handled using `argp_usage' and `argp_error'. *Note Argp Helper
61565 -Functions::. However, if it's desirable to print a help message in
61566 -some context other than parsing the program options, argp offers the
61567 -`argp_help' interface.
61569 - - Function: void argp_help (const struct argp *ARGP, FILE *STREAM,
61570 - unsigned FLAGS, char *NAME)
61571 - This outputs a help message for the argp parser ARGP to STREAM.
61572 - The type of messages printed will be determined by FLAGS.
61574 - Any options such as `--help' that are implemented automatically by
61575 - argp itself will _not_ be present in the help output; for this
61576 - reason it is best to use `argp_state_help' if calling from within
61577 - an argp parser function. *Note Argp Helper Functions::.
61579 -* Menu:
61581 -* Flags: Argp Help Flags. Specifying what sort of help message to print.
61583 -\x1f
61584 -File: libc.info, Node: Argp Help Flags, Up: Argp Help
61586 -Flags for the `argp_help' Function
61587 -----------------------------------
61589 - When calling `argp_help' (*note Argp Help::) or `argp_state_help'
61590 -(*note Argp Helper Functions::) the exact output is determined by the
61591 -FLAGS argument. This should consist of any of the following flags,
61592 -or'd together:
61594 -`ARGP_HELP_USAGE'
61595 - A unix `Usage:' message that explicitly lists all options.
61597 -`ARGP_HELP_SHORT_USAGE'
61598 - A unix `Usage:' message that displays an appropriate placeholder to
61599 - indicate where the options go; useful for showing the non-option
61600 - argument syntax.
61602 -`ARGP_HELP_SEE'
61603 - A `Try ... for more help' message; `...' contains the program name
61604 - and `--help'.
61606 -`ARGP_HELP_LONG'
61607 - A verbose option help message that gives each option available
61608 - along with its documentation string.
61610 -`ARGP_HELP_PRE_DOC'
61611 - The part of the argp parser doc string preceding the verbose
61612 - option help.
61614 -`ARGP_HELP_POST_DOC'
61615 - The part of the argp parser doc string that following the verbose
61616 - option help.
61618 -`ARGP_HELP_DOC'
61619 - `(ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)'
61621 -`ARGP_HELP_BUG_ADDR'
61622 - A message that prints where to report bugs for this program, if the
61623 - `argp_program_bug_address' variable contains this information.
61625 -`ARGP_HELP_LONG_ONLY'
61626 - This will modify any output to reflect the `ARGP_LONG_ONLY' mode.
61628 - The following flags are only understood when used with
61629 -`argp_state_help'. They control whether the function returns after
61630 -printing its output, or terminates the program:
61632 -`ARGP_HELP_EXIT_ERR'
61633 - This will terminate the program with `exit (argp_err_exit_status)'.
61635 -`ARGP_HELP_EXIT_OK'
61636 - This will terminate the program with `exit (0)'.
61638 - The following flags are combinations of the basic flags for printing
61639 -standard messages:
61641 -`ARGP_HELP_STD_ERR'
61642 - Assuming that an error message for a parsing error has printed,
61643 - this prints a message on how to get help, and terminates the
61644 - program with an error.
61646 -`ARGP_HELP_STD_USAGE'
61647 - This prints a standard usage message and terminates the program
61648 - with an error. This is used when no other specific error messages
61649 - are appropriate or available.
61651 -`ARGP_HELP_STD_HELP'
61652 - This prints the standard response for a `--help' option, and
61653 - terminates the program successfully.
61655 -\x1f
61656 -File: libc.info, Node: Argp Examples, Next: Argp User Customization, Prev: Argp Help, Up: Argp
61658 -Argp Examples
61659 --------------
61661 - These example programs demonstrate the basic usage of argp.
61663 -* Menu:
61665 -* 1: Argp Example 1. A minimal program using argp.
61666 -* 2: Argp Example 2. A program using only default options.
61667 -* 3: Argp Example 3. A simple program with user options.
61668 -* 4: Argp Example 4. Combining multiple argp parsers.
61670 -\x1f
61671 -File: libc.info, Node: Argp Example 1, Next: Argp Example 2, Up: Argp Examples
61673 -A Minimal Program Using Argp
61674 -............................
61676 - This is perhaps the smallest program possible that uses argp. It
61677 -won't do much except give an error messages and exit when there are any
61678 -arguments, and prints a rather pointless message for `--help'.
61680 - /* Argp example #1 - a minimal program using argp */
61682 - /* This is (probably) the smallest possible program that
61683 - uses argp. It won't do much except give an error
61684 - messages and exit when there are any arguments, and print
61685 - a (rather pointless) messages for -help. */
61687 - #include <argp.h>
61689 - int main (int argc, char **argv)
61691 - argp_parse (0, argc, argv, 0, 0, 0);
61692 - exit (0);
61695 -\x1f
61696 -File: libc.info, Node: Argp Example 2, Next: Argp Example 3, Prev: Argp Example 1, Up: Argp Examples
61698 -A Program Using Argp with Only Default Options
61699 -..............................................
61701 - This program doesn't use any options or arguments, it uses argp to be
61702 -compliant with the GNU standard command line format.
61704 - In addition to giving no arguments and implementing a `--help'
61705 -option, this example has a `--version' option, which will put the given
61706 -documentation string and bug address in the `--help' output, as per GNU
61707 -standards.
61709 - The variable `argp' contains the argument parser specification.
61710 -Adding fields to this structure is the way most parameters are passed
61711 -to `argp_parse'. The first three fields are normally used, but they
61712 -are not in this small program. There are also two global variables
61713 -that argp can use defined here, `argp_program_version' and
61714 -`argp_program_bug_address'. They are considered global variables
61715 -because they will almost always be constant for a given program, even
61716 -if they use different argument parsers for various tasks.
61718 - /* Argp example #2 - a pretty minimal program using argp */
61720 - /* This program doesn't use any options or arguments, but uses
61721 - argp to be compliant with the GNU standard command line
61722 - format.
61724 - In addition to making sure no arguments are given, and
61725 - implementing a -help option, this example will have a
61726 - -version option, and will put the given documentation string
61727 - and bug address in the -help output, as per GNU standards.
61729 - The variable ARGP contains the argument parser specification;
61730 - adding fields to this structure is the way most parameters are
61731 - passed to argp_parse (the first three fields are usually used,
61732 - but not in this small program). There are also two global
61733 - variables that argp knows about defined here,
61734 - ARGP_PROGRAM_VERSION and ARGP_PROGRAM_BUG_ADDRESS (they are
61735 - global variables because they will almost always be constant
61736 - for a given program, even if it uses different argument
61737 - parsers for various tasks). */
61739 - #include <argp.h>
61741 - const char *argp_program_version =
61742 - "argp-ex2 1.0";
61743 - const char *argp_program_bug_address =
61744 - "<bug-gnu-utils@gnu.org>";
61746 - /* Program documentation. */
61747 - static char doc[] =
61748 - "Argp example #2 -- a pretty minimal program using argp";
61750 - /* Our argument parser. The `options', `parser', and
61751 - `args_doc' fields are zero because we have neither options or
61752 - arguments; `doc' and `argp_program_bug_address' will be
61753 - used in the output for `--help', and the `--version'
61754 - option will print out `argp_program_version'. */
61755 - static struct argp argp = { 0, 0, 0, doc };
61757 - int main (int argc, char **argv)
61759 - argp_parse (&argp, argc, argv, 0, 0, 0);
61760 - exit (0);
61763 -\x1f
61764 -File: libc.info, Node: Argp Example 3, Next: Argp Example 4, Prev: Argp Example 2, Up: Argp Examples
61766 -A Program Using Argp with User Options
61767 -......................................
61769 - This program uses the same features as example 2, adding user options
61770 -and arguments.
61772 - We now use the first four fields in `argp' (*note Argp Parsers::)
61773 -and specify `parse_opt' as the parser function. *Note Argp Parser
61774 -Functions::.
61776 - Note that in this example, `main' uses a structure to communicate
61777 -with the `parse_opt' function, a pointer to which it passes in the
61778 -`input' argument to `argp_parse'. *Note Argp::. It is retrieved by
61779 -`parse_opt' through the `input' field in its `state' argument. *Note
61780 -Argp Parsing State::. Of course, it's also possible to use global
61781 -variables instead, but using a structure like this is somewhat more
61782 -flexible and clean.
61784 - /* Argp example #3 - a program with options and arguments using argp */
61786 - /* This program uses the same features as example 2, and uses options and
61787 - arguments.
61789 - We now use the first four fields in ARGP, so here's a description of them:
61790 - OPTIONS - A pointer to a vector of struct argp_option (see below)
61791 - PARSER - A function to parse a single option, called by argp
61792 - ARGS_DOC - A string describing how the non-option arguments should look
61793 - DOC - A descriptive string about this program; if it contains a
61794 - vertical tab character (\v), the part after it will be
61795 - printed *following* the options
61797 - The function PARSER takes the following arguments:
61798 - KEY - An integer specifying which option this is (taken
61799 - from the KEY field in each struct argp_option), or
61800 - a special key specifying something else; the only
61801 - special keys we use here are ARGP_KEY_ARG, meaning
61802 - a non-option argument, and ARGP_KEY_END, meaning
61803 - that all arguments have been parsed
61804 - ARG - For an option KEY, the string value of its
61805 - argument, or NULL if it has none
61806 - STATE- A pointer to a struct argp_state, containing
61807 - various useful information about the parsing state; used here
61808 - are the INPUT field, which reflects the INPUT argument to
61809 - argp_parse, and the ARG_NUM field, which is the number of the
61810 - current non-option argument being parsed
61811 - It should return either 0, meaning success, ARGP_ERR_UNKNOWN, meaning the
61812 - given KEY wasn't recognized, or an errno value indicating some other
61813 - error.
61815 - Note that in this example, main uses a structure to communicate with the
61816 - parse_opt function, a pointer to which it passes in the INPUT argument to
61817 - argp_parse. Of course, it's also possible to use global variables
61818 - instead, but this is somewhat more flexible.
61820 - The OPTIONS field contains a pointer to a vector of struct argp_option's;
61821 - that structure has the following fields (if you assign your option
61822 - structures using array initialization like this example, unspecified
61823 - fields will be defaulted to 0, and need not be specified):
61824 - NAME - The name of this option's long option (may be zero)
61825 - KEY - The KEY to pass to the PARSER function when parsing this option,
61826 - *and* the name of this option's short option, if it is a
61827 - printable ascii character
61828 - ARG - The name of this option's argument, if any
61829 - FLAGS - Flags describing this option; some of them are:
61830 - OPTION_ARG_OPTIONAL - The argument to this option is optional
61831 - OPTION_ALIAS - This option is an alias for the
61832 - previous option
61833 - OPTION_HIDDEN - Don't show this option in -help output
61834 - DOC - A documentation string for this option, shown in -help output
61836 - An options vector should be terminated by an option with all fields zero. */
61838 - #include <argp.h>
61840 - const char *argp_program_version =
61841 - "argp-ex3 1.0";
61842 - const char *argp_program_bug_address =
61843 - "<bug-gnu-utils@gnu.org>";
61845 - /* Program documentation. */
61846 - static char doc[] =
61847 - "Argp example #3 -- a program with options and arguments using argp";
61849 - /* A description of the arguments we accept. */
61850 - static char args_doc[] = "ARG1 ARG2";
61852 - /* The options we understand. */
61853 - static struct argp_option options[] = {
61854 - {"verbose", 'v', 0, 0, "Produce verbose output" },
61855 - {"quiet", 'q', 0, 0, "Don't produce any output" },
61856 - {"silent", 's', 0, OPTION_ALIAS },
61857 - {"output", 'o', "FILE", 0,
61858 - "Output to FILE instead of standard output" },
61859 - { 0 }
61860 - };
61862 - /* Used by `main' to communicate with `parse_opt'. */
61863 - struct arguments
61865 - char *args[2]; /* ARG1 & ARG2 */
61866 - int silent, verbose;
61867 - char *output_file;
61868 - };
61870 - /* Parse a single option. */
61871 - static error_t
61872 - parse_opt (int key, char *arg, struct argp_state *state)
61874 - /* Get the INPUT argument from `argp_parse', which we
61875 - know is a pointer to our arguments structure. */
61876 - struct arguments *arguments = state->input;
61878 - switch (key)
61880 - case 'q': case 's':
61881 - arguments->silent = 1;
61882 - break;
61883 - case 'v':
61884 - arguments->verbose = 1;
61885 - break;
61886 - case 'o':
61887 - arguments->output_file = arg;
61888 - break;
61890 - case ARGP_KEY_ARG:
61891 - if (state->arg_num >= 2)
61892 - /* Too many arguments. */
61893 - argp_usage (state);
61895 - arguments->args[state->arg_num] = arg;
61897 - break;
61899 - case ARGP_KEY_END:
61900 - if (state->arg_num < 2)
61901 - /* Not enough arguments. */
61902 - argp_usage (state);
61903 - break;
61905 - default:
61906 - return ARGP_ERR_UNKNOWN;
61908 - return 0;
61911 - /* Our argp parser. */
61912 - static struct argp argp = { options, parse_opt, args_doc, doc };
61914 - int main (int argc, char **argv)
61916 - struct arguments arguments;
61918 - /* Default values. */
61919 - arguments.silent = 0;
61920 - arguments.verbose = 0;
61921 - arguments.output_file = "-";
61923 - /* Parse our arguments; every option seen by `parse_opt' will
61924 - be reflected in `arguments'. */
61925 - argp_parse (&argp, argc, argv, 0, 0, &arguments);
61927 - printf ("ARG1 = %s\nARG2 = %s\nOUTPUT_FILE = %s\n"
61928 - "VERBOSE = %s\nSILENT = %s\n",
61929 - arguments.args[0], arguments.args[1],
61930 - arguments.output_file,
61931 - arguments.verbose ? "yes" : "no",
61932 - arguments.silent ? "yes" : "no");
61934 - exit (0);
61937 diff -u -udbrN glibc-2.3.2/manual/libc.info-43 glibc-2.3.2-200304020432/manual/libc.info-43
61938 --- glibc-2.3.2/manual/libc.info-43 Sat Mar 1 02:39:41 2003
61939 +++ glibc-2.3.2-200304020432/manual/libc.info-43 Thu Jan 1 01:00:00 1970
61940 @@ -1,1256 +0,0 @@
61941 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
61943 -INFO-DIR-SECTION GNU libraries
61944 -START-INFO-DIR-ENTRY
61945 -* Libc: (libc). C library.
61946 -END-INFO-DIR-ENTRY
61948 - This file documents the GNU C library.
61950 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
61951 -Reference Manual', for Version 2.3.x.
61953 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
61954 -Free Software Foundation, Inc.
61956 - Permission is granted to copy, distribute and/or modify this document
61957 -under the terms of the GNU Free Documentation License, Version 1.1 or
61958 -any later version published by the Free Software Foundation; with the
61959 -Invariant Sections being "Free Software Needs Free Documentation" and
61960 -"GNU Lesser General Public License", the Front-Cover texts being (a)
61961 -(see below), and with the Back-Cover Texts being (b) (see below). A
61962 -copy of the license is included in the section entitled "GNU Free
61963 -Documentation License".
61965 - (a) The FSF's Front-Cover Text is:
61967 - A GNU Manual
61969 - (b) The FSF's Back-Cover Text is:
61971 - You have freedom to copy and modify this GNU Manual, like GNU
61972 -software. Copies published by the Free Software Foundation raise
61973 -funds for GNU development.
61975 -\x1f
61976 -File: libc.info, Node: Argp Example 4, Prev: Argp Example 3, Up: Argp Examples
61978 -A Program Using Multiple Combined Argp Parsers
61979 -..............................................
61981 - This program uses the same features as example 3, but has more
61982 -options, and presents more structure in the `--help' output. It also
61983 -illustrates how you can `steal' the remainder of the input arguments
61984 -past a certain point for programs that accept a list of items. It also
61985 -illustrates the KEY value `ARGP_KEY_NO_ARGS', which is only given if no
61986 -non-option arguments were supplied to the program. *Note Argp Special
61987 -Keys::.
61989 - For structuring help output, two features are used: _headers_ and a
61990 -two part option string. The _headers_ are entries in the options
61991 -vector. *Note Argp Option Vectors::. The first four fields are zero.
61992 -The two part documentation string are in the variable `doc', which
61993 -allows documentation both before and after the options. *Note Argp
61994 -Parsers::, the two parts of `doc' are separated by a vertical-tab
61995 -character (`'\v'', or `'\013''). By convention, the documentation
61996 -before the options is a short string stating what the program does, and
61997 -after any options it is longer, describing the behavior in more detail.
61998 -All documentation strings are automatically filled for output,
61999 -although newlines may be included to force a line break at a particular
62000 -point. In addition, documentation strings are passed to the `gettext'
62001 -function, for possible translation into the current locale.
62003 - /* Argp example #4 - a program with somewhat more complicated options */
62005 - /* This program uses the same features as example 3, but has more
62006 - options, and somewhat more structure in the -help output. It
62007 - also shows how you can `steal' the remainder of the input
62008 - arguments past a certain point, for programs that accept a
62009 - list of items. It also shows the special argp KEY value
62010 - ARGP_KEY_NO_ARGS, which is only given if no non-option
62011 - arguments were supplied to the program.
62013 - For structuring the help output, two features are used,
62014 - *headers* which are entries in the options vector with the
62015 - first four fields being zero, and a two part documentation
62016 - string (in the variable DOC), which allows documentation both
62017 - before and after the options; the two parts of DOC are
62018 - separated by a vertical-tab character ('\v', or '\013'). By
62019 - convention, the documentation before the options is just a
62020 - short string saying what the program does, and that afterwards
62021 - is longer, describing the behavior in more detail. All
62022 - documentation strings are automatically filled for output,
62023 - although newlines may be included to force a line break at a
62024 - particular point. All documentation strings are also passed to
62025 - the `gettext' function, for possible translation into the
62026 - current locale. */
62028 - #include <stdlib.h>
62029 - #include <error.h>
62030 - #include <argp.h>
62032 - const char *argp_program_version =
62033 - "argp-ex4 1.0";
62034 - const char *argp_program_bug_address =
62035 - "<bug-gnu-utils@prep.ai.mit.edu>";
62037 - /* Program documentation. */
62038 - static char doc[] =
62039 - "Argp example #4 -- a program with somewhat more complicated\
62040 - options\
62041 - \vThis part of the documentation comes *after* the options;\
62042 - note that the text is automatically filled, but it's possible\
62043 - to force a line-break, e.g.\n<-- here.";
62045 - /* A description of the arguments we accept. */
62046 - static char args_doc[] = "ARG1 [STRING...]";
62048 - /* Keys for options without short-options. */
62049 - #define OPT_ABORT 1 /* -abort */
62051 - /* The options we understand. */
62052 - static struct argp_option options[] = {
62053 - {"verbose", 'v', 0, 0, "Produce verbose output" },
62054 - {"quiet", 'q', 0, 0, "Don't produce any output" },
62055 - {"silent", 's', 0, OPTION_ALIAS },
62056 - {"output", 'o', "FILE", 0,
62057 - "Output to FILE instead of standard output" },
62059 - {0,0,0,0, "The following options should be grouped together:" },
62060 - {"repeat", 'r', "COUNT", OPTION_ARG_OPTIONAL,
62061 - "Repeat the output COUNT (default 10) times"},
62062 - {"abort", OPT_ABORT, 0, 0, "Abort before showing any output"},
62064 - { 0 }
62065 - };
62067 - /* Used by `main' to communicate with `parse_opt'. */
62068 - struct arguments
62070 - char *arg1; /* ARG1 */
62071 - char **strings; /* [STRING...] */
62072 - int silent, verbose, abort; /* `-s', `-v', `--abort' */
62073 - char *output_file; /* FILE arg to `--output' */
62074 - int repeat_count; /* COUNT arg to `--repeat' */
62075 - };
62077 - /* Parse a single option. */
62078 - static error_t
62079 - parse_opt (int key, char *arg, struct argp_state *state)
62081 - /* Get the `input' argument from `argp_parse', which we
62082 - know is a pointer to our arguments structure. */
62083 - struct arguments *arguments = state->input;
62085 - switch (key)
62087 - case 'q': case 's':
62088 - arguments->silent = 1;
62089 - break;
62090 - case 'v':
62091 - arguments->verbose = 1;
62092 - break;
62093 - case 'o':
62094 - arguments->output_file = arg;
62095 - break;
62096 - case 'r':
62097 - arguments->repeat_count = arg ? atoi (arg) : 10;
62098 - break;
62099 - case OPT_ABORT:
62100 - arguments->abort = 1;
62101 - break;
62103 - case ARGP_KEY_NO_ARGS:
62104 - argp_usage (state);
62106 - case ARGP_KEY_ARG:
62107 - /* Here we know that `state->arg_num == 0', since we
62108 - force argument parsing to end before any more arguments can
62109 - get here. */
62110 - arguments->arg1 = arg;
62112 - /* Now we consume all the rest of the arguments.
62113 - `state->next' is the index in `state->argv' of the
62114 - next argument to be parsed, which is the first STRING
62115 - we're interested in, so we can just use
62116 - `&state->argv[state->next]' as the value for
62117 - arguments->strings.
62119 - _In addition_, by setting `state->next' to the end
62120 - of the arguments, we can force argp to stop parsing here and
62121 - return. */
62122 - arguments->strings = &state->argv[state->next];
62123 - state->next = state->argc;
62125 - break;
62127 - default:
62128 - return ARGP_ERR_UNKNOWN;
62130 - return 0;
62133 - /* Our argp parser. */
62134 - static struct argp argp = { options, parse_opt, args_doc, doc };
62136 - int main (int argc, char **argv)
62138 - int i, j;
62139 - struct arguments arguments;
62141 - /* Default values. */
62142 - arguments.silent = 0;
62143 - arguments.verbose = 0;
62144 - arguments.output_file = "-";
62145 - arguments.repeat_count = 1;
62146 - arguments.abort = 0;
62148 - /* Parse our arguments; every option seen by `parse_opt' will be
62149 - reflected in `arguments'. */
62150 - argp_parse (&argp, argc, argv, 0, 0, &arguments);
62152 - if (arguments.abort)
62153 - error (10, 0, "ABORTED");
62155 - for (i = 0; i < arguments.repeat_count; i++)
62157 - printf ("ARG1 = %s\n", arguments.arg1);
62158 - printf ("STRINGS = ");
62159 - for (j = 0; arguments.strings[j]; j++)
62160 - printf (j == 0 ? "%s" : ", %s", arguments.strings[j]);
62161 - printf ("\n");
62162 - printf ("OUTPUT_FILE = %s\nVERBOSE = %s\nSILENT = %s\n",
62163 - arguments.output_file,
62164 - arguments.verbose ? "yes" : "no",
62165 - arguments.silent ? "yes" : "no");
62168 - exit (0);
62171 -\x1f
62172 -File: libc.info, Node: Argp User Customization, Prev: Argp Examples, Up: Argp
62174 -Argp User Customization
62175 ------------------------
62177 - The formatting of argp `--help' output may be controlled to some
62178 -extent by a program's users, by setting the `ARGP_HELP_FMT' environment
62179 -variable to a comma-separated list of tokens. Whitespace is ignored:
62181 -`dup-args'
62182 -`no-dup-args'
62183 - These turn "duplicate-argument-mode" on or off. In duplicate
62184 - argument mode, if an option that accepts an argument has multiple
62185 - names, the argument is shown for each name. Otherwise, it is only
62186 - shown for the first long option. A note is subsequently printed
62187 - so the user knows that it applies to other names as well. The
62188 - default is `no-dup-args', which is less consistent, but prettier.
62190 -`dup-args-note'
62192 -`no-dup-args-note'
62193 - These will enable or disable the note informing the user of
62194 - suppressed option argument duplication. The default is
62195 - `dup-args-note'.
62197 -`short-opt-col=N'
62198 - This prints the first short option in column N. The default is 2.
62200 -`long-opt-col=N'
62201 - This prints the first long option in column N. The default is 6.
62203 -`doc-opt-col=N'
62204 - This prints `documentation options' (*note Argp Option Flags::) in
62205 - column N. The default is 2.
62207 -`opt-doc-col=N'
62208 - This prints the documentation for options starting in column N.
62209 - The default is 29.
62211 -`header-col=N'
62212 - This will indent the group headers that document groups of options
62213 - to column N. The default is 1.
62215 -`usage-indent=N'
62216 - This will indent continuation lines in `Usage:' messages to column
62217 - N. The default is 12.
62219 -`rmargin=N'
62220 - This will word wrap help output at or before column N. The default
62221 - is 79.
62223 -\x1f
62224 -File: libc.info, Node: Suboptions, Next: Suboptions Example, Prev: Argp, Up: Parsing Program Arguments
62226 -Parsing of Suboptions
62227 -.....................
62229 - Having a single level of options is sometimes not enough. There
62230 -might be too many options which have to be available or a set of
62231 -options is closely related.
62233 - For this case some programs use suboptions. One of the most
62234 -prominent programs is certainly `mount'(8). The `-o' option take one
62235 -argument which itself is a comma separated list of options. To ease the
62236 -programming of code like this the function `getsubopt' is available.
62238 - - Function: int getsubopt (char **OPTIONP, const char* const *TOKENS,
62239 - char **VALUEP)
62240 - The OPTIONP parameter must be a pointer to a variable containing
62241 - the address of the string to process. When the function returns
62242 - the reference is updated to point to the next suboption or to the
62243 - terminating `\0' character if there is no more suboption available.
62245 - The TOKENS parameter references an array of strings containing the
62246 - known suboptions. All strings must be `\0' terminated and to mark
62247 - the end a null pointer must be stored. When `getsubopt' finds a
62248 - possible legal suboption it compares it with all strings available
62249 - in the TOKENS array and returns the index in the string as the
62250 - indicator.
62252 - In case the suboption has an associated value introduced by a `='
62253 - character, a pointer to the value is returned in VALUEP. The
62254 - string is `\0' terminated. If no argument is available VALUEP is
62255 - set to the null pointer. By doing this the caller can check
62256 - whether a necessary value is given or whether no unexpected value
62257 - is present.
62259 - In case the next suboption in the string is not mentioned in the
62260 - TOKENS array the starting address of the suboption including a
62261 - possible value is returned in VALUEP and the return value of the
62262 - function is `-1'.
62264 -\x1f
62265 -File: libc.info, Node: Suboptions Example, Prev: Suboptions, Up: Parsing Program Arguments
62267 -Parsing of Suboptions Example
62268 ------------------------------
62270 - The code which might appear in the `mount'(8) program is a perfect
62271 -example of the use of `getsubopt':
62273 - #include <stdio.h>
62274 - #include <stdlib.h>
62275 - #include <unistd.h>
62277 - int do_all;
62278 - const char *type;
62279 - int read_size;
62280 - int write_size;
62281 - int read_only;
62283 - enum
62285 - RO_OPTION = 0,
62286 - RW_OPTION,
62287 - READ_SIZE_OPTION,
62288 - WRITE_SIZE_OPTION,
62289 - THE_END
62290 - };
62292 - const char *mount_opts[] =
62294 - [RO_OPTION] = "ro",
62295 - [RW_OPTION] = "rw",
62296 - [READ_SIZE_OPTION] = "rsize",
62297 - [WRITE_SIZE_OPTION] = "wsize",
62298 - [THE_END] = NULL
62299 - };
62301 - int
62302 - main (int argc, char *argv[])
62304 - char *subopts, *value;
62305 - int opt;
62307 - while ((opt = getopt (argc, argv, "at:o:")) != -1)
62308 - switch (opt)
62310 - case 'a':
62311 - do_all = 1;
62312 - break;
62313 - case 't':
62314 - type = optarg;
62315 - break;
62316 - case 'o':
62317 - subopts = optarg;
62318 - while (*subopts != '\0')
62319 - switch (getsubopt (&subopts, mount_opts, &value))
62321 - case RO_OPTION:
62322 - read_only = 1;
62323 - break;
62324 - case RW_OPTION:
62325 - read_only = 0;
62326 - break;
62327 - case READ_SIZE_OPTION:
62328 - if (value == NULL)
62329 - abort ();
62330 - read_size = atoi (value);
62331 - break;
62332 - case WRITE_SIZE_OPTION:
62333 - if (value == NULL)
62334 - abort ();
62335 - write_size = atoi (value);
62336 - break;
62337 - default:
62338 - /* Unknown suboption. */
62339 - printf ("Unknown suboption `%s'\n", value);
62340 - break;
62342 - break;
62343 - default:
62344 - abort ();
62347 - /* Do the real work. */
62349 - return 0;
62352 -\x1f
62353 -File: libc.info, Node: Environment Variables, Next: System Calls, Prev: Program Arguments, Up: Program Basics
62355 -Environment Variables
62356 -=====================
62358 - When a program is executed, it receives information about the
62359 -context in which it was invoked in two ways. The first mechanism uses
62360 -the ARGV and ARGC arguments to its `main' function, and is discussed in
62361 -*Note Program Arguments::. The second mechanism uses "environment
62362 -variables" and is discussed in this section.
62364 - The ARGV mechanism is typically used to pass command-line arguments
62365 -specific to the particular program being invoked. The environment, on
62366 -the other hand, keeps track of information that is shared by many
62367 -programs, changes infrequently, and that is less frequently used.
62369 - The environment variables discussed in this section are the same
62370 -environment variables that you set using assignments and the `export'
62371 -command in the shell. Programs executed from the shell inherit all of
62372 -the environment variables from the shell.
62374 - Standard environment variables are used for information about the
62375 -user's home directory, terminal type, current locale, and so on; you
62376 -can define additional variables for other purposes. The set of all
62377 -environment variables that have values is collectively known as the
62378 -"environment".
62380 - Names of environment variables are case-sensitive and must not
62381 -contain the character `='. System-defined environment variables are
62382 -invariably uppercase.
62384 - The values of environment variables can be anything that can be
62385 -represented as a string. A value must not contain an embedded null
62386 -character, since this is assumed to terminate the string.
62388 -* Menu:
62390 -* Environment Access:: How to get and set the values of
62391 - environment variables.
62392 -* Standard Environment:: These environment variables have
62393 - standard interpretations.
62395 -\x1f
62396 -File: libc.info, Node: Environment Access, Next: Standard Environment, Up: Environment Variables
62398 -Environment Access
62399 -------------------
62401 - The value of an environment variable can be accessed with the
62402 -`getenv' function. This is declared in the header file `stdlib.h'.
62403 -All of the following functions can be safely used in multi-threaded
62404 -programs. It is made sure that concurrent modifications to the
62405 -environment do not lead to errors.
62407 - - Function: char * getenv (const char *NAME)
62408 - This function returns a string that is the value of the environment
62409 - variable NAME. You must not modify this string. In some non-Unix
62410 - systems not using the GNU library, it might be overwritten by
62411 - subsequent calls to `getenv' (but not by any other library
62412 - function). If the environment variable NAME is not defined, the
62413 - value is a null pointer.
62415 - - Function: int putenv (char *STRING)
62416 - The `putenv' function adds or removes definitions from the
62417 - environment. If the STRING is of the form `NAME=VALUE', the
62418 - definition is added to the environment. Otherwise, the STRING is
62419 - interpreted as the name of an environment variable, and any
62420 - definition for this variable in the environment is removed.
62422 - The difference to the `setenv' function is that the exact string
62423 - given as the parameter STRING is put into the environment. If the
62424 - user should change the string after the `putenv' call this will
62425 - reflect in automatically in the environment. This also requires
62426 - that STRING is no automatic variable which scope is left before the
62427 - variable is removed from the environment. The same applies of
62428 - course to dynamically allocated variables which are freed later.
62430 - This function is part of the extended Unix interface. Since it
62431 - was also available in old SVID libraries you should define either
62432 - _XOPEN_SOURCE or _SVID_SOURCE before including any header.
62434 - - Function: int setenv (const char *NAME, const char *VALUE, int
62435 - REPLACE)
62436 - The `setenv' function can be used to add a new definition to the
62437 - environment. The entry with the name NAME is replaced by the
62438 - value `NAME=VALUE'. Please note that this is also true if VALUE
62439 - is the empty string. To do this a new string is created and the
62440 - strings NAME and VALUE are copied. A null pointer for the VALUE
62441 - parameter is illegal. If the environment already contains an
62442 - entry with key NAME the REPLACE parameter controls the action. If
62443 - replace is zero, nothing happens. Otherwise the old entry is
62444 - replaced by the new one.
62446 - Please note that you cannot remove an entry completely using this
62447 - function.
62449 - This function was originally part of the BSD library but is now
62450 - part of the Unix standard.
62452 - - Function: int unsetenv (const char *NAME)
62453 - Using this function one can remove an entry completely from the
62454 - environment. If the environment contains an entry with the key
62455 - NAME this whole entry is removed. A call to this function is
62456 - equivalent to a call to `putenv' when the VALUE part of the string
62457 - is empty.
62459 - The function return `-1' if NAME is a null pointer, points to an
62460 - empty string, or points to a string containing a `=' character.
62461 - It returns `0' if the call succeeded.
62463 - This function was originally part of the BSD library but is now
62464 - part of the Unix standard. The BSD version had no return value,
62465 - though.
62467 - There is one more function to modify the whole environment. This
62468 -function is said to be used in the POSIX.9 (POSIX bindings for Fortran
62469 -77) and so one should expect it did made it into POSIX.1. But this
62470 -never happened. But we still provide this function as a GNU extension
62471 -to enable writing standard compliant Fortran environments.
62473 - - Function: int clearenv (void)
62474 - The `clearenv' function removes all entries from the environment.
62475 - Using `putenv' and `setenv' new entries can be added again later.
62477 - If the function is successful it returns `0'. Otherwise the return
62478 - value is nonzero.
62480 - You can deal directly with the underlying representation of
62481 -environment objects to add more variables to the environment (for
62482 -example, to communicate with another program you are about to execute;
62483 -*note Executing a File::).
62485 - - Variable: char ** environ
62486 - The environment is represented as an array of strings. Each
62487 - string is of the format `NAME=VALUE'. The order in which strings
62488 - appear in the environment is not significant, but the same NAME
62489 - must not appear more than once. The last element of the array is
62490 - a null pointer.
62492 - This variable is declared in the header file `unistd.h'.
62494 - If you just want to get the value of an environment variable, use
62495 - `getenv'.
62497 - Unix systems, and the GNU system, pass the initial value of
62498 -`environ' as the third argument to `main'. *Note Program Arguments::.
62500 -\x1f
62501 -File: libc.info, Node: Standard Environment, Prev: Environment Access, Up: Environment Variables
62503 -Standard Environment Variables
62504 -------------------------------
62506 - These environment variables have standard meanings. This doesn't
62507 -mean that they are always present in the environment; but if these
62508 -variables _are_ present, they have these meanings. You shouldn't try
62509 -to use these environment variable names for some other purpose.
62511 -`HOME'
62512 - This is a string representing the user's "home directory", or
62513 - initial default working directory.
62515 - The user can set `HOME' to any value. If you need to make sure to
62516 - obtain the proper home directory for a particular user, you should
62517 - not use `HOME'; instead, look up the user's name in the user
62518 - database (*note User Database::).
62520 - For most purposes, it is better to use `HOME', precisely because
62521 - this lets the user specify the value.
62523 -`LOGNAME'
62524 - This is the name that the user used to log in. Since the value in
62525 - the environment can be tweaked arbitrarily, this is not a reliable
62526 - way to identify the user who is running a program; a function like
62527 - `getlogin' (*note Who Logged In::) is better for that purpose.
62529 - For most purposes, it is better to use `LOGNAME', precisely because
62530 - this lets the user specify the value.
62532 -`PATH'
62533 - A "path" is a sequence of directory names which is used for
62534 - searching for a file. The variable `PATH' holds a path used for
62535 - searching for programs to be run.
62537 - The `execlp' and `execvp' functions (*note Executing a File::) use
62538 - this environment variable, as do many shells and other utilities
62539 - which are implemented in terms of those functions.
62541 - The syntax of a path is a sequence of directory names separated by
62542 - colons. An empty string instead of a directory name stands for the
62543 - current directory (*note Working Directory::).
62545 - A typical value for this environment variable might be a string
62546 - like:
62548 - :/bin:/etc:/usr/bin:/usr/new/X11:/usr/new:/usr/local/bin
62550 - This means that if the user tries to execute a program named `foo',
62551 - the system will look for files named `foo', `/bin/foo',
62552 - `/etc/foo', and so on. The first of these files that exists is
62553 - the one that is executed.
62555 -`TERM'
62556 - This specifies the kind of terminal that is receiving program
62557 - output. Some programs can make use of this information to take
62558 - advantage of special escape sequences or terminal modes supported
62559 - by particular kinds of terminals. Many programs which use the
62560 - termcap library (*note Find: (termcap)Finding a Terminal
62561 - Description.) use the `TERM' environment variable, for example.
62563 -`TZ'
62564 - This specifies the time zone. *Note TZ Variable::, for
62565 - information about the format of this string and how it is used.
62567 -`LANG'
62568 - This specifies the default locale to use for attribute categories
62569 - where neither `LC_ALL' nor the specific environment variable for
62570 - that category is set. *Note Locales::, for more information about
62571 - locales.
62573 -`LC_ALL'
62574 - If this environment variable is set it overrides the selection for
62575 - all the locales done using the other `LC_*' environment variables.
62576 - The value of the other `LC_*' environment variables is simply
62577 - ignored in this case.
62579 -`LC_COLLATE'
62580 - This specifies what locale to use for string sorting.
62582 -`LC_CTYPE'
62583 - This specifies what locale to use for character sets and character
62584 - classification.
62586 -`LC_MESSAGES'
62587 - This specifies what locale to use for printing messages and to
62588 - parse responses.
62590 -`LC_MONETARY'
62591 - This specifies what locale to use for formatting monetary values.
62593 -`LC_NUMERIC'
62594 - This specifies what locale to use for formatting numbers.
62596 -`LC_TIME'
62597 - This specifies what locale to use for formatting date/time values.
62599 -`NLSPATH'
62600 - This specifies the directories in which the `catopen' function
62601 - looks for message translation catalogs.
62603 -`_POSIX_OPTION_ORDER'
62604 - If this environment variable is defined, it suppresses the usual
62605 - reordering of command line arguments by `getopt' and `argp_parse'.
62606 - *Note Argument Syntax::.
62608 -\x1f
62609 -File: libc.info, Node: System Calls, Next: Program Termination, Prev: Environment Variables, Up: Program Basics
62611 -System Calls
62612 -============
62614 - A system call is a request for service that a program makes of the
62615 -kernel. The service is generally something that only the kernel has
62616 -the privilege to do, such as doing I/O. Programmers don't normally
62617 -need to be concerned with system calls because there are functions in
62618 -the GNU C library to do virtually everything that system calls do.
62619 -These functions work by making system calls themselves. For example,
62620 -there is a system call that changes the permissions of a file, but you
62621 -don't need to know about it because you can just use the GNU C
62622 -library's `chmod' function.
62624 - System calls are sometimes called kernel calls.
62626 - However, there are times when you want to make a system call
62627 -explicitly, and for that, the GNU C library provides the `syscall'
62628 -function. `syscall' is harder to use and less portable than functions
62629 -like `chmod', but easier and more portable than coding the system call
62630 -in assembler instructions.
62632 - `syscall' is most useful when you are working with a system call
62633 -which is special to your system or is newer than the GNU C library you
62634 -are using. `syscall' is implemented in an entirely generic way; the
62635 -function does not know anything about what a particular system call
62636 -does or even if it is valid.
62638 - The description of `syscall' in this section assumes a certain
62639 -protocol for system calls on the various platforms on which the GNU C
62640 -library runs. That protocol is not defined by any strong authority, but
62641 -we won't describe it here either because anyone who is coding `syscall'
62642 -probably won't accept anything less than kernel and C library source
62643 -code as a specification of the interface between them anyway.
62645 - `syscall' is declared in `unistd.h'.
62647 - - Function: long int syscall (long int SYSNO, ...)
62648 - `syscall' performs a generic system call.
62650 - SYSNO is the system call number. Each kind of system call is
62651 - identified by a number. Macros for all the possible system call
62652 - numbers are defined in `sys/syscall.h'
62654 - The remaining arguments are the arguments for the system call, in
62655 - order, and their meanings depend on the kind of system call. Each
62656 - kind of system call has a definite number of arguments, from zero
62657 - to five. If you code more arguments than the system call takes,
62658 - the extra ones to the right are ignored.
62660 - The return value is the return value from the system call, unless
62661 - the system call failed. In that case, `syscall' returns `-1' and
62662 - sets `errno' to an error code that the system call returned. Note
62663 - that system calls do not return `-1' when they succeed.
62665 - If you specify an invalid SYSNO, `syscall' returns `-1' with
62666 - `errno' = `ENOSYS'.
62668 - Example:
62671 - #include <unistd.h>
62672 - #include <sys/syscall.h>
62673 - #include <errno.h>
62675 - ...
62677 - int rc;
62679 - rc = syscall(SYS_chmod, "/etc/passwd", 0444);
62681 - if (rc == -1)
62682 - fprintf(stderr, "chmod failed, errno = %d\n", errno);
62684 - This, if all the compatibility stars are aligned, is equivalent to
62685 - the following preferable code:
62688 - #include <sys/types.h>
62689 - #include <sys/stat.h>
62690 - #include <errno.h>
62692 - ...
62694 - int rc;
62696 - rc = chmod("/etc/passwd", 0444);
62697 - if (rc == -1)
62698 - fprintf(stderr, "chmod failed, errno = %d\n", errno);
62701 -\x1f
62702 -File: libc.info, Node: Program Termination, Prev: System Calls, Up: Program Basics
62704 -Program Termination
62705 -===================
62707 - The usual way for a program to terminate is simply for its `main'
62708 -function to return. The "exit status value" returned from the `main'
62709 -function is used to report information back to the process's parent
62710 -process or shell.
62712 - A program can also terminate normally by calling the `exit' function.
62714 - In addition, programs can be terminated by signals; this is
62715 -discussed in more detail in *Note Signal Handling::. The `abort'
62716 -function causes a signal that kills the program.
62718 -* Menu:
62720 -* Normal Termination:: If a program calls `exit', a
62721 - process terminates normally.
62722 -* Exit Status:: The `exit status' provides information
62723 - about why the process terminated.
62724 -* Cleanups on Exit:: A process can run its own cleanup
62725 - functions upon normal termination.
62726 -* Aborting a Program:: The `abort' function causes
62727 - abnormal program termination.
62728 -* Termination Internals:: What happens when a process terminates.
62730 -\x1f
62731 -File: libc.info, Node: Normal Termination, Next: Exit Status, Up: Program Termination
62733 -Normal Termination
62734 -------------------
62736 - A process terminates normally when its program signals it is done by
62737 -calling `exit'. Returning from `main' is equivalent to calling `exit',
62738 -and the value that `main' returns is used as the argument to `exit'.
62740 - - Function: void exit (int STATUS)
62741 - The `exit' function tells the system that the program is done,
62742 - which causes it to terminate the process.
62744 - STATUS is the program's exit status, which becomes part of the
62745 - process' termination status. This function does not return.
62747 - Normal termination causes the following actions:
62749 - 1. Functions that were registered with the `atexit' or `on_exit'
62750 - functions are called in the reverse order of their registration.
62751 - This mechanism allows your application to specify its own
62752 - "cleanup" actions to be performed at program termination.
62753 - Typically, this is used to do things like saving program state
62754 - information in a file, or unlocking locks in shared data bases.
62756 - 2. All open streams are closed, writing out any buffered output data.
62757 - See *Note Closing Streams::. In addition, temporary files opened
62758 - with the `tmpfile' function are removed; see *Note Temporary
62759 - Files::.
62761 - 3. `_exit' is called, terminating the program. *Note Termination
62762 - Internals::.
62764 -\x1f
62765 -File: libc.info, Node: Exit Status, Next: Cleanups on Exit, Prev: Normal Termination, Up: Program Termination
62767 -Exit Status
62768 ------------
62770 - When a program exits, it can return to the parent process a small
62771 -amount of information about the cause of termination, using the "exit
62772 -status". This is a value between 0 and 255 that the exiting process
62773 -passes as an argument to `exit'.
62775 - Normally you should use the exit status to report very broad
62776 -information about success or failure. You can't provide a lot of
62777 -detail about the reasons for the failure, and most parent processes
62778 -would not want much detail anyway.
62780 - There are conventions for what sorts of status values certain
62781 -programs should return. The most common convention is simply 0 for
62782 -success and 1 for failure. Programs that perform comparison use a
62783 -different convention: they use status 1 to indicate a mismatch, and
62784 -status 2 to indicate an inability to compare. Your program should
62785 -follow an existing convention if an existing convention makes sense for
62786 -it.
62788 - A general convention reserves status values 128 and up for special
62789 -purposes. In particular, the value 128 is used to indicate failure to
62790 -execute another program in a subprocess. This convention is not
62791 -universally obeyed, but it is a good idea to follow it in your programs.
62793 - *Warning:* Don't try to use the number of errors as the exit status.
62794 -This is actually not very useful; a parent process would generally not
62795 -care how many errors occurred. Worse than that, it does not work,
62796 -because the status value is truncated to eight bits. Thus, if the
62797 -program tried to report 256 errors, the parent would receive a report
62798 -of 0 errors--that is, success.
62800 - For the same reason, it does not work to use the value of `errno' as
62801 -the exit status--these can exceed 255.
62803 - *Portability note:* Some non-POSIX systems use different conventions
62804 -for exit status values. For greater portability, you can use the
62805 -macros `EXIT_SUCCESS' and `EXIT_FAILURE' for the conventional status
62806 -value for success and failure, respectively. They are declared in the
62807 -file `stdlib.h'.
62809 - - Macro: int EXIT_SUCCESS
62810 - This macro can be used with the `exit' function to indicate
62811 - successful program completion.
62813 - On POSIX systems, the value of this macro is `0'. On other
62814 - systems, the value might be some other (possibly non-constant)
62815 - integer expression.
62817 - - Macro: int EXIT_FAILURE
62818 - This macro can be used with the `exit' function to indicate
62819 - unsuccessful program completion in a general sense.
62821 - On POSIX systems, the value of this macro is `1'. On other
62822 - systems, the value might be some other (possibly non-constant)
62823 - integer expression. Other nonzero status values also indicate
62824 - failures. Certain programs use different nonzero status values to
62825 - indicate particular kinds of "non-success". For example, `diff'
62826 - uses status value `1' to mean that the files are different, and
62827 - `2' or more to mean that there was difficulty in opening the files.
62829 - Don't confuse a program's exit status with a process' termination
62830 -status. There are lots of ways a process can terminate besides having
62831 -it's program finish. In the event that the process termination _is_
62832 -caused by program termination (i.e. `exit'), though, the program's exit
62833 -status becomes part of the process' termination status.
62835 -\x1f
62836 -File: libc.info, Node: Cleanups on Exit, Next: Aborting a Program, Prev: Exit Status, Up: Program Termination
62838 -Cleanups on Exit
62839 -----------------
62841 - Your program can arrange to run its own cleanup functions if normal
62842 -termination happens. If you are writing a library for use in various
62843 -application programs, then it is unreliable to insist that all
62844 -applications call the library's cleanup functions explicitly before
62845 -exiting. It is much more robust to make the cleanup invisible to the
62846 -application, by setting up a cleanup function in the library itself
62847 -using `atexit' or `on_exit'.
62849 - - Function: int atexit (void (*FUNCTION) (void))
62850 - The `atexit' function registers the function FUNCTION to be called
62851 - at normal program termination. The FUNCTION is called with no
62852 - arguments.
62854 - The return value from `atexit' is zero on success and nonzero if
62855 - the function cannot be registered.
62857 - - Function: int on_exit (void (*FUNCTION)(int STATUS, void *ARG), void
62858 - *ARG)
62859 - This function is a somewhat more powerful variant of `atexit'. It
62860 - accepts two arguments, a function FUNCTION and an arbitrary
62861 - pointer ARG. At normal program termination, the FUNCTION is
62862 - called with two arguments: the STATUS value passed to `exit', and
62863 - the ARG.
62865 - This function is included in the GNU C library only for
62866 - compatibility for SunOS, and may not be supported by other
62867 - implementations.
62869 - Here's a trivial program that illustrates the use of `exit' and
62870 -`atexit':
62872 - #include <stdio.h>
62873 - #include <stdlib.h>
62875 - void
62876 - bye (void)
62878 - puts ("Goodbye, cruel world....");
62881 - int
62882 - main (void)
62884 - atexit (bye);
62885 - exit (EXIT_SUCCESS);
62888 -When this program is executed, it just prints the message and exits.
62890 -\x1f
62891 -File: libc.info, Node: Aborting a Program, Next: Termination Internals, Prev: Cleanups on Exit, Up: Program Termination
62893 -Aborting a Program
62894 -------------------
62896 - You can abort your program using the `abort' function. The prototype
62897 -for this function is in `stdlib.h'.
62899 - - Function: void abort (void)
62900 - The `abort' function causes abnormal program termination. This
62901 - does not execute cleanup functions registered with `atexit' or
62902 - `on_exit'.
62904 - This function actually terminates the process by raising a
62905 - `SIGABRT' signal, and your program can include a handler to
62906 - intercept this signal; see *Note Signal Handling::.
62908 - *Future Change Warning:* Proposed Federal censorship regulations may
62909 -prohibit us from giving you information about the possibility of
62910 -calling this function. We would be required to say that this is not an
62911 -acceptable way of terminating a program.
62913 -\x1f
62914 -File: libc.info, Node: Termination Internals, Prev: Aborting a Program, Up: Program Termination
62916 -Termination Internals
62917 ----------------------
62919 - The `_exit' function is the primitive used for process termination
62920 -by `exit'. It is declared in the header file `unistd.h'.
62922 - - Function: void _exit (int STATUS)
62923 - The `_exit' function is the primitive for causing a process to
62924 - terminate with status STATUS. Calling this function does not
62925 - execute cleanup functions registered with `atexit' or `on_exit'.
62927 - - Function: void _Exit (int STATUS)
62928 - The `_Exit' function is the ISO C equivalent to `_exit'. The
62929 - ISO C committee members were not sure whether the definitions of
62930 - `_exit' and `_Exit' were compatible so they have not used the
62931 - POSIX name.
62933 - This function was introduced in ISO C99 and is declared in
62934 - `stdlib.h'.
62936 - When a process terminates for any reason--either because the program
62937 -terminates, or as a result of a signal--the following things happen:
62939 - * All open file descriptors in the process are closed. *Note
62940 - Low-Level I/O::. Note that streams are not flushed automatically
62941 - when the process terminates; see *Note I/O on Streams::.
62943 - * A process exit status is saved to be reported back to the parent
62944 - process via `wait' or `waitpid'; see *Note Process Completion::.
62945 - If the program exited, this status includes as its low-order 8
62946 - bits the program exit status.
62948 - * Any child processes of the process being terminated are assigned a
62949 - new parent process. (On most systems, including GNU, this is the
62950 - `init' process, with process ID 1.)
62952 - * A `SIGCHLD' signal is sent to the parent process.
62954 - * If the process is a session leader that has a controlling
62955 - terminal, then a `SIGHUP' signal is sent to each process in the
62956 - foreground job, and the controlling terminal is disassociated from
62957 - that session. *Note Job Control::.
62959 - * If termination of a process causes a process group to become
62960 - orphaned, and any member of that process group is stopped, then a
62961 - `SIGHUP' signal and a `SIGCONT' signal are sent to each process in
62962 - the group. *Note Job Control::.
62964 -\x1f
62965 -File: libc.info, Node: Processes, Next: Job Control, Prev: Program Basics, Up: Top
62967 -Processes
62968 -*********
62970 - "Processes" are the primitive units for allocation of system
62971 -resources. Each process has its own address space and (usually) one
62972 -thread of control. A process executes a program; you can have multiple
62973 -processes executing the same program, but each process has its own copy
62974 -of the program within its own address space and executes it
62975 -independently of the other copies.
62977 - Processes are organized hierarchically. Each process has a "parent
62978 -process" which explicitly arranged to create it. The processes created
62979 -by a given parent are called its "child processes". A child inherits
62980 -many of its attributes from the parent process.
62982 - This chapter describes how a program can create, terminate, and
62983 -control child processes. Actually, there are three distinct operations
62984 -involved: creating a new child process, causing the new process to
62985 -execute a program, and coordinating the completion of the child process
62986 -with the original program.
62988 - The `system' function provides a simple, portable mechanism for
62989 -running another program; it does all three steps automatically. If you
62990 -need more control over the details of how this is done, you can use the
62991 -primitive functions to do each step individually instead.
62993 -* Menu:
62995 -* Running a Command:: The easy way to run another program.
62996 -* Process Creation Concepts:: An overview of the hard way to do it.
62997 -* Process Identification:: How to get the process ID of a process.
62998 -* Creating a Process:: How to fork a child process.
62999 -* Executing a File:: How to make a process execute another program.
63000 -* Process Completion:: How to tell when a child process has completed.
63001 -* Process Completion Status:: How to interpret the status value
63002 - returned from a child process.
63003 -* BSD Wait Functions:: More functions, for backward compatibility.
63004 -* Process Creation Example:: A complete example program.
63006 -\x1f
63007 -File: libc.info, Node: Running a Command, Next: Process Creation Concepts, Up: Processes
63009 -Running a Command
63010 -=================
63012 - The easy way to run another program is to use the `system' function.
63013 -This function does all the work of running a subprogram, but it
63014 -doesn't give you much control over the details: you have to wait until
63015 -the subprogram terminates before you can do anything else.
63017 - - Function: int system (const char *COMMAND)
63018 - This function executes COMMAND as a shell command. In the GNU C
63019 - library, it always uses the default shell `sh' to run the command.
63020 - In particular, it searches the directories in `PATH' to find
63021 - programs to execute. The return value is `-1' if it wasn't
63022 - possible to create the shell process, and otherwise is the status
63023 - of the shell process. *Note Process Completion::, for details on
63024 - how this status code can be interpreted.
63026 - If the COMMAND argument is a null pointer, a return value of zero
63027 - indicates that no command processor is available.
63029 - This function is a cancellation point in multi-threaded programs.
63030 - This is a problem if the thread allocates some resources (like
63031 - memory, file descriptors, semaphores or whatever) at the time
63032 - `system' is called. If the thread gets canceled these resources
63033 - stay allocated until the program ends. To avoid this calls to
63034 - `system' should be protected using cancellation handlers.
63036 - The `system' function is declared in the header file `stdlib.h'.
63038 - *Portability Note:* Some C implementations may not have any notion
63039 -of a command processor that can execute other programs. You can
63040 -determine whether a command processor exists by executing
63041 -`system (NULL)'; if the return value is nonzero, a command processor is
63042 -available.
63044 - The `popen' and `pclose' functions (*note Pipe to a Subprocess::)
63045 -are closely related to the `system' function. They allow the parent
63046 -process to communicate with the standard input and output channels of
63047 -the command being executed.
63049 -\x1f
63050 -File: libc.info, Node: Process Creation Concepts, Next: Process Identification, Prev: Running a Command, Up: Processes
63052 -Process Creation Concepts
63053 -=========================
63055 - This section gives an overview of processes and of the steps
63056 -involved in creating a process and making it run another program.
63058 - Each process is named by a "process ID" number. A unique process ID
63059 -is allocated to each process when it is created. The "lifetime" of a
63060 -process ends when its termination is reported to its parent process; at
63061 -that time, all of the process resources, including its process ID, are
63062 -freed.
63064 - Processes are created with the `fork' system call (so the operation
63065 -of creating a new process is sometimes called "forking" a process).
63066 -The "child process" created by `fork' is a copy of the original "parent
63067 -process", except that it has its own process ID.
63069 - After forking a child process, both the parent and child processes
63070 -continue to execute normally. If you want your program to wait for a
63071 -child process to finish executing before continuing, you must do this
63072 -explicitly after the fork operation, by calling `wait' or `waitpid'
63073 -(*note Process Completion::). These functions give you limited
63074 -information about why the child terminated--for example, its exit
63075 -status code.
63077 - A newly forked child process continues to execute the same program as
63078 -its parent process, at the point where the `fork' call returns. You
63079 -can use the return value from `fork' to tell whether the program is
63080 -running in the parent process or the child.
63082 - Having several processes run the same program is only occasionally
63083 -useful. But the child can execute another program using one of the
63084 -`exec' functions; see *Note Executing a File::. The program that the
63085 -process is executing is called its "process image". Starting execution
63086 -of a new program causes the process to forget all about its previous
63087 -process image; when the new program exits, the process exits too,
63088 -instead of returning to the previous process image.
63090 -\x1f
63091 -File: libc.info, Node: Process Identification, Next: Creating a Process, Prev: Process Creation Concepts, Up: Processes
63093 -Process Identification
63094 -======================
63096 - The `pid_t' data type represents process IDs. You can get the
63097 -process ID of a process by calling `getpid'. The function `getppid'
63098 -returns the process ID of the parent of the current process (this is
63099 -also known as the "parent process ID"). Your program should include
63100 -the header files `unistd.h' and `sys/types.h' to use these functions.
63102 - - Data Type: pid_t
63103 - The `pid_t' data type is a signed integer type which is capable of
63104 - representing a process ID. In the GNU library, this is an `int'.
63106 - - Function: pid_t getpid (void)
63107 - The `getpid' function returns the process ID of the current
63108 - process.
63110 - - Function: pid_t getppid (void)
63111 - The `getppid' function returns the process ID of the parent of the
63112 - current process.
63114 -\x1f
63115 -File: libc.info, Node: Creating a Process, Next: Executing a File, Prev: Process Identification, Up: Processes
63117 -Creating a Process
63118 -==================
63120 - The `fork' function is the primitive for creating a process. It is
63121 -declared in the header file `unistd.h'.
63123 - - Function: pid_t fork (void)
63124 - The `fork' function creates a new process.
63126 - If the operation is successful, there are then both parent and
63127 - child processes and both see `fork' return, but with different
63128 - values: it returns a value of `0' in the child process and returns
63129 - the child's process ID in the parent process.
63131 - If process creation failed, `fork' returns a value of `-1' in the
63132 - parent process. The following `errno' error conditions are
63133 - defined for `fork':
63135 - `EAGAIN'
63136 - There aren't enough system resources to create another
63137 - process, or the user already has too many processes running.
63138 - This means exceeding the `RLIMIT_NPROC' resource limit, which
63139 - can usually be increased; *note Limits on Resources::.
63141 - `ENOMEM'
63142 - The process requires more space than the system can supply.
63144 - The specific attributes of the child process that differ from the
63145 -parent process are:
63147 - * The child process has its own unique process ID.
63149 - * The parent process ID of the child process is the process ID of its
63150 - parent process.
63152 - * The child process gets its own copies of the parent process's open
63153 - file descriptors. Subsequently changing attributes of the file
63154 - descriptors in the parent process won't affect the file
63155 - descriptors in the child, and vice versa. *Note Control
63156 - Operations::. However, the file position associated with each
63157 - descriptor is shared by both processes; *note File Position::.
63159 - * The elapsed processor times for the child process are set to zero;
63160 - see *Note Processor Time::.
63162 - * The child doesn't inherit file locks set by the parent process.
63163 - *Note Control Operations::.
63165 - * The child doesn't inherit alarms set by the parent process. *Note
63166 - Setting an Alarm::.
63168 - * The set of pending signals (*note Delivery of Signal::) for the
63169 - child process is cleared. (The child process inherits its mask of
63170 - blocked signals and signal actions from the parent process.)
63172 - - Function: pid_t vfork (void)
63173 - The `vfork' function is similar to `fork' but on some systems it
63174 - is more efficient; however, there are restrictions you must follow
63175 - to use it safely.
63177 - While `fork' makes a complete copy of the calling process's address
63178 - space and allows both the parent and child to execute
63179 - independently, `vfork' does not make this copy. Instead, the
63180 - child process created with `vfork' shares its parent's address
63181 - space until it calls `_exit' or one of the `exec' functions. In
63182 - the meantime, the parent process suspends execution.
63184 - You must be very careful not to allow the child process created
63185 - with `vfork' to modify any global data or even local variables
63186 - shared with the parent. Furthermore, the child process cannot
63187 - return from (or do a long jump out of) the function that called
63188 - `vfork'! This would leave the parent process's control
63189 - information very confused. If in doubt, use `fork' instead.
63191 - Some operating systems don't really implement `vfork'. The GNU C
63192 - library permits you to use `vfork' on all systems, but actually
63193 - executes `fork' if `vfork' isn't available. If you follow the
63194 - proper precautions for using `vfork', your program will still work
63195 - even if the system uses `fork' instead.
63197 diff -u -udbrN glibc-2.3.2/manual/libc.info-44 glibc-2.3.2-200304020432/manual/libc.info-44
63198 --- glibc-2.3.2/manual/libc.info-44 Sat Mar 1 02:39:41 2003
63199 +++ glibc-2.3.2-200304020432/manual/libc.info-44 Thu Jan 1 01:00:00 1970
63200 @@ -1,1175 +0,0 @@
63201 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
63203 -INFO-DIR-SECTION GNU libraries
63204 -START-INFO-DIR-ENTRY
63205 -* Libc: (libc). C library.
63206 -END-INFO-DIR-ENTRY
63208 - This file documents the GNU C library.
63210 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
63211 -Reference Manual', for Version 2.3.x.
63213 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
63214 -Free Software Foundation, Inc.
63216 - Permission is granted to copy, distribute and/or modify this document
63217 -under the terms of the GNU Free Documentation License, Version 1.1 or
63218 -any later version published by the Free Software Foundation; with the
63219 -Invariant Sections being "Free Software Needs Free Documentation" and
63220 -"GNU Lesser General Public License", the Front-Cover texts being (a)
63221 -(see below), and with the Back-Cover Texts being (b) (see below). A
63222 -copy of the license is included in the section entitled "GNU Free
63223 -Documentation License".
63225 - (a) The FSF's Front-Cover Text is:
63227 - A GNU Manual
63229 - (b) The FSF's Back-Cover Text is:
63231 - You have freedom to copy and modify this GNU Manual, like GNU
63232 -software. Copies published by the Free Software Foundation raise
63233 -funds for GNU development.
63235 -\x1f
63236 -File: libc.info, Node: Executing a File, Next: Process Completion, Prev: Creating a Process, Up: Processes
63238 -Executing a File
63239 -================
63241 - This section describes the `exec' family of functions, for executing
63242 -a file as a process image. You can use these functions to make a child
63243 -process execute a new program after it has been forked.
63245 - To see the effects of `exec' from the point of view of the called
63246 -program, *Note Program Basics::.
63248 - The functions in this family differ in how you specify the arguments,
63249 -but otherwise they all do the same thing. They are declared in the
63250 -header file `unistd.h'.
63252 - - Function: int execv (const char *FILENAME, char *const ARGV[])
63253 - The `execv' function executes the file named by FILENAME as a new
63254 - process image.
63256 - The ARGV argument is an array of null-terminated strings that is
63257 - used to provide a value for the `argv' argument to the `main'
63258 - function of the program to be executed. The last element of this
63259 - array must be a null pointer. By convention, the first element of
63260 - this array is the file name of the program sans directory names.
63261 - *Note Program Arguments::, for full details on how programs can
63262 - access these arguments.
63264 - The environment for the new process image is taken from the
63265 - `environ' variable of the current process image; see *Note
63266 - Environment Variables::, for information about environments.
63268 - - Function: int execl (const char *FILENAME, const char *ARG0, ...)
63269 - This is similar to `execv', but the ARGV strings are specified
63270 - individually instead of as an array. A null pointer must be
63271 - passed as the last such argument.
63273 - - Function: int execve (const char *FILENAME, char *const ARGV[], char
63274 - *const ENV[])
63275 - This is similar to `execv', but permits you to specify the
63276 - environment for the new program explicitly as the ENV argument.
63277 - This should be an array of strings in the same format as for the
63278 - `environ' variable; see *Note Environment Access::.
63280 - - Function: int execle (const char *FILENAME, const char *ARG0, char
63281 - *const ENV[], ...)
63282 - This is similar to `execl', but permits you to specify the
63283 - environment for the new program explicitly. The environment
63284 - argument is passed following the null pointer that marks the last
63285 - ARGV argument, and should be an array of strings in the same
63286 - format as for the `environ' variable.
63288 - - Function: int execvp (const char *FILENAME, char *const ARGV[])
63289 - The `execvp' function is similar to `execv', except that it
63290 - searches the directories listed in the `PATH' environment variable
63291 - (*note Standard Environment::) to find the full file name of a
63292 - file from FILENAME if FILENAME does not contain a slash.
63294 - This function is useful for executing system utility programs,
63295 - because it looks for them in the places that the user has chosen.
63296 - Shells use it to run the commands that users type.
63298 - - Function: int execlp (const char *FILENAME, const char *ARG0, ...)
63299 - This function is like `execl', except that it performs the same
63300 - file name searching as the `execvp' function.
63302 - The size of the argument list and environment list taken together
63303 -must not be greater than `ARG_MAX' bytes. *Note General Limits::. In
63304 -the GNU system, the size (which compares against `ARG_MAX') includes,
63305 -for each string, the number of characters in the string, plus the size
63306 -of a `char *', plus one, rounded up to a multiple of the size of a
63307 -`char *'. Other systems may have somewhat different rules for counting.
63309 - These functions normally don't return, since execution of a new
63310 -program causes the currently executing program to go away completely.
63311 -A value of `-1' is returned in the event of a failure. In addition to
63312 -the usual file name errors (*note File Name Errors::), the following
63313 -`errno' error conditions are defined for these functions:
63315 -`E2BIG'
63316 - The combined size of the new program's argument list and
63317 - environment list is larger than `ARG_MAX' bytes. The GNU system
63318 - has no specific limit on the argument list size, so this error
63319 - code cannot result, but you may get `ENOMEM' instead if the
63320 - arguments are too big for available memory.
63322 -`ENOEXEC'
63323 - The specified file can't be executed because it isn't in the right
63324 - format.
63326 -`ENOMEM'
63327 - Executing the specified file requires more storage than is
63328 - available.
63330 - If execution of the new file succeeds, it updates the access time
63331 -field of the file as if the file had been read. *Note File Times::,
63332 -for more details about access times of files.
63334 - The point at which the file is closed again is not specified, but is
63335 -at some point before the process exits or before another process image
63336 -is executed.
63338 - Executing a new process image completely changes the contents of
63339 -memory, copying only the argument and environment strings to new
63340 -locations. But many other attributes of the process are unchanged:
63342 - * The process ID and the parent process ID. *Note Process Creation
63343 - Concepts::.
63345 - * Session and process group membership. *Note Concepts of Job
63346 - Control::.
63348 - * Real user ID and group ID, and supplementary group IDs. *Note
63349 - Process Persona::.
63351 - * Pending alarms. *Note Setting an Alarm::.
63353 - * Current working directory and root directory. *Note Working
63354 - Directory::. In the GNU system, the root directory is not copied
63355 - when executing a setuid program; instead the system default root
63356 - directory is used for the new program.
63358 - * File mode creation mask. *Note Setting Permissions::.
63360 - * Process signal mask; see *Note Process Signal Mask::.
63362 - * Pending signals; see *Note Blocking Signals::.
63364 - * Elapsed processor time associated with the process; see *Note
63365 - Processor Time::.
63367 - If the set-user-ID and set-group-ID mode bits of the process image
63368 -file are set, this affects the effective user ID and effective group ID
63369 -(respectively) of the process. These concepts are discussed in detail
63370 -in *Note Process Persona::.
63372 - Signals that are set to be ignored in the existing process image are
63373 -also set to be ignored in the new process image. All other signals are
63374 -set to the default action in the new process image. For more
63375 -information about signals, see *Note Signal Handling::.
63377 - File descriptors open in the existing process image remain open in
63378 -the new process image, unless they have the `FD_CLOEXEC'
63379 -(close-on-exec) flag set. The files that remain open inherit all
63380 -attributes of the open file description from the existing process image,
63381 -including file locks. File descriptors are discussed in *Note
63382 -Low-Level I/O::.
63384 - Streams, by contrast, cannot survive through `exec' functions,
63385 -because they are located in the memory of the process itself. The new
63386 -process image has no streams except those it creates afresh. Each of
63387 -the streams in the pre-`exec' process image has a descriptor inside it,
63388 -and these descriptors do survive through `exec' (provided that they do
63389 -not have `FD_CLOEXEC' set). The new process image can reconnect these
63390 -to new streams using `fdopen' (*note Descriptors and Streams::).
63392 -\x1f
63393 -File: libc.info, Node: Process Completion, Next: Process Completion Status, Prev: Executing a File, Up: Processes
63395 -Process Completion
63396 -==================
63398 - The functions described in this section are used to wait for a child
63399 -process to terminate or stop, and determine its status. These functions
63400 -are declared in the header file `sys/wait.h'.
63402 - - Function: pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS)
63403 - The `waitpid' function is used to request status information from a
63404 - child process whose process ID is PID. Normally, the calling
63405 - process is suspended until the child process makes status
63406 - information available by terminating.
63408 - Other values for the PID argument have special interpretations. A
63409 - value of `-1' or `WAIT_ANY' requests status information for any
63410 - child process; a value of `0' or `WAIT_MYPGRP' requests
63411 - information for any child process in the same process group as the
63412 - calling process; and any other negative value - PGID requests
63413 - information for any child process whose process group ID is PGID.
63415 - If status information for a child process is available
63416 - immediately, this function returns immediately without waiting.
63417 - If more than one eligible child process has status information
63418 - available, one of them is chosen randomly, and its status is
63419 - returned immediately. To get the status from the other eligible
63420 - child processes, you need to call `waitpid' again.
63422 - The OPTIONS argument is a bit mask. Its value should be the
63423 - bitwise OR (that is, the `|' operator) of zero or more of the
63424 - `WNOHANG' and `WUNTRACED' flags. You can use the `WNOHANG' flag
63425 - to indicate that the parent process shouldn't wait; and the
63426 - `WUNTRACED' flag to request status information from stopped
63427 - processes as well as processes that have terminated.
63429 - The status information from the child process is stored in the
63430 - object that STATUS-PTR points to, unless STATUS-PTR is a null
63431 - pointer.
63433 - This function is a cancellation point in multi-threaded programs.
63434 - This is a problem if the thread allocates some resources (like
63435 - memory, file descriptors, semaphores or whatever) at the time
63436 - `waitpid' is called. If the thread gets canceled these resources
63437 - stay allocated until the program ends. To avoid this calls to
63438 - `waitpid' should be protected using cancellation handlers.
63440 - The return value is normally the process ID of the child process
63441 - whose status is reported. If there are child processes but none
63442 - of them is waiting to be noticed, `waitpid' will block until one
63443 - is. However, if the `WNOHANG' option was specified, `waitpid'
63444 - will return zero instead of blocking.
63446 - If a specific PID to wait for was given to `waitpid', it will
63447 - ignore all other children (if any). Therefore if there are
63448 - children waiting to be noticed but the child whose PID was
63449 - specified is not one of them, `waitpid' will block or return zero
63450 - as described above.
63452 - A value of `-1' is returned in case of error. The following
63453 - `errno' error conditions are defined for this function:
63455 - `EINTR'
63456 - The function was interrupted by delivery of a signal to the
63457 - calling process. *Note Interrupted Primitives::.
63459 - `ECHILD'
63460 - There are no child processes to wait for, or the specified PID
63461 - is not a child of the calling process.
63463 - `EINVAL'
63464 - An invalid value was provided for the OPTIONS argument.
63466 - These symbolic constants are defined as values for the PID argument
63467 -to the `waitpid' function.
63469 -`WAIT_ANY'
63470 - This constant macro (whose value is `-1') specifies that `waitpid'
63471 - should return status information about any child process.
63473 -`WAIT_MYPGRP'
63474 - This constant (with value `0') specifies that `waitpid' should
63475 - return status information about any child process in the same
63476 - process group as the calling process.
63478 - These symbolic constants are defined as flags for the OPTIONS
63479 -argument to the `waitpid' function. You can bitwise-OR the flags
63480 -together to obtain a value to use as the argument.
63482 -`WNOHANG'
63483 - This flag specifies that `waitpid' should return immediately
63484 - instead of waiting, if there is no child process ready to be
63485 - noticed.
63487 -`WUNTRACED'
63488 - This flag specifies that `waitpid' should report the status of any
63489 - child processes that have been stopped as well as those that have
63490 - terminated.
63492 - - Function: pid_t wait (int *STATUS-PTR)
63493 - This is a simplified version of `waitpid', and is used to wait
63494 - until any one child process terminates. The call:
63496 - wait (&status)
63498 - is exactly equivalent to:
63500 - waitpid (-1, &status, 0)
63502 - This function is a cancellation point in multi-threaded programs.
63503 - This is a problem if the thread allocates some resources (like
63504 - memory, file descriptors, semaphores or whatever) at the time
63505 - `wait' is called. If the thread gets canceled these resources
63506 - stay allocated until the program ends. To avoid this calls to
63507 - `wait' should be protected using cancellation handlers.
63509 - - Function: pid_t wait4 (pid_t PID, int *STATUS-PTR, int OPTIONS,
63510 - struct rusage *USAGE)
63511 - If USAGE is a null pointer, `wait4' is equivalent to `waitpid
63512 - (PID, STATUS-PTR, OPTIONS)'.
63514 - If USAGE is not null, `wait4' stores usage figures for the child
63515 - process in `*RUSAGE' (but only if the child has terminated, not if
63516 - it has stopped). *Note Resource Usage::.
63518 - This function is a BSD extension.
63520 - Here's an example of how to use `waitpid' to get the status from all
63521 -child processes that have terminated, without ever waiting. This
63522 -function is designed to be a handler for `SIGCHLD', the signal that
63523 -indicates that at least one child process has terminated.
63525 - void
63526 - sigchld_handler (int signum)
63528 - int pid, status, serrno;
63529 - serrno = errno;
63530 - while (1)
63532 - pid = waitpid (WAIT_ANY, &status, WNOHANG);
63533 - if (pid < 0)
63535 - perror ("waitpid");
63536 - break;
63538 - if (pid == 0)
63539 - break;
63540 - notice_termination (pid, status);
63542 - errno = serrno;
63545 -\x1f
63546 -File: libc.info, Node: Process Completion Status, Next: BSD Wait Functions, Prev: Process Completion, Up: Processes
63548 -Process Completion Status
63549 -=========================
63551 - If the exit status value (*note Program Termination::) of the child
63552 -process is zero, then the status value reported by `waitpid' or `wait'
63553 -is also zero. You can test for other kinds of information encoded in
63554 -the returned status value using the following macros. These macros are
63555 -defined in the header file `sys/wait.h'.
63557 - - Macro: int WIFEXITED (int STATUS)
63558 - This macro returns a nonzero value if the child process terminated
63559 - normally with `exit' or `_exit'.
63561 - - Macro: int WEXITSTATUS (int STATUS)
63562 - If `WIFEXITED' is true of STATUS, this macro returns the low-order
63563 - 8 bits of the exit status value from the child process. *Note
63564 - Exit Status::.
63566 - - Macro: int WIFSIGNALED (int STATUS)
63567 - This macro returns a nonzero value if the child process terminated
63568 - because it received a signal that was not handled. *Note Signal
63569 - Handling::.
63571 - - Macro: int WTERMSIG (int STATUS)
63572 - If `WIFSIGNALED' is true of STATUS, this macro returns the signal
63573 - number of the signal that terminated the child process.
63575 - - Macro: int WCOREDUMP (int STATUS)
63576 - This macro returns a nonzero value if the child process terminated
63577 - and produced a core dump.
63579 - - Macro: int WIFSTOPPED (int STATUS)
63580 - This macro returns a nonzero value if the child process is stopped.
63582 - - Macro: int WSTOPSIG (int STATUS)
63583 - If `WIFSTOPPED' is true of STATUS, this macro returns the signal
63584 - number of the signal that caused the child process to stop.
63586 -\x1f
63587 -File: libc.info, Node: BSD Wait Functions, Next: Process Creation Example, Prev: Process Completion Status, Up: Processes
63589 -BSD Process Wait Functions
63590 -==========================
63592 - The GNU library also provides these related facilities for
63593 -compatibility with BSD Unix. BSD uses the `union wait' data type to
63594 -represent status values rather than an `int'. The two representations
63595 -are actually interchangeable; they describe the same bit patterns. The
63596 -GNU C Library defines macros such as `WEXITSTATUS' so that they will
63597 -work on either kind of object, and the `wait' function is defined to
63598 -accept either type of pointer as its STATUS-PTR argument.
63600 - These functions are declared in `sys/wait.h'.
63602 - - Data Type: union wait
63603 - This data type represents program termination status values. It
63604 - has the following members:
63606 - `int w_termsig'
63607 - The value of this member is the same as that of the
63608 - `WTERMSIG' macro.
63610 - `int w_coredump'
63611 - The value of this member is the same as that of the
63612 - `WCOREDUMP' macro.
63614 - `int w_retcode'
63615 - The value of this member is the same as that of the
63616 - `WEXITSTATUS' macro.
63618 - `int w_stopsig'
63619 - The value of this member is the same as that of the
63620 - `WSTOPSIG' macro.
63622 - Instead of accessing these members directly, you should use the
63623 - equivalent macros.
63625 - The `wait3' function is the predecessor to `wait4', which is more
63626 -flexible. `wait3' is now obsolete.
63628 - - Function: pid_t wait3 (union wait *STATUS-PTR, int OPTIONS, struct
63629 - rusage *USAGE)
63630 - If USAGE is a null pointer, `wait3' is equivalent to `waitpid (-1,
63631 - STATUS-PTR, OPTIONS)'.
63633 - If USAGE is not null, `wait3' stores usage figures for the child
63634 - process in `*RUSAGE' (but only if the child has terminated, not if
63635 - it has stopped). *Note Resource Usage::.
63637 -\x1f
63638 -File: libc.info, Node: Process Creation Example, Prev: BSD Wait Functions, Up: Processes
63640 -Process Creation Example
63641 -========================
63643 - Here is an example program showing how you might write a function
63644 -similar to the built-in `system'. It executes its COMMAND argument
63645 -using the equivalent of `sh -c COMMAND'.
63647 - #include <stddef.h>
63648 - #include <stdlib.h>
63649 - #include <unistd.h>
63650 - #include <sys/types.h>
63651 - #include <sys/wait.h>
63653 - /* Execute the command using this shell program. */
63654 - #define SHELL "/bin/sh"
63656 - int
63657 - my_system (const char *command)
63659 - int status;
63660 - pid_t pid;
63662 - pid = fork ();
63663 - if (pid == 0)
63665 - /* This is the child process. Execute the shell command. */
63666 - execl (SHELL, SHELL, "-c", command, NULL);
63667 - _exit (EXIT_FAILURE);
63669 - else if (pid < 0)
63670 - /* The fork failed. Report failure. */
63671 - status = -1;
63672 - else
63673 - /* This is the parent process. Wait for the child to complete. */
63674 - if (waitpid (pid, &status, 0) != pid)
63675 - status = -1;
63676 - return status;
63679 - There are a couple of things you should pay attention to in this
63680 -example.
63682 - Remember that the first `argv' argument supplied to the program
63683 -represents the name of the program being executed. That is why, in the
63684 -call to `execl', `SHELL' is supplied once to name the program to
63685 -execute and a second time to supply a value for `argv[0]'.
63687 - The `execl' call in the child process doesn't return if it is
63688 -successful. If it fails, you must do something to make the child
63689 -process terminate. Just returning a bad status code with `return'
63690 -would leave two processes running the original program. Instead, the
63691 -right behavior is for the child process to report failure to its parent
63692 -process.
63694 - Call `_exit' to accomplish this. The reason for using `_exit'
63695 -instead of `exit' is to avoid flushing fully buffered streams such as
63696 -`stdout'. The buffers of these streams probably contain data that was
63697 -copied from the parent process by the `fork', data that will be output
63698 -eventually by the parent process. Calling `exit' in the child would
63699 -output the data twice. *Note Termination Internals::.
63701 -\x1f
63702 -File: libc.info, Node: Job Control, Next: Name Service Switch, Prev: Processes, Up: Top
63704 -Job Control
63705 -***********
63707 - "Job control" refers to the protocol for allowing a user to move
63708 -between multiple "process groups" (or "jobs") within a single "login
63709 -session". The job control facilities are set up so that appropriate
63710 -behavior for most programs happens automatically and they need not do
63711 -anything special about job control. So you can probably ignore the
63712 -material in this chapter unless you are writing a shell or login
63713 -program.
63715 - You need to be familiar with concepts relating to process creation
63716 -(*note Process Creation Concepts::) and signal handling (*note Signal
63717 -Handling::) in order to understand this material presented in this
63718 -chapter.
63720 -* Menu:
63722 -* Concepts of Job Control:: Jobs can be controlled by a shell.
63723 -* Job Control is Optional:: Not all POSIX systems support job control.
63724 -* Controlling Terminal:: How a process gets its controlling terminal.
63725 -* Access to the Terminal:: How processes share the controlling terminal.
63726 -* Orphaned Process Groups:: Jobs left after the user logs out.
63727 -* Implementing a Shell:: What a shell must do to implement job control.
63728 -* Functions for Job Control:: Functions to control process groups.
63730 -\x1f
63731 -File: libc.info, Node: Concepts of Job Control, Next: Job Control is Optional, Up: Job Control
63733 -Concepts of Job Control
63734 -=======================
63736 - The fundamental purpose of an interactive shell is to read commands
63737 -from the user's terminal and create processes to execute the programs
63738 -specified by those commands. It can do this using the `fork' (*note
63739 -Creating a Process::) and `exec' (*note Executing a File::) functions.
63741 - A single command may run just one process--but often one command uses
63742 -several processes. If you use the `|' operator in a shell command, you
63743 -explicitly request several programs in their own processes. But even
63744 -if you run just one program, it can use multiple processes internally.
63745 -For example, a single compilation command such as `cc -c foo.c'
63746 -typically uses four processes (though normally only two at any given
63747 -time). If you run `make', its job is to run other programs in separate
63748 -processes.
63750 - The processes belonging to a single command are called a "process
63751 -group" or "job". This is so that you can operate on all of them at
63752 -once. For example, typing `C-c' sends the signal `SIGINT' to terminate
63753 -all the processes in the foreground process group.
63755 - A "session" is a larger group of processes. Normally all the
63756 -processes that stem from a single login belong to the same session.
63758 - Every process belongs to a process group. When a process is
63759 -created, it becomes a member of the same process group and session as
63760 -its parent process. You can put it in another process group using the
63761 -`setpgid' function, provided the process group belongs to the same
63762 -session.
63764 - The only way to put a process in a different session is to make it
63765 -the initial process of a new session, or a "session leader", using the
63766 -`setsid' function. This also puts the session leader into a new
63767 -process group, and you can't move it out of that process group again.
63769 - Usually, new sessions are created by the system login program, and
63770 -the session leader is the process running the user's login shell.
63772 - A shell that supports job control must arrange to control which job
63773 -can use the terminal at any time. Otherwise there might be multiple
63774 -jobs trying to read from the terminal at once, and confusion about which
63775 -process should receive the input typed by the user. To prevent this,
63776 -the shell must cooperate with the terminal driver using the protocol
63777 -described in this chapter.
63779 - The shell can give unlimited access to the controlling terminal to
63780 -only one process group at a time. This is called the "foreground job"
63781 -on that controlling terminal. Other process groups managed by the shell
63782 -that are executing without such access to the terminal are called
63783 -"background jobs".
63785 - If a background job needs to read from its controlling terminal, it
63786 -is "stopped" by the terminal driver; if the `TOSTOP' mode is set,
63787 -likewise for writing. The user can stop a foreground job by typing the
63788 -SUSP character (*note Special Characters::) and a program can stop any
63789 -job by sending it a `SIGSTOP' signal. It's the responsibility of the
63790 -shell to notice when jobs stop, to notify the user about them, and to
63791 -provide mechanisms for allowing the user to interactively continue
63792 -stopped jobs and switch jobs between foreground and background.
63794 - *Note Access to the Terminal::, for more information about I/O to the
63795 -controlling terminal,
63797 -\x1f
63798 -File: libc.info, Node: Job Control is Optional, Next: Controlling Terminal, Prev: Concepts of Job Control, Up: Job Control
63800 -Job Control is Optional
63801 -=======================
63803 - Not all operating systems support job control. The GNU system does
63804 -support job control, but if you are using the GNU library on some other
63805 -system, that system may not support job control itself.
63807 - You can use the `_POSIX_JOB_CONTROL' macro to test at compile-time
63808 -whether the system supports job control. *Note System Options::.
63810 - If job control is not supported, then there can be only one process
63811 -group per session, which behaves as if it were always in the foreground.
63812 -The functions for creating additional process groups simply fail with
63813 -the error code `ENOSYS'.
63815 - The macros naming the various job control signals (*note Job Control
63816 -Signals::) are defined even if job control is not supported. However,
63817 -the system never generates these signals, and attempts to send a job
63818 -control signal or examine or specify their actions report errors or do
63819 -nothing.
63821 -\x1f
63822 -File: libc.info, Node: Controlling Terminal, Next: Access to the Terminal, Prev: Job Control is Optional, Up: Job Control
63824 -Controlling Terminal of a Process
63825 -=================================
63827 - One of the attributes of a process is its controlling terminal.
63828 -Child processes created with `fork' inherit the controlling terminal
63829 -from their parent process. In this way, all the processes in a session
63830 -inherit the controlling terminal from the session leader. A session
63831 -leader that has control of a terminal is called the "controlling
63832 -process" of that terminal.
63834 - You generally do not need to worry about the exact mechanism used to
63835 -allocate a controlling terminal to a session, since it is done for you
63836 -by the system when you log in.
63838 - An individual process disconnects from its controlling terminal when
63839 -it calls `setsid' to become the leader of a new session. *Note Process
63840 -Group Functions::.
63842 -\x1f
63843 -File: libc.info, Node: Access to the Terminal, Next: Orphaned Process Groups, Prev: Controlling Terminal, Up: Job Control
63845 -Access to the Controlling Terminal
63846 -==================================
63848 - Processes in the foreground job of a controlling terminal have
63849 -unrestricted access to that terminal; background processes do not. This
63850 -section describes in more detail what happens when a process in a
63851 -background job tries to access its controlling terminal.
63853 - When a process in a background job tries to read from its controlling
63854 -terminal, the process group is usually sent a `SIGTTIN' signal. This
63855 -normally causes all of the processes in that group to stop (unless they
63856 -handle the signal and don't stop themselves). However, if the reading
63857 -process is ignoring or blocking this signal, then `read' fails with an
63858 -`EIO' error instead.
63860 - Similarly, when a process in a background job tries to write to its
63861 -controlling terminal, the default behavior is to send a `SIGTTOU'
63862 -signal to the process group. However, the behavior is modified by the
63863 -`TOSTOP' bit of the local modes flags (*note Local Modes::). If this
63864 -bit is not set (which is the default), then writing to the controlling
63865 -terminal is always permitted without sending a signal. Writing is also
63866 -permitted if the `SIGTTOU' signal is being ignored or blocked by the
63867 -writing process.
63869 - Most other terminal operations that a program can do are treated as
63870 -reading or as writing. (The description of each operation should say
63871 -which.)
63873 - For more information about the primitive `read' and `write'
63874 -functions, see *Note I/O Primitives::.
63876 -\x1f
63877 -File: libc.info, Node: Orphaned Process Groups, Next: Implementing a Shell, Prev: Access to the Terminal, Up: Job Control
63879 -Orphaned Process Groups
63880 -=======================
63882 - When a controlling process terminates, its terminal becomes free and
63883 -a new session can be established on it. (In fact, another user could
63884 -log in on the terminal.) This could cause a problem if any processes
63885 -from the old session are still trying to use that terminal.
63887 - To prevent problems, process groups that continue running even after
63888 -the session leader has terminated are marked as "orphaned process
63889 -groups".
63891 - When a process group becomes an orphan, its processes are sent a
63892 -`SIGHUP' signal. Ordinarily, this causes the processes to terminate.
63893 -However, if a program ignores this signal or establishes a handler for
63894 -it (*note Signal Handling::), it can continue running as in the orphan
63895 -process group even after its controlling process terminates; but it
63896 -still cannot access the terminal any more.
63898 -\x1f
63899 -File: libc.info, Node: Implementing a Shell, Next: Functions for Job Control, Prev: Orphaned Process Groups, Up: Job Control
63901 -Implementing a Job Control Shell
63902 -================================
63904 - This section describes what a shell must do to implement job
63905 -control, by presenting an extensive sample program to illustrate the
63906 -concepts involved.
63908 -* Menu:
63910 -* Data Structures:: Introduction to the sample shell.
63911 -* Initializing the Shell:: What the shell must do to take
63912 - responsibility for job control.
63913 -* Launching Jobs:: Creating jobs to execute commands.
63914 -* Foreground and Background:: Putting a job in foreground of background.
63915 -* Stopped and Terminated Jobs:: Reporting job status.
63916 -* Continuing Stopped Jobs:: How to continue a stopped job in
63917 - the foreground or background.
63918 -* Missing Pieces:: Other parts of the shell.
63920 -\x1f
63921 -File: libc.info, Node: Data Structures, Next: Initializing the Shell, Up: Implementing a Shell
63923 -Data Structures for the Shell
63924 ------------------------------
63926 - All of the program examples included in this chapter are part of a
63927 -simple shell program. This section presents data structures and
63928 -utility functions which are used throughout the example.
63930 - The sample shell deals mainly with two data structures. The `job'
63931 -type contains information about a job, which is a set of subprocesses
63932 -linked together with pipes. The `process' type holds information about
63933 -a single subprocess. Here are the relevant data structure declarations:
63935 - /* A process is a single process. */
63936 - typedef struct process
63938 - struct process *next; /* next process in pipeline */
63939 - char **argv; /* for exec */
63940 - pid_t pid; /* process ID */
63941 - char completed; /* true if process has completed */
63942 - char stopped; /* true if process has stopped */
63943 - int status; /* reported status value */
63944 - } process;
63946 - /* A job is a pipeline of processes. */
63947 - typedef struct job
63949 - struct job *next; /* next active job */
63950 - char *command; /* command line, used for messages */
63951 - process *first_process; /* list of processes in this job */
63952 - pid_t pgid; /* process group ID */
63953 - char notified; /* true if user told about stopped job */
63954 - struct termios tmodes; /* saved terminal modes */
63955 - int stdin, stdout, stderr; /* standard i/o channels */
63956 - } job;
63958 - /* The active jobs are linked into a list. This is its head. */
63959 - job *first_job = NULL;
63961 - Here are some utility functions that are used for operating on `job'
63962 -objects.
63964 - /* Find the active job with the indicated PGID. */
63965 - job *
63966 - find_job (pid_t pgid)
63968 - job *j;
63970 - for (j = first_job; j; j = j->next)
63971 - if (j->pgid == pgid)
63972 - return j;
63973 - return NULL;
63976 - /* Return true if all processes in the job have stopped or completed. */
63977 - int
63978 - job_is_stopped (job *j)
63980 - process *p;
63982 - for (p = j->first_process; p; p = p->next)
63983 - if (!p->completed && !p->stopped)
63984 - return 0;
63985 - return 1;
63988 - /* Return true if all processes in the job have completed. */
63989 - int
63990 - job_is_completed (job *j)
63992 - process *p;
63994 - for (p = j->first_process; p; p = p->next)
63995 - if (!p->completed)
63996 - return 0;
63997 - return 1;
64000 -\x1f
64001 -File: libc.info, Node: Initializing the Shell, Next: Launching Jobs, Prev: Data Structures, Up: Implementing a Shell
64003 -Initializing the Shell
64004 -----------------------
64006 - When a shell program that normally performs job control is started,
64007 -it has to be careful in case it has been invoked from another shell
64008 -that is already doing its own job control.
64010 - A subshell that runs interactively has to ensure that it has been
64011 -placed in the foreground by its parent shell before it can enable job
64012 -control itself. It does this by getting its initial process group ID
64013 -with the `getpgrp' function, and comparing it to the process group ID
64014 -of the current foreground job associated with its controlling terminal
64015 -(which can be retrieved using the `tcgetpgrp' function).
64017 - If the subshell is not running as a foreground job, it must stop
64018 -itself by sending a `SIGTTIN' signal to its own process group. It may
64019 -not arbitrarily put itself into the foreground; it must wait for the
64020 -user to tell the parent shell to do this. If the subshell is continued
64021 -again, it should repeat the check and stop itself again if it is still
64022 -not in the foreground.
64024 - Once the subshell has been placed into the foreground by its parent
64025 -shell, it can enable its own job control. It does this by calling
64026 -`setpgid' to put itself into its own process group, and then calling
64027 -`tcsetpgrp' to place this process group into the foreground.
64029 - When a shell enables job control, it should set itself to ignore all
64030 -the job control stop signals so that it doesn't accidentally stop
64031 -itself. You can do this by setting the action for all the stop signals
64032 -to `SIG_IGN'.
64034 - A subshell that runs non-interactively cannot and should not support
64035 -job control. It must leave all processes it creates in the same process
64036 -group as the shell itself; this allows the non-interactive shell and its
64037 -child processes to be treated as a single job by the parent shell. This
64038 -is easy to do--just don't use any of the job control primitives--but
64039 -you must remember to make the shell do it.
64041 - Here is the initialization code for the sample shell that shows how
64042 -to do all of this.
64044 - /* Keep track of attributes of the shell. */
64046 - #include <sys/types.h>
64047 - #include <termios.h>
64048 - #include <unistd.h>
64050 - pid_t shell_pgid;
64051 - struct termios shell_tmodes;
64052 - int shell_terminal;
64053 - int shell_is_interactive;
64056 - /* Make sure the shell is running interactively as the foreground job
64057 - before proceeding. */
64059 - void
64060 - init_shell ()
64063 - /* See if we are running interactively. */
64064 - shell_terminal = STDIN_FILENO;
64065 - shell_is_interactive = isatty (shell_terminal);
64067 - if (shell_is_interactive)
64069 - /* Loop until we are in the foreground. */
64070 - while (tcgetpgrp (shell_terminal) != (shell_pgid = getpgrp ()))
64071 - kill (- shell_pgid, SIGTTIN);
64073 - /* Ignore interactive and job-control signals. */
64074 - signal (SIGINT, SIG_IGN);
64075 - signal (SIGQUIT, SIG_IGN);
64076 - signal (SIGTSTP, SIG_IGN);
64077 - signal (SIGTTIN, SIG_IGN);
64078 - signal (SIGTTOU, SIG_IGN);
64079 - signal (SIGCHLD, SIG_IGN);
64081 - /* Put ourselves in our own process group. */
64082 - shell_pgid = getpid ();
64083 - if (setpgid (shell_pgid, shell_pgid) < 0)
64085 - perror ("Couldn't put the shell in its own process group");
64086 - exit (1);
64089 - /* Grab control of the terminal. */
64090 - tcsetpgrp (shell_terminal, shell_pgid);
64092 - /* Save default terminal attributes for shell. */
64093 - tcgetattr (shell_terminal, &shell_tmodes);
64097 -\x1f
64098 -File: libc.info, Node: Launching Jobs, Next: Foreground and Background, Prev: Initializing the Shell, Up: Implementing a Shell
64100 -Launching Jobs
64101 ---------------
64103 - Once the shell has taken responsibility for performing job control on
64104 -its controlling terminal, it can launch jobs in response to commands
64105 -typed by the user.
64107 - To create the processes in a process group, you use the same `fork'
64108 -and `exec' functions described in *Note Process Creation Concepts::.
64109 -Since there are multiple child processes involved, though, things are a
64110 -little more complicated and you must be careful to do things in the
64111 -right order. Otherwise, nasty race conditions can result.
64113 - You have two choices for how to structure the tree of parent-child
64114 -relationships among the processes. You can either make all the
64115 -processes in the process group be children of the shell process, or you
64116 -can make one process in group be the ancestor of all the other processes
64117 -in that group. The sample shell program presented in this chapter uses
64118 -the first approach because it makes bookkeeping somewhat simpler.
64120 - As each process is forked, it should put itself in the new process
64121 -group by calling `setpgid'; see *Note Process Group Functions::. The
64122 -first process in the new group becomes its "process group leader", and
64123 -its process ID becomes the "process group ID" for the group.
64125 - The shell should also call `setpgid' to put each of its child
64126 -processes into the new process group. This is because there is a
64127 -potential timing problem: each child process must be put in the process
64128 -group before it begins executing a new program, and the shell depends on
64129 -having all the child processes in the group before it continues
64130 -executing. If both the child processes and the shell call `setpgid',
64131 -this ensures that the right things happen no matter which process gets
64132 -to it first.
64134 - If the job is being launched as a foreground job, the new process
64135 -group also needs to be put into the foreground on the controlling
64136 -terminal using `tcsetpgrp'. Again, this should be done by the shell as
64137 -well as by each of its child processes, to avoid race conditions.
64139 - The next thing each child process should do is to reset its signal
64140 -actions.
64142 - During initialization, the shell process set itself to ignore job
64143 -control signals; see *Note Initializing the Shell::. As a result, any
64144 -child processes it creates also ignore these signals by inheritance.
64145 -This is definitely undesirable, so each child process should explicitly
64146 -set the actions for these signals back to `SIG_DFL' just after it is
64147 -forked.
64149 - Since shells follow this convention, applications can assume that
64150 -they inherit the correct handling of these signals from the parent
64151 -process. But every application has a responsibility not to mess up the
64152 -handling of stop signals. Applications that disable the normal
64153 -interpretation of the SUSP character should provide some other
64154 -mechanism for the user to stop the job. When the user invokes this
64155 -mechanism, the program should send a `SIGTSTP' signal to the process
64156 -group of the process, not just to the process itself. *Note Signaling
64157 -Another Process::.
64159 - Finally, each child process should call `exec' in the normal way.
64160 -This is also the point at which redirection of the standard input and
64161 -output channels should be handled. *Note Duplicating Descriptors::,
64162 -for an explanation of how to do this.
64164 - Here is the function from the sample shell program that is
64165 -responsible for launching a program. The function is executed by each
64166 -child process immediately after it has been forked by the shell, and
64167 -never returns.
64169 - void
64170 - launch_process (process *p, pid_t pgid,
64171 - int infile, int outfile, int errfile,
64172 - int foreground)
64174 - pid_t pid;
64176 - if (shell_is_interactive)
64178 - /* Put the process into the process group and give the process group
64179 - the terminal, if appropriate.
64180 - This has to be done both by the shell and in the individual
64181 - child processes because of potential race conditions. */
64182 - pid = getpid ();
64183 - if (pgid == 0) pgid = pid;
64184 - setpgid (pid, pgid);
64185 - if (foreground)
64186 - tcsetpgrp (shell_terminal, pgid);
64188 - /* Set the handling for job control signals back to the default. */
64189 - signal (SIGINT, SIG_DFL);
64190 - signal (SIGQUIT, SIG_DFL);
64191 - signal (SIGTSTP, SIG_DFL);
64192 - signal (SIGTTIN, SIG_DFL);
64193 - signal (SIGTTOU, SIG_DFL);
64194 - signal (SIGCHLD, SIG_DFL);
64197 - /* Set the standard input/output channels of the new process. */
64198 - if (infile != STDIN_FILENO)
64200 - dup2 (infile, STDIN_FILENO);
64201 - close (infile);
64203 - if (outfile != STDOUT_FILENO)
64205 - dup2 (outfile, STDOUT_FILENO);
64206 - close (outfile);
64208 - if (errfile != STDERR_FILENO)
64210 - dup2 (errfile, STDERR_FILENO);
64211 - close (errfile);
64214 - /* Exec the new process. Make sure we exit. */
64215 - execvp (p->argv[0], p->argv);
64216 - perror ("execvp");
64217 - exit (1);
64220 - If the shell is not running interactively, this function does not do
64221 -anything with process groups or signals. Remember that a shell not
64222 -performing job control must keep all of its subprocesses in the same
64223 -process group as the shell itself.
64225 - Next, here is the function that actually launches a complete job.
64226 -After creating the child processes, this function calls some other
64227 -functions to put the newly created job into the foreground or
64228 -background; these are discussed in *Note Foreground and Background::.
64230 - void
64231 - launch_job (job *j, int foreground)
64233 - process *p;
64234 - pid_t pid;
64235 - int mypipe[2], infile, outfile;
64237 - infile = j->stdin;
64238 - for (p = j->first_process; p; p = p->next)
64240 - /* Set up pipes, if necessary. */
64241 - if (p->next)
64243 - if (pipe (mypipe) < 0)
64245 - perror ("pipe");
64246 - exit (1);
64248 - outfile = mypipe[1];
64250 - else
64251 - outfile = j->stdout;
64253 - /* Fork the child processes. */
64254 - pid = fork ();
64255 - if (pid == 0)
64256 - /* This is the child process. */
64257 - launch_process (p, j->pgid, infile,
64258 - outfile, j->stderr, foreground);
64259 - else if (pid < 0)
64261 - /* The fork failed. */
64262 - perror ("fork");
64263 - exit (1);
64265 - else
64267 - /* This is the parent process. */
64268 - p->pid = pid;
64269 - if (shell_is_interactive)
64271 - if (!j->pgid)
64272 - j->pgid = pid;
64273 - setpgid (pid, j->pgid);
64277 - /* Clean up after pipes. */
64278 - if (infile != j->stdin)
64279 - close (infile);
64280 - if (outfile != j->stdout)
64281 - close (outfile);
64282 - infile = mypipe[0];
64285 - format_job_info (j, "launched");
64287 - if (!shell_is_interactive)
64288 - wait_for_job (j);
64289 - else if (foreground)
64290 - put_job_in_foreground (j, 0);
64291 - else
64292 - put_job_in_background (j, 0);
64295 -\x1f
64296 -File: libc.info, Node: Foreground and Background, Next: Stopped and Terminated Jobs, Prev: Launching Jobs, Up: Implementing a Shell
64298 -Foreground and Background
64299 --------------------------
64301 - Now let's consider what actions must be taken by the shell when it
64302 -launches a job into the foreground, and how this differs from what must
64303 -be done when a background job is launched.
64305 - When a foreground job is launched, the shell must first give it
64306 -access to the controlling terminal by calling `tcsetpgrp'. Then, the
64307 -shell should wait for processes in that process group to terminate or
64308 -stop. This is discussed in more detail in *Note Stopped and Terminated
64309 -Jobs::.
64311 - When all of the processes in the group have either completed or
64312 -stopped, the shell should regain control of the terminal for its own
64313 -process group by calling `tcsetpgrp' again. Since stop signals caused
64314 -by I/O from a background process or a SUSP character typed by the user
64315 -are sent to the process group, normally all the processes in the job
64316 -stop together.
64318 - The foreground job may have left the terminal in a strange state, so
64319 -the shell should restore its own saved terminal modes before
64320 -continuing. In case the job is merely stopped, the shell should first
64321 -save the current terminal modes so that it can restore them later if
64322 -the job is continued. The functions for dealing with terminal modes are
64323 -`tcgetattr' and `tcsetattr'; these are described in *Note Terminal
64324 -Modes::.
64326 - Here is the sample shell's function for doing all of this.
64328 - /* Put job J in the foreground. If CONT is nonzero,
64329 - restore the saved terminal modes and send the process group a
64330 - `SIGCONT' signal to wake it up before we block. */
64332 - void
64333 - put_job_in_foreground (job *j, int cont)
64335 - /* Put the job into the foreground. */
64336 - tcsetpgrp (shell_terminal, j->pgid);
64338 - /* Send the job a continue signal, if necessary. */
64339 - if (cont)
64341 - tcsetattr (shell_terminal, TCSADRAIN, &j->tmodes);
64342 - if (kill (- j->pgid, SIGCONT) < 0)
64343 - perror ("kill (SIGCONT)");
64346 - /* Wait for it to report. */
64347 - wait_for_job (j);
64349 - /* Put the shell back in the foreground. */
64350 - tcsetpgrp (shell_terminal, shell_pgid);
64352 - /* Restore the shell's terminal modes. */
64353 - tcgetattr (shell_terminal, &j->tmodes);
64354 - tcsetattr (shell_terminal, TCSADRAIN, &shell_tmodes);
64357 - If the process group is launched as a background job, the shell
64358 -should remain in the foreground itself and continue to read commands
64359 -from the terminal.
64361 - In the sample shell, there is not much that needs to be done to put
64362 -a job into the background. Here is the function it uses:
64364 - /* Put a job in the background. If the cont argument is true, send
64365 - the process group a `SIGCONT' signal to wake it up. */
64367 - void
64368 - put_job_in_background (job *j, int cont)
64370 - /* Send the job a continue signal, if necessary. */
64371 - if (cont)
64372 - if (kill (-j->pgid, SIGCONT) < 0)
64373 - perror ("kill (SIGCONT)");
64376 diff -u -udbrN glibc-2.3.2/manual/libc.info-45 glibc-2.3.2-200304020432/manual/libc.info-45
64377 --- glibc-2.3.2/manual/libc.info-45 Sat Mar 1 02:39:41 2003
64378 +++ glibc-2.3.2-200304020432/manual/libc.info-45 Thu Jan 1 01:00:00 1970
64379 @@ -1,1245 +0,0 @@
64380 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
64382 -INFO-DIR-SECTION GNU libraries
64383 -START-INFO-DIR-ENTRY
64384 -* Libc: (libc). C library.
64385 -END-INFO-DIR-ENTRY
64387 - This file documents the GNU C library.
64389 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
64390 -Reference Manual', for Version 2.3.x.
64392 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
64393 -Free Software Foundation, Inc.
64395 - Permission is granted to copy, distribute and/or modify this document
64396 -under the terms of the GNU Free Documentation License, Version 1.1 or
64397 -any later version published by the Free Software Foundation; with the
64398 -Invariant Sections being "Free Software Needs Free Documentation" and
64399 -"GNU Lesser General Public License", the Front-Cover texts being (a)
64400 -(see below), and with the Back-Cover Texts being (b) (see below). A
64401 -copy of the license is included in the section entitled "GNU Free
64402 -Documentation License".
64404 - (a) The FSF's Front-Cover Text is:
64406 - A GNU Manual
64408 - (b) The FSF's Back-Cover Text is:
64410 - You have freedom to copy and modify this GNU Manual, like GNU
64411 -software. Copies published by the Free Software Foundation raise
64412 -funds for GNU development.
64414 -\x1f
64415 -File: libc.info, Node: Stopped and Terminated Jobs, Next: Continuing Stopped Jobs, Prev: Foreground and Background, Up: Implementing a Shell
64417 -Stopped and Terminated Jobs
64418 ----------------------------
64420 - When a foreground process is launched, the shell must block until
64421 -all of the processes in that job have either terminated or stopped. It
64422 -can do this by calling the `waitpid' function; see *Note Process
64423 -Completion::. Use the `WUNTRACED' option so that status is reported
64424 -for processes that stop as well as processes that terminate.
64426 - The shell must also check on the status of background jobs so that it
64427 -can report terminated and stopped jobs to the user; this can be done by
64428 -calling `waitpid' with the `WNOHANG' option. A good place to put a
64429 -such a check for terminated and stopped jobs is just before prompting
64430 -for a new command.
64432 - The shell can also receive asynchronous notification that there is
64433 -status information available for a child process by establishing a
64434 -handler for `SIGCHLD' signals. *Note Signal Handling::.
64436 - In the sample shell program, the `SIGCHLD' signal is normally
64437 -ignored. This is to avoid reentrancy problems involving the global data
64438 -structures the shell manipulates. But at specific times when the shell
64439 -is not using these data structures--such as when it is waiting for
64440 -input on the terminal--it makes sense to enable a handler for
64441 -`SIGCHLD'. The same function that is used to do the synchronous status
64442 -checks (`do_job_notification', in this case) can also be called from
64443 -within this handler.
64445 - Here are the parts of the sample shell program that deal with
64446 -checking the status of jobs and reporting the information to the user.
64448 - /* Store the status of the process PID that was returned by waitpid.
64449 - Return 0 if all went well, nonzero otherwise. */
64451 - int
64452 - mark_process_status (pid_t pid, int status)
64454 - job *j;
64455 - process *p;
64457 - if (pid > 0)
64459 - /* Update the record for the process. */
64460 - for (j = first_job; j; j = j->next)
64461 - for (p = j->first_process; p; p = p->next)
64462 - if (p->pid == pid)
64464 - p->status = status;
64465 - if (WIFSTOPPED (status))
64466 - p->stopped = 1;
64467 - else
64469 - p->completed = 1;
64470 - if (WIFSIGNALED (status))
64471 - fprintf (stderr, "%d: Terminated by signal %d.\n",
64472 - (int) pid, WTERMSIG (p->status));
64474 - return 0;
64476 - fprintf (stderr, "No child process %d.\n", pid);
64477 - return -1;
64479 - else if (pid == 0 || errno == ECHILD)
64480 - /* No processes ready to report. */
64481 - return -1;
64482 - else {
64483 - /* Other weird errors. */
64484 - perror ("waitpid");
64485 - return -1;
64489 - /* Check for processes that have status information available,
64490 - without blocking. */
64492 - void
64493 - update_status (void)
64495 - int status;
64496 - pid_t pid;
64498 - do
64499 - pid = waitpid (WAIT_ANY, &status, WUNTRACED|WNOHANG);
64500 - while (!mark_process_status (pid, status));
64503 - /* Check for processes that have status information available,
64504 - blocking until all processes in the given job have reported. */
64506 - void
64507 - wait_for_job (job *j)
64509 - int status;
64510 - pid_t pid;
64512 - do
64513 - pid = waitpid (WAIT_ANY, &status, WUNTRACED);
64514 - while (!mark_process_status (pid, status)
64515 - && !job_is_stopped (j)
64516 - && !job_is_completed (j));
64519 - /* Format information about job status for the user to look at. */
64521 - void
64522 - format_job_info (job *j, const char *status)
64524 - fprintf (stderr, "%ld (%s): %s\n", (long)j->pgid, status, j->command);
64527 - /* Notify the user about stopped or terminated jobs.
64528 - Delete terminated jobs from the active job list. */
64530 - void
64531 - do_job_notification (void)
64533 - job *j, *jlast, *jnext;
64534 - process *p;
64536 - /* Update status information for child processes. */
64537 - update_status ();
64539 - jlast = NULL;
64540 - for (j = first_job; j; j = jnext)
64542 - jnext = j->next;
64544 - /* If all processes have completed, tell the user the job has
64545 - completed and delete it from the list of active jobs. */
64546 - if (job_is_completed (j)) {
64547 - format_job_info (j, "completed");
64548 - if (jlast)
64549 - jlast->next = jnext;
64550 - else
64551 - first_job = jnext;
64552 - free_job (j);
64555 - /* Notify the user about stopped jobs,
64556 - marking them so that we won't do this more than once. */
64557 - else if (job_is_stopped (j) && !j->notified) {
64558 - format_job_info (j, "stopped");
64559 - j->notified = 1;
64560 - jlast = j;
64563 - /* Don't say anything about jobs that are still running. */
64564 - else
64565 - jlast = j;
64569 -\x1f
64570 -File: libc.info, Node: Continuing Stopped Jobs, Next: Missing Pieces, Prev: Stopped and Terminated Jobs, Up: Implementing a Shell
64572 -Continuing Stopped Jobs
64573 ------------------------
64575 - The shell can continue a stopped job by sending a `SIGCONT' signal
64576 -to its process group. If the job is being continued in the foreground,
64577 -the shell should first invoke `tcsetpgrp' to give the job access to the
64578 -terminal, and restore the saved terminal settings. After continuing a
64579 -job in the foreground, the shell should wait for the job to stop or
64580 -complete, as if the job had just been launched in the foreground.
64582 - The sample shell program handles both newly created and continued
64583 -jobs with the same pair of functions, `put_job_in_foreground' and
64584 -`put_job_in_background'. The definitions of these functions were given
64585 -in *Note Foreground and Background::. When continuing a stopped job, a
64586 -nonzero value is passed as the CONT argument to ensure that the
64587 -`SIGCONT' signal is sent and the terminal modes reset, as appropriate.
64589 - This leaves only a function for updating the shell's internal
64590 -bookkeeping about the job being continued:
64592 - /* Mark a stopped job J as being running again. */
64594 - void
64595 - mark_job_as_running (job *j)
64597 - Process *p;
64599 - for (p = j->first_process; p; p = p->next)
64600 - p->stopped = 0;
64601 - j->notified = 0;
64604 - /* Continue the job J. */
64606 - void
64607 - continue_job (job *j, int foreground)
64609 - mark_job_as_running (j);
64610 - if (foreground)
64611 - put_job_in_foreground (j, 1);
64612 - else
64613 - put_job_in_background (j, 1);
64616 -\x1f
64617 -File: libc.info, Node: Missing Pieces, Prev: Continuing Stopped Jobs, Up: Implementing a Shell
64619 -The Missing Pieces
64620 -------------------
64622 - The code extracts for the sample shell included in this chapter are
64623 -only a part of the entire shell program. In particular, nothing at all
64624 -has been said about how `job' and `program' data structures are
64625 -allocated and initialized.
64627 - Most real shells provide a complex user interface that has support
64628 -for a command language; variables; abbreviations, substitutions, and
64629 -pattern matching on file names; and the like. All of this is far too
64630 -complicated to explain here! Instead, we have concentrated on showing
64631 -how to implement the core process creation and job control functions
64632 -that can be called from such a shell.
64634 - Here is a table summarizing the major entry points we have presented:
64636 -`void init_shell (void)'
64637 - Initialize the shell's internal state. *Note Initializing the
64638 - Shell::.
64640 -`void launch_job (job *J, int FOREGROUND)'
64641 - Launch the job J as either a foreground or background job. *Note
64642 - Launching Jobs::.
64644 -`void do_job_notification (void)'
64645 - Check for and report any jobs that have terminated or stopped.
64646 - Can be called synchronously or within a handler for `SIGCHLD'
64647 - signals. *Note Stopped and Terminated Jobs::.
64649 -`void continue_job (job *J, int FOREGROUND)'
64650 - Continue the job J. *Note Continuing Stopped Jobs::.
64652 - Of course, a real shell would also want to provide other functions
64653 -for managing jobs. For example, it would be useful to have commands to
64654 -list all active jobs or to send a signal (such as `SIGKILL') to a job.
64656 -\x1f
64657 -File: libc.info, Node: Functions for Job Control, Prev: Implementing a Shell, Up: Job Control
64659 -Functions for Job Control
64660 -=========================
64662 - This section contains detailed descriptions of the functions relating
64663 -to job control.
64665 -* Menu:
64667 -* Identifying the Terminal:: Determining the controlling terminal's name.
64668 -* Process Group Functions:: Functions for manipulating process groups.
64669 -* Terminal Access Functions:: Functions for controlling terminal access.
64671 -\x1f
64672 -File: libc.info, Node: Identifying the Terminal, Next: Process Group Functions, Up: Functions for Job Control
64674 -Identifying the Controlling Terminal
64675 -------------------------------------
64677 - You can use the `ctermid' function to get a file name that you can
64678 -use to open the controlling terminal. In the GNU library, it returns
64679 -the same string all the time: `"/dev/tty"'. That is a special "magic"
64680 -file name that refers to the controlling terminal of the current
64681 -process (if it has one). To find the name of the specific terminal
64682 -device, use `ttyname'; *note Is It a Terminal::.
64684 - The function `ctermid' is declared in the header file `stdio.h'.
64686 - - Function: char * ctermid (char *STRING)
64687 - The `ctermid' function returns a string containing the file name of
64688 - the controlling terminal for the current process. If STRING is
64689 - not a null pointer, it should be an array that can hold at least
64690 - `L_ctermid' characters; the string is returned in this array.
64691 - Otherwise, a pointer to a string in a static area is returned,
64692 - which might get overwritten on subsequent calls to this function.
64694 - An empty string is returned if the file name cannot be determined
64695 - for any reason. Even if a file name is returned, access to the
64696 - file it represents is not guaranteed.
64698 - - Macro: int L_ctermid
64699 - The value of this macro is an integer constant expression that
64700 - represents the size of a string large enough to hold the file name
64701 - returned by `ctermid'.
64703 - See also the `isatty' and `ttyname' functions, in *Note Is It a
64704 -Terminal::.
64706 -\x1f
64707 -File: libc.info, Node: Process Group Functions, Next: Terminal Access Functions, Prev: Identifying the Terminal, Up: Functions for Job Control
64709 -Process Group Functions
64710 ------------------------
64712 - Here are descriptions of the functions for manipulating process
64713 -groups. Your program should include the header files `sys/types.h' and
64714 -`unistd.h' to use these functions.
64716 - - Function: pid_t setsid (void)
64717 - The `setsid' function creates a new session. The calling process
64718 - becomes the session leader, and is put in a new process group whose
64719 - process group ID is the same as the process ID of that process.
64720 - There are initially no other processes in the new process group,
64721 - and no other process groups in the new session.
64723 - This function also makes the calling process have no controlling
64724 - terminal.
64726 - The `setsid' function returns the new process group ID of the
64727 - calling process if successful. A return value of `-1' indicates an
64728 - error. The following `errno' error conditions are defined for this
64729 - function:
64731 - `EPERM'
64732 - The calling process is already a process group leader, or
64733 - there is already another process group around that has the
64734 - same process group ID.
64736 - - Function: pid_t getsid (pid_t PID)
64737 - The `getsid' function returns the process group ID of the session
64738 - leader of the specified process. If a PID is `0', the process
64739 - group ID of the session leader of the current process is returned.
64741 - In case of error `-1' is returned and `errno' is set. The
64742 - following `errno' error conditions are defined for this function:
64744 - `ESRCH'
64745 - There is no process with the given process ID PID.
64747 - `EPERM'
64748 - The calling process and the process specified by PID are in
64749 - different sessions, and the implementation doesn't allow to
64750 - access the process group ID of the session leader of the
64751 - process with ID PID from the calling process.
64753 - The `getpgrp' function has two definitions: one derived from BSD
64754 -Unix, and one from the POSIX.1 standard. The feature test macros you
64755 -have selected (*note Feature Test Macros::) determine which definition
64756 -you get. Specifically, you get the BSD version if you define
64757 -`_BSD_SOURCE'; otherwise, you get the POSIX version if you define
64758 -`_POSIX_SOURCE' or `_GNU_SOURCE'. Programs written for old BSD systems
64759 -will not include `unistd.h', which defines `getpgrp' specially under
64760 -`_BSD_SOURCE'. You must link such programs with the `-lbsd-compat'
64761 -option to get the BSD definition.
64763 - - POSIX.1 Function: pid_t getpgrp (void)
64764 - The POSIX.1 definition of `getpgrp' returns the process group ID of
64765 - the calling process.
64767 - - BSD Function: pid_t getpgrp (pid_t PID)
64768 - The BSD definition of `getpgrp' returns the process group ID of the
64769 - process PID. You can supply a value of `0' for the PID argument
64770 - to get information about the calling process.
64772 - - System V Function: int getpgid (pid_t PID)
64773 - `getpgid' is the same as the BSD function `getpgrp'. It returns
64774 - the process group ID of the process PID. You can supply a value
64775 - of `0' for the PID argument to get information about the calling
64776 - process.
64778 - In case of error `-1' is returned and `errno' is set. The
64779 - following `errno' error conditions are defined for this function:
64781 - `ESRCH'
64782 - There is no process with the given process ID PID. The
64783 - calling process and the process specified by PID are in
64784 - different sessions, and the implementation doesn't allow to
64785 - access the process group ID of the process with ID PID from
64786 - the calling process.
64788 - - Function: int setpgid (pid_t PID, pid_t PGID)
64789 - The `setpgid' function puts the process PID into the process group
64790 - PGID. As a special case, either PID or PGID can be zero to
64791 - indicate the process ID of the calling process.
64793 - This function fails on a system that does not support job control.
64794 - *Note Job Control is Optional::, for more information.
64796 - If the operation is successful, `setpgid' returns zero. Otherwise
64797 - it returns `-1'. The following `errno' error conditions are
64798 - defined for this function:
64800 - `EACCES'
64801 - The child process named by PID has executed an `exec'
64802 - function since it was forked.
64804 - `EINVAL'
64805 - The value of the PGID is not valid.
64807 - `ENOSYS'
64808 - The system doesn't support job control.
64810 - `EPERM'
64811 - The process indicated by the PID argument is a session leader,
64812 - or is not in the same session as the calling process, or the
64813 - value of the PGID argument doesn't match a process group ID
64814 - in the same session as the calling process.
64816 - `ESRCH'
64817 - The process indicated by the PID argument is not the calling
64818 - process or a child of the calling process.
64820 - - Function: int setpgrp (pid_t PID, pid_t PGID)
64821 - This is the BSD Unix name for `setpgid'. Both functions do exactly
64822 - the same thing.
64824 -\x1f
64825 -File: libc.info, Node: Terminal Access Functions, Prev: Process Group Functions, Up: Functions for Job Control
64827 -Functions for Controlling Terminal Access
64828 ------------------------------------------
64830 - These are the functions for reading or setting the foreground
64831 -process group of a terminal. You should include the header files
64832 -`sys/types.h' and `unistd.h' in your application to use these functions.
64834 - Although these functions take a file descriptor argument to specify
64835 -the terminal device, the foreground job is associated with the terminal
64836 -file itself and not a particular open file descriptor.
64838 - - Function: pid_t tcgetpgrp (int FILEDES)
64839 - This function returns the process group ID of the foreground
64840 - process group associated with the terminal open on descriptor
64841 - FILEDES.
64843 - If there is no foreground process group, the return value is a
64844 - number greater than `1' that does not match the process group ID
64845 - of any existing process group. This can happen if all of the
64846 - processes in the job that was formerly the foreground job have
64847 - terminated, and no other job has yet been moved into the
64848 - foreground.
64850 - In case of an error, a value of `-1' is returned. The following
64851 - `errno' error conditions are defined for this function:
64853 - `EBADF'
64854 - The FILEDES argument is not a valid file descriptor.
64856 - `ENOSYS'
64857 - The system doesn't support job control.
64859 - `ENOTTY'
64860 - The terminal file associated with the FILEDES argument isn't
64861 - the controlling terminal of the calling process.
64863 - - Function: int tcsetpgrp (int FILEDES, pid_t PGID)
64864 - This function is used to set a terminal's foreground process group
64865 - ID. The argument FILEDES is a descriptor which specifies the
64866 - terminal; PGID specifies the process group. The calling process
64867 - must be a member of the same session as PGID and must have the same
64868 - controlling terminal.
64870 - For terminal access purposes, this function is treated as output.
64871 - If it is called from a background process on its controlling
64872 - terminal, normally all processes in the process group are sent a
64873 - `SIGTTOU' signal. The exception is if the calling process itself
64874 - is ignoring or blocking `SIGTTOU' signals, in which case the
64875 - operation is performed and no signal is sent.
64877 - If successful, `tcsetpgrp' returns `0'. A return value of `-1'
64878 - indicates an error. The following `errno' error conditions are
64879 - defined for this function:
64881 - `EBADF'
64882 - The FILEDES argument is not a valid file descriptor.
64884 - `EINVAL'
64885 - The PGID argument is not valid.
64887 - `ENOSYS'
64888 - The system doesn't support job control.
64890 - `ENOTTY'
64891 - The FILEDES isn't the controlling terminal of the calling
64892 - process.
64894 - `EPERM'
64895 - The PGID isn't a process group in the same session as the
64896 - calling process.
64898 - - Function: pid_t tcgetsid (int FILDES)
64899 - This function is used to obtain the process group ID of the session
64900 - for which the terminal specified by FILDES is the controlling
64901 - terminal. If the call is successful the group ID is returned.
64902 - Otherwise the return value is `(pid_t) -1' and the global variable
64903 - ERRNO is set to the following value:
64904 - `EBADF'
64905 - The FILEDES argument is not a valid file descriptor.
64907 - `ENOTTY'
64908 - The calling process does not have a controlling terminal, or
64909 - the file is not the controlling terminal.
64911 -\x1f
64912 -File: libc.info, Node: Name Service Switch, Next: Users and Groups, Prev: Job Control, Up: Top
64914 -System Databases and Name Service Switch
64915 -****************************************
64917 - Various functions in the C Library need to be configured to work
64918 -correctly in the local environment. Traditionally, this was done by
64919 -using files (e.g., `/etc/passwd'), but other nameservices (like the
64920 -Network Information Service (NIS) and the Domain Name Service (DNS))
64921 -became popular, and were hacked into the C library, usually with a fixed
64922 -search order (*note frobnicate: (jargon)frobnicate.).
64924 - The GNU C Library contains a cleaner solution of this problem. It is
64925 -designed after a method used by Sun Microsystems in the C library of
64926 -Solaris 2. GNU C Library follows their name and calls this scheme
64927 -"Name Service Switch" (NSS).
64929 - Though the interface might be similar to Sun's version there is no
64930 -common code. We never saw any source code of Sun's implementation and
64931 -so the internal interface is incompatible. This also manifests in the
64932 -file names we use as we will see later.
64934 -* Menu:
64936 -* NSS Basics:: What is this NSS good for.
64937 -* NSS Configuration File:: Configuring NSS.
64938 -* NSS Module Internals:: How does it work internally.
64939 -* Extending NSS:: What to do to add services or databases.
64941 -\x1f
64942 -File: libc.info, Node: NSS Basics, Next: NSS Configuration File, Prev: Name Service Switch, Up: Name Service Switch
64944 -NSS Basics
64945 -==========
64947 - The basic idea is to put the implementation of the different services
64948 -offered to access the databases in separate modules. This has some
64949 -advantages:
64951 - 1. Contributors can add new services without adding them to GNU C
64952 - Library.
64954 - 2. The modules can be updated separately.
64956 - 3. The C library image is smaller.
64958 - To fulfill the first goal above the ABI of the modules will be
64959 -described below. For getting the implementation of a new service right
64960 -it is important to understand how the functions in the modules get
64961 -called. They are in no way designed to be used by the programmer
64962 -directly. Instead the programmer should only use the documented and
64963 -standardized functions to access the databases.
64965 -The databases available in the NSS are
64967 -`aliases'
64968 - Mail aliases
64970 -`ethers'
64971 - Ethernet numbers,
64973 -`group'
64974 - Groups of users, *note Group Database::.
64976 -`hosts'
64977 - Host names and numbers, *note Host Names::.
64979 -`netgroup'
64980 - Network wide list of host and users, *note Netgroup Database::.
64982 -`networks'
64983 - Network names and numbers, *note Networks Database::.
64985 -`protocols'
64986 - Network protocols, *note Protocols Database::.
64988 -`passwd'
64989 - User passwords, *note User Database::.
64991 -`rpc'
64992 - Remote procedure call names and numbers,
64994 -`services'
64995 - Network services, *note Services Database::.
64997 -`shadow'
64998 - Shadow user passwords,
65000 -There will be some more added later (`automount', `bootparams',
65001 -`netmasks', and `publickey').
65003 -\x1f
65004 -File: libc.info, Node: NSS Configuration File, Next: NSS Module Internals, Prev: NSS Basics, Up: Name Service Switch
65006 -The NSS Configuration File
65007 -==========================
65009 - Somehow the NSS code must be told about the wishes of the user. For
65010 -this reason there is the file `/etc/nsswitch.conf'. For each database
65011 -this file contain a specification how the lookup process should work.
65012 -The file could look like this:
65014 - # /etc/nsswitch.conf
65016 - # Name Service Switch configuration file.
65019 - passwd: db files nis
65020 - shadow: files
65021 - group: db files nis
65023 - hosts: files nisplus nis dns
65024 - networks: nisplus [NOTFOUND=return] files
65026 - ethers: nisplus [NOTFOUND=return] db files
65027 - protocols: nisplus [NOTFOUND=return] db files
65028 - rpc: nisplus [NOTFOUND=return] db files
65029 - services: nisplus [NOTFOUND=return] db files
65031 - The first column is the database as you can guess from the table
65032 -above. The rest of the line specifies how the lookup process works.
65033 -Please note that you specify the way it works for each database
65034 -individually. This cannot be done with the old way of a monolithic
65035 -implementation.
65037 - The configuration specification for each database can contain two
65038 -different items:
65040 - * the service specification like `files', `db', or `nis'.
65042 - * the reaction on lookup result like `[NOTFOUND=return]'.
65044 -* Menu:
65046 -* Services in the NSS configuration:: Service names in the NSS configuration.
65047 -* Actions in the NSS configuration:: React appropriately to the lookup result.
65048 -* Notes on NSS Configuration File:: Things to take care about while
65049 - configuring NSS.
65051 -\x1f
65052 -File: libc.info, Node: Services in the NSS configuration, Next: Actions in the NSS configuration, Prev: NSS Configuration File, Up: NSS Configuration File
65054 -Services in the NSS configuration File
65055 ---------------------------------------
65057 - The above example file mentions four different services: `files',
65058 -`db', `nis', and `nisplus'. This does not mean these services are
65059 -available on all sites and it does also not mean these are all the
65060 -services which will ever be available.
65062 - In fact, these names are simply strings which the NSS code uses to
65063 -find the implicitly addressed functions. The internal interface will be
65064 -described later. Visible to the user are the modules which implement an
65065 -individual service.
65067 - Assume the service NAME shall be used for a lookup. The code for
65068 -this service is implemented in a module called `libnss_NAME'. On a
65069 -system supporting shared libraries this is in fact a shared library
65070 -with the name (for example) `libnss_NAME.so.2'. The number at the end
65071 -is the currently used version of the interface which will not change
65072 -frequently. Normally the user should not have to be cognizant of these
65073 -files since they should be placed in a directory where they are found
65074 -automatically. Only the names of all available services are important.
65076 -\x1f
65077 -File: libc.info, Node: Actions in the NSS configuration, Next: Notes on NSS Configuration File, Prev: Services in the NSS configuration, Up: NSS Configuration File
65079 -Actions in the NSS configuration
65080 ---------------------------------
65082 - The second item in the specification gives the user much finer
65083 -control on the lookup process. Action items are placed between two
65084 -service names and are written within brackets. The general form is
65086 - `[' ( `!'? STATUS `=' ACTION )+ `]'
65088 -where
65090 - STATUS => success | notfound | unavail | tryagain
65091 - ACTION => return | continue
65093 - The case of the keywords is insignificant. The STATUS values are
65094 -the results of a call to a lookup function of a specific service. They
65095 -mean
65097 -`success'
65098 - No error occurred and the wanted entry is returned. The default
65099 - action for this is `return'.
65101 -`notfound'
65102 - The lookup process works ok but the needed value was not found.
65103 - The default action is `continue'.
65105 -`unavail'
65106 - The service is permanently unavailable. This can either mean the
65107 - needed file is not available, or, for DNS, the server is not
65108 - available or does not allow queries. The default action is
65109 - `continue'.
65111 -`tryagain'
65112 - The service is temporarily unavailable. This could mean a file is
65113 - locked or a server currently cannot accept more connections. The
65114 - default action is `continue'.
65116 -If we have a line like
65118 - ethers: nisplus [NOTFOUND=return] db files
65120 -this is equivalent to
65122 - ethers: nisplus [SUCCESS=return NOTFOUND=return UNAVAIL=continue
65123 - TRYAGAIN=continue]
65124 - db [SUCCESS=return NOTFOUND=continue UNAVAIL=continue
65125 - TRYAGAIN=continue]
65126 - files
65128 -(except that it would have to be written on one line). The default
65129 -value for the actions are normally what you want, and only need to be
65130 -changed in exceptional cases.
65132 - If the optional `!' is placed before the STATUS this means the
65133 -following action is used for all statuses but STATUS itself. I.e., `!'
65134 -is negation as in the C language (and others).
65136 - Before we explain the exception which makes this action item
65137 -necessary one more remark: obviously it makes no sense to add another
65138 -action item after the `files' service. Since there is no other service
65139 -following the action _always_ is `return'.
65141 - Now, why is this `[NOTFOUND=return]' action useful? To understand
65142 -this we should know that the `nisplus' service is often complete; i.e.,
65143 -if an entry is not available in the NIS+ tables it is not available
65144 -anywhere else. This is what is expressed by this action item: it is
65145 -useless to examine further services since they will not give us a
65146 -result.
65148 - The situation would be different if the NIS+ service is not available
65149 -because the machine is booting. In this case the return value of the
65150 -lookup function is not `notfound' but instead `unavail'. And as you
65151 -can see in the complete form above: in this situation the `db' and
65152 -`files' services are used. Neat, isn't it? The system administrator
65153 -need not pay special care for the time the system is not completely
65154 -ready to work (while booting or shutdown or network problems).
65156 -\x1f
65157 -File: libc.info, Node: Notes on NSS Configuration File, Prev: Actions in the NSS configuration, Up: NSS Configuration File
65159 -Notes on the NSS Configuration File
65160 ------------------------------------
65162 - Finally a few more hints. The NSS implementation is not completely
65163 -helpless if `/etc/nsswitch.conf' does not exist. For all supported
65164 -databases there is a default value so it should normally be possible to
65165 -get the system running even if the file is corrupted or missing.
65167 - For the `hosts' and `networks' databases the default value is `dns
65168 -[!UNAVAIL=return] files'. I.e., the system is prepared for the DNS
65169 -service not to be available but if it is available the answer it
65170 -returns is definitive.
65172 - The `passwd', `group', and `shadow' databases are traditionally
65173 -handled in a special way. The appropriate files in the `/etc'
65174 -directory are read but if an entry with a name starting with a `+'
65175 -character is found NIS is used. This kind of lookup remains possible
65176 -by using the special lookup service `compat' and the default value for
65177 -the three databases above is `compat [NOTFOUND=return] files'.
65179 - For all other databases the default value is `nis [NOTFOUND=return]
65180 -files'. This solution give the best chance to be correct since NIS and
65181 -file based lookup is used.
65183 - A second point is that the user should try to optimize the lookup
65184 -process. The different service have different response times. A
65185 -simple file look up on a local file could be fast, but if the file is
65186 -long and the needed entry is near the end of the file this may take
65187 -quite some time. In this case it might be better to use the `db'
65188 -service which allows fast local access to large data sets.
65190 - Often the situation is that some global information like NIS must be
65191 -used. So it is unavoidable to use service entries like `nis' etc. But
65192 -one should avoid slow services like this if possible.
65194 -\x1f
65195 -File: libc.info, Node: NSS Module Internals, Next: Extending NSS, Prev: NSS Configuration File, Up: Name Service Switch
65197 -NSS Module Internals
65198 -====================
65200 - Now it is time to describe what the modules look like. The functions
65201 -contained in a module are identified by their names. I.e., there is no
65202 -jump table or the like. How this is done is of no interest here; those
65203 -interested in this topic should read about Dynamic Linking.
65205 -* Menu:
65207 -* NSS Module Names:: Construction of the interface function of
65208 - the NSS modules.
65209 -* NSS Modules Interface:: Programming interface in the NSS module
65210 - functions.
65212 -\x1f
65213 -File: libc.info, Node: NSS Module Names, Next: NSS Modules Interface, Prev: NSS Module Internals, Up: NSS Module Internals
65215 -The Naming Scheme of the NSS Modules
65216 -------------------------------------
65218 -The name of each function consist of various parts:
65220 - _nss_SERVICE_FUNCTION
65222 - SERVICE of course corresponds to the name of the module this
65223 -function is found in.(1) The FUNCTION part is derived from the
65224 -interface function in the C library itself. If the user calls the
65225 -function `gethostbyname' and the service used is `files' the function
65227 - _nss_files_gethostbyname_r
65229 -in the module
65231 - libnss_files.so.2
65233 -is used. You see, what is explained above in not the whole truth. In
65234 -fact the NSS modules only contain reentrant versions of the lookup
65235 -functions. I.e., if the user would call the `gethostbyname_r' function
65236 -this also would end in the above function. For all user interface
65237 -functions the C library maps this call to a call to the reentrant
65238 -function. For reentrant functions this is trivial since the interface
65239 -is (nearly) the same. For the non-reentrant version The library keeps
65240 -internal buffers which are used to replace the user supplied buffer.
65242 - I.e., the reentrant functions _can_ have counterparts. No service
65243 -module is forced to have functions for all databases and all kinds to
65244 -access them. If a function is not available it is simply treated as if
65245 -the function would return `unavail' (*note Actions in the NSS
65246 -configuration::).
65248 - The file name `libnss_files.so.2' would be on a Solaris 2 system
65249 -`nss_files.so.2'. This is the difference mentioned above. Sun's NSS
65250 -modules are usable as modules which get indirectly loaded only.
65252 - The NSS modules in the GNU C Library are prepared to be used as
65253 -normal libraries themselves. This is _not_ true at the moment, though.
65254 -However, the organization of the name space in the modules does not
65255 -make it impossible like it is for Solaris. Now you can see why the
65256 -modules are still libraries.(2)
65258 - ---------- Footnotes ----------
65260 - (1) Now you might ask why this information is duplicated. The
65261 -answer is that we want to make it possible to link directly with these
65262 -shared objects.
65264 - (2) There is a second explanation: we were too lazy to change the
65265 -Makefiles to allow the generation of shared objects not starting with
65266 -`lib' but don't tell this to anybody.
65268 -\x1f
65269 -File: libc.info, Node: NSS Modules Interface, Prev: NSS Module Names, Up: NSS Module Internals
65271 -The Interface of the Function in NSS Modules
65272 ---------------------------------------------
65274 - Now we know about the functions contained in the modules. It is now
65275 -time to describe the types. When we mentioned the reentrant versions of
65276 -the functions above, this means there are some additional arguments
65277 -(compared with the standard, non-reentrant version). The prototypes for
65278 -the non-reentrant and reentrant versions of our function above are:
65280 - struct hostent *gethostbyname (const char *name)
65282 - int gethostbyname_r (const char *name, struct hostent *result_buf,
65283 - char *buf, size_t buflen, struct hostent **result,
65284 - int *h_errnop)
65286 -The actual prototype of the function in the NSS modules in this case is
65288 - enum nss_status _nss_files_gethostbyname_r (const char *name,
65289 - struct hostent *result_buf,
65290 - char *buf, size_t buflen,
65291 - int *errnop, int *h_errnop)
65293 - I.e., the interface function is in fact the reentrant function with
65294 -the change of the return value and the omission of the RESULT
65295 -parameter. While the user-level function returns a pointer to the
65296 -result the reentrant function return an `enum nss_status' value:
65298 -`NSS_STATUS_TRYAGAIN'
65299 - numeric value `-2'
65301 -`NSS_STATUS_UNAVAIL'
65302 - numeric value `-1'
65304 -`NSS_STATUS_NOTFOUND'
65305 - numeric value `0'
65307 -`NSS_STATUS_SUCCESS'
65308 - numeric value `1'
65310 -Now you see where the action items of the `/etc/nsswitch.conf' file are
65311 -used.
65313 - If you study the source code you will find there is a fifth value:
65314 -`NSS_STATUS_RETURN'. This is an internal use only value, used by a few
65315 -functions in places where none of the above value can be used. If
65316 -necessary the source code should be examined to learn about the details.
65318 - In case the interface function has to return an error it is important
65319 -that the correct error code is stored in `*ERRNOP'. Some return status
65320 -value have only one associated error code, others have more.
65322 -`NSS_STATUS_TRYAGAIN' `EAGAIN' One of the functions used ran
65323 - temporarily out of resources or a
65324 - service is currently not available.
65325 - `ERANGE' The provided buffer is not large
65326 - enough. The function should be
65327 - called again with a larger buffer.
65328 -`NSS_STATUS_UNAVAIL' `ENOENT' A necessary input file cannot be
65329 - found.
65330 -`NSS_STATUS_NOTFOUND' `ENOENT' The requested entry is not
65331 - available.
65333 - These are proposed values. There can be other error codes and the
65334 -described error codes can have different meaning. *With one
65335 -exception:* when returning `NSS_STATUS_TRYAGAIN' the error code
65336 -`ERANGE' _must_ mean that the user provided buffer is too small.
65337 -Everything is non-critical.
65339 - The above function has something special which is missing for almost
65340 -all the other module functions. There is an argument H_ERRNOP. This
65341 -points to a variable which will be filled with the error code in case
65342 -the execution of the function fails for some reason. The reentrant
65343 -function cannot use the global variable H_ERRNO; `gethostbyname' calls
65344 -`gethostbyname_r' with the last argument set to `&h_errno'.
65346 - The `getXXXbyYYY' functions are the most important functions in the
65347 -NSS modules. But there are others which implement the other ways to
65348 -access system databases (say for the password database, there are
65349 -`setpwent', `getpwent', and `endpwent'). These will be described in
65350 -more detail later. Here we give a general way to determine the
65351 -signature of the module function:
65353 - * the return value is `int';
65355 - * the name is as explained in *note NSS Module Names::;
65357 - * the first arguments are identical to the arguments of the
65358 - non-reentrant function;
65360 - * the next three arguments are:
65362 - `STRUCT_TYPE *result_buf'
65363 - pointer to buffer where the result is stored. `STRUCT_TYPE'
65364 - is normally a struct which corresponds to the database.
65366 - `char *buffer'
65367 - pointer to a buffer where the function can store additional
65368 - data for the result etc.
65370 - `size_t buflen'
65371 - length of the buffer pointed to by BUFFER.
65373 - * possibly a last argument H_ERRNOP, for the host name and network
65374 - name lookup functions.
65376 -This table is correct for all functions but the `set...ent' and
65377 -`end...ent' functions.
65379 -\x1f
65380 -File: libc.info, Node: Extending NSS, Prev: NSS Module Internals, Up: Name Service Switch
65382 -Extending NSS
65383 -=============
65385 - One of the advantages of NSS mentioned above is that it can be
65386 -extended quite easily. There are two ways in which the extension can
65387 -happen: adding another database or adding another service. The former
65388 -is normally done only by the C library developers. It is here only
65389 -important to remember that adding another database is independent from
65390 -adding another service because a service need not support all databases
65391 -or lookup functions.
65393 - A designer/implementor of a new service is therefore free to choose
65394 -the databases s/he is interested in and leave the rest for later (or
65395 -completely aside).
65397 -* Menu:
65399 -* Adding another Service to NSS:: What is to do to add a new service.
65400 -* NSS Module Function Internals:: Guidelines for writing new NSS
65401 - service functions.
65403 -\x1f
65404 -File: libc.info, Node: Adding another Service to NSS, Next: NSS Module Function Internals, Prev: Extending NSS, Up: Extending NSS
65406 -Adding another Service to NSS
65407 ------------------------------
65409 - The sources for a new service need not (and should not) be part of
65410 -the GNU C Library itself. The developer retains complete control over
65411 -the sources and its development. The links between the C library and
65412 -the new service module consists solely of the interface functions.
65414 - Each module is designed following a specific interface specification.
65415 -For now the version is 2 (the interface in version 1 was not adequate)
65416 -and this manifests in the version number of the shared library object of
65417 -the NSS modules: they have the extension `.2'. If the interface
65418 -changes again in an incompatible way, this number will be increased.
65419 -Modules using the old interface will still be usable.
65421 - Developers of a new service will have to make sure that their module
65422 -is created using the correct interface number. This means the file
65423 -itself must have the correct name and on ELF systems the "soname"
65424 -(Shared Object Name) must also have this number. Building a module
65425 -from a bunch of object files on an ELF system using GNU CC could be
65426 -done like this:
65428 - gcc -shared -o libnss_NAME.so.2 -Wl,-soname,libnss_NAME.so.2 OBJECTS
65430 -*Note Options for Linking: (gcc)Link Options, to learn more about this
65431 -command line.
65433 - To use the new module the library must be able to find it. This can
65434 -be achieved by using options for the dynamic linker so that it will
65435 -search the directory where the binary is placed. For an ELF system
65436 -this could be done by adding the wanted directory to the value of
65437 -`LD_LIBRARY_PATH'.
65439 - But this is not always possible since some programs (those which run
65440 -under IDs which do not belong to the user) ignore this variable.
65441 -Therefore the stable version of the module should be placed into a
65442 -directory which is searched by the dynamic linker. Normally this should
65443 -be the directory `$prefix/lib', where `$prefix' corresponds to the
65444 -value given to configure using the `--prefix' option. But be careful:
65445 -this should only be done if it is clear the module does not cause any
65446 -harm. System administrators should be careful.
65448 -\x1f
65449 -File: libc.info, Node: NSS Module Function Internals, Prev: Adding another Service to NSS, Up: Extending NSS
65451 -Internals of the NSS Module Functions
65452 --------------------------------------
65454 - Until now we only provided the syntactic interface for the functions
65455 -in the NSS module. In fact there is not much more we can say since the
65456 -implementation obviously is different for each function. But a few
65457 -general rules must be followed by all functions.
65459 - In fact there are four kinds of different functions which may appear
65460 -in the interface. All derive from the traditional ones for system
65461 -databases. DB in the following table is normally an abbreviation for
65462 -the database (e.g., it is `pw' for the password database).
65464 -`enum nss_status _nss_DATABASE_setDBent (void)'
65465 - This function prepares the service for following operations. For a
65466 - simple file based lookup this means files could be opened, for
65467 - other services this function simply is a noop.
65469 - One special case for this function is that it takes an additional
65470 - argument for some DATABASEs (i.e., the interface is `int setDBent
65471 - (int)'). *Note Host Names::, which describes the `sethostent'
65472 - function.
65474 - The return value should be NSS_STATUS_SUCCESS or according to the
65475 - table above in case of an error (*note NSS Modules Interface::).
65477 -`enum nss_status _nss_DATABASE_endDBent (void)'
65478 - This function simply closes all files which are still open or
65479 - removes buffer caches. If there are no files or buffers to remove
65480 - this is again a simple noop.
65482 - There normally is no return value different to NSS_STATUS_SUCCESS.
65484 -`enum nss_status _nss_DATABASE_getDBent_r (STRUCTURE *result, char *buffer, size_t buflen, int *errnop)'
65485 - Since this function will be called several times in a row to
65486 - retrieve one entry after the other it must keep some kind of
65487 - state. But this also means the functions are not really
65488 - reentrant. They are reentrant only in that simultaneous calls to
65489 - this function will not try to write the retrieved data in the same
65490 - place (as it would be the case for the non-reentrant functions);
65491 - instead, it writes to the structure pointed to by the RESULT
65492 - parameter. But the calls share a common state and in the case of
65493 - a file access this means they return neighboring entries in the
65494 - file.
65496 - The buffer of length BUFLEN pointed to by BUFFER can be used for
65497 - storing some additional data for the result. It is _not_
65498 - guaranteed that the same buffer will be passed for the next call
65499 - of this function. Therefore one must not misuse this buffer to
65500 - save some state information from one call to another.
65502 - Before the function returns the implementation should store the
65503 - value of the local ERRNO variable in the variable pointed to be
65504 - ERRNOP. This is important to guarantee the module working in
65505 - statically linked programs.
65507 - As explained above this function could also have an additional last
65508 - argument. This depends on the database used; it happens only for
65509 - `host' and `networks'.
65511 - The function shall return `NSS_STATUS_SUCCESS' as long as there are
65512 - more entries. When the last entry was read it should return
65513 - `NSS_STATUS_NOTFOUND'. When the buffer given as an argument is too
65514 - small for the data to be returned `NSS_STATUS_TRYAGAIN' should be
65515 - returned. When the service was not formerly initialized by a call
65516 - to `_nss_DATABASE_setDBent' all return value allowed for this
65517 - function can also be returned here.
65519 -`enum nss_status _nss_DATABASE_getDBbyXX_r (PARAMS, STRUCTURE *result, char *buffer, size_t buflen, int *errnop)'
65520 - This function shall return the entry from the database which is
65521 - addressed by the PARAMS. The type and number of these arguments
65522 - vary. It must be individually determined by looking to the
65523 - user-level interface functions. All arguments given to the
65524 - non-reentrant version are here described by PARAMS.
65526 - The result must be stored in the structure pointed to by RESULT.
65527 - If there is additional data to return (say strings, where the
65528 - RESULT structure only contains pointers) the function must use the
65529 - BUFFER or length BUFLEN. There must not be any references to
65530 - non-constant global data.
65532 - The implementation of this function should honor the STAYOPEN flag
65533 - set by the `setDBent' function whenever this makes sense.
65535 - Before the function returns the implementation should store the
65536 - value of the local ERRNO variable in the variable pointed to be
65537 - ERRNOP. This is important to guarantee the module working in
65538 - statically linked programs.
65540 - Again, this function takes an additional last argument for the
65541 - `host' and `networks' database.
65543 - The return value should as always follow the rules given above
65544 - (*note NSS Modules Interface::).
65546 -\x1f
65547 -File: libc.info, Node: Users and Groups, Next: System Management, Prev: Name Service Switch, Up: Top
65549 -Users and Groups
65550 -****************
65552 - Every user who can log in on the system is identified by a unique
65553 -number called the "user ID". Each process has an effective user ID
65554 -which says which user's access permissions it has.
65556 - Users are classified into "groups" for access control purposes. Each
65557 -process has one or more "group ID values" which say which groups the
65558 -process can use for access to files.
65560 - The effective user and group IDs of a process collectively form its
65561 -"persona". This determines which files the process can access.
65562 -Normally, a process inherits its persona from the parent process, but
65563 -under special circumstances a process can change its persona and thus
65564 -change its access permissions.
65566 - Each file in the system also has a user ID and a group ID. Access
65567 -control works by comparing the user and group IDs of the file with those
65568 -of the running process.
65570 - The system keeps a database of all the registered users, and another
65571 -database of all the defined groups. There are library functions you
65572 -can use to examine these databases.
65574 -* Menu:
65576 -* User and Group IDs:: Each user has a unique numeric ID;
65577 - likewise for groups.
65578 -* Process Persona:: The user IDs and group IDs of a process.
65579 -* Why Change Persona:: Why a program might need to change
65580 - its user and/or group IDs.
65581 -* How Change Persona:: Changing the user and group IDs.
65582 -* Reading Persona:: How to examine the user and group IDs.
65584 -* Setting User ID:: Functions for setting the user ID.
65585 -* Setting Groups:: Functions for setting the group IDs.
65587 -* Enable/Disable Setuid:: Turning setuid access on and off.
65588 -* Setuid Program Example:: The pertinent parts of one sample program.
65589 -* Tips for Setuid:: How to avoid granting unlimited access.
65591 -* Who Logged In:: Getting the name of the user who logged in,
65592 - or of the real user ID of the current process.
65594 -* User Accounting Database:: Keeping information about users and various
65595 - actions in databases.
65597 -* User Database:: Functions and data structures for
65598 - accessing the user database.
65599 -* Group Database:: Functions and data structures for
65600 - accessing the group database.
65601 -* Database Example:: Example program showing the use of database
65602 - inquiry functions.
65603 -* Netgroup Database:: Functions for accessing the netgroup database.
65605 -\x1f
65606 -File: libc.info, Node: User and Group IDs, Next: Process Persona, Up: Users and Groups
65608 -User and Group IDs
65609 -==================
65611 - Each user account on a computer system is identified by a "user
65612 -name" (or "login name") and "user ID". Normally, each user name has a
65613 -unique user ID, but it is possible for several login names to have the
65614 -same user ID. The user names and corresponding user IDs are stored in
65615 -a data base which you can access as described in *Note User Database::.
65617 - Users are classified in "groups". Each user name belongs to one
65618 -"default group" and may also belong to any number of "supplementary
65619 -groups". Users who are members of the same group can share resources
65620 -(such as files) that are not accessible to users who are not a member
65621 -of that group. Each group has a "group name" and "group ID". *Note
65622 -Group Database::, for how to find information about a group ID or group
65623 -name.
65625 diff -u -udbrN glibc-2.3.2/manual/libc.info-46 glibc-2.3.2-200304020432/manual/libc.info-46
65626 --- glibc-2.3.2/manual/libc.info-46 Sat Mar 1 02:39:41 2003
65627 +++ glibc-2.3.2-200304020432/manual/libc.info-46 Thu Jan 1 01:00:00 1970
65628 @@ -1,1238 +0,0 @@
65629 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
65631 -INFO-DIR-SECTION GNU libraries
65632 -START-INFO-DIR-ENTRY
65633 -* Libc: (libc). C library.
65634 -END-INFO-DIR-ENTRY
65636 - This file documents the GNU C library.
65638 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
65639 -Reference Manual', for Version 2.3.x.
65641 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
65642 -Free Software Foundation, Inc.
65644 - Permission is granted to copy, distribute and/or modify this document
65645 -under the terms of the GNU Free Documentation License, Version 1.1 or
65646 -any later version published by the Free Software Foundation; with the
65647 -Invariant Sections being "Free Software Needs Free Documentation" and
65648 -"GNU Lesser General Public License", the Front-Cover texts being (a)
65649 -(see below), and with the Back-Cover Texts being (b) (see below). A
65650 -copy of the license is included in the section entitled "GNU Free
65651 -Documentation License".
65653 - (a) The FSF's Front-Cover Text is:
65655 - A GNU Manual
65657 - (b) The FSF's Back-Cover Text is:
65659 - You have freedom to copy and modify this GNU Manual, like GNU
65660 -software. Copies published by the Free Software Foundation raise
65661 -funds for GNU development.
65663 -\x1f
65664 -File: libc.info, Node: Process Persona, Next: Why Change Persona, Prev: User and Group IDs, Up: Users and Groups
65666 -The Persona of a Process
65667 -========================
65669 - At any time, each process has an "effective user ID", a "effective
65670 -group ID", and a set of "supplementary group IDs". These IDs determine
65671 -the privileges of the process. They are collectively called the
65672 -"persona" of the process, because they determine "who it is" for
65673 -purposes of access control.
65675 - Your login shell starts out with a persona which consists of your
65676 -user ID, your default group ID, and your supplementary group IDs (if
65677 -you are in more than one group). In normal circumstances, all your
65678 -other processes inherit these values.
65680 - A process also has a "real user ID" which identifies the user who
65681 -created the process, and a "real group ID" which identifies that user's
65682 -default group. These values do not play a role in access control, so
65683 -we do not consider them part of the persona. But they are also
65684 -important.
65686 - Both the real and effective user ID can be changed during the
65687 -lifetime of a process. *Note Why Change Persona::.
65689 - For details on how a process's effective user ID and group IDs affect
65690 -its permission to access files, see *Note Access Permission::.
65692 - The effective user ID of a process also controls permissions for
65693 -sending signals using the `kill' function. *Note Signaling Another
65694 -Process::.
65696 - Finally, there are many operations which can only be performed by a
65697 -process whose effective user ID is zero. A process with this user ID is
65698 -a "privileged process". Commonly the user name `root' is associated
65699 -with user ID 0, but there may be other user names with this ID.
65701 -\x1f
65702 -File: libc.info, Node: Why Change Persona, Next: How Change Persona, Prev: Process Persona, Up: Users and Groups
65704 -Why Change the Persona of a Process?
65705 -====================================
65707 - The most obvious situation where it is necessary for a process to
65708 -change its user and/or group IDs is the `login' program. When `login'
65709 -starts running, its user ID is `root'. Its job is to start a shell
65710 -whose user and group IDs are those of the user who is logging in. (To
65711 -accomplish this fully, `login' must set the real user and group IDs as
65712 -well as its persona. But this is a special case.)
65714 - The more common case of changing persona is when an ordinary user
65715 -program needs access to a resource that wouldn't ordinarily be
65716 -accessible to the user actually running it.
65718 - For example, you may have a file that is controlled by your program
65719 -but that shouldn't be read or modified directly by other users, either
65720 -because it implements some kind of locking protocol, or because you want
65721 -to preserve the integrity or privacy of the information it contains.
65722 -This kind of restricted access can be implemented by having the program
65723 -change its effective user or group ID to match that of the resource.
65725 - Thus, imagine a game program that saves scores in a file. The game
65726 -program itself needs to be able to update this file no matter who is
65727 -running it, but if users can write the file without going through the
65728 -game, they can give themselves any scores they like. Some people
65729 -consider this undesirable, or even reprehensible. It can be prevented
65730 -by creating a new user ID and login name (say, `games') to own the
65731 -scores file, and make the file writable only by this user. Then, when
65732 -the game program wants to update this file, it can change its effective
65733 -user ID to be that for `games'. In effect, the program must adopt the
65734 -persona of `games' so it can write the scores file.
65736 -\x1f
65737 -File: libc.info, Node: How Change Persona, Next: Reading Persona, Prev: Why Change Persona, Up: Users and Groups
65739 -How an Application Can Change Persona
65740 -=====================================
65742 - The ability to change the persona of a process can be a source of
65743 -unintentional privacy violations, or even intentional abuse. Because of
65744 -the potential for problems, changing persona is restricted to special
65745 -circumstances.
65747 - You can't arbitrarily set your user ID or group ID to anything you
65748 -want; only privileged processes can do that. Instead, the normal way
65749 -for a program to change its persona is that it has been set up in
65750 -advance to change to a particular user or group. This is the function
65751 -of the setuid and setgid bits of a file's access mode. *Note
65752 -Permission Bits::.
65754 - When the setuid bit of an executable file is on, executing that file
65755 -gives the process a third user ID: the "file user ID". This ID is set
65756 -to the owner ID of the file. The system then changes the effective
65757 -user ID to the file user ID. The real user ID remains as it was.
65758 -Likewise, if the setgid bit is on, the process is given a "file group
65759 -ID" equal to the group ID of the file, and its effective group ID is
65760 -changed to the file group ID.
65762 - If a process has a file ID (user or group), then it can at any time
65763 -change its effective ID to its real ID and back to its file ID.
65764 -Programs use this feature to relinquish their special privileges except
65765 -when they actually need them. This makes it less likely that they can
65766 -be tricked into doing something inappropriate with their privileges.
65768 - *Portability Note:* Older systems do not have file IDs. To
65769 -determine if a system has this feature, you can test the compiler
65770 -define `_POSIX_SAVED_IDS'. (In the POSIX standard, file IDs are known
65771 -as saved IDs.)
65773 - *Note File Attributes::, for a more general discussion of file modes
65774 -and accessibility.
65776 -\x1f
65777 -File: libc.info, Node: Reading Persona, Next: Setting User ID, Prev: How Change Persona, Up: Users and Groups
65779 -Reading the Persona of a Process
65780 -================================
65782 - Here are detailed descriptions of the functions for reading the user
65783 -and group IDs of a process, both real and effective. To use these
65784 -facilities, you must include the header files `sys/types.h' and
65785 -`unistd.h'.
65787 - - Data Type: uid_t
65788 - This is an integer data type used to represent user IDs. In the
65789 - GNU library, this is an alias for `unsigned int'.
65791 - - Data Type: gid_t
65792 - This is an integer data type used to represent group IDs. In the
65793 - GNU library, this is an alias for `unsigned int'.
65795 - - Function: uid_t getuid (void)
65796 - The `getuid' function returns the real user ID of the process.
65798 - - Function: gid_t getgid (void)
65799 - The `getgid' function returns the real group ID of the process.
65801 - - Function: uid_t geteuid (void)
65802 - The `geteuid' function returns the effective user ID of the
65803 - process.
65805 - - Function: gid_t getegid (void)
65806 - The `getegid' function returns the effective group ID of the
65807 - process.
65809 - - Function: int getgroups (int COUNT, gid_t *GROUPS)
65810 - The `getgroups' function is used to inquire about the supplementary
65811 - group IDs of the process. Up to COUNT of these group IDs are
65812 - stored in the array GROUPS; the return value from the function is
65813 - the number of group IDs actually stored. If COUNT is smaller than
65814 - the total number of supplementary group IDs, then `getgroups'
65815 - returns a value of `-1' and `errno' is set to `EINVAL'.
65817 - If COUNT is zero, then `getgroups' just returns the total number
65818 - of supplementary group IDs. On systems that do not support
65819 - supplementary groups, this will always be zero.
65821 - Here's how to use `getgroups' to read all the supplementary group
65822 - IDs:
65824 - gid_t *
65825 - read_all_groups (void)
65827 - int ngroups = getgroups (0, NULL);
65828 - gid_t *groups
65829 - = (gid_t *) xmalloc (ngroups * sizeof (gid_t));
65830 - int val = getgroups (ngroups, groups);
65831 - if (val < 0)
65833 - free (groups);
65834 - return NULL;
65836 - return groups;
65839 -\x1f
65840 -File: libc.info, Node: Setting User ID, Next: Setting Groups, Prev: Reading Persona, Up: Users and Groups
65842 -Setting the User ID
65843 -===================
65845 - This section describes the functions for altering the user ID (real
65846 -and/or effective) of a process. To use these facilities, you must
65847 -include the header files `sys/types.h' and `unistd.h'.
65849 - - Function: int seteuid (uid_t NEWEUID)
65850 - This function sets the effective user ID of a process to NEWUID,
65851 - provided that the process is allowed to change its effective user
65852 - ID. A privileged process (effective user ID zero) can change its
65853 - effective user ID to any legal value. An unprivileged process
65854 - with a file user ID can change its effective user ID to its real
65855 - user ID or to its file user ID. Otherwise, a process may not
65856 - change its effective user ID at all.
65858 - The `seteuid' function returns a value of `0' to indicate
65859 - successful completion, and a value of `-1' to indicate an error.
65860 - The following `errno' error conditions are defined for this
65861 - function:
65863 - `EINVAL'
65864 - The value of the NEWUID argument is invalid.
65866 - `EPERM'
65867 - The process may not change to the specified ID.
65869 - Older systems (those without the `_POSIX_SAVED_IDS' feature) do not
65870 - have this function.
65872 - - Function: int setuid (uid_t NEWUID)
65873 - If the calling process is privileged, this function sets both the
65874 - real and effective user ID of the process to NEWUID. It also
65875 - deletes the file user ID of the process, if any. NEWUID may be any
65876 - legal value. (Once this has been done, there is no way to recover
65877 - the old effective user ID.)
65879 - If the process is not privileged, and the system supports the
65880 - `_POSIX_SAVED_IDS' feature, then this function behaves like
65881 - `seteuid'.
65883 - The return values and error conditions are the same as for
65884 - `seteuid'.
65886 - - Function: int setreuid (uid_t RUID, uid_t EUID)
65887 - This function sets the real user ID of the process to RUID and the
65888 - effective user ID to EUID. If RUID is `-1', it means not to
65889 - change the real user ID; likewise if EUID is `-1', it means not to
65890 - change the effective user ID.
65892 - The `setreuid' function exists for compatibility with 4.3 BSD Unix,
65893 - which does not support file IDs. You can use this function to
65894 - swap the effective and real user IDs of the process. (Privileged
65895 - processes are not limited to this particular usage.) If file IDs
65896 - are supported, you should use that feature instead of this
65897 - function. *Note Enable/Disable Setuid::.
65899 - The return value is `0' on success and `-1' on failure. The
65900 - following `errno' error conditions are defined for this function:
65902 - `EPERM'
65903 - The process does not have the appropriate privileges; you do
65904 - not have permission to change to the specified ID.
65906 -\x1f
65907 -File: libc.info, Node: Setting Groups, Next: Enable/Disable Setuid, Prev: Setting User ID, Up: Users and Groups
65909 -Setting the Group IDs
65910 -=====================
65912 - This section describes the functions for altering the group IDs (real
65913 -and effective) of a process. To use these facilities, you must include
65914 -the header files `sys/types.h' and `unistd.h'.
65916 - - Function: int setegid (gid_t NEWGID)
65917 - This function sets the effective group ID of the process to
65918 - NEWGID, provided that the process is allowed to change its group
65919 - ID. Just as with `seteuid', if the process is privileged it may
65920 - change its effective group ID to any value; if it isn't, but it
65921 - has a file group ID, then it may change to its real group ID or
65922 - file group ID; otherwise it may not change its effective group ID.
65924 - Note that a process is only privileged if its effective _user_ ID
65925 - is zero. The effective group ID only affects access permissions.
65927 - The return values and error conditions for `setegid' are the same
65928 - as those for `seteuid'.
65930 - This function is only present if `_POSIX_SAVED_IDS' is defined.
65932 - - Function: int setgid (gid_t NEWGID)
65933 - This function sets both the real and effective group ID of the
65934 - process to NEWGID, provided that the process is privileged. It
65935 - also deletes the file group ID, if any.
65937 - If the process is not privileged, then `setgid' behaves like
65938 - `setegid'.
65940 - The return values and error conditions for `setgid' are the same
65941 - as those for `seteuid'.
65943 - - Function: int setregid (gid_t RGID, gid_t EGID)
65944 - This function sets the real group ID of the process to RGID and
65945 - the effective group ID to EGID. If RGID is `-1', it means not to
65946 - change the real group ID; likewise if EGID is `-1', it means not
65947 - to change the effective group ID.
65949 - The `setregid' function is provided for compatibility with 4.3 BSD
65950 - Unix, which does not support file IDs. You can use this function
65951 - to swap the effective and real group IDs of the process.
65952 - (Privileged processes are not limited to this usage.) If file IDs
65953 - are supported, you should use that feature instead of using this
65954 - function. *Note Enable/Disable Setuid::.
65956 - The return values and error conditions for `setregid' are the same
65957 - as those for `setreuid'.
65959 - `setuid' and `setgid' behave differently depending on whether the
65960 -effective user ID at the time is zero. If it is not zero, they behave
65961 -like `seteuid' and `setegid'. If it is, they change both effective and
65962 -real IDs and delete the file ID. To avoid confusion, we recommend you
65963 -always use `seteuid' and `setegid' except when you know the effective
65964 -user ID is zero and your intent is to change the persona permanently.
65965 -This case is rare--most of the programs that need it, such as `login'
65966 -and `su', have already been written.
65968 - Note that if your program is setuid to some user other than `root',
65969 -there is no way to drop privileges permanently.
65971 - The system also lets privileged processes change their supplementary
65972 -group IDs. To use `setgroups' or `initgroups', your programs should
65973 -include the header file `grp.h'.
65975 - - Function: int setgroups (size_t COUNT, gid_t *GROUPS)
65976 - This function sets the process's supplementary group IDs. It can
65977 - only be called from privileged processes. The COUNT argument
65978 - specifies the number of group IDs in the array GROUPS.
65980 - This function returns `0' if successful and `-1' on error. The
65981 - following `errno' error conditions are defined for this function:
65983 - `EPERM'
65984 - The calling process is not privileged.
65986 - - Function: int initgroups (const char *USER, gid_t GROUP)
65987 - The `initgroups' function sets the process's supplementary group
65988 - IDs to be the normal default for the user name USER. The group
65989 - GROUP is automatically included.
65991 - This function works by scanning the group database for all the
65992 - groups USER belongs to. It then calls `setgroups' with the list it
65993 - has constructed.
65995 - The return values and error conditions are the same as for
65996 - `setgroups'.
65998 - If you are interested in the groups a particular user belongs to,
65999 -but do not want to change the process's supplementary group IDs, you
66000 -can use `getgrouplist'. To use `getgrouplist', your programs should
66001 -include the header file `grp.h'.
66003 - - Function: int getgrouplist (const char *USER, gid_t GROUP, gid_t
66004 - *GROUPS, int *NGROUPS)
66005 - The `getgrouplist' function scans the group database for all the
66006 - groups USER belongs to. Up to *NGROUPS group IDs corresponding to
66007 - these groups are stored in the array GROUPS; the return value from
66008 - the function is the number of group IDs actually stored. If
66009 - *NGROUPS is smaller than the total number of groups found, then
66010 - `getgrouplist' returns a value of `-1' and stores the actual
66011 - number of groups in *NGROUPS. The group GROUP is automatically
66012 - included in the list of groups returned by `getgrouplist'.
66014 - Here's how to use `getgrouplist' to read all supplementary groups
66015 - for USER:
66017 - gid_t *
66018 - supplementary_groups (char *user)
66020 - int ngroups = 16;
66021 - gid_t *groups
66022 - = (gid_t *) xmalloc (ngroups * sizeof (gid_t));
66023 - struct passwd *pw = getpwnam (user);
66025 - if (pw == NULL)
66026 - return NULL;
66028 - if (getgrouplist (pw->pw_name, pw->pw_gid, groups, &ngroups) < 0)
66030 - groups = xrealloc (ngroups * sizeof (gid_t));
66031 - getgrouplist (pw->pw_name, pw->pw_gid, groups, &ngroups);
66033 - return groups;
66036 -\x1f
66037 -File: libc.info, Node: Enable/Disable Setuid, Next: Setuid Program Example, Prev: Setting Groups, Up: Users and Groups
66039 -Enabling and Disabling Setuid Access
66040 -====================================
66042 - A typical setuid program does not need its special access all of the
66043 -time. It's a good idea to turn off this access when it isn't needed,
66044 -so it can't possibly give unintended access.
66046 - If the system supports the `_POSIX_SAVED_IDS' feature, you can
66047 -accomplish this with `seteuid'. When the game program starts, its real
66048 -user ID is `jdoe', its effective user ID is `games', and its saved user
66049 -ID is also `games'. The program should record both user ID values once
66050 -at the beginning, like this:
66052 - user_user_id = getuid ();
66053 - game_user_id = geteuid ();
66055 - Then it can turn off game file access with
66057 - seteuid (user_user_id);
66059 -and turn it on with
66061 - seteuid (game_user_id);
66063 -Throughout this process, the real user ID remains `jdoe' and the file
66064 -user ID remains `games', so the program can always set its effective
66065 -user ID to either one.
66067 - On other systems that don't support file user IDs, you can turn
66068 -setuid access on and off by using `setreuid' to swap the real and
66069 -effective user IDs of the process, as follows:
66071 - setreuid (geteuid (), getuid ());
66073 -This special case is always allowed--it cannot fail.
66075 - Why does this have the effect of toggling the setuid access?
66076 -Suppose a game program has just started, and its real user ID is `jdoe'
66077 -while its effective user ID is `games'. In this state, the game can
66078 -write the scores file. If it swaps the two uids, the real becomes
66079 -`games' and the effective becomes `jdoe'; now the program has only
66080 -`jdoe' access. Another swap brings `games' back to the effective user
66081 -ID and restores access to the scores file.
66083 - In order to handle both kinds of systems, test for the saved user ID
66084 -feature with a preprocessor conditional, like this:
66086 - #ifdef _POSIX_SAVED_IDS
66087 - seteuid (user_user_id);
66088 - #else
66089 - setreuid (geteuid (), getuid ());
66090 - #endif
66092 -\x1f
66093 -File: libc.info, Node: Setuid Program Example, Next: Tips for Setuid, Prev: Enable/Disable Setuid, Up: Users and Groups
66095 -Setuid Program Example
66096 -======================
66098 - Here's an example showing how to set up a program that changes its
66099 -effective user ID.
66101 - This is part of a game program called `caber-toss' that manipulates
66102 -a file `scores' that should be writable only by the game program
66103 -itself. The program assumes that its executable file will be installed
66104 -with the setuid bit set and owned by the same user as the `scores'
66105 -file. Typically, a system administrator will set up an account like
66106 -`games' for this purpose.
66108 - The executable file is given mode `4755', so that doing an `ls -l'
66109 -on it produces output like:
66111 - -rwsr-xr-x 1 games 184422 Jul 30 15:17 caber-toss
66113 -The setuid bit shows up in the file modes as the `s'.
66115 - The scores file is given mode `644', and doing an `ls -l' on it
66116 -shows:
66118 - -rw-r--r-- 1 games 0 Jul 31 15:33 scores
66120 - Here are the parts of the program that show how to set up the changed
66121 -user ID. This program is conditionalized so that it makes use of the
66122 -file IDs feature if it is supported, and otherwise uses `setreuid' to
66123 -swap the effective and real user IDs.
66125 - #include <stdio.h>
66126 - #include <sys/types.h>
66127 - #include <unistd.h>
66128 - #include <stdlib.h>
66131 - /* Remember the effective and real UIDs. */
66133 - static uid_t euid, ruid;
66136 - /* Restore the effective UID to its original value. */
66138 - void
66139 - do_setuid (void)
66141 - int status;
66143 - #ifdef _POSIX_SAVED_IDS
66144 - status = seteuid (euid);
66145 - #else
66146 - status = setreuid (ruid, euid);
66147 - #endif
66148 - if (status < 0) {
66149 - fprintf (stderr, "Couldn't set uid.\n");
66150 - exit (status);
66155 - /* Set the effective UID to the real UID. */
66157 - void
66158 - undo_setuid (void)
66160 - int status;
66162 - #ifdef _POSIX_SAVED_IDS
66163 - status = seteuid (ruid);
66164 - #else
66165 - status = setreuid (euid, ruid);
66166 - #endif
66167 - if (status < 0) {
66168 - fprintf (stderr, "Couldn't set uid.\n");
66169 - exit (status);
66173 - /* Main program. */
66175 - int
66176 - main (void)
66178 - /* Remember the real and effective user IDs. */
66179 - ruid = getuid ();
66180 - euid = geteuid ();
66181 - undo_setuid ();
66183 - /* Do the game and record the score. */
66184 - ...
66187 - Notice how the first thing the `main' function does is to set the
66188 -effective user ID back to the real user ID. This is so that any other
66189 -file accesses that are performed while the user is playing the game use
66190 -the real user ID for determining permissions. Only when the program
66191 -needs to open the scores file does it switch back to the file user ID,
66192 -like this:
66194 - /* Record the score. */
66196 - int
66197 - record_score (int score)
66199 - FILE *stream;
66200 - char *myname;
66202 - /* Open the scores file. */
66203 - do_setuid ();
66204 - stream = fopen (SCORES_FILE, "a");
66205 - undo_setuid ();
66207 - /* Write the score to the file. */
66208 - if (stream)
66210 - myname = cuserid (NULL);
66211 - if (score < 0)
66212 - fprintf (stream, "%10s: Couldn't lift the caber.\n", myname);
66213 - else
66214 - fprintf (stream, "%10s: %d feet.\n", myname, score);
66215 - fclose (stream);
66216 - return 0;
66218 - else
66219 - return -1;
66222 -\x1f
66223 -File: libc.info, Node: Tips for Setuid, Next: Who Logged In, Prev: Setuid Program Example, Up: Users and Groups
66225 -Tips for Writing Setuid Programs
66226 -================================
66228 - It is easy for setuid programs to give the user access that isn't
66229 -intended--in fact, if you want to avoid this, you need to be careful.
66230 -Here are some guidelines for preventing unintended access and
66231 -minimizing its consequences when it does occur:
66233 - * Don't have `setuid' programs with privileged user IDs such as
66234 - `root' unless it is absolutely necessary. If the resource is
66235 - specific to your particular program, it's better to define a new,
66236 - nonprivileged user ID or group ID just to manage that resource.
66237 - It's better if you can write your program to use a special group
66238 - than a special user.
66240 - * Be cautious about using the `exec' functions in combination with
66241 - changing the effective user ID. Don't let users of your program
66242 - execute arbitrary programs under a changed user ID. Executing a
66243 - shell is especially bad news. Less obviously, the `execlp' and
66244 - `execvp' functions are a potential risk (since the program they
66245 - execute depends on the user's `PATH' environment variable).
66247 - If you must `exec' another program under a changed ID, specify an
66248 - absolute file name (*note File Name Resolution::) for the
66249 - executable, and make sure that the protections on that executable
66250 - and _all_ containing directories are such that ordinary users
66251 - cannot replace it with some other program.
66253 - You should also check the arguments passed to the program to make
66254 - sure they do not have unexpected effects. Likewise, you should
66255 - examine the environment variables. Decide which arguments and
66256 - variables are safe, and reject all others.
66258 - You should never use `system' in a privileged program, because it
66259 - invokes a shell.
66261 - * Only use the user ID controlling the resource in the part of the
66262 - program that actually uses that resource. When you're finished
66263 - with it, restore the effective user ID back to the actual user's
66264 - user ID. *Note Enable/Disable Setuid::.
66266 - * If the `setuid' part of your program needs to access other files
66267 - besides the controlled resource, it should verify that the real
66268 - user would ordinarily have permission to access those files. You
66269 - can use the `access' function (*note Access Permission::) to check
66270 - this; it uses the real user and group IDs, rather than the
66271 - effective IDs.
66273 -\x1f
66274 -File: libc.info, Node: Who Logged In, Next: User Accounting Database, Prev: Tips for Setuid, Up: Users and Groups
66276 -Identifying Who Logged In
66277 -=========================
66279 - You can use the functions listed in this section to determine the
66280 -login name of the user who is running a process, and the name of the
66281 -user who logged in the current session. See also the function `getuid'
66282 -and friends (*note Reading Persona::). How this information is
66283 -collected by the system and how to control/add/remove information from
66284 -the background storage is described in *Note User Accounting Database::.
66286 - The `getlogin' function is declared in `unistd.h', while `cuserid'
66287 -and `L_cuserid' are declared in `stdio.h'.
66289 - - Function: char * getlogin (void)
66290 - The `getlogin' function returns a pointer to a string containing
66291 - the name of the user logged in on the controlling terminal of the
66292 - process, or a null pointer if this information cannot be
66293 - determined. The string is statically allocated and might be
66294 - overwritten on subsequent calls to this function or to `cuserid'.
66296 - - Function: char * cuserid (char *STRING)
66297 - The `cuserid' function returns a pointer to a string containing a
66298 - user name associated with the effective ID of the process. If
66299 - STRING is not a null pointer, it should be an array that can hold
66300 - at least `L_cuserid' characters; the string is returned in this
66301 - array. Otherwise, a pointer to a string in a static area is
66302 - returned. This string is statically allocated and might be
66303 - overwritten on subsequent calls to this function or to `getlogin'.
66305 - The use of this function is deprecated since it is marked to be
66306 - withdrawn in XPG4.2 and has already been removed from newer
66307 - revisions of POSIX.1.
66309 - - Macro: int L_cuserid
66310 - An integer constant that indicates how long an array you might
66311 - need to store a user name.
66313 - These functions let your program identify positively the user who is
66314 -running or the user who logged in this session. (These can differ when
66315 -setuid programs are involved; see *Note Process Persona::.) The user
66316 -cannot do anything to fool these functions.
66318 - For most purposes, it is more useful to use the environment variable
66319 -`LOGNAME' to find out who the user is. This is more flexible precisely
66320 -because the user can set `LOGNAME' arbitrarily. *Note Standard
66321 -Environment::.
66323 -\x1f
66324 -File: libc.info, Node: User Accounting Database, Next: User Database, Prev: Who Logged In, Up: Users and Groups
66326 -The User Accounting Database
66327 -============================
66329 - Most Unix-like operating systems keep track of logged in users by
66330 -maintaining a user accounting database. This user accounting database
66331 -stores for each terminal, who has logged on, at what time, the process
66332 -ID of the user's login shell, etc., etc., but also stores information
66333 -about the run level of the system, the time of the last system reboot,
66334 -and possibly more.
66336 - The user accounting database typically lives in `/etc/utmp',
66337 -`/var/adm/utmp' or `/var/run/utmp'. However, these files should
66338 -*never* be accessed directly. For reading information from and writing
66339 -information to the user accounting database, the functions described in
66340 -this section should be used.
66342 -* Menu:
66344 -* Manipulating the Database:: Scanning and modifying the user
66345 - accounting database.
66346 -* XPG Functions:: A standardized way for doing the same thing.
66347 -* Logging In and Out:: Functions from BSD that modify the user
66348 - accounting database.
66350 -\x1f
66351 -File: libc.info, Node: Manipulating the Database, Next: XPG Functions, Up: User Accounting Database
66353 -Manipulating the User Accounting Database
66354 ------------------------------------------
66356 - These functions and the corresponding data structures are declared in
66357 -the header file `utmp.h'.
66359 - - Data Type: struct exit_status
66360 - The `exit_status' data structure is used to hold information about
66361 - the exit status of processes marked as `DEAD_PROCESS' in the user
66362 - accounting database.
66364 - `short int e_termination'
66365 - The exit status of the process.
66367 - `short int e_exit'
66368 - The exit status of the process.
66370 - - Data Type: struct utmp
66371 - The `utmp' data structure is used to hold information about entries
66372 - in the user accounting database. On the GNU system it has the
66373 - following members:
66375 - `short int ut_type'
66376 - Specifies the type of login; one of `EMPTY', `RUN_LVL',
66377 - `BOOT_TIME', `OLD_TIME', `NEW_TIME', `INIT_PROCESS',
66378 - `LOGIN_PROCESS', `USER_PROCESS', `DEAD_PROCESS' or
66379 - `ACCOUNTING'.
66381 - `pid_t ut_pid'
66382 - The process ID number of the login process.
66384 - `char ut_line[]'
66385 - The device name of the tty (without `/dev/').
66387 - `char ut_id[]'
66388 - The inittab ID of the process.
66390 - `char ut_user[]'
66391 - The user's login name.
66393 - `char ut_host[]'
66394 - The name of the host from which the user logged in.
66396 - `struct exit_status ut_exit'
66397 - The exit status of a process marked as `DEAD_PROCESS'.
66399 - `long ut_session'
66400 - The Session ID, used for windowing.
66402 - `struct timeval ut_tv'
66403 - Time the entry was made. For entries of type `OLD_TIME' this
66404 - is the time when the system clock changed, and for entries of
66405 - type `NEW_TIME' this is the time the system clock was set to.
66407 - `int32_t ut_addr_v6[4]'
66408 - The Internet address of a remote host.
66410 - The `ut_type', `ut_pid', `ut_id', `ut_tv', and `ut_host' fields are
66411 -not available on all systems. Portable applications therefore should
66412 -be prepared for these situations. To help doing this the `utmp.h'
66413 -header provides macros `_HAVE_UT_TYPE', `_HAVE_UT_PID', `_HAVE_UT_ID',
66414 -`_HAVE_UT_TV', and `_HAVE_UT_HOST' if the respective field is
66415 -available. The programmer can handle the situations by using `#ifdef'
66416 -in the program code.
66418 - The following macros are defined for use as values for the `ut_type'
66419 -member of the `utmp' structure. The values are integer constants.
66421 -`EMPTY'
66422 - This macro is used to indicate that the entry contains no valid
66423 - user accounting information.
66425 -`RUN_LVL'
66426 - This macro is used to identify the systems runlevel.
66428 -`BOOT_TIME'
66429 - This macro is used to identify the time of system boot.
66431 -`OLD_TIME'
66432 - This macro is used to identify the time when the system clock
66433 - changed.
66435 -`NEW_TIME'
66436 - This macro is used to identify the time after the system changed.
66438 -`INIT_PROCESS'
66439 - This macro is used to identify a process spawned by the init
66440 - process.
66442 -`LOGIN_PROCESS'
66443 - This macro is used to identify the session leader of a logged in
66444 - user.
66446 -`USER_PROCESS'
66447 - This macro is used to identify a user process.
66449 -`DEAD_PROCESS'
66450 - This macro is used to identify a terminated process.
66452 -`ACCOUNTING'
66453 - ???
66455 - The size of the `ut_line', `ut_id', `ut_user' and `ut_host' arrays
66456 -can be found using the `sizeof' operator.
66458 - Many older systems have, instead of an `ut_tv' member, an `ut_time'
66459 -member, usually of type `time_t', for representing the time associated
66460 -with the entry. Therefore, for backwards compatibility only, `utmp.h'
66461 -defines `ut_time' as an alias for `ut_tv.tv_sec'.
66463 - - Function: void setutent (void)
66464 - This function opens the user accounting database to begin scanning
66465 - it. You can then call `getutent', `getutid' or `getutline' to
66466 - read entries and `pututline' to write entries.
66468 - If the database is already open, it resets the input to the
66469 - beginning of the database.
66471 - - Function: struct utmp * getutent (void)
66472 - The `getutent' function reads the next entry from the user
66473 - accounting database. It returns a pointer to the entry, which is
66474 - statically allocated and may be overwritten by subsequent calls to
66475 - `getutent'. You must copy the contents of the structure if you
66476 - wish to save the information or you can use the `getutent_r'
66477 - function which stores the data in a user-provided buffer.
66479 - A null pointer is returned in case no further entry is available.
66481 - - Function: void endutent (void)
66482 - This function closes the user accounting database.
66484 - - Function: struct utmp * getutid (const struct utmp *ID)
66485 - This function searches forward from the current point in the
66486 - database for an entry that matches ID. If the `ut_type' member of
66487 - the ID structure is one of `RUN_LVL', `BOOT_TIME', `OLD_TIME' or
66488 - `NEW_TIME' the entries match if the `ut_type' members are
66489 - identical. If the `ut_type' member of the ID structure is
66490 - `INIT_PROCESS', `LOGIN_PROCESS', `USER_PROCESS' or `DEAD_PROCESS',
66491 - the entries match if the `ut_type' member of the entry read from
66492 - the database is one of these four, and the `ut_id' members match.
66493 - However if the `ut_id' member of either the ID structure or the
66494 - entry read from the database is empty it checks if the `ut_line'
66495 - members match instead. If a matching entry is found, `getutid'
66496 - returns a pointer to the entry, which is statically allocated, and
66497 - may be overwritten by a subsequent call to `getutent', `getutid'
66498 - or `getutline'. You must copy the contents of the structure if
66499 - you wish to save the information.
66501 - A null pointer is returned in case the end of the database is
66502 - reached without a match.
66504 - The `getutid' function may cache the last read entry. Therefore,
66505 - if you are using `getutid' to search for multiple occurrences, it
66506 - is necessary to zero out the static data after each call.
66507 - Otherwise `getutid' could just return a pointer to the same entry
66508 - over and over again.
66510 - - Function: struct utmp * getutline (const struct utmp *LINE)
66511 - This function searches forward from the current point in the
66512 - database until it finds an entry whose `ut_type' value is
66513 - `LOGIN_PROCESS' or `USER_PROCESS', and whose `ut_line' member
66514 - matches the `ut_line' member of the LINE structure. If it finds
66515 - such an entry, it returns a pointer to the entry which is
66516 - statically allocated, and may be overwritten by a subsequent call
66517 - to `getutent', `getutid' or `getutline'. You must copy the
66518 - contents of the structure if you wish to save the information.
66520 - A null pointer is returned in case the end of the database is
66521 - reached without a match.
66523 - The `getutline' function may cache the last read entry. Therefore
66524 - if you are using `getutline' to search for multiple occurrences, it
66525 - is necessary to zero out the static data after each call.
66526 - Otherwise `getutline' could just return a pointer to the same
66527 - entry over and over again.
66529 - - Function: struct utmp * pututline (const struct utmp *UTMP)
66530 - The `pututline' function inserts the entry `*UTMP' at the
66531 - appropriate place in the user accounting database. If it finds
66532 - that it is not already at the correct place in the database, it
66533 - uses `getutid' to search for the position to insert the entry,
66534 - however this will not modify the static structure returned by
66535 - `getutent', `getutid' and `getutline'. If this search fails, the
66536 - entry is appended to the database.
66538 - The `pututline' function returns a pointer to a copy of the entry
66539 - inserted in the user accounting database, or a null pointer if the
66540 - entry could not be added. The following `errno' error conditions
66541 - are defined for this function:
66543 - `EPERM'
66544 - The process does not have the appropriate privileges; you
66545 - cannot modify the user accounting database.
66547 - All the `get*' functions mentioned before store the information they
66548 -return in a static buffer. This can be a problem in multi-threaded
66549 -programs since the data returned for the request is overwritten by the
66550 -return value data in another thread. Therefore the GNU C Library
66551 -provides as extensions three more functions which return the data in a
66552 -user-provided buffer.
66554 - - Function: int getutent_r (struct utmp *BUFFER, struct utmp **RESULT)
66555 - The `getutent_r' is equivalent to the `getutent' function. It
66556 - returns the next entry from the database. But instead of storing
66557 - the information in a static buffer it stores it in the buffer
66558 - pointed to by the parameter BUFFER.
66560 - If the call was successful, the function returns `0' and the
66561 - pointer variable pointed to by the parameter RESULT contains a
66562 - pointer to the buffer which contains the result (this is most
66563 - probably the same value as BUFFER). If something went wrong
66564 - during the execution of `getutent_r' the function returns `-1'.
66566 - This function is a GNU extension.
66568 - - Function: int getutid_r (const struct utmp *ID, struct utmp *BUFFER,
66569 - struct utmp **RESULT)
66570 - This function retrieves just like `getutid' the next entry matching
66571 - the information stored in ID. But the result is stored in the
66572 - buffer pointed to by the parameter BUFFER.
66574 - If successful the function returns `0' and the pointer variable
66575 - pointed to by the parameter RESULT contains a pointer to the
66576 - buffer with the result (probably the same as RESULT. If not
66577 - successful the function return `-1'.
66579 - This function is a GNU extension.
66581 - - Function: int getutline_r (const struct utmp *LINE, struct utmp
66582 - *BUFFER, struct utmp **RESULT)
66583 - This function retrieves just like `getutline' the next entry
66584 - matching the information stored in LINE. But the result is stored
66585 - in the buffer pointed to by the parameter BUFFER.
66587 - If successful the function returns `0' and the pointer variable
66588 - pointed to by the parameter RESULT contains a pointer to the
66589 - buffer with the result (probably the same as RESULT. If not
66590 - successful the function return `-1'.
66592 - This function is a GNU extension.
66594 - In addition to the user accounting database, most systems keep a
66595 -number of similar databases. For example most systems keep a log file
66596 -with all previous logins (usually in `/etc/wtmp' or `/var/log/wtmp').
66598 - For specifying which database to examine, the following function
66599 -should be used.
66601 - - Function: int utmpname (const char *FILE)
66602 - The `utmpname' function changes the name of the database to be
66603 - examined to FILE, and closes any previously opened database. By
66604 - default `getutent', `getutid', `getutline' and `pututline' read
66605 - from and write to the user accounting database.
66607 - The following macros are defined for use as the FILE argument:
66609 - - Macro: char * _PATH_UTMP
66610 - This macro is used to specify the user accounting database.
66612 - - Macro: char * _PATH_WTMP
66613 - This macro is used to specify the user accounting log file.
66615 - The `utmpname' function returns a value of `0' if the new name was
66616 - successfully stored, and a value of `-1' to indicate an error.
66617 - Note that `utmpname' does not try to open the database, and that
66618 - therefore the return value does not say anything about whether the
66619 - database can be successfully opened.
66621 - Specially for maintaining log-like databases the GNU C Library
66622 -provides the following function:
66624 - - Function: void updwtmp (const char *WTMP_FILE, const struct utmp
66625 - *UTMP)
66626 - The `updwtmp' function appends the entry *UTMP to the database
66627 - specified by WTMP_FILE. For possible values for the WTMP_FILE
66628 - argument see the `utmpname' function.
66630 - *Portability Note:* Although many operating systems provide a subset
66631 -of these functions, they are not standardized. There are often subtle
66632 -differences in the return types, and there are considerable differences
66633 -between the various definitions of `struct utmp'. When programming for
66634 -the GNU system, it is probably best to stick with the functions
66635 -described in this section. If however, you want your program to be
66636 -portable, consider using the XPG functions described in *Note XPG
66637 -Functions::, or take a look at the BSD compatible functions in *Note
66638 -Logging In and Out::.
66640 -\x1f
66641 -File: libc.info, Node: XPG Functions, Next: Logging In and Out, Prev: Manipulating the Database, Up: User Accounting Database
66643 -XPG User Accounting Database Functions
66644 ---------------------------------------
66646 - These functions, described in the X/Open Portability Guide, are
66647 -declared in the header file `utmpx.h'.
66649 - - Data Type: struct utmpx
66650 - The `utmpx' data structure contains at least the following members:
66652 - `short int ut_type'
66653 - Specifies the type of login; one of `EMPTY', `RUN_LVL',
66654 - `BOOT_TIME', `OLD_TIME', `NEW_TIME', `INIT_PROCESS',
66655 - `LOGIN_PROCESS', `USER_PROCESS' or `DEAD_PROCESS'.
66657 - `pid_t ut_pid'
66658 - The process ID number of the login process.
66660 - `char ut_line[]'
66661 - The device name of the tty (without `/dev/').
66663 - `char ut_id[]'
66664 - The inittab ID of the process.
66666 - `char ut_user[]'
66667 - The user's login name.
66669 - `struct timeval ut_tv'
66670 - Time the entry was made. For entries of type `OLD_TIME' this
66671 - is the time when the system clock changed, and for entries of
66672 - type `NEW_TIME' this is the time the system clock was set to.
66673 - On the GNU system, `struct utmpx' is identical to `struct utmp'
66674 - except for the fact that including `utmpx.h' does not make visible
66675 - the declaration of `struct exit_status'.
66677 - The following macros are defined for use as values for the `ut_type'
66678 -member of the `utmpx' structure. The values are integer constants and
66679 -are, on the GNU system, identical to the definitions in `utmp.h'.
66681 -`EMPTY'
66682 - This macro is used to indicate that the entry contains no valid
66683 - user accounting information.
66685 -`RUN_LVL'
66686 - This macro is used to identify the systems runlevel.
66688 -`BOOT_TIME'
66689 - This macro is used to identify the time of system boot.
66691 -`OLD_TIME'
66692 - This macro is used to identify the time when the system clock
66693 - changed.
66695 -`NEW_TIME'
66696 - This macro is used to identify the time after the system changed.
66698 -`INIT_PROCESS'
66699 - This macro is used to identify a process spawned by the init
66700 - process.
66702 -`LOGIN_PROCESS'
66703 - This macro is used to identify the session leader of a logged in
66704 - user.
66706 -`USER_PROCESS'
66707 - This macro is used to identify a user process.
66709 -`DEAD_PROCESS'
66710 - This macro is used to identify a terminated process.
66712 - The size of the `ut_line', `ut_id' and `ut_user' arrays can be found
66713 -using the `sizeof' operator.
66715 - - Function: void setutxent (void)
66716 - This function is similar to `setutent'. On the GNU system it is
66717 - simply an alias for `setutent'.
66719 - - Function: struct utmpx * getutxent (void)
66720 - The `getutxent' function is similar to `getutent', but returns a
66721 - pointer to a `struct utmpx' instead of `struct utmp'. On the GNU
66722 - system it simply is an alias for `getutent'.
66724 - - Function: void endutxent (void)
66725 - This function is similar to `endutent'. On the GNU system it is
66726 - simply an alias for `endutent'.
66728 - - Function: struct utmpx * getutxid (const struct utmpx *ID)
66729 - This function is similar to `getutid', but uses `struct utmpx'
66730 - instead of `struct utmp'. On the GNU system it is simply an alias
66731 - for `getutid'.
66733 - - Function: struct utmpx * getutxline (const struct utmpx *LINE)
66734 - This function is similar to `getutid', but uses `struct utmpx'
66735 - instead of `struct utmp'. On the GNU system it is simply an alias
66736 - for `getutline'.
66738 - - Function: struct utmpx * pututxline (const struct utmpx *UTMP)
66739 - The `pututxline' function is functionally identical to
66740 - `pututline', but uses `struct utmpx' instead of `struct utmp'. On
66741 - the GNU system, `pututxline' is simply an alias for `pututline'.
66743 - - Function: int utmpxname (const char *FILE)
66744 - The `utmpxname' function is functionally identical to `utmpname'.
66745 - On the GNU system, `utmpxname' is simply an alias for `utmpname'.
66747 - You can translate between a traditional `struct utmp' and an XPG
66748 -`struct utmpx' with the following functions. On the GNU system, these
66749 -functions are merely copies, since the two structures are identical.
66751 - - Function: int getutmp (const struct utmpx *utmpx, struct utmp *utmp)
66752 - `getutmp' copies the information, insofar as the structures are
66753 - compatible, from UTMPX to UTMP.
66755 - - Function: int getutmpx (const struct utmp *utmp, struct utmpx *utmpx)
66756 - `getutmpx' copies the information, insofar as the structures are
66757 - compatible, from UTMP to UTMPX.
66759 -\x1f
66760 -File: libc.info, Node: Logging In and Out, Prev: XPG Functions, Up: User Accounting Database
66762 -Logging In and Out
66763 -------------------
66765 - These functions, derived from BSD, are available in the separate
66766 -`libutil' library, and declared in `utmp.h'.
66768 - Note that the `ut_user' member of `struct utmp' is called `ut_name'
66769 -in BSD. Therefore, `ut_name' is defined as an alias for `ut_user' in
66770 -`utmp.h'.
66772 - - Function: int login_tty (int FILEDES)
66773 - This function makes FILEDES the controlling terminal of the
66774 - current process, redirects standard input, standard output and
66775 - standard error output to this terminal, and closes FILEDES.
66777 - This function returns `0' on successful completion, and `-1' on
66778 - error.
66780 - - Function: void login (const struct utmp *ENTRY)
66781 - The `login' functions inserts an entry into the user accounting
66782 - database. The `ut_line' member is set to the name of the terminal
66783 - on standard input. If standard input is not a terminal `login'
66784 - uses standard output or standard error output to determine the
66785 - name of the terminal. If `struct utmp' has a `ut_type' member,
66786 - `login' sets it to `USER_PROCESS', and if there is an `ut_pid'
66787 - member, it will be set to the process ID of the current process.
66788 - The remaining entries are copied from ENTRY.
66790 - A copy of the entry is written to the user accounting log file.
66792 - - Function: int logout (const char *UT_LINE)
66793 - This function modifies the user accounting database to indicate
66794 - that the user on UT_LINE has logged out.
66796 - The `logout' function returns `1' if the entry was successfully
66797 - written to the database, or `0' on error.
66799 - - Function: void logwtmp (const char *UT_LINE, const char *UT_NAME,
66800 - const char *UT_HOST)
66801 - The `logwtmp' function appends an entry to the user accounting log
66802 - file, for the current time and the information provided in the
66803 - UT_LINE, UT_NAME and UT_HOST arguments.
66805 - *Portability Note:* The BSD `struct utmp' only has the `ut_line',
66806 -`ut_name', `ut_host' and `ut_time' members. Older systems do not even
66807 -have the `ut_host' member.
66809 -\x1f
66810 -File: libc.info, Node: User Database, Next: Group Database, Prev: User Accounting Database, Up: Users and Groups
66812 -User Database
66813 -=============
66815 - This section describes how to search and scan the database of
66816 -registered users. The database itself is kept in the file
66817 -`/etc/passwd' on most systems, but on some systems a special network
66818 -server gives access to it.
66820 -* Menu:
66822 -* User Data Structure:: What each user record contains.
66823 -* Lookup User:: How to look for a particular user.
66824 -* Scanning All Users:: Scanning the list of all users, one by one.
66825 -* Writing a User Entry:: How a program can rewrite a user's record.
66827 -\x1f
66828 -File: libc.info, Node: User Data Structure, Next: Lookup User, Up: User Database
66830 -The Data Structure that Describes a User
66831 -----------------------------------------
66833 - The functions and data structures for accessing the system user
66834 -database are declared in the header file `pwd.h'.
66836 - - Data Type: struct passwd
66837 - The `passwd' data structure is used to hold information about
66838 - entries in the system user data base. It has at least the
66839 - following members:
66841 - `char *pw_name'
66842 - The user's login name.
66844 - `char *pw_passwd.'
66845 - The encrypted password string.
66847 - `uid_t pw_uid'
66848 - The user ID number.
66850 - `gid_t pw_gid'
66851 - The user's default group ID number.
66853 - `char *pw_gecos'
66854 - A string typically containing the user's real name, and
66855 - possibly other information such as a phone number.
66857 - `char *pw_dir'
66858 - The user's home directory, or initial working directory.
66859 - This might be a null pointer, in which case the
66860 - interpretation is system-dependent.
66862 - `char *pw_shell'
66863 - The user's default shell, or the initial program run when the
66864 - user logs in. This might be a null pointer, indicating that
66865 - the system default should be used.
66867 diff -u -udbrN glibc-2.3.2/manual/libc.info-47 glibc-2.3.2-200304020432/manual/libc.info-47
66868 --- glibc-2.3.2/manual/libc.info-47 Sat Mar 1 02:39:41 2003
66869 +++ glibc-2.3.2-200304020432/manual/libc.info-47 Thu Jan 1 01:00:00 1970
66870 @@ -1,1034 +0,0 @@
66871 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
66873 -INFO-DIR-SECTION GNU libraries
66874 -START-INFO-DIR-ENTRY
66875 -* Libc: (libc). C library.
66876 -END-INFO-DIR-ENTRY
66878 - This file documents the GNU C library.
66880 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
66881 -Reference Manual', for Version 2.3.x.
66883 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
66884 -Free Software Foundation, Inc.
66886 - Permission is granted to copy, distribute and/or modify this document
66887 -under the terms of the GNU Free Documentation License, Version 1.1 or
66888 -any later version published by the Free Software Foundation; with the
66889 -Invariant Sections being "Free Software Needs Free Documentation" and
66890 -"GNU Lesser General Public License", the Front-Cover texts being (a)
66891 -(see below), and with the Back-Cover Texts being (b) (see below). A
66892 -copy of the license is included in the section entitled "GNU Free
66893 -Documentation License".
66895 - (a) The FSF's Front-Cover Text is:
66897 - A GNU Manual
66899 - (b) The FSF's Back-Cover Text is:
66901 - You have freedom to copy and modify this GNU Manual, like GNU
66902 -software. Copies published by the Free Software Foundation raise
66903 -funds for GNU development.
66905 -\x1f
66906 -File: libc.info, Node: Lookup User, Next: Scanning All Users, Prev: User Data Structure, Up: User Database
66908 -Looking Up One User
66909 --------------------
66911 - You can search the system user database for information about a
66912 -specific user using `getpwuid' or `getpwnam'. These functions are
66913 -declared in `pwd.h'.
66915 - - Function: struct passwd * getpwuid (uid_t UID)
66916 - This function returns a pointer to a statically-allocated structure
66917 - containing information about the user whose user ID is UID. This
66918 - structure may be overwritten on subsequent calls to `getpwuid'.
66920 - A null pointer value indicates there is no user in the data base
66921 - with user ID UID.
66923 - - Function: int getpwuid_r (uid_t UID, struct passwd *RESULT_BUF, char
66924 - *BUFFER, size_t BUFLEN, struct passwd **RESULT)
66925 - This function is similar to `getpwuid' in that it returns
66926 - information about the user whose user ID is UID. However, it
66927 - fills the user supplied structure pointed to by RESULT_BUF with
66928 - the information instead of using a static buffer. The first
66929 - BUFLEN bytes of the additional buffer pointed to by BUFFER are
66930 - used to contain additional information, normally strings which are
66931 - pointed to by the elements of the result structure.
66933 - If a user with ID UID is found, the pointer returned in RESULT
66934 - points to the record which contains the wanted data (i.e., RESULT
66935 - contains the value RESULT_BUF). If no user is found or if an
66936 - error occurred, the pointer returned in RESULT is a null pointer.
66937 - The function returns zero or an error code. If the buffer BUFFER
66938 - is too small to contain all the needed information, the error code
66939 - `ERANGE' is returned and ERRNO is set to `ERANGE'.
66941 - - Function: struct passwd * getpwnam (const char *NAME)
66942 - This function returns a pointer to a statically-allocated structure
66943 - containing information about the user whose user name is NAME.
66944 - This structure may be overwritten on subsequent calls to
66945 - `getpwnam'.
66947 - A null pointer return indicates there is no user named NAME.
66949 - - Function: int getpwnam_r (const char *NAME, struct passwd
66950 - *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd
66951 - **RESULT)
66952 - This function is similar to `getpwnam' in that is returns
66953 - information about the user whose user name is NAME. However, like
66954 - `getpwuid_r', it fills the user supplied buffers in RESULT_BUF and
66955 - BUFFER with the information instead of using a static buffer.
66957 - The return values are the same as for `getpwuid_r'.
66959 -\x1f
66960 -File: libc.info, Node: Scanning All Users, Next: Writing a User Entry, Prev: Lookup User, Up: User Database
66962 -Scanning the List of All Users
66963 -------------------------------
66965 - This section explains how a program can read the list of all users in
66966 -the system, one user at a time. The functions described here are
66967 -declared in `pwd.h'.
66969 - You can use the `fgetpwent' function to read user entries from a
66970 -particular file.
66972 - - Function: struct passwd * fgetpwent (FILE *STREAM)
66973 - This function reads the next user entry from STREAM and returns a
66974 - pointer to the entry. The structure is statically allocated and is
66975 - rewritten on subsequent calls to `fgetpwent'. You must copy the
66976 - contents of the structure if you wish to save the information.
66978 - The stream must correspond to a file in the same format as the
66979 - standard password database file.
66981 - - Function: int fgetpwent_r (FILE *STREAM, struct passwd *RESULT_BUF,
66982 - char *BUFFER, size_t BUFLEN, struct passwd **RESULT)
66983 - This function is similar to `fgetpwent' in that it reads the next
66984 - user entry from STREAM. But the result is returned in the
66985 - structure pointed to by RESULT_BUF. The first BUFLEN bytes of the
66986 - additional buffer pointed to by BUFFER are used to contain
66987 - additional information, normally strings which are pointed to by
66988 - the elements of the result structure.
66990 - The stream must correspond to a file in the same format as the
66991 - standard password database file.
66993 - If the function returns zero RESULT points to the structure with
66994 - the wanted data (normally this is in RESULT_BUF). If errors
66995 - occurred the return value is nonzero and RESULT contains a null
66996 - pointer.
66998 - The way to scan all the entries in the user database is with
66999 -`setpwent', `getpwent', and `endpwent'.
67001 - - Function: void setpwent (void)
67002 - This function initializes a stream which `getpwent' and
67003 - `getpwent_r' use to read the user database.
67005 - - Function: struct passwd * getpwent (void)
67006 - The `getpwent' function reads the next entry from the stream
67007 - initialized by `setpwent'. It returns a pointer to the entry. The
67008 - structure is statically allocated and is rewritten on subsequent
67009 - calls to `getpwent'. You must copy the contents of the structure
67010 - if you wish to save the information.
67012 - A null pointer is returned when no more entries are available.
67014 - - Function: int getpwent_r (struct passwd *RESULT_BUF, char *BUFFER,
67015 - int BUFLEN, struct passwd **RESULT)
67016 - This function is similar to `getpwent' in that it returns the next
67017 - entry from the stream initialized by `setpwent'. Like
67018 - `fgetpwent_r', it uses the user-supplied buffers in RESULT_BUF and
67019 - BUFFER to return the information requested.
67021 - The return values are the same as for `fgetpwent_r'.
67024 - - Function: void endpwent (void)
67025 - This function closes the internal stream used by `getpwent' or
67026 - `getpwent_r'.
67028 -\x1f
67029 -File: libc.info, Node: Writing a User Entry, Prev: Scanning All Users, Up: User Database
67031 -Writing a User Entry
67032 ---------------------
67034 - - Function: int putpwent (const struct passwd *P, FILE *STREAM)
67035 - This function writes the user entry `*P' to the stream STREAM, in
67036 - the format used for the standard user database file. The return
67037 - value is zero on success and nonzero on failure.
67039 - This function exists for compatibility with SVID. We recommend
67040 - that you avoid using it, because it makes sense only on the
67041 - assumption that the `struct passwd' structure has no members
67042 - except the standard ones; on a system which merges the traditional
67043 - Unix data base with other extended information about users, adding
67044 - an entry using this function would inevitably leave out much of
67045 - the important information.
67047 - The function `putpwent' is declared in `pwd.h'.
67049 -\x1f
67050 -File: libc.info, Node: Group Database, Next: Database Example, Prev: User Database, Up: Users and Groups
67052 -Group Database
67053 -==============
67055 - This section describes how to search and scan the database of
67056 -registered groups. The database itself is kept in the file
67057 -`/etc/group' on most systems, but on some systems a special network
67058 -service provides access to it.
67060 -* Menu:
67062 -* Group Data Structure:: What each group record contains.
67063 -* Lookup Group:: How to look for a particular group.
67064 -* Scanning All Groups:: Scanning the list of all groups.
67066 -\x1f
67067 -File: libc.info, Node: Group Data Structure, Next: Lookup Group, Up: Group Database
67069 -The Data Structure for a Group
67070 -------------------------------
67072 - The functions and data structures for accessing the system group
67073 -database are declared in the header file `grp.h'.
67075 - - Data Type: struct group
67076 - The `group' structure is used to hold information about an entry in
67077 - the system group database. It has at least the following members:
67079 - `char *gr_name'
67080 - The name of the group.
67082 - `gid_t gr_gid'
67083 - The group ID of the group.
67085 - `char **gr_mem'
67086 - A vector of pointers to the names of users in the group.
67087 - Each user name is a null-terminated string, and the vector
67088 - itself is terminated by a null pointer.
67090 -\x1f
67091 -File: libc.info, Node: Lookup Group, Next: Scanning All Groups, Prev: Group Data Structure, Up: Group Database
67093 -Looking Up One Group
67094 ---------------------
67096 - You can search the group database for information about a specific
67097 -group using `getgrgid' or `getgrnam'. These functions are declared in
67098 -`grp.h'.
67100 - - Function: struct group * getgrgid (gid_t GID)
67101 - This function returns a pointer to a statically-allocated structure
67102 - containing information about the group whose group ID is GID.
67103 - This structure may be overwritten by subsequent calls to
67104 - `getgrgid'.
67106 - A null pointer indicates there is no group with ID GID.
67108 - - Function: int getgrgid_r (gid_t GID, struct group *RESULT_BUF, char
67109 - *BUFFER, size_t BUFLEN, struct group **RESULT)
67110 - This function is similar to `getgrgid' in that it returns
67111 - information about the group whose group ID is GID. However, it
67112 - fills the user supplied structure pointed to by RESULT_BUF with
67113 - the information instead of using a static buffer. The first
67114 - BUFLEN bytes of the additional buffer pointed to by BUFFER are
67115 - used to contain additional information, normally strings which are
67116 - pointed to by the elements of the result structure.
67118 - If a group with ID GID is found, the pointer returned in RESULT
67119 - points to the record which contains the wanted data (i.e., RESULT
67120 - contains the value RESULT_BUF). If no group is found or if an
67121 - error occurred, the pointer returned in RESULT is a null pointer.
67122 - The function returns zero or an error code. If the buffer BUFFER
67123 - is too small to contain all the needed information, the error code
67124 - `ERANGE' is returned and ERRNO is set to `ERANGE'.
67126 - - Function: struct group * getgrnam (const char *NAME)
67127 - This function returns a pointer to a statically-allocated structure
67128 - containing information about the group whose group name is NAME.
67129 - This structure may be overwritten by subsequent calls to
67130 - `getgrnam'.
67132 - A null pointer indicates there is no group named NAME.
67134 - - Function: int getgrnam_r (const char *NAME, struct group
67135 - *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group
67136 - **RESULT)
67137 - This function is similar to `getgrnam' in that is returns
67138 - information about the group whose group name is NAME. Like
67139 - `getgrgid_r', it uses the user supplied buffers in RESULT_BUF and
67140 - BUFFER, not a static buffer.
67142 - The return values are the same as for `getgrgid_r' `ERANGE'.
67144 -\x1f
67145 -File: libc.info, Node: Scanning All Groups, Prev: Lookup Group, Up: Group Database
67147 -Scanning the List of All Groups
67148 --------------------------------
67150 - This section explains how a program can read the list of all groups
67151 -in the system, one group at a time. The functions described here are
67152 -declared in `grp.h'.
67154 - You can use the `fgetgrent' function to read group entries from a
67155 -particular file.
67157 - - Function: struct group * fgetgrent (FILE *STREAM)
67158 - The `fgetgrent' function reads the next entry from STREAM. It
67159 - returns a pointer to the entry. The structure is statically
67160 - allocated and is overwritten on subsequent calls to `fgetgrent'.
67161 - You must copy the contents of the structure if you wish to save the
67162 - information.
67164 - The stream must correspond to a file in the same format as the
67165 - standard group database file.
67167 - - Function: int fgetgrent_r (FILE *STREAM, struct group *RESULT_BUF,
67168 - char *BUFFER, size_t BUFLEN, struct group **RESULT)
67169 - This function is similar to `fgetgrent' in that it reads the next
67170 - user entry from STREAM. But the result is returned in the
67171 - structure pointed to by RESULT_BUF. The first BUFLEN bytes of the
67172 - additional buffer pointed to by BUFFER are used to contain
67173 - additional information, normally strings which are pointed to by
67174 - the elements of the result structure.
67176 - This stream must correspond to a file in the same format as the
67177 - standard group database file.
67179 - If the function returns zero RESULT points to the structure with
67180 - the wanted data (normally this is in RESULT_BUF). If errors
67181 - occurred the return value is non-zero and RESULT contains a null
67182 - pointer.
67184 - The way to scan all the entries in the group database is with
67185 -`setgrent', `getgrent', and `endgrent'.
67187 - - Function: void setgrent (void)
67188 - This function initializes a stream for reading from the group data
67189 - base. You use this stream by calling `getgrent' or `getgrent_r'.
67191 - - Function: struct group * getgrent (void)
67192 - The `getgrent' function reads the next entry from the stream
67193 - initialized by `setgrent'. It returns a pointer to the entry. The
67194 - structure is statically allocated and is overwritten on subsequent
67195 - calls to `getgrent'. You must copy the contents of the structure
67196 - if you wish to save the information.
67198 - - Function: int getgrent_r (struct group *RESULT_BUF, char *BUFFER,
67199 - size_t BUFLEN, struct group **RESULT)
67200 - This function is similar to `getgrent' in that it returns the next
67201 - entry from the stream initialized by `setgrent'. Like
67202 - `fgetgrent_r', it places the result in user-supplied buffers
67203 - pointed to RESULT_BUF and BUFFER.
67205 - If the function returns zero RESULT contains a pointer to the data
67206 - (normally equal to RESULT_BUF). If errors occurred the return
67207 - value is non-zero and RESULT contains a null pointer.
67209 - - Function: void endgrent (void)
67210 - This function closes the internal stream used by `getgrent' or
67211 - `getgrent_r'.
67213 -\x1f
67214 -File: libc.info, Node: Database Example, Next: Netgroup Database, Prev: Group Database, Up: Users and Groups
67216 -User and Group Database Example
67217 -===============================
67219 - Here is an example program showing the use of the system database
67220 -inquiry functions. The program prints some information about the user
67221 -running the program.
67223 - #include <grp.h>
67224 - #include <pwd.h>
67225 - #include <sys/types.h>
67226 - #include <unistd.h>
67227 - #include <stdlib.h>
67229 - int
67230 - main (void)
67232 - uid_t me;
67233 - struct passwd *my_passwd;
67234 - struct group *my_group;
67235 - char **members;
67237 - /* Get information about the user ID. */
67238 - me = getuid ();
67239 - my_passwd = getpwuid (me);
67240 - if (!my_passwd)
67242 - printf ("Couldn't find out about user %d.\n", (int) me);
67243 - exit (EXIT_FAILURE);
67246 - /* Print the information. */
67247 - printf ("I am %s.\n", my_passwd->pw_gecos);
67248 - printf ("My login name is %s.\n", my_passwd->pw_name);
67249 - printf ("My uid is %d.\n", (int) (my_passwd->pw_uid));
67250 - printf ("My home directory is %s.\n", my_passwd->pw_dir);
67251 - printf ("My default shell is %s.\n", my_passwd->pw_shell);
67253 - /* Get information about the default group ID. */
67254 - my_group = getgrgid (my_passwd->pw_gid);
67255 - if (!my_group)
67257 - printf ("Couldn't find out about group %d.\n",
67258 - (int) my_passwd->pw_gid);
67259 - exit (EXIT_FAILURE);
67262 - /* Print the information. */
67263 - printf ("My default group is %s (%d).\n",
67264 - my_group->gr_name, (int) (my_passwd->pw_gid));
67265 - printf ("The members of this group are:\n");
67266 - members = my_group->gr_mem;
67267 - while (*members)
67269 - printf (" %s\n", *(members));
67270 - members++;
67273 - return EXIT_SUCCESS;
67276 - Here is some output from this program:
67278 - I am Throckmorton Snurd.
67279 - My login name is snurd.
67280 - My uid is 31093.
67281 - My home directory is /home/fsg/snurd.
67282 - My default shell is /bin/sh.
67283 - My default group is guest (12).
67284 - The members of this group are:
67285 - friedman
67286 - tami
67288 -\x1f
67289 -File: libc.info, Node: Netgroup Database, Prev: Database Example, Up: Users and Groups
67291 -Netgroup Database
67292 -=================
67294 -* Menu:
67296 -* Netgroup Data:: Data in the Netgroup database and where
67297 - it comes from.
67298 -* Lookup Netgroup:: How to look for a particular netgroup.
67299 -* Netgroup Membership:: How to test for netgroup membership.
67301 -\x1f
67302 -File: libc.info, Node: Netgroup Data, Next: Lookup Netgroup, Up: Netgroup Database
67304 -Netgroup Data
67305 --------------
67307 - Sometimes it is useful to group users according to other criteria
67308 -(*note Group Database::). E.g., it is useful to associate a certain
67309 -group of users with a certain machine. On the other hand grouping of
67310 -host names is not supported so far.
67312 - In Sun Microsystems SunOS appeared a new kind of database, the
67313 -netgroup database. It allows grouping hosts, users, and domains
67314 -freely, giving them individual names. To be more concrete, a netgroup
67315 -is a list of triples consisting of a host name, a user name, and a
67316 -domain name where any of the entries can be a wildcard entry matching
67317 -all inputs. A last possibility is that names of other netgroups can
67318 -also be given in the list specifying a netgroup. So one can construct
67319 -arbitrary hierarchies without loops.
67321 - Sun's implementation allows netgroups only for the `nis' or
67322 -`nisplus' service, *note Services in the NSS configuration::. The
67323 -implementation in the GNU C library has no such restriction. An entry
67324 -in either of the input services must have the following form:
67326 - GROUPNAME ( GROUPNAME | `('HOSTNAME`,'USERNAME`,'`domainname'`)' )+
67328 - Any of the fields in the triple can be empty which means anything
67329 -matches. While describing the functions we will see that the opposite
67330 -case is useful as well. I.e., there may be entries which will not
67331 -match any input. For entries like this, a name consisting of the single
67332 -character `-' shall be used.
67334 -\x1f
67335 -File: libc.info, Node: Lookup Netgroup, Next: Netgroup Membership, Prev: Netgroup Data, Up: Netgroup Database
67337 -Looking up one Netgroup
67338 ------------------------
67340 - The lookup functions for netgroups are a bit different to all other
67341 -system database handling functions. Since a single netgroup can contain
67342 -many entries a two-step process is needed. First a single netgroup is
67343 -selected and then one can iterate over all entries in this netgroup.
67344 -These functions are declared in `netdb.h'.
67346 - - Function: int setnetgrent (const char *NETGROUP)
67347 - A call to this function initializes the internal state of the
67348 - library to allow following calls of the `getnetgrent' to iterate
67349 - over all entries in the netgroup with name NETGROUP.
67351 - When the call is successful (i.e., when a netgroup with this name
67352 - exists) the return value is `1'. When the return value is `0' no
67353 - netgroup of this name is known or some other error occurred.
67355 - It is important to remember that there is only one single state for
67356 -iterating the netgroups. Even if the programmer uses the
67357 -`getnetgrent_r' function the result is not really reentrant since
67358 -always only one single netgroup at a time can be processed. If the
67359 -program needs to process more than one netgroup simultaneously she must
67360 -protect this by using external locking. This problem was introduced in
67361 -the original netgroups implementation in SunOS and since we must stay
67362 -compatible it is not possible to change this.
67364 - Some other functions also use the netgroups state. Currently these
67365 -are the `innetgr' function and parts of the implementation of the
67366 -`compat' service part of the NSS implementation.
67368 - - Function: int getnetgrent (char **HOSTP, char **USERP, char
67369 - **DOMAINP)
67370 - This function returns the next unprocessed entry of the currently
67371 - selected netgroup. The string pointers, in which addresses are
67372 - passed in the arguments HOSTP, USERP, and DOMAINP, will contain
67373 - after a successful call pointers to appropriate strings. If the
67374 - string in the next entry is empty the pointer has the value `NULL'.
67375 - The returned string pointers are only valid if none of the netgroup
67376 - related functions are called.
67378 - The return value is `1' if the next entry was successfully read. A
67379 - value of `0' means no further entries exist or internal errors
67380 - occurred.
67382 - - Function: int getnetgrent_r (char **HOSTP, char **USERP, char
67383 - **DOMAINP, char *BUFFER, int BUFLEN)
67384 - This function is similar to `getnetgrent' with only one exception:
67385 - the strings the three string pointers HOSTP, USERP, and DOMAINP
67386 - point to, are placed in the buffer of BUFLEN bytes starting at
67387 - BUFFER. This means the returned values are valid even after other
67388 - netgroup related functions are called.
67390 - The return value is `1' if the next entry was successfully read and
67391 - the buffer contains enough room to place the strings in it. `0' is
67392 - returned in case no more entries are found, the buffer is too
67393 - small, or internal errors occurred.
67395 - This function is a GNU extension. The original implementation in
67396 - the SunOS libc does not provide this function.
67398 - - Function: void endnetgrent (void)
67399 - This function frees all buffers which were allocated to process
67400 - the last selected netgroup. As a result all string pointers
67401 - returned by calls to `getnetgrent' are invalid afterwards.
67403 -\x1f
67404 -File: libc.info, Node: Netgroup Membership, Prev: Lookup Netgroup, Up: Netgroup Database
67406 -Testing for Netgroup Membership
67407 --------------------------------
67409 - It is often not necessary to scan the whole netgroup since often the
67410 -only interesting question is whether a given entry is part of the
67411 -selected netgroup.
67413 - - Function: int innetgr (const char *NETGROUP, const char *HOST, const
67414 - char *USER, const char *DOMAIN)
67415 - This function tests whether the triple specified by the parameters
67416 - HOSTP, USERP, and DOMAINP is part of the netgroup NETGROUP. Using
67417 - this function has the advantage that
67419 - 1. no other netgroup function can use the global netgroup state
67420 - since internal locking is used and
67422 - 2. the function is implemented more efficiently than successive
67423 - calls to the other `set'/`get'/`endnetgrent' functions.
67425 - Any of the pointers HOSTP, USERP, and DOMAINP can be `NULL' which
67426 - means any value is accepted in this position. This is also true
67427 - for the name `-' which should not match any other string otherwise.
67429 - The return value is `1' if an entry matching the given triple is
67430 - found in the netgroup. The return value is `0' if the netgroup
67431 - itself is not found, the netgroup does not contain the triple or
67432 - internal errors occurred.
67434 -\x1f
67435 -File: libc.info, Node: System Management, Next: System Configuration, Prev: Users and Groups, Up: Top
67437 -System Management
67438 -*****************
67440 - This chapter describes facilities for controlling the system that
67441 -underlies a process (including the operating system and hardware) and
67442 -for getting information about it. Anyone can generally use the
67443 -informational facilities, but usually only a properly privileged process
67444 -can make changes.
67446 -* Menu:
67448 -* Host Identification:: Determining the name of the machine.
67449 -* Platform Type:: Determining operating system and basic
67450 - machine type
67451 -* Filesystem Handling:: Controlling/querying mounts
67452 -* System Parameters:: Getting and setting various system parameters
67454 - To get information on parameters of the system that are built into
67455 -the system, such as the maximum length of a filename, *Note System
67456 -Configuration::.
67458 -\x1f
67459 -File: libc.info, Node: Host Identification, Next: Platform Type, Up: System Management
67461 -Host Identification
67462 -===================
67464 - This section explains how to identify the particular system on which
67465 -your program is running. First, let's review the various ways computer
67466 -systems are named, which is a little complicated because of the history
67467 -of the development of the Internet.
67469 - Every Unix system (also known as a host) has a host name, whether
67470 -it's connected to a network or not. In its simplest form, as used
67471 -before computer networks were an issue, it's just a word like `chicken'.
67473 - But any system attached to the Internet or any network like it
67474 -conforms to a more rigorous naming convention as part of the Domain
67475 -Name System (DNS). In DNS, every host name is composed of two parts:
67477 - 1. hostname
67479 - 2. domain name
67481 - You will note that "hostname" looks a lot like "host name", but is
67482 -not the same thing, and that people often incorrectly refer to entire
67483 -host names as "domain names."
67485 - In DNS, the full host name is properly called the FQDN (Fully
67486 -Qualified Domain Name) and consists of the hostname, then a period,
67487 -then the domain name. The domain name itself usually has multiple
67488 -components separated by periods. So for example, a system's hostname
67489 -may be `chicken' and its domain name might be `ai.mit.edu', so its FQDN
67490 -(which is its host name) is `chicken.ai.mit.edu'.
67492 - Adding to the confusion, though, is that DNS is not the only name
67493 -space in which a computer needs to be known. Another name space is the
67494 -NIS (aka YP) name space. For NIS purposes, there is another domain
67495 -name, which is called the NIS domain name or the YP domain name. It
67496 -need not have anything to do with the DNS domain name.
67498 - Confusing things even more is the fact that in DNS, it is possible
67499 -for multiple FQDNs to refer to the same system. However, there is
67500 -always exactly one of them that is the true host name, and it is called
67501 -the canonical FQDN.
67503 - In some contexts, the host name is called a "node name."
67505 - For more information on DNS host naming, *Note Host Names::.
67507 - Prototypes for these functions appear in `unistd.h'.
67509 - The programs `hostname', `hostid', and `domainname' work by calling
67510 -these functions.
67512 - - Function: int gethostname (char *NAME, size_t SIZE)
67513 - This function returns the host name of the system on which it is
67514 - called, in the array NAME. The SIZE argument specifies the size of
67515 - this array, in bytes. Note that this is _not_ the DNS hostname.
67516 - If the system participates in DNS, this is the FQDN (see above).
67518 - The return value is `0' on success and `-1' on failure. In the
67519 - GNU C library, `gethostname' fails if SIZE is not large enough;
67520 - then you can try again with a larger array. The following `errno'
67521 - error condition is defined for this function:
67523 - `ENAMETOOLONG'
67524 - The SIZE argument is less than the size of the host name plus
67525 - one.
67527 - On some systems, there is a symbol for the maximum possible host
67528 - name length: `MAXHOSTNAMELEN'. It is defined in `sys/param.h'.
67529 - But you can't count on this to exist, so it is cleaner to handle
67530 - failure and try again.
67532 - `gethostname' stores the beginning of the host name in NAME even
67533 - if the host name won't entirely fit. For some purposes, a
67534 - truncated host name is good enough. If it is, you can ignore the
67535 - error code.
67537 - - Function: int sethostname (const char *NAME, size_t LENGTH)
67538 - The `sethostname' function sets the host name of the system that
67539 - calls it to NAME, a string with length LENGTH. Only privileged
67540 - processes are permitted to do this.
67542 - Usually `sethostname' gets called just once, at system boot time.
67543 - Often, the program that calls it sets it to the value it finds in
67544 - the file `/etc/hostname'.
67546 - Be sure to set the host name to the full host name, not just the
67547 - DNS hostname (see above).
67549 - The return value is `0' on success and `-1' on failure. The
67550 - following `errno' error condition is defined for this function:
67552 - `EPERM'
67553 - This process cannot set the host name because it is not
67554 - privileged.
67556 - - Function: int getdomainnname (char *NAME, size_t LENGTH)
67557 - `getdomainname' returns the NIS (aka YP) domain name of the system
67558 - on which it is called. Note that this is not the more popular DNS
67559 - domain name. Get that with `gethostname'.
67561 - The specifics of this function are analogous to `gethostname',
67562 - above.
67565 - - Function: int setdomainname (const char *NAME, size_t LENGTH)
67566 - `getdomainname' sets the NIS (aka YP) domain name of the system on
67567 - which it is called. Note that this is not the more popular DNS
67568 - domain name. Set that with `sethostname'.
67570 - The specifics of this function are analogous to `sethostname',
67571 - above.
67574 - - Function: long int gethostid (void)
67575 - This function returns the "host ID" of the machine the program is
67576 - running on. By convention, this is usually the primary Internet
67577 - IP address of that machine, converted to a `long int'. However,
67578 - on some systems it is a meaningless but unique number which is
67579 - hard-coded for each machine.
67581 - This is not widely used. It arose in BSD 4.2, but was dropped in
67582 - BSD 4.4. It is not required by POSIX.
67584 - The proper way to query the IP address is to use `gethostbyname'
67585 - on the results of `gethostname'. For more information on IP
67586 - addresses, *Note Host Addresses::.
67588 - - Function: int sethostid (long int ID)
67589 - The `sethostid' function sets the "host ID" of the host machine to
67590 - ID. Only privileged processes are permitted to do this. Usually
67591 - it happens just once, at system boot time.
67593 - The proper way to establish the primary IP address of a system is
67594 - to configure the IP address resolver to associate that IP address
67595 - with the system's host name as returned by `gethostname'. For
67596 - example, put a record for the system in `/etc/hosts'.
67598 - See `gethostid' above for more information on host ids.
67600 - The return value is `0' on success and `-1' on failure. The
67601 - following `errno' error conditions are defined for this function:
67603 - `EPERM'
67604 - This process cannot set the host name because it is not
67605 - privileged.
67607 - `ENOSYS'
67608 - The operating system does not support setting the host ID.
67609 - On some systems, the host ID is a meaningless but unique
67610 - number hard-coded for each machine.
67612 -\x1f
67613 -File: libc.info, Node: Platform Type, Next: Filesystem Handling, Prev: Host Identification, Up: System Management
67615 -Platform Type Identification
67616 -============================
67618 - You can use the `uname' function to find out some information about
67619 -the type of computer your program is running on. This function and the
67620 -associated data type are declared in the header file `sys/utsname.h'.
67622 - As a bonus, `uname' also gives some information identifying the
67623 -particular system your program is running on. This is the same
67624 -information which you can get with functions targetted to this purpose
67625 -described in *Note Host Identification::.
67627 - - Data Type: struct utsname
67628 - The `utsname' structure is used to hold information returned by
67629 - the `uname' function. It has the following members:
67631 - `char sysname[]'
67632 - This is the name of the operating system in use.
67634 - `char release[]'
67635 - This is the current release level of the operating system
67636 - implementation.
67638 - `char version[]'
67639 - This is the current version level within the release of the
67640 - operating system.
67642 - `char machine[]'
67643 - This is a description of the type of hardware that is in use.
67645 - Some systems provide a mechanism to interrogate the kernel
67646 - directly for this information. On systems without such a
67647 - mechanism, the GNU C library fills in this field based on the
67648 - configuration name that was specified when building and
67649 - installing the library.
67651 - GNU uses a three-part name to describe a system
67652 - configuration; the three parts are CPU, MANUFACTURER and
67653 - SYSTEM-TYPE, and they are separated with dashes. Any
67654 - possible combination of three names is potentially
67655 - meaningful, but most such combinations are meaningless in
67656 - practice and even the meaningful ones are not necessarily
67657 - supported by any particular GNU program.
67659 - Since the value in `machine' is supposed to describe just the
67660 - hardware, it consists of the first two parts of the
67661 - configuration name: `CPU-MANUFACTURER'. For example, it
67662 - might be one of these:
67664 - `"sparc-sun"', `"i386-ANYTHING"', `"m68k-hp"',
67665 - `"m68k-sony"', `"m68k-sun"', `"mips-dec"'
67667 - `char nodename[]'
67668 - This is the host name of this particular computer. In the
67669 - GNU C library, the value is the same as that returned by
67670 - `gethostname'; see *Note Host Identification::.
67672 - gethostname() is implemented with a call to uname().
67674 - `char domainname[]'
67675 - This is the NIS or YP domain name. It is the same value
67676 - returned by `getdomainname'; see *Note Host Identification::.
67677 - This element is a relatively recent invention and use of it
67678 - is not as portable as use of the rest of the structure.
67681 - - Function: int uname (struct utsname *INFO)
67682 - The `uname' function fills in the structure pointed to by INFO
67683 - with information about the operating system and host machine. A
67684 - non-negative value indicates that the data was successfully stored.
67686 - `-1' as the value indicates an error. The only error possible is
67687 - `EFAULT', which we normally don't mention as it is always a
67688 - possibility.
67690 -\x1f
67691 -File: libc.info, Node: Filesystem Handling, Next: System Parameters, Prev: Platform Type, Up: System Management
67693 -Controlling and Querying Mounts
67694 -===============================
67696 - All files are in filesystems, and before you can access any file, its
67697 -filesystem must be mounted. Because of Unix's concept of _Everything
67698 -is a file_, mounting of filesystems is central to doing almost
67699 -anything. This section explains how to find out what filesystems are
67700 -currently mounted and what filesystems are available for mounting, and
67701 -how to change what is mounted.
67703 - The classic filesystem is the contents of a disk drive. The concept
67704 -is considerably more abstract, though, and lots of things other than
67705 -disk drives can be mounted.
67707 - Some block devices don't correspond to traditional devices like disk
67708 -drives. For example, a loop device is a block device whose driver uses
67709 -a regular file in another filesystem as its medium. So if that regular
67710 -file contains appropriate data for a filesystem, you can by mounting the
67711 -loop device essentially mount a regular file.
67713 - Some filesystems aren't based on a device of any kind. The "proc"
67714 -filesystem, for example, contains files whose data is made up by the
67715 -filesystem driver on the fly whenever you ask for it. And when you
67716 -write to it, the data you write causes changes in the system. No data
67717 -gets stored.
67719 -* Menu:
67721 -* Mount Information:: What is or could be mounted?
67722 -* Mount-Unmount-Remount:: Controlling what is mounted and how
67724 -\x1f
67725 -File: libc.info, Node: Mount Information, Next: Mount-Unmount-Remount, Up: Filesystem Handling
67727 -Mount Information
67728 ------------------
67730 - For some programs it is desirable and necessary to access information
67731 -about whether a certain filesystem is mounted and, if it is, where, or
67732 -simply to get lists of all the available filesystems. The GNU libc
67733 -provides some functions to retrieve this information portably.
67735 - Traditionally Unix systems have a file named `/etc/fstab' which
67736 -describes all possibly mounted filesystems. The `mount' program uses
67737 -this file to mount at startup time of the system all the necessary
67738 -filesystems. The information about all the filesystems actually
67739 -mounted is normally kept in a file named either `/var/run/mtab' or
67740 -`/etc/mtab'. Both files share the same syntax and it is crucial that
67741 -this syntax is followed all the time. Therefore it is best to never
67742 -directly write the files. The functions described in this section can
67743 -do this and they also provide the functionality to convert the external
67744 -textual representation to the internal representation.
67746 - Note that the `fstab' and `mtab' files are maintained on a system by
67747 -_convention_. It is possible for the files not to exist or not to be
67748 -consistent with what is really mounted or available to mount, if the
67749 -system's administration policy allows it. But programs that mount and
67750 -unmount filesystems typically maintain and use these files as described
67751 -herein.
67753 - The filenames given above should never be used directly. The
67754 -portable way to handle these file is to use the macro `_PATH_FSTAB',
67755 -defined in `fstab.h', or `_PATH_MNTTAB', defined in `mntent.h' and
67756 -`paths.h', for `fstab'; and the macro `_PATH_MOUNTED', also defined in
67757 -`mntent.h' and `paths.h', for `mtab'. There are also two alternate
67758 -macro names `FSTAB', `MNTTAB', and `MOUNTED' defined but these names
67759 -are deprecated and kept only for backward compatibility. The names
67760 -`_PATH_MNTTAB' and `_PATH_MOUNTED' should always be used.
67762 -* Menu:
67764 -* fstab:: The `fstab' file
67765 -* mtab:: The `mtab' file
67766 -* Other Mount Information:: Other (non-libc) sources of mount information
67768 -\x1f
67769 -File: libc.info, Node: fstab, Next: mtab, Up: Mount Information
67771 -The `fstab' file
67772 -................
67774 - The internal representation for entries of the file is
67775 -`struct fstab', defined in `fstab.h'.
67777 - - Data Type: struct fstab
67778 - This structure is used with the `getfsent', `getfsspec', and
67779 - `getfsfile' functions.
67781 - `char *fs_spec'
67782 - This element describes the device from which the filesystem
67783 - is mounted. Normally this is the name of a special device,
67784 - such as a hard disk partition, but it could also be a more or
67785 - less generic string. For "NFS" it would be a hostname and
67786 - directory name combination.
67788 - Even though the element is not declared `const' it shouldn't
67789 - be modified. The missing `const' has historic reasons, since
67790 - this function predates ISO C. The same is true for the other
67791 - string elements of this structure.
67793 - `char *fs_file'
67794 - This describes the mount point on the local system. I.e.,
67795 - accessing any file in this filesystem has implicitly or
67796 - explicitly this string as a prefix.
67798 - `char *fs_vfstype'
67799 - This is the type of the filesystem. Depending on what the
67800 - underlying kernel understands it can be any string.
67802 - `char *fs_mntops'
67803 - This is a string containing options passed to the kernel with
67804 - the `mount' call. Again, this can be almost anything. There
67805 - can be more than one option, separated from the others by a
67806 - comma. Each option consists of a name and an optional value
67807 - part, introduced by an `=' character.
67809 - If the value of this element must be processed it should
67810 - ideally be done using the `getsubopt' function; see *Note
67811 - Suboptions::.
67813 - `const char *fs_type'
67814 - This name is poorly chosen. This element points to a string
67815 - (possibly in the `fs_mntops' string) which describes the
67816 - modes with which the filesystem is mounted. `fstab' defines
67817 - five macros to describe the possible values:
67819 - `FSTAB_RW'
67820 - The filesystems gets mounted with read and write enabled.
67822 - `FSTAB_RQ'
67823 - The filesystems gets mounted with read and write
67824 - enabled. Write access is restricted by quotas.
67826 - `FSTAB_RO'
67827 - The filesystem gets mounted read-only.
67829 - `FSTAB_SW'
67830 - This is not a real filesystem, it is a swap device.
67832 - `FSTAB_XX'
67833 - This entry from the `fstab' file is totally ignored.
67835 - Testing for equality with these value must happen using
67836 - `strcmp' since these are all strings. Comparing the pointer
67837 - will probably always fail.
67839 - `int fs_freq'
67840 - This element describes the dump frequency in days.
67842 - `int fs_passno'
67843 - This element describes the pass number on parallel dumps. It
67844 - is closely related to the `dump' utility used on Unix systems.
67846 - To read the entire content of the of the `fstab' file the GNU libc
67847 -contains a set of three functions which are designed in the usual way.
67849 - - Function: int setfsent (void)
67850 - This function makes sure that the internal read pointer for the
67851 - `fstab' file is at the beginning of the file. This is done by
67852 - either opening the file or resetting the read pointer.
67854 - Since the file handle is internal to the libc this function is not
67855 - thread-safe.
67857 - This function returns a non-zero value if the operation was
67858 - successful and the `getfs*' functions can be used to read the
67859 - entries of the file.
67861 - - Function: void endfsent (void)
67862 - This function makes sure that all resources acquired by a prior
67863 - call to `setfsent' (explicitly or implicitly by calling
67864 - `getfsent') are freed.
67866 - - Function: struct fstab * getfsent (void)
67867 - This function returns the next entry of the `fstab' file. If this
67868 - is the first call to any of the functions handling `fstab' since
67869 - program start or the last call of `endfsent', the file will be
67870 - opened.
67872 - The function returns a pointer to a variable of type `struct
67873 - fstab'. This variable is shared by all threads and therefore this
67874 - function is not thread-safe. If an error occurred `getfsent'
67875 - returns a `NULL' pointer.
67877 - - Function: struct fstab * getfsspec (const char *NAME)
67878 - This function returns the next entry of the `fstab' file which has
67879 - a string equal to NAME pointed to by the `fs_spec' element. Since
67880 - there is normally exactly one entry for each special device it
67881 - makes no sense to call this function more than once for the same
67882 - argument. If this is the first call to any of the functions
67883 - handling `fstab' since program start or the last call of
67884 - `endfsent', the file will be opened.
67886 - The function returns a pointer to a variable of type `struct
67887 - fstab'. This variable is shared by all threads and therefore this
67888 - function is not thread-safe. If an error occurred `getfsent'
67889 - returns a `NULL' pointer.
67891 - - Function: struct fstab * getfsfile (const char *NAME)
67892 - This function returns the next entry of the `fstab' file which has
67893 - a string equal to NAME pointed to by the `fs_file' element. Since
67894 - there is normally exactly one entry for each mount point it makes
67895 - no sense to call this function more than once for the same
67896 - argument. If this is the first call to any of the functions
67897 - handling `fstab' since program start or the last call of
67898 - `endfsent', the file will be opened.
67900 - The function returns a pointer to a variable of type `struct
67901 - fstab'. This variable is shared by all threads and therefore this
67902 - function is not thread-safe. If an error occurred `getfsent'
67903 - returns a `NULL' pointer.
67905 diff -u -udbrN glibc-2.3.2/manual/libc.info-48 glibc-2.3.2-200304020432/manual/libc.info-48
67906 --- glibc-2.3.2/manual/libc.info-48 Sat Mar 1 02:39:41 2003
67907 +++ glibc-2.3.2-200304020432/manual/libc.info-48 Thu Jan 1 01:00:00 1970
67908 @@ -1,1353 +0,0 @@
67909 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
67911 -INFO-DIR-SECTION GNU libraries
67912 -START-INFO-DIR-ENTRY
67913 -* Libc: (libc). C library.
67914 -END-INFO-DIR-ENTRY
67916 - This file documents the GNU C library.
67918 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
67919 -Reference Manual', for Version 2.3.x.
67921 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
67922 -Free Software Foundation, Inc.
67924 - Permission is granted to copy, distribute and/or modify this document
67925 -under the terms of the GNU Free Documentation License, Version 1.1 or
67926 -any later version published by the Free Software Foundation; with the
67927 -Invariant Sections being "Free Software Needs Free Documentation" and
67928 -"GNU Lesser General Public License", the Front-Cover texts being (a)
67929 -(see below), and with the Back-Cover Texts being (b) (see below). A
67930 -copy of the license is included in the section entitled "GNU Free
67931 -Documentation License".
67933 - (a) The FSF's Front-Cover Text is:
67935 - A GNU Manual
67937 - (b) The FSF's Back-Cover Text is:
67939 - You have freedom to copy and modify this GNU Manual, like GNU
67940 -software. Copies published by the Free Software Foundation raise
67941 -funds for GNU development.
67943 -\x1f
67944 -File: libc.info, Node: mtab, Next: Other Mount Information, Prev: fstab, Up: Mount Information
67946 -The `mtab' file
67947 -...............
67949 - The following functions and data structure access the `mtab' file.
67951 - - Data Type: struct mntent
67952 - This structure is used with the `getmntent', `getmntent_t',
67953 - `addmntent', and `hasmntopt' functions.
67955 - `char *mnt_fsname'
67956 - This element contains a pointer to a string describing the
67957 - name of the special device from which the filesystem is
67958 - mounted. It corresponds to the `fs_spec' element in `struct
67959 - fstab'.
67961 - `char *mnt_dir'
67962 - This element points to a string describing the mount point of
67963 - the filesystem. It corresponds to the `fs_file' element in
67964 - `struct fstab'.
67966 - `char *mnt_type'
67967 - `mnt_type' describes the filesystem type and is therefore
67968 - equivalent to `fs_vfstype' in `struct fstab'. `mntent.h'
67969 - defines a few symbolic names for some of the values this
67970 - string can have. But since the kernel can support arbitrary
67971 - filesystems it does not make much sense to give them symbolic
67972 - names. If one knows the symbol name one also knows the
67973 - filesystem name. Nevertheless here follows the list of the
67974 - symbols provided in `mntent.h'.
67976 - `MNTTYPE_IGNORE'
67977 - This symbol expands to `"ignore"'. The value is
67978 - sometime used in `fstab' files to make sure entries are
67979 - not used without removing them.
67981 - `MNTTYPE_NFS'
67982 - Expands to `"nfs"'. Using this macro sometimes could
67983 - make sense since it names the default NFS
67984 - implementation, in case both version 2 and 3 are
67985 - supported.
67987 - `MNTTYPE_SWAP'
67988 - This symbol expands to `"swap"'. It names the special
67989 - `fstab' entry which names one of the possibly multiple
67990 - swap partitions.
67992 - `char *mnt_opts'
67993 - The element contains a string describing the options used
67994 - while mounting the filesystem. As for the equivalent element
67995 - `fs_mntops' of `struct fstab' it is best to use the function
67996 - `getsubopt' (*note Suboptions::) to access the parts of this
67997 - string.
67999 - The `mntent.h' file defines a number of macros with string
68000 - values which correspond to some of the options understood by
68001 - the kernel. There might be many more options which are
68002 - possible so it doesn't make much sense to rely on these
68003 - macros but to be consistent here is the list:
68005 - `MNTOPT_DEFAULTS'
68006 - Expands to `"defaults"'. This option should be used
68007 - alone since it indicates all values for the customizable
68008 - values are chosen to be the default.
68010 - `MNTOPT_RO'
68011 - Expands to `"ro"'. See the `FSTAB_RO' value, it means
68012 - the filesystem is mounted read-only.
68014 - `MNTOPT_RW'
68015 - Expand to `"rw"'. See the `FSTAB_RW' value, it means the
68016 - filesystem is mounted with read and write permissions.
68018 - `MNTOPT_SUID'
68019 - Expands to `"suid"'. This means that the SUID bit
68020 - (*note How Change Persona::) is respected when a program
68021 - from the filesystem is started.
68023 - `MNTOPT_NOSUID'
68024 - Expands to `"nosuid"'. This is the opposite of
68025 - `MNTOPT_SUID', the SUID bit for all files from the
68026 - filesystem is ignored.
68028 - `MNTOPT_NOAUTO'
68029 - Expands to `"noauto"'. At startup time the `mount'
68030 - program will ignore this entry if it is started with the
68031 - `-a' option to mount all filesystems mentioned in the
68032 - `fstab' file.
68034 - As for the `FSTAB_*' entries introduced above it is important
68035 - to use `strcmp' to check for equality.
68037 - `mnt_freq'
68038 - This elements corresponds to `fs_freq' and also specifies the
68039 - frequency in days in which dumps are made.
68041 - `mnt_passno'
68042 - This element is equivalent to `fs_passno' with the same
68043 - meaning which is uninteresting for all programs beside `dump'.
68045 - For accessing the `mtab' file there is again a set of three
68046 -functions to access all entries in a row. Unlike the functions to
68047 -handle `fstab' these functions do not access a fixed file and there is
68048 -even a thread safe variant of the get function. Beside this the GNU
68049 -libc contains functions to alter the file and test for specific options.
68051 - - Function: FILE * setmntent (const char *FILE, const char *MODE)
68052 - The `setmntent' function prepares the file named FILE which must
68053 - be in the format of a `fstab' and `mtab' file for the upcoming
68054 - processing through the other functions of the family. The MODE
68055 - parameter can be chosen in the way the OPENTYPE parameter for
68056 - `fopen' (*note Opening Streams::) can be chosen. If the file is
68057 - opened for writing the file is also allowed to be empty.
68059 - If the file was successfully opened `setmntent' returns a file
68060 - descriptor for future use. Otherwise the return value is `NULL'
68061 - and `errno' is set accordingly.
68063 - - Function: int endmntent (FILE *STREAM)
68064 - This function takes for the STREAM parameter a file handle which
68065 - previously was returned from the `setmntent' call. `endmntent'
68066 - closes the stream and frees all resources.
68068 - The return value is 1 unless an error occurred in which case it is
68069 - 0.
68071 - - Function: struct mntent * getmntent (FILE *STREAM)
68072 - The `getmntent' function takes as the parameter a file handle
68073 - previously returned by successful call to `setmntent'. It returns
68074 - a pointer to a static variable of type `struct mntent' which is
68075 - filled with the information from the next entry from the file
68076 - currently read.
68078 - The file format used prescribes the use of spaces or tab
68079 - characters to separate the fields. This makes it harder to use
68080 - name containing one of these characters (e.g., mount points using
68081 - spaces). Therefore these characters are encoded in the files and
68082 - the `getmntent' function takes care of the decoding while reading
68083 - the entries back in. `'\040'' is used to encode a space
68084 - character, `'\012'' to encode a tab character and `'\\'' to encode
68085 - a backslash.
68087 - If there was an error or the end of the file is reached the return
68088 - value is `NULL'.
68090 - This function is not thread-safe since all calls to this function
68091 - return a pointer to the same static variable. `getmntent_r'
68092 - should be used in situations where multiple threads access the
68093 - file.
68095 - - Function: struct mntent * getmntent_r (FILE *STREAM, struct mentent
68096 - *RESULT, char *BUFFER, int BUFSIZE)
68097 - The `getmntent_r' function is the reentrant variant of
68098 - `getmntent'. It also returns the next entry from the file and
68099 - returns a pointer. The actual variable the values are stored in
68100 - is not static, though. Instead the function stores the values in
68101 - the variable pointed to by the RESULT parameter. Additional
68102 - information (e.g., the strings pointed to by the elements of the
68103 - result) are kept in the buffer of size BUFSIZE pointed to by
68104 - BUFFER.
68106 - Escaped characters (space, tab, backslash) are converted back in
68107 - the same way as it happens for `getmentent'.
68109 - The function returns a `NULL' pointer in error cases. Errors
68110 - could be:
68111 - * error while reading the file,
68113 - * end of file reached,
68115 - * BUFSIZE is too small for reading a complete new entry.
68117 - - Function: int addmntent (FILE *STREAM, const struct mntent *MNT)
68118 - The `addmntent' function allows adding a new entry to the file
68119 - previously opened with `setmntent'. The new entries are always
68120 - appended. I.e., even if the position of the file descriptor is
68121 - not at the end of the file this function does not overwrite an
68122 - existing entry following the current position.
68124 - The implication of this is that to remove an entry from a file one
68125 - has to create a new file while leaving out the entry to be removed
68126 - and after closing the file remove the old one and rename the new
68127 - file to the chosen name.
68129 - This function takes care of spaces and tab characters in the names
68130 - to be written to the file. It converts them and the backslash
68131 - character into the format describe in the `getmntent' description
68132 - above.
68134 - This function returns 0 in case the operation was successful.
68135 - Otherwise the return value is 1 and `errno' is set appropriately.
68137 - - Function: char * hasmntopt (const struct mntent *MNT, const char
68138 - *OPT)
68139 - This function can be used to check whether the string pointed to
68140 - by the `mnt_opts' element of the variable pointed to by MNT
68141 - contains the option OPT. If this is true a pointer to the
68142 - beginning of the option in the `mnt_opts' element is returned. If
68143 - no such option exists the function returns `NULL'.
68145 - This function is useful to test whether a specific option is
68146 - present but when all options have to be processed one is better
68147 - off with using the `getsubopt' function to iterate over all
68148 - options in the string.
68150 -\x1f
68151 -File: libc.info, Node: Other Mount Information, Prev: mtab, Up: Mount Information
68153 -Other (Non-libc) Sources of Mount Information
68154 -.............................................
68156 - On a system with a Linux kernel and the `proc' filesystem, you can
68157 -get information on currently mounted filesystems from the file `mounts'
68158 -in the `proc' filesystem. Its format is similar to that of the `mtab'
68159 -file, but represents what is truly mounted without relying on
68160 -facilities outside the kernel to keep `mtab' up to date.
68162 -\x1f
68163 -File: libc.info, Node: Mount-Unmount-Remount, Prev: Mount Information, Up: Filesystem Handling
68165 -Mount, Unmount, Remount
68166 ------------------------
68168 - This section describes the functions for mounting, unmounting, and
68169 -remounting filesystems.
68171 - Only the superuser can mount, unmount, or remount a filesystem.
68173 - These functions do not access the `fstab' and `mtab' files. You
68174 -should maintain and use these separately. *Note Mount Information::.
68176 - The symbols in this section are declared in `sys/mount.h'.
68178 - - Function: int mount (const char *SPECIAL_FILE, const char *DIR,
68179 - const char *FSTYPE, unsigned long int OPTIONS, const void
68180 - *DATA)
68181 - `mount' mounts or remounts a filesystem. The two operations are
68182 - quite different and are merged rather unnaturally into this one
68183 - function. The `MS_REMOUNT' option, explained below, determines
68184 - whether `mount' mounts or remounts.
68186 - For a mount, the filesystem on the block device represented by the
68187 - device special file named SPECIAL_FILE gets mounted over the mount
68188 - point DIR. This means that the directory DIR (along with any
68189 - files in it) is no longer visible; in its place (and still with
68190 - the name DIR) is the root directory of the filesystem on the
68191 - device.
68193 - As an exception, if the filesystem type (see below) is one which
68194 - is not based on a device (e.g. "proc"), `mount' instantiates a
68195 - filesystem and mounts it over DIR and ignores SPECIAL_FILE.
68197 - For a remount, DIR specifies the mount point where the filesystem
68198 - to be remounted is (and remains) mounted and SPECIAL_FILE is
68199 - ignored. Remounting a filesystem means changing the options that
68200 - control operations on the filesystem while it is mounted. It does
68201 - not mean unmounting and mounting again.
68203 - For a mount, you must identify the type of the filesystem as
68204 - FSTYPE. This type tells the kernel how to access the filesystem
68205 - and can be thought of as the name of a filesystem driver. The
68206 - acceptable values are system dependent. On a system with a Linux
68207 - kernel and the `proc' filesystem, the list of possible values is
68208 - in the file `filesystems' in the `proc' filesystem (e.g. type `cat
68209 - /proc/filesystems' to see the list). With a Linux kernel, the
68210 - types of filesystems that `mount' can mount, and their type names,
68211 - depends on what filesystem drivers are configured into the kernel
68212 - or loaded as loadable kernel modules. An example of a common
68213 - value for FSTYPE is `ext2'.
68215 - For a remount, `mount' ignores FSTYPE.
68217 - OPTIONS specifies a variety of options that apply until the
68218 - filesystem is unmounted or remounted. The precise meaning of an
68219 - option depends on the filesystem and with some filesystems, an
68220 - option may have no effect at all. Furthermore, for some
68221 - filesystems, some of these options (but never `MS_RDONLY') can be
68222 - overridden for individual file accesses via `ioctl'.
68224 - OPTIONS is a bit string with bit fields defined using the
68225 - following mask and masked value macros:
68227 - `MS_MGC_MASK'
68228 - This multibit field contains a magic number. If it does not
68229 - have the value `MS_MGC_VAL', `mount' assumes all the
68230 - following bits are zero and the DATA argument is a null
68231 - string, regardless of their actual values.
68233 - `MS_REMOUNT'
68234 - This bit on means to remount the filesystem. Off means to
68235 - mount it.
68237 - `MS_RDONLY'
68238 - This bit on specifies that no writing to the filesystem shall
68239 - be allowed while it is mounted. This cannot be overridden by
68240 - `ioctl'. This option is available on nearly all filesystems.
68242 - `S_IMMUTABLE'
68243 - This bit on specifies that no writing to the files in the
68244 - filesystem shall be allowed while it is mounted. This can be
68245 - overridden for a particular file access by a properly
68246 - privileged call to `ioctl'. This option is a relatively new
68247 - invention and is not available on many filesystems.
68249 - `S_APPEND'
68250 - This bit on specifies that the only file writing that shall
68251 - be allowed while the filesystem is mounted is appending.
68252 - Some filesystems allow this to be overridden for a particular
68253 - process by a properly privileged call to `ioctl'. This is a
68254 - relatively new invention and is not available on many
68255 - filesystems.
68257 - `MS_NOSUID'
68258 - This bit on specifies that Setuid and Setgid permissions on
68259 - files in the filesystem shall be ignored while it is mounted.
68261 - `MS_NOEXEC'
68262 - This bit on specifies that no files in the filesystem shall
68263 - be executed while the filesystem is mounted.
68265 - `MS_NODEV'
68266 - This bit on specifies that no device special files in the
68267 - filesystem shall be accessible while the filesystem is
68268 - mounted.
68270 - `MS_SYNCHRONOUS'
68271 - This bit on specifies that all writes to the filesystem while
68272 - it is mounted shall be synchronous; i.e. data shall be synced
68273 - before each write completes rather than held in the buffer
68274 - cache.
68276 - `MS_MANDLOCK'
68277 - This bit on specifies that mandatory locks on files shall be
68278 - permitted while the filesystem is mounted.
68280 - `MS_NOATIME'
68281 - This bit on specifies that access times of files shall not be
68282 - updated when the files are accessed while the filesystem is
68283 - mounted.
68285 - `MS_NODIRATIME'
68286 - This bit on specifies that access times of directories shall
68287 - not be updated when the directories are accessed while the
68288 - filesystem in mounted.
68290 - Any bits not covered by the above masks should be set off;
68291 - otherwise, results are undefined.
68293 - The meaning of DATA depends on the filesystem type and is
68294 - controlled entirely by the filesystem driver in the kernel.
68296 - Example:
68298 - #include <sys/mount.h>
68300 - mount("/dev/hdb", "/cdrom", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, "");
68302 - mount("/dev/hda2", "/mnt", MS_MGC_VAL | MS_REMOUNT, "");
68304 - Appropriate arguments for `mount' are conventionally recorded in
68305 - the `fstab' table. *Note Mount Information::.
68307 - The return value is zero if the mount or remount is successful.
68308 - Otherwise, it is `-1' and `errno' is set appropriately. The
68309 - values of `errno' are filesystem dependent, but here is a general
68310 - list:
68312 - `EPERM'
68313 - The process is not superuser.
68315 - `ENODEV'
68316 - The file system type FSTYPE is not known to the kernel.
68318 - `ENOTBLK'
68319 - The file DEV is not a block device special file.
68321 - `EBUSY'
68322 - * The device is already mounted.
68324 - * The mount point is busy. (E.g. it is some process'
68325 - working directory or has a filesystem mounted on it
68326 - already).
68328 - * The request is to remount read-only, but there are files
68329 - open for write.
68331 - `EINVAL'
68332 - * A remount was attempted, but there is no filesystem
68333 - mounted over the specified mount point.
68335 - * The supposed filesystem has an invalid superblock.
68338 - `EACCES'
68339 - * The filesystem is inherently read-only (possibly due to
68340 - a switch on the device) and the process attempted to
68341 - mount it read/write (by setting the `MS_RDONLY' bit off).
68343 - * SPECIAL_FILE or DIR is not accessible due to file
68344 - permissions.
68346 - * SPECIAL_FILE is not accessible because it is in a
68347 - filesystem that is mounted with the `MS_NODEV' option.
68350 - `EM_FILE'
68351 - The table of dummy devices is full. `mount' needs to create a
68352 - dummy device (aka "unnamed" device) if the filesystem being
68353 - mounted is not one that uses a device.
68356 - - Function: int umount2 (const char *FILE, int FLAGS)
68357 - `umount2' unmounts a filesystem.
68359 - You can identify the filesystem to unmount either by the device
68360 - special file that contains the filesystem or by the mount point.
68361 - The effect is the same. Specify either as the string FILE.
68363 - FLAGS contains the one-bit field identified by the following mask
68364 - macro:
68366 - `MNT_FORCE'
68367 - This bit on means to force the unmounting even if the
68368 - filesystem is busy, by making it unbusy first. If the bit is
68369 - off and the filesystem is busy, `umount2' fails with `errno'
68370 - = `EBUSY'. Depending on the filesystem, this may override
68371 - all, some, or no busy conditions.
68373 - All other bits in FLAGS should be set to zero; otherwise, the
68374 - result is undefined.
68376 - Example:
68378 - #include <sys/mount.h>
68380 - umount2("/mnt", MNT_FORCE);
68382 - umount2("/dev/hdd1", 0);
68384 - After the filesystem is unmounted, the directory that was the
68385 - mount point is visible, as are any files in it.
68387 - As part of unmounting, `umount2' syncs the filesystem.
68389 - If the unmounting is successful, the return value is zero.
68390 - Otherwise, it is `-1' and `errno' is set accordingly:
68392 - `EPERM'
68393 - The process is not superuser.
68395 - `EBUSY'
68396 - The filesystem cannot be unmounted because it is busy. E.g.
68397 - it contains a directory that is some process's working
68398 - directory or a file that some process has open. With some
68399 - filesystems in some cases, you can avoid this failure with
68400 - the `MNT_FORCE' option.
68402 - `EINVAL'
68403 - FILE validly refers to a file, but that file is neither a
68404 - mount point nor a device special file of a currently mounted
68405 - filesystem.
68407 - This function is not available on all systems.
68409 - - Function: int umount (const char *FILE)
68410 - `umount' does the same thing as `umount2' with FLAGS set to
68411 - zeroes. It is more widely available than `umount2' but since it
68412 - lacks the possibility to forcefully unmount a filesystem is
68413 - deprecated when `umount2' is also available.
68415 -\x1f
68416 -File: libc.info, Node: System Parameters, Prev: Filesystem Handling, Up: System Management
68418 -System Parameters
68419 -=================
68421 - This section describes the `sysctl' function, which gets and sets a
68422 -variety of system parameters.
68424 - The symbols used in this section are declared in the file `sysctl.h'.
68426 - - Function: int sysctl (int *NAMES, int NLEN, void *OLDVAL,
68427 - size_t *OLDLENP, void *NEWVAL, size_t NEWLEN)
68429 - `sysctl' gets or sets a specified system parameter. There are so
68430 - many of these parameters that it is not practical to list them all
68431 - here, but here are some examples:
68433 - * network domain name
68435 - * paging parameters
68437 - * network Address Resolution Protocol timeout time
68439 - * maximum number of files that may be open
68441 - * root filesystem device
68443 - * when kernel was built
68445 - The set of available parameters depends on the kernel
68446 - configuration and can change while the system is running,
68447 - particularly when you load and unload loadable kernel modules.
68449 - The system parameters with which `syslog' is concerned are arranged
68450 - in a hierarchical structure like a hierarchical filesystem. To
68451 - identify a particular parameter, you specify a path through the
68452 - structure in a way analogous to specifying the pathname of a file.
68453 - Each component of the path is specified by an integer and each of
68454 - these integers has a macro defined for it by `sysctl.h'. NAMES is
68455 - the path, in the form of an array of integers. Each component of
68456 - the path is one element of the array, in order. NLEN is the
68457 - number of components in the path.
68459 - For example, the first component of the path for all the paging
68460 - parameters is the value `CTL_VM'. For the free page thresholds,
68461 - the second component of the path is `VM_FREEPG'. So to get the
68462 - free page threshold values, make NAMES an array containing the two
68463 - elements `CTL_VM' and `VM_FREEPG' and make NLEN = 2.
68465 - The format of the value of a parameter depends on the parameter.
68466 - Sometimes it is an integer; sometimes it is an ASCII string;
68467 - sometimes it is an elaborate structure. In the case of the free
68468 - page thresholds used in the example above, the parameter value is
68469 - a structure containing several integers.
68471 - In any case, you identify a place to return the parameter's value
68472 - with OLDVAL and specify the amount of storage available at that
68473 - location as *OLDLENP. *OLDLENP does double duty because it is
68474 - also the output location that contains the actual length of the
68475 - returned value.
68477 - If you don't want the parameter value returned, specify a null
68478 - pointer for OLDVAL.
68480 - To set the parameter, specify the address and length of the new
68481 - value as NEWVAL and NEWLEN. If you don't want to set the
68482 - parameter, specify a null pointer as NEWVAL.
68484 - If you get and set a parameter in the same `sysctl' call, the value
68485 - returned is the value of the parameter before it was set.
68487 - Each system parameter has a set of permissions similar to the
68488 - permissions for a file (including the permissions on directories
68489 - in its path) that determine whether you may get or set it. For
68490 - the purposes of these permissions, every parameter is considered
68491 - to be owned by the superuser and Group 0 so processes with that
68492 - effective uid or gid may have more access to system parameters.
68493 - Unlike with files, the superuser does not invariably have full
68494 - permission to all system parameters, because some of them are
68495 - designed not to be changed ever.
68497 - `sysctl' returns a zero return value if it succeeds. Otherwise, it
68498 - returns `-1' and sets `errno' appropriately. Besides the failures
68499 - that apply to all system calls, the following are the `errno'
68500 - codes for all possible failures:
68502 - `EPERM'
68503 - The process is not permitted to access one of the components
68504 - of the path of the system parameter or is not permitted to
68505 - access the system parameter itself in the way (read or write)
68506 - that it requested.
68508 - `ENOTDIR'
68509 - There is no system parameter corresponding to NAME.
68511 - `EFAULT'
68512 - OLDVAL is not null, which means the process wanted to read
68513 - the parameter, but *OLDLENP is zero, so there is no place to
68514 - return it.
68516 - `EINVAL'
68517 - * The process attempted to set a system parameter to a
68518 - value that is not valid for that parameter.
68520 - * The space provided for the return of the system
68521 - parameter is not the right size for that parameter.
68523 - `ENOMEM'
68524 - This value may be returned instead of the more correct
68525 - `EINVAL' in some cases where the space provided for the
68526 - return of the system parameter is too small.
68529 - If you have a Linux kernel with the `proc' filesystem, you can get
68530 -and set most of the same parameters by reading and writing to files in
68531 -the `sys' directory of the `proc' filesystem. In the `sys' directory,
68532 -the directory structure represents the hierarchical structure of the
68533 -parameters. E.g. you can display the free page thresholds with
68534 - cat /proc/sys/vm/freepages
68536 - Some more traditional and more widely available, though less general,
68537 -GNU C library functions for getting and setting some of the same system
68538 -parameters are:
68540 - * `getdomainname', `setdomainname'
68542 - * `gethostname', `sethostname' (*Note Host Identification::.)
68544 - * `uname' (*Note Platform Type::.)
68546 - * `bdflush'
68548 -\x1f
68549 -File: libc.info, Node: System Configuration, Next: Cryptographic Functions, Prev: System Management, Up: Top
68551 -System Configuration Parameters
68552 -*******************************
68554 - The functions and macros listed in this chapter give information
68555 -about configuration parameters of the operating system--for example,
68556 -capacity limits, presence of optional POSIX features, and the default
68557 -path for executable files (*note String Parameters::).
68559 -* Menu:
68561 -* General Limits:: Constants and functions that describe
68562 - various process-related limits that have
68563 - one uniform value for any given machine.
68564 -* System Options:: Optional POSIX features.
68565 -* Version Supported:: Version numbers of POSIX.1 and POSIX.2.
68566 -* Sysconf:: Getting specific configuration values
68567 - of general limits and system options.
68568 -* Minimums:: Minimum values for general limits.
68570 -* Limits for Files:: Size limitations that pertain to individual files.
68571 - These can vary between file systems
68572 - or even from file to file.
68573 -* Options for Files:: Optional features that some files may support.
68574 -* File Minimums:: Minimum values for file limits.
68575 -* Pathconf:: Getting the limit values for a particular file.
68577 -* Utility Limits:: Capacity limits of some POSIX.2 utility programs.
68578 -* Utility Minimums:: Minimum allowable values of those limits.
68580 -* String Parameters:: Getting the default search path.
68582 -\x1f
68583 -File: libc.info, Node: General Limits, Next: System Options, Up: System Configuration
68585 -General Capacity Limits
68586 -=======================
68588 - The POSIX.1 and POSIX.2 standards specify a number of parameters that
68589 -describe capacity limitations of the system. These limits can be fixed
68590 -constants for a given operating system, or they can vary from machine to
68591 -machine. For example, some limit values may be configurable by the
68592 -system administrator, either at run time or by rebuilding the kernel,
68593 -and this should not require recompiling application programs.
68595 - Each of the following limit parameters has a macro that is defined in
68596 -`limits.h' only if the system has a fixed, uniform limit for the
68597 -parameter in question. If the system allows different file systems or
68598 -files to have different limits, then the macro is undefined; use
68599 -`sysconf' to find out the limit that applies at a particular time on a
68600 -particular machine. *Note Sysconf::.
68602 - Each of these parameters also has another macro, with a name starting
68603 -with `_POSIX', which gives the lowest value that the limit is allowed
68604 -to have on _any_ POSIX system. *Note Minimums::.
68606 - - Macro: int ARG_MAX
68607 - If defined, the unvarying maximum combined length of the ARGV and
68608 - ENVIRON arguments that can be passed to the `exec' functions.
68610 - - Macro: int CHILD_MAX
68611 - If defined, the unvarying maximum number of processes that can
68612 - exist with the same real user ID at any one time. In BSD and GNU,
68613 - this is controlled by the `RLIMIT_NPROC' resource limit; *note
68614 - Limits on Resources::.
68616 - - Macro: int OPEN_MAX
68617 - If defined, the unvarying maximum number of files that a single
68618 - process can have open simultaneously. In BSD and GNU, this is
68619 - controlled by the `RLIMIT_NOFILE' resource limit; *note Limits on
68620 - Resources::.
68622 - - Macro: int STREAM_MAX
68623 - If defined, the unvarying maximum number of streams that a single
68624 - process can have open simultaneously. *Note Opening Streams::.
68626 - - Macro: int TZNAME_MAX
68627 - If defined, the unvarying maximum length of a time zone name.
68628 - *Note Time Zone Functions::.
68630 - These limit macros are always defined in `limits.h'.
68632 - - Macro: int NGROUPS_MAX
68633 - The maximum number of supplementary group IDs that one process can
68634 - have.
68636 - The value of this macro is actually a lower bound for the maximum.
68637 - That is, you can count on being able to have that many
68638 - supplementary group IDs, but a particular machine might let you
68639 - have even more. You can use `sysconf' to see whether a particular
68640 - machine will let you have more (*note Sysconf::).
68642 - - Macro: int SSIZE_MAX
68643 - The largest value that can fit in an object of type `ssize_t'.
68644 - Effectively, this is the limit on the number of bytes that can be
68645 - read or written in a single operation.
68647 - This macro is defined in all POSIX systems because this limit is
68648 - never configurable.
68650 - - Macro: int RE_DUP_MAX
68651 - The largest number of repetitions you are guaranteed is allowed in
68652 - the construct `\{MIN,MAX\}' in a regular expression.
68654 - The value of this macro is actually a lower bound for the maximum.
68655 - That is, you can count on being able to have that many
68656 - repetitions, but a particular machine might let you have even
68657 - more. You can use `sysconf' to see whether a particular machine
68658 - will let you have more (*note Sysconf::). And even the value that
68659 - `sysconf' tells you is just a lower bound--larger values might
68660 - work.
68662 - This macro is defined in all POSIX.2 systems, because POSIX.2 says
68663 - it should always be defined even if there is no specific imposed
68664 - limit.
68666 -\x1f
68667 -File: libc.info, Node: System Options, Next: Version Supported, Prev: General Limits, Up: System Configuration
68669 -Overall System Options
68670 -======================
68672 - POSIX defines certain system-specific options that not all POSIX
68673 -systems support. Since these options are provided in the kernel, not
68674 -in the library, simply using the GNU C library does not guarantee any
68675 -of these features is supported; it depends on the system you are using.
68677 - You can test for the availability of a given option using the macros
68678 -in this section, together with the function `sysconf'. The macros are
68679 -defined only if you include `unistd.h'.
68681 - For the following macros, if the macro is defined in `unistd.h',
68682 -then the option is supported. Otherwise, the option may or may not be
68683 -supported; use `sysconf' to find out. *Note Sysconf::.
68685 - - Macro: int _POSIX_JOB_CONTROL
68686 - If this symbol is defined, it indicates that the system supports
68687 - job control. Otherwise, the implementation behaves as if all
68688 - processes within a session belong to a single process group.
68689 - *Note Job Control::.
68691 - - Macro: int _POSIX_SAVED_IDS
68692 - If this symbol is defined, it indicates that the system remembers
68693 - the effective user and group IDs of a process before it executes an
68694 - executable file with the set-user-ID or set-group-ID bits set, and
68695 - that explicitly changing the effective user or group IDs back to
68696 - these values is permitted. If this option is not defined, then if
68697 - a nonprivileged process changes its effective user or group ID to
68698 - the real user or group ID of the process, it can't change it back
68699 - again. *Note Enable/Disable Setuid::.
68701 - For the following macros, if the macro is defined in `unistd.h',
68702 -then its value indicates whether the option is supported. A value of
68703 -`-1' means no, and any other value means yes. If the macro is not
68704 -defined, then the option may or may not be supported; use `sysconf' to
68705 -find out. *Note Sysconf::.
68707 - - Macro: int _POSIX2_C_DEV
68708 - If this symbol is defined, it indicates that the system has the
68709 - POSIX.2 C compiler command, `c89'. The GNU C library always
68710 - defines this as `1', on the assumption that you would not have
68711 - installed it if you didn't have a C compiler.
68713 - - Macro: int _POSIX2_FORT_DEV
68714 - If this symbol is defined, it indicates that the system has the
68715 - POSIX.2 Fortran compiler command, `fort77'. The GNU C library
68716 - never defines this, because we don't know what the system has.
68718 - - Macro: int _POSIX2_FORT_RUN
68719 - If this symbol is defined, it indicates that the system has the
68720 - POSIX.2 `asa' command to interpret Fortran carriage control. The
68721 - GNU C library never defines this, because we don't know what the
68722 - system has.
68724 - - Macro: int _POSIX2_LOCALEDEF
68725 - If this symbol is defined, it indicates that the system has the
68726 - POSIX.2 `localedef' command. The GNU C library never defines
68727 - this, because we don't know what the system has.
68729 - - Macro: int _POSIX2_SW_DEV
68730 - If this symbol is defined, it indicates that the system has the
68731 - POSIX.2 commands `ar', `make', and `strip'. The GNU C library
68732 - always defines this as `1', on the assumption that you had to have
68733 - `ar' and `make' to install the library, and it's unlikely that
68734 - `strip' would be absent when those are present.
68736 -\x1f
68737 -File: libc.info, Node: Version Supported, Next: Sysconf, Prev: System Options, Up: System Configuration
68739 -Which Version of POSIX is Supported
68740 -===================================
68742 - - Macro: long int _POSIX_VERSION
68743 - This constant represents the version of the POSIX.1 standard to
68744 - which the implementation conforms. For an implementation
68745 - conforming to the 1995 POSIX.1 standard, the value is the integer
68746 - `199506L'.
68748 - `_POSIX_VERSION' is always defined (in `unistd.h') in any POSIX
68749 - system.
68751 - *Usage Note:* Don't try to test whether the system supports POSIX
68752 - by including `unistd.h' and then checking whether `_POSIX_VERSION'
68753 - is defined. On a non-POSIX system, this will probably fail
68754 - because there is no `unistd.h'. We do not know of _any_ way you
68755 - can reliably test at compilation time whether your target system
68756 - supports POSIX or whether `unistd.h' exists.
68758 - The GNU C compiler predefines the symbol `__POSIX__' if the target
68759 - system is a POSIX system. Provided you do not use any other
68760 - compilers on POSIX systems, testing `defined (__POSIX__)' will
68761 - reliably detect such systems.
68763 - - Macro: long int _POSIX2_C_VERSION
68764 - This constant represents the version of the POSIX.2 standard which
68765 - the library and system kernel support. We don't know what value
68766 - this will be for the first version of the POSIX.2 standard,
68767 - because the value is based on the year and month in which the
68768 - standard is officially adopted.
68770 - The value of this symbol says nothing about the utilities
68771 - installed on the system.
68773 - *Usage Note:* You can use this macro to tell whether a POSIX.1
68774 - system library supports POSIX.2 as well. Any POSIX.1 system
68775 - contains `unistd.h', so include that file and then test `defined
68776 - (_POSIX2_C_VERSION)'.
68778 -\x1f
68779 -File: libc.info, Node: Sysconf, Next: Minimums, Prev: Version Supported, Up: System Configuration
68781 -Using `sysconf'
68782 -===============
68784 - When your system has configurable system limits, you can use the
68785 -`sysconf' function to find out the value that applies to any particular
68786 -machine. The function and the associated PARAMETER constants are
68787 -declared in the header file `unistd.h'.
68789 -* Menu:
68791 -* Sysconf Definition:: Detailed specifications of `sysconf'.
68792 -* Constants for Sysconf:: The list of parameters `sysconf' can read.
68793 -* Examples of Sysconf:: How to use `sysconf' and the parameter
68794 - macros properly together.
68796 -\x1f
68797 -File: libc.info, Node: Sysconf Definition, Next: Constants for Sysconf, Up: Sysconf
68799 -Definition of `sysconf'
68800 ------------------------
68802 - - Function: long int sysconf (int PARAMETER)
68803 - This function is used to inquire about runtime system parameters.
68804 - The PARAMETER argument should be one of the `_SC_' symbols listed
68805 - below.
68807 - The normal return value from `sysconf' is the value you requested.
68808 - A value of `-1' is returned both if the implementation does not
68809 - impose a limit, and in case of an error.
68811 - The following `errno' error conditions are defined for this
68812 - function:
68814 - `EINVAL'
68815 - The value of the PARAMETER is invalid.
68817 -\x1f
68818 -File: libc.info, Node: Constants for Sysconf, Next: Examples of Sysconf, Prev: Sysconf Definition, Up: Sysconf
68820 -Constants for `sysconf' Parameters
68821 -----------------------------------
68823 - Here are the symbolic constants for use as the PARAMETER argument to
68824 -`sysconf'. The values are all integer constants (more specifically,
68825 -enumeration type values).
68827 -`_SC_ARG_MAX'
68828 - Inquire about the parameter corresponding to `ARG_MAX'.
68830 -`_SC_CHILD_MAX'
68831 - Inquire about the parameter corresponding to `CHILD_MAX'.
68833 -`_SC_OPEN_MAX'
68834 - Inquire about the parameter corresponding to `OPEN_MAX'.
68836 -`_SC_STREAM_MAX'
68837 - Inquire about the parameter corresponding to `STREAM_MAX'.
68839 -`_SC_TZNAME_MAX'
68840 - Inquire about the parameter corresponding to `TZNAME_MAX'.
68842 -`_SC_NGROUPS_MAX'
68843 - Inquire about the parameter corresponding to `NGROUPS_MAX'.
68845 -`_SC_JOB_CONTROL'
68846 - Inquire about the parameter corresponding to `_POSIX_JOB_CONTROL'.
68848 -`_SC_SAVED_IDS'
68849 - Inquire about the parameter corresponding to `_POSIX_SAVED_IDS'.
68851 -`_SC_VERSION'
68852 - Inquire about the parameter corresponding to `_POSIX_VERSION'.
68854 -`_SC_CLK_TCK'
68855 - Inquire about the parameter corresponding to `CLOCKS_PER_SEC';
68856 - *note CPU Time::.
68858 -`_SC_CHARCLASS_NAME_MAX'
68859 - Inquire about the parameter corresponding to maximal length
68860 - allowed for a character class name in an extended locale
68861 - specification. These extensions are not yet standardized and so
68862 - this option is not standardized as well.
68864 -`_SC_REALTIME_SIGNALS'
68865 - Inquire about the parameter corresponding to
68866 - `_POSIX_REALTIME_SIGNALS'.
68868 -`_SC_PRIORITY_SCHEDULING'
68869 - Inquire about the parameter corresponding to
68870 - `_POSIX_PRIORITY_SCHEDULING'.
68872 -`_SC_TIMERS'
68873 - Inquire about the parameter corresponding to `_POSIX_TIMERS'.
68875 -`_SC_ASYNCHRONOUS_IO'
68876 - Inquire about the parameter corresponding to
68877 - `_POSIX_ASYNCHRONOUS_IO'.
68879 -`_SC_PRIORITIZED_IO'
68880 - Inquire about the parameter corresponding to
68881 - `_POSIX_PRIORITIZED_IO'.
68883 -`_SC_SYNCHRONIZED_IO'
68884 - Inquire about the parameter corresponding to
68885 - `_POSIX_SYNCHRONIZED_IO'.
68887 -`_SC_FSYNC'
68888 - Inquire about the parameter corresponding to `_POSIX_FSYNC'.
68890 -`_SC_MAPPED_FILES'
68891 - Inquire about the parameter corresponding to `_POSIX_MAPPED_FILES'.
68893 -`_SC_MEMLOCK'
68894 - Inquire about the parameter corresponding to `_POSIX_MEMLOCK'.
68896 -`_SC_MEMLOCK_RANGE'
68897 - Inquire about the parameter corresponding to
68898 - `_POSIX_MEMLOCK_RANGE'.
68900 -`_SC_MEMORY_PROTECTION'
68901 - Inquire about the parameter corresponding to
68902 - `_POSIX_MEMORY_PROTECTION'.
68904 -`_SC_MESSAGE_PASSING'
68905 - Inquire about the parameter corresponding to
68906 - `_POSIX_MESSAGE_PASSING'.
68908 -`_SC_SEMAPHORES'
68909 - Inquire about the parameter corresponding to `_POSIX_SEMAPHORES'.
68911 -`_SC_SHARED_MEMORY_OBJECTS'
68912 - Inquire about the parameter corresponding to
68913 - `_POSIX_SHARED_MEMORY_OBJECTS'.
68915 -`_SC_AIO_LISTIO_MAX'
68916 - Inquire about the parameter corresponding to
68917 - `_POSIX_AIO_LISTIO_MAX'.
68919 -`_SC_AIO_MAX'
68920 - Inquire about the parameter corresponding to `_POSIX_AIO_MAX'.
68922 -`_SC_AIO_PRIO_DELTA_MAX'
68923 - Inquire the value by which a process can decrease its asynchronous
68924 - I/O priority level from its own scheduling priority. This
68925 - corresponds to the run-time invariant value `AIO_PRIO_DELTA_MAX'.
68927 -`_SC_DELAYTIMER_MAX'
68928 - Inquire about the parameter corresponding to
68929 - `_POSIX_DELAYTIMER_MAX'.
68931 -`_SC_MQ_OPEN_MAX'
68932 - Inquire about the parameter corresponding to `_POSIX_MQ_OPEN_MAX'.
68934 -`_SC_MQ_PRIO_MAX'
68935 - Inquire about the parameter corresponding to `_POSIX_MQ_PRIO_MAX'.
68937 -`_SC_RTSIG_MAX'
68938 - Inquire about the parameter corresponding to `_POSIX_RTSIG_MAX'.
68940 -`_SC_SEM_NSEMS_MAX'
68941 - Inquire about the parameter corresponding to
68942 - `_POSIX_SEM_NSEMS_MAX'.
68944 -`_SC_SEM_VALUE_MAX'
68945 - Inquire about the parameter corresponding to
68946 - `_POSIX_SEM_VALUE_MAX'.
68948 -`_SC_SIGQUEUE_MAX'
68949 - Inquire about the parameter corresponding to `_POSIX_SIGQUEUE_MAX'.
68951 -`_SC_TIMER_MAX'
68952 - Inquire about the parameter corresponding to `_POSIX_TIMER_MAX'.
68954 -`_SC_PII'
68955 - Inquire about the parameter corresponding to `_POSIX_PII'.
68957 -`_SC_PII_XTI'
68958 - Inquire about the parameter corresponding to `_POSIX_PII_XTI'.
68960 -`_SC_PII_SOCKET'
68961 - Inquire about the parameter corresponding to `_POSIX_PII_SOCKET'.
68963 -`_SC_PII_INTERNET'
68964 - Inquire about the parameter corresponding to `_POSIX_PII_INTERNET'.
68966 -`_SC_PII_OSI'
68967 - Inquire about the parameter corresponding to `_POSIX_PII_OSI'.
68969 -`_SC_SELECT'
68970 - Inquire about the parameter corresponding to `_POSIX_SELECT'.
68972 -`_SC_UIO_MAXIOV'
68973 - Inquire about the parameter corresponding to `_POSIX_UIO_MAXIOV'.
68975 -`_SC_PII_INTERNET_STREAM'
68976 - Inquire about the parameter corresponding to
68977 - `_POSIX_PII_INTERNET_STREAM'.
68979 -`_SC_PII_INTERNET_DGRAM'
68980 - Inquire about the parameter corresponding to
68981 - `_POSIX_PII_INTERNET_DGRAM'.
68983 -`_SC_PII_OSI_COTS'
68984 - Inquire about the parameter corresponding to `_POSIX_PII_OSI_COTS'.
68986 -`_SC_PII_OSI_CLTS'
68987 - Inquire about the parameter corresponding to `_POSIX_PII_OSI_CLTS'.
68989 -`_SC_PII_OSI_M'
68990 - Inquire about the parameter corresponding to `_POSIX_PII_OSI_M'.
68992 -`_SC_T_IOV_MAX'
68993 - Inquire the value of the value associated with the `T_IOV_MAX'
68994 - variable.
68996 -`_SC_THREADS'
68997 - Inquire about the parameter corresponding to `_POSIX_THREADS'.
68999 -`_SC_THREAD_SAFE_FUNCTIONS'
69000 - Inquire about the parameter corresponding to
69001 - `_POSIX_THREAD_SAFE_FUNCTIONS'.
69003 -`_SC_GETGR_R_SIZE_MAX'
69004 - Inquire about the parameter corresponding to
69005 - `_POSIX_GETGR_R_SIZE_MAX'.
69007 -`_SC_GETPW_R_SIZE_MAX'
69008 - Inquire about the parameter corresponding to
69009 - `_POSIX_GETPW_R_SIZE_MAX'.
69011 -`_SC_LOGIN_NAME_MAX'
69012 - Inquire about the parameter corresponding to
69013 - `_POSIX_LOGIN_NAME_MAX'.
69015 -`_SC_TTY_NAME_MAX'
69016 - Inquire about the parameter corresponding to `_POSIX_TTY_NAME_MAX'.
69018 -`_SC_THREAD_DESTRUCTOR_ITERATIONS'
69019 - Inquire about the parameter corresponding to
69020 - `_POSIX_THREAD_DESTRUCTOR_ITERATIONS'.
69022 -`_SC_THREAD_KEYS_MAX'
69023 - Inquire about the parameter corresponding to
69024 - `_POSIX_THREAD_KEYS_MAX'.
69026 -`_SC_THREAD_STACK_MIN'
69027 - Inquire about the parameter corresponding to
69028 - `_POSIX_THREAD_STACK_MIN'.
69030 -`_SC_THREAD_THREADS_MAX'
69031 - Inquire about the parameter corresponding to
69032 - `_POSIX_THREAD_THREADS_MAX'.
69034 -`_SC_THREAD_ATTR_STACKADDR'
69035 - Inquire about the parameter corresponding to
69036 - a `_POSIX_THREAD_ATTR_STACKADDR'.
69038 -`_SC_THREAD_ATTR_STACKSIZE'
69039 - Inquire about the parameter corresponding to
69040 - `_POSIX_THREAD_ATTR_STACKSIZE'.
69042 -`_SC_THREAD_PRIORITY_SCHEDULING'
69043 - Inquire about the parameter corresponding to
69044 - `_POSIX_THREAD_PRIORITY_SCHEDULING'.
69046 -`_SC_THREAD_PRIO_INHERIT'
69047 - Inquire about the parameter corresponding to
69048 - `_POSIX_THREAD_PRIO_INHERIT'.
69050 -`_SC_THREAD_PRIO_PROTECT'
69051 - Inquire about the parameter corresponding to
69052 - `_POSIX_THREAD_PRIO_PROTECT'.
69054 -`_SC_THREAD_PROCESS_SHARED'
69055 - Inquire about the parameter corresponding to
69056 - `_POSIX_THREAD_PROCESS_SHARED'.
69058 -`_SC_2_C_DEV'
69059 - Inquire about whether the system has the POSIX.2 C compiler
69060 - command, `c89'.
69062 -`_SC_2_FORT_DEV'
69063 - Inquire about whether the system has the POSIX.2 Fortran compiler
69064 - command, `fort77'.
69066 -`_SC_2_FORT_RUN'
69067 - Inquire about whether the system has the POSIX.2 `asa' command to
69068 - interpret Fortran carriage control.
69070 -`_SC_2_LOCALEDEF'
69071 - Inquire about whether the system has the POSIX.2 `localedef'
69072 - command.
69074 -`_SC_2_SW_DEV'
69075 - Inquire about whether the system has the POSIX.2 commands `ar',
69076 - `make', and `strip'.
69078 -`_SC_BC_BASE_MAX'
69079 - Inquire about the maximum value of `obase' in the `bc' utility.
69081 -`_SC_BC_DIM_MAX'
69082 - Inquire about the maximum size of an array in the `bc' utility.
69084 -`_SC_BC_SCALE_MAX'
69085 - Inquire about the maximum value of `scale' in the `bc' utility.
69087 -`_SC_BC_STRING_MAX'
69088 - Inquire about the maximum size of a string constant in the `bc'
69089 - utility.
69091 -`_SC_COLL_WEIGHTS_MAX'
69092 - Inquire about the maximum number of weights that can necessarily
69093 - be used in defining the collating sequence for a locale.
69095 -`_SC_EXPR_NEST_MAX'
69096 - Inquire about the maximum number of expressions nested within
69097 - parentheses when using the `expr' utility.
69099 -`_SC_LINE_MAX'
69100 - Inquire about the maximum size of a text line that the POSIX.2 text
69101 - utilities can handle.
69103 -`_SC_EQUIV_CLASS_MAX'
69104 - Inquire about the maximum number of weights that can be assigned
69105 - to an entry of the `LC_COLLATE' category `order' keyword in a
69106 - locale definition. The GNU C library does not presently support
69107 - locale definitions.
69109 -`_SC_VERSION'
69110 - Inquire about the version number of POSIX.1 that the library and
69111 - kernel support.
69113 -`_SC_2_VERSION'
69114 - Inquire about the version number of POSIX.2 that the system
69115 - utilities support.
69117 -`_SC_PAGESIZE'
69118 - Inquire about the virtual memory page size of the machine.
69119 - `getpagesize' returns the same value (*note Query Memory
69120 - Parameters::).
69122 -`_SC_NPROCESSORS_CONF'
69123 - Inquire about the number of configured processors.
69125 -`_SC_NPROCESSORS_ONLN'
69126 - Inquire about the number of processors online.
69128 -`_SC_PHYS_PAGES'
69129 - Inquire about the number of physical pages in the system.
69131 -`_SC_AVPHYS_PAGES'
69132 - Inquire about the number of available physical pages in the system.
69134 -`_SC_ATEXIT_MAX'
69135 - Inquire about the number of functions which can be registered as
69136 - termination functions for `atexit'; *note Cleanups on Exit::.
69138 -`_SC_XOPEN_VERSION'
69139 - Inquire about the parameter corresponding to `_XOPEN_VERSION'.
69141 -`_SC_XOPEN_XCU_VERSION'
69142 - Inquire about the parameter corresponding to `_XOPEN_XCU_VERSION'.
69144 -`_SC_XOPEN_UNIX'
69145 - Inquire about the parameter corresponding to `_XOPEN_UNIX'.
69147 -`_SC_XOPEN_REALTIME'
69148 - Inquire about the parameter corresponding to `_XOPEN_REALTIME'.
69150 -`_SC_XOPEN_REALTIME_THREADS'
69151 - Inquire about the parameter corresponding to
69152 - `_XOPEN_REALTIME_THREADS'.
69154 -`_SC_XOPEN_LEGACY'
69155 - Inquire about the parameter corresponding to `_XOPEN_LEGACY'.
69157 -`_SC_XOPEN_CRYPT'
69158 - Inquire about the parameter corresponding to `_XOPEN_CRYPT'.
69160 -`_SC_XOPEN_ENH_I18N'
69161 - Inquire about the parameter corresponding to `_XOPEN_ENH_I18N'.
69163 -`_SC_XOPEN_SHM'
69164 - Inquire about the parameter corresponding to `_XOPEN_SHM'.
69166 -`_SC_XOPEN_XPG2'
69167 - Inquire about the parameter corresponding to `_XOPEN_XPG2'.
69169 -`_SC_XOPEN_XPG3'
69170 - Inquire about the parameter corresponding to `_XOPEN_XPG3'.
69172 -`_SC_XOPEN_XPG4'
69173 - Inquire about the parameter corresponding to `_XOPEN_XPG4'.
69175 -`_SC_CHAR_BIT'
69176 - Inquire about the number of bits in a variable of type `char'.
69178 -`_SC_CHAR_MAX'
69179 - Inquire about the maximum value which can be stored in a variable
69180 - of type `char'.
69182 -`_SC_CHAR_MIN'
69183 - Inquire about the minimum value which can be stored in a variable
69184 - of type `char'.
69186 -`_SC_INT_MAX'
69187 - Inquire about the maximum value which can be stored in a variable
69188 - of type `int'.
69190 -`_SC_INT_MIN'
69191 - Inquire about the minimum value which can be stored in a variable
69192 - of type `int'.
69194 -`_SC_LONG_BIT'
69195 - Inquire about the number of bits in a variable of type `long int'.
69197 -`_SC_WORD_BIT'
69198 - Inquire about the number of bits in a variable of a register word.
69200 -`_SC_MB_LEN_MAX'
69201 - Inquire the maximum length of a multi-byte representation of a wide
69202 - character value.
69204 -`_SC_NZERO'
69205 - Inquire about the value used to internally represent the zero
69206 - priority level for the process execution.
69208 -`SC_SSIZE_MAX'
69209 - Inquire about the maximum value which can be stored in a variable
69210 - of type `ssize_t'.
69212 -`_SC_SCHAR_MAX'
69213 - Inquire about the maximum value which can be stored in a variable
69214 - of type `signed char'.
69216 -`_SC_SCHAR_MIN'
69217 - Inquire about the minimum value which can be stored in a variable
69218 - of type `signed char'.
69220 -`_SC_SHRT_MAX'
69221 - Inquire about the maximum value which can be stored in a variable
69222 - of type `short int'.
69224 -`_SC_SHRT_MIN'
69225 - Inquire about the minimum value which can be stored in a variable
69226 - of type `short int'.
69228 -`_SC_UCHAR_MAX'
69229 - Inquire about the maximum value which can be stored in a variable
69230 - of type `unsigned char'.
69232 -`_SC_UINT_MAX'
69233 - Inquire about the maximum value which can be stored in a variable
69234 - of type `unsigned int'.
69236 -`_SC_ULONG_MAX'
69237 - Inquire about the maximum value which can be stored in a variable
69238 - of type `unsigned long int'.
69240 -`_SC_USHRT_MAX'
69241 - Inquire about the maximum value which can be stored in a variable
69242 - of type `unsigned short int'.
69244 -`_SC_NL_ARGMAX'
69245 - Inquire about the parameter corresponding to `NL_ARGMAX'.
69247 -`_SC_NL_LANGMAX'
69248 - Inquire about the parameter corresponding to `NL_LANGMAX'.
69250 -`_SC_NL_MSGMAX'
69251 - Inquire about the parameter corresponding to `NL_MSGMAX'.
69253 -`_SC_NL_NMAX'
69254 - Inquire about the parameter corresponding to `NL_NMAX'.
69256 -`_SC_NL_SETMAX'
69257 - Inquire about the parameter corresponding to `NL_SETMAX'.
69259 -`_SC_NL_TEXTMAX'
69260 - Inquire about the parameter corresponding to `NL_TEXTMAX'.
69262 diff -u -udbrN glibc-2.3.2/manual/libc.info-49 glibc-2.3.2-200304020432/manual/libc.info-49
69263 --- glibc-2.3.2/manual/libc.info-49 Sat Mar 1 02:39:41 2003
69264 +++ glibc-2.3.2-200304020432/manual/libc.info-49 Thu Jan 1 01:00:00 1970
69265 @@ -1,1219 +0,0 @@
69266 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
69268 -INFO-DIR-SECTION GNU libraries
69269 -START-INFO-DIR-ENTRY
69270 -* Libc: (libc). C library.
69271 -END-INFO-DIR-ENTRY
69273 - This file documents the GNU C library.
69275 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
69276 -Reference Manual', for Version 2.3.x.
69278 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
69279 -Free Software Foundation, Inc.
69281 - Permission is granted to copy, distribute and/or modify this document
69282 -under the terms of the GNU Free Documentation License, Version 1.1 or
69283 -any later version published by the Free Software Foundation; with the
69284 -Invariant Sections being "Free Software Needs Free Documentation" and
69285 -"GNU Lesser General Public License", the Front-Cover texts being (a)
69286 -(see below), and with the Back-Cover Texts being (b) (see below). A
69287 -copy of the license is included in the section entitled "GNU Free
69288 -Documentation License".
69290 - (a) The FSF's Front-Cover Text is:
69292 - A GNU Manual
69294 - (b) The FSF's Back-Cover Text is:
69296 - You have freedom to copy and modify this GNU Manual, like GNU
69297 -software. Copies published by the Free Software Foundation raise
69298 -funds for GNU development.
69300 -\x1f
69301 -File: libc.info, Node: Examples of Sysconf, Prev: Constants for Sysconf, Up: Sysconf
69303 -Examples of `sysconf'
69304 ----------------------
69306 - We recommend that you first test for a macro definition for the
69307 -parameter you are interested in, and call `sysconf' only if the macro
69308 -is not defined. For example, here is how to test whether job control
69309 -is supported:
69311 - int
69312 - have_job_control (void)
69314 - #ifdef _POSIX_JOB_CONTROL
69315 - return 1;
69316 - #else
69317 - int value = sysconf (_SC_JOB_CONTROL);
69318 - if (value < 0)
69319 - /* If the system is that badly wedged,
69320 - there's no use trying to go on. */
69321 - fatal (strerror (errno));
69322 - return value;
69323 - #endif
69326 - Here is how to get the value of a numeric limit:
69328 - int
69329 - get_child_max ()
69331 - #ifdef CHILD_MAX
69332 - return CHILD_MAX;
69333 - #else
69334 - int value = sysconf (_SC_CHILD_MAX);
69335 - if (value < 0)
69336 - fatal (strerror (errno));
69337 - return value;
69338 - #endif
69341 -\x1f
69342 -File: libc.info, Node: Minimums, Next: Limits for Files, Prev: Sysconf, Up: System Configuration
69344 -Minimum Values for General Capacity Limits
69345 -==========================================
69347 - Here are the names for the POSIX minimum upper bounds for the system
69348 -limit parameters. The significance of these values is that you can
69349 -safely push to these limits without checking whether the particular
69350 -system you are using can go that far.
69352 -`_POSIX_AIO_LISTIO_MAX'
69353 - The most restrictive limit permitted by POSIX for the maximum
69354 - number of I/O operations that can be specified in a list I/O call.
69355 - The value of this constant is `2'; thus you can add up to two new
69356 - entries of the list of outstanding operations.
69358 -`_POSIX_AIO_MAX'
69359 - The most restrictive limit permitted by POSIX for the maximum
69360 - number of outstanding asynchronous I/O operations. The value of
69361 - this constant is `1'. So you cannot expect that you can issue
69362 - more than one operation and immediately continue with the normal
69363 - work, receiving the notifications asynchronously.
69365 -`_POSIX_ARG_MAX'
69366 - The value of this macro is the most restrictive limit permitted by
69367 - POSIX for the maximum combined length of the ARGV and ENVIRON
69368 - arguments that can be passed to the `exec' functions. Its value
69369 - is `4096'.
69371 -`_POSIX_CHILD_MAX'
69372 - The value of this macro is the most restrictive limit permitted by
69373 - POSIX for the maximum number of simultaneous processes per real
69374 - user ID. Its value is `6'.
69376 -`_POSIX_NGROUPS_MAX'
69377 - The value of this macro is the most restrictive limit permitted by
69378 - POSIX for the maximum number of supplementary group IDs per
69379 - process. Its value is `0'.
69381 -`_POSIX_OPEN_MAX'
69382 - The value of this macro is the most restrictive limit permitted by
69383 - POSIX for the maximum number of files that a single process can
69384 - have open simultaneously. Its value is `16'.
69386 -`_POSIX_SSIZE_MAX'
69387 - The value of this macro is the most restrictive limit permitted by
69388 - POSIX for the maximum value that can be stored in an object of type
69389 - `ssize_t'. Its value is `32767'.
69391 -`_POSIX_STREAM_MAX'
69392 - The value of this macro is the most restrictive limit permitted by
69393 - POSIX for the maximum number of streams that a single process can
69394 - have open simultaneously. Its value is `8'.
69396 -`_POSIX_TZNAME_MAX'
69397 - The value of this macro is the most restrictive limit permitted by
69398 - POSIX for the maximum length of a time zone name. Its value is
69399 - `3'.
69401 -`_POSIX2_RE_DUP_MAX'
69402 - The value of this macro is the most restrictive limit permitted by
69403 - POSIX for the numbers used in the `\{MIN,MAX\}' construct in a
69404 - regular expression. Its value is `255'.
69406 -\x1f
69407 -File: libc.info, Node: Limits for Files, Next: Options for Files, Prev: Minimums, Up: System Configuration
69409 -Limits on File System Capacity
69410 -==============================
69412 - The POSIX.1 standard specifies a number of parameters that describe
69413 -the limitations of the file system. It's possible for the system to
69414 -have a fixed, uniform limit for a parameter, but this isn't the usual
69415 -case. On most systems, it's possible for different file systems (and,
69416 -for some parameters, even different files) to have different maximum
69417 -limits. For example, this is very likely if you use NFS to mount some
69418 -of the file systems from other machines.
69420 - Each of the following macros is defined in `limits.h' only if the
69421 -system has a fixed, uniform limit for the parameter in question. If the
69422 -system allows different file systems or files to have different limits,
69423 -then the macro is undefined; use `pathconf' or `fpathconf' to find out
69424 -the limit that applies to a particular file. *Note Pathconf::.
69426 - Each parameter also has another macro, with a name starting with
69427 -`_POSIX', which gives the lowest value that the limit is allowed to
69428 -have on _any_ POSIX system. *Note File Minimums::.
69430 - - Macro: int LINK_MAX
69431 - The uniform system limit (if any) for the number of names for a
69432 - given file. *Note Hard Links::.
69434 - - Macro: int MAX_CANON
69435 - The uniform system limit (if any) for the amount of text in a line
69436 - of input when input editing is enabled. *Note Canonical or Not::.
69438 - - Macro: int MAX_INPUT
69439 - The uniform system limit (if any) for the total number of
69440 - characters typed ahead as input. *Note I/O Queues::.
69442 - - Macro: int NAME_MAX
69443 - The uniform system limit (if any) for the length of a file name
69444 - component.
69446 - - Macro: int PATH_MAX
69447 - The uniform system limit (if any) for the length of an entire file
69448 - name (that is, the argument given to system calls such as `open').
69450 - - Macro: int PIPE_BUF
69451 - The uniform system limit (if any) for the number of bytes that can
69452 - be written atomically to a pipe. If multiple processes are
69453 - writing to the same pipe simultaneously, output from different
69454 - processes might be interleaved in chunks of this size. *Note
69455 - Pipes and FIFOs::.
69457 - These are alternative macro names for some of the same information.
69459 - - Macro: int MAXNAMLEN
69460 - This is the BSD name for `NAME_MAX'. It is defined in `dirent.h'.
69462 - - Macro: int FILENAME_MAX
69463 - The value of this macro is an integer constant expression that
69464 - represents the maximum length of a file name string. It is
69465 - defined in `stdio.h'.
69467 - Unlike `PATH_MAX', this macro is defined even if there is no actual
69468 - limit imposed. In such a case, its value is typically a very large
69469 - number. *This is always the case on the GNU system.*
69471 - *Usage Note:* Don't use `FILENAME_MAX' as the size of an array in
69472 - which to store a file name! You can't possibly make an array that
69473 - big! Use dynamic allocation (*note Memory Allocation::) instead.
69475 -\x1f
69476 -File: libc.info, Node: Options for Files, Next: File Minimums, Prev: Limits for Files, Up: System Configuration
69478 -Optional Features in File Support
69479 -=================================
69481 - POSIX defines certain system-specific options in the system calls for
69482 -operating on files. Some systems support these options and others do
69483 -not. Since these options are provided in the kernel, not in the
69484 -library, simply using the GNU C library does not guarantee that any of
69485 -these features is supported; it depends on the system you are using.
69486 -They can also vary between file systems on a single machine.
69488 - This section describes the macros you can test to determine whether a
69489 -particular option is supported on your machine. If a given macro is
69490 -defined in `unistd.h', then its value says whether the corresponding
69491 -feature is supported. (A value of `-1' indicates no; any other value
69492 -indicates yes.) If the macro is undefined, it means particular files
69493 -may or may not support the feature.
69495 - Since all the machines that support the GNU C library also support
69496 -NFS, one can never make a general statement about whether all file
69497 -systems support the `_POSIX_CHOWN_RESTRICTED' and `_POSIX_NO_TRUNC'
69498 -features. So these names are never defined as macros in the GNU C
69499 -library.
69501 - - Macro: int _POSIX_CHOWN_RESTRICTED
69502 - If this option is in effect, the `chown' function is restricted so
69503 - that the only changes permitted to nonprivileged processes is to
69504 - change the group owner of a file to either be the effective group
69505 - ID of the process, or one of its supplementary group IDs. *Note
69506 - File Owner::.
69508 - - Macro: int _POSIX_NO_TRUNC
69509 - If this option is in effect, file name components longer than
69510 - `NAME_MAX' generate an `ENAMETOOLONG' error. Otherwise, file name
69511 - components that are too long are silently truncated.
69513 - - Macro: unsigned char _POSIX_VDISABLE
69514 - This option is only meaningful for files that are terminal devices.
69515 - If it is enabled, then handling for special control characters can
69516 - be disabled individually. *Note Special Characters::.
69518 - If one of these macros is undefined, that means that the option
69519 -might be in effect for some files and not for others. To inquire about
69520 -a particular file, call `pathconf' or `fpathconf'. *Note Pathconf::.
69522 -\x1f
69523 -File: libc.info, Node: File Minimums, Next: Pathconf, Prev: Options for Files, Up: System Configuration
69525 -Minimum Values for File System Limits
69526 -=====================================
69528 - Here are the names for the POSIX minimum upper bounds for some of the
69529 -above parameters. The significance of these values is that you can
69530 -safely push to these limits without checking whether the particular
69531 -system you are using can go that far. In most cases GNU systems do not
69532 -have these strict limitations. The actual limit should be requested if
69533 -necessary.
69535 -`_POSIX_LINK_MAX'
69536 - The most restrictive limit permitted by POSIX for the maximum
69537 - value of a file's link count. The value of this constant is `8';
69538 - thus, you can always make up to eight names for a file without
69539 - running into a system limit.
69541 -`_POSIX_MAX_CANON'
69542 - The most restrictive limit permitted by POSIX for the maximum
69543 - number of bytes in a canonical input line from a terminal device.
69544 - The value of this constant is `255'.
69546 -`_POSIX_MAX_INPUT'
69547 - The most restrictive limit permitted by POSIX for the maximum
69548 - number of bytes in a terminal device input queue (or typeahead
69549 - buffer). *Note Input Modes::. The value of this constant is
69550 - `255'.
69552 -`_POSIX_NAME_MAX'
69553 - The most restrictive limit permitted by POSIX for the maximum
69554 - number of bytes in a file name component. The value of this
69555 - constant is `14'.
69557 -`_POSIX_PATH_MAX'
69558 - The most restrictive limit permitted by POSIX for the maximum
69559 - number of bytes in a file name. The value of this constant is
69560 - `256'.
69562 -`_POSIX_PIPE_BUF'
69563 - The most restrictive limit permitted by POSIX for the maximum
69564 - number of bytes that can be written atomically to a pipe. The
69565 - value of this constant is `512'.
69567 -`SYMLINK_MAX'
69568 - Maximum number of bytes in a symbolic link.
69570 -`POSIX_REC_INCR_XFER_SIZE'
69571 - Recommended increment for file transfer sizes between the
69572 - `POSIX_REC_MIN_XFER_SIZE' and `POSIX_REC_MAX_XFER_SIZE' values.
69574 -`POSIX_REC_MAX_XFER_SIZE'
69575 - Maximum recommended file transfer size.
69577 -`POSIX_REC_MIN_XFER_SIZE'
69578 - Minimum recommended file transfer size.
69580 -`POSIX_REC_XFER_ALIGN'
69581 - Recommended file transfer buffer alignment.
69583 -\x1f
69584 -File: libc.info, Node: Pathconf, Next: Utility Limits, Prev: File Minimums, Up: System Configuration
69586 -Using `pathconf'
69587 -================
69589 - When your machine allows different files to have different values
69590 -for a file system parameter, you can use the functions in this section
69591 -to find out the value that applies to any particular file.
69593 - These functions and the associated constants for the PARAMETER
69594 -argument are declared in the header file `unistd.h'.
69596 - - Function: long int pathconf (const char *FILENAME, int PARAMETER)
69597 - This function is used to inquire about the limits that apply to
69598 - the file named FILENAME.
69600 - The PARAMETER argument should be one of the `_PC_' constants
69601 - listed below.
69603 - The normal return value from `pathconf' is the value you requested.
69604 - A value of `-1' is returned both if the implementation does not
69605 - impose a limit, and in case of an error. In the former case,
69606 - `errno' is not set, while in the latter case, `errno' is set to
69607 - indicate the cause of the problem. So the only way to use this
69608 - function robustly is to store `0' into `errno' just before calling
69609 - it.
69611 - Besides the usual file name errors (*note File Name Errors::), the
69612 - following error condition is defined for this function:
69614 - `EINVAL'
69615 - The value of PARAMETER is invalid, or the implementation
69616 - doesn't support the PARAMETER for the specific file.
69618 - - Function: long int fpathconf (int FILEDES, int PARAMETER)
69619 - This is just like `pathconf' except that an open file descriptor
69620 - is used to specify the file for which information is requested,
69621 - instead of a file name.
69623 - The following `errno' error conditions are defined for this
69624 - function:
69626 - `EBADF'
69627 - The FILEDES argument is not a valid file descriptor.
69629 - `EINVAL'
69630 - The value of PARAMETER is invalid, or the implementation
69631 - doesn't support the PARAMETER for the specific file.
69633 - Here are the symbolic constants that you can use as the PARAMETER
69634 -argument to `pathconf' and `fpathconf'. The values are all integer
69635 -constants.
69637 -`_PC_LINK_MAX'
69638 - Inquire about the value of `LINK_MAX'.
69640 -`_PC_MAX_CANON'
69641 - Inquire about the value of `MAX_CANON'.
69643 -`_PC_MAX_INPUT'
69644 - Inquire about the value of `MAX_INPUT'.
69646 -`_PC_NAME_MAX'
69647 - Inquire about the value of `NAME_MAX'.
69649 -`_PC_PATH_MAX'
69650 - Inquire about the value of `PATH_MAX'.
69652 -`_PC_PIPE_BUF'
69653 - Inquire about the value of `PIPE_BUF'.
69655 -`_PC_CHOWN_RESTRICTED'
69656 - Inquire about the value of `_POSIX_CHOWN_RESTRICTED'.
69658 -`_PC_NO_TRUNC'
69659 - Inquire about the value of `_POSIX_NO_TRUNC'.
69661 -`_PC_VDISABLE'
69662 - Inquire about the value of `_POSIX_VDISABLE'.
69664 -`_PC_SYNC_IO'
69665 - Inquire about the value of `_POSIX_SYNC_IO'.
69667 -`_PC_ASYNC_IO'
69668 - Inquire about the value of `_POSIX_ASYNC_IO'.
69670 -`_PC_PRIO_IO'
69671 - Inquire about the value of `_POSIX_PRIO_IO'.
69673 -`_PC_SOCK_MAXBUF'
69674 - Inquire about the value of `_POSIX_PIPE_BUF'.
69676 -`_PC_FILESIZEBITS'
69677 - Inquire about the availability of large files on the filesystem.
69679 -`_PC_REC_INCR_XFER_SIZE'
69680 - Inquire about the value of `POSIX_REC_INCR_XFER_SIZE'.
69682 -`_PC_REC_MAX_XFER_SIZE'
69683 - Inquire about the value of `POSIX_REC_MAX_XFER_SIZE'.
69685 -`_PC_REC_MIN_XFER_SIZE'
69686 - Inquire about the value of `POSIX_REC_MIN_XFER_SIZE'.
69688 -`_PC_REC_XFER_ALIGN'
69689 - Inquire about the value of `POSIX_REC_XFER_ALIGN'.
69691 -\x1f
69692 -File: libc.info, Node: Utility Limits, Next: Utility Minimums, Prev: Pathconf, Up: System Configuration
69694 -Utility Program Capacity Limits
69695 -===============================
69697 - The POSIX.2 standard specifies certain system limits that you can
69698 -access through `sysconf' that apply to utility behavior rather than the
69699 -behavior of the library or the operating system.
69701 - The GNU C library defines macros for these limits, and `sysconf'
69702 -returns values for them if you ask; but these values convey no
69703 -meaningful information. They are simply the smallest values that
69704 -POSIX.2 permits.
69706 - - Macro: int BC_BASE_MAX
69707 - The largest value of `obase' that the `bc' utility is guaranteed
69708 - to support.
69710 - - Macro: int BC_DIM_MAX
69711 - The largest number of elements in one array that the `bc' utility
69712 - is guaranteed to support.
69714 - - Macro: int BC_SCALE_MAX
69715 - The largest value of `scale' that the `bc' utility is guaranteed
69716 - to support.
69718 - - Macro: int BC_STRING_MAX
69719 - The largest number of characters in one string constant that the
69720 - `bc' utility is guaranteed to support.
69722 - - Macro: int COLL_WEIGHTS_MAX
69723 - The largest number of weights that can necessarily be used in
69724 - defining the collating sequence for a locale.
69726 - - Macro: int EXPR_NEST_MAX
69727 - The maximum number of expressions that can be nested within
69728 - parenthesis by the `expr' utility.
69730 - - Macro: int LINE_MAX
69731 - The largest text line that the text-oriented POSIX.2 utilities can
69732 - support. (If you are using the GNU versions of these utilities,
69733 - then there is no actual limit except that imposed by the available
69734 - virtual memory, but there is no way that the library can tell you
69735 - this.)
69737 - - Macro: int EQUIV_CLASS_MAX
69738 - The maximum number of weights that can be assigned to an entry of
69739 - the `LC_COLLATE' category `order' keyword in a locale definition.
69740 - The GNU C library does not presently support locale definitions.
69742 -\x1f
69743 -File: libc.info, Node: Utility Minimums, Next: String Parameters, Prev: Utility Limits, Up: System Configuration
69745 -Minimum Values for Utility Limits
69746 -=================================
69748 -`_POSIX2_BC_BASE_MAX'
69749 - The most restrictive limit permitted by POSIX.2 for the maximum
69750 - value of `obase' in the `bc' utility. Its value is `99'.
69752 -`_POSIX2_BC_DIM_MAX'
69753 - The most restrictive limit permitted by POSIX.2 for the maximum
69754 - size of an array in the `bc' utility. Its value is `2048'.
69756 -`_POSIX2_BC_SCALE_MAX'
69757 - The most restrictive limit permitted by POSIX.2 for the maximum
69758 - value of `scale' in the `bc' utility. Its value is `99'.
69760 -`_POSIX2_BC_STRING_MAX'
69761 - The most restrictive limit permitted by POSIX.2 for the maximum
69762 - size of a string constant in the `bc' utility. Its value is
69763 - `1000'.
69765 -`_POSIX2_COLL_WEIGHTS_MAX'
69766 - The most restrictive limit permitted by POSIX.2 for the maximum
69767 - number of weights that can necessarily be used in defining the
69768 - collating sequence for a locale. Its value is `2'.
69770 -`_POSIX2_EXPR_NEST_MAX'
69771 - The most restrictive limit permitted by POSIX.2 for the maximum
69772 - number of expressions nested within parenthesis when using the
69773 - `expr' utility. Its value is `32'.
69775 -`_POSIX2_LINE_MAX'
69776 - The most restrictive limit permitted by POSIX.2 for the maximum
69777 - size of a text line that the text utilities can handle. Its value
69778 - is `2048'.
69780 -`_POSIX2_EQUIV_CLASS_MAX'
69781 - The most restrictive limit permitted by POSIX.2 for the maximum
69782 - number of weights that can be assigned to an entry of the
69783 - `LC_COLLATE' category `order' keyword in a locale definition. Its
69784 - value is `2'. The GNU C library does not presently support locale
69785 - definitions.
69787 -\x1f
69788 -File: libc.info, Node: String Parameters, Prev: Utility Minimums, Up: System Configuration
69790 -String-Valued Parameters
69791 -========================
69793 - POSIX.2 defines a way to get string-valued parameters from the
69794 -operating system with the function `confstr':
69796 - - Function: size_t confstr (int PARAMETER, char *BUF, size_t LEN)
69797 - This function reads the value of a string-valued system parameter,
69798 - storing the string into LEN bytes of memory space starting at BUF.
69799 - The PARAMETER argument should be one of the `_CS_' symbols listed
69800 - below.
69802 - The normal return value from `confstr' is the length of the string
69803 - value that you asked for. If you supply a null pointer for BUF,
69804 - then `confstr' does not try to store the string; it just returns
69805 - its length. A value of `0' indicates an error.
69807 - If the string you asked for is too long for the buffer (that is,
69808 - longer than `LEN - 1'), then `confstr' stores just that much
69809 - (leaving room for the terminating null character). You can tell
69810 - that this has happened because `confstr' returns a value greater
69811 - than or equal to LEN.
69813 - The following `errno' error conditions are defined for this
69814 - function:
69816 - `EINVAL'
69817 - The value of the PARAMETER is invalid.
69819 - Currently there is just one parameter you can read with `confstr':
69821 -`_CS_PATH'
69822 - This parameter's value is the recommended default path for
69823 - searching for executable files. This is the path that a user has
69824 - by default just after logging in.
69826 -`_CS_LFS_CFLAGS'
69827 - The returned string specifies which additional flags must be given
69828 - to the C compiler if a source is compiled using the
69829 - `_LARGEFILE_SOURCE' feature select macro; *note Feature Test
69830 - Macros::.
69832 -`_CS_LFS_LDFLAGS'
69833 - The returned string specifies which additional flags must be given
69834 - to the linker if a source is compiled using the
69835 - `_LARGEFILE_SOURCE' feature select macro; *note Feature Test
69836 - Macros::.
69838 -`_CS_LFS_LIBS'
69839 - The returned string specifies which additional libraries must be
69840 - linked to the application if a source is compiled using the
69841 - `_LARGEFILE_SOURCE' feature select macro; *note Feature Test
69842 - Macros::.
69844 -`_CS_LFS_LINTFLAGS'
69845 - The returned string specifies which additional flags must be given
69846 - to the lint tool if a source is compiled using the
69847 - `_LARGEFILE_SOURCE' feature select macro; *note Feature Test
69848 - Macros::.
69850 -`_CS_LFS64_CFLAGS'
69851 - The returned string specifies which additional flags must be given
69852 - to the C compiler if a source is compiled using the
69853 - `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test
69854 - Macros::.
69856 -`_CS_LFS64_LDFLAGS'
69857 - The returned string specifies which additional flags must be given
69858 - to the linker if a source is compiled using the
69859 - `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test
69860 - Macros::.
69862 -`_CS_LFS64_LIBS'
69863 - The returned string specifies which additional libraries must be
69864 - linked to the application if a source is compiled using the
69865 - `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test
69866 - Macros::.
69868 -`_CS_LFS64_LINTFLAGS'
69869 - The returned string specifies which additional flags must be given
69870 - to the lint tool if a source is compiled using the
69871 - `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test
69872 - Macros::.
69874 - The way to use `confstr' without any arbitrary limit on string size
69875 -is to call it twice: first call it to get the length, allocate the
69876 -buffer accordingly, and then call `confstr' again to fill the buffer,
69877 -like this:
69879 - char *
69880 - get_default_path (void)
69882 - size_t len = confstr (_CS_PATH, NULL, 0);
69883 - char *buffer = (char *) xmalloc (len);
69885 - if (confstr (_CS_PATH, buf, len + 1) == 0)
69887 - free (buffer);
69888 - return NULL;
69891 - return buffer;
69894 -\x1f
69895 -File: libc.info, Node: Cryptographic Functions, Next: Debugging Support, Prev: System Configuration, Up: Top
69897 -DES Encryption and Password Handling
69898 -************************************
69900 - On many systems, it is unnecessary to have any kind of user
69901 -authentication; for instance, a workstation which is not connected to a
69902 -network probably does not need any user authentication, because to use
69903 -the machine an intruder must have physical access.
69905 - Sometimes, however, it is necessary to be sure that a user is
69906 -authorized to use some service a machine provides--for instance, to log
69907 -in as a particular user id (*note Users and Groups::). One traditional
69908 -way of doing this is for each user to choose a secret "password"; then,
69909 -the system can ask someone claiming to be a user what the user's
69910 -password is, and if the person gives the correct password then the
69911 -system can grant the appropriate privileges.
69913 - If all the passwords are just stored in a file somewhere, then this
69914 -file has to be very carefully protected. To avoid this, passwords are
69915 -run through a "one-way function", a function which makes it difficult to
69916 -work out what its input was by looking at its output, before storing in
69917 -the file.
69919 - The GNU C library provides a one-way function that is compatible with
69920 -the behavior of the `crypt' function introduced in FreeBSD 2.0. It
69921 -supports two one-way algorithms: one based on the MD5 message-digest
69922 -algorithm that is compatible with modern BSD systems, and the other
69923 -based on the Data Encryption Standard (DES) that is compatible with
69924 -Unix systems.
69926 - It also provides support for Secure RPC, and some library functions
69927 -that can be used to perform normal DES encryption.
69929 -* Menu:
69931 -* Legal Problems:: This software can get you locked up, or worse.
69932 -* getpass:: Prompting the user for a password.
69933 -* crypt:: A one-way function for passwords.
69934 -* DES Encryption:: Routines for DES encryption.
69936 -\x1f
69937 -File: libc.info, Node: Legal Problems, Next: getpass, Up: Cryptographic Functions
69939 -Legal Problems
69940 -==============
69942 - Because of the continuously changing state of the law, it's not
69943 -possible to provide a definitive survey of the laws affecting
69944 -cryptography. Instead, this section warns you of some of the known
69945 -trouble spots; this may help you when you try to find out what the laws
69946 -of your country are.
69948 - Some countries require that you have a licence to use, possess, or
69949 -import cryptography. These countries are believed to include
69950 -Byelorussia, Burma, India, Indonesia, Israel, Kazakhstan, Pakistan,
69951 -Russia, and Saudi Arabia.
69953 - Some countries restrict the transmission of encrypted messages by
69954 -radio; some telecommunications carriers restrict the transmission of
69955 -encrypted messages over their network.
69957 - Many countries have some form of export control for encryption
69958 -software. The Wassenaar Arrangement is a multilateral agreement
69959 -between 33 countries (Argentina, Australia, Austria, Belgium, Bulgaria,
69960 -Canada, the Czech Republic, Denmark, Finland, France, Germany, Greece,
69961 -Hungary, Ireland, Italy, Japan, Luxembourg, the Netherlands, New
69962 -Zealand, Norway, Poland, Portugal, the Republic of Korea, Romania, the
69963 -Russian Federation, the Slovak Republic, Spain, Sweden, Switzerland,
69964 -Turkey, Ukraine, the United Kingdom and the United States) which
69965 -restricts some kinds of encryption exports. Different countries apply
69966 -the arrangement in different ways; some do not allow the exception for
69967 -certain kinds of "public domain" software (which would include this
69968 -library), some only restrict the export of software in tangible form,
69969 -and others impose significant additional restrictions.
69971 - The United States has additional rules. This software would
69972 -generally be exportable under 15 CFR 740.13(e), which permits exports of
69973 -"encryption source code" which is "publicly available" and which is
69974 -"not subject to an express agreement for the payment of a licensing fee
69975 -or royalty for commercial production or sale of any product developed
69976 -with the source code" to most countries.
69978 - The rules in this area are continuously changing. If you know of any
69979 -information in this manual that is out-of-date, please report it using
69980 -the `glibcbug' script. *Note Reporting Bugs::.
69982 -\x1f
69983 -File: libc.info, Node: getpass, Next: crypt, Prev: Legal Problems, Up: Cryptographic Functions
69985 -Reading Passwords
69986 -=================
69988 - When reading in a password, it is desirable to avoid displaying it on
69989 -the screen, to help keep it secret. The following function handles this
69990 -in a convenient way.
69992 - - Function: char * getpass (const char *PROMPT)
69993 - `getpass' outputs PROMPT, then reads a string in from the terminal
69994 - without echoing it. It tries to connect to the real terminal,
69995 - `/dev/tty', if possible, to encourage users not to put plaintext
69996 - passwords in files; otherwise, it uses `stdin' and `stderr'.
69997 - `getpass' also disables the INTR, QUIT, and SUSP characters on the
69998 - terminal using the `ISIG' terminal attribute (*note Local Modes::).
69999 - The terminal is flushed before and after `getpass', so that
70000 - characters of a mistyped password are not accidentally visible.
70002 - In other C libraries, `getpass' may only return the first
70003 - `PASS_MAX' bytes of a password. The GNU C library has no limit, so
70004 - `PASS_MAX' is undefined.
70006 - The prototype for this function is in `unistd.h'. `PASS_MAX'
70007 - would be defined in `limits.h'.
70009 - This precise set of operations may not suit all possible situations.
70010 -In this case, it is recommended that users write their own `getpass'
70011 -substitute. For instance, a very simple substitute is as follows:
70013 - #include <termios.h>
70014 - #include <stdio.h>
70016 - ssize_t
70017 - my_getpass (char **lineptr, size_t *n, FILE *stream)
70019 - struct termios old, new;
70020 - int nread;
70022 - /* Turn echoing off and fail if we can't. */
70023 - if (tcgetattr (fileno (stream), &old) != 0)
70024 - return -1;
70025 - new = old;
70026 - new.c_lflag &= ~ECHO;
70027 - if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
70028 - return -1;
70030 - /* Read the password. */
70031 - nread = getline (lineptr, n, stream);
70033 - /* Restore terminal. */
70034 - (void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
70036 - return nread;
70039 - The substitute takes the same parameters as `getline' (*note Line
70040 -Input::); the user must print any prompt desired.
70042 -\x1f
70043 -File: libc.info, Node: crypt, Next: DES Encryption, Prev: getpass, Up: Cryptographic Functions
70045 -Encrypting Passwords
70046 -====================
70048 - - Function: char * crypt (const char *KEY, const char *SALT)
70049 - The `crypt' function takes a password, KEY, as a string, and a
70050 - SALT character array which is described below, and returns a
70051 - printable ASCII string which starts with another salt. It is
70052 - believed that, given the output of the function, the best way to
70053 - find a KEY that will produce that output is to guess values of KEY
70054 - until the original value of KEY is found.
70056 - The SALT parameter does two things. Firstly, it selects which
70057 - algorithm is used, the MD5-based one or the DES-based one.
70058 - Secondly, it makes life harder for someone trying to guess
70059 - passwords against a file containing many passwords; without a
70060 - SALT, an intruder can make a guess, run `crypt' on it once, and
70061 - compare the result with all the passwords. With a SALT, the
70062 - intruder must run `crypt' once for each different salt.
70064 - For the MD5-based algorithm, the SALT should consist of the string
70065 - `$1$', followed by up to 8 characters, terminated by either
70066 - another `$' or the end of the string. The result of `crypt' will
70067 - be the SALT, followed by a `$' if the salt didn't end with one,
70068 - followed by 22 characters from the alphabet `./0-9A-Za-z', up to
70069 - 34 characters total. Every character in the KEY is significant.
70071 - For the DES-based algorithm, the SALT should consist of two
70072 - characters from the alphabet `./0-9A-Za-z', and the result of
70073 - `crypt' will be those two characters followed by 11 more from the
70074 - same alphabet, 13 in total. Only the first 8 characters in the
70075 - KEY are significant.
70077 - The MD5-based algorithm has no limit on the useful length of the
70078 - password used, and is slightly more secure. It is therefore
70079 - preferred over the DES-based algorithm.
70081 - When the user enters their password for the first time, the SALT
70082 - should be set to a new string which is reasonably random. To
70083 - verify a password against the result of a previous call to
70084 - `crypt', pass the result of the previous call as the SALT.
70086 - The following short program is an example of how to use `crypt' the
70087 -first time a password is entered. Note that the SALT generation is
70088 -just barely acceptable; in particular, it is not unique between
70089 -machines, and in many applications it would not be acceptable to let an
70090 -attacker know what time the user's password was last set.
70092 - #include <stdio.h>
70093 - #include <time.h>
70094 - #include <unistd.h>
70095 - #include <crypt.h>
70097 - int
70098 - main(void)
70100 - unsigned long seed[2];
70101 - char salt[] = "$1$........";
70102 - const char *const seedchars =
70103 - "./0123456789ABCDEFGHIJKLMNOPQRST"
70104 - "UVWXYZabcdefghijklmnopqrstuvwxyz";
70105 - char *password;
70106 - int i;
70108 - /* Generate a (not very) random seed.
70109 - You should do it better than this... */
70110 - seed[0] = time(NULL);
70111 - seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);
70113 - /* Turn it into printable characters from `seedchars'. */
70114 - for (i = 0; i < 8; i++)
70115 - salt[3+i] = seedchars[(seed[i/5] >> (i%5)*6) & 0x3f];
70117 - /* Read in the user's password and encrypt it. */
70118 - password = crypt(getpass("Password:"), salt);
70120 - /* Print the results. */
70121 - puts(password);
70122 - return 0;
70125 - The next program shows how to verify a password. It prompts the user
70126 -for a password and prints "Access granted." if the user types `GNU libc
70127 -manual'.
70129 - #include <stdio.h>
70130 - #include <string.h>
70131 - #include <unistd.h>
70132 - #include <crypt.h>
70134 - int
70135 - main(void)
70137 - /* Hashed form of "GNU libc manual". */
70138 - const char *const pass = "$1$/iSaq7rB$EoUw5jJPPvAPECNaaWzMK/";
70140 - char *result;
70141 - int ok;
70143 - /* Read in the user's password and encrypt it,
70144 - passing the expected password in as the salt. */
70145 - result = crypt(getpass("Password:"), pass);
70147 - /* Test the result. */
70148 - ok = strcmp (result, pass) == 0;
70150 - puts(ok ? "Access granted." : "Access denied.");
70151 - return ok ? 0 : 1;
70154 - - Function: char * crypt_r (const char *KEY, const char *SALT, struct
70155 - crypt_data * DATA)
70156 - The `crypt_r' function does the same thing as `crypt', but takes
70157 - an extra parameter which includes space for its result (among
70158 - other things), so it can be reentrant. `data->initialized' must be
70159 - cleared to zero before the first time `crypt_r' is called.
70161 - The `crypt_r' function is a GNU extension.
70163 - The `crypt' and `crypt_r' functions are prototyped in the header
70164 -`crypt.h'.
70166 -\x1f
70167 -File: libc.info, Node: DES Encryption, Prev: crypt, Up: Cryptographic Functions
70169 -DES Encryption
70170 -==============
70172 - The Data Encryption Standard is described in the US Government
70173 -Federal Information Processing Standards (FIPS) 46-3 published by the
70174 -National Institute of Standards and Technology. The DES has been very
70175 -thoroughly analyzed since it was developed in the late 1970s, and no new
70176 -significant flaws have been found.
70178 - However, the DES uses only a 56-bit key (plus 8 parity bits), and a
70179 -machine has been built in 1998 which can search through all possible
70180 -keys in about 6 days, which cost about US$200000; faster searches would
70181 -be possible with more money. This makes simple DES insecure for most
70182 -purposes, and NIST no longer permits new US government systems to use
70183 -simple DES.
70185 - For serious encryption functionality, it is recommended that one of
70186 -the many free encryption libraries be used instead of these routines.
70188 - The DES is a reversible operation which takes a 64-bit block and a
70189 -64-bit key, and produces another 64-bit block. Usually the bits are
70190 -numbered so that the most-significant bit, the first bit, of each block
70191 -is numbered 1.
70193 - Under that numbering, every 8th bit of the key (the 8th, 16th, and so
70194 -on) is not used by the encryption algorithm itself. But the key must
70195 -have odd parity; that is, out of bits 1 through 8, and 9 through 16, and
70196 -so on, there must be an odd number of `1' bits, and this completely
70197 -specifies the unused bits.
70199 - - Function: void setkey (const char *KEY)
70200 - The `setkey' function sets an internal data structure to be an
70201 - expanded form of KEY. KEY is specified as an array of 64 bits
70202 - each stored in a `char', the first bit is `key[0]' and the 64th
70203 - bit is `key[63]'. The KEY should have the correct parity.
70205 - - Function: void encrypt (char *BLOCK, int EDFLAG)
70206 - The `encrypt' function encrypts BLOCK if EDFLAG is 0, otherwise it
70207 - decrypts BLOCK, using a key previously set by `setkey'. The
70208 - result is placed in BLOCK.
70210 - Like `setkey', BLOCK is specified as an array of 64 bits each
70211 - stored in a `char', but there are no parity bits in BLOCK.
70213 - - Function: void setkey_r (const char *KEY, struct crypt_data * DATA)
70214 - - Function: void encrypt_r (char *BLOCK, int EDFLAG, struct crypt_data
70215 - * DATA)
70216 - These are reentrant versions of `setkey' and `encrypt'. The only
70217 - difference is the extra parameter, which stores the expanded
70218 - version of KEY. Before calling `setkey_r' the first time,
70219 - `data->initialized' must be cleared to zero.
70221 - The `setkey_r' and `encrypt_r' functions are GNU extensions.
70222 -`setkey', `encrypt', `setkey_r', and `encrypt_r' are defined in
70223 -`crypt.h'.
70225 - - Function: int ecb_crypt (char *KEY, char *BLOCKS, unsigned LEN,
70226 - unsigned MODE)
70227 - The function `ecb_crypt' encrypts or decrypts one or more blocks
70228 - using DES. Each block is encrypted independently.
70230 - The BLOCKS and the KEY are stored packed in 8-bit bytes, so that
70231 - the first bit of the key is the most-significant bit of `key[0]'
70232 - and the 63rd bit of the key is stored as the least-significant bit
70233 - of `key[7]'. The KEY should have the correct parity.
70235 - LEN is the number of bytes in BLOCKS. It should be a multiple of
70236 - 8 (so that there is a whole number of blocks to encrypt). LEN is
70237 - limited to a maximum of `DES_MAXDATA' bytes.
70239 - The result of the encryption replaces the input in BLOCKS.
70241 - The MODE parameter is the bitwise OR of two of the following:
70243 - `DES_ENCRYPT'
70244 - This constant, used in the MODE parameter, specifies that
70245 - BLOCKS is to be encrypted.
70247 - `DES_DECRYPT'
70248 - This constant, used in the MODE parameter, specifies that
70249 - BLOCKS is to be decrypted.
70251 - `DES_HW'
70252 - This constant, used in the MODE parameter, asks to use a
70253 - hardware device. If no hardware device is available,
70254 - encryption happens anyway, but in software.
70256 - `DES_SW'
70257 - This constant, used in the MODE parameter, specifies that no
70258 - hardware device is to be used.
70260 - The result of the function will be one of these values:
70262 - `DESERR_NONE'
70263 - The encryption succeeded.
70265 - `DESERR_NOHWDEVICE'
70266 - The encryption succeeded, but there was no hardware device
70267 - available.
70269 - `DESERR_HWERROR'
70270 - The encryption failed because of a hardware problem.
70272 - `DESERR_BADPARAM'
70273 - The encryption failed because of a bad parameter, for
70274 - instance LEN is not a multiple of 8 or LEN is larger than
70275 - `DES_MAXDATA'.
70277 - - Function: int DES_FAILED (int ERR)
70278 - This macro returns 1 if ERR is a `success' result code from
70279 - `ecb_crypt' or `cbc_crypt', and 0 otherwise.
70281 - - Function: int cbc_crypt (char *KEY, char *BLOCKS, unsigned LEN,
70282 - unsigned MODE, char *IVEC)
70283 - The function `cbc_crypt' encrypts or decrypts one or more blocks
70284 - using DES in Cipher Block Chaining mode.
70286 - For encryption in CBC mode, each block is exclusive-ored with IVEC
70287 - before being encrypted, then IVEC is replaced with the result of
70288 - the encryption, then the next block is processed. Decryption is
70289 - the reverse of this process.
70291 - This has the advantage that blocks which are the same before being
70292 - encrypted are very unlikely to be the same after being encrypted,
70293 - making it much harder to detect patterns in the data.
70295 - Usually, IVEC is set to 8 random bytes before encryption starts.
70296 - Then the 8 random bytes are transmitted along with the encrypted
70297 - data (without themselves being encrypted), and passed back in as
70298 - IVEC for decryption. Another possibility is to set IVEC to 8
70299 - zeroes initially, and have the first the block encrypted consist
70300 - of 8 random bytes.
70302 - Otherwise, all the parameters are similar to those for `ecb_crypt'.
70304 - - Function: void des_setparity (char *KEY)
70305 - The function `des_setparity' changes the 64-bit KEY, stored packed
70306 - in 8-bit bytes, to have odd parity by altering the low bits of
70307 - each byte.
70309 - The `ecb_crypt', `cbc_crypt', and `des_setparity' functions and
70310 -their accompanying macros are all defined in the header
70311 -`rpc/des_crypt.h'.
70313 -\x1f
70314 -File: libc.info, Node: Debugging Support, Next: POSIX Threads, Prev: Cryptographic Functions, Up: Top
70316 -Debugging support
70317 -*****************
70319 - Applications are usually debugged using dedicated debugger programs.
70320 -But sometimes this is not possible and, in any case, it is useful to
70321 -provide the developer with as much information as possible at the time
70322 -the problems are experienced. For this reason a few functions are
70323 -provided which a program can use to help the developer more easily
70324 -locate the problem.
70326 -* Menu:
70328 -* Backtraces:: Obtaining and printing a back trace of the
70329 - current stack.
70331 -\x1f
70332 -File: libc.info, Node: Backtraces, Up: Debugging Support
70334 -Backtraces
70335 -==========
70337 - A "backtrace" is a list of the function calls that are currently
70338 -active in a thread. The usual way to inspect a backtrace of a program
70339 -is to use an external debugger such as gdb. However, sometimes it is
70340 -useful to obtain a backtrace programmatically from within a program,
70341 -e.g., for the purposes of logging or diagnostics.
70343 - The header file `execinfo.h' declares three functions that obtain
70344 -and manipulate backtraces of the current thread.
70346 - - Function: int backtrace (void **BUFFER, int SIZE)
70347 - The `backtrace' function obtains a backtrace for the current
70348 - thread, as a list of pointers, and places the information into
70349 - BUFFER. The argument SIZE should be the number of `void *'
70350 - elements that will fit into BUFFER. The return value is the
70351 - actual number of entries of BUFFER that are obtained, and is at
70352 - most SIZE.
70354 - The pointers placed in BUFFER are actually return addresses
70355 - obtained by inspecting the stack, one return address per stack
70356 - frame.
70358 - Note that certain compiler optimizations may interfere with
70359 - obtaining a valid backtrace. Function inlining causes the inlined
70360 - function to not have a stack frame; tail call optimization
70361 - replaces one stack frame with another; frame pointer elimination
70362 - will stop `backtrace' from interpreting the stack contents
70363 - correctly.
70365 - - Function: char ** backtrace_symbols (void *const *BUFFER, int SIZE)
70366 - The `backtrace_symbols' function translates the information
70367 - obtained from the `backtrace' function into an array of strings.
70368 - The argument BUFFER should be a pointer to an array of addresses
70369 - obtained via the `backtrace' function, and SIZE is the number of
70370 - entries in that array (the return value of `backtrace').
70372 - The return value is a pointer to an array of strings, which has
70373 - SIZE entries just like the array BUFFER. Each string contains a
70374 - printable representation of the corresponding element of BUFFER.
70375 - It includes the function name (if this can be determined), an
70376 - offset into the function, and the actual return address (in
70377 - hexadecimal).
70379 - Currently, the function name and offset only be obtained on
70380 - systems that use the ELF binary format for programs and libraries.
70381 - On other systems, only the hexadecimal return address will be
70382 - present. Also, you may need to pass additional flags to the
70383 - linker to make the function names available to the program. (For
70384 - example, on systems using GNU ld, you must pass (`-rdynamic'.)
70386 - The return value of `backtrace_symbols' is a pointer obtained via
70387 - the `malloc' function, and it is the responsibility of the caller
70388 - to `free' that pointer. Note that only the return value need be
70389 - freed, not the individual strings.
70391 - The return value is `NULL' if sufficient memory for the strings
70392 - cannot be obtained.
70394 - - Function: void backtrace_symbols_fd (void *const *BUFFER, int SIZE,
70395 - int FD)
70396 - The `backtrace_symbols_fd' function performs the same translation
70397 - as the function `backtrace_symbols' function. Instead of returning
70398 - the strings to the caller, it writes the strings to the file
70399 - descriptor FD, one per line. It does not use the `malloc'
70400 - function, and can therefore be used in situations where that
70401 - function might fail.
70403 - The following program illustrates the use of these functions. Note
70404 -that the array to contain the return addresses returned by `backtrace'
70405 -is allocated on the stack. Therefore code like this can be used in
70406 -situations where the memory handling via `malloc' does not work anymore
70407 -(in which case the `backtrace_symbols' has to be replaced by a
70408 -`backtrace_symbols_fd' call as well). The number of return addresses
70409 -is normally not very large. Even complicated programs rather seldom
70410 -have a nesting level of more than, say, 50 and with 200 possible
70411 -entries probably all programs should be covered.
70413 - #include <execinfo.h>
70414 - #include <stdio.h>
70415 - #include <stdlib.h>
70417 - /* Obtain a backtrace and print it to `stdout'. */
70418 - void
70419 - print_trace (void)
70421 - void *array[10];
70422 - size_t size;
70423 - char **strings;
70424 - size_t i;
70426 - size = backtrace (array, 10);
70427 - strings = backtrace_symbols (array, size);
70429 - printf ("Obtained %zd stack frames.\n", size);
70431 - for (i = 0; i < size; i++)
70432 - printf ("%s\n", strings[i]);
70434 - free (strings);
70437 - /* A dummy function to make the backtrace more interesting. */
70438 - void
70439 - dummy_function (void)
70441 - print_trace ();
70444 - int
70445 - main (void)
70447 - dummy_function ();
70448 - return 0;
70451 -\x1f
70452 -File: libc.info, Node: POSIX Threads, Next: Language Features, Prev: Debugging Support, Up: Top
70454 -POSIX Threads
70455 -*************
70457 - This chapter describes the pthreads (POSIX threads) library. This
70458 -library provides support functions for multithreaded programs: thread
70459 -primitives, synchronization objects, and so forth. It also implements
70460 -POSIX 1003.1b semaphores (not to be confused with System V semaphores).
70462 - The threads operations (`pthread_*') do not use ERRNO. Instead they
70463 -return an error code directly. The semaphore operations do use ERRNO.
70465 -* Menu:
70467 -* Basic Thread Operations:: Creating, terminating, and waiting for threads.
70468 -* Thread Attributes:: Tuning thread scheduling.
70469 -* Cancellation:: Stopping a thread before it's done.
70470 -* Cleanup Handlers:: Deallocating resources when a thread is
70471 - canceled.
70472 -* Mutexes:: One way to synchronize threads.
70473 -* Condition Variables:: Another way.
70474 -* POSIX Semaphores:: And a third way.
70475 -* Thread-Specific Data:: Variables with different values in
70476 - different threads.
70477 -* Threads and Signal Handling:: Why you should avoid mixing the two, and
70478 - how to do it if you must.
70479 -* Threads and Fork:: Interactions between threads and the
70480 - `fork' function.
70481 -* Streams and Fork:: Interactions between stdio streams and
70482 - `fork'.
70483 -* Miscellaneous Thread Functions:: A grab bag of utility routines.
70485 diff -u -udbrN glibc-2.3.2/manual/libc.info-5 glibc-2.3.2-200304020432/manual/libc.info-5
70486 --- glibc-2.3.2/manual/libc.info-5 Sat Mar 1 02:39:41 2003
70487 +++ glibc-2.3.2-200304020432/manual/libc.info-5 Thu Jan 1 01:00:00 1970
70488 @@ -1,1081 +0,0 @@
70489 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
70491 -INFO-DIR-SECTION GNU libraries
70492 -START-INFO-DIR-ENTRY
70493 -* Libc: (libc). C library.
70494 -END-INFO-DIR-ENTRY
70496 - This file documents the GNU C library.
70498 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
70499 -Reference Manual', for Version 2.3.x.
70501 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
70502 -Free Software Foundation, Inc.
70504 - Permission is granted to copy, distribute and/or modify this document
70505 -under the terms of the GNU Free Documentation License, Version 1.1 or
70506 -any later version published by the Free Software Foundation; with the
70507 -Invariant Sections being "Free Software Needs Free Documentation" and
70508 -"GNU Lesser General Public License", the Front-Cover texts being (a)
70509 -(see below), and with the Back-Cover Texts being (b) (see below). A
70510 -copy of the license is included in the section entitled "GNU Free
70511 -Documentation License".
70513 - (a) The FSF's Front-Cover Text is:
70515 - A GNU Manual
70517 - (b) The FSF's Back-Cover Text is:
70519 - You have freedom to copy and modify this GNU Manual, like GNU
70520 -software. Copies published by the Free Software Foundation raise
70521 -funds for GNU development.
70523 -\x1f
70524 -File: libc.info, Node: Growing Objects, Next: Extra Fast Growing, Prev: Obstack Functions, Up: Obstacks
70526 -Growing Objects
70527 -...............
70529 - Because memory in obstack chunks is used sequentially, it is
70530 -possible to build up an object step by step, adding one or more bytes
70531 -at a time to the end of the object. With this technique, you do not
70532 -need to know how much data you will put in the object until you come to
70533 -the end of it. We call this the technique of "growing objects". The
70534 -special functions for adding data to the growing object are described
70535 -in this section.
70537 - You don't need to do anything special when you start to grow an
70538 -object. Using one of the functions to add data to the object
70539 -automatically starts it. However, it is necessary to say explicitly
70540 -when the object is finished. This is done with the function
70541 -`obstack_finish'.
70543 - The actual address of the object thus built up is not known until the
70544 -object is finished. Until then, it always remains possible that you
70545 -will add so much data that the object must be copied into a new chunk.
70547 - While the obstack is in use for a growing object, you cannot use it
70548 -for ordinary allocation of another object. If you try to do so, the
70549 -space already added to the growing object will become part of the other
70550 -object.
70552 - - Function: void obstack_blank (struct obstack *OBSTACK-PTR, int SIZE)
70553 - The most basic function for adding to a growing object is
70554 - `obstack_blank', which adds space without initializing it.
70556 - - Function: void obstack_grow (struct obstack *OBSTACK-PTR, void
70557 - *DATA, int SIZE)
70558 - To add a block of initialized space, use `obstack_grow', which is
70559 - the growing-object analogue of `obstack_copy'. It adds SIZE bytes
70560 - of data to the growing object, copying the contents from DATA.
70562 - - Function: void obstack_grow0 (struct obstack *OBSTACK-PTR, void
70563 - *DATA, int SIZE)
70564 - This is the growing-object analogue of `obstack_copy0'. It adds
70565 - SIZE bytes copied from DATA, followed by an additional null
70566 - character.
70568 - - Function: void obstack_1grow (struct obstack *OBSTACK-PTR, char C)
70569 - To add one character at a time, use the function `obstack_1grow'.
70570 - It adds a single byte containing C to the growing object.
70572 - - Function: void obstack_ptr_grow (struct obstack *OBSTACK-PTR, void
70573 - *DATA)
70574 - Adding the value of a pointer one can use the function
70575 - `obstack_ptr_grow'. It adds `sizeof (void *)' bytes containing
70576 - the value of DATA.
70578 - - Function: void obstack_int_grow (struct obstack *OBSTACK-PTR, int
70579 - DATA)
70580 - A single value of type `int' can be added by using the
70581 - `obstack_int_grow' function. It adds `sizeof (int)' bytes to the
70582 - growing object and initializes them with the value of DATA.
70584 - - Function: void * obstack_finish (struct obstack *OBSTACK-PTR)
70585 - When you are finished growing the object, use the function
70586 - `obstack_finish' to close it off and return its final address.
70588 - Once you have finished the object, the obstack is available for
70589 - ordinary allocation or for growing another object.
70591 - This function can return a null pointer under the same conditions
70592 - as `obstack_alloc' (*note Allocation in an Obstack::).
70594 - When you build an object by growing it, you will probably need to
70595 -know afterward how long it became. You need not keep track of this as
70596 -you grow the object, because you can find out the length from the
70597 -obstack just before finishing the object with the function
70598 -`obstack_object_size', declared as follows:
70600 - - Function: int obstack_object_size (struct obstack *OBSTACK-PTR)
70601 - This function returns the current size of the growing object, in
70602 - bytes. Remember to call this function _before_ finishing the
70603 - object. After it is finished, `obstack_object_size' will return
70604 - zero.
70606 - If you have started growing an object and wish to cancel it, you
70607 -should finish it and then free it, like this:
70609 - obstack_free (obstack_ptr, obstack_finish (obstack_ptr));
70611 -This has no effect if no object was growing.
70613 - You can use `obstack_blank' with a negative size argument to make
70614 -the current object smaller. Just don't try to shrink it beyond zero
70615 -length--there's no telling what will happen if you do that.
70617 -\x1f
70618 -File: libc.info, Node: Extra Fast Growing, Next: Status of an Obstack, Prev: Growing Objects, Up: Obstacks
70620 -Extra Fast Growing Objects
70621 -..........................
70623 - The usual functions for growing objects incur overhead for checking
70624 -whether there is room for the new growth in the current chunk. If you
70625 -are frequently constructing objects in small steps of growth, this
70626 -overhead can be significant.
70628 - You can reduce the overhead by using special "fast growth" functions
70629 -that grow the object without checking. In order to have a robust
70630 -program, you must do the checking yourself. If you do this checking in
70631 -the simplest way each time you are about to add data to the object, you
70632 -have not saved anything, because that is what the ordinary growth
70633 -functions do. But if you can arrange to check less often, or check
70634 -more efficiently, then you make the program faster.
70636 - The function `obstack_room' returns the amount of room available in
70637 -the current chunk. It is declared as follows:
70639 - - Function: int obstack_room (struct obstack *OBSTACK-PTR)
70640 - This returns the number of bytes that can be added safely to the
70641 - current growing object (or to an object about to be started) in
70642 - obstack OBSTACK using the fast growth functions.
70644 - While you know there is room, you can use these fast growth functions
70645 -for adding data to a growing object:
70647 - - Function: void obstack_1grow_fast (struct obstack *OBSTACK-PTR, char
70648 - C)
70649 - The function `obstack_1grow_fast' adds one byte containing the
70650 - character C to the growing object in obstack OBSTACK-PTR.
70652 - - Function: void obstack_ptr_grow_fast (struct obstack *OBSTACK-PTR,
70653 - void *DATA)
70654 - The function `obstack_ptr_grow_fast' adds `sizeof (void *)' bytes
70655 - containing the value of DATA to the growing object in obstack
70656 - OBSTACK-PTR.
70658 - - Function: void obstack_int_grow_fast (struct obstack *OBSTACK-PTR,
70659 - int DATA)
70660 - The function `obstack_int_grow_fast' adds `sizeof (int)' bytes
70661 - containing the value of DATA to the growing object in obstack
70662 - OBSTACK-PTR.
70664 - - Function: void obstack_blank_fast (struct obstack *OBSTACK-PTR, int
70665 - SIZE)
70666 - The function `obstack_blank_fast' adds SIZE bytes to the growing
70667 - object in obstack OBSTACK-PTR without initializing them.
70669 - When you check for space using `obstack_room' and there is not
70670 -enough room for what you want to add, the fast growth functions are not
70671 -safe. In this case, simply use the corresponding ordinary growth
70672 -function instead. Very soon this will copy the object to a new chunk;
70673 -then there will be lots of room available again.
70675 - So, each time you use an ordinary growth function, check afterward
70676 -for sufficient space using `obstack_room'. Once the object is copied
70677 -to a new chunk, there will be plenty of space again, so the program will
70678 -start using the fast growth functions again.
70680 - Here is an example:
70682 - void
70683 - add_string (struct obstack *obstack, const char *ptr, int len)
70685 - while (len > 0)
70687 - int room = obstack_room (obstack);
70688 - if (room == 0)
70690 - /* Not enough room. Add one character slowly,
70691 - which may copy to a new chunk and make room. */
70692 - obstack_1grow (obstack, *ptr++);
70693 - len--;
70695 - else
70697 - if (room > len)
70698 - room = len;
70699 - /* Add fast as much as we have room for. */
70700 - len -= room;
70701 - while (room-- > 0)
70702 - obstack_1grow_fast (obstack, *ptr++);
70707 -\x1f
70708 -File: libc.info, Node: Status of an Obstack, Next: Obstacks Data Alignment, Prev: Extra Fast Growing, Up: Obstacks
70710 -Status of an Obstack
70711 -....................
70713 - Here are functions that provide information on the current status of
70714 -allocation in an obstack. You can use them to learn about an object
70715 -while still growing it.
70717 - - Function: void * obstack_base (struct obstack *OBSTACK-PTR)
70718 - This function returns the tentative address of the beginning of the
70719 - currently growing object in OBSTACK-PTR. If you finish the object
70720 - immediately, it will have that address. If you make it larger
70721 - first, it may outgrow the current chunk--then its address will
70722 - change!
70724 - If no object is growing, this value says where the next object you
70725 - allocate will start (once again assuming it fits in the current
70726 - chunk).
70728 - - Function: void * obstack_next_free (struct obstack *OBSTACK-PTR)
70729 - This function returns the address of the first free byte in the
70730 - current chunk of obstack OBSTACK-PTR. This is the end of the
70731 - currently growing object. If no object is growing,
70732 - `obstack_next_free' returns the same value as `obstack_base'.
70734 - - Function: int obstack_object_size (struct obstack *OBSTACK-PTR)
70735 - This function returns the size in bytes of the currently growing
70736 - object. This is equivalent to
70738 - obstack_next_free (OBSTACK-PTR) - obstack_base (OBSTACK-PTR)
70740 -\x1f
70741 -File: libc.info, Node: Obstacks Data Alignment, Next: Obstack Chunks, Prev: Status of an Obstack, Up: Obstacks
70743 -Alignment of Data in Obstacks
70744 -.............................
70746 - Each obstack has an "alignment boundary"; each object allocated in
70747 -the obstack automatically starts on an address that is a multiple of the
70748 -specified boundary. By default, this boundary is 4 bytes.
70750 - To access an obstack's alignment boundary, use the macro
70751 -`obstack_alignment_mask', whose function prototype looks like this:
70753 - - Macro: int obstack_alignment_mask (struct obstack *OBSTACK-PTR)
70754 - The value is a bit mask; a bit that is 1 indicates that the
70755 - corresponding bit in the address of an object should be 0. The
70756 - mask value should be one less than a power of 2; the effect is
70757 - that all object addresses are multiples of that power of 2. The
70758 - default value of the mask is 3, so that addresses are multiples of
70759 - 4. A mask value of 0 means an object can start on any multiple of
70760 - 1 (that is, no alignment is required).
70762 - The expansion of the macro `obstack_alignment_mask' is an lvalue,
70763 - so you can alter the mask by assignment. For example, this
70764 - statement:
70766 - obstack_alignment_mask (obstack_ptr) = 0;
70768 - has the effect of turning off alignment processing in the
70769 - specified obstack.
70771 - Note that a change in alignment mask does not take effect until
70772 -_after_ the next time an object is allocated or finished in the
70773 -obstack. If you are not growing an object, you can make the new
70774 -alignment mask take effect immediately by calling `obstack_finish'.
70775 -This will finish a zero-length object and then do proper alignment for
70776 -the next object.
70778 -\x1f
70779 -File: libc.info, Node: Obstack Chunks, Next: Summary of Obstacks, Prev: Obstacks Data Alignment, Up: Obstacks
70781 -Obstack Chunks
70782 -..............
70784 - Obstacks work by allocating space for themselves in large chunks, and
70785 -then parceling out space in the chunks to satisfy your requests. Chunks
70786 -are normally 4096 bytes long unless you specify a different chunk size.
70787 -The chunk size includes 8 bytes of overhead that are not actually used
70788 -for storing objects. Regardless of the specified size, longer chunks
70789 -will be allocated when necessary for long objects.
70791 - The obstack library allocates chunks by calling the function
70792 -`obstack_chunk_alloc', which you must define. When a chunk is no
70793 -longer needed because you have freed all the objects in it, the obstack
70794 -library frees the chunk by calling `obstack_chunk_free', which you must
70795 -also define.
70797 - These two must be defined (as macros) or declared (as functions) in
70798 -each source file that uses `obstack_init' (*note Creating Obstacks::).
70799 -Most often they are defined as macros like this:
70801 - #define obstack_chunk_alloc malloc
70802 - #define obstack_chunk_free free
70804 - Note that these are simple macros (no arguments). Macro definitions
70805 -with arguments will not work! It is necessary that
70806 -`obstack_chunk_alloc' or `obstack_chunk_free', alone, expand into a
70807 -function name if it is not itself a function name.
70809 - If you allocate chunks with `malloc', the chunk size should be a
70810 -power of 2. The default chunk size, 4096, was chosen because it is long
70811 -enough to satisfy many typical requests on the obstack yet short enough
70812 -not to waste too much memory in the portion of the last chunk not yet
70813 -used.
70815 - - Macro: int obstack_chunk_size (struct obstack *OBSTACK-PTR)
70816 - This returns the chunk size of the given obstack.
70818 - Since this macro expands to an lvalue, you can specify a new chunk
70819 -size by assigning it a new value. Doing so does not affect the chunks
70820 -already allocated, but will change the size of chunks allocated for
70821 -that particular obstack in the future. It is unlikely to be useful to
70822 -make the chunk size smaller, but making it larger might improve
70823 -efficiency if you are allocating many objects whose size is comparable
70824 -to the chunk size. Here is how to do so cleanly:
70826 - if (obstack_chunk_size (obstack_ptr) < NEW-CHUNK-SIZE)
70827 - obstack_chunk_size (obstack_ptr) = NEW-CHUNK-SIZE;
70829 -\x1f
70830 -File: libc.info, Node: Summary of Obstacks, Prev: Obstack Chunks, Up: Obstacks
70832 -Summary of Obstack Functions
70833 -............................
70835 - Here is a summary of all the functions associated with obstacks.
70836 -Each takes the address of an obstack (`struct obstack *') as its first
70837 -argument.
70839 -`void obstack_init (struct obstack *OBSTACK-PTR)'
70840 - Initialize use of an obstack. *Note Creating Obstacks::.
70842 -`void *obstack_alloc (struct obstack *OBSTACK-PTR, int SIZE)'
70843 - Allocate an object of SIZE uninitialized bytes. *Note Allocation
70844 - in an Obstack::.
70846 -`void *obstack_copy (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)'
70847 - Allocate an object of SIZE bytes, with contents copied from
70848 - ADDRESS. *Note Allocation in an Obstack::.
70850 -`void *obstack_copy0 (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)'
70851 - Allocate an object of SIZE+1 bytes, with SIZE of them copied from
70852 - ADDRESS, followed by a null character at the end. *Note
70853 - Allocation in an Obstack::.
70855 -`void obstack_free (struct obstack *OBSTACK-PTR, void *OBJECT)'
70856 - Free OBJECT (and everything allocated in the specified obstack
70857 - more recently than OBJECT). *Note Freeing Obstack Objects::.
70859 -`void obstack_blank (struct obstack *OBSTACK-PTR, int SIZE)'
70860 - Add SIZE uninitialized bytes to a growing object. *Note Growing
70861 - Objects::.
70863 -`void obstack_grow (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)'
70864 - Add SIZE bytes, copied from ADDRESS, to a growing object. *Note
70865 - Growing Objects::.
70867 -`void obstack_grow0 (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)'
70868 - Add SIZE bytes, copied from ADDRESS, to a growing object, and then
70869 - add another byte containing a null character. *Note Growing
70870 - Objects::.
70872 -`void obstack_1grow (struct obstack *OBSTACK-PTR, char DATA-CHAR)'
70873 - Add one byte containing DATA-CHAR to a growing object. *Note
70874 - Growing Objects::.
70876 -`void *obstack_finish (struct obstack *OBSTACK-PTR)'
70877 - Finalize the object that is growing and return its permanent
70878 - address. *Note Growing Objects::.
70880 -`int obstack_object_size (struct obstack *OBSTACK-PTR)'
70881 - Get the current size of the currently growing object. *Note
70882 - Growing Objects::.
70884 -`void obstack_blank_fast (struct obstack *OBSTACK-PTR, int SIZE)'
70885 - Add SIZE uninitialized bytes to a growing object without checking
70886 - that there is enough room. *Note Extra Fast Growing::.
70888 -`void obstack_1grow_fast (struct obstack *OBSTACK-PTR, char DATA-CHAR)'
70889 - Add one byte containing DATA-CHAR to a growing object without
70890 - checking that there is enough room. *Note Extra Fast Growing::.
70892 -`int obstack_room (struct obstack *OBSTACK-PTR)'
70893 - Get the amount of room now available for growing the current
70894 - object. *Note Extra Fast Growing::.
70896 -`int obstack_alignment_mask (struct obstack *OBSTACK-PTR)'
70897 - The mask used for aligning the beginning of an object. This is an
70898 - lvalue. *Note Obstacks Data Alignment::.
70900 -`int obstack_chunk_size (struct obstack *OBSTACK-PTR)'
70901 - The size for allocating chunks. This is an lvalue. *Note Obstack
70902 - Chunks::.
70904 -`void *obstack_base (struct obstack *OBSTACK-PTR)'
70905 - Tentative starting address of the currently growing object. *Note
70906 - Status of an Obstack::.
70908 -`void *obstack_next_free (struct obstack *OBSTACK-PTR)'
70909 - Address just after the end of the currently growing object. *Note
70910 - Status of an Obstack::.
70912 -\x1f
70913 -File: libc.info, Node: Variable Size Automatic, Prev: Obstacks, Up: Memory Allocation
70915 -Automatic Storage with Variable Size
70916 -------------------------------------
70918 - The function `alloca' supports a kind of half-dynamic allocation in
70919 -which blocks are allocated dynamically but freed automatically.
70921 - Allocating a block with `alloca' is an explicit action; you can
70922 -allocate as many blocks as you wish, and compute the size at run time.
70923 -But all the blocks are freed when you exit the function that `alloca'
70924 -was called from, just as if they were automatic variables declared in
70925 -that function. There is no way to free the space explicitly.
70927 - The prototype for `alloca' is in `stdlib.h'. This function is a BSD
70928 -extension.
70930 - - Function: void * alloca (size_t SIZE);
70931 - The return value of `alloca' is the address of a block of SIZE
70932 - bytes of memory, allocated in the stack frame of the calling
70933 - function.
70935 - Do not use `alloca' inside the arguments of a function call--you
70936 -will get unpredictable results, because the stack space for the
70937 -`alloca' would appear on the stack in the middle of the space for the
70938 -function arguments. An example of what to avoid is `foo (x, alloca
70939 -(4), y)'.
70941 -* Menu:
70943 -* Alloca Example:: Example of using `alloca'.
70944 -* Advantages of Alloca:: Reasons to use `alloca'.
70945 -* Disadvantages of Alloca:: Reasons to avoid `alloca'.
70946 -* GNU C Variable-Size Arrays:: Only in GNU C, here is an alternative
70947 - method of allocating dynamically and
70948 - freeing automatically.
70950 -\x1f
70951 -File: libc.info, Node: Alloca Example, Next: Advantages of Alloca, Up: Variable Size Automatic
70953 -`alloca' Example
70954 -................
70956 - As an example of the use of `alloca', here is a function that opens
70957 -a file name made from concatenating two argument strings, and returns a
70958 -file descriptor or minus one signifying failure:
70960 - int
70961 - open2 (char *str1, char *str2, int flags, int mode)
70963 - char *name = (char *) alloca (strlen (str1) + strlen (str2) + 1);
70964 - stpcpy (stpcpy (name, str1), str2);
70965 - return open (name, flags, mode);
70968 -Here is how you would get the same results with `malloc' and `free':
70970 - int
70971 - open2 (char *str1, char *str2, int flags, int mode)
70973 - char *name = (char *) malloc (strlen (str1) + strlen (str2) + 1);
70974 - int desc;
70975 - if (name == 0)
70976 - fatal ("virtual memory exceeded");
70977 - stpcpy (stpcpy (name, str1), str2);
70978 - desc = open (name, flags, mode);
70979 - free (name);
70980 - return desc;
70983 - As you can see, it is simpler with `alloca'. But `alloca' has
70984 -other, more important advantages, and some disadvantages.
70986 -\x1f
70987 -File: libc.info, Node: Advantages of Alloca, Next: Disadvantages of Alloca, Prev: Alloca Example, Up: Variable Size Automatic
70989 -Advantages of `alloca'
70990 -......................
70992 - Here are the reasons why `alloca' may be preferable to `malloc':
70994 - * Using `alloca' wastes very little space and is very fast. (It is
70995 - open-coded by the GNU C compiler.)
70997 - * Since `alloca' does not have separate pools for different sizes of
70998 - block, space used for any size block can be reused for any other
70999 - size. `alloca' does not cause memory fragmentation.
71001 - * Nonlocal exits done with `longjmp' (*note Non-Local Exits::)
71002 - automatically free the space allocated with `alloca' when they exit
71003 - through the function that called `alloca'. This is the most
71004 - important reason to use `alloca'.
71006 - To illustrate this, suppose you have a function
71007 - `open_or_report_error' which returns a descriptor, like `open', if
71008 - it succeeds, but does not return to its caller if it fails. If
71009 - the file cannot be opened, it prints an error message and jumps
71010 - out to the command level of your program using `longjmp'. Let's
71011 - change `open2' (*note Alloca Example::) to use this subroutine:
71013 - int
71014 - open2 (char *str1, char *str2, int flags, int mode)
71016 - char *name = (char *) alloca (strlen (str1) + strlen (str2) + 1);
71017 - stpcpy (stpcpy (name, str1), str2);
71018 - return open_or_report_error (name, flags, mode);
71021 - Because of the way `alloca' works, the memory it allocates is
71022 - freed even when an error occurs, with no special effort required.
71024 - By contrast, the previous definition of `open2' (which uses
71025 - `malloc' and `free') would develop a memory leak if it were
71026 - changed in this way. Even if you are willing to make more changes
71027 - to fix it, there is no easy way to do so.
71029 -\x1f
71030 -File: libc.info, Node: Disadvantages of Alloca, Next: GNU C Variable-Size Arrays, Prev: Advantages of Alloca, Up: Variable Size Automatic
71032 -Disadvantages of `alloca'
71033 -.........................
71035 - These are the disadvantages of `alloca' in comparison with `malloc':
71037 - * If you try to allocate more memory than the machine can provide,
71038 - you don't get a clean error message. Instead you get a fatal
71039 - signal like the one you would get from an infinite recursion;
71040 - probably a segmentation violation (*note Program Error Signals::).
71042 - * Some non-GNU systems fail to support `alloca', so it is less
71043 - portable. However, a slower emulation of `alloca' written in C is
71044 - available for use on systems with this deficiency.
71046 -\x1f
71047 -File: libc.info, Node: GNU C Variable-Size Arrays, Prev: Disadvantages of Alloca, Up: Variable Size Automatic
71049 -GNU C Variable-Size Arrays
71050 -..........................
71052 - In GNU C, you can replace most uses of `alloca' with an array of
71053 -variable size. Here is how `open2' would look then:
71055 - int open2 (char *str1, char *str2, int flags, int mode)
71057 - char name[strlen (str1) + strlen (str2) + 1];
71058 - stpcpy (stpcpy (name, str1), str2);
71059 - return open (name, flags, mode);
71062 - But `alloca' is not always equivalent to a variable-sized array, for
71063 -several reasons:
71065 - * A variable size array's space is freed at the end of the scope of
71066 - the name of the array. The space allocated with `alloca' remains
71067 - until the end of the function.
71069 - * It is possible to use `alloca' within a loop, allocating an
71070 - additional block on each iteration. This is impossible with
71071 - variable-sized arrays.
71073 - *Note:* If you mix use of `alloca' and variable-sized arrays within
71074 -one function, exiting a scope in which a variable-sized array was
71075 -declared frees all blocks allocated with `alloca' during the execution
71076 -of that scope.
71078 -\x1f
71079 -File: libc.info, Node: Resizing the Data Segment, Prev: Locking Pages, Up: Memory
71081 -Resizing the Data Segment
71082 -=========================
71084 - The symbols in this section are declared in `unistd.h'.
71086 - You will not normally use the functions in this section, because the
71087 -functions described in *Note Memory Allocation:: are easier to use.
71088 -Those are interfaces to a GNU C Library memory allocator that uses the
71089 -functions below itself. The functions below are simple interfaces to
71090 -system calls.
71092 - - Function: int brk (void *ADDR)
71093 - `brk' sets the high end of the calling process' data segment to
71094 - ADDR.
71096 - The address of the end of a segment is defined to be the address
71097 - of the last byte in the segment plus 1.
71099 - The function has no effect if ADDR is lower than the low end of
71100 - the data segment. (This is considered success, by the way).
71102 - The function fails if it would cause the data segment to overlap
71103 - another segment or exceed the process' data storage limit (*note
71104 - Limits on Resources::).
71106 - The function is named for a common historical case where data
71107 - storage and the stack are in the same segment. Data storage
71108 - allocation grows upward from the bottom of the segment while the
71109 - stack grows downward toward it from the top of the segment and the
71110 - curtain between them is called the "break".
71112 - The return value is zero on success. On failure, the return value
71113 - is `-1' and `errno' is set accordingly. The following `errno'
71114 - values are specific to this function:
71116 - `ENOMEM'
71117 - The request would cause the data segment to overlap another
71118 - segment or exceed the process' data storage limit.
71121 - - Function: int sbrk (ptrdiff_t DELTA)
71122 - This function is the same as `brk' except that you specify the new
71123 - end of the data segment as an offset DELTA from the current end
71124 - and on success the return value is the address of the resulting
71125 - end of the data segment instead of zero.
71127 - This means you can use `sbrk(0)' to find out what the current end
71128 - of the data segment is.
71131 -\x1f
71132 -File: libc.info, Node: Locking Pages, Next: Resizing the Data Segment, Prev: Memory Allocation, Up: Memory
71134 -Locking Pages
71135 -=============
71137 - You can tell the system to associate a particular virtual memory page
71138 -with a real page frame and keep it that way -- i.e. cause the page to
71139 -be paged in if it isn't already and mark it so it will never be paged
71140 -out and consequently will never cause a page fault. This is called
71141 -"locking" a page.
71143 - The functions in this chapter lock and unlock the calling process'
71144 -pages.
71146 -* Menu:
71148 -* Why Lock Pages:: Reasons to read this section.
71149 -* Locked Memory Details:: Everything you need to know locked
71150 - memory
71151 -* Page Lock Functions:: Here's how to do it.
71153 -\x1f
71154 -File: libc.info, Node: Why Lock Pages, Next: Locked Memory Details, Up: Locking Pages
71156 -Why Lock Pages
71157 ---------------
71159 - Because page faults cause paged out pages to be paged in
71160 -transparently, a process rarely needs to be concerned about locking
71161 -pages. However, there are two reasons people sometimes are:
71163 - * Speed. A page fault is transparent only insofar as the process is
71164 - not sensitive to how long it takes to do a simple memory access.
71165 - Time-critical processes, especially realtime processes, may not be
71166 - able to wait or may not be able to tolerate variance in execution
71167 - speed.
71169 - A process that needs to lock pages for this reason probably also
71170 - needs priority among other processes for use of the CPU. *Note
71171 - Priority::.
71173 - In some cases, the programmer knows better than the system's demand
71174 - paging allocator which pages should remain in real memory to
71175 - optimize system performance. In this case, locking pages can help.
71177 - * Privacy. If you keep secrets in virtual memory and that virtual
71178 - memory gets paged out, that increases the chance that the secrets
71179 - will get out. If a password gets written out to disk swap space,
71180 - for example, it might still be there long after virtual and real
71181 - memory have been wiped clean.
71184 - Be aware that when you lock a page, that's one fewer page frame that
71185 -can be used to back other virtual memory (by the same or other
71186 -processes), which can mean more page faults, which means the system
71187 -runs more slowly. In fact, if you lock enough memory, some programs
71188 -may not be able to run at all for lack of real memory.
71190 -\x1f
71191 -File: libc.info, Node: Locked Memory Details, Next: Page Lock Functions, Prev: Why Lock Pages, Up: Locking Pages
71193 -Locked Memory Details
71194 ----------------------
71196 - A memory lock is associated with a virtual page, not a real frame.
71197 -The paging rule is: If a frame backs at least one locked page, don't
71198 -page it out.
71200 - Memory locks do not stack. I.e. you can't lock a particular page
71201 -twice so that it has to be unlocked twice before it is truly unlocked.
71202 -It is either locked or it isn't.
71204 - A memory lock persists until the process that owns the memory
71205 -explicitly unlocks it. (But process termination and exec cause the
71206 -virtual memory to cease to exist, which you might say means it isn't
71207 -locked any more).
71209 - Memory locks are not inherited by child processes. (But note that
71210 -on a modern Unix system, immediately after a fork, the parent's and the
71211 -child's virtual address space are backed by the same real page frames,
71212 -so the child enjoys the parent's locks). *Note Creating a Process::.
71214 - Because of its ability to impact other processes, only the superuser
71215 -can lock a page. Any process can unlock its own page.
71217 - The system sets limits on the amount of memory a process can have
71218 -locked and the amount of real memory it can have dedicated to it.
71219 -*Note Limits on Resources::.
71221 - In Linux, locked pages aren't as locked as you might think. Two
71222 -virtual pages that are not shared memory can nonetheless be backed by
71223 -the same real frame. The kernel does this in the name of efficiency
71224 -when it knows both virtual pages contain identical data, and does it
71225 -even if one or both of the virtual pages are locked.
71227 - But when a process modifies one of those pages, the kernel must get
71228 -it a separate frame and fill it with the page's data. This is known as
71229 -a "copy-on-write page fault". It takes a small amount of time and in a
71230 -pathological case, getting that frame may require I/O.
71232 - To make sure this doesn't happen to your program, don't just lock the
71233 -pages. Write to them as well, unless you know you won't write to them
71234 -ever. And to make sure you have pre-allocated frames for your stack,
71235 -enter a scope that declares a C automatic variable larger than the
71236 -maximum stack size you will need, set it to something, then return from
71237 -its scope.
71239 -\x1f
71240 -File: libc.info, Node: Page Lock Functions, Prev: Locked Memory Details, Up: Locking Pages
71242 -Functions To Lock And Unlock Pages
71243 -----------------------------------
71245 - The symbols in this section are declared in `sys/mman.h'. These
71246 -functions are defined by POSIX.1b, but their availability depends on
71247 -your kernel. If your kernel doesn't allow these functions, they exist
71248 -but always fail. They _are_ available with a Linux kernel.
71250 - *Portability Note:* POSIX.1b requires that when the `mlock' and
71251 -`munlock' functions are available, the file `unistd.h' define the macro
71252 -`_POSIX_MEMLOCK_RANGE' and the file `limits.h' define the macro
71253 -`PAGESIZE' to be the size of a memory page in bytes. It requires that
71254 -when the `mlockall' and `munlockall' functions are available, the
71255 -`unistd.h' file define the macro `_POSIX_MEMLOCK'. The GNU C library
71256 -conforms to this requirement.
71258 - - Function: int mlock (const void *ADDR, size_t LEN)
71259 - `mlock' locks a range of the calling process' virtual pages.
71261 - The range of memory starts at address ADDR and is LEN bytes long.
71262 - Actually, since you must lock whole pages, it is the range of
71263 - pages that include any part of the specified range.
71265 - When the function returns successfully, each of those pages is
71266 - backed by (connected to) a real frame (is resident) and is marked
71267 - to stay that way. This means the function may cause page-ins and
71268 - have to wait for them.
71270 - When the function fails, it does not affect the lock status of any
71271 - pages.
71273 - The return value is zero if the function succeeds. Otherwise, it
71274 - is `-1' and `errno' is set accordingly. `errno' values specific
71275 - to this function are:
71277 - `ENOMEM'
71278 - * At least some of the specified address range does not
71279 - exist in the calling process' virtual address space.
71281 - * The locking would cause the process to exceed its locked
71282 - page limit.
71284 - `EPERM'
71285 - The calling process is not superuser.
71287 - `EINVAL'
71288 - LEN is not positive.
71290 - `ENOSYS'
71291 - The kernel does not provide `mlock' capability.
71293 - You can lock _all_ a process' memory with `mlockall'. You unlock
71294 - memory with `munlock' or `munlockall'.
71296 - To avoid all page faults in a C program, you have to use
71297 - `mlockall', because some of the memory a program uses is hidden
71298 - from the C code, e.g. the stack and automatic variables, and you
71299 - wouldn't know what address to tell `mlock'.
71302 - - Function: int munlock (const void *ADDR, size_t LEN)
71303 - `mlock' unlocks a range of the calling process' virtual pages.
71305 - `munlock' is the inverse of `mlock' and functions completely
71306 - analogously to `mlock', except that there is no `EPERM' failure.
71309 - - Function: int mlockall (int FLAGS)
71310 - `mlockall' locks all the pages in a process' virtual memory address
71311 - space, and/or any that are added to it in the future. This
71312 - includes the pages of the code, data and stack segment, as well as
71313 - shared libraries, user space kernel data, shared memory, and
71314 - memory mapped files.
71316 - FLAGS is a string of single bit flags represented by the following
71317 - macros. They tell `mlockall' which of its functions you want. All
71318 - other bits must be zero.
71320 - `MCL_CURRENT'
71321 - Lock all pages which currently exist in the calling process'
71322 - virtual address space.
71324 - `MCL_FUTURE'
71325 - Set a mode such that any pages added to the process' virtual
71326 - address space in the future will be locked from birth. This
71327 - mode does not affect future address spaces owned by the same
71328 - process so exec, which replaces a process' address space,
71329 - wipes out `MCL_FUTURE'. *Note Executing a File::.
71331 - When the function returns successfully, and you specified
71332 - `MCL_CURRENT', all of the process' pages are backed by (connected
71333 - to) real frames (they are resident) and are marked to stay that
71334 - way. This means the function may cause page-ins and have to wait
71335 - for them.
71337 - When the process is in `MCL_FUTURE' mode because it successfully
71338 - executed this function and specified `MCL_CURRENT', any system call
71339 - by the process that requires space be added to its virtual address
71340 - space fails with `errno' = `ENOMEM' if locking the additional space
71341 - would cause the process to exceed its locked page limit. In the
71342 - case that the address space addition that can't be accommodated is
71343 - stack expansion, the stack expansion fails and the kernel sends a
71344 - `SIGSEGV' signal to the process.
71346 - When the function fails, it does not affect the lock status of any
71347 - pages or the future locking mode.
71349 - The return value is zero if the function succeeds. Otherwise, it
71350 - is `-1' and `errno' is set accordingly. `errno' values specific
71351 - to this function are:
71353 - `ENOMEM'
71354 - * At least some of the specified address range does not
71355 - exist in the calling process' virtual address space.
71357 - * The locking would cause the process to exceed its locked
71358 - page limit.
71360 - `EPERM'
71361 - The calling process is not superuser.
71363 - `EINVAL'
71364 - Undefined bits in FLAGS are not zero.
71366 - `ENOSYS'
71367 - The kernel does not provide `mlockall' capability.
71369 - You can lock just specific pages with `mlock'. You unlock pages
71370 - with `munlockall' and `munlock'.
71373 - - Function: int munlockall (void)
71374 - `munlockall' unlocks every page in the calling process' virtual
71375 - address space and turn off `MCL_FUTURE' future locking mode.
71377 - The return value is zero if the function succeeds. Otherwise, it
71378 - is `-1' and `errno' is set accordingly. The only way this
71379 - function can fail is for generic reasons that all functions and
71380 - system calls can fail, so there are no specific `errno' values.
71383 -\x1f
71384 -File: libc.info, Node: Character Handling, Next: String and Array Utilities, Prev: Memory, Up: Top
71386 -Character Handling
71387 -******************
71389 - Programs that work with characters and strings often need to
71390 -classify a character--is it alphabetic, is it a digit, is it
71391 -whitespace, and so on--and perform case conversion operations on
71392 -characters. The functions in the header file `ctype.h' are provided
71393 -for this purpose.
71395 - Since the choice of locale and character set can alter the
71396 -classifications of particular character codes, all of these functions
71397 -are affected by the current locale. (More precisely, they are affected
71398 -by the locale currently selected for character classification--the
71399 -`LC_CTYPE' category; see *Note Locale Categories::.)
71401 - The ISO C standard specifies two different sets of functions. The
71402 -one set works on `char' type characters, the other one on `wchar_t'
71403 -wide characters (*note Extended Char Intro::).
71405 -* Menu:
71407 -* Classification of Characters:: Testing whether characters are
71408 - letters, digits, punctuation, etc.
71410 -* Case Conversion:: Case mapping, and the like.
71411 -* Classification of Wide Characters:: Character class determination for
71412 - wide characters.
71413 -* Using Wide Char Classes:: Notes on using the wide character
71414 - classes.
71415 -* Wide Character Case Conversion:: Mapping of wide characters.
71417 -\x1f
71418 -File: libc.info, Node: Classification of Characters, Next: Case Conversion, Up: Character Handling
71420 -Classification of Characters
71421 -============================
71423 - This section explains the library functions for classifying
71424 -characters. For example, `isalpha' is the function to test for an
71425 -alphabetic character. It takes one argument, the character to test,
71426 -and returns a nonzero integer if the character is alphabetic, and zero
71427 -otherwise. You would use it like this:
71429 - if (isalpha (c))
71430 - printf ("The character `%c' is alphabetic.\n", c);
71432 - Each of the functions in this section tests for membership in a
71433 -particular class of characters; each has a name starting with `is'.
71434 -Each of them takes one argument, which is a character to test, and
71435 -returns an `int' which is treated as a boolean value. The character
71436 -argument is passed as an `int', and it may be the constant value `EOF'
71437 -instead of a real character.
71439 - The attributes of any given character can vary between locales.
71440 -*Note Locales::, for more information on locales.
71442 - These functions are declared in the header file `ctype.h'.
71444 - - Function: int islower (int C)
71445 - Returns true if C is a lower-case letter. The letter need not be
71446 - from the Latin alphabet, any alphabet representable is valid.
71448 - - Function: int isupper (int C)
71449 - Returns true if C is an upper-case letter. The letter need not be
71450 - from the Latin alphabet, any alphabet representable is valid.
71452 - - Function: int isalpha (int C)
71453 - Returns true if C is an alphabetic character (a letter). If
71454 - `islower' or `isupper' is true of a character, then `isalpha' is
71455 - also true.
71457 - In some locales, there may be additional characters for which
71458 - `isalpha' is true--letters which are neither upper case nor lower
71459 - case. But in the standard `"C"' locale, there are no such
71460 - additional characters.
71462 - - Function: int isdigit (int C)
71463 - Returns true if C is a decimal digit (`0' through `9').
71465 - - Function: int isalnum (int C)
71466 - Returns true if C is an alphanumeric character (a letter or
71467 - number); in other words, if either `isalpha' or `isdigit' is true
71468 - of a character, then `isalnum' is also true.
71470 - - Function: int isxdigit (int C)
71471 - Returns true if C is a hexadecimal digit. Hexadecimal digits
71472 - include the normal decimal digits `0' through `9' and the letters
71473 - `A' through `F' and `a' through `f'.
71475 - - Function: int ispunct (int C)
71476 - Returns true if C is a punctuation character. This means any
71477 - printing character that is not alphanumeric or a space character.
71479 - - Function: int isspace (int C)
71480 - Returns true if C is a "whitespace" character. In the standard
71481 - `"C"' locale, `isspace' returns true for only the standard
71482 - whitespace characters:
71484 - `' ''
71485 - space
71487 - `'\f''
71488 - formfeed
71490 - `'\n''
71491 - newline
71493 - `'\r''
71494 - carriage return
71496 - `'\t''
71497 - horizontal tab
71499 - `'\v''
71500 - vertical tab
71502 - - Function: int isblank (int C)
71503 - Returns true if C is a blank character; that is, a space or a tab.
71504 - This function is a GNU extension.
71506 - - Function: int isgraph (int C)
71507 - Returns true if C is a graphic character; that is, a character
71508 - that has a glyph associated with it. The whitespace characters
71509 - are not considered graphic.
71511 - - Function: int isprint (int C)
71512 - Returns true if C is a printing character. Printing characters
71513 - include all the graphic characters, plus the space (` ') character.
71515 - - Function: int iscntrl (int C)
71516 - Returns true if C is a control character (that is, a character that
71517 - is not a printing character).
71519 - - Function: int isascii (int C)
71520 - Returns true if C is a 7-bit `unsigned char' value that fits into
71521 - the US/UK ASCII character set. This function is a BSD extension
71522 - and is also an SVID extension.
71524 -\x1f
71525 -File: libc.info, Node: Case Conversion, Next: Classification of Wide Characters, Prev: Classification of Characters, Up: Character Handling
71527 -Case Conversion
71528 -===============
71530 - This section explains the library functions for performing
71531 -conversions such as case mappings on characters. For example, `toupper'
71532 -converts any character to upper case if possible. If the character
71533 -can't be converted, `toupper' returns it unchanged.
71535 - These functions take one argument of type `int', which is the
71536 -character to convert, and return the converted character as an `int'.
71537 -If the conversion is not applicable to the argument given, the argument
71538 -is returned unchanged.
71540 - *Compatibility Note:* In pre-ISO C dialects, instead of returning
71541 -the argument unchanged, these functions may fail when the argument is
71542 -not suitable for the conversion. Thus for portability, you may need to
71543 -write `islower(c) ? toupper(c) : c' rather than just `toupper(c)'.
71545 - These functions are declared in the header file `ctype.h'.
71547 - - Function: int tolower (int C)
71548 - If C is an upper-case letter, `tolower' returns the corresponding
71549 - lower-case letter. If C is not an upper-case letter, C is
71550 - returned unchanged.
71552 - - Function: int toupper (int C)
71553 - If C is a lower-case letter, `toupper' returns the corresponding
71554 - upper-case letter. Otherwise C is returned unchanged.
71556 - - Function: int toascii (int C)
71557 - This function converts C to a 7-bit `unsigned char' value that
71558 - fits into the US/UK ASCII character set, by clearing the high-order
71559 - bits. This function is a BSD extension and is also an SVID
71560 - extension.
71562 - - Function: int _tolower (int C)
71563 - This is identical to `tolower', and is provided for compatibility
71564 - with the SVID. *Note SVID::.
71566 - - Function: int _toupper (int C)
71567 - This is identical to `toupper', and is provided for compatibility
71568 - with the SVID.
71570 diff -u -udbrN glibc-2.3.2/manual/libc.info-50 glibc-2.3.2-200304020432/manual/libc.info-50
71571 --- glibc-2.3.2/manual/libc.info-50 Sat Mar 1 02:39:41 2003
71572 +++ glibc-2.3.2-200304020432/manual/libc.info-50 Thu Jan 1 01:00:00 1970
71573 @@ -1,1150 +0,0 @@
71574 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
71576 -INFO-DIR-SECTION GNU libraries
71577 -START-INFO-DIR-ENTRY
71578 -* Libc: (libc). C library.
71579 -END-INFO-DIR-ENTRY
71581 - This file documents the GNU C library.
71583 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
71584 -Reference Manual', for Version 2.3.x.
71586 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
71587 -Free Software Foundation, Inc.
71589 - Permission is granted to copy, distribute and/or modify this document
71590 -under the terms of the GNU Free Documentation License, Version 1.1 or
71591 -any later version published by the Free Software Foundation; with the
71592 -Invariant Sections being "Free Software Needs Free Documentation" and
71593 -"GNU Lesser General Public License", the Front-Cover texts being (a)
71594 -(see below), and with the Back-Cover Texts being (b) (see below). A
71595 -copy of the license is included in the section entitled "GNU Free
71596 -Documentation License".
71598 - (a) The FSF's Front-Cover Text is:
71600 - A GNU Manual
71602 - (b) The FSF's Back-Cover Text is:
71604 - You have freedom to copy and modify this GNU Manual, like GNU
71605 -software. Copies published by the Free Software Foundation raise
71606 -funds for GNU development.
71608 -\x1f
71609 -File: libc.info, Node: Basic Thread Operations, Next: Thread Attributes, Up: POSIX Threads
71611 -Basic Thread Operations
71612 -=======================
71614 - These functions are the thread equivalents of `fork', `exit', and
71615 -`wait'.
71617 - - Function: int pthread_create (pthread_t * THREAD, pthread_attr_t *
71618 - ATTR, void * (*START_ROUTINE)(void *), void * ARG)
71619 - `pthread_create' creates a new thread of control that executes
71620 - concurrently with the calling thread. The new thread calls the
71621 - function START_ROUTINE, passing it ARG as first argument. The new
71622 - thread terminates either explicitly, by calling `pthread_exit', or
71623 - implicitly, by returning from the START_ROUTINE function. The
71624 - latter case is equivalent to calling `pthread_exit' with the result
71625 - returned by START_ROUTINE as exit code.
71627 - The ATTR argument specifies thread attributes to be applied to the
71628 - new thread. *Note Thread Attributes::, for details. The ATTR
71629 - argument can also be `NULL', in which case default attributes are
71630 - used: the created thread is joinable (not detached) and has an
71631 - ordinary (not realtime) scheduling policy.
71633 - On success, the identifier of the newly created thread is stored
71634 - in the location pointed by the THREAD argument, and a 0 is
71635 - returned. On error, a non-zero error code is returned.
71637 - This function may return the following errors:
71638 - `EAGAIN'
71639 - Not enough system resources to create a process for the new
71640 - thread, or more than `PTHREAD_THREADS_MAX' threads are
71641 - already active.
71643 - - Function: void pthread_exit (void *RETVAL)
71644 - `pthread_exit' terminates the execution of the calling thread. All
71645 - cleanup handlers (*note Cleanup Handlers::) that have been set for
71646 - the calling thread with `pthread_cleanup_push' are executed in
71647 - reverse order (the most recently pushed handler is executed
71648 - first). Finalization functions for thread-specific data are then
71649 - called for all keys that have non-`NULL' values associated with
71650 - them in the calling thread (*note Thread-Specific Data::).
71651 - Finally, execution of the calling thread is stopped.
71653 - The RETVAL argument is the return value of the thread. It can be
71654 - retrieved from another thread using `pthread_join'.
71656 - The `pthread_exit' function never returns.
71658 - - Function: int pthread_cancel (pthread_t THREAD)
71659 - `pthread_cancel' sends a cancellation request to the thread denoted
71660 - by the THREAD argument. If there is no such thread,
71661 - `pthread_cancel' fails and returns `ESRCH'. Otherwise it returns
71662 - 0. *Note Cancellation::, for details.
71664 - - Function: int pthread_join (pthread_t TH, void **thread_RETURN)
71665 - `pthread_join' suspends the execution of the calling thread until
71666 - the thread identified by TH terminates, either by calling
71667 - `pthread_exit' or by being canceled.
71669 - If THREAD_RETURN is not `NULL', the return value of TH is stored
71670 - in the location pointed to by THREAD_RETURN. The return value of
71671 - TH is either the argument it gave to `pthread_exit', or
71672 - `PTHREAD_CANCELED' if TH was canceled.
71674 - The joined thread `th' must be in the joinable state: it must not
71675 - have been detached using `pthread_detach' or the
71676 - `PTHREAD_CREATE_DETACHED' attribute to `pthread_create'.
71678 - When a joinable thread terminates, its memory resources (thread
71679 - descriptor and stack) are not deallocated until another thread
71680 - performs `pthread_join' on it. Therefore, `pthread_join' must be
71681 - called once for each joinable thread created to avoid memory leaks.
71683 - At most one thread can wait for the termination of a given thread.
71684 - Calling `pthread_join' on a thread TH on which another thread is
71685 - already waiting for termination returns an error.
71687 - `pthread_join' is a cancellation point. If a thread is canceled
71688 - while suspended in `pthread_join', the thread execution resumes
71689 - immediately and the cancellation is executed without waiting for
71690 - the TH thread to terminate. If cancellation occurs during
71691 - `pthread_join', the TH thread remains not joined.
71693 - On success, the return value of TH is stored in the location
71694 - pointed to by THREAD_RETURN, and 0 is returned. On error, one of
71695 - the following values is returned:
71696 - `ESRCH'
71697 - No thread could be found corresponding to that specified by
71698 - TH.
71700 - `EINVAL'
71701 - The TH thread has been detached, or another thread is already
71702 - waiting on termination of TH.
71704 - `EDEADLK'
71705 - The TH argument refers to the calling thread.
71707 -\x1f
71708 -File: libc.info, Node: Thread Attributes, Next: Cancellation, Prev: Basic Thread Operations, Up: POSIX Threads
71710 -Thread Attributes
71711 -=================
71713 - Threads have a number of attributes that may be set at creation time.
71714 -This is done by filling a thread attribute object ATTR of type
71715 -`pthread_attr_t', then passing it as second argument to
71716 -`pthread_create'. Passing `NULL' is equivalent to passing a thread
71717 -attribute object with all attributes set to their default values.
71719 - Attribute objects are consulted only when creating a new thread. The
71720 -same attribute object can be used for creating several threads.
71721 -Modifying an attribute object after a call to `pthread_create' does not
71722 -change the attributes of the thread previously created.
71724 - - Function: int pthread_attr_init (pthread_attr_t *ATTR)
71725 - `pthread_attr_init' initializes the thread attribute object ATTR
71726 - and fills it with default values for the attributes. (The default
71727 - values are listed below for each attribute.)
71729 - Each attribute ATTRNAME (see below for a list of all attributes)
71730 - can be individually set using the function
71731 - `pthread_attr_setATTRNAME' and retrieved using the function
71732 - `pthread_attr_getATTRNAME'.
71734 - - Function: int pthread_attr_destroy (pthread_attr_t *ATTR)
71735 - `pthread_attr_destroy' destroys the attribute object pointed to by
71736 - ATTR releasing any resources associated with it. ATTR is left in
71737 - an undefined state, and you must not use it again in a call to any
71738 - pthreads function until it has been reinitialized.
71740 - - Function: int pthread_attr_setattr (pthread_attr_t *OBJ, int VALUE)
71741 - Set attribute ATTR to VALUE in the attribute object pointed to by
71742 - OBJ. See below for a list of possible attributes and the values
71743 - they can take.
71745 - On success, these functions return 0. If VALUE is not meaningful
71746 - for the ATTR being modified, they will return the error code
71747 - `EINVAL'. Some of the functions have other failure modes; see
71748 - below.
71750 - - Function: int pthread_attr_getattr (const pthread_attr_t *OBJ, int
71751 - *VALUE)
71752 - Store the current setting of ATTR in OBJ into the variable pointed
71753 - to by VALUE.
71755 - These functions always return 0.
71757 - The following thread attributes are supported:
71758 -`detachstate'
71759 - Choose whether the thread is created in the joinable state (value
71760 - `PTHREAD_CREATE_JOINABLE') or in the detached state
71761 - (`PTHREAD_CREATE_DETACHED'). The default is
71762 - `PTHREAD_CREATE_JOINABLE'.
71764 - In the joinable state, another thread can synchronize on the thread
71765 - termination and recover its termination code using `pthread_join',
71766 - but some of the thread resources are kept allocated after the
71767 - thread terminates, and reclaimed only when another thread performs
71768 - `pthread_join' on that thread.
71770 - In the detached state, the thread resources are immediately freed
71771 - when it terminates, but `pthread_join' cannot be used to
71772 - synchronize on the thread termination.
71774 - A thread created in the joinable state can later be put in the
71775 - detached thread using `pthread_detach'.
71777 -`schedpolicy'
71778 - Select the scheduling policy for the thread: one of `SCHED_OTHER'
71779 - (regular, non-realtime scheduling), `SCHED_RR' (realtime,
71780 - round-robin) or `SCHED_FIFO' (realtime, first-in first-out). The
71781 - default is `SCHED_OTHER'.
71783 - The realtime scheduling policies `SCHED_RR' and `SCHED_FIFO' are
71784 - available only to processes with superuser privileges.
71785 - `pthread_attr_setschedparam' will fail and return `ENOTSUP' if you
71786 - try to set a realtime policy when you are unprivileged.
71788 - The scheduling policy of a thread can be changed after creation
71789 - with `pthread_setschedparam'.
71791 -`schedparam'
71792 - Change the scheduling parameter (the scheduling priority) for the
71793 - thread. The default is 0.
71795 - This attribute is not significant if the scheduling policy is
71796 - `SCHED_OTHER'; it only matters for the realtime policies
71797 - `SCHED_RR' and `SCHED_FIFO'.
71799 - The scheduling priority of a thread can be changed after creation
71800 - with `pthread_setschedparam'.
71802 -`inheritsched'
71803 - Choose whether the scheduling policy and scheduling parameter for
71804 - the newly created thread are determined by the values of the
71805 - SCHEDPOLICY and SCHEDPARAM attributes (value
71806 - `PTHREAD_EXPLICIT_SCHED') or are inherited from the parent thread
71807 - (value `PTHREAD_INHERIT_SCHED'). The default is
71808 - `PTHREAD_EXPLICIT_SCHED'.
71810 -`scope'
71811 - Choose the scheduling contention scope for the created thread. The
71812 - default is `PTHREAD_SCOPE_SYSTEM', meaning that the threads contend
71813 - for CPU time with all processes running on the machine. In
71814 - particular, thread priorities are interpreted relative to the
71815 - priorities of all other processes on the machine. The other
71816 - possibility, `PTHREAD_SCOPE_PROCESS', means that scheduling
71817 - contention occurs only between the threads of the running process:
71818 - thread priorities are interpreted relative to the priorities of
71819 - the other threads of the process, regardless of the priorities of
71820 - other processes.
71822 - `PTHREAD_SCOPE_PROCESS' is not supported in LinuxThreads. If you
71823 - try to set the scope to this value, `pthread_attr_setscope' will
71824 - fail and return `ENOTSUP'.
71826 -`stackaddr'
71827 - Provide an address for an application managed stack. The size of
71828 - the stack must be at least `PTHREAD_STACK_MIN'.
71830 -`stacksize'
71831 - Change the size of the stack created for the thread. The value
71832 - defines the minimum stack size, in bytes.
71834 - If the value exceeds the system's maximum stack size, or is smaller
71835 - than `PTHREAD_STACK_MIN', `pthread_attr_setstacksize' will fail
71836 - and return `EINVAL'.
71838 -`stack'
71839 - Provide both the address and size of an application managed stack
71840 - to use for the new thread. The base of the memory area is
71841 - STACKADDR with the size of the memory area, STACKSIZE, measured in
71842 - bytes.
71844 - If the value of STACKSIZE is less than `PTHREAD_STACK_MIN', or
71845 - greater than the system's maximum stack size, or if the value of
71846 - STACKADDR lacks the proper alignment, `pthread_attr_setstack' will
71847 - fail and return `EINVAL'.
71849 -`guardsize'
71850 - Change the minimum size in bytes of the guard area for the thread's
71851 - stack. The default size is a single page. If this value is set,
71852 - it will be rounded up to the nearest page size. If the value is
71853 - set to 0, a guard area will not be created for this thread. The
71854 - space allocated for the guard area is used to catch stack
71855 - overflow. Therefore, when allocating large structures on the
71856 - stack, a larger guard area may be required to catch a stack
71857 - overflow.
71859 - If the caller is managing their own stacks (if the `stackaddr'
71860 - attribute has been set), then the `guardsize' attribute is ignored.
71862 - If the value exceeds the `stacksize', `pthread_atrr_setguardsize'
71863 - will fail and return `EINVAL'.
71865 -\x1f
71866 -File: libc.info, Node: Cancellation, Next: Cleanup Handlers, Prev: Thread Attributes, Up: POSIX Threads
71868 -Cancellation
71869 -============
71871 - Cancellation is the mechanism by which a thread can terminate the
71872 -execution of another thread. More precisely, a thread can send a
71873 -cancellation request to another thread. Depending on its settings, the
71874 -target thread can then either ignore the request, honor it immediately,
71875 -or defer it till it reaches a cancellation point. When threads are
71876 -first created by `pthread_create', they always defer cancellation
71877 -requests.
71879 - When a thread eventually honors a cancellation request, it behaves
71880 -as if `pthread_exit(PTHREAD_CANCELED)' was called. All cleanup handlers
71881 -are executed in reverse order, finalization functions for
71882 -thread-specific data are called, and finally the thread stops executing.
71883 -If the canceled thread was joinable, the return value
71884 -`PTHREAD_CANCELED' is provided to whichever thread calls PTHREAD_JOIN
71885 -on it. See `pthread_exit' for more information.
71887 - Cancellation points are the points where the thread checks for
71888 -pending cancellation requests and performs them. The POSIX threads
71889 -functions `pthread_join', `pthread_cond_wait',
71890 -`pthread_cond_timedwait', `pthread_testcancel', `sem_wait', and
71891 -`sigwait' are cancellation points. In addition, these system calls are
71892 -cancellation points:
71894 -accept open sendmsg
71895 -close pause sendto
71896 -connect read system
71897 -fcntl recv tcdrain
71898 -fsync recvfrom wait
71899 -lseek recvmsg waitpid
71900 -msync send write
71901 -nanosleep
71903 -All library functions that call these functions (such as `printf') are
71904 -also cancellation points.
71906 - - Function: int pthread_setcancelstate (int STATE, int *OLDSTATE)
71907 - `pthread_setcancelstate' changes the cancellation state for the
71908 - calling thread - that is, whether cancellation requests are
71909 - ignored or not. The STATE argument is the new cancellation state:
71910 - either `PTHREAD_CANCEL_ENABLE' to enable cancellation, or
71911 - `PTHREAD_CANCEL_DISABLE' to disable cancellation (cancellation
71912 - requests are ignored).
71914 - If OLDSTATE is not `NULL', the previous cancellation state is
71915 - stored in the location pointed to by OLDSTATE, and can thus be
71916 - restored later by another call to `pthread_setcancelstate'.
71918 - If the STATE argument is not `PTHREAD_CANCEL_ENABLE' or
71919 - `PTHREAD_CANCEL_DISABLE', `pthread_setcancelstate' fails and
71920 - returns `EINVAL'. Otherwise it returns 0.
71922 - - Function: int pthread_setcanceltype (int TYPE, int *OLDTYPE)
71923 - `pthread_setcanceltype' changes the type of responses to
71924 - cancellation requests for the calling thread: asynchronous
71925 - (immediate) or deferred. The TYPE argument is the new
71926 - cancellation type: either `PTHREAD_CANCEL_ASYNCHRONOUS' to cancel
71927 - the calling thread as soon as the cancellation request is
71928 - received, or `PTHREAD_CANCEL_DEFERRED' to keep the cancellation
71929 - request pending until the next cancellation point. If OLDTYPE is
71930 - not `NULL', the previous cancellation state is stored in the
71931 - location pointed to by OLDTYPE, and can thus be restored later by
71932 - another call to `pthread_setcanceltype'.
71934 - If the TYPE argument is not `PTHREAD_CANCEL_DEFERRED' or
71935 - `PTHREAD_CANCEL_ASYNCHRONOUS', `pthread_setcanceltype' fails and
71936 - returns `EINVAL'. Otherwise it returns 0.
71938 - - Function: void pthread_testcancel (VOID)
71939 - `pthread_testcancel' does nothing except testing for pending
71940 - cancellation and executing it. Its purpose is to introduce explicit
71941 - checks for cancellation in long sequences of code that do not call
71942 - cancellation point functions otherwise.
71944 -\x1f
71945 -File: libc.info, Node: Cleanup Handlers, Next: Mutexes, Prev: Cancellation, Up: POSIX Threads
71947 -Cleanup Handlers
71948 -================
71950 - Cleanup handlers are functions that get called when a thread
71951 -terminates, either by calling `pthread_exit' or because of
71952 -cancellation. Cleanup handlers are installed and removed following a
71953 -stack-like discipline.
71955 - The purpose of cleanup handlers is to free the resources that a
71956 -thread may hold at the time it terminates. In particular, if a thread
71957 -exits or is canceled while it owns a locked mutex, the mutex will
71958 -remain locked forever and prevent other threads from executing
71959 -normally. The best way to avoid this is, just before locking the mutex,
71960 -to install a cleanup handler whose effect is to unlock the mutex.
71961 -Cleanup handlers can be used similarly to free blocks allocated with
71962 -`malloc' or close file descriptors on thread termination.
71964 - Here is how to lock a mutex MUT in such a way that it will be
71965 -unlocked if the thread is canceled while MUT is locked:
71967 - pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut);
71968 - pthread_mutex_lock(&mut);
71969 - /* do some work */
71970 - pthread_mutex_unlock(&mut);
71971 - pthread_cleanup_pop(0);
71973 - Equivalently, the last two lines can be replaced by
71975 - pthread_cleanup_pop(1);
71977 - Notice that the code above is safe only in deferred cancellation mode
71978 -(see `pthread_setcanceltype'). In asynchronous cancellation mode, a
71979 -cancellation can occur between `pthread_cleanup_push' and
71980 -`pthread_mutex_lock', or between `pthread_mutex_unlock' and
71981 -`pthread_cleanup_pop', resulting in both cases in the thread trying to
71982 -unlock a mutex not locked by the current thread. This is the main
71983 -reason why asynchronous cancellation is difficult to use.
71985 - If the code above must also work in asynchronous cancellation mode,
71986 -then it must switch to deferred mode for locking and unlocking the
71987 -mutex:
71989 - pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
71990 - pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut);
71991 - pthread_mutex_lock(&mut);
71992 - /* do some work */
71993 - pthread_cleanup_pop(1);
71994 - pthread_setcanceltype(oldtype, NULL);
71996 - The code above can be rewritten in a more compact and efficient way,
71997 -using the non-portable functions `pthread_cleanup_push_defer_np' and
71998 -`pthread_cleanup_pop_restore_np':
72000 - pthread_cleanup_push_defer_np(pthread_mutex_unlock, (void *) &mut);
72001 - pthread_mutex_lock(&mut);
72002 - /* do some work */
72003 - pthread_cleanup_pop_restore_np(1);
72005 - - Function: void pthread_cleanup_push (void (*ROUTINE) (void *), void
72006 - *ARG)
72007 - `pthread_cleanup_push' installs the ROUTINE function with argument
72008 - ARG as a cleanup handler. From this point on to the matching
72009 - `pthread_cleanup_pop', the function ROUTINE will be called with
72010 - arguments ARG when the thread terminates, either through
72011 - `pthread_exit' or by cancellation. If several cleanup handlers are
72012 - active at that point, they are called in LIFO order: the most
72013 - recently installed handler is called first.
72015 - - Function: void pthread_cleanup_pop (int EXECUTE)
72016 - `pthread_cleanup_pop' removes the most recently installed cleanup
72017 - handler. If the EXECUTE argument is not 0, it also executes the
72018 - handler, by calling the ROUTINE function with arguments ARG. If
72019 - the EXECUTE argument is 0, the handler is only removed but not
72020 - executed.
72022 - Matching pairs of `pthread_cleanup_push' and `pthread_cleanup_pop'
72023 -must occur in the same function, at the same level of block nesting.
72024 -Actually, `pthread_cleanup_push' and `pthread_cleanup_pop' are macros,
72025 -and the expansion of `pthread_cleanup_push' introduces an open brace
72026 -`{' with the matching closing brace `}' being introduced by the
72027 -expansion of the matching `pthread_cleanup_pop'.
72029 - - Function: void pthread_cleanup_push_defer_np (void (*ROUTINE) (void
72030 - *), void *ARG)
72031 - `pthread_cleanup_push_defer_np' is a non-portable extension that
72032 - combines `pthread_cleanup_push' and `pthread_setcanceltype'. It
72033 - pushes a cleanup handler just as `pthread_cleanup_push' does, but
72034 - also saves the current cancellation type and sets it to deferred
72035 - cancellation. This ensures that the cleanup mechanism is effective
72036 - even if the thread was initially in asynchronous cancellation mode.
72038 - - Function: void pthread_cleanup_pop_restore_np (int EXECUTE)
72039 - `pthread_cleanup_pop_restore_np' pops a cleanup handler introduced
72040 - by `pthread_cleanup_push_defer_np', and restores the cancellation
72041 - type to its value at the time `pthread_cleanup_push_defer_np' was
72042 - called.
72044 - `pthread_cleanup_push_defer_np' and `pthread_cleanup_pop_restore_np'
72045 -must occur in matching pairs, at the same level of block nesting.
72047 - The sequence
72049 - pthread_cleanup_push_defer_np(routine, arg);
72050 - ...
72051 - pthread_cleanup_pop_defer_np(execute);
72053 -is functionally equivalent to (but more compact and efficient than)
72056 - int oldtype;
72057 - pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
72058 - pthread_cleanup_push(routine, arg);
72059 - ...
72060 - pthread_cleanup_pop(execute);
72061 - pthread_setcanceltype(oldtype, NULL);
72064 -\x1f
72065 -File: libc.info, Node: Mutexes, Next: Condition Variables, Prev: Cleanup Handlers, Up: POSIX Threads
72067 -Mutexes
72068 -=======
72070 - A mutex is a MUTual EXclusion device, and is useful for protecting
72071 -shared data structures from concurrent modifications, and implementing
72072 -critical sections and monitors.
72074 - A mutex has two possible states: unlocked (not owned by any thread),
72075 -and locked (owned by one thread). A mutex can never be owned by two
72076 -different threads simultaneously. A thread attempting to lock a mutex
72077 -that is already locked by another thread is suspended until the owning
72078 -thread unlocks the mutex first.
72080 - None of the mutex functions is a cancellation point, not even
72081 -`pthread_mutex_lock', in spite of the fact that it can suspend a thread
72082 -for arbitrary durations. This way, the status of mutexes at
72083 -cancellation points is predictable, allowing cancellation handlers to
72084 -unlock precisely those mutexes that need to be unlocked before the
72085 -thread stops executing. Consequently, threads using deferred
72086 -cancellation should never hold a mutex for extended periods of time.
72088 - It is not safe to call mutex functions from a signal handler. In
72089 -particular, calling `pthread_mutex_lock' or `pthread_mutex_unlock' from
72090 -a signal handler may deadlock the calling thread.
72092 - - Function: int pthread_mutex_init (pthread_mutex_t *MUTEX, const
72093 - pthread_mutexattr_t *MUTEXATTR)
72094 - `pthread_mutex_init' initializes the mutex object pointed to by
72095 - MUTEX according to the mutex attributes specified in MUTEXATTR.
72096 - If MUTEXATTR is `NULL', default attributes are used instead.
72098 - The LinuxThreads implementation supports only one mutex attribute,
72099 - the MUTEX TYPE, which is either "fast", "recursive", or "error
72100 - checking". The type of a mutex determines whether it can be locked
72101 - again by a thread that already owns it. The default type is
72102 - "fast".
72104 - Variables of type `pthread_mutex_t' can also be initialized
72105 - statically, using the constants `PTHREAD_MUTEX_INITIALIZER' (for
72106 - timed mutexes), `PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP' (for
72107 - recursive mutexes), `PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' (for
72108 - fast mutexes(, and `PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP' (for
72109 - error checking mutexes).
72111 - `pthread_mutex_init' always returns 0.
72113 - - Function: int pthread_mutex_lock (pthread_mutex_t *mutex))
72114 - `pthread_mutex_lock' locks the given mutex. If the mutex is
72115 - currently unlocked, it becomes locked and owned by the calling
72116 - thread, and `pthread_mutex_lock' returns immediately. If the mutex
72117 - is already locked by another thread, `pthread_mutex_lock' suspends
72118 - the calling thread until the mutex is unlocked.
72120 - If the mutex is already locked by the calling thread, the behavior
72121 - of `pthread_mutex_lock' depends on the type of the mutex. If the
72122 - mutex is of the "fast" type, the calling thread is suspended. It
72123 - will remain suspended forever, because no other thread can unlock
72124 - the mutex. If the mutex is of the "error checking" type,
72125 - `pthread_mutex_lock' returns immediately with the error code
72126 - `EDEADLK'. If the mutex is of the "recursive" type,
72127 - `pthread_mutex_lock' succeeds and returns immediately, recording
72128 - the number of times the calling thread has locked the mutex. An
72129 - equal number of `pthread_mutex_unlock' operations must be
72130 - performed before the mutex returns to the unlocked state.
72132 - - Function: int pthread_mutex_trylock (pthread_mutex_t *MUTEX)
72133 - `pthread_mutex_trylock' behaves identically to
72134 - `pthread_mutex_lock', except that it does not block the calling
72135 - thread if the mutex is already locked by another thread (or by the
72136 - calling thread in the case of a "fast" mutex). Instead,
72137 - `pthread_mutex_trylock' returns immediately with the error code
72138 - `EBUSY'.
72140 - - Function: int pthread_mutex_timedlock (pthread_mutex_t *MUTEX, const
72141 - struct timespec *ABSTIME)
72142 - The `pthread_mutex_timedlock' is similar to the
72143 - `pthread_mutex_lock' function but instead of blocking for in
72144 - indefinite time if the mutex is locked by another thread, it
72145 - returns when the time specified in ABSTIME is reached.
72147 - This function can only be used on standard ("timed") and "error
72148 - checking" mutexes. It behaves just like `pthread_mutex_lock' for
72149 - all other types.
72151 - If the mutex is successfully locked, the function returns zero.
72152 - If the time specified in ABSTIME is reached without the mutex
72153 - being locked, `ETIMEDOUT' is returned.
72155 - This function was introduced in the POSIX.1d revision of the POSIX
72156 - standard.
72158 - - Function: int pthread_mutex_unlock (pthread_mutex_t *MUTEX)
72159 - `pthread_mutex_unlock' unlocks the given mutex. The mutex is
72160 - assumed to be locked and owned by the calling thread on entrance to
72161 - `pthread_mutex_unlock'. If the mutex is of the "fast" type,
72162 - `pthread_mutex_unlock' always returns it to the unlocked state. If
72163 - it is of the "recursive" type, it decrements the locking count of
72164 - the mutex (number of `pthread_mutex_lock' operations performed on
72165 - it by the calling thread), and only when this count reaches zero
72166 - is the mutex actually unlocked.
72168 - On "error checking" mutexes, `pthread_mutex_unlock' actually
72169 - checks at run-time that the mutex is locked on entrance, and that
72170 - it was locked by the same thread that is now calling
72171 - `pthread_mutex_unlock'. If these conditions are not met,
72172 - `pthread_mutex_unlock' returns `EPERM', and the mutex remains
72173 - unchanged. "Fast" and "recursive" mutexes perform no such checks,
72174 - thus allowing a locked mutex to be unlocked by a thread other than
72175 - its owner. This is non-portable behavior and must not be relied
72176 - upon.
72178 - - Function: int pthread_mutex_destroy (pthread_mutex_t *MUTEX)
72179 - `pthread_mutex_destroy' destroys a mutex object, freeing the
72180 - resources it might hold. The mutex must be unlocked on entrance.
72181 - In the LinuxThreads implementation, no resources are associated
72182 - with mutex objects, thus `pthread_mutex_destroy' actually does
72183 - nothing except checking that the mutex is unlocked.
72185 - If the mutex is locked by some thread, `pthread_mutex_destroy'
72186 - returns `EBUSY'. Otherwise it returns 0.
72188 - If any of the above functions (except `pthread_mutex_init') is
72189 -applied to an uninitialized mutex, they will simply return `EINVAL' and
72190 -do nothing.
72192 - A shared global variable X can be protected by a mutex as follows:
72194 - int x;
72195 - pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
72197 - All accesses and modifications to X should be bracketed by calls to
72198 -`pthread_mutex_lock' and `pthread_mutex_unlock' as follows:
72200 - pthread_mutex_lock(&mut);
72201 - /* operate on x */
72202 - pthread_mutex_unlock(&mut);
72204 - Mutex attributes can be specified at mutex creation time, by passing
72205 -a mutex attribute object as second argument to `pthread_mutex_init'.
72206 -Passing `NULL' is equivalent to passing a mutex attribute object with
72207 -all attributes set to their default values.
72209 - - Function: int pthread_mutexattr_init (pthread_mutexattr_t *ATTR)
72210 - `pthread_mutexattr_init' initializes the mutex attribute object
72211 - ATTR and fills it with default values for the attributes.
72213 - This function always returns 0.
72215 - - Function: int pthread_mutexattr_destroy (pthread_mutexattr_t *ATTR)
72216 - `pthread_mutexattr_destroy' destroys a mutex attribute object,
72217 - which must not be reused until it is reinitialized.
72218 - `pthread_mutexattr_destroy' does nothing in the LinuxThreads
72219 - implementation.
72221 - This function always returns 0.
72223 - LinuxThreads supports only one mutex attribute: the mutex type,
72224 -which is either `PTHREAD_MUTEX_ADAPTIVE_NP' for "fast" mutexes,
72225 -`PTHREAD_MUTEX_RECURSIVE_NP' for "recursive" mutexes,
72226 -`PTHREAD_MUTEX_TIMED_NP' for "timed" mutexes, or
72227 -`PTHREAD_MUTEX_ERRORCHECK_NP' for "error checking" mutexes. As the
72228 -`NP' suffix indicates, this is a non-portable extension to the POSIX
72229 -standard and should not be employed in portable programs.
72231 - The mutex type determines what happens if a thread attempts to lock a
72232 -mutex it already owns with `pthread_mutex_lock'. If the mutex is of the
72233 -"fast" type, `pthread_mutex_lock' simply suspends the calling thread
72234 -forever. If the mutex is of the "error checking" type,
72235 -`pthread_mutex_lock' returns immediately with the error code `EDEADLK'.
72236 -If the mutex is of the "recursive" type, the call to
72237 -`pthread_mutex_lock' returns immediately with a success return code.
72238 -The number of times the thread owning the mutex has locked it is
72239 -recorded in the mutex. The owning thread must call
72240 -`pthread_mutex_unlock' the same number of times before the mutex
72241 -returns to the unlocked state.
72243 - The default mutex type is "timed", that is, `PTHREAD_MUTEX_TIMED_NP'.
72245 - - Function: int pthread_mutexattr_settype (pthread_mutexattr_t *ATTR,
72246 - int TYPE)
72247 - `pthread_mutexattr_settype' sets the mutex type attribute in ATTR
72248 - to the value specified by TYPE.
72250 - If TYPE is not `PTHREAD_MUTEX_ADAPTIVE_NP',
72251 - `PTHREAD_MUTEX_RECURSIVE_NP', `PTHREAD_MUTEX_TIMED_NP', or
72252 - `PTHREAD_MUTEX_ERRORCHECK_NP', this function will return `EINVAL'
72253 - and leave ATTR unchanged.
72255 - The standard Unix98 identifiers `PTHREAD_MUTEX_DEFAULT',
72256 - `PTHREAD_MUTEX_NORMAL', `PTHREAD_MUTEX_RECURSIVE', and
72257 - `PTHREAD_MUTEX_ERRORCHECK' are also permitted.
72260 - - Function: int pthread_mutexattr_gettype (const pthread_mutexattr_t
72261 - *ATTR, int *TYPE)
72262 - `pthread_mutexattr_gettype' retrieves the current value of the
72263 - mutex type attribute in ATTR and stores it in the location pointed
72264 - to by TYPE.
72266 - This function always returns 0.
72268 -\x1f
72269 -File: libc.info, Node: Condition Variables, Next: POSIX Semaphores, Prev: Mutexes, Up: POSIX Threads
72271 -Condition Variables
72272 -===================
72274 - A condition (short for "condition variable") is a synchronization
72275 -device that allows threads to suspend execution until some predicate on
72276 -shared data is satisfied. The basic operations on conditions are: signal
72277 -the condition (when the predicate becomes true), and wait for the
72278 -condition, suspending the thread execution until another thread signals
72279 -the condition.
72281 - A condition variable must always be associated with a mutex, to avoid
72282 -the race condition where a thread prepares to wait on a condition
72283 -variable and another thread signals the condition just before the first
72284 -thread actually waits on it.
72286 - - Function: int pthread_cond_init (pthread_cond_t *COND,
72287 - pthread_condattr_t *cond_ATTR)
72288 - `pthread_cond_init' initializes the condition variable COND, using
72289 - the condition attributes specified in COND_ATTR, or default
72290 - attributes if COND_ATTR is `NULL'. The LinuxThreads implementation
72291 - supports no attributes for conditions, hence the COND_ATTR
72292 - parameter is actually ignored.
72294 - Variables of type `pthread_cond_t' can also be initialized
72295 - statically, using the constant `PTHREAD_COND_INITIALIZER'.
72297 - This function always returns 0.
72299 - - Function: int pthread_cond_signal (pthread_cond_t *COND)
72300 - `pthread_cond_signal' restarts one of the threads that are waiting
72301 - on the condition variable COND. If no threads are waiting on COND,
72302 - nothing happens. If several threads are waiting on COND, exactly
72303 - one is restarted, but it is not specified which.
72305 - This function always returns 0.
72307 - - Function: int pthread_cond_broadcast (pthread_cond_t *COND)
72308 - `pthread_cond_broadcast' restarts all the threads that are waiting
72309 - on the condition variable COND. Nothing happens if no threads are
72310 - waiting on COND.
72312 - This function always returns 0.
72314 - - Function: int pthread_cond_wait (pthread_cond_t *COND,
72315 - pthread_mutex_t *MUTEX)
72316 - `pthread_cond_wait' atomically unlocks the MUTEX (as per
72317 - `pthread_unlock_mutex') and waits for the condition variable COND
72318 - to be signaled. The thread execution is suspended and does not
72319 - consume any CPU time until the condition variable is signaled. The
72320 - MUTEX must be locked by the calling thread on entrance to
72321 - `pthread_cond_wait'. Before returning to the calling thread,
72322 - `pthread_cond_wait' re-acquires MUTEX (as per
72323 - `pthread_lock_mutex').
72325 - Unlocking the mutex and suspending on the condition variable is
72326 - done atomically. Thus, if all threads always acquire the mutex
72327 - before signaling the condition, this guarantees that the condition
72328 - cannot be signaled (and thus ignored) between the time a thread
72329 - locks the mutex and the time it waits on the condition variable.
72331 - This function always returns 0.
72333 - - Function: int pthread_cond_timedwait (pthread_cond_t *COND,
72334 - pthread_mutex_t *MUTEX, const struct timespec *ABSTIME)
72335 - `pthread_cond_timedwait' atomically unlocks MUTEX and waits on
72336 - COND, as `pthread_cond_wait' does, but it also bounds the duration
72337 - of the wait. If COND has not been signaled before time ABSTIME,
72338 - the mutex MUTEX is re-acquired and `pthread_cond_timedwait'
72339 - returns the error code `ETIMEDOUT'. The wait can also be
72340 - interrupted by a signal; in that case `pthread_cond_timedwait'
72341 - returns `EINTR'.
72343 - The ABSTIME parameter specifies an absolute time, with the same
72344 - origin as `time' and `gettimeofday': an ABSTIME of 0 corresponds
72345 - to 00:00:00 GMT, January 1, 1970.
72347 - - Function: int pthread_cond_destroy (pthread_cond_t *COND)
72348 - `pthread_cond_destroy' destroys the condition variable COND,
72349 - freeing the resources it might hold. If any threads are waiting
72350 - on the condition variable, `pthread_cond_destroy' leaves COND
72351 - untouched and returns `EBUSY'. Otherwise it returns 0, and COND
72352 - must not be used again until it is reinitialized.
72354 - In the LinuxThreads implementation, no resources are associated
72355 - with condition variables, so `pthread_cond_destroy' actually does
72356 - nothing.
72358 - `pthread_cond_wait' and `pthread_cond_timedwait' are cancellation
72359 -points. If a thread is canceled while suspended in one of these
72360 -functions, the thread immediately resumes execution, relocks the mutex
72361 -specified by MUTEX, and finally executes the cancellation.
72362 -Consequently, cleanup handlers are assured that MUTEX is locked when
72363 -they are called.
72365 - It is not safe to call the condition variable functions from a signal
72366 -handler. In particular, calling `pthread_cond_signal' or
72367 -`pthread_cond_broadcast' from a signal handler may deadlock the calling
72368 -thread.
72370 - Consider two shared variables X and Y, protected by the mutex MUT,
72371 -and a condition variable COND that is to be signaled whenever X becomes
72372 -greater than Y.
72374 - int x,y;
72375 - pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
72376 - pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
72378 - Waiting until X is greater than Y is performed as follows:
72380 - pthread_mutex_lock(&mut);
72381 - while (x <= y) {
72382 - pthread_cond_wait(&cond, &mut);
72384 - /* operate on x and y */
72385 - pthread_mutex_unlock(&mut);
72387 - Modifications on X and Y that may cause X to become greater than Y
72388 -should signal the condition if needed:
72390 - pthread_mutex_lock(&mut);
72391 - /* modify x and y */
72392 - if (x > y) pthread_cond_broadcast(&cond);
72393 - pthread_mutex_unlock(&mut);
72395 - If it can be proved that at most one waiting thread needs to be waken
72396 -up (for instance, if there are only two threads communicating through X
72397 -and Y), `pthread_cond_signal' can be used as a slightly more efficient
72398 -alternative to `pthread_cond_broadcast'. In doubt, use
72399 -`pthread_cond_broadcast'.
72401 - To wait for X to becomes greater than Y with a timeout of 5 seconds,
72402 -do:
72404 - struct timeval now;
72405 - struct timespec timeout;
72406 - int retcode;
72408 - pthread_mutex_lock(&mut);
72409 - gettimeofday(&now);
72410 - timeout.tv_sec = now.tv_sec + 5;
72411 - timeout.tv_nsec = now.tv_usec * 1000;
72412 - retcode = 0;
72413 - while (x <= y && retcode != ETIMEDOUT) {
72414 - retcode = pthread_cond_timedwait(&cond, &mut, &timeout);
72416 - if (retcode == ETIMEDOUT) {
72417 - /* timeout occurred */
72418 - } else {
72419 - /* operate on x and y */
72421 - pthread_mutex_unlock(&mut);
72423 - Condition attributes can be specified at condition creation time, by
72424 -passing a condition attribute object as second argument to
72425 -`pthread_cond_init'. Passing `NULL' is equivalent to passing a
72426 -condition attribute object with all attributes set to their default
72427 -values.
72429 - The LinuxThreads implementation supports no attributes for
72430 -conditions. The functions on condition attributes are included only for
72431 -compliance with the POSIX standard.
72433 - - Function: int pthread_condattr_init (pthread_condattr_t *ATTR)
72434 - - Function: int pthread_condattr_destroy (pthread_condattr_t *ATTR)
72435 - `pthread_condattr_init' initializes the condition attribute object
72436 - ATTR and fills it with default values for the attributes.
72437 - `pthread_condattr_destroy' destroys the condition attribute object
72438 - ATTR.
72440 - Both functions do nothing in the LinuxThreads implementation.
72442 - `pthread_condattr_init' and `pthread_condattr_destroy' always
72443 - return 0.
72445 -\x1f
72446 -File: libc.info, Node: POSIX Semaphores, Next: Thread-Specific Data, Prev: Condition Variables, Up: POSIX Threads
72448 -POSIX Semaphores
72449 -================
72451 - Semaphores are counters for resources shared between threads. The
72452 -basic operations on semaphores are: increment the counter atomically,
72453 -and wait until the counter is non-null and decrement it atomically.
72455 - Semaphores have a maximum value past which they cannot be
72456 -incremented. The macro `SEM_VALUE_MAX' is defined to be this maximum
72457 -value. In the GNU C library, `SEM_VALUE_MAX' is equal to `INT_MAX'
72458 -(*note Range of Type::), but it may be much smaller on other systems.
72460 - The pthreads library implements POSIX 1003.1b semaphores. These
72461 -should not be confused with System V semaphores (`ipc', `semctl' and
72462 -`semop').
72464 - All the semaphore functions and macros are defined in `semaphore.h'.
72466 - - Function: int sem_init (sem_t *SEM, int PSHARED, unsigned int VALUE)
72467 - `sem_init' initializes the semaphore object pointed to by SEM. The
72468 - count associated with the semaphore is set initially to VALUE. The
72469 - PSHARED argument indicates whether the semaphore is local to the
72470 - current process (PSHARED is zero) or is to be shared between
72471 - several processes (PSHARED is not zero).
72473 - On success `sem_init' returns 0. On failure it returns -1 and sets
72474 - ERRNO to one of the following values:
72476 - `EINVAL'
72477 - VALUE exceeds the maximal counter value `SEM_VALUE_MAX'
72479 - `ENOSYS'
72480 - PSHARED is not zero. LinuxThreads currently does not support
72481 - process-shared semaphores. (This will eventually change.)
72483 - - Function: int sem_destroy (sem_t * SEM)
72484 - `sem_destroy' destroys a semaphore object, freeing the resources it
72485 - might hold. If any threads are waiting on the semaphore when
72486 - `sem_destroy' is called, it fails and sets ERRNO to `EBUSY'.
72488 - In the LinuxThreads implementation, no resources are associated
72489 - with semaphore objects, thus `sem_destroy' actually does nothing
72490 - except checking that no thread is waiting on the semaphore. This
72491 - will change when process-shared semaphores are implemented.
72493 - - Function: int sem_wait (sem_t * SEM)
72494 - `sem_wait' suspends the calling thread until the semaphore pointed
72495 - to by SEM has non-zero count. It then atomically decreases the
72496 - semaphore count.
72498 - `sem_wait' is a cancellation point. It always returns 0.
72500 - - Function: int sem_trywait (sem_t * SEM)
72501 - `sem_trywait' is a non-blocking variant of `sem_wait'. If the
72502 - semaphore pointed to by SEM has non-zero count, the count is
72503 - atomically decreased and `sem_trywait' immediately returns 0. If
72504 - the semaphore count is zero, `sem_trywait' immediately returns -1
72505 - and sets errno to `EAGAIN'.
72507 - - Function: int sem_post (sem_t * SEM)
72508 - `sem_post' atomically increases the count of the semaphore pointed
72509 - to by SEM. This function never blocks.
72511 - On processors supporting atomic compare-and-swap (Intel 486,
72512 - Pentium and later, Alpha, PowerPC, MIPS II, Motorola 68k,
72513 - Ultrasparc), the `sem_post' function is can safely be called from
72514 - signal handlers. This is the only thread synchronization function
72515 - provided by POSIX threads that is async-signal safe. On the Intel
72516 - 386 and earlier Sparc chips, the current LinuxThreads
72517 - implementation of `sem_post' is not async-signal safe, because the
72518 - hardware does not support the required atomic operations.
72520 - `sem_post' always succeeds and returns 0, unless the semaphore
72521 - count would exceed `SEM_VALUE_MAX' after being incremented. In
72522 - that case `sem_post' returns -1 and sets ERRNO to `EINVAL'. The
72523 - semaphore count is left unchanged.
72525 - - Function: int sem_getvalue (sem_t * SEM, int * SVAL)
72526 - `sem_getvalue' stores in the location pointed to by SVAL the
72527 - current count of the semaphore SEM. It always returns 0.
72529 -\x1f
72530 -File: libc.info, Node: Thread-Specific Data, Next: Threads and Signal Handling, Prev: POSIX Semaphores, Up: POSIX Threads
72532 -Thread-Specific Data
72533 -====================
72535 - Programs often need global or static variables that have different
72536 -values in different threads. Since threads share one memory space, this
72537 -cannot be achieved with regular variables. Thread-specific data is the
72538 -POSIX threads answer to this need.
72540 - Each thread possesses a private memory block, the thread-specific
72541 -data area, or TSD area for short. This area is indexed by TSD keys. The
72542 -TSD area associates values of type `void *' to TSD keys. TSD keys are
72543 -common to all threads, but the value associated with a given TSD key can
72544 -be different in each thread.
72546 - For concreteness, the TSD areas can be viewed as arrays of `void *'
72547 -pointers, TSD keys as integer indices into these arrays, and the value
72548 -of a TSD key as the value of the corresponding array element in the
72549 -calling thread.
72551 - When a thread is created, its TSD area initially associates `NULL'
72552 -with all keys.
72554 - - Function: int pthread_key_create (pthread_key_t *KEY, void
72555 - (*destr_function) (void *))
72556 - `pthread_key_create' allocates a new TSD key. The key is stored in
72557 - the location pointed to by KEY. There is a limit of
72558 - `PTHREAD_KEYS_MAX' on the number of keys allocated at a given
72559 - time. The value initially associated with the returned key is
72560 - `NULL' in all currently executing threads.
72562 - The DESTR_FUNCTION argument, if not `NULL', specifies a destructor
72563 - function associated with the key. When a thread terminates via
72564 - `pthread_exit' or by cancellation, DESTR_FUNCTION is called on the
72565 - value associated with the key in that thread. The DESTR_FUNCTION
72566 - is not called if a key is deleted with `pthread_key_delete' or a
72567 - value is changed with `pthread_setspecific'. The order in which
72568 - destructor functions are called at thread termination time is
72569 - unspecified.
72571 - Before the destructor function is called, the `NULL' value is
72572 - associated with the key in the current thread. A destructor
72573 - function might, however, re-associate non-`NULL' values to that
72574 - key or some other key. To deal with this, if after all the
72575 - destructors have been called for all non-`NULL' values, there are
72576 - still some non-`NULL' values with associated destructors, then the
72577 - process is repeated. The LinuxThreads implementation stops the
72578 - process after `PTHREAD_DESTRUCTOR_ITERATIONS' iterations, even if
72579 - some non-`NULL' values with associated descriptors remain. Other
72580 - implementations may loop indefinitely.
72582 - `pthread_key_create' returns 0 unless `PTHREAD_KEYS_MAX' keys have
72583 - already been allocated, in which case it fails and returns
72584 - `EAGAIN'.
72586 - - Function: int pthread_key_delete (pthread_key_t KEY)
72587 - `pthread_key_delete' deallocates a TSD key. It does not check
72588 - whether non-`NULL' values are associated with that key in the
72589 - currently executing threads, nor call the destructor function
72590 - associated with the key.
72592 - If there is no such key KEY, it returns `EINVAL'. Otherwise it
72593 - returns 0.
72595 - - Function: int pthread_setspecific (pthread_key_t KEY, const void
72596 - *POINTER)
72597 - `pthread_setspecific' changes the value associated with KEY in the
72598 - calling thread, storing the given POINTER instead.
72600 - If there is no such key KEY, it returns `EINVAL'. Otherwise it
72601 - returns 0.
72603 - - Function: void * pthread_getspecific (pthread_key_t KEY)
72604 - `pthread_getspecific' returns the value currently associated with
72605 - KEY in the calling thread.
72607 - If there is no such key KEY, it returns `NULL'.
72609 - The following code fragment allocates a thread-specific array of 100
72610 -characters, with automatic reclaimation at thread exit:
72612 - /* Key for the thread-specific buffer */
72613 - static pthread_key_t buffer_key;
72615 - /* Once-only initialisation of the key */
72616 - static pthread_once_t buffer_key_once = PTHREAD_ONCE_INIT;
72618 - /* Allocate the thread-specific buffer */
72619 - void buffer_alloc(void)
72621 - pthread_once(&buffer_key_once, buffer_key_alloc);
72622 - pthread_setspecific(buffer_key, malloc(100));
72625 - /* Return the thread-specific buffer */
72626 - char * get_buffer(void)
72628 - return (char *) pthread_getspecific(buffer_key);
72631 - /* Allocate the key */
72632 - static void buffer_key_alloc()
72634 - pthread_key_create(&buffer_key, buffer_destroy);
72637 - /* Free the thread-specific buffer */
72638 - static void buffer_destroy(void * buf)
72640 - free(buf);
72643 -\x1f
72644 -File: libc.info, Node: Threads and Signal Handling, Next: Threads and Fork, Prev: Thread-Specific Data, Up: POSIX Threads
72646 -Threads and Signal Handling
72647 -===========================
72649 - - Function: int pthread_sigmask (int HOW, const sigset_t *NEWMASK,
72650 - sigset_t *OLDMASK)
72651 - `pthread_sigmask' changes the signal mask for the calling thread as
72652 - described by the HOW and NEWMASK arguments. If OLDMASK is not
72653 - `NULL', the previous signal mask is stored in the location pointed
72654 - to by OLDMASK.
72656 - The meaning of the HOW and NEWMASK arguments is the same as for
72657 - `sigprocmask'. If HOW is `SIG_SETMASK', the signal mask is set to
72658 - NEWMASK. If HOW is `SIG_BLOCK', the signals specified to NEWMASK
72659 - are added to the current signal mask. If HOW is `SIG_UNBLOCK',
72660 - the signals specified to NEWMASK are removed from the current
72661 - signal mask.
72663 - Recall that signal masks are set on a per-thread basis, but signal
72664 - actions and signal handlers, as set with `sigaction', are shared
72665 - between all threads.
72667 - The `pthread_sigmask' function returns 0 on success, and one of the
72668 - following error codes on error:
72669 - `EINVAL'
72670 - HOW is not one of `SIG_SETMASK', `SIG_BLOCK', or `SIG_UNBLOCK'
72672 - `EFAULT'
72673 - NEWMASK or OLDMASK point to invalid addresses
72675 - - Function: int pthread_kill (pthread_t THREAD, int SIGNO)
72676 - `pthread_kill' sends signal number SIGNO to the thread THREAD.
72677 - The signal is delivered and handled as described in *Note Signal
72678 - Handling::.
72680 - `pthread_kill' returns 0 on success, one of the following error
72681 - codes on error:
72682 - `EINVAL'
72683 - SIGNO is not a valid signal number
72685 - `ESRCH'
72686 - The thread THREAD does not exist (e.g. it has already
72687 - terminated)
72689 - - Function: int sigwait (const sigset_t *SET, int *SIG)
72690 - `sigwait' suspends the calling thread until one of the signals in
72691 - SET is delivered to the calling thread. It then stores the number
72692 - of the signal received in the location pointed to by SIG and
72693 - returns. The signals in SET must be blocked and not ignored on
72694 - entrance to `sigwait'. If the delivered signal has a signal handler
72695 - function attached, that function is _not_ called.
72697 - `sigwait' is a cancellation point. It always returns 0.
72699 - For `sigwait' to work reliably, the signals being waited for must be
72700 -blocked in all threads, not only in the calling thread, since otherwise
72701 -the POSIX semantics for signal delivery do not guarantee that it's the
72702 -thread doing the `sigwait' that will receive the signal. The best way
72703 -to achieve this is block those signals before any threads are created,
72704 -and never unblock them in the program other than by calling `sigwait'.
72706 - Signal handling in LinuxThreads departs significantly from the POSIX
72707 -standard. According to the standard, "asynchronous" (external) signals
72708 -are addressed to the whole process (the collection of all threads),
72709 -which then delivers them to one particular thread. The thread that
72710 -actually receives the signal is any thread that does not currently block
72711 -the signal.
72713 - In LinuxThreads, each thread is actually a kernel process with its
72714 -own PID, so external signals are always directed to one particular
72715 -thread. If, for instance, another thread is blocked in `sigwait' on
72716 -that signal, it will not be restarted.
72718 - The LinuxThreads implementation of `sigwait' installs dummy signal
72719 -handlers for the signals in SET for the duration of the wait. Since
72720 -signal handlers are shared between all threads, other threads must not
72721 -attach their own signal handlers to these signals, or alternatively
72722 -they should all block these signals (which is recommended anyway).
72724 diff -u -udbrN glibc-2.3.2/manual/libc.info-51 glibc-2.3.2-200304020432/manual/libc.info-51
72725 --- glibc-2.3.2/manual/libc.info-51 Sat Mar 1 02:39:41 2003
72726 +++ glibc-2.3.2-200304020432/manual/libc.info-51 Thu Jan 1 01:00:00 1970
72727 @@ -1,1113 +0,0 @@
72728 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
72730 -INFO-DIR-SECTION GNU libraries
72731 -START-INFO-DIR-ENTRY
72732 -* Libc: (libc). C library.
72733 -END-INFO-DIR-ENTRY
72735 - This file documents the GNU C library.
72737 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
72738 -Reference Manual', for Version 2.3.x.
72740 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
72741 -Free Software Foundation, Inc.
72743 - Permission is granted to copy, distribute and/or modify this document
72744 -under the terms of the GNU Free Documentation License, Version 1.1 or
72745 -any later version published by the Free Software Foundation; with the
72746 -Invariant Sections being "Free Software Needs Free Documentation" and
72747 -"GNU Lesser General Public License", the Front-Cover texts being (a)
72748 -(see below), and with the Back-Cover Texts being (b) (see below). A
72749 -copy of the license is included in the section entitled "GNU Free
72750 -Documentation License".
72752 - (a) The FSF's Front-Cover Text is:
72754 - A GNU Manual
72756 - (b) The FSF's Back-Cover Text is:
72758 - You have freedom to copy and modify this GNU Manual, like GNU
72759 -software. Copies published by the Free Software Foundation raise
72760 -funds for GNU development.
72762 -\x1f
72763 -File: libc.info, Node: Threads and Fork, Next: Streams and Fork, Prev: Threads and Signal Handling, Up: POSIX Threads
72765 -Threads and Fork
72766 -================
72768 - It's not intuitively obvious what should happen when a
72769 -multi-threaded POSIX process calls `fork'. Not only are the semantics
72770 -tricky, but you may need to write code that does the right thing at
72771 -fork time even if that code doesn't use the `fork' function. Moreover,
72772 -you need to be aware of interaction between `fork' and some library
72773 -features like `pthread_once' and stdio streams.
72775 - When `fork' is called by one of the threads of a process, it creates
72776 -a new process which is copy of the calling process. Effectively, in
72777 -addition to copying certain system objects, the function takes a
72778 -snapshot of the memory areas of the parent process, and creates
72779 -identical areas in the child. To make matters more complicated, with
72780 -threads it's possible for two or more threads to concurrently call fork
72781 -to create two or more child processes.
72783 - The child process has a copy of the address space of the parent, but
72784 -it does not inherit any of its threads. Execution of the child process
72785 -is carried out by a new thread which returns from `fork' function with
72786 -a return value of zero; it is the only thread in the child process.
72787 -Because threads are not inherited across fork, issues arise. At the
72788 -time of the call to `fork', threads in the parent process other than
72789 -the one calling `fork' may have been executing critical regions of
72790 -code. As a result, the child process may get a copy of objects that
72791 -are not in a well-defined state. This potential problem affects all
72792 -components of the program.
72794 - Any program component which will continue being used in a child
72795 -process must correctly handle its state during `fork'. For this
72796 -purpose, the POSIX interface provides the special function
72797 -`pthread_atfork' for installing pointers to handler functions which are
72798 -called from within `fork'.
72800 - - Function: int pthread_atfork (void (*PREPARE)(void), void
72801 - (*PARENT)(void), void (*CHILD)(void))
72802 - `pthread_atfork' registers handler functions to be called just
72803 - before and just after a new process is created with `fork'. The
72804 - PREPARE handler will be called from the parent process, just
72805 - before the new process is created. The PARENT handler will be
72806 - called from the parent process, just before `fork' returns. The
72807 - CHILD handler will be called from the child process, just before
72808 - `fork' returns.
72810 - `pthread_atfork' returns 0 on success and a non-zero error code on
72811 - error.
72813 - One or more of the three handlers PREPARE, PARENT and CHILD can be
72814 - given as `NULL', meaning that no handler needs to be called at the
72815 - corresponding point.
72817 - `pthread_atfork' can be called several times to install several
72818 - sets of handlers. At `fork' time, the PREPARE handlers are called
72819 - in LIFO order (last added with `pthread_atfork', first called
72820 - before `fork'), while the PARENT and CHILD handlers are called in
72821 - FIFO order (first added, first called).
72823 - If there is insufficient memory available to register the handlers,
72824 - `pthread_atfork' fails and returns `ENOMEM'. Otherwise it returns
72825 - 0.
72827 - The functions `fork' and `pthread_atfork' must not be regarded as
72828 - reentrant from the context of the handlers. That is to say, if a
72829 - `pthread_atfork' handler invoked from within `fork' calls
72830 - `pthread_atfork' or `fork', the behavior is undefined.
72832 - Registering a triplet of handlers is an atomic operation with
72833 - respect to fork. If new handlers are registered at about the same
72834 - time as a fork occurs, either all three handlers will be called,
72835 - or none of them will be called.
72837 - The handlers are inherited by the child process, and there is no
72838 - way to remove them, short of using `exec' to load a new pocess
72839 - image.
72842 - To understand the purpose of `pthread_atfork', recall that `fork'
72843 -duplicates the whole memory space, including mutexes in their current
72844 -locking state, but only the calling thread: other threads are not
72845 -running in the child process. The mutexes are not usable after the
72846 -`fork' and must be initialized with `pthread_mutex_init' in the child
72847 -process. This is a limitation of the current implementation and might
72848 -or might not be present in future versions.
72850 - To avoid this, install handlers with `pthread_atfork' as follows:
72851 -have the PREPARE handler lock the mutexes (in locking order), and the
72852 -PARENT handler unlock the mutexes. The CHILD handler should reset the
72853 -mutexes using `pthread_mutex_init', as well as any other
72854 -synchronization objects such as condition variables.
72856 - Locking the global mutexes before the fork ensures that all other
72857 -threads are locked out of the critical regions of code protected by
72858 -those mutexes. Thus when `fork' takes a snapshot of the parent's
72859 -address space, that snapshot will copy valid, stable data. Resetting
72860 -the synchronization objects in the child process will ensure they are
72861 -properly cleansed of any artifacts from the threading subsystem of the
72862 -parent process. For example, a mutex may inherit a wait queue of
72863 -threads waiting for the lock; this wait queue makes no sense in the
72864 -child process. Initializing the mutex takes care of this.
72866 -\x1f
72867 -File: libc.info, Node: Streams and Fork, Next: Miscellaneous Thread Functions, Prev: Threads and Fork, Up: POSIX Threads
72869 -Streams and Fork
72870 -================
72872 - The GNU standard I/O library has an internal mutex which guards the
72873 -internal linked list of all standard C FILE objects. This mutex is
72874 -properly taken care of during `fork' so that the child receives an
72875 -intact copy of the list. This allows the `fopen' function, and related
72876 -stream-creating functions, to work correctly in the child process,
72877 -since these functions need to insert into the list.
72879 - However, the individual stream locks are not completely taken care
72880 -of. Thus unless the multithreaded application takes special
72881 -precautions in its use of `fork', the child process might not be able
72882 -to safely use the streams that it inherited from the parent. In
72883 -general, for any given open stream in the parent that is to be used by
72884 -the child process, the application must ensure that that stream is not
72885 -in use by another thread when `fork' is called. Otherwise an
72886 -inconsistent copy of the stream object be produced. An easy way to
72887 -ensure this is to use `flockfile' to lock the stream prior to calling
72888 -`fork' and then unlock it with `funlockfile' inside the parent process,
72889 -provided that the parent's threads properly honor these locks. Nothing
72890 -special needs to be done in the child process, since the library
72891 -internally resets all stream locks.
72893 - Note that the stream locks are not shared between the parent and
72894 -child. For example, even if you ensure that, say, the stream `stdout'
72895 -is properly treated and can be safely used in the child, the stream
72896 -locks do not provide an exclusion mechanism between the parent and
72897 -child. If both processes write to `stdout', strangely interleaved
72898 -output may result regardless of the explicit use of `flockfile' or
72899 -implicit locks.
72901 - Also note that these provisions are a GNU extension; other systems
72902 -might not provide any way for streams to be used in the child of a
72903 -multithreaded process. POSIX requires that such a child process
72904 -confines itself to calling only asynchronous safe functions, which
72905 -excludes much of the library, including standard I/O.
72907 -\x1f
72908 -File: libc.info, Node: Miscellaneous Thread Functions, Prev: Streams and Fork, Up: POSIX Threads
72910 -Miscellaneous Thread Functions
72911 -==============================
72913 - - Function: pthread_t pthread_self (VOID)
72914 - `pthread_self' returns the thread identifier for the calling
72915 - thread.
72917 - - Function: int pthread_equal (pthread_t thread1, pthread_t thread2)
72918 - `pthread_equal' determines if two thread identifiers refer to the
72919 - same thread.
72921 - A non-zero value is returned if THREAD1 and THREAD2 refer to the
72922 - same thread. Otherwise, 0 is returned.
72924 - - Function: int pthread_detach (pthread_t TH)
72925 - `pthread_detach' puts the thread TH in the detached state. This
72926 - guarantees that the memory resources consumed by TH will be freed
72927 - immediately when TH terminates. However, this prevents other
72928 - threads from synchronizing on the termination of TH using
72929 - `pthread_join'.
72931 - A thread can be created initially in the detached state, using the
72932 - `detachstate' attribute to `pthread_create'. In contrast,
72933 - `pthread_detach' applies to threads created in the joinable state,
72934 - and which need to be put in the detached state later.
72936 - After `pthread_detach' completes, subsequent attempts to perform
72937 - `pthread_join' on TH will fail. If another thread is already
72938 - joining the thread TH at the time `pthread_detach' is called,
72939 - `pthread_detach' does nothing and leaves TH in the joinable state.
72941 - On success, 0 is returned. On error, one of the following codes is
72942 - returned:
72943 - `ESRCH'
72944 - No thread could be found corresponding to that specified by TH
72946 - `EINVAL'
72947 - The thread TH is already in the detached state
72949 - - Function: void pthread_kill_other_threads_np (VOID)
72950 - `pthread_kill_other_threads_np' is a non-portable LinuxThreads
72951 - extension. It causes all threads in the program to terminate
72952 - immediately, except the calling thread which proceeds normally. It
72953 - is intended to be called just before a thread calls one of the
72954 - `exec' functions, e.g. `execve'.
72956 - Termination of the other threads is not performed through
72957 - `pthread_cancel' and completely bypasses the cancellation
72958 - mechanism. Hence, the current settings for cancellation state and
72959 - cancellation type are ignored, and the cleanup handlers are not
72960 - executed in the terminated threads.
72962 - According to POSIX 1003.1c, a successful `exec*' in one of the
72963 - threads should automatically terminate all other threads in the
72964 - program. This behavior is not yet implemented in LinuxThreads.
72965 - Calling `pthread_kill_other_threads_np' before `exec*' achieves
72966 - much of the same behavior, except that if `exec*' ultimately
72967 - fails, then all other threads are already killed.
72969 - - Function: int pthread_once (pthread_once_t *once_CONTROL, void
72970 - (*INIT_ROUTINE) (void))
72971 - The purpose of `pthread_once' is to ensure that a piece of
72972 - initialization code is executed at most once. The ONCE_CONTROL
72973 - argument points to a static or extern variable statically
72974 - initialized to `PTHREAD_ONCE_INIT'.
72976 - The first time `pthread_once' is called with a given ONCE_CONTROL
72977 - argument, it calls INIT_ROUTINE with no argument and changes the
72978 - value of the ONCE_CONTROL variable to record that initialization
72979 - has been performed. Subsequent calls to `pthread_once' with the
72980 - same `once_control' argument do nothing.
72982 - If a thread is cancelled while executing INIT_ROUTINE the state of
72983 - the ONCE_CONTROL variable is reset so that a future call to
72984 - `pthread_once' will call the routine again.
72986 - If the process forks while one or more threads are executing
72987 - `pthread_once' initialization routines, the states of their
72988 - respective ONCE_CONTROL variables will appear to be reset in the
72989 - child process so that if the child calls `pthread_once', the
72990 - routines will be executed.
72992 - `pthread_once' always returns 0.
72994 - - Function: int pthread_setschedparam (pthread_t target_THREAD, int
72995 - POLICY, const struct sched_param *PARAM)
72996 - `pthread_setschedparam' sets the scheduling parameters for the
72997 - thread TARGET_THREAD as indicated by POLICY and PARAM. POLICY can
72998 - be either `SCHED_OTHER' (regular, non-realtime scheduling),
72999 - `SCHED_RR' (realtime, round-robin) or `SCHED_FIFO' (realtime,
73000 - first-in first-out). PARAM specifies the scheduling priority for
73001 - the two realtime policies. See `sched_setpolicy' for more
73002 - information on scheduling policies.
73004 - The realtime scheduling policies `SCHED_RR' and `SCHED_FIFO' are
73005 - available only to processes with superuser privileges.
73007 - On success, `pthread_setschedparam' returns 0. On error it returns
73008 - one of the following codes:
73009 - `EINVAL'
73010 - POLICY is not one of `SCHED_OTHER', `SCHED_RR', `SCHED_FIFO',
73011 - or the priority value specified by PARAM is not valid for the
73012 - specified policy
73014 - `EPERM'
73015 - Realtime scheduling was requested but the calling process
73016 - does not have sufficient privileges.
73018 - `ESRCH'
73019 - The TARGET_THREAD is invalid or has already terminated
73021 - `EFAULT'
73022 - PARAM points outside the process memory space
73024 - - Function: int pthread_getschedparam (pthread_t target_THREAD, int
73025 - *POLICY, struct sched_param *PARAM)
73026 - `pthread_getschedparam' retrieves the scheduling policy and
73027 - scheduling parameters for the thread TARGET_THREAD and stores them
73028 - in the locations pointed to by POLICY and PARAM, respectively.
73030 - `pthread_getschedparam' returns 0 on success, or one of the
73031 - following error codes on failure:
73032 - `ESRCH'
73033 - The TARGET_THREAD is invalid or has already terminated.
73035 - `EFAULT'
73036 - POLICY or PARAM point outside the process memory space.
73039 - - Function: int pthread_setconcurrency (int LEVEL)
73040 - `pthread_setconcurrency' is unused in LinuxThreads due to the lack
73041 - of a mapping of user threads to kernel threads. It exists for
73042 - source compatibility. It does store the value LEVEL so that it
73043 - can be returned by a subsequent call to `pthread_getconcurrency'.
73044 - It takes no other action however.
73046 - - Function: int pthread_getconcurrency ()
73047 - `pthread_getconcurrency' is unused in LinuxThreads due to the lack
73048 - of a mapping of user threads to kernel threads. It exists for
73049 - source compatibility. However, it will return the value that was
73050 - set by the last call to `pthread_setconcurrency'.
73052 -\x1f
73053 -File: libc.info, Node: Language Features, Next: Library Summary, Prev: POSIX Threads, Up: Top
73055 -C Language Facilities in the Library
73056 -************************************
73058 - Some of the facilities implemented by the C library really should be
73059 -thought of as parts of the C language itself. These facilities ought to
73060 -be documented in the C Language Manual, not in the library manual; but
73061 -since we don't have the language manual yet, and documentation for these
73062 -features has been written, we are publishing it here.
73064 -* Menu:
73066 -* Consistency Checking:: Using `assert' to abort if
73067 - something ``impossible'' happens.
73068 -* Variadic Functions:: Defining functions with varying numbers
73069 - of args.
73070 -* Null Pointer Constant:: The macro `NULL'.
73071 -* Important Data Types:: Data types for object sizes.
73072 -* Data Type Measurements:: Parameters of data type representations.
73074 -\x1f
73075 -File: libc.info, Node: Consistency Checking, Next: Variadic Functions, Up: Language Features
73077 -Explicitly Checking Internal Consistency
73078 -========================================
73080 - When you're writing a program, it's often a good idea to put in
73081 -checks at strategic places for "impossible" errors or violations of
73082 -basic assumptions. These kinds of checks are helpful in debugging
73083 -problems with the interfaces between different parts of the program,
73084 -for example.
73086 - The `assert' macro, defined in the header file `assert.h', provides
73087 -a convenient way to abort the program while printing a message about
73088 -where in the program the error was detected.
73090 - Once you think your program is debugged, you can disable the error
73091 -checks performed by the `assert' macro by recompiling with the macro
73092 -`NDEBUG' defined. This means you don't actually have to change the
73093 -program source code to disable these checks.
73095 - But disabling these consistency checks is undesirable unless they
73096 -make the program significantly slower. All else being equal, more error
73097 -checking is good no matter who is running the program. A wise user
73098 -would rather have a program crash, visibly, than have it return nonsense
73099 -without indicating anything might be wrong.
73101 - - Macro: void assert (int EXPRESSION)
73102 - Verify the programmer's belief that EXPRESSION is nonzero at this
73103 - point in the program.
73105 - If `NDEBUG' is not defined, `assert' tests the value of
73106 - EXPRESSION. If it is false (zero), `assert' aborts the program
73107 - (*note Aborting a Program::) after printing a message of the form:
73109 - `FILE':LINENUM: FUNCTION: Assertion `EXPRESSION' failed.
73111 - on the standard error stream `stderr' (*note Standard Streams::).
73112 - The filename and line number are taken from the C preprocessor
73113 - macros `__FILE__' and `__LINE__' and specify where the call to
73114 - `assert' was made. When using the GNU C compiler, the name of the
73115 - function which calls `assert' is taken from the built-in variable
73116 - `__PRETTY_FUNCTION__'; with older compilers, the function name and
73117 - following colon are omitted.
73119 - If the preprocessor macro `NDEBUG' is defined before `assert.h' is
73120 - included, the `assert' macro is defined to do absolutely nothing.
73122 - *Warning:* Even the argument expression EXPRESSION is not
73123 - evaluated if `NDEBUG' is in effect. So never use `assert' with
73124 - arguments that involve side effects. For example, `assert (++i >
73125 - 0);' is a bad idea, because `i' will not be incremented if
73126 - `NDEBUG' is defined.
73128 - Sometimes the "impossible" condition you want to check for is an
73129 -error return from an operating system function. Then it is useful to
73130 -display not only where the program crashes, but also what error was
73131 -returned. The `assert_perror' macro makes this easy.
73133 - - Macro: void assert_perror (int ERRNUM)
73134 - Similar to `assert', but verifies that ERRNUM is zero.
73136 - If `NDEBUG' is not defined, `assert_perror' tests the value of
73137 - ERRNUM. If it is nonzero, `assert_perror' aborts the program
73138 - after printing a message of the form:
73140 - `FILE':LINENUM: FUNCTION: ERROR TEXT
73142 - on the standard error stream. The file name, line number, and
73143 - function name are as for `assert'. The error text is the result of
73144 - `strerror (ERRNUM)'. *Note Error Messages::.
73146 - Like `assert', if `NDEBUG' is defined before `assert.h' is
73147 - included, the `assert_perror' macro does absolutely nothing. It
73148 - does not evaluate the argument, so ERRNUM should not have any side
73149 - effects. It is best for ERRNUM to be just a simple variable
73150 - reference; often it will be `errno'.
73152 - This macro is a GNU extension.
73154 - *Usage note:* The `assert' facility is designed for detecting
73155 -_internal inconsistency_; it is not suitable for reporting invalid
73156 -input or improper usage by the _user_ of the program.
73158 - The information in the diagnostic messages printed by the `assert'
73159 -and `assert_perror' macro is intended to help you, the programmer,
73160 -track down the cause of a bug, but is not really useful for telling a
73161 -user of your program why his or her input was invalid or why a command
73162 -could not be carried out. What's more, your program should not abort
73163 -when given invalid input, as `assert' would do--it should exit with
73164 -nonzero status (*note Exit Status::) after printing its error messages,
73165 -or perhaps read another command or move on to the next input file.
73167 - *Note Error Messages::, for information on printing error messages
73168 -for problems that _do not_ represent bugs in the program.
73170 -\x1f
73171 -File: libc.info, Node: Variadic Functions, Next: Null Pointer Constant, Prev: Consistency Checking, Up: Language Features
73173 -Variadic Functions
73174 -==================
73176 - ISO C defines a syntax for declaring a function to take a variable
73177 -number or type of arguments. (Such functions are referred to as
73178 -"varargs functions" or "variadic functions".) However, the language
73179 -itself provides no mechanism for such functions to access their
73180 -non-required arguments; instead, you use the variable arguments macros
73181 -defined in `stdarg.h'.
73183 - This section describes how to declare variadic functions, how to
73184 -write them, and how to call them properly.
73186 - *Compatibility Note:* Many older C dialects provide a similar, but
73187 -incompatible, mechanism for defining functions with variable numbers of
73188 -arguments, using `varargs.h'.
73190 -* Menu:
73192 -* Why Variadic:: Reasons for making functions take
73193 - variable arguments.
73194 -* How Variadic:: How to define and call variadic functions.
73195 -* Variadic Example:: A complete example.
73197 -\x1f
73198 -File: libc.info, Node: Why Variadic, Next: How Variadic, Up: Variadic Functions
73200 -Why Variadic Functions are Used
73201 --------------------------------
73203 - Ordinary C functions take a fixed number of arguments. When you
73204 -define a function, you specify the data type for each argument. Every
73205 -call to the function should supply the expected number of arguments,
73206 -with types that can be converted to the specified ones. Thus, if the
73207 -function `foo' is declared with `int foo (int, char *);' then you must
73208 -call it with two arguments, a number (any kind will do) and a string
73209 -pointer.
73211 - But some functions perform operations that can meaningfully accept an
73212 -unlimited number of arguments.
73214 - In some cases a function can handle any number of values by
73215 -operating on all of them as a block. For example, consider a function
73216 -that allocates a one-dimensional array with `malloc' to hold a
73217 -specified set of values. This operation makes sense for any number of
73218 -values, as long as the length of the array corresponds to that number.
73219 -Without facilities for variable arguments, you would have to define a
73220 -separate function for each possible array size.
73222 - The library function `printf' (*note Formatted Output::) is an
73223 -example of another class of function where variable arguments are
73224 -useful. This function prints its arguments (which can vary in type as
73225 -well as number) under the control of a format template string.
73227 - These are good reasons to define a "variadic" function which can
73228 -handle as many arguments as the caller chooses to pass.
73230 - Some functions such as `open' take a fixed set of arguments, but
73231 -occasionally ignore the last few. Strict adherence to ISO C requires
73232 -these functions to be defined as variadic; in practice, however, the GNU
73233 -C compiler and most other C compilers let you define such a function to
73234 -take a fixed set of arguments--the most it can ever use--and then only
73235 -_declare_ the function as variadic (or not declare its arguments at
73236 -all!).
73238 -\x1f
73239 -File: libc.info, Node: How Variadic, Next: Variadic Example, Prev: Why Variadic, Up: Variadic Functions
73241 -How Variadic Functions are Defined and Used
73242 --------------------------------------------
73244 - Defining and using a variadic function involves three steps:
73246 - * _Define_ the function as variadic, using an ellipsis (`...') in
73247 - the argument list, and using special macros to access the variable
73248 - arguments. *Note Receiving Arguments::.
73250 - * _Declare_ the function as variadic, using a prototype with an
73251 - ellipsis (`...'), in all the files which call it. *Note Variadic
73252 - Prototypes::.
73254 - * _Call_ the function by writing the fixed arguments followed by the
73255 - additional variable arguments. *Note Calling Variadics::.
73257 -* Menu:
73259 -* Variadic Prototypes:: How to make a prototype for a function
73260 - with variable arguments.
73261 -* Receiving Arguments:: Steps you must follow to access the
73262 - optional argument values.
73263 -* How Many Arguments:: How to decide whether there are more arguments.
73264 -* Calling Variadics:: Things you need to know about calling
73265 - variable arguments functions.
73266 -* Argument Macros:: Detailed specification of the macros
73267 - for accessing variable arguments.
73268 -* Old Varargs:: The pre-ISO way of defining variadic functions.
73270 -\x1f
73271 -File: libc.info, Node: Variadic Prototypes, Next: Receiving Arguments, Up: How Variadic
73273 -Syntax for Variable Arguments
73274 -.............................
73276 - A function that accepts a variable number of arguments must be
73277 -declared with a prototype that says so. You write the fixed arguments
73278 -as usual, and then tack on `...' to indicate the possibility of
73279 -additional arguments. The syntax of ISO C requires at least one fixed
73280 -argument before the `...'. For example,
73282 - int
73283 - func (const char *a, int b, ...)
73285 - ...
73288 -defines a function `func' which returns an `int' and takes two required
73289 -arguments, a `const char *' and an `int'. These are followed by any
73290 -number of anonymous arguments.
73292 - *Portability note:* For some C compilers, the last required argument
73293 -must not be declared `register' in the function definition.
73294 -Furthermore, this argument's type must be "self-promoting": that is,
73295 -the default promotions must not change its type. This rules out array
73296 -and function types, as well as `float', `char' (whether signed or not)
73297 -and `short int' (whether signed or not). This is actually an ISO C
73298 -requirement.
73300 -\x1f
73301 -File: libc.info, Node: Receiving Arguments, Next: How Many Arguments, Prev: Variadic Prototypes, Up: How Variadic
73303 -Receiving the Argument Values
73304 -.............................
73306 - Ordinary fixed arguments have individual names, and you can use these
73307 -names to access their values. But optional arguments have no
73308 -names--nothing but `...'. How can you access them?
73310 - The only way to access them is sequentially, in the order they were
73311 -written, and you must use special macros from `stdarg.h' in the
73312 -following three step process:
73314 - 1. You initialize an argument pointer variable of type `va_list' using
73315 - `va_start'. The argument pointer when initialized points to the
73316 - first optional argument.
73318 - 2. You access the optional arguments by successive calls to `va_arg'.
73319 - The first call to `va_arg' gives you the first optional argument,
73320 - the next call gives you the second, and so on.
73322 - You can stop at any time if you wish to ignore any remaining
73323 - optional arguments. It is perfectly all right for a function to
73324 - access fewer arguments than were supplied in the call, but you
73325 - will get garbage values if you try to access too many arguments.
73327 - 3. You indicate that you are finished with the argument pointer
73328 - variable by calling `va_end'.
73330 - (In practice, with most C compilers, calling `va_end' does nothing.
73331 - This is always true in the GNU C compiler. But you might as well
73332 - call `va_end' just in case your program is someday compiled with a
73333 - peculiar compiler.)
73335 - *Note Argument Macros::, for the full definitions of `va_start',
73336 -`va_arg' and `va_end'.
73338 - Steps 1 and 3 must be performed in the function that accepts the
73339 -optional arguments. However, you can pass the `va_list' variable as an
73340 -argument to another function and perform all or part of step 2 there.
73342 - You can perform the entire sequence of three steps multiple times
73343 -within a single function invocation. If you want to ignore the optional
73344 -arguments, you can do these steps zero times.
73346 - You can have more than one argument pointer variable if you like.
73347 -You can initialize each variable with `va_start' when you wish, and
73348 -then you can fetch arguments with each argument pointer as you wish.
73349 -Each argument pointer variable will sequence through the same set of
73350 -argument values, but at its own pace.
73352 - *Portability note:* With some compilers, once you pass an argument
73353 -pointer value to a subroutine, you must not keep using the same
73354 -argument pointer value after that subroutine returns. For full
73355 -portability, you should just pass it to `va_end'. This is actually an
73356 -ISO C requirement, but most ANSI C compilers work happily regardless.
73358 -\x1f
73359 -File: libc.info, Node: How Many Arguments, Next: Calling Variadics, Prev: Receiving Arguments, Up: How Variadic
73361 -How Many Arguments Were Supplied
73362 -................................
73364 - There is no general way for a function to determine the number and
73365 -type of the optional arguments it was called with. So whoever designs
73366 -the function typically designs a convention for the caller to specify
73367 -the number and type of arguments. It is up to you to define an
73368 -appropriate calling convention for each variadic function, and write
73369 -all calls accordingly.
73371 - One kind of calling convention is to pass the number of optional
73372 -arguments as one of the fixed arguments. This convention works provided
73373 -all of the optional arguments are of the same type.
73375 - A similar alternative is to have one of the required arguments be a
73376 -bit mask, with a bit for each possible purpose for which an optional
73377 -argument might be supplied. You would test the bits in a predefined
73378 -sequence; if the bit is set, fetch the value of the next argument,
73379 -otherwise use a default value.
73381 - A required argument can be used as a pattern to specify both the
73382 -number and types of the optional arguments. The format string argument
73383 -to `printf' is one example of this (*note Formatted Output Functions::).
73385 - Another possibility is to pass an "end marker" value as the last
73386 -optional argument. For example, for a function that manipulates an
73387 -arbitrary number of pointer arguments, a null pointer might indicate the
73388 -end of the argument list. (This assumes that a null pointer isn't
73389 -otherwise meaningful to the function.) The `execl' function works in
73390 -just this way; see *Note Executing a File::.
73392 -\x1f
73393 -File: libc.info, Node: Calling Variadics, Next: Argument Macros, Prev: How Many Arguments, Up: How Variadic
73395 -Calling Variadic Functions
73396 -..........................
73398 - You don't have to do anything special to call a variadic function.
73399 -Just put the arguments (required arguments, followed by optional ones)
73400 -inside parentheses, separated by commas, as usual. But you must declare
73401 -the function with a prototype and know how the argument values are
73402 -converted.
73404 - In principle, functions that are _defined_ to be variadic must also
73405 -be _declared_ to be variadic using a function prototype whenever you
73406 -call them. (*Note Variadic Prototypes::, for how.) This is because
73407 -some C compilers use a different calling convention to pass the same set
73408 -of argument values to a function depending on whether that function
73409 -takes variable arguments or fixed arguments.
73411 - In practice, the GNU C compiler always passes a given set of argument
73412 -types in the same way regardless of whether they are optional or
73413 -required. So, as long as the argument types are self-promoting, you can
73414 -safely omit declaring them. Usually it is a good idea to declare the
73415 -argument types for variadic functions, and indeed for all functions.
73416 -But there are a few functions which it is extremely convenient not to
73417 -have to declare as variadic--for example, `open' and `printf'.
73419 - Since the prototype doesn't specify types for optional arguments, in
73420 -a call to a variadic function the "default argument promotions" are
73421 -performed on the optional argument values. This means the objects of
73422 -type `char' or `short int' (whether signed or not) are promoted to
73423 -either `int' or `unsigned int', as appropriate; and that objects of
73424 -type `float' are promoted to type `double'. So, if the caller passes a
73425 -`char' as an optional argument, it is promoted to an `int', and the
73426 -function can access it with `va_arg (AP, int)'.
73428 - Conversion of the required arguments is controlled by the function
73429 -prototype in the usual way: the argument expression is converted to the
73430 -declared argument type as if it were being assigned to a variable of
73431 -that type.
73433 -\x1f
73434 -File: libc.info, Node: Argument Macros, Next: Old Varargs, Prev: Calling Variadics, Up: How Variadic
73436 -Argument Access Macros
73437 -......................
73439 - Here are descriptions of the macros used to retrieve variable
73440 -arguments. These macros are defined in the header file `stdarg.h'.
73442 - - Data Type: va_list
73443 - The type `va_list' is used for argument pointer variables.
73445 - - Macro: void va_start (va_list AP, LAST-REQUIRED)
73446 - This macro initializes the argument pointer variable AP to point
73447 - to the first of the optional arguments of the current function;
73448 - LAST-REQUIRED must be the last required argument to the function.
73450 - *Note Old Varargs::, for an alternate definition of `va_start'
73451 - found in the header file `varargs.h'.
73453 - - Macro: TYPE va_arg (va_list AP, TYPE)
73454 - The `va_arg' macro returns the value of the next optional argument,
73455 - and modifies the value of AP to point to the subsequent argument.
73456 - Thus, successive uses of `va_arg' return successive optional
73457 - arguments.
73459 - The type of the value returned by `va_arg' is TYPE as specified in
73460 - the call. TYPE must be a self-promoting type (not `char' or
73461 - `short int' or `float') that matches the type of the actual
73462 - argument.
73464 - - Macro: void va_end (va_list AP)
73465 - This ends the use of AP. After a `va_end' call, further `va_arg'
73466 - calls with the same AP may not work. You should invoke `va_end'
73467 - before returning from the function in which `va_start' was invoked
73468 - with the same AP argument.
73470 - In the GNU C library, `va_end' does nothing, and you need not ever
73471 - use it except for reasons of portability.
73474 - Sometimes it is necessary to parse the list of parameters more than
73475 -once or one wants to remember a certain position in the parameter list.
73476 -To do this, one will have to make a copy of the current value of the
73477 -argument. But `va_list' is an opaque type and one cannot necessarily
73478 -assign the value of one variable of type `va_list' to another variable
73479 -of the same type.
73481 - - Macro: void __va_copy (va_list DEST, va_list SRC)
73482 - The `__va_copy' macro allows copying of objects of type `va_list'
73483 - even if this is not an integral type. The argument pointer in
73484 - DEST is initialized to point to the same argument as the pointer
73485 - in SRC.
73487 - This macro is a GNU extension but it will hopefully also be
73488 - available in the next update of the ISO C standard.
73490 - If you want to use `__va_copy' you should always be prepared for the
73491 -possibility that this macro will not be available. On architectures
73492 -where a simple assignment is invalid, hopefully `__va_copy' _will_ be
73493 -available, so one should always write something like this:
73496 - va_list ap, save;
73497 - ...
73498 - #ifdef __va_copy
73499 - __va_copy (save, ap);
73500 - #else
73501 - save = ap;
73502 - #endif
73503 - ...
73506 -\x1f
73507 -File: libc.info, Node: Variadic Example, Prev: How Variadic, Up: Variadic Functions
73509 -Example of a Variadic Function
73510 -------------------------------
73512 - Here is a complete sample function that accepts a variable number of
73513 -arguments. The first argument to the function is the count of remaining
73514 -arguments, which are added up and the result returned. While trivial,
73515 -this function is sufficient to illustrate how to use the variable
73516 -arguments facility.
73518 - #include <stdarg.h>
73519 - #include <stdio.h>
73521 - int
73522 - add_em_up (int count,...)
73524 - va_list ap;
73525 - int i, sum;
73527 - va_start (ap, count); /* Initialize the argument list. */
73529 - sum = 0;
73530 - for (i = 0; i < count; i++)
73531 - sum += va_arg (ap, int); /* Get the next argument value. */
73533 - va_end (ap); /* Clean up. */
73534 - return sum;
73537 - int
73538 - main (void)
73540 - /* This call prints 16. */
73541 - printf ("%d\n", add_em_up (3, 5, 5, 6));
73543 - /* This call prints 55. */
73544 - printf ("%d\n", add_em_up (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
73546 - return 0;
73549 -\x1f
73550 -File: libc.info, Node: Old Varargs, Prev: Argument Macros, Up: How Variadic
73552 -Old-Style Variadic Functions
73553 -............................
73555 - Before ISO C, programmers used a slightly different facility for
73556 -writing variadic functions. The GNU C compiler still supports it;
73557 -currently, it is more portable than the ISO C facility, since support
73558 -for ISO C is still not universal. The header file which defines the
73559 -old-fashioned variadic facility is called `varargs.h'.
73561 - Using `varargs.h' is almost the same as using `stdarg.h'. There is
73562 -no difference in how you call a variadic function; see *Note Calling
73563 -Variadics::. The only difference is in how you define them. First of
73564 -all, you must use old-style non-prototype syntax, like this:
73566 - tree
73567 - build (va_alist)
73568 - va_dcl
73571 - Secondly, you must give `va_start' only one argument, like this:
73573 - va_list p;
73574 - va_start (p);
73576 - These are the special macros used for defining old-style variadic
73577 -functions:
73579 - - Macro: va_alist
73580 - This macro stands for the argument name list required in a variadic
73581 - function.
73583 - - Macro: va_dcl
73584 - This macro declares the implicit argument or arguments for a
73585 - variadic function.
73587 - - Macro: void va_start (va_list AP)
73588 - This macro, as defined in `varargs.h', initializes the argument
73589 - pointer variable AP to point to the first argument of the current
73590 - function.
73592 - The other argument macros, `va_arg' and `va_end', are the same in
73593 -`varargs.h' as in `stdarg.h'; see *Note Argument Macros::, for details.
73595 - It does not work to include both `varargs.h' and `stdarg.h' in the
73596 -same compilation; they define `va_start' in conflicting ways.
73598 -\x1f
73599 -File: libc.info, Node: Null Pointer Constant, Next: Important Data Types, Prev: Variadic Functions, Up: Language Features
73601 -Null Pointer Constant
73602 -=====================
73604 - The null pointer constant is guaranteed not to point to any real
73605 -object. You can assign it to any pointer variable since it has type
73606 -`void *'. The preferred way to write a null pointer constant is with
73607 -`NULL'.
73609 - - Macro: void * NULL
73610 - This is a null pointer constant.
73612 - You can also use `0' or `(void *)0' as a null pointer constant, but
73613 -using `NULL' is cleaner because it makes the purpose of the constant
73614 -more evident.
73616 - If you use the null pointer constant as a function argument, then for
73617 -complete portability you should make sure that the function has a
73618 -prototype declaration. Otherwise, if the target machine has two
73619 -different pointer representations, the compiler won't know which
73620 -representation to use for that argument. You can avoid the problem by
73621 -explicitly casting the constant to the proper pointer type, but we
73622 -recommend instead adding a prototype for the function you are calling.
73624 -\x1f
73625 -File: libc.info, Node: Important Data Types, Next: Data Type Measurements, Prev: Null Pointer Constant, Up: Language Features
73627 -Important Data Types
73628 -====================
73630 - The result of subtracting two pointers in C is always an integer,
73631 -but the precise data type varies from C compiler to C compiler.
73632 -Likewise, the data type of the result of `sizeof' also varies between
73633 -compilers. ISO defines standard aliases for these two types, so you
73634 -can refer to them in a portable fashion. They are defined in the
73635 -header file `stddef.h'.
73637 - - Data Type: ptrdiff_t
73638 - This is the signed integer type of the result of subtracting two
73639 - pointers. For example, with the declaration `char *p1, *p2;', the
73640 - expression `p2 - p1' is of type `ptrdiff_t'. This will probably
73641 - be one of the standard signed integer types (`short int', `int' or
73642 - `long int'), but might be a nonstandard type that exists only for
73643 - this purpose.
73645 - - Data Type: size_t
73646 - This is an unsigned integer type used to represent the sizes of
73647 - objects. The result of the `sizeof' operator is of this type, and
73648 - functions such as `malloc' (*note Unconstrained Allocation::) and
73649 - `memcpy' (*note Copying and Concatenation::) accept arguments of
73650 - this type to specify object sizes.
73652 - *Usage Note:* `size_t' is the preferred way to declare any
73653 - arguments or variables that hold the size of an object.
73655 - In the GNU system `size_t' is equivalent to either `unsigned int' or
73656 -`unsigned long int'. These types have identical properties on the GNU
73657 -system and, for most purposes, you can use them interchangeably.
73658 -However, they are distinct as data types, which makes a difference in
73659 -certain contexts.
73661 - For example, when you specify the type of a function argument in a
73662 -function prototype, it makes a difference which one you use. If the
73663 -system header files declare `malloc' with an argument of type `size_t'
73664 -and you declare `malloc' with an argument of type `unsigned int', you
73665 -will get a compilation error if `size_t' happens to be `unsigned long
73666 -int' on your system. To avoid any possibility of error, when a
73667 -function argument or value is supposed to have type `size_t', never
73668 -declare its type in any other way.
73670 - *Compatibility Note:* Implementations of C before the advent of
73671 -ISO C generally used `unsigned int' for representing object sizes and
73672 -`int' for pointer subtraction results. They did not necessarily define
73673 -either `size_t' or `ptrdiff_t'. Unix systems did define `size_t', in
73674 -`sys/types.h', but the definition was usually a signed type.
73676 -\x1f
73677 -File: libc.info, Node: Data Type Measurements, Prev: Important Data Types, Up: Language Features
73679 -Data Type Measurements
73680 -======================
73682 - Most of the time, if you choose the proper C data type for each
73683 -object in your program, you need not be concerned with just how it is
73684 -represented or how many bits it uses. When you do need such
73685 -information, the C language itself does not provide a way to get it.
73686 -The header files `limits.h' and `float.h' contain macros which give you
73687 -this information in full detail.
73689 -* Menu:
73691 -* Width of Type:: How many bits does an integer type hold?
73692 -* Range of Type:: What are the largest and smallest values
73693 - that an integer type can hold?
73694 -* Floating Type Macros:: Parameters that measure the floating point types.
73695 -* Structure Measurement:: Getting measurements on structure types.
73697 -\x1f
73698 -File: libc.info, Node: Width of Type, Next: Range of Type, Up: Data Type Measurements
73700 -Computing the Width of an Integer Data Type
73701 --------------------------------------------
73703 - The most common reason that a program needs to know how many bits
73704 -are in an integer type is for using an array of `long int' as a bit
73705 -vector. You can access the bit at index N with
73707 - vector[N / LONGBITS] & (1 << (N % LONGBITS))
73709 -provided you define `LONGBITS' as the number of bits in a `long int'.
73711 - There is no operator in the C language that can give you the number
73712 -of bits in an integer data type. But you can compute it from the macro
73713 -`CHAR_BIT', defined in the header file `limits.h'.
73715 -`CHAR_BIT'
73716 - This is the number of bits in a `char'--eight, on most systems.
73717 - The value has type `int'.
73719 - You can compute the number of bits in any data type TYPE like this:
73721 - sizeof (TYPE) * CHAR_BIT
73723 -\x1f
73724 -File: libc.info, Node: Range of Type, Next: Floating Type Macros, Prev: Width of Type, Up: Data Type Measurements
73726 -Range of an Integer Type
73727 -------------------------
73729 - Suppose you need to store an integer value which can range from zero
73730 -to one million. Which is the smallest type you can use? There is no
73731 -general rule; it depends on the C compiler and target machine. You can
73732 -use the `MIN' and `MAX' macros in `limits.h' to determine which type
73733 -will work.
73735 - Each signed integer type has a pair of macros which give the smallest
73736 -and largest values that it can hold. Each unsigned integer type has one
73737 -such macro, for the maximum value; the minimum value is, of course,
73738 -zero.
73740 - The values of these macros are all integer constant expressions. The
73741 -`MAX' and `MIN' macros for `char' and `short int' types have values of
73742 -type `int'. The `MAX' and `MIN' macros for the other types have values
73743 -of the same type described by the macro--thus, `ULONG_MAX' has type
73744 -`unsigned long int'.
73746 -`SCHAR_MIN'
73747 - This is the minimum value that can be represented by a
73748 - `signed char'.
73750 -`SCHAR_MAX'
73751 -`UCHAR_MAX'
73752 - These are the maximum values that can be represented by a
73753 - `signed char' and `unsigned char', respectively.
73755 -`CHAR_MIN'
73756 - This is the minimum value that can be represented by a `char'.
73757 - It's equal to `SCHAR_MIN' if `char' is signed, or zero otherwise.
73759 -`CHAR_MAX'
73760 - This is the maximum value that can be represented by a `char'.
73761 - It's equal to `SCHAR_MAX' if `char' is signed, or `UCHAR_MAX'
73762 - otherwise.
73764 -`SHRT_MIN'
73765 - This is the minimum value that can be represented by a
73766 - `signed short int'. On most machines that the GNU C library runs
73767 - on, `short' integers are 16-bit quantities.
73769 -`SHRT_MAX'
73770 -`USHRT_MAX'
73771 - These are the maximum values that can be represented by a
73772 - `signed short int' and `unsigned short int', respectively.
73774 -`INT_MIN'
73775 - This is the minimum value that can be represented by a
73776 - `signed int'. On most machines that the GNU C system runs on, an
73777 - `int' is a 32-bit quantity.
73779 -`INT_MAX'
73780 -`UINT_MAX'
73781 - These are the maximum values that can be represented by,
73782 - respectively, the type `signed int' and the type `unsigned int'.
73784 -`LONG_MIN'
73785 - This is the minimum value that can be represented by a
73786 - `signed long int'. On most machines that the GNU C system runs
73787 - on, `long' integers are 32-bit quantities, the same size as `int'.
73789 -`LONG_MAX'
73790 -`ULONG_MAX'
73791 - These are the maximum values that can be represented by a
73792 - `signed long int' and `unsigned long int', respectively.
73794 -`LONG_LONG_MIN'
73795 - This is the minimum value that can be represented by a
73796 - `signed long long int'. On most machines that the GNU C system
73797 - runs on, `long long' integers are 64-bit quantities.
73799 -`LONG_LONG_MAX'
73800 -`ULONG_LONG_MAX'
73801 - These are the maximum values that can be represented by a `signed
73802 - long long int' and `unsigned long long int', respectively.
73804 -`WCHAR_MAX'
73805 - This is the maximum value that can be represented by a `wchar_t'.
73806 - *Note Extended Char Intro::.
73808 - The header file `limits.h' also defines some additional constants
73809 -that parameterize various operating system and file system limits.
73810 -These constants are described in *Note System Configuration::.
73812 -\x1f
73813 -File: libc.info, Node: Floating Type Macros, Next: Structure Measurement, Prev: Range of Type, Up: Data Type Measurements
73815 -Floating Type Macros
73816 ---------------------
73818 - The specific representation of floating point numbers varies from
73819 -machine to machine. Because floating point numbers are represented
73820 -internally as approximate quantities, algorithms for manipulating
73821 -floating point data often need to take account of the precise details of
73822 -the machine's floating point representation.
73824 - Some of the functions in the C library itself need this information;
73825 -for example, the algorithms for printing and reading floating point
73826 -numbers (*note I/O on Streams::) and for calculating trigonometric and
73827 -irrational functions (*note Mathematics::) use it to avoid round-off
73828 -error and loss of accuracy. User programs that implement numerical
73829 -analysis techniques also often need this information in order to
73830 -minimize or compute error bounds.
73832 - The header file `float.h' describes the format used by your machine.
73834 -* Menu:
73836 -* Floating Point Concepts:: Definitions of terminology.
73837 -* Floating Point Parameters:: Details of specific macros.
73838 -* IEEE Floating Point:: The measurements for one common
73839 - representation.
73841 diff -u -udbrN glibc-2.3.2/manual/libc.info-52 glibc-2.3.2-200304020432/manual/libc.info-52
73842 --- glibc-2.3.2/manual/libc.info-52 Sat Mar 1 02:39:41 2003
73843 +++ glibc-2.3.2-200304020432/manual/libc.info-52 Thu Jan 1 01:00:00 1970
73844 @@ -1,356 +0,0 @@
73845 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
73847 -INFO-DIR-SECTION GNU libraries
73848 -START-INFO-DIR-ENTRY
73849 -* Libc: (libc). C library.
73850 -END-INFO-DIR-ENTRY
73852 - This file documents the GNU C library.
73854 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
73855 -Reference Manual', for Version 2.3.x.
73857 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
73858 -Free Software Foundation, Inc.
73860 - Permission is granted to copy, distribute and/or modify this document
73861 -under the terms of the GNU Free Documentation License, Version 1.1 or
73862 -any later version published by the Free Software Foundation; with the
73863 -Invariant Sections being "Free Software Needs Free Documentation" and
73864 -"GNU Lesser General Public License", the Front-Cover texts being (a)
73865 -(see below), and with the Back-Cover Texts being (b) (see below). A
73866 -copy of the license is included in the section entitled "GNU Free
73867 -Documentation License".
73869 - (a) The FSF's Front-Cover Text is:
73871 - A GNU Manual
73873 - (b) The FSF's Back-Cover Text is:
73875 - You have freedom to copy and modify this GNU Manual, like GNU
73876 -software. Copies published by the Free Software Foundation raise
73877 -funds for GNU development.
73879 -\x1f
73880 -File: libc.info, Node: Floating Point Concepts, Next: Floating Point Parameters, Up: Floating Type Macros
73882 -Floating Point Representation Concepts
73883 -......................................
73885 - This section introduces the terminology for describing floating point
73886 -representations.
73888 - You are probably already familiar with most of these concepts in
73889 -terms of scientific or exponential notation for floating point numbers.
73890 -For example, the number `123456.0' could be expressed in exponential
73891 -notation as `1.23456e+05', a shorthand notation indicating that the
73892 -mantissa `1.23456' is multiplied by the base `10' raised to power `5'.
73894 - More formally, the internal representation of a floating point number
73895 -can be characterized in terms of the following parameters:
73897 - * The "sign" is either `-1' or `1'.
73899 - * The "base" or "radix" for exponentiation, an integer greater than
73900 - `1'. This is a constant for a particular representation.
73902 - * The "exponent" to which the base is raised. The upper and lower
73903 - bounds of the exponent value are constants for a particular
73904 - representation.
73906 - Sometimes, in the actual bits representing the floating point
73907 - number, the exponent is "biased" by adding a constant to it, to
73908 - make it always be represented as an unsigned quantity. This is
73909 - only important if you have some reason to pick apart the bit
73910 - fields making up the floating point number by hand, which is
73911 - something for which the GNU library provides no support. So this
73912 - is ignored in the discussion that follows.
73914 - * The "mantissa" or "significand" is an unsigned integer which is a
73915 - part of each floating point number.
73917 - * The "precision" of the mantissa. If the base of the representation
73918 - is B, then the precision is the number of base-B digits in the
73919 - mantissa. This is a constant for a particular representation.
73921 - Many floating point representations have an implicit "hidden bit"
73922 - in the mantissa. This is a bit which is present virtually in the
73923 - mantissa, but not stored in memory because its value is always 1
73924 - in a normalized number. The precision figure (see above) includes
73925 - any hidden bits.
73927 - Again, the GNU library provides no facilities for dealing with such
73928 - low-level aspects of the representation.
73930 - The mantissa of a floating point number represents an implicit
73931 -fraction whose denominator is the base raised to the power of the
73932 -precision. Since the largest representable mantissa is one less than
73933 -this denominator, the value of the fraction is always strictly less
73934 -than `1'. The mathematical value of a floating point number is then
73935 -the product of this fraction, the sign, and the base raised to the
73936 -exponent.
73938 - We say that the floating point number is "normalized" if the
73939 -fraction is at least `1/B', where B is the base. In other words, the
73940 -mantissa would be too large to fit if it were multiplied by the base.
73941 -Non-normalized numbers are sometimes called "denormal"; they contain
73942 -less precision than the representation normally can hold.
73944 - If the number is not normalized, then you can subtract `1' from the
73945 -exponent while multiplying the mantissa by the base, and get another
73946 -floating point number with the same value. "Normalization" consists of
73947 -doing this repeatedly until the number is normalized. Two distinct
73948 -normalized floating point numbers cannot be equal in value.
73950 - (There is an exception to this rule: if the mantissa is zero, it is
73951 -considered normalized. Another exception happens on certain machines
73952 -where the exponent is as small as the representation can hold. Then it
73953 -is impossible to subtract `1' from the exponent, so a number may be
73954 -normalized even if its fraction is less than `1/B'.)
73956 -\x1f
73957 -File: libc.info, Node: Floating Point Parameters, Next: IEEE Floating Point, Prev: Floating Point Concepts, Up: Floating Type Macros
73959 -Floating Point Parameters
73960 -.........................
73962 - These macro definitions can be accessed by including the header file
73963 -`float.h' in your program.
73965 - Macro names starting with `FLT_' refer to the `float' type, while
73966 -names beginning with `DBL_' refer to the `double' type and names
73967 -beginning with `LDBL_' refer to the `long double' type. (If GCC does
73968 -not support `long double' as a distinct data type on a target machine
73969 -then the values for the `LDBL_' constants are equal to the
73970 -corresponding constants for the `double' type.)
73972 - Of these macros, only `FLT_RADIX' is guaranteed to be a constant
73973 -expression. The other macros listed here cannot be reliably used in
73974 -places that require constant expressions, such as `#if' preprocessing
73975 -directives or in the dimensions of static arrays.
73977 - Although the ISO C standard specifies minimum and maximum values for
73978 -most of these parameters, the GNU C implementation uses whatever values
73979 -describe the floating point representation of the target machine. So in
73980 -principle GNU C actually satisfies the ISO C requirements only if the
73981 -target machine is suitable. In practice, all the machines currently
73982 -supported are suitable.
73984 -`FLT_ROUNDS'
73985 - This value characterizes the rounding mode for floating point
73986 - addition. The following values indicate standard rounding modes:
73988 - `-1'
73989 - The mode is indeterminable.
73991 - `0'
73992 - Rounding is towards zero.
73994 - `1'
73995 - Rounding is to the nearest number.
73997 - `2'
73998 - Rounding is towards positive infinity.
74000 - `3'
74001 - Rounding is towards negative infinity.
74003 - Any other value represents a machine-dependent nonstandard rounding
74004 - mode.
74006 - On most machines, the value is `1', in accordance with the IEEE
74007 - standard for floating point.
74009 - Here is a table showing how certain values round for each possible
74010 - value of `FLT_ROUNDS', if the other aspects of the representation
74011 - match the IEEE single-precision standard.
74013 - 0 1 2 3
74014 - 1.00000003 1.0 1.0 1.00000012 1.0
74015 - 1.00000007 1.0 1.00000012 1.00000012 1.0
74016 - -1.00000003 -1.0 -1.0 -1.0 -1.00000012
74017 - -1.00000007 -1.0 -1.00000012 -1.0 -1.00000012
74019 -`FLT_RADIX'
74020 - This is the value of the base, or radix, of the exponent
74021 - representation. This is guaranteed to be a constant expression,
74022 - unlike the other macros described in this section. The value is 2
74023 - on all machines we know of except the IBM 360 and derivatives.
74025 -`FLT_MANT_DIG'
74026 - This is the number of base-`FLT_RADIX' digits in the floating point
74027 - mantissa for the `float' data type. The following expression
74028 - yields `1.0' (even though mathematically it should not) due to the
74029 - limited number of mantissa digits:
74031 - float radix = FLT_RADIX;
74033 - 1.0f + 1.0f / radix / radix / ... / radix
74035 - where `radix' appears `FLT_MANT_DIG' times.
74037 -`DBL_MANT_DIG'
74038 -`LDBL_MANT_DIG'
74039 - This is the number of base-`FLT_RADIX' digits in the floating point
74040 - mantissa for the data types `double' and `long double',
74041 - respectively.
74043 -`FLT_DIG'
74044 - This is the number of decimal digits of precision for the `float'
74045 - data type. Technically, if P and B are the precision and base
74046 - (respectively) for the representation, then the decimal precision
74047 - Q is the maximum number of decimal digits such that any floating
74048 - point number with Q base 10 digits can be rounded to a floating
74049 - point number with P base B digits and back again, without change
74050 - to the Q decimal digits.
74052 - The value of this macro is supposed to be at least `6', to satisfy
74053 - ISO C.
74055 -`DBL_DIG'
74056 -`LDBL_DIG'
74057 - These are similar to `FLT_DIG', but for the data types `double'
74058 - and `long double', respectively. The values of these macros are
74059 - supposed to be at least `10'.
74061 -`FLT_MIN_EXP'
74062 - This is the smallest possible exponent value for type `float'.
74063 - More precisely, is the minimum negative integer such that the value
74064 - `FLT_RADIX' raised to this power minus 1 can be represented as a
74065 - normalized floating point number of type `float'.
74067 -`DBL_MIN_EXP'
74068 -`LDBL_MIN_EXP'
74069 - These are similar to `FLT_MIN_EXP', but for the data types
74070 - `double' and `long double', respectively.
74072 -`FLT_MIN_10_EXP'
74073 - This is the minimum negative integer such that `10' raised to this
74074 - power minus 1 can be represented as a normalized floating point
74075 - number of type `float'. This is supposed to be `-37' or even less.
74077 -`DBL_MIN_10_EXP'
74078 -`LDBL_MIN_10_EXP'
74079 - These are similar to `FLT_MIN_10_EXP', but for the data types
74080 - `double' and `long double', respectively.
74082 -`FLT_MAX_EXP'
74083 - This is the largest possible exponent value for type `float'. More
74084 - precisely, this is the maximum positive integer such that value
74085 - `FLT_RADIX' raised to this power minus 1 can be represented as a
74086 - floating point number of type `float'.
74088 -`DBL_MAX_EXP'
74089 -`LDBL_MAX_EXP'
74090 - These are similar to `FLT_MAX_EXP', but for the data types
74091 - `double' and `long double', respectively.
74093 -`FLT_MAX_10_EXP'
74094 - This is the maximum positive integer such that `10' raised to this
74095 - power minus 1 can be represented as a normalized floating point
74096 - number of type `float'. This is supposed to be at least `37'.
74098 -`DBL_MAX_10_EXP'
74099 -`LDBL_MAX_10_EXP'
74100 - These are similar to `FLT_MAX_10_EXP', but for the data types
74101 - `double' and `long double', respectively.
74103 -`FLT_MAX'
74104 - The value of this macro is the maximum number representable in type
74105 - `float'. It is supposed to be at least `1E+37'. The value has
74106 - type `float'.
74108 - The smallest representable number is `- FLT_MAX'.
74110 -`DBL_MAX'
74111 -`LDBL_MAX'
74112 - These are similar to `FLT_MAX', but for the data types `double'
74113 - and `long double', respectively. The type of the macro's value is
74114 - the same as the type it describes.
74116 -`FLT_MIN'
74117 - The value of this macro is the minimum normalized positive floating
74118 - point number that is representable in type `float'. It is supposed
74119 - to be no more than `1E-37'.
74121 -`DBL_MIN'
74122 -`LDBL_MIN'
74123 - These are similar to `FLT_MIN', but for the data types `double'
74124 - and `long double', respectively. The type of the macro's value is
74125 - the same as the type it describes.
74127 -`FLT_EPSILON'
74128 - This is the minimum positive floating point number of type `float'
74129 - such that `1.0 + FLT_EPSILON != 1.0' is true. It's supposed to be
74130 - no greater than `1E-5'.
74132 -`DBL_EPSILON'
74133 -`LDBL_EPSILON'
74134 - These are similar to `FLT_EPSILON', but for the data types
74135 - `double' and `long double', respectively. The type of the macro's
74136 - value is the same as the type it describes. The values are not
74137 - supposed to be greater than `1E-9'.
74139 -\x1f
74140 -File: libc.info, Node: IEEE Floating Point, Prev: Floating Point Parameters, Up: Floating Type Macros
74142 -IEEE Floating Point
74143 -...................
74145 - Here is an example showing how the floating type measurements come
74146 -out for the most common floating point representation, specified by the
74147 -`IEEE Standard for Binary Floating Point Arithmetic (ANSI/IEEE Std
74148 -754-1985)'. Nearly all computers designed since the 1980s use this
74149 -format.
74151 - The IEEE single-precision float representation uses a base of 2.
74152 -There is a sign bit, a mantissa with 23 bits plus one hidden bit (so
74153 -the total precision is 24 base-2 digits), and an 8-bit exponent that
74154 -can represent values in the range -125 to 128, inclusive.
74156 - So, for an implementation that uses this representation for the
74157 -`float' data type, appropriate values for the corresponding parameters
74158 -are:
74160 - FLT_RADIX 2
74161 - FLT_MANT_DIG 24
74162 - FLT_DIG 6
74163 - FLT_MIN_EXP -125
74164 - FLT_MIN_10_EXP -37
74165 - FLT_MAX_EXP 128
74166 - FLT_MAX_10_EXP +38
74167 - FLT_MIN 1.17549435E-38F
74168 - FLT_MAX 3.40282347E+38F
74169 - FLT_EPSILON 1.19209290E-07F
74171 - Here are the values for the `double' data type:
74173 - DBL_MANT_DIG 53
74174 - DBL_DIG 15
74175 - DBL_MIN_EXP -1021
74176 - DBL_MIN_10_EXP -307
74177 - DBL_MAX_EXP 1024
74178 - DBL_MAX_10_EXP 308
74179 - DBL_MAX 1.7976931348623157E+308
74180 - DBL_MIN 2.2250738585072014E-308
74181 - DBL_EPSILON 2.2204460492503131E-016
74183 -\x1f
74184 -File: libc.info, Node: Structure Measurement, Prev: Floating Type Macros, Up: Data Type Measurements
74186 -Structure Field Offset Measurement
74187 -----------------------------------
74189 - You can use `offsetof' to measure the location within a structure
74190 -type of a particular structure member.
74192 - - Macro: size_t offsetof (TYPE, MEMBER)
74193 - This expands to a integer constant expression that is the offset
74194 - of the structure member named MEMBER in a the structure type TYPE.
74195 - For example, `offsetof (struct s, elem)' is the offset, in bytes,
74196 - of the member `elem' in a `struct s'.
74198 - This macro won't work if MEMBER is a bit field; you get an error
74199 - from the C compiler in that case.
74201 diff -u -udbrN glibc-2.3.2/manual/libc.info-53 glibc-2.3.2-200304020432/manual/libc.info-53
74202 --- glibc-2.3.2/manual/libc.info-53 Sat Mar 1 02:39:41 2003
74203 +++ glibc-2.3.2-200304020432/manual/libc.info-53 Thu Jan 1 01:00:00 1970
74204 @@ -1,7051 +0,0 @@
74205 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
74207 -INFO-DIR-SECTION GNU libraries
74208 -START-INFO-DIR-ENTRY
74209 -* Libc: (libc). C library.
74210 -END-INFO-DIR-ENTRY
74212 - This file documents the GNU C library.
74214 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
74215 -Reference Manual', for Version 2.3.x.
74217 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
74218 -Free Software Foundation, Inc.
74220 - Permission is granted to copy, distribute and/or modify this document
74221 -under the terms of the GNU Free Documentation License, Version 1.1 or
74222 -any later version published by the Free Software Foundation; with the
74223 -Invariant Sections being "Free Software Needs Free Documentation" and
74224 -"GNU Lesser General Public License", the Front-Cover texts being (a)
74225 -(see below), and with the Back-Cover Texts being (b) (see below). A
74226 -copy of the license is included in the section entitled "GNU Free
74227 -Documentation License".
74229 - (a) The FSF's Front-Cover Text is:
74231 - A GNU Manual
74233 - (b) The FSF's Back-Cover Text is:
74235 - You have freedom to copy and modify this GNU Manual, like GNU
74236 -software. Copies published by the Free Software Foundation raise
74237 -funds for GNU development.
74239 -\x1f
74240 -File: libc.info, Node: Library Summary, Next: Installation, Prev: Language Features, Up: Top
74242 -Summary of Library Facilities
74243 -*****************************
74245 - This appendix is a complete list of the facilities declared within
74246 -the header files supplied with the GNU C library. Each entry also
74247 -lists the standard or other source from which each facility is derived,
74248 -and tells you where in the manual you can find more information about
74249 -how to use it.
74251 -`long int a64l (const char *STRING)'
74252 - `stdlib.h' (XPG): *Note Encode Binary Data::.
74254 -`void abort (void)'
74255 - `stdlib.h' (ISO): *Note Aborting a Program::.
74257 -`int abs (int NUMBER)'
74258 - `stdlib.h' (ISO): *Note Absolute Value::.
74260 -`int accept (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH_PTR)'
74261 - `sys/socket.h' (BSD): *Note Accepting Connections::.
74263 -`int access (const char *FILENAME, int HOW)'
74264 - `unistd.h' (POSIX.1): *Note Testing File Access::.
74266 -`ACCOUNTING'
74267 - `utmp.h' (SVID): *Note Manipulating the Database::.
74269 -`double acos (double X)'
74270 - `math.h' (ISO): *Note Inverse Trig Functions::.
74272 -`float acosf (float X)'
74273 - `math.h' (ISO): *Note Inverse Trig Functions::.
74275 -`double acosh (double X)'
74276 - `math.h' (ISO): *Note Hyperbolic Functions::.
74278 -`float acoshf (float X)'
74279 - `math.h' (ISO): *Note Hyperbolic Functions::.
74281 -`long double acoshl (long double X)'
74282 - `math.h' (ISO): *Note Hyperbolic Functions::.
74284 -`long double acosl (long double X)'
74285 - `math.h' (ISO): *Note Inverse Trig Functions::.
74287 -`int addmntent (FILE *STREAM, const struct mntent *MNT)'
74288 - `mntent.h' (BSD): *Note mtab::.
74290 -`int adjtime (const struct timeval *DELTA, struct timeval *OLDDELTA)'
74291 - `sys/time.h' (BSD): *Note High-Resolution Calendar::.
74293 -`int adjtimex (struct timex *TIMEX)'
74294 - `sys/timex.h' (GNU): *Note High-Resolution Calendar::.
74296 -`AF_FILE'
74297 - `sys/socket.h' (GNU): *Note Address Formats::.
74299 -`AF_INET'
74300 - `sys/socket.h' (BSD): *Note Address Formats::.
74302 -`AF_INET6'
74303 - `sys/socket.h' (IPv6 Basic API): *Note Address Formats::.
74305 -`AF_LOCAL'
74306 - `sys/socket.h' (POSIX): *Note Address Formats::.
74308 -`AF_UNIX'
74309 - `sys/socket.h' (BSD, Unix98): *Note Address Formats::.
74311 -`AF_UNSPEC'
74312 - `sys/socket.h' (BSD): *Note Address Formats::.
74314 -`int aio_cancel (int FILDES, struct aiocb *AIOCBP)'
74315 - `aio.h' (POSIX.1b): *Note Cancel AIO Operations::.
74317 -`int aio_cancel64 (int FILDES, struct aiocb64 *AIOCBP)'
74318 - `aio.h' (Unix98): *Note Cancel AIO Operations::.
74320 -`int aio_error (const struct aiocb *AIOCBP)'
74321 - `aio.h' (POSIX.1b): *Note Status of AIO Operations::.
74323 -`int aio_error64 (const struct aiocb64 *AIOCBP)'
74324 - `aio.h' (Unix98): *Note Status of AIO Operations::.
74326 -`int aio_fsync (int OP, struct aiocb *AIOCBP)'
74327 - `aio.h' (POSIX.1b): *Note Synchronizing AIO Operations::.
74329 -`int aio_fsync64 (int OP, struct aiocb64 *AIOCBP)'
74330 - `aio.h' (Unix98): *Note Synchronizing AIO Operations::.
74332 -`void aio_init (const struct aioinit *INIT)'
74333 - `aio.h' (GNU): *Note Configuration of AIO::.
74335 -`int aio_read (struct aiocb *AIOCBP)'
74336 - `aio.h' (POSIX.1b): *Note Asynchronous Reads/Writes::.
74338 -`int aio_read64 (struct aiocb *AIOCBP)'
74339 - `aio.h' (Unix98): *Note Asynchronous Reads/Writes::.
74341 -`ssize_t aio_return (const struct aiocb *AIOCBP)'
74342 - `aio.h' (POSIX.1b): *Note Status of AIO Operations::.
74344 -`int aio_return64 (const struct aiocb64 *AIOCBP)'
74345 - `aio.h' (Unix98): *Note Status of AIO Operations::.
74347 -`int aio_suspend (const struct aiocb *const LIST[], int NENT, const struct timespec *TIMEOUT)'
74348 - `aio.h' (POSIX.1b): *Note Synchronizing AIO Operations::.
74350 -`int aio_suspend64 (const struct aiocb64 *const LIST[], int NENT, const struct timespec *TIMEOUT)'
74351 - `aio.h' (Unix98): *Note Synchronizing AIO Operations::.
74353 -`int aio_write (struct aiocb *AIOCBP)'
74354 - `aio.h' (POSIX.1b): *Note Asynchronous Reads/Writes::.
74356 -`int aio_write64 (struct aiocb *AIOCBP)'
74357 - `aio.h' (Unix98): *Note Asynchronous Reads/Writes::.
74359 -`unsigned int alarm (unsigned int SECONDS)'
74360 - `unistd.h' (POSIX.1): *Note Setting an Alarm::.
74362 -`void * alloca (size_t SIZE);'
74363 - `stdlib.h' (GNU, BSD): *Note Variable Size Automatic::.
74365 -`int alphasort (const void *A, const void *B)'
74366 - `dirent.h' (BSD/SVID): *Note Scanning Directory Content::.
74368 -`int alphasort64 (const void *A, const void *B)'
74369 - `dirent.h' (GNU): *Note Scanning Directory Content::.
74371 -`tcflag_t ALTWERASE'
74372 - `termios.h' (BSD): *Note Local Modes::.
74374 -`int ARG_MAX'
74375 - `limits.h' (POSIX.1): *Note General Limits::.
74377 -`error_t argp_err_exit_status'
74378 - `argp.h' (GNU): *Note Argp Global Variables::.
74380 -`void argp_error (const struct argp_state *STATE, const char *FMT, ...)'
74381 - `argp.h' (GNU): *Note Argp Helper Functions::.
74383 -`int ARGP_ERR_UNKNOWN'
74384 - `argp.h' (GNU): *Note Argp Parser Functions::.
74386 -`void argp_failure (const struct argp_state *STATE, int STATUS, int ERRNUM, const char *FMT, ...)'
74387 - `argp.h' (GNU): *Note Argp Helper Functions::.
74389 -`void argp_help (const struct argp *ARGP, FILE *STREAM, unsigned FLAGS, char *NAME)'
74390 - `argp.h' (GNU): *Note Argp Help::.
74392 -`ARGP_IN_ORDER'
74393 - `argp.h' (GNU): *Note Argp Flags::.
74395 -`ARGP_KEY_ARG'
74396 - `argp.h' (GNU): *Note Argp Special Keys::.
74398 -`ARGP_KEY_ARGS'
74399 - `argp.h' (GNU): *Note Argp Special Keys::.
74401 -`ARGP_KEY_END'
74402 - `argp.h' (GNU): *Note Argp Special Keys::.
74404 -`ARGP_KEY_ERROR'
74405 - `argp.h' (GNU): *Note Argp Special Keys::.
74407 -`ARGP_KEY_FINI'
74408 - `argp.h' (GNU): *Note Argp Special Keys::.
74410 -`ARGP_KEY_HELP_ARGS_DOC'
74411 - `argp.h' (GNU): *Note Argp Help Filter Keys::.
74413 -`ARGP_KEY_HELP_DUP_ARGS_NOTE'
74414 - `argp.h' (GNU): *Note Argp Help Filter Keys::.
74416 -`ARGP_KEY_HELP_EXTRA'
74417 - `argp.h' (GNU): *Note Argp Help Filter Keys::.
74419 -`ARGP_KEY_HELP_HEADER'
74420 - `argp.h' (GNU): *Note Argp Help Filter Keys::.
74422 -`ARGP_KEY_HELP_POST_DOC'
74423 - `argp.h' (GNU): *Note Argp Help Filter Keys::.
74425 -`ARGP_KEY_HELP_PRE_DOC'
74426 - `argp.h' (GNU): *Note Argp Help Filter Keys::.
74428 -`ARGP_KEY_INIT'
74429 - `argp.h' (GNU): *Note Argp Special Keys::.
74431 -`ARGP_KEY_NO_ARGS'
74432 - `argp.h' (GNU): *Note Argp Special Keys::.
74434 -`ARGP_KEY_SUCCESS'
74435 - `argp.h' (GNU): *Note Argp Special Keys::.
74437 -`ARGP_LONG_ONLY'
74438 - `argp.h' (GNU): *Note Argp Flags::.
74440 -`ARGP_NO_ARGS'
74441 - `argp.h' (GNU): *Note Argp Flags::.
74443 -`ARGP_NO_ERRS'
74444 - `argp.h' (GNU): *Note Argp Flags::.
74446 -`ARGP_NO_EXIT'
74447 - `argp.h' (GNU): *Note Argp Flags::.
74449 -`ARGP_NO_HELP'
74450 - `argp.h' (GNU): *Note Argp Flags::.
74452 -`error_t argp_parse (const struct argp *ARGP, int ARGC, char **ARGV, unsigned FLAGS, int *ARG_INDEX, void *INPUT)'
74453 - `argp.h' (GNU): *Note Suboptions: Argp.
74455 -`ARGP_PARSE_ARGV0'
74456 - `argp.h' (GNU): *Note Argp Flags::.
74458 -`const char * argp_program_bug_address'
74459 - `argp.h' (GNU): *Note Argp Global Variables::.
74461 -`const char * argp_program_version'
74462 - `argp.h' (GNU): *Note Argp Global Variables::.
74464 -`argp_program_version_hook'
74465 - `argp.h' (GNU): *Note Argp Global Variables::.
74467 -`ARGP_SILENT'
74468 - `argp.h' (GNU): *Note Argp Flags::.
74470 -`void argp_state_help (const struct argp_state *STATE, FILE *STREAM, unsigned FLAGS)'
74471 - `argp.h' (GNU): *Note Argp Helper Functions::.
74473 -`void argp_usage (const struct argp_state *STATE)'
74474 - `argp.h' (GNU): *Note Argp Helper Functions::.
74476 -`error_t argz_add (char **ARGZ, size_t *ARGZ_LEN, const char *STR)'
74477 - `argz.h' (GNU): *Note Argz Functions::.
74479 -`error_t argz_add_sep (char **ARGZ, size_t *ARGZ_LEN, const char *STR, int DELIM)'
74480 - `argz.h' (GNU): *Note Argz Functions::.
74482 -`error_t argz_append (char **ARGZ, size_t *ARGZ_LEN, const char *BUF, size_t BUF_LEN)'
74483 - `argz.h' (GNU): *Note Argz Functions::.
74485 -`size_t argz_count (const char *ARGZ, size_t ARG_LEN)'
74486 - `argz.h' (GNU): *Note Argz Functions::.
74488 -`error_t argz_create (char *const ARGV[], char **ARGZ, size_t *ARGZ_LEN)'
74489 - `argz.h' (GNU): *Note Argz Functions::.
74491 -`error_t argz_create_sep (const char *STRING, int SEP, char **ARGZ, size_t *ARGZ_LEN)'
74492 - `argz.h' (GNU): *Note Argz Functions::.
74494 -`error_t argz_delete (char **ARGZ, size_t *ARGZ_LEN, char *ENTRY)'
74495 - `argz.h' (GNU): *Note Argz Functions::.
74497 -`void argz_extract (char *ARGZ, size_t ARGZ_LEN, char **ARGV)'
74498 - `argz.h' (GNU): *Note Argz Functions::.
74500 -`error_t argz_insert (char **ARGZ, size_t *ARGZ_LEN, char *BEFORE, const char *ENTRY)'
74501 - `argz.h' (GNU): *Note Argz Functions::.
74503 -`char * argz_next (char *ARGZ, size_t ARGZ_LEN, const char *ENTRY)'
74504 - `argz.h' (GNU): *Note Argz Functions::.
74506 -`error_t argz_replace (char **ARGZ, size_t *ARGZ_LEN, const char *STR, const char *WITH, unsigned *REPLACE_COUNT)'
74507 - `argz.h' (GNU): *Note Argz Functions::.
74509 -`void argz_stringify (char *ARGZ, size_t LEN, int SEP)'
74510 - `argz.h' (GNU): *Note Argz Functions::.
74512 -`char * asctime (const struct tm *BROKENTIME)'
74513 - `time.h' (ISO): *Note Formatting Calendar Time::.
74515 -`char * asctime_r (const struct tm *BROKENTIME, char *BUFFER)'
74516 - `time.h' (POSIX.1c): *Note Formatting Calendar Time::.
74518 -`double asin (double X)'
74519 - `math.h' (ISO): *Note Inverse Trig Functions::.
74521 -`float asinf (float X)'
74522 - `math.h' (ISO): *Note Inverse Trig Functions::.
74524 -`double asinh (double X)'
74525 - `math.h' (ISO): *Note Hyperbolic Functions::.
74527 -`float asinhf (float X)'
74528 - `math.h' (ISO): *Note Hyperbolic Functions::.
74530 -`long double asinhl (long double X)'
74531 - `math.h' (ISO): *Note Hyperbolic Functions::.
74533 -`long double asinl (long double X)'
74534 - `math.h' (ISO): *Note Inverse Trig Functions::.
74536 -`int asprintf (char **PTR, const char *TEMPLATE, ...)'
74537 - `stdio.h' (GNU): *Note Dynamic Output::.
74539 -`void assert (int EXPRESSION)'
74540 - `assert.h' (ISO): *Note Consistency Checking::.
74542 -`void assert_perror (int ERRNUM)'
74543 - `assert.h' (GNU): *Note Consistency Checking::.
74545 -`double atan (double X)'
74546 - `math.h' (ISO): *Note Inverse Trig Functions::.
74548 -`double atan2 (double Y, double X)'
74549 - `math.h' (ISO): *Note Inverse Trig Functions::.
74551 -`float atan2f (float Y, float X)'
74552 - `math.h' (ISO): *Note Inverse Trig Functions::.
74554 -`long double atan2l (long double Y, long double X)'
74555 - `math.h' (ISO): *Note Inverse Trig Functions::.
74557 -`float atanf (float X)'
74558 - `math.h' (ISO): *Note Inverse Trig Functions::.
74560 -`double atanh (double X)'
74561 - `math.h' (ISO): *Note Hyperbolic Functions::.
74563 -`float atanhf (float X)'
74564 - `math.h' (ISO): *Note Hyperbolic Functions::.
74566 -`long double atanhl (long double X)'
74567 - `math.h' (ISO): *Note Hyperbolic Functions::.
74569 -`long double atanl (long double X)'
74570 - `math.h' (ISO): *Note Inverse Trig Functions::.
74572 -`int atexit (void (*FUNCTION) (void))'
74573 - `stdlib.h' (ISO): *Note Cleanups on Exit::.
74575 -`double atof (const char *STRING)'
74576 - `stdlib.h' (ISO): *Note Parsing of Floats::.
74578 -`int atoi (const char *STRING)'
74579 - `stdlib.h' (ISO): *Note Parsing of Integers::.
74581 -`long int atol (const char *STRING)'
74582 - `stdlib.h' (ISO): *Note Parsing of Integers::.
74584 -`long long int atoll (const char *STRING)'
74585 - `stdlib.h' (ISO): *Note Parsing of Integers::.
74587 -`B0'
74588 - `termios.h' (POSIX.1): *Note Line Speed::.
74590 -`B110'
74591 - `termios.h' (POSIX.1): *Note Line Speed::.
74593 -`B115200'
74594 - `termios.h' (GNU): *Note Line Speed::.
74596 -`B1200'
74597 - `termios.h' (POSIX.1): *Note Line Speed::.
74599 -`B134'
74600 - `termios.h' (POSIX.1): *Note Line Speed::.
74602 -`B150'
74603 - `termios.h' (POSIX.1): *Note Line Speed::.
74605 -`B1800'
74606 - `termios.h' (POSIX.1): *Note Line Speed::.
74608 -`B19200'
74609 - `termios.h' (POSIX.1): *Note Line Speed::.
74611 -`B200'
74612 - `termios.h' (POSIX.1): *Note Line Speed::.
74614 -`B230400'
74615 - `termios.h' (GNU): *Note Line Speed::.
74617 -`B2400'
74618 - `termios.h' (POSIX.1): *Note Line Speed::.
74620 -`B300'
74621 - `termios.h' (POSIX.1): *Note Line Speed::.
74623 -`B38400'
74624 - `termios.h' (POSIX.1): *Note Line Speed::.
74626 -`B460800'
74627 - `termios.h' (GNU): *Note Line Speed::.
74629 -`B4800'
74630 - `termios.h' (POSIX.1): *Note Line Speed::.
74632 -`B50'
74633 - `termios.h' (POSIX.1): *Note Line Speed::.
74635 -`B57600'
74636 - `termios.h' (GNU): *Note Line Speed::.
74638 -`B600'
74639 - `termios.h' (POSIX.1): *Note Line Speed::.
74641 -`B75'
74642 - `termios.h' (POSIX.1): *Note Line Speed::.
74644 -`B9600'
74645 - `termios.h' (POSIX.1): *Note Line Speed::.
74647 -`int backtrace (void **BUFFER, int SIZE)'
74648 - `execinfo.h' (GNU): *Note Backtraces::.
74650 -`char ** backtrace_symbols (void *const *BUFFER, int SIZE)'
74651 - `execinfo.h' (GNU): *Note Backtraces::.
74653 -`void backtrace_symbols_fd (void *const *BUFFER, int SIZE, int FD)'
74654 - `execinfo.h' (GNU): *Note Backtraces::.
74656 -`char * basename (char *PATH)'
74657 - `libgen.h' (XPG): *Note Finding Tokens in a String::.
74659 -`char * basename (const char *FILENAME)'
74660 - `string.h' (GNU): *Note Finding Tokens in a String::.
74662 -`int BC_BASE_MAX'
74663 - `limits.h' (POSIX.2): *Note Utility Limits::.
74665 -`int BC_DIM_MAX'
74666 - `limits.h' (POSIX.2): *Note Utility Limits::.
74668 -`int bcmp (const void *A1, const void *A2, size_t SIZE)'
74669 - `string.h' (BSD): *Note String/Array Comparison::.
74671 -`void bcopy (const void *FROM, void *TO, size_t SIZE)'
74672 - `string.h' (BSD): *Note Copying and Concatenation::.
74674 -`int BC_SCALE_MAX'
74675 - `limits.h' (POSIX.2): *Note Utility Limits::.
74677 -`int BC_STRING_MAX'
74678 - `limits.h' (POSIX.2): *Note Utility Limits::.
74680 -`int bind (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)'
74681 - `sys/socket.h' (BSD): *Note Setting Address::.
74683 -`char * bindtextdomain (const char *DOMAINNAME, const char *DIRNAME)'
74684 - `libintl.h' (GNU): *Note Locating gettext catalog::.
74686 -`char * bind_textdomain_codeset (const char *DOMAINNAME, const char *CODESET)'
74687 - `libintl.h' (GNU): *Note Charset conversion in gettext::.
74689 -`blkcnt64_t'
74690 - `sys/types.h' (Unix98): *Note Attribute Meanings::.
74692 -`blkcnt_t'
74693 - `sys/types.h' (Unix98): *Note Attribute Meanings::.
74695 -`BOOT_TIME'
74696 - `utmp.h' (SVID): *Note Manipulating the Database::.
74698 -`BOOT_TIME'
74699 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
74701 -`int brk (void *ADDR)'
74702 - `unistd.h' (BSD): *Note Resizing the Data Segment::.
74704 -`tcflag_t BRKINT'
74705 - `termios.h' (POSIX.1): *Note Input Modes::.
74707 -`_BSD_SOURCE'
74708 - (GNU): *Note Feature Test Macros::.
74710 -`void * bsearch (const void *KEY, const void *ARRAY, size_t COUNT, size_t SIZE, comparison_fn_t COMPARE)'
74711 - `stdlib.h' (ISO): *Note Array Search Function::.
74713 -`wint_t btowc (int C)'
74714 - `wchar.h' (ISO): *Note Converting a Character::.
74716 -`int BUFSIZ'
74717 - `stdio.h' (ISO): *Note Controlling Buffering::.
74719 -`void bzero (void *BLOCK, size_t SIZE)'
74720 - `string.h' (BSD): *Note Copying and Concatenation::.
74722 -`double cabs (complex double Z)'
74723 - `complex.h' (ISO): *Note Absolute Value::.
74725 -`float cabsf (complex float Z)'
74726 - `complex.h' (ISO): *Note Absolute Value::.
74728 -`long double cabsl (complex long double Z)'
74729 - `complex.h' (ISO): *Note Absolute Value::.
74731 -`complex double cacos (complex double Z)'
74732 - `complex.h' (ISO): *Note Inverse Trig Functions::.
74734 -`complex float cacosf (complex float Z)'
74735 - `complex.h' (ISO): *Note Inverse Trig Functions::.
74737 -`complex double cacosh (complex double Z)'
74738 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74740 -`complex float cacoshf (complex float Z)'
74741 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74743 -`complex long double cacoshl (complex long double Z)'
74744 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74746 -`complex long double cacosl (complex long double Z)'
74747 - `complex.h' (ISO): *Note Inverse Trig Functions::.
74749 -`void * calloc (size_t COUNT, size_t ELTSIZE)'
74750 - `malloc.h', `stdlib.h' (ISO): *Note Allocating Cleared Space::.
74752 -`char * canonicalize_file_name (const char *NAME)'
74753 - `stdlib.h' (GNU): *Note Symbolic Links::.
74755 -`double carg (complex double Z)'
74756 - `complex.h' (ISO): *Note Operations on Complex::.
74758 -`float cargf (complex float Z)'
74759 - `complex.h' (ISO): *Note Operations on Complex::.
74761 -`long double cargl (complex long double Z)'
74762 - `complex.h' (ISO): *Note Operations on Complex::.
74764 -`complex double casin (complex double Z)'
74765 - `complex.h' (ISO): *Note Inverse Trig Functions::.
74767 -`complex float casinf (complex float Z)'
74768 - `complex.h' (ISO): *Note Inverse Trig Functions::.
74770 -`complex double casinh (complex double Z)'
74771 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74773 -`complex float casinhf (complex float Z)'
74774 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74776 -`complex long double casinhl (complex long double Z)'
74777 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74779 -`complex long double casinl (complex long double Z)'
74780 - `complex.h' (ISO): *Note Inverse Trig Functions::.
74782 -`complex double catan (complex double Z)'
74783 - `complex.h' (ISO): *Note Inverse Trig Functions::.
74785 -`complex float catanf (complex float Z)'
74786 - `complex.h' (ISO): *Note Inverse Trig Functions::.
74788 -`complex double catanh (complex double Z)'
74789 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74791 -`complex float catanhf (complex float Z)'
74792 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74794 -`complex long double catanhl (complex long double Z)'
74795 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74797 -`complex long double catanl (complex long double Z)'
74798 - `complex.h' (ISO): *Note Inverse Trig Functions::.
74800 -`nl_catd catopen (const char *CAT_NAME, int FLAG)'
74801 - `nl_types.h' (X/Open): *Note The catgets Functions::.
74803 -`int cbc_crypt (char *KEY, char *BLOCKS, unsigned LEN, unsigned MODE, char *IVEC)'
74804 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
74806 -`double cbrt (double X)'
74807 - `math.h' (BSD): *Note Exponents and Logarithms::.
74809 -`float cbrtf (float X)'
74810 - `math.h' (BSD): *Note Exponents and Logarithms::.
74812 -`long double cbrtl (long double X)'
74813 - `math.h' (BSD): *Note Exponents and Logarithms::.
74815 -`complex double ccos (complex double Z)'
74816 - `complex.h' (ISO): *Note Trig Functions::.
74818 -`complex float ccosf (complex float Z)'
74819 - `complex.h' (ISO): *Note Trig Functions::.
74821 -`complex double ccosh (complex double Z)'
74822 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74824 -`complex float ccoshf (complex float Z)'
74825 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74827 -`complex long double ccoshl (complex long double Z)'
74828 - `complex.h' (ISO): *Note Hyperbolic Functions::.
74830 -`complex long double ccosl (complex long double Z)'
74831 - `complex.h' (ISO): *Note Trig Functions::.
74833 -`cc_t'
74834 - `termios.h' (POSIX.1): *Note Mode Data Types::.
74836 -`tcflag_t CCTS_OFLOW'
74837 - `termios.h' (BSD): *Note Control Modes::.
74839 -`double ceil (double X)'
74840 - `math.h' (ISO): *Note Rounding Functions::.
74842 -`float ceilf (float X)'
74843 - `math.h' (ISO): *Note Rounding Functions::.
74845 -`long double ceill (long double X)'
74846 - `math.h' (ISO): *Note Rounding Functions::.
74848 -`complex double cexp (complex double Z)'
74849 - `complex.h' (ISO): *Note Exponents and Logarithms::.
74851 -`complex float cexpf (complex float Z)'
74852 - `complex.h' (ISO): *Note Exponents and Logarithms::.
74854 -`complex long double cexpl (complex long double Z)'
74855 - `complex.h' (ISO): *Note Exponents and Logarithms::.
74857 -`speed_t cfgetispeed (const struct termios *TERMIOS-P)'
74858 - `termios.h' (POSIX.1): *Note Line Speed::.
74860 -`speed_t cfgetospeed (const struct termios *TERMIOS-P)'
74861 - `termios.h' (POSIX.1): *Note Line Speed::.
74863 -`void cfmakeraw (struct termios *TERMIOS-P)'
74864 - `termios.h' (BSD): *Note Noncanonical Input::.
74866 -`void cfree (void *PTR)'
74867 - `stdlib.h' (Sun): *Note Freeing after Malloc::.
74869 -`int cfsetispeed (struct termios *TERMIOS-P, speed_t SPEED)'
74870 - `termios.h' (POSIX.1): *Note Line Speed::.
74872 -`int cfsetospeed (struct termios *TERMIOS-P, speed_t SPEED)'
74873 - `termios.h' (POSIX.1): *Note Line Speed::.
74875 -`int cfsetspeed (struct termios *TERMIOS-P, speed_t SPEED)'
74876 - `termios.h' (BSD): *Note Line Speed::.
74878 -`CHAR_BIT'
74879 - `limits.h' (ISO): *Note Width of Type::.
74881 -`CHAR_MAX'
74882 - `limits.h' (ISO): *Note Range of Type::.
74884 -`CHAR_MIN'
74885 - `limits.h' (ISO): *Note Range of Type::.
74887 -`int chdir (const char *FILENAME)'
74888 - `unistd.h' (POSIX.1): *Note Working Directory::.
74890 -`int CHILD_MAX'
74891 - `limits.h' (POSIX.1): *Note General Limits::.
74893 -`int chmod (const char *FILENAME, mode_t MODE)'
74894 - `sys/stat.h' (POSIX.1): *Note Setting Permissions::.
74896 -`int chown (const char *FILENAME, uid_t OWNER, gid_t GROUP)'
74897 - `unistd.h' (POSIX.1): *Note File Owner::.
74899 -`tcflag_t CIGNORE'
74900 - `termios.h' (BSD): *Note Control Modes::.
74902 -`double cimag (complex double Z)'
74903 - `complex.h' (ISO): *Note Operations on Complex::.
74905 -`float cimagf (complex float Z)'
74906 - `complex.h' (ISO): *Note Operations on Complex::.
74908 -`long double cimagl (complex long double Z)'
74909 - `complex.h' (ISO): *Note Operations on Complex::.
74911 -`int clearenv (void)'
74912 - `stdlib.h' (GNU): *Note Environment Access::.
74914 -`void clearerr (FILE *STREAM)'
74915 - `stdio.h' (ISO): *Note Error Recovery::.
74917 -`void clearerr_unlocked (FILE *STREAM)'
74918 - `stdio.h' (GNU): *Note Error Recovery::.
74920 -`int CLK_TCK'
74921 - `time.h' (POSIX.1): *Note CPU Time::.
74923 -`tcflag_t CLOCAL'
74924 - `termios.h' (POSIX.1): *Note Control Modes::.
74926 -`clock_t clock (void)'
74927 - `time.h' (ISO): *Note CPU Time::.
74929 -`int CLOCKS_PER_SEC'
74930 - `time.h' (ISO): *Note CPU Time::.
74932 -`clock_t'
74933 - `time.h' (ISO): *Note CPU Time::.
74935 -`complex double clog (complex double Z)'
74936 - `complex.h' (ISO): *Note Exponents and Logarithms::.
74938 -`complex double clog10 (complex double Z)'
74939 - `complex.h' (GNU): *Note Exponents and Logarithms::.
74941 -`complex float clog10f (complex float Z)'
74942 - `complex.h' (GNU): *Note Exponents and Logarithms::.
74944 -`complex long double clog10l (complex long double Z)'
74945 - `complex.h' (GNU): *Note Exponents and Logarithms::.
74947 -`complex float clogf (complex float Z)'
74948 - `complex.h' (ISO): *Note Exponents and Logarithms::.
74950 -`complex long double clogl (complex long double Z)'
74951 - `complex.h' (ISO): *Note Exponents and Logarithms::.
74953 -`int close (int FILEDES)'
74954 - `unistd.h' (POSIX.1): *Note Opening and Closing Files::.
74956 -`int closedir (DIR *DIRSTREAM)'
74957 - `dirent.h' (POSIX.1): *Note Reading/Closing Directory::.
74959 -`void closelog (void)'
74960 - `syslog.h' (BSD): *Note closelog::.
74962 -`int COLL_WEIGHTS_MAX'
74963 - `limits.h' (POSIX.2): *Note Utility Limits::.
74965 -`size_t confstr (int PARAMETER, char *BUF, size_t LEN)'
74966 - `unistd.h' (POSIX.2): *Note String Parameters::.
74968 -`complex double conj (complex double Z)'
74969 - `complex.h' (ISO): *Note Operations on Complex::.
74971 -`complex float conjf (complex float Z)'
74972 - `complex.h' (ISO): *Note Operations on Complex::.
74974 -`complex long double conjl (complex long double Z)'
74975 - `complex.h' (ISO): *Note Operations on Complex::.
74977 -`int connect (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)'
74978 - `sys/socket.h' (BSD): *Note Connecting::.
74980 -`cookie_close_function'
74981 - `stdio.h' (GNU): *Note Hook Functions::.
74983 -`cookie_io_functions_t'
74984 - `stdio.h' (GNU): *Note Streams and Cookies::.
74986 -`cookie_read_function'
74987 - `stdio.h' (GNU): *Note Hook Functions::.
74989 -`cookie_seek_function'
74990 - `stdio.h' (GNU): *Note Hook Functions::.
74992 -`cookie_write_function'
74993 - `stdio.h' (GNU): *Note Hook Functions::.
74995 -`double copysign (double X, double Y)'
74996 - `math.h' (ISO): *Note FP Bit Twiddling::.
74998 -`float copysignf (float X, float Y)'
74999 - `math.h' (ISO): *Note FP Bit Twiddling::.
75001 -`long double copysignl (long double X, long double Y)'
75002 - `math.h' (ISO): *Note FP Bit Twiddling::.
75004 -`double cos (double X)'
75005 - `math.h' (ISO): *Note Trig Functions::.
75007 -`float cosf (float X)'
75008 - `math.h' (ISO): *Note Trig Functions::.
75010 -`double cosh (double X)'
75011 - `math.h' (ISO): *Note Hyperbolic Functions::.
75013 -`float coshf (float X)'
75014 - `math.h' (ISO): *Note Hyperbolic Functions::.
75016 -`long double coshl (long double X)'
75017 - `math.h' (ISO): *Note Hyperbolic Functions::.
75019 -`long double cosl (long double X)'
75020 - `math.h' (ISO): *Note Trig Functions::.
75022 -`complex double cpow (complex double BASE, complex double POWER)'
75023 - `complex.h' (ISO): *Note Exponents and Logarithms::.
75025 -`complex float cpowf (complex float BASE, complex float POWER)'
75026 - `complex.h' (ISO): *Note Exponents and Logarithms::.
75028 -`complex long double cpowl (complex long double BASE, complex long double POWER)'
75029 - `complex.h' (ISO): *Note Exponents and Logarithms::.
75031 -`complex double cproj (complex double Z)'
75032 - `complex.h' (ISO): *Note Operations on Complex::.
75034 -`complex float cprojf (complex float Z)'
75035 - `complex.h' (ISO): *Note Operations on Complex::.
75037 -`complex long double cprojl (complex long double Z)'
75038 - `complex.h' (ISO): *Note Operations on Complex::.
75040 -`tcflag_t CREAD'
75041 - `termios.h' (POSIX.1): *Note Control Modes::.
75043 -`double creal (complex double Z)'
75044 - `complex.h' (ISO): *Note Operations on Complex::.
75046 -`float crealf (complex float Z)'
75047 - `complex.h' (ISO): *Note Operations on Complex::.
75049 -`long double creall (complex long double Z)'
75050 - `complex.h' (ISO): *Note Operations on Complex::.
75052 -`int creat (const char *FILENAME, mode_t MODE)'
75053 - `fcntl.h' (POSIX.1): *Note Opening and Closing Files::.
75055 -`int creat64 (const char *FILENAME, mode_t MODE)'
75056 - `fcntl.h' (Unix98): *Note Opening and Closing Files::.
75058 -`tcflag_t CRTS_IFLOW'
75059 - `termios.h' (BSD): *Note Control Modes::.
75061 -`char * crypt (const char *KEY, const char *SALT)'
75062 - `crypt.h' (BSD, SVID): *Note crypt::.
75064 -`char * crypt_r (const char *KEY, const char *SALT, struct crypt_data * DATA)'
75065 - `crypt.h' (GNU): *Note crypt::.
75067 -`tcflag_t CS5'
75068 - `termios.h' (POSIX.1): *Note Control Modes::.
75070 -`tcflag_t CS6'
75071 - `termios.h' (POSIX.1): *Note Control Modes::.
75073 -`tcflag_t CS7'
75074 - `termios.h' (POSIX.1): *Note Control Modes::.
75076 -`tcflag_t CS8'
75077 - `termios.h' (POSIX.1): *Note Control Modes::.
75079 -`complex double csin (complex double Z)'
75080 - `complex.h' (ISO): *Note Trig Functions::.
75082 -`complex float csinf (complex float Z)'
75083 - `complex.h' (ISO): *Note Trig Functions::.
75085 -`complex double csinh (complex double Z)'
75086 - `complex.h' (ISO): *Note Hyperbolic Functions::.
75088 -`complex float csinhf (complex float Z)'
75089 - `complex.h' (ISO): *Note Hyperbolic Functions::.
75091 -`complex long double csinhl (complex long double Z)'
75092 - `complex.h' (ISO): *Note Hyperbolic Functions::.
75094 -`complex long double csinl (complex long double Z)'
75095 - `complex.h' (ISO): *Note Trig Functions::.
75097 -`tcflag_t CSIZE'
75098 - `termios.h' (POSIX.1): *Note Control Modes::.
75100 -`_CS_LFS64_CFLAGS'
75101 - `unistd.h' (Unix98): *Note String Parameters::.
75103 -`_CS_LFS64_LDFLAGS'
75104 - `unistd.h' (Unix98): *Note String Parameters::.
75106 -`_CS_LFS64_LIBS'
75107 - `unistd.h' (Unix98): *Note String Parameters::.
75109 -`_CS_LFS64_LINTFLAGS'
75110 - `unistd.h' (Unix98): *Note String Parameters::.
75112 -`_CS_LFS_CFLAGS'
75113 - `unistd.h' (Unix98): *Note String Parameters::.
75115 -`_CS_LFS_LDFLAGS'
75116 - `unistd.h' (Unix98): *Note String Parameters::.
75118 -`_CS_LFS_LIBS'
75119 - `unistd.h' (Unix98): *Note String Parameters::.
75121 -`_CS_LFS_LINTFLAGS'
75122 - `unistd.h' (Unix98): *Note String Parameters::.
75124 -`_CS_PATH'
75125 - `unistd.h' (POSIX.2): *Note String Parameters::.
75127 -`complex double csqrt (complex double Z)'
75128 - `complex.h' (ISO): *Note Exponents and Logarithms::.
75130 -`complex float csqrtf (complex float Z)'
75131 - `complex.h' (ISO): *Note Exponents and Logarithms::.
75133 -`complex long double csqrtl (complex long double Z)'
75134 - `complex.h' (ISO): *Note Exponents and Logarithms::.
75136 -`tcflag_t CSTOPB'
75137 - `termios.h' (POSIX.1): *Note Control Modes::.
75139 -`complex double ctan (complex double Z)'
75140 - `complex.h' (ISO): *Note Trig Functions::.
75142 -`complex float ctanf (complex float Z)'
75143 - `complex.h' (ISO): *Note Trig Functions::.
75145 -`complex double ctanh (complex double Z)'
75146 - `complex.h' (ISO): *Note Hyperbolic Functions::.
75148 -`complex float ctanhf (complex float Z)'
75149 - `complex.h' (ISO): *Note Hyperbolic Functions::.
75151 -`complex long double ctanhl (complex long double Z)'
75152 - `complex.h' (ISO): *Note Hyperbolic Functions::.
75154 -`complex long double ctanl (complex long double Z)'
75155 - `complex.h' (ISO): *Note Trig Functions::.
75157 -`char * ctermid (char *STRING)'
75158 - `stdio.h' (POSIX.1): *Note Identifying the Terminal::.
75160 -`char * ctime (const time_t *TIME)'
75161 - `time.h' (ISO): *Note Formatting Calendar Time::.
75163 -`char * ctime_r (const time_t *TIME, char *BUFFER)'
75164 - `time.h' (POSIX.1c): *Note Formatting Calendar Time::.
75166 -`char * cuserid (char *STRING)'
75167 - `stdio.h' (POSIX.1): *Note Who Logged In::.
75169 -`int daylight'
75170 - `time.h' (SVID): *Note Time Zone Functions::.
75172 -`DBL_DIG'
75173 - `float.h' (ISO): *Note Floating Point Parameters::.
75175 -`DBL_EPSILON'
75176 - `float.h' (ISO): *Note Floating Point Parameters::.
75178 -`DBL_MANT_DIG'
75179 - `float.h' (ISO): *Note Floating Point Parameters::.
75181 -`DBL_MAX'
75182 - `float.h' (ISO): *Note Floating Point Parameters::.
75184 -`DBL_MAX_10_EXP'
75185 - `float.h' (ISO): *Note Floating Point Parameters::.
75187 -`DBL_MAX_EXP'
75188 - `float.h' (ISO): *Note Floating Point Parameters::.
75190 -`DBL_MIN'
75191 - `float.h' (ISO): *Note Floating Point Parameters::.
75193 -`DBL_MIN_10_EXP'
75194 - `float.h' (ISO): *Note Floating Point Parameters::.
75196 -`DBL_MIN_EXP'
75197 - `float.h' (ISO): *Note Floating Point Parameters::.
75199 -`char * dcgettext (const char *DOMAINNAME, const char *MSGID, int CATEGORY)'
75200 - `libintl.h' (GNU): *Note Translation with gettext::.
75202 -`char * dcngettext (const char *DOMAIN, const char *MSGID1, const char *MSGID2, unsigned long int N, int CATEGORY)'
75203 - `libintl.h' (GNU): *Note Advanced gettext functions::.
75205 -`DEAD_PROCESS'
75206 - `utmp.h' (SVID): *Note Manipulating the Database::.
75208 -`DEAD_PROCESS'
75209 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
75211 -`DES_DECRYPT'
75212 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75214 -`DES_ENCRYPT'
75215 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75217 -`DESERR_BADPARAM'
75218 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75220 -`DESERR_HWERROR'
75221 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75223 -`DESERR_NOHWDEVICE'
75224 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75226 -`DESERR_NONE'
75227 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75229 -`int DES_FAILED (int ERR)'
75230 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75232 -`DES_HW'
75233 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75235 -`void des_setparity (char *KEY)'
75236 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75238 -`DES_SW'
75239 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75241 -`dev_t'
75242 - `sys/types.h' (POSIX.1): *Note Attribute Meanings::.
75244 -`char * dgettext (const char *DOMAINNAME, const char *MSGID)'
75245 - `libintl.h' (GNU): *Note Translation with gettext::.
75247 -`double difftime (time_t TIME1, time_t TIME0)'
75248 - `time.h' (ISO): *Note Elapsed Time::.
75250 -`DIR'
75251 - `dirent.h' (POSIX.1): *Note Opening a Directory::.
75253 -`int dirfd (DIR *DIRSTREAM)'
75254 - `dirent.h' (GNU): *Note Opening a Directory::.
75256 -`char * dirname (char *PATH)'
75257 - `libgen.h' (XPG): *Note Finding Tokens in a String::.
75259 -`div_t div (int NUMERATOR, int DENOMINATOR)'
75260 - `stdlib.h' (ISO): *Note Integer Division::.
75262 -`div_t'
75263 - `stdlib.h' (ISO): *Note Integer Division::.
75265 -`char * dngettext (const char *DOMAIN, const char *MSGID1, const char *MSGID2, unsigned long int N)'
75266 - `libintl.h' (GNU): *Note Advanced gettext functions::.
75268 -`double drand48 (void)'
75269 - `stdlib.h' (SVID): *Note SVID Random::.
75271 -`int drand48_r (struct drand48_data *BUFFER, double *RESULT)'
75272 - `stdlib.h' (GNU): *Note SVID Random::.
75274 -`double drem (double NUMERATOR, double DENOMINATOR)'
75275 - `math.h' (BSD): *Note Remainder Functions::.
75277 -`float dremf (float NUMERATOR, float DENOMINATOR)'
75278 - `math.h' (BSD): *Note Remainder Functions::.
75280 -`long double dreml (long double NUMERATOR, long double DENOMINATOR)'
75281 - `math.h' (BSD): *Note Remainder Functions::.
75283 -`mode_t DTTOIF (int DTYPE)'
75284 - `dirent.h' (BSD): *Note Directory Entries::.
75286 -`int dup (int OLD)'
75287 - `unistd.h' (POSIX.1): *Note Duplicating Descriptors::.
75289 -`int dup2 (int OLD, int NEW)'
75290 - `unistd.h' (POSIX.1): *Note Duplicating Descriptors::.
75292 -`int E2BIG'
75293 - `errno.h' (POSIX.1: Argument list too long): *Note Error Codes::.
75295 -`int EACCES'
75296 - `errno.h' (POSIX.1: Permission denied): *Note Error Codes::.
75298 -`int EADDRINUSE'
75299 - `errno.h' (BSD: Address already in use): *Note Error Codes::.
75301 -`int EADDRNOTAVAIL'
75302 - `errno.h' (BSD: Cannot assign requested address): *Note Error
75303 - Codes::.
75305 -`int EADV'
75306 - `errno.h' (Linux???: Advertise error): *Note Error Codes::.
75308 -`int EAFNOSUPPORT'
75309 - `errno.h' (BSD: Address family not supported by protocol): *Note
75310 - Error Codes::.
75312 -`int EAGAIN'
75313 - `errno.h' (POSIX.1: Resource temporarily unavailable): *Note
75314 - Error Codes::.
75316 -`int EALREADY'
75317 - `errno.h' (BSD: Operation already in progress): *Note Error
75318 - Codes::.
75320 -`int EAUTH'
75321 - `errno.h' (BSD: Authentication error): *Note Error Codes::.
75323 -`int EBACKGROUND'
75324 - `errno.h' (GNU: Inappropriate operation for background process):
75325 - *Note Error Codes::.
75327 -`int EBADE'
75328 - `errno.h' (Linux???: Invalid exchange): *Note Error Codes::.
75330 -`int EBADF'
75331 - `errno.h' (POSIX.1: Bad file descriptor): *Note Error Codes::.
75333 -`int EBADFD'
75334 - `errno.h' (Linux???: File descriptor in bad state): *Note Error
75335 - Codes::.
75337 -`int EBADMSG'
75338 - `errno.h' (XOPEN: Bad message): *Note Error Codes::.
75340 -`int EBADR'
75341 - `errno.h' (Linux???: Invalid request descriptor): *Note Error
75342 - Codes::.
75344 -`int EBADRPC'
75345 - `errno.h' (BSD: RPC struct is bad): *Note Error Codes::.
75347 -`int EBADRQC'
75348 - `errno.h' (Linux???: Invalid request code): *Note Error Codes::.
75350 -`int EBADSLT'
75351 - `errno.h' (Linux???: Invalid slot): *Note Error Codes::.
75353 -`int EBFONT'
75354 - `errno.h' (Linux???: Bad font file format): *Note Error Codes::.
75356 -`int EBUSY'
75357 - `errno.h' (POSIX.1: Device or resource busy): *Note Error Codes::.
75359 -`int ECANCELED'
75360 - `errno.h' (POSIX.1: Operation canceled): *Note Error Codes::.
75362 -`int ecb_crypt (char *KEY, char *BLOCKS, unsigned LEN, unsigned MODE)'
75363 - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::.
75365 -`int ECHILD'
75366 - `errno.h' (POSIX.1: No child processes): *Note Error Codes::.
75368 -`tcflag_t ECHO'
75369 - `termios.h' (POSIX.1): *Note Local Modes::.
75371 -`tcflag_t ECHOCTL'
75372 - `termios.h' (BSD): *Note Local Modes::.
75374 -`tcflag_t ECHOE'
75375 - `termios.h' (POSIX.1): *Note Local Modes::.
75377 -`tcflag_t ECHOK'
75378 - `termios.h' (POSIX.1): *Note Local Modes::.
75380 -`tcflag_t ECHOKE'
75381 - `termios.h' (BSD): *Note Local Modes::.
75383 -`tcflag_t ECHONL'
75384 - `termios.h' (POSIX.1): *Note Local Modes::.
75386 -`tcflag_t ECHOPRT'
75387 - `termios.h' (BSD): *Note Local Modes::.
75389 -`int ECHRNG'
75390 - `errno.h' (Linux???: Channel number out of range): *Note Error
75391 - Codes::.
75393 -`int ECOMM'
75394 - `errno.h' (Linux???: Communication error on send): *Note Error
75395 - Codes::.
75397 -`int ECONNABORTED'
75398 - `errno.h' (BSD: Software caused connection abort): *Note Error
75399 - Codes::.
75401 -`int ECONNREFUSED'
75402 - `errno.h' (BSD: Connection refused): *Note Error Codes::.
75404 -`int ECONNRESET'
75405 - `errno.h' (BSD: Connection reset by peer): *Note Error Codes::.
75407 -`char * ecvt (double VALUE, int NDIGIT, int *DECPT, int *NEG)'
75408 - `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::.
75410 -`char * ecvt_r (double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)'
75411 - `stdlib.h' (GNU): *Note System V Number Conversion::.
75413 -`int ED'
75414 - `errno.h' (GNU: ?): *Note Error Codes::.
75416 -`int EDEADLK'
75417 - `errno.h' (POSIX.1: Resource deadlock avoided): *Note Error
75418 - Codes::.
75420 -`int EDEADLOCK'
75421 - `errno.h' (Linux???: File locking deadlock error): *Note Error
75422 - Codes::.
75424 -`int EDESTADDRREQ'
75425 - `errno.h' (BSD: Destination address required): *Note Error
75426 - Codes::.
75428 -`int EDIED'
75429 - `errno.h' (GNU: Translator died): *Note Error Codes::.
75431 -`int EDOM'
75432 - `errno.h' (ISO: Numerical argument out of domain): *Note Error
75433 - Codes::.
75435 -`int EDOTDOT'
75436 - `errno.h' (Linux???: RFS specific error): *Note Error Codes::.
75438 -`int EDQUOT'
75439 - `errno.h' (BSD: Disk quota exceeded): *Note Error Codes::.
75441 -`int EEXIST'
75442 - `errno.h' (POSIX.1: File exists): *Note Error Codes::.
75444 -`int EFAULT'
75445 - `errno.h' (POSIX.1: Bad address): *Note Error Codes::.
75447 -`int EFBIG'
75448 - `errno.h' (POSIX.1: File too large): *Note Error Codes::.
75450 -`int EFTYPE'
75451 - `errno.h' (BSD: Inappropriate file type or format): *Note Error
75452 - Codes::.
75454 -`int EGRATUITOUS'
75455 - `errno.h' (GNU: Gratuitous error): *Note Error Codes::.
75457 -`int EGREGIOUS'
75458 - `errno.h' (GNU: You really blew it this time): *Note Error
75459 - Codes::.
75461 -`int EHOSTDOWN'
75462 - `errno.h' (BSD: Host is down): *Note Error Codes::.
75464 -`int EHOSTUNREACH'
75465 - `errno.h' (BSD: No route to host): *Note Error Codes::.
75467 -`int EIDRM'
75468 - `errno.h' (XOPEN: Identifier removed): *Note Error Codes::.
75470 -`int EIEIO'
75471 - `errno.h' (GNU: Computer bought the farm): *Note Error Codes::.
75473 -`int EILSEQ'
75474 - `errno.h' (ISO: Invalid or incomplete multibyte or wide
75475 - character): *Note Error Codes::.
75477 -`int EINPROGRESS'
75478 - `errno.h' (BSD: Operation now in progress): *Note Error Codes::.
75480 -`int EINTR'
75481 - `errno.h' (POSIX.1: Interrupted system call): *Note Error Codes::.
75483 -`int EINVAL'
75484 - `errno.h' (POSIX.1: Invalid argument): *Note Error Codes::.
75486 -`int EIO'
75487 - `errno.h' (POSIX.1: Input/output error): *Note Error Codes::.
75489 -`int EISCONN'
75490 - `errno.h' (BSD: Transport endpoint is already connected): *Note
75491 - Error Codes::.
75493 -`int EISDIR'
75494 - `errno.h' (POSIX.1: Is a directory): *Note Error Codes::.
75496 -`int EISNAM'
75497 - `errno.h' (Linux???: Is a named type file): *Note Error Codes::.
75499 -`int EL2HLT'
75500 - `errno.h' (Obsolete: Level 2 halted): *Note Error Codes::.
75502 -`int EL2NSYNC'
75503 - `errno.h' (Obsolete: Level 2 not synchronized): *Note Error
75504 - Codes::.
75506 -`int EL3HLT'
75507 - `errno.h' (Obsolete: Level 3 halted): *Note Error Codes::.
75509 -`int EL3RST'
75510 - `errno.h' (Obsolete: Level 3 reset): *Note Error Codes::.
75512 -`int ELIBACC'
75513 - `errno.h' (Linux???: Can not access a needed shared library):
75514 - *Note Error Codes::.
75516 -`int ELIBBAD'
75517 - `errno.h' (Linux???: Accessing a corrupted shared library): *Note
75518 - Error Codes::.
75520 -`int ELIBEXEC'
75521 - `errno.h' (Linux???: Cannot exec a shared library directly):
75522 - *Note Error Codes::.
75524 -`int ELIBMAX'
75525 - `errno.h' (Linux???: Attempting to link in too many shared
75526 - libraries): *Note Error Codes::.
75528 -`int ELIBSCN'
75529 - `errno.h' (Linux???: .lib section in a.out corrupted): *Note
75530 - Error Codes::.
75532 -`int ELNRNG'
75533 - `errno.h' (Linux???: Link number out of range): *Note Error
75534 - Codes::.
75536 -`int ELOOP'
75537 - `errno.h' (BSD: Too many levels of symbolic links): *Note Error
75538 - Codes::.
75540 -`int EMEDIUMTYPE'
75541 - `errno.h' (Linux???: Wrong medium type): *Note Error Codes::.
75543 -`int EMFILE'
75544 - `errno.h' (POSIX.1: Too many open files): *Note Error Codes::.
75546 -`int EMLINK'
75547 - `errno.h' (POSIX.1: Too many links): *Note Error Codes::.
75549 -`EMPTY'
75550 - `utmp.h' (SVID): *Note Manipulating the Database::.
75552 -`EMPTY'
75553 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
75555 -`int EMSGSIZE'
75556 - `errno.h' (BSD: Message too long): *Note Error Codes::.
75558 -`int EMULTIHOP'
75559 - `errno.h' (XOPEN: Multihop attempted): *Note Error Codes::.
75561 -`int ENAMETOOLONG'
75562 - `errno.h' (POSIX.1: File name too long): *Note Error Codes::.
75564 -`int ENAVAIL'
75565 - `errno.h' (Linux???: No XENIX semaphores available): *Note Error
75566 - Codes::.
75568 -`void encrypt (char *BLOCK, int EDFLAG)'
75569 - `crypt.h' (BSD, SVID): *Note DES Encryption::.
75571 -`void encrypt_r (char *BLOCK, int EDFLAG, struct crypt_data * DATA)'
75572 - `crypt.h' (GNU): *Note DES Encryption::.
75574 -`void endfsent (void)'
75575 - `fstab.h' (BSD): *Note fstab::.
75577 -`void endgrent (void)'
75578 - `grp.h' (SVID, BSD): *Note Scanning All Groups::.
75580 -`void endhostent (void)'
75581 - `netdb.h' (BSD): *Note Host Names::.
75583 -`int endmntent (FILE *STREAM)'
75584 - `mntent.h' (BSD): *Note mtab::.
75586 -`void endnetent (void)'
75587 - `netdb.h' (BSD): *Note Networks Database::.
75589 -`void endnetgrent (void)'
75590 - `netdb.h' (BSD): *Note Lookup Netgroup::.
75592 -`void endprotoent (void)'
75593 - `netdb.h' (BSD): *Note Protocols Database::.
75595 -`void endpwent (void)'
75596 - `pwd.h' (SVID, BSD): *Note Scanning All Users::.
75598 -`void endservent (void)'
75599 - `netdb.h' (BSD): *Note Services Database::.
75601 -`void endutent (void)'
75602 - `utmp.h' (SVID): *Note Manipulating the Database::.
75604 -`void endutxent (void)'
75605 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
75607 -`int ENEEDAUTH'
75608 - `errno.h' (BSD: Need authenticator): *Note Error Codes::.
75610 -`int ENETDOWN'
75611 - `errno.h' (BSD: Network is down): *Note Error Codes::.
75613 -`int ENETRESET'
75614 - `errno.h' (BSD: Network dropped connection on reset): *Note Error
75615 - Codes::.
75617 -`int ENETUNREACH'
75618 - `errno.h' (BSD: Network is unreachable): *Note Error Codes::.
75620 -`int ENFILE'
75621 - `errno.h' (POSIX.1: Too many open files in system): *Note Error
75622 - Codes::.
75624 -`int ENOANO'
75625 - `errno.h' (Linux???: No anode): *Note Error Codes::.
75627 -`int ENOBUFS'
75628 - `errno.h' (BSD: No buffer space available): *Note Error Codes::.
75630 -`int ENOCSI'
75631 - `errno.h' (Linux???: No CSI structure available): *Note Error
75632 - Codes::.
75634 -`int ENODATA'
75635 - `errno.h' (XOPEN: No data available): *Note Error Codes::.
75637 -`int ENODEV'
75638 - `errno.h' (POSIX.1: No such device): *Note Error Codes::.
75640 -`int ENOENT'
75641 - `errno.h' (POSIX.1: No such file or directory): *Note Error
75642 - Codes::.
75644 -`int ENOEXEC'
75645 - `errno.h' (POSIX.1: Exec format error): *Note Error Codes::.
75647 -`int ENOLCK'
75648 - `errno.h' (POSIX.1: No locks available): *Note Error Codes::.
75650 -`int ENOLINK'
75651 - `errno.h' (XOPEN: Link has been severed): *Note Error Codes::.
75653 -`int ENOMEDIUM'
75654 - `errno.h' (Linux???: No medium found): *Note Error Codes::.
75656 -`int ENOMEM'
75657 - `errno.h' (POSIX.1: Cannot allocate memory): *Note Error Codes::.
75659 -`int ENOMSG'
75660 - `errno.h' (XOPEN: No message of desired type): *Note Error
75661 - Codes::.
75663 -`int ENONET'
75664 - `errno.h' (Linux???: Machine is not on the network): *Note Error
75665 - Codes::.
75667 -`int ENOPKG'
75668 - `errno.h' (Linux???: Package not installed): *Note Error Codes::.
75670 -`int ENOPROTOOPT'
75671 - `errno.h' (BSD: Protocol not available): *Note Error Codes::.
75673 -`int ENOSPC'
75674 - `errno.h' (POSIX.1: No space left on device): *Note Error Codes::.
75676 -`int ENOSR'
75677 - `errno.h' (XOPEN: Out of streams resources): *Note Error Codes::.
75679 -`int ENOSTR'
75680 - `errno.h' (XOPEN: Device not a stream): *Note Error Codes::.
75682 -`int ENOSYS'
75683 - `errno.h' (POSIX.1: Function not implemented): *Note Error
75684 - Codes::.
75686 -`int ENOTBLK'
75687 - `errno.h' (BSD: Block device required): *Note Error Codes::.
75689 -`int ENOTCONN'
75690 - `errno.h' (BSD: Transport endpoint is not connected): *Note Error
75691 - Codes::.
75693 -`int ENOTDIR'
75694 - `errno.h' (POSIX.1: Not a directory): *Note Error Codes::.
75696 -`int ENOTEMPTY'
75697 - `errno.h' (POSIX.1: Directory not empty): *Note Error Codes::.
75699 -`int ENOTNAM'
75700 - `errno.h' (Linux???: Not a XENIX named type file): *Note Error
75701 - Codes::.
75703 -`int ENOTSOCK'
75704 - `errno.h' (BSD: Socket operation on non-socket): *Note Error
75705 - Codes::.
75707 -`int ENOTSUP'
75708 - `errno.h' (POSIX.1: Not supported): *Note Error Codes::.
75710 -`int ENOTTY'
75711 - `errno.h' (POSIX.1: Inappropriate ioctl for device): *Note Error
75712 - Codes::.
75714 -`int ENOTUNIQ'
75715 - `errno.h' (Linux???: Name not unique on network): *Note Error
75716 - Codes::.
75718 -`char ** environ'
75719 - `unistd.h' (POSIX.1): *Note Environment Access::.
75721 -`error_t envz_add (char **ENVZ, size_t *ENVZ_LEN, const char *NAME, const char *VALUE)'
75722 - `envz.h' (GNU): *Note Envz Functions::.
75724 -`char * envz_entry (const char *ENVZ, size_t ENVZ_LEN, const char *NAME)'
75725 - `envz.h' (GNU): *Note Envz Functions::.
75727 -`char * envz_get (const char *ENVZ, size_t ENVZ_LEN, const char *NAME)'
75728 - `envz.h' (GNU): *Note Envz Functions::.
75730 -`error_t envz_merge (char **ENVZ, size_t *ENVZ_LEN, const char *ENVZ2, size_t ENVZ2_LEN, int OVERRIDE)'
75731 - `envz.h' (GNU): *Note Envz Functions::.
75733 -`void envz_strip (char **ENVZ, size_t *ENVZ_LEN)'
75734 - `envz.h' (GNU): *Note Envz Functions::.
75736 -`int ENXIO'
75737 - `errno.h' (POSIX.1: No such device or address): *Note Error
75738 - Codes::.
75740 -`int EOF'
75741 - `stdio.h' (ISO): *Note EOF and Errors::.
75743 -`int EOPNOTSUPP'
75744 - `errno.h' (BSD: Operation not supported): *Note Error Codes::.
75746 -`int EOVERFLOW'
75747 - `errno.h' (XOPEN: Value too large for defined data type): *Note
75748 - Error Codes::.
75750 -`int EPERM'
75751 - `errno.h' (POSIX.1: Operation not permitted): *Note Error Codes::.
75753 -`int EPFNOSUPPORT'
75754 - `errno.h' (BSD: Protocol family not supported): *Note Error
75755 - Codes::.
75757 -`int EPIPE'
75758 - `errno.h' (POSIX.1: Broken pipe): *Note Error Codes::.
75760 -`int EPROCLIM'
75761 - `errno.h' (BSD: Too many processes): *Note Error Codes::.
75763 -`int EPROCUNAVAIL'
75764 - `errno.h' (BSD: RPC bad procedure for program): *Note Error
75765 - Codes::.
75767 -`int EPROGMISMATCH'
75768 - `errno.h' (BSD: RPC program version wrong): *Note Error Codes::.
75770 -`int EPROGUNAVAIL'
75771 - `errno.h' (BSD: RPC program not available): *Note Error Codes::.
75773 -`int EPROTO'
75774 - `errno.h' (XOPEN: Protocol error): *Note Error Codes::.
75776 -`int EPROTONOSUPPORT'
75777 - `errno.h' (BSD: Protocol not supported): *Note Error Codes::.
75779 -`int EPROTOTYPE'
75780 - `errno.h' (BSD: Protocol wrong type for socket): *Note Error
75781 - Codes::.
75783 -`int EQUIV_CLASS_MAX'
75784 - `limits.h' (POSIX.2): *Note Utility Limits::.
75786 -`double erand48 (unsigned short int XSUBI[3])'
75787 - `stdlib.h' (SVID): *Note SVID Random::.
75789 -`int erand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, double *RESULT)'
75790 - `stdlib.h' (GNU): *Note SVID Random::.
75792 -`int ERANGE'
75793 - `errno.h' (ISO: Numerical result out of range): *Note Error
75794 - Codes::.
75796 -`int EREMCHG'
75797 - `errno.h' (Linux???: Remote address changed): *Note Error Codes::.
75799 -`int EREMOTE'
75800 - `errno.h' (BSD: Object is remote): *Note Error Codes::.
75802 -`int EREMOTEIO'
75803 - `errno.h' (Linux???: Remote I/O error): *Note Error Codes::.
75805 -`int ERESTART'
75806 - `errno.h' (Linux???: Interrupted system call should be restarted):
75807 - *Note Error Codes::.
75809 -`double erf (double X)'
75810 - `math.h' (SVID): *Note Special Functions::.
75812 -`double erfc (double X)'
75813 - `math.h' (SVID): *Note Special Functions::.
75815 -`float erfcf (float X)'
75816 - `math.h' (SVID): *Note Special Functions::.
75818 -`long double erfcl (long double X)'
75819 - `math.h' (SVID): *Note Special Functions::.
75821 -`float erff (float X)'
75822 - `math.h' (SVID): *Note Special Functions::.
75824 -`long double erfl (long double X)'
75825 - `math.h' (SVID): *Note Special Functions::.
75827 -`int EROFS'
75828 - `errno.h' (POSIX.1: Read-only file system): *Note Error Codes::.
75830 -`int ERPCMISMATCH'
75831 - `errno.h' (BSD: RPC version wrong): *Note Error Codes::.
75833 -`void err (int STATUS, const char *FORMAT, ...)'
75834 - `err.h' (BSD): *Note Error Messages::.
75836 -`volatile int errno'
75837 - `errno.h' (ISO): *Note Checking for Errors::.
75839 -`void error (int STATUS, int ERRNUM, const char *FORMAT, ...)'
75840 - `error.h' (GNU): *Note Error Messages::.
75842 -`void error_at_line (int STATUS, int ERRNUM, const char *FNAME, unsigned int LINENO, const char *FORMAT, ...)'
75843 - `error.h' (GNU): *Note Error Messages::.
75845 -`unsigned int error_message_count'
75846 - `error.h' (GNU): *Note Error Messages::.
75848 -`int error_one_per_line'
75849 - `error.h' (GNU): *Note Error Messages::.
75851 -`void (* error_print_progname ) (void)'
75852 - `error.h' (GNU): *Note Error Messages::.
75854 -`void errx (int STATUS, const char *FORMAT, ...)'
75855 - `err.h' (BSD): *Note Error Messages::.
75857 -`int ESHUTDOWN'
75858 - `errno.h' (BSD: Cannot send after transport endpoint shutdown):
75859 - *Note Error Codes::.
75861 -`int ESOCKTNOSUPPORT'
75862 - `errno.h' (BSD: Socket type not supported): *Note Error Codes::.
75864 -`int ESPIPE'
75865 - `errno.h' (POSIX.1: Illegal seek): *Note Error Codes::.
75867 -`int ESRCH'
75868 - `errno.h' (POSIX.1: No such process): *Note Error Codes::.
75870 -`int ESRMNT'
75871 - `errno.h' (Linux???: Srmount error): *Note Error Codes::.
75873 -`int ESTALE'
75874 - `errno.h' (BSD: Stale NFS file handle): *Note Error Codes::.
75876 -`int ESTRPIPE'
75877 - `errno.h' (Linux???: Streams pipe error): *Note Error Codes::.
75879 -`int ETIME'
75880 - `errno.h' (XOPEN: Timer expired): *Note Error Codes::.
75882 -`int ETIMEDOUT'
75883 - `errno.h' (BSD: Connection timed out): *Note Error Codes::.
75885 -`int ETOOMANYREFS'
75886 - `errno.h' (BSD: Too many references: cannot splice): *Note Error
75887 - Codes::.
75889 -`int ETXTBSY'
75890 - `errno.h' (BSD: Text file busy): *Note Error Codes::.
75892 -`int EUCLEAN'
75893 - `errno.h' (Linux???: Structure needs cleaning): *Note Error
75894 - Codes::.
75896 -`int EUNATCH'
75897 - `errno.h' (Linux???: Protocol driver not attached): *Note Error
75898 - Codes::.
75900 -`int EUSERS'
75901 - `errno.h' (BSD: Too many users): *Note Error Codes::.
75903 -`int EWOULDBLOCK'
75904 - `errno.h' (BSD: Operation would block): *Note Error Codes::.
75906 -`int EXDEV'
75907 - `errno.h' (POSIX.1: Invalid cross-device link): *Note Error
75908 - Codes::.
75910 -`int execl (const char *FILENAME, const char *ARG0, ...)'
75911 - `unistd.h' (POSIX.1): *Note Executing a File::.
75913 -`int execle (const char *FILENAME, const char *ARG0, char *const ENV[], ...)'
75914 - `unistd.h' (POSIX.1): *Note Executing a File::.
75916 -`int execlp (const char *FILENAME, const char *ARG0, ...)'
75917 - `unistd.h' (POSIX.1): *Note Executing a File::.
75919 -`int execv (const char *FILENAME, char *const ARGV[])'
75920 - `unistd.h' (POSIX.1): *Note Executing a File::.
75922 -`int execve (const char *FILENAME, char *const ARGV[], char *const ENV[])'
75923 - `unistd.h' (POSIX.1): *Note Executing a File::.
75925 -`int execvp (const char *FILENAME, char *const ARGV[])'
75926 - `unistd.h' (POSIX.1): *Note Executing a File::.
75928 -`int EXFULL'
75929 - `errno.h' (Linux???: Exchange full): *Note Error Codes::.
75931 -`void _Exit (int STATUS)'
75932 - `stdlib.h' (ISO): *Note Termination Internals::.
75934 -`void _exit (int STATUS)'
75935 - `unistd.h' (POSIX.1): *Note Termination Internals::.
75937 -`void exit (int STATUS)'
75938 - `stdlib.h' (ISO): *Note Normal Termination::.
75940 -`int EXIT_FAILURE'
75941 - `stdlib.h' (ISO): *Note Exit Status::.
75943 -`int EXIT_SUCCESS'
75944 - `stdlib.h' (ISO): *Note Exit Status::.
75946 -`double exp (double X)'
75947 - `math.h' (ISO): *Note Exponents and Logarithms::.
75949 -`double exp10 (double X)'
75950 - `math.h' (GNU): *Note Exponents and Logarithms::.
75952 -`float exp10f (float X)'
75953 - `math.h' (GNU): *Note Exponents and Logarithms::.
75955 -`long double exp10l (long double X)'
75956 - `math.h' (GNU): *Note Exponents and Logarithms::.
75958 -`double exp2 (double X)'
75959 - `math.h' (ISO): *Note Exponents and Logarithms::.
75961 -`float exp2f (float X)'
75962 - `math.h' (ISO): *Note Exponents and Logarithms::.
75964 -`long double exp2l (long double X)'
75965 - `math.h' (ISO): *Note Exponents and Logarithms::.
75967 -`float expf (float X)'
75968 - `math.h' (ISO): *Note Exponents and Logarithms::.
75970 -`long double expl (long double X)'
75971 - `math.h' (ISO): *Note Exponents and Logarithms::.
75973 -`double expm1 (double X)'
75974 - `math.h' (ISO): *Note Exponents and Logarithms::.
75976 -`float expm1f (float X)'
75977 - `math.h' (ISO): *Note Exponents and Logarithms::.
75979 -`long double expm1l (long double X)'
75980 - `math.h' (ISO): *Note Exponents and Logarithms::.
75982 -`int EXPR_NEST_MAX'
75983 - `limits.h' (POSIX.2): *Note Utility Limits::.
75985 -`double fabs (double NUMBER)'
75986 - `math.h' (ISO): *Note Absolute Value::.
75988 -`float fabsf (float NUMBER)'
75989 - `math.h' (ISO): *Note Absolute Value::.
75991 -`long double fabsl (long double NUMBER)'
75992 - `math.h' (ISO): *Note Absolute Value::.
75994 -`size_t __fbufsize (FILE *STREAM)'
75995 - `stdio_ext.h' (GNU): *Note Controlling Buffering::.
75997 -`int fchdir (int FILEDES)'
75998 - `unistd.h' (XPG): *Note Working Directory::.
76000 -`int fchmod (int FILEDES, int MODE)'
76001 - `sys/stat.h' (BSD): *Note Setting Permissions::.
76003 -`int fchown (int FILEDES, int OWNER, int GROUP)'
76004 - `unistd.h' (BSD): *Note File Owner::.
76006 -`int fclean (FILE *STREAM)'
76007 - `stdio.h' (GNU): *Note Cleaning Streams::.
76009 -`int fclose (FILE *STREAM)'
76010 - `stdio.h' (ISO): *Note Closing Streams::.
76012 -`int fcloseall (void)'
76013 - `stdio.h' (GNU): *Note Closing Streams::.
76015 -`int fcntl (int FILEDES, int COMMAND, ...)'
76016 - `fcntl.h' (POSIX.1): *Note Control Operations::.
76018 -`char * fcvt (double VALUE, int NDIGIT, int *DECPT, int *NEG)'
76019 - `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::.
76021 -`char * fcvt_r (double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)'
76022 - `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::.
76024 -`int fdatasync (int FILDES)'
76025 - `unistd.h' (POSIX): *Note Synchronizing I/O::.
76027 -`int FD_CLOEXEC'
76028 - `fcntl.h' (POSIX.1): *Note Descriptor Flags::.
76030 -`void FD_CLR (int FILEDES, fd_set *SET)'
76031 - `sys/types.h' (BSD): *Note Waiting for I/O::.
76033 -`double fdim (double X, double Y)'
76034 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76036 -`float fdimf (float X, float Y)'
76037 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76039 -`long double fdiml (long double X, long double Y)'
76040 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76042 -`int FD_ISSET (int FILEDES, fd_set *SET)'
76043 - `sys/types.h' (BSD): *Note Waiting for I/O::.
76045 -`FILE * fdopen (int FILEDES, const char *OPENTYPE)'
76046 - `stdio.h' (POSIX.1): *Note Descriptors and Streams::.
76048 -`void FD_SET (int FILEDES, fd_set *SET)'
76049 - `sys/types.h' (BSD): *Note Waiting for I/O::.
76051 -`fd_set'
76052 - `sys/types.h' (BSD): *Note Waiting for I/O::.
76054 -`int FD_SETSIZE'
76055 - `sys/types.h' (BSD): *Note Waiting for I/O::.
76057 -`int F_DUPFD'
76058 - `fcntl.h' (POSIX.1): *Note Duplicating Descriptors::.
76060 -`void FD_ZERO (fd_set *SET)'
76061 - `sys/types.h' (BSD): *Note Waiting for I/O::.
76063 -`int feclearexcept (int EXCEPTS)'
76064 - `fenv.h' (ISO): *Note Status bit operations::.
76066 -`int fedisableexcept (int EXCEPTS)'
76067 - `fenv.h' (GNU): *Note Control Functions::.
76069 -`FE_DIVBYZERO'
76070 - `fenv.h' (ISO): *Note Status bit operations::.
76072 -`FE_DOWNWARD'
76073 - `fenv.h' (ISO): *Note Rounding::.
76075 -`int feenableexcept (int EXCEPTS)'
76076 - `fenv.h' (GNU): *Note Control Functions::.
76078 -`int fegetenv (fenv_t *ENVP)'
76079 - `fenv.h' (ISO): *Note Control Functions::.
76081 -`int fegetexcept (int EXCEPTS)'
76082 - `fenv.h' (GNU): *Note Control Functions::.
76084 -`int fegetexceptflag (fexcept_t *FLAGP, int EXCEPTS)'
76085 - `fenv.h' (ISO): *Note Status bit operations::.
76087 -`int fegetround (void)'
76088 - `fenv.h' (ISO): *Note Rounding::.
76090 -`int feholdexcept (fenv_t *ENVP)'
76091 - `fenv.h' (ISO): *Note Control Functions::.
76093 -`FE_INEXACT'
76094 - `fenv.h' (ISO): *Note Status bit operations::.
76096 -`FE_INVALID'
76097 - `fenv.h' (ISO): *Note Status bit operations::.
76099 -`int feof (FILE *STREAM)'
76100 - `stdio.h' (ISO): *Note EOF and Errors::.
76102 -`int feof_unlocked (FILE *STREAM)'
76103 - `stdio.h' (GNU): *Note EOF and Errors::.
76105 -`FE_OVERFLOW'
76106 - `fenv.h' (ISO): *Note Status bit operations::.
76108 -`int feraiseexcept (int EXCEPTS)'
76109 - `fenv.h' (ISO): *Note Status bit operations::.
76111 -`int ferror (FILE *STREAM)'
76112 - `stdio.h' (ISO): *Note EOF and Errors::.
76114 -`int ferror_unlocked (FILE *STREAM)'
76115 - `stdio.h' (GNU): *Note EOF and Errors::.
76117 -`int fesetenv (const fenv_t *ENVP)'
76118 - `fenv.h' (ISO): *Note Control Functions::.
76120 -`int fesetexceptflag (const fexcept_t *FLAGP, int'
76121 - `fenv.h' (ISO): *Note Status bit operations::.
76123 -`int fesetround (int ROUND)'
76124 - `fenv.h' (ISO): *Note Rounding::.
76126 -`int fetestexcept (int EXCEPTS)'
76127 - `fenv.h' (ISO): *Note Status bit operations::.
76129 -`FE_TONEAREST'
76130 - `fenv.h' (ISO): *Note Rounding::.
76132 -`FE_TOWARDZERO'
76133 - `fenv.h' (ISO): *Note Rounding::.
76135 -`FE_UNDERFLOW'
76136 - `fenv.h' (ISO): *Note Status bit operations::.
76138 -`int feupdateenv (const fenv_t *ENVP)'
76139 - `fenv.h' (ISO): *Note Control Functions::.
76141 -`FE_UPWARD'
76142 - `fenv.h' (ISO): *Note Rounding::.
76144 -`int fflush (FILE *STREAM)'
76145 - `stdio.h' (ISO): *Note Flushing Buffers::.
76147 -`int fflush_unlocked (FILE *STREAM)'
76148 - `stdio.h' (POSIX): *Note Flushing Buffers::.
76150 -`int fgetc (FILE *STREAM)'
76151 - `stdio.h' (ISO): *Note Character Input::.
76153 -`int fgetc_unlocked (FILE *STREAM)'
76154 - `stdio.h' (POSIX): *Note Character Input::.
76156 -`int F_GETFD'
76157 - `fcntl.h' (POSIX.1): *Note Descriptor Flags::.
76159 -`int F_GETFL'
76160 - `fcntl.h' (POSIX.1): *Note Getting File Status Flags::.
76162 -`struct group * fgetgrent (FILE *STREAM)'
76163 - `grp.h' (SVID): *Note Scanning All Groups::.
76165 -`int fgetgrent_r (FILE *STREAM, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)'
76166 - `grp.h' (GNU): *Note Scanning All Groups::.
76168 -`int F_GETLK'
76169 - `fcntl.h' (POSIX.1): *Note File Locks::.
76171 -`int F_GETOWN'
76172 - `fcntl.h' (BSD): *Note Interrupt Input::.
76174 -`int fgetpos (FILE *STREAM, fpos_t *POSITION)'
76175 - `stdio.h' (ISO): *Note Portable Positioning::.
76177 -`int fgetpos64 (FILE *STREAM, fpos64_t *POSITION)'
76178 - `stdio.h' (Unix98): *Note Portable Positioning::.
76180 -`struct passwd * fgetpwent (FILE *STREAM)'
76181 - `pwd.h' (SVID): *Note Scanning All Users::.
76183 -`int fgetpwent_r (FILE *STREAM, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)'
76184 - `pwd.h' (GNU): *Note Scanning All Users::.
76186 -`char * fgets (char *S, int COUNT, FILE *STREAM)'
76187 - `stdio.h' (ISO): *Note Line Input::.
76189 -`char * fgets_unlocked (char *S, int COUNT, FILE *STREAM)'
76190 - `stdio.h' (GNU): *Note Line Input::.
76192 -`wint_t fgetwc (FILE *STREAM)'
76193 - `wchar.h' (ISO): *Note Character Input::.
76195 -`wint_t fgetwc_unlocked (FILE *STREAM)'
76196 - `wchar.h' (GNU): *Note Character Input::.
76198 -`wchar_t * fgetws (wchar_t *WS, int COUNT, FILE *STREAM)'
76199 - `wchar.h' (ISO): *Note Line Input::.
76201 -`wchar_t * fgetws_unlocked (wchar_t *WS, int COUNT, FILE *STREAM)'
76202 - `wchar.h' (GNU): *Note Line Input::.
76204 -`FILE'
76205 - `stdio.h' (ISO): *Note Streams::.
76207 -`int FILENAME_MAX'
76208 - `stdio.h' (ISO): *Note Limits for Files::.
76210 -`int fileno (FILE *STREAM)'
76211 - `stdio.h' (POSIX.1): *Note Descriptors and Streams::.
76213 -`int fileno_unlocked (FILE *STREAM)'
76214 - `stdio.h' (GNU): *Note Descriptors and Streams::.
76216 -`int finite (double X)'
76217 - `math.h' (BSD): *Note Floating Point Classes::.
76219 -`int finitef (float X)'
76220 - `math.h' (BSD): *Note Floating Point Classes::.
76222 -`int finitel (long double X)'
76223 - `math.h' (BSD): *Note Floating Point Classes::.
76225 -`int __flbf (FILE *STREAM)'
76226 - `stdio_ext.h' (GNU): *Note Controlling Buffering::.
76228 -`void flockfile (FILE *STREAM)'
76229 - `stdio.h' (POSIX): *Note Streams and Threads::.
76231 -`double floor (double X)'
76232 - `math.h' (ISO): *Note Rounding Functions::.
76234 -`float floorf (float X)'
76235 - `math.h' (ISO): *Note Rounding Functions::.
76237 -`long double floorl (long double X)'
76238 - `math.h' (ISO): *Note Rounding Functions::.
76240 -`FLT_DIG'
76241 - `float.h' (ISO): *Note Floating Point Parameters::.
76243 -`FLT_EPSILON'
76244 - `float.h' (ISO): *Note Floating Point Parameters::.
76246 -`FLT_MANT_DIG'
76247 - `float.h' (ISO): *Note Floating Point Parameters::.
76249 -`FLT_MAX'
76250 - `float.h' (ISO): *Note Floating Point Parameters::.
76252 -`FLT_MAX_10_EXP'
76253 - `float.h' (ISO): *Note Floating Point Parameters::.
76255 -`FLT_MAX_EXP'
76256 - `float.h' (ISO): *Note Floating Point Parameters::.
76258 -`FLT_MIN'
76259 - `float.h' (ISO): *Note Floating Point Parameters::.
76261 -`FLT_MIN_10_EXP'
76262 - `float.h' (ISO): *Note Floating Point Parameters::.
76264 -`FLT_MIN_EXP'
76265 - `float.h' (ISO): *Note Floating Point Parameters::.
76267 -`FLT_RADIX'
76268 - `float.h' (ISO): *Note Floating Point Parameters::.
76270 -`FLT_ROUNDS'
76271 - `float.h' (ISO): *Note Floating Point Parameters::.
76273 -`void _flushlbf (void)'
76274 - `stdio_ext.h' (GNU): *Note Flushing Buffers::.
76276 -`tcflag_t FLUSHO'
76277 - `termios.h' (BSD): *Note Local Modes::.
76279 -`double fma (double X, double Y, double Z)'
76280 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76282 -`float fmaf (float X, float Y, float Z)'
76283 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76285 -`long double fmal (long double X, long double Y, long double Z)'
76286 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76288 -`double fmax (double X, double Y)'
76289 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76291 -`float fmaxf (float X, float Y)'
76292 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76294 -`long double fmaxl (long double X, long double Y)'
76295 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76297 -`FILE * fmemopen (void *BUF, size_t SIZE, const char *OPENTYPE)'
76298 - `stdio.h' (GNU): *Note String Streams::.
76300 -`double fmin (double X, double Y)'
76301 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76303 -`float fminf (float X, float Y)'
76304 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76306 -`long double fminl (long double X, long double Y)'
76307 - `math.h' (ISO): *Note Misc FP Arithmetic::.
76309 -`double fmod (double NUMERATOR, double DENOMINATOR)'
76310 - `math.h' (ISO): *Note Remainder Functions::.
76312 -`float fmodf (float NUMERATOR, float DENOMINATOR)'
76313 - `math.h' (ISO): *Note Remainder Functions::.
76315 -`long double fmodl (long double NUMERATOR, long double DENOMINATOR)'
76316 - `math.h' (ISO): *Note Remainder Functions::.
76318 -`int fmtmsg (long int CLASSIFICATION, const char *LABEL, int SEVERITY, const char *TEXT, const char *ACTION, const char *TAG)'
76319 - `fmtmsg.h' (XPG): *Note Printing Formatted Messages::.
76321 -`int fnmatch (const char *PATTERN, const char *STRING, int FLAGS)'
76322 - `fnmatch.h' (POSIX.2): *Note Wildcard Matching::.
76324 -`FNM_CASEFOLD'
76325 - `fnmatch.h' (GNU): *Note Wildcard Matching::.
76327 -`FNM_EXTMATCH'
76328 - `fnmatch.h' (GNU): *Note Wildcard Matching::.
76330 -`FNM_FILE_NAME'
76331 - `fnmatch.h' (GNU): *Note Wildcard Matching::.
76333 -`FNM_LEADING_DIR'
76334 - `fnmatch.h' (GNU): *Note Wildcard Matching::.
76336 -`FNM_NOESCAPE'
76337 - `fnmatch.h' (POSIX.2): *Note Wildcard Matching::.
76339 -`FNM_PATHNAME'
76340 - `fnmatch.h' (POSIX.2): *Note Wildcard Matching::.
76342 -`FNM_PERIOD'
76343 - `fnmatch.h' (POSIX.2): *Note Wildcard Matching::.
76345 -`int F_OK'
76346 - `unistd.h' (POSIX.1): *Note Testing File Access::.
76348 -`FILE * fopen (const char *FILENAME, const char *OPENTYPE)'
76349 - `stdio.h' (ISO): *Note Opening Streams::.
76351 -`FILE * fopen64 (const char *FILENAME, const char *OPENTYPE)'
76352 - `stdio.h' (Unix98): *Note Opening Streams::.
76354 -`FILE * fopencookie (void *COOKIE, const char *OPENTYPE, cookie_io_functions_t IO-FUNCTIONS)'
76355 - `stdio.h' (GNU): *Note Streams and Cookies::.
76357 -`int FOPEN_MAX'
76358 - `stdio.h' (ISO): *Note Opening Streams::.
76360 -`pid_t fork (void)'
76361 - `unistd.h' (POSIX.1): *Note Creating a Process::.
76363 -`int forkpty (int *AMASTER, char *NAME, struct termios *TERMP, struct winsize *WINP)'
76364 - `pty.h' (BSD): *Note Pseudo-Terminal Pairs::.
76366 -`long int fpathconf (int FILEDES, int PARAMETER)'
76367 - `unistd.h' (POSIX.1): *Note Pathconf::.
76369 -`int fpclassify (_float-type_ X)'
76370 - `math.h' (ISO): *Note Floating Point Classes::.
76372 -`FPE_DECOVF_TRAP'
76373 - `signal.h' (BSD): *Note Program Error Signals::.
76375 -`FPE_FLTDIV_FAULT'
76376 - `signal.h' (BSD): *Note Program Error Signals::.
76378 -`FPE_FLTDIV_TRAP'
76379 - `signal.h' (BSD): *Note Program Error Signals::.
76381 -`FPE_FLTOVF_FAULT'
76382 - `signal.h' (BSD): *Note Program Error Signals::.
76384 -`FPE_FLTOVF_TRAP'
76385 - `signal.h' (BSD): *Note Program Error Signals::.
76387 -`FPE_FLTUND_FAULT'
76388 - `signal.h' (BSD): *Note Program Error Signals::.
76390 -`FPE_FLTUND_TRAP'
76391 - `signal.h' (BSD): *Note Program Error Signals::.
76393 -`FPE_INTDIV_TRAP'
76394 - `signal.h' (BSD): *Note Program Error Signals::.
76396 -`FPE_INTOVF_TRAP'
76397 - `signal.h' (BSD): *Note Program Error Signals::.
76399 -`size_t __fpending (FILE *STREAM) The `__fpending''
76400 - `stdio_ext.h' (GNU): *Note Controlling Buffering::.
76402 -`FPE_SUBRNG_TRAP'
76403 - `signal.h' (BSD): *Note Program Error Signals::.
76405 -`int FP_ILOGB0'
76406 - `math.h' (ISO): *Note Exponents and Logarithms::.
76408 -`int FP_ILOGBNAN'
76409 - `math.h' (ISO): *Note Exponents and Logarithms::.
76411 -`fpos64_t'
76412 - `stdio.h' (Unix98): *Note Portable Positioning::.
76414 -`fpos_t'
76415 - `stdio.h' (ISO): *Note Portable Positioning::.
76417 -`int fprintf (FILE *STREAM, const char *TEMPLATE, ...)'
76418 - `stdio.h' (ISO): *Note Formatted Output Functions::.
76420 -`void __fpurge (FILE *STREAM)'
76421 - `stdio_ext.h' (GNU): *Note Flushing Buffers::.
76423 -`int fputc (int C, FILE *STREAM)'
76424 - `stdio.h' (ISO): *Note Simple Output::.
76426 -`int fputc_unlocked (int C, FILE *STREAM)'
76427 - `stdio.h' (POSIX): *Note Simple Output::.
76429 -`int fputs (const char *S, FILE *STREAM)'
76430 - `stdio.h' (ISO): *Note Simple Output::.
76432 -`int fputs_unlocked (const char *S, FILE *STREAM)'
76433 - `stdio.h' (GNU): *Note Simple Output::.
76435 -`wint_t fputwc (wchar_t WC, FILE *STREAM)'
76436 - `wchar.h' (ISO): *Note Simple Output::.
76438 -`wint_t fputwc_unlocked (wint_t WC, FILE *STREAM)'
76439 - `wchar.h' (POSIX): *Note Simple Output::.
76441 -`int fputws (const wchar_t *WS, FILE *STREAM)'
76442 - `wchar.h' (ISO): *Note Simple Output::.
76444 -`int fputws_unlocked (const wchar_t *WS, FILE *STREAM)'
76445 - `wchar.h' (GNU): *Note Simple Output::.
76447 -`F_RDLCK'
76448 - `fcntl.h' (POSIX.1): *Note File Locks::.
76450 -`size_t fread (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)'
76451 - `stdio.h' (ISO): *Note Block Input/Output::.
76453 -`int __freadable (FILE *STREAM)'
76454 - `stdio_ext.h' (GNU): *Note Opening Streams::.
76456 -`int __freading (FILE *STREAM)'
76457 - `stdio_ext.h' (GNU): *Note Opening Streams::.
76459 -`size_t fread_unlocked (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)'
76460 - `stdio.h' (GNU): *Note Block Input/Output::.
76462 -`void free (void *PTR)'
76463 - `malloc.h', `stdlib.h' (ISO): *Note Freeing after Malloc::.
76465 -`__free_hook'
76466 - `malloc.h' (GNU): *Note Hooks for Malloc::.
76468 -`FILE * freopen (const char *FILENAME, const char *OPENTYPE, FILE *STREAM)'
76469 - `stdio.h' (ISO): *Note Opening Streams::.
76471 -`FILE * freopen64 (const char *FILENAME, const char *OPENTYPE, FILE *STREAM)'
76472 - `stdio.h' (Unix98): *Note Opening Streams::.
76474 -`double frexp (double VALUE, int *EXPONENT)'
76475 - `math.h' (ISO): *Note Normalization Functions::.
76477 -`float frexpf (float VALUE, int *EXPONENT)'
76478 - `math.h' (ISO): *Note Normalization Functions::.
76480 -`long double frexpl (long double VALUE, int *EXPONENT)'
76481 - `math.h' (ISO): *Note Normalization Functions::.
76483 -`int fscanf (FILE *STREAM, const char *TEMPLATE, ...)'
76484 - `stdio.h' (ISO): *Note Formatted Input Functions::.
76486 -`int fseek (FILE *STREAM, long int OFFSET, int WHENCE)'
76487 - `stdio.h' (ISO): *Note File Positioning::.
76489 -`int fseeko (FILE *STREAM, off_t OFFSET, int WHENCE)'
76490 - `stdio.h' (Unix98): *Note File Positioning::.
76492 -`int fseeko64 (FILE *STREAM, off64_t OFFSET, int WHENCE)'
76493 - `stdio.h' (Unix98): *Note File Positioning::.
76495 -`int F_SETFD'
76496 - `fcntl.h' (POSIX.1): *Note Descriptor Flags::.
76498 -`int F_SETFL'
76499 - `fcntl.h' (POSIX.1): *Note Getting File Status Flags::.
76501 -`int F_SETLK'
76502 - `fcntl.h' (POSIX.1): *Note File Locks::.
76504 -`int F_SETLKW'
76505 - `fcntl.h' (POSIX.1): *Note File Locks::.
76507 -`int __fsetlocking (FILE *STREAM, int TYPE)'
76508 - `stdio_ext.h' (GNU): *Note Streams and Threads::.
76510 -`int F_SETOWN'
76511 - `fcntl.h' (BSD): *Note Interrupt Input::.
76513 -`int fsetpos (FILE *STREAM, const fpos_t *POSITION)'
76514 - `stdio.h' (ISO): *Note Portable Positioning::.
76516 -`int fsetpos64 (FILE *STREAM, const fpos64_t *POSITION)'
76517 - `stdio.h' (Unix98): *Note Portable Positioning::.
76519 -`int fstat (int FILEDES, struct stat *BUF)'
76520 - `sys/stat.h' (POSIX.1): *Note Reading Attributes::.
76522 -`int fstat64 (int FILEDES, struct stat64 *BUF)'
76523 - `sys/stat.h' (Unix98): *Note Reading Attributes::.
76525 -`int fsync (int FILDES)'
76526 - `unistd.h' (POSIX): *Note Synchronizing I/O::.
76528 -`long int ftell (FILE *STREAM)'
76529 - `stdio.h' (ISO): *Note File Positioning::.
76531 -`off_t ftello (FILE *STREAM)'
76532 - `stdio.h' (Unix98): *Note File Positioning::.
76534 -`off64_t ftello64 (FILE *STREAM)'
76535 - `stdio.h' (Unix98): *Note File Positioning::.
76537 -`int ftruncate (int FD, off_t LENGTH)'
76538 - `unistd.h' (POSIX): *Note File Size::.
76540 -`int ftruncate64 (int ID, off64_t LENGTH)'
76541 - `unistd.h' (Unix98): *Note File Size::.
76543 -`int ftrylockfile (FILE *STREAM)'
76544 - `stdio.h' (POSIX): *Note Streams and Threads::.
76546 -`int ftw (const char *FILENAME, __ftw_func_t FUNC, int DESCRIPTORS)'
76547 - `ftw.h' (SVID): *Note Working with Directory Trees::.
76549 -`int ftw64 (const char *FILENAME, __ftw64_func_t FUNC, int DESCRIPTORS)'
76550 - `ftw.h' (Unix98): *Note Working with Directory Trees::.
76552 -`__ftw64_func_t'
76553 - `ftw.h' (GNU): *Note Working with Directory Trees::.
76555 -`__ftw_func_t'
76556 - `ftw.h' (GNU): *Note Working with Directory Trees::.
76558 -`F_UNLCK'
76559 - `fcntl.h' (POSIX.1): *Note File Locks::.
76561 -`void funlockfile (FILE *STREAM)'
76562 - `stdio.h' (POSIX): *Note Streams and Threads::.
76564 -`int futimes (int *FD, struct timeval TVP[2])'
76565 - `sys/time.h' (BSD): *Note File Times::.
76567 -`int fwide (FILE *STREAM, int MODE)'
76568 - `wchar.h' (ISO): *Note Streams and I18N::.
76570 -`int fwprintf (FILE *STREAM, const wchar_t *TEMPLATE, ...)'
76571 - `wchar.h' (ISO): *Note Formatted Output Functions::.
76573 -`int __fwritable (FILE *STREAM)'
76574 - `stdio_ext.h' (GNU): *Note Opening Streams::.
76576 -`size_t fwrite (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)'
76577 - `stdio.h' (ISO): *Note Block Input/Output::.
76579 -`size_t fwrite_unlocked (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)'
76580 - `stdio.h' (GNU): *Note Block Input/Output::.
76582 -`int __fwriting (FILE *STREAM)'
76583 - `stdio_ext.h' (GNU): *Note Opening Streams::.
76585 -`F_WRLCK'
76586 - `fcntl.h' (POSIX.1): *Note File Locks::.
76588 -`int fwscanf (FILE *STREAM, const wchar_t *TEMPLATE, ...)'
76589 - `wchar.h' (ISO): *Note Formatted Input Functions::.
76591 -`double gamma (double X)'
76592 - `math.h' (SVID): *Note Special Functions::.
76594 -`float gammaf (float X)'
76595 - `math.h' (SVID): *Note Special Functions::.
76597 -`long double gammal (long double X)'
76598 - `math.h' (SVID): *Note Special Functions::.
76600 -`void (*__gconv_end_fct) (struct gconv_step *)'
76601 - `gconv.h' (GNU): *Note glibc iconv Implementation::.
76603 -`int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *, const char **, const char *, size_t *, int)'
76604 - `gconv.h' (GNU): *Note glibc iconv Implementation::.
76606 -`int (*__gconv_init_fct) (struct __gconv_step *)'
76607 - `gconv.h' (GNU): *Note glibc iconv Implementation::.
76609 -`char * gcvt (double VALUE, int NDIGIT, char *BUF)'
76610 - `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::.
76612 -`long int get_avphys_pages (void)'
76613 - `sys/sysinfo.h' (GNU): *Note Query Memory Parameters::.
76615 -`int getc (FILE *STREAM)'
76616 - `stdio.h' (ISO): *Note Character Input::.
76618 -`int getchar (void)'
76619 - `stdio.h' (ISO): *Note Character Input::.
76621 -`int getchar_unlocked (void)'
76622 - `stdio.h' (POSIX): *Note Character Input::.
76624 -`int getcontext (ucontext_t *UCP)'
76625 - `ucontext.h' (SVID): *Note System V contexts::.
76627 -`int getc_unlocked (FILE *STREAM)'
76628 - `stdio.h' (POSIX): *Note Character Input::.
76630 -`char * get_current_dir_name (void)'
76631 - `unistd.h' (GNU): *Note Working Directory::.
76633 -`char * getcwd (char *BUFFER, size_t SIZE)'
76634 - `unistd.h' (POSIX.1): *Note Working Directory::.
76636 -`struct tm * getdate (const char *STRING)'
76637 - `time.h' (Unix98): *Note General Time String Parsing::.
76639 -`getdate_err'
76640 - `time.h' (Unix98): *Note General Time String Parsing::.
76642 -`int getdate_r (const char *STRING, struct tm *TP)'
76643 - `time.h' (GNU): *Note General Time String Parsing::.
76645 -`ssize_t getdelim (char **LINEPTR, size_t *N, int DELIMITER, FILE *STREAM)'
76646 - `stdio.h' (GNU): *Note Line Input::.
76648 -`int getdomainnname (char *NAME, size_t LENGTH)'
76649 - `unistd.h' (???): *Note Host Identification::.
76651 -`gid_t getegid (void)'
76652 - `unistd.h' (POSIX.1): *Note Reading Persona::.
76654 -`char * getenv (const char *NAME)'
76655 - `stdlib.h' (ISO): *Note Environment Access::.
76657 -`uid_t geteuid (void)'
76658 - `unistd.h' (POSIX.1): *Note Reading Persona::.
76660 -`struct fstab * getfsent (void)'
76661 - `fstab.h' (BSD): *Note fstab::.
76663 -`struct fstab * getfsfile (const char *NAME)'
76664 - `fstab.h' (BSD): *Note fstab::.
76666 -`struct fstab * getfsspec (const char *NAME)'
76667 - `fstab.h' (BSD): *Note fstab::.
76669 -`gid_t getgid (void)'
76670 - `unistd.h' (POSIX.1): *Note Reading Persona::.
76672 -`struct group * getgrent (void)'
76673 - `grp.h' (SVID, BSD): *Note Scanning All Groups::.
76675 -`int getgrent_r (struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)'
76676 - `grp.h' (GNU): *Note Scanning All Groups::.
76678 -`struct group * getgrgid (gid_t GID)'
76679 - `grp.h' (POSIX.1): *Note Lookup Group::.
76681 -`int getgrgid_r (gid_t GID, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)'
76682 - `grp.h' (POSIX.1c): *Note Lookup Group::.
76684 -`struct group * getgrnam (const char *NAME)'
76685 - `grp.h' (SVID, BSD): *Note Lookup Group::.
76687 -`int getgrnam_r (const char *NAME, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)'
76688 - `grp.h' (POSIX.1c): *Note Lookup Group::.
76690 -`int getgrouplist (const char *USER, gid_t GROUP, gid_t *GROUPS, int *NGROUPS)'
76691 - `grp.h' (BSD): *Note Setting Groups::.
76693 -`int getgroups (int COUNT, gid_t *GROUPS)'
76694 - `unistd.h' (POSIX.1): *Note Reading Persona::.
76696 -`struct hostent * gethostbyaddr (const char *ADDR, size_t LENGTH, int FORMAT)'
76697 - `netdb.h' (BSD): *Note Host Names::.
76699 -`int gethostbyaddr_r (const char *ADDR, size_t LENGTH, int FORMAT, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)'
76700 - `netdb.h' (GNU): *Note Host Names::.
76702 -`struct hostent * gethostbyname (const char *NAME)'
76703 - `netdb.h' (BSD): *Note Host Names::.
76705 -`struct hostent * gethostbyname2 (const char *NAME, int AF)'
76706 - `netdb.h' (IPv6 Basic API): *Note Host Names::.
76708 -`int gethostbyname2_r (const char *NAME, int AF, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)'
76709 - `netdb.h' (GNU): *Note Host Names::.
76711 -`int gethostbyname_r (const char *restrict NAME, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)'
76712 - `netdb.h' (GNU): *Note Host Names::.
76714 -`struct hostent * gethostent (void)'
76715 - `netdb.h' (BSD): *Note Host Names::.
76717 -`long int gethostid (void)'
76718 - `unistd.h' (BSD): *Note Host Identification::.
76720 -`int gethostname (char *NAME, size_t SIZE)'
76721 - `unistd.h' (BSD): *Note Host Identification::.
76723 -`int getitimer (int WHICH, struct itimerval *OLD)'
76724 - `sys/time.h' (BSD): *Note Setting an Alarm::.
76726 -`ssize_t getline (char **LINEPTR, size_t *N, FILE *STREAM)'
76727 - `stdio.h' (GNU): *Note Line Input::.
76729 -`int getloadavg (double LOADAVG[], int NELEM)'
76730 - `stdlib.h' (BSD): *Note Processor Resources::.
76732 -`char * getlogin (void)'
76733 - `unistd.h' (POSIX.1): *Note Who Logged In::.
76735 -`struct mntent * getmntent (FILE *STREAM)'
76736 - `mntent.h' (BSD): *Note mtab::.
76738 -`struct mntent * getmntent_r (FILE *STREAM, struct mentent *RESULT, char *BUFFER, int BUFSIZE)'
76739 - `mntent.h' (BSD): *Note mtab::.
76741 -`struct netent * getnetbyaddr (unsigned long int NET, int TYPE)'
76742 - `netdb.h' (BSD): *Note Networks Database::.
76744 -`struct netent * getnetbyname (const char *NAME)'
76745 - `netdb.h' (BSD): *Note Networks Database::.
76747 -`struct netent * getnetent (void)'
76748 - `netdb.h' (BSD): *Note Networks Database::.
76750 -`int getnetgrent (char **HOSTP, char **USERP, char **DOMAINP)'
76751 - `netdb.h' (BSD): *Note Lookup Netgroup::.
76753 -`int getnetgrent_r (char **HOSTP, char **USERP, char **DOMAINP, char *BUFFER, int BUFLEN)'
76754 - `netdb.h' (GNU): *Note Lookup Netgroup::.
76756 -`int get_nprocs (void)'
76757 - `sys/sysinfo.h' (GNU): *Note Processor Resources::.
76759 -`int get_nprocs_conf (void)'
76760 - `sys/sysinfo.h' (GNU): *Note Processor Resources::.
76762 -`int getopt (int ARGC, char **ARGV, const char *OPTIONS)'
76763 - `unistd.h' (POSIX.2): *Note Using Getopt::.
76765 -`int getopt_long (int ARGC, char *const *ARGV, const char *SHORTOPTS, const struct option *LONGOPTS, int *INDEXPTR)'
76766 - `getopt.h' (GNU): *Note Getopt Long Options::.
76768 -`int getopt_long_only (int ARGC, char *const *ARGV, const char *SHORTOPTS, const struct option *LONGOPTS, int *INDEXPTR)'
76769 - `getopt.h' (GNU): *Note Getopt Long Options::.
76771 -`int getpagesize (void)'
76772 - `unistd.h' (BSD): *Note Query Memory Parameters::.
76774 -`char * getpass (const char *PROMPT)'
76775 - `unistd.h' (BSD): *Note getpass::.
76777 -`int getpeername (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)'
76778 - `sys/socket.h' (BSD): *Note Who is Connected::.
76780 -`int getpgid (pid_t PID)'
76781 - `unistd.h' (SVID): *Note Process Group Functions::.
76783 -`pid_t getpgrp (pid_t PID)'
76784 - `unistd.h' (BSD): *Note Process Group Functions::.
76786 -`pid_t getpgrp (void)'
76787 - `unistd.h' (POSIX.1): *Note Process Group Functions::.
76789 -`long int get_phys_pages (void)'
76790 - `sys/sysinfo.h' (GNU): *Note Query Memory Parameters::.
76792 -`pid_t getpid (void)'
76793 - `unistd.h' (POSIX.1): *Note Process Identification::.
76795 -`pid_t getppid (void)'
76796 - `unistd.h' (POSIX.1): *Note Process Identification::.
76798 -`int getpriority (int CLASS, int ID)'
76799 - `sys/resource.h' (BSD,POSIX): *Note Traditional Scheduling
76800 - Functions::.
76802 -`struct protoent * getprotobyname (const char *NAME)'
76803 - `netdb.h' (BSD): *Note Protocols Database::.
76805 -`struct protoent * getprotobynumber (int PROTOCOL)'
76806 - `netdb.h' (BSD): *Note Protocols Database::.
76808 -`struct protoent * getprotoent (void)'
76809 - `netdb.h' (BSD): *Note Protocols Database::.
76811 -`int getpt (void)'
76812 - `stdlib.h' (GNU): *Note Allocation::.
76814 -`struct passwd * getpwent (void)'
76815 - `pwd.h' (POSIX.1): *Note Scanning All Users::.
76817 -`int getpwent_r (struct passwd *RESULT_BUF, char *BUFFER, int BUFLEN, struct passwd **RESULT)'
76818 - `pwd.h' (GNU): *Note Scanning All Users::.
76820 -`struct passwd * getpwnam (const char *NAME)'
76821 - `pwd.h' (POSIX.1): *Note Lookup User::.
76823 -`int getpwnam_r (const char *NAME, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)'
76824 - `pwd.h' (POSIX.1c): *Note Lookup User::.
76826 -`struct passwd * getpwuid (uid_t UID)'
76827 - `pwd.h' (POSIX.1): *Note Lookup User::.
76829 -`int getpwuid_r (uid_t UID, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)'
76830 - `pwd.h' (POSIX.1c): *Note Lookup User::.
76832 -`int getrlimit (int RESOURCE, struct rlimit *RLP)'
76833 - `sys/resource.h' (BSD): *Note Limits on Resources::.
76835 -`int getrlimit64 (int RESOURCE, struct rlimit64 *RLP)'
76836 - `sys/resource.h' (Unix98): *Note Limits on Resources::.
76838 -`int getrusage (int PROCESSES, struct rusage *RUSAGE)'
76839 - `sys/resource.h' (BSD): *Note Resource Usage::.
76841 -`char * gets (char *S)'
76842 - `stdio.h' (ISO): *Note Line Input::.
76844 -`struct servent * getservbyname (const char *NAME, const char *PROTO)'
76845 - `netdb.h' (BSD): *Note Services Database::.
76847 -`struct servent * getservbyport (int PORT, const char *PROTO)'
76848 - `netdb.h' (BSD): *Note Services Database::.
76850 -`struct servent * getservent (void)'
76851 - `netdb.h' (BSD): *Note Services Database::.
76853 -`pid_t getsid (pid_t PID)'
76854 - `unistd.h' (SVID): *Note Process Group Functions::.
76856 -`int getsockname (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)'
76857 - `sys/socket.h' (BSD): *Note Reading Address::.
76859 -`int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void *OPTVAL, socklen_t *OPTLEN-PTR)'
76860 - `sys/socket.h' (BSD): *Note Socket Option Functions::.
76862 -`int getsubopt (char **OPTIONP, const char* const *TOKENS, char **VALUEP)'
76863 - `stdlib.h' (stdlib.h): *Note Suboptions Example: Suboptions.
76865 -`char * gettext (const char *MSGID)'
76866 - `libintl.h' (GNU): *Note Translation with gettext::.
76868 -`int gettimeofday (struct timeval *TP, struct timezone *TZP)'
76869 - `sys/time.h' (BSD): *Note High-Resolution Calendar::.
76871 -`uid_t getuid (void)'
76872 - `unistd.h' (POSIX.1): *Note Reading Persona::.
76874 -`mode_t getumask (void)'
76875 - `sys/stat.h' (GNU): *Note Setting Permissions::.
76877 -`struct utmp * getutent (void)'
76878 - `utmp.h' (SVID): *Note Manipulating the Database::.
76880 -`int getutent_r (struct utmp *BUFFER, struct utmp **RESULT)'
76881 - `utmp.h' (GNU): *Note Manipulating the Database::.
76883 -`struct utmp * getutid (const struct utmp *ID)'
76884 - `utmp.h' (SVID): *Note Manipulating the Database::.
76886 -`int getutid_r (const struct utmp *ID, struct utmp *BUFFER, struct utmp **RESULT)'
76887 - `utmp.h' (GNU): *Note Manipulating the Database::.
76889 -`struct utmp * getutline (const struct utmp *LINE)'
76890 - `utmp.h' (SVID): *Note Manipulating the Database::.
76892 -`int getutline_r (const struct utmp *LINE, struct utmp *BUFFER, struct utmp **RESULT)'
76893 - `utmp.h' (GNU): *Note Manipulating the Database::.
76895 -`int getutmp (const struct utmpx *utmpx, struct utmp *utmp)'
76896 - `utmp.h' (GNU): *Note XPG Functions::.
76898 -`int getutmpx (const struct utmp *utmp, struct utmpx *utmpx)'
76899 - `utmp.h' (GNU): *Note XPG Functions::.
76901 -`struct utmpx * getutxent (void)'
76902 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
76904 -`struct utmpx * getutxid (const struct utmpx *ID)'
76905 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
76907 -`struct utmpx * getutxline (const struct utmpx *LINE)'
76908 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
76910 -`int getw (FILE *STREAM)'
76911 - `stdio.h' (SVID): *Note Character Input::.
76913 -`wint_t getwc (FILE *STREAM)'
76914 - `wchar.h' (ISO): *Note Character Input::.
76916 -`wint_t getwchar (void)'
76917 - `wchar.h' (ISO): *Note Character Input::.
76919 -`wint_t getwchar_unlocked (void)'
76920 - `wchar.h' (GNU): *Note Character Input::.
76922 -`wint_t getwc_unlocked (FILE *STREAM)'
76923 - `wchar.h' (GNU): *Note Character Input::.
76925 -`char * getwd (char *BUFFER)'
76926 - `unistd.h' (BSD): *Note Working Directory::.
76928 -`gid_t'
76929 - `sys/types.h' (POSIX.1): *Note Reading Persona::.
76931 -`int glob (const char *PATTERN, int FLAGS, int (*ERRFUNC) (const char *FILENAME, int ERROR-CODE), glob_t *VECTOR-PTR)'
76932 - `glob.h' (POSIX.2): *Note Calling Glob::.
76934 -`int glob64 (const char *PATTERN, int FLAGS, int (*ERRFUNC) (const char *FILENAME, int ERROR-CODE), glob64_t *VECTOR-PTR)'
76935 - `glob.h' (GNU): *Note Calling Glob::.
76937 -`glob64_t'
76938 - `glob.h' (GNU): *Note Calling Glob::.
76940 -`GLOB_ABORTED'
76941 - `glob.h' (POSIX.2): *Note Calling Glob::.
76943 -`GLOB_ALTDIRFUNC'
76944 - `glob.h' (GNU): *Note More Flags for Globbing::.
76946 -`GLOB_APPEND'
76947 - `glob.h' (POSIX.2): *Note Flags for Globbing::.
76949 -`GLOB_BRACE'
76950 - `glob.h' (GNU): *Note More Flags for Globbing::.
76952 -`GLOB_DOOFFS'
76953 - `glob.h' (POSIX.2): *Note Flags for Globbing::.
76955 -`GLOB_ERR'
76956 - `glob.h' (POSIX.2): *Note Flags for Globbing::.
76958 -`void globfree (glob_t *PGLOB)'
76959 - `glob.h' (POSIX.2): *Note More Flags for Globbing::.
76961 -`void globfree64 (glob64_t *PGLOB)'
76962 - `glob.h' (GNU): *Note More Flags for Globbing::.
76964 -`GLOB_MAGCHAR'
76965 - `glob.h' (GNU): *Note More Flags for Globbing::.
76967 -`GLOB_MARK'
76968 - `glob.h' (POSIX.2): *Note Flags for Globbing::.
76970 -`GLOB_NOCHECK'
76971 - `glob.h' (POSIX.2): *Note Flags for Globbing::.
76973 -`GLOB_NOESCAPE'
76974 - `glob.h' (POSIX.2): *Note Flags for Globbing::.
76976 -`GLOB_NOMAGIC'
76977 - `glob.h' (GNU): *Note More Flags for Globbing::.
76979 -`GLOB_NOMATCH'
76980 - `glob.h' (POSIX.2): *Note Calling Glob::.
76982 -`GLOB_NOSORT'
76983 - `glob.h' (POSIX.2): *Note Flags for Globbing::.
76985 -`GLOB_NOSPACE'
76986 - `glob.h' (POSIX.2): *Note Calling Glob::.
76988 -`GLOB_ONLYDIR'
76989 - `glob.h' (GNU): *Note More Flags for Globbing::.
76991 -`GLOB_PERIOD'
76992 - `glob.h' (GNU): *Note More Flags for Globbing::.
76994 -`glob_t'
76995 - `glob.h' (POSIX.2): *Note Calling Glob::.
76997 -`GLOB_TILDE'
76998 - `glob.h' (GNU): *Note More Flags for Globbing::.
77000 -`GLOB_TILDE_CHECK'
77001 - `glob.h' (GNU): *Note More Flags for Globbing::.
77003 -`struct tm * gmtime (const time_t *TIME)'
77004 - `time.h' (ISO): *Note Broken-down Time::.
77006 -`struct tm * gmtime_r (const time_t *TIME, struct tm *RESULTP)'
77007 - `time.h' (POSIX.1c): *Note Broken-down Time::.
77009 -`_GNU_SOURCE'
77010 - (GNU): *Note Feature Test Macros::.
77012 -`int grantpt (int FILEDES)'
77013 - `stdlib.h' (SVID, XPG4.2): *Note Allocation::.
77015 -`int gsignal (int SIGNUM)'
77016 - `signal.h' (SVID): *Note Signaling Yourself::.
77018 -`int gtty (int FILEDES, struct sgttyb *ATTRIBUTES)'
77019 - `sgtty.h' (BSD): *Note BSD Terminal Modes::.
77021 -`char * hasmntopt (const struct mntent *MNT, const char *OPT)'
77022 - `mntent.h' (BSD): *Note mtab::.
77024 -`int hcreate (size_t NEL)'
77025 - `search.h' (SVID): *Note Hash Search Function::.
77027 -`int hcreate_r (size_t NEL, struct hsearch_data *HTAB)'
77028 - `search.h' (GNU): *Note Hash Search Function::.
77030 -`void hdestroy (void)'
77031 - `search.h' (SVID): *Note Hash Search Function::.
77033 -`void hdestroy_r (struct hsearch_data *HTAB)'
77034 - `search.h' (GNU): *Note Hash Search Function::.
77036 -`HOST_NOT_FOUND'
77037 - `netdb.h' (BSD): *Note Host Names::.
77039 -`ENTRY * hsearch (ENTRY ITEM, ACTION ACTION)'
77040 - `search.h' (SVID): *Note Hash Search Function::.
77042 -`int hsearch_r (ENTRY ITEM, ACTION ACTION, ENTRY **RETVAL, struct hsearch_data *HTAB)'
77043 - `search.h' (GNU): *Note Hash Search Function::.
77045 -`uint32_t htonl (uint32_t HOSTLONG)'
77046 - `netinet/in.h' (BSD): *Note Byte Order::.
77048 -`uint16_t htons (uint16_t HOSTSHORT)'
77049 - `netinet/in.h' (BSD): *Note Byte Order::.
77051 -`double HUGE_VAL'
77052 - `math.h' (ISO): *Note Math Error Reporting::.
77054 -`float HUGE_VALF'
77055 - `math.h' (ISO): *Note Math Error Reporting::.
77057 -`long double HUGE_VALL'
77058 - `math.h' (ISO): *Note Math Error Reporting::.
77060 -`tcflag_t HUPCL'
77061 - `termios.h' (POSIX.1): *Note Control Modes::.
77063 -`double hypot (double X, double Y)'
77064 - `math.h' (ISO): *Note Exponents and Logarithms::.
77066 -`float hypotf (float X, float Y)'
77067 - `math.h' (ISO): *Note Exponents and Logarithms::.
77069 -`long double hypotl (long double X, long double Y)'
77070 - `math.h' (ISO): *Note Exponents and Logarithms::.
77072 -`tcflag_t ICANON'
77073 - `termios.h' (POSIX.1): *Note Local Modes::.
77075 -`size_t iconv (iconv_t CD, char **INBUF, size_t *INBYTESLEFT, char **OUTBUF, size_t *OUTBYTESLEFT)'
77076 - `iconv.h' (XPG2): *Note Generic Conversion Interface::.
77078 -`int iconv_close (iconv_t CD)'
77079 - `iconv.h' (XPG2): *Note Generic Conversion Interface::.
77081 -`iconv_t iconv_open (const char *TOCODE, const char *FROMCODE)'
77082 - `iconv.h' (XPG2): *Note Generic Conversion Interface::.
77084 -`iconv_t'
77085 - `iconv.h' (XPG2): *Note Generic Conversion Interface::.
77087 -`tcflag_t ICRNL'
77088 - `termios.h' (POSIX.1): *Note Input Modes::.
77090 -`tcflag_t IEXTEN'
77091 - `termios.h' (POSIX.1): *Note Local Modes::.
77093 -`void if_freenameindex (struct if_nameindex *ptr)'
77094 - `net/if.h' (IPv6 basic API): *Note Interface Naming::.
77096 -`char * if_indextoname (unsigned int ifindex, char *ifname)'
77097 - `net/if.h' (IPv6 basic API): *Note Interface Naming::.
77099 -`struct if_nameindex * if_nameindex (void)'
77100 - `net/if.h' (IPv6 basic API): *Note Interface Naming::.
77102 -`unsigned int if_nametoindex (const char *ifname)'
77103 - `net/if.h' (IPv6 basic API): *Note Interface Naming::.
77105 -`size_t IFNAMSIZ'
77106 - `net/if.h' (net/if.h): *Note Interface Naming::.
77108 -`int IFTODT (mode_t MODE)'
77109 - `dirent.h' (BSD): *Note Directory Entries::.
77111 -`tcflag_t IGNBRK'
77112 - `termios.h' (POSIX.1): *Note Input Modes::.
77114 -`tcflag_t IGNCR'
77115 - `termios.h' (POSIX.1): *Note Input Modes::.
77117 -`tcflag_t IGNPAR'
77118 - `termios.h' (POSIX.1): *Note Input Modes::.
77120 -`int ilogb (double X)'
77121 - `math.h' (ISO): *Note Exponents and Logarithms::.
77123 -`int ilogbf (float X)'
77124 - `math.h' (ISO): *Note Exponents and Logarithms::.
77126 -`int ilogbl (long double X)'
77127 - `math.h' (ISO): *Note Exponents and Logarithms::.
77129 -`intmax_t imaxabs (intmax_t NUMBER)'
77130 - `inttypes.h' (ISO): *Note Absolute Value::.
77132 -`tcflag_t IMAXBEL'
77133 - `termios.h' (BSD): *Note Input Modes::.
77135 -`imaxdiv_t imaxdiv (intmax_t NUMERATOR, intmax_t DENOMINATOR)'
77136 - `inttypes.h' (ISO): *Note Integer Division::.
77138 -`imaxdiv_t'
77139 - `inttypes.h' (ISO): *Note Integer Division::.
77141 -`struct in6_addr in6addr_any'
77142 - `netinet/in.h' (IPv6 basic API): *Note Host Address Data Type::.
77144 -`struct in6_addr in6addr_loopback'
77145 - `netinet/in.h' (IPv6 basic API): *Note Host Address Data Type::.
77147 -`uint32_t INADDR_ANY'
77148 - `netinet/in.h' (BSD): *Note Host Address Data Type::.
77150 -`uint32_t INADDR_BROADCAST'
77151 - `netinet/in.h' (BSD): *Note Host Address Data Type::.
77153 -`uint32_t INADDR_LOOPBACK'
77154 - `netinet/in.h' (BSD): *Note Host Address Data Type::.
77156 -`uint32_t INADDR_NONE'
77157 - `netinet/in.h' (BSD): *Note Host Address Data Type::.
77159 -`char * index (const char *STRING, int C)'
77160 - `string.h' (BSD): *Note Search Functions::.
77162 -`uint32_t inet_addr (const char *NAME)'
77163 - `arpa/inet.h' (BSD): *Note Host Address Functions::.
77165 -`int inet_aton (const char *NAME, struct in_addr *ADDR)'
77166 - `arpa/inet.h' (BSD): *Note Host Address Functions::.
77168 -`uint32_t inet_lnaof (struct in_addr ADDR)'
77169 - `arpa/inet.h' (BSD): *Note Host Address Functions::.
77171 -`struct in_addr inet_makeaddr (uint32_t NET, uint32_t LOCAL)'
77172 - `arpa/inet.h' (BSD): *Note Host Address Functions::.
77174 -`uint32_t inet_netof (struct in_addr ADDR)'
77175 - `arpa/inet.h' (BSD): *Note Host Address Functions::.
77177 -`uint32_t inet_network (const char *NAME)'
77178 - `arpa/inet.h' (BSD): *Note Host Address Functions::.
77180 -`char * inet_ntoa (struct in_addr ADDR)'
77181 - `arpa/inet.h' (BSD): *Note Host Address Functions::.
77183 -`const char * inet_ntop (int AF, const void *CP, char *BUF, size_t LEN)'
77184 - `arpa/inet.h' (IPv6 basic API): *Note Host Address Functions::.
77186 -`int inet_pton (int AF, const char *CP, void *BUF)'
77187 - `arpa/inet.h' (IPv6 basic API): *Note Host Address Functions::.
77189 -`float INFINITY'
77190 - `math.h' (ISO): *Note Infinity and NaN::.
77192 -`int initgroups (const char *USER, gid_t GROUP)'
77193 - `grp.h' (BSD): *Note Setting Groups::.
77195 -`INIT_PROCESS'
77196 - `utmp.h' (SVID): *Note Manipulating the Database::.
77198 -`INIT_PROCESS'
77199 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
77201 -`void * initstate (unsigned int SEED, void *STATE, size_t SIZE)'
77202 - `stdlib.h' (BSD): *Note BSD Random::.
77204 -`int initstate_r (unsigned int SEED, char *restrict STATEBUF, size_t STATELEN, struct random_data *restrict BUF)'
77205 - `stdlib.h' (GNU): *Note BSD Random::.
77207 -`tcflag_t INLCR'
77208 - `termios.h' (POSIX.1): *Note Input Modes::.
77210 -`int innetgr (const char *NETGROUP, const char *HOST, const char *USER, const char *DOMAIN)'
77211 - `netdb.h' (BSD): *Note Netgroup Membership::.
77213 -`ino64_t'
77214 - `sys/types.h' (Unix98): *Note Attribute Meanings::.
77216 -`ino_t'
77217 - `sys/types.h' (POSIX.1): *Note Attribute Meanings::.
77219 -`tcflag_t INPCK'
77220 - `termios.h' (POSIX.1): *Note Input Modes::.
77222 -`INT_MAX'
77223 - `limits.h' (ISO): *Note Range of Type::.
77225 -`INT_MIN'
77226 - `limits.h' (ISO): *Note Range of Type::.
77228 -`int ioctl (int FILEDES, int COMMAND, ...)'
77229 - `sys/ioctl.h' (BSD): *Note IOCTLs::.
77231 -`int _IOFBF'
77232 - `stdio.h' (ISO): *Note Controlling Buffering::.
77234 -`int _IOLBF'
77235 - `stdio.h' (ISO): *Note Controlling Buffering::.
77237 -`int _IONBF'
77238 - `stdio.h' (ISO): *Note Controlling Buffering::.
77240 -`int IPPORT_RESERVED'
77241 - `netinet/in.h' (BSD): *Note Ports::.
77243 -`int IPPORT_USERRESERVED'
77244 - `netinet/in.h' (BSD): *Note Ports::.
77246 -`int isalnum (int C)'
77247 - `ctype.h' (ISO): *Note Classification of Characters::.
77249 -`int isalpha (int C)'
77250 - `ctype.h' (ISO): *Note Classification of Characters::.
77252 -`int isascii (int C)'
77253 - `ctype.h' (SVID, BSD): *Note Classification of Characters::.
77255 -`int isatty (int FILEDES)'
77256 - `unistd.h' (POSIX.1): *Note Is It a Terminal::.
77258 -`int isblank (int C)'
77259 - `ctype.h' (GNU): *Note Classification of Characters::.
77261 -`int iscntrl (int C)'
77262 - `ctype.h' (ISO): *Note Classification of Characters::.
77264 -`int isdigit (int C)'
77265 - `ctype.h' (ISO): *Note Classification of Characters::.
77267 -`int isfinite (_float-type_ X)'
77268 - `math.h' (ISO): *Note Floating Point Classes::.
77270 -`int isgraph (int C)'
77271 - `ctype.h' (ISO): *Note Classification of Characters::.
77273 -`int isgreater (_real-floating_ X, _real-floating_ Y)'
77274 - `math.h' (ISO): *Note FP Comparison Functions::.
77276 -`int isgreaterequal (_real-floating_ X, _real-floating_ Y)'
77277 - `math.h' (ISO): *Note FP Comparison Functions::.
77279 -`tcflag_t ISIG'
77280 - `termios.h' (POSIX.1): *Note Local Modes::.
77282 -`int isinf (double X)'
77283 - `math.h' (BSD): *Note Floating Point Classes::.
77285 -`int isinff (float X)'
77286 - `math.h' (BSD): *Note Floating Point Classes::.
77288 -`int isinfl (long double X)'
77289 - `math.h' (BSD): *Note Floating Point Classes::.
77291 -`int isless (_real-floating_ X, _real-floating_ Y)'
77292 - `math.h' (ISO): *Note FP Comparison Functions::.
77294 -`int islessequal (_real-floating_ X, _real-floating_ Y)'
77295 - `math.h' (ISO): *Note FP Comparison Functions::.
77297 -`int islessgreater (_real-floating_ X, _real-floating_ Y)'
77298 - `math.h' (ISO): *Note FP Comparison Functions::.
77300 -`int islower (int C)'
77301 - `ctype.h' (ISO): *Note Classification of Characters::.
77303 -`int isnan (_float-type_ X)'
77304 - `math.h' (ISO): *Note Floating Point Classes::.
77306 -`int isnan (double X)'
77307 - `math.h' (BSD): *Note Floating Point Classes::.
77309 -`int isnanf (float X)'
77310 - `math.h' (BSD): *Note Floating Point Classes::.
77312 -`int isnanl (long double X)'
77313 - `math.h' (BSD): *Note Floating Point Classes::.
77315 -`int isnormal (_float-type_ X)'
77316 - `math.h' (ISO): *Note Floating Point Classes::.
77318 -`_ISOC99_SOURCE'
77319 - (GNU): *Note Feature Test Macros::.
77321 -`int isprint (int C)'
77322 - `ctype.h' (ISO): *Note Classification of Characters::.
77324 -`int ispunct (int C)'
77325 - `ctype.h' (ISO): *Note Classification of Characters::.
77327 -`int isspace (int C)'
77328 - `ctype.h' (ISO): *Note Classification of Characters::.
77330 -`tcflag_t ISTRIP'
77331 - `termios.h' (POSIX.1): *Note Input Modes::.
77333 -`int isunordered (_real-floating_ X, _real-floating_ Y)'
77334 - `math.h' (ISO): *Note FP Comparison Functions::.
77336 -`int isupper (int C)'
77337 - `ctype.h' (ISO): *Note Classification of Characters::.
77339 -`int iswalnum (wint_t WC)'
77340 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77342 -`int iswalpha (wint_t WC)'
77343 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77345 -`int iswblank (wint_t WC)'
77346 - `wctype.h' (GNU): *Note Classification of Wide Characters::.
77348 -`int iswcntrl (wint_t WC)'
77349 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77351 -`int iswctype (wint_t WC, wctype_t DESC)'
77352 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77354 -`int iswdigit (wint_t WC)'
77355 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77357 -`int iswgraph (wint_t WC)'
77358 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77360 -`int iswlower (wint_t WC)'
77361 - `ctype.h' (ISO): *Note Classification of Wide Characters::.
77363 -`int iswprint (wint_t WC)'
77364 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77366 -`int iswpunct (wint_t WC)'
77367 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77369 -`int iswspace (wint_t WC)'
77370 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77372 -`int iswupper (wint_t WC)'
77373 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77375 -`int iswxdigit (wint_t WC)'
77376 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
77378 -`int isxdigit (int C)'
77379 - `ctype.h' (ISO): *Note Classification of Characters::.
77381 -`ITIMER_PROF'
77382 - `sys/time.h' (BSD): *Note Setting an Alarm::.
77384 -`ITIMER_REAL'
77385 - `sys/time.h' (BSD): *Note Setting an Alarm::.
77387 -`ITIMER_VIRTUAL'
77388 - `sys/time.h' (BSD): *Note Setting an Alarm::.
77390 -`tcflag_t IXANY'
77391 - `termios.h' (BSD): *Note Input Modes::.
77393 -`tcflag_t IXOFF'
77394 - `termios.h' (POSIX.1): *Note Input Modes::.
77396 -`tcflag_t IXON'
77397 - `termios.h' (POSIX.1): *Note Input Modes::.
77399 -`double j0 (double X)'
77400 - `math.h' (SVID): *Note Special Functions::.
77402 -`float j0f (float X)'
77403 - `math.h' (SVID): *Note Special Functions::.
77405 -`long double j0l (long double X)'
77406 - `math.h' (SVID): *Note Special Functions::.
77408 -`double j1 (double X)'
77409 - `math.h' (SVID): *Note Special Functions::.
77411 -`float j1f (float X)'
77412 - `math.h' (SVID): *Note Special Functions::.
77414 -`long double j1l (long double X)'
77415 - `math.h' (SVID): *Note Special Functions::.
77417 -`jmp_buf'
77418 - `setjmp.h' (ISO): *Note Non-Local Details::.
77420 -`double jn (int n, double X)'
77421 - `math.h' (SVID): *Note Special Functions::.
77423 -`float jnf (int n, float X)'
77424 - `math.h' (SVID): *Note Special Functions::.
77426 -`long double jnl (int n, long double X)'
77427 - `math.h' (SVID): *Note Special Functions::.
77429 -`long int jrand48 (unsigned short int XSUBI[3])'
77430 - `stdlib.h' (SVID): *Note SVID Random::.
77432 -`int jrand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, long int *RESULT)'
77433 - `stdlib.h' (GNU): *Note SVID Random::.
77435 -`int kill (pid_t PID, int SIGNUM)'
77436 - `signal.h' (POSIX.1): *Note Signaling Another Process::.
77438 -`int killpg (int PGID, int SIGNUM)'
77439 - `signal.h' (BSD): *Note Signaling Another Process::.
77441 -`char * l64a (long int N)'
77442 - `stdlib.h' (XPG): *Note Encode Binary Data::.
77444 -`long int labs (long int NUMBER)'
77445 - `stdlib.h' (ISO): *Note Absolute Value::.
77447 -`LANG'
77448 - `locale.h' (ISO): *Note Locale Categories::.
77450 -`LC_ALL'
77451 - `locale.h' (ISO): *Note Locale Categories::.
77453 -`LC_COLLATE'
77454 - `locale.h' (ISO): *Note Locale Categories::.
77456 -`LC_CTYPE'
77457 - `locale.h' (ISO): *Note Locale Categories::.
77459 -`LC_MESSAGES'
77460 - `locale.h' (XOPEN): *Note Locale Categories::.
77462 -`LC_MONETARY'
77463 - `locale.h' (ISO): *Note Locale Categories::.
77465 -`LC_NUMERIC'
77466 - `locale.h' (ISO): *Note Locale Categories::.
77468 -`void lcong48 (unsigned short int PARAM[7])'
77469 - `stdlib.h' (SVID): *Note SVID Random::.
77471 -`int lcong48_r (unsigned short int PARAM[7], struct drand48_data *BUFFER)'
77472 - `stdlib.h' (GNU): *Note SVID Random::.
77474 -`int L_ctermid'
77475 - `stdio.h' (POSIX.1): *Note Identifying the Terminal::.
77477 -`LC_TIME'
77478 - `locale.h' (ISO): *Note Locale Categories::.
77480 -`int L_cuserid'
77481 - `stdio.h' (POSIX.1): *Note Who Logged In::.
77483 -`double ldexp (double VALUE, int EXPONENT)'
77484 - `math.h' (ISO): *Note Normalization Functions::.
77486 -`float ldexpf (float VALUE, int EXPONENT)'
77487 - `math.h' (ISO): *Note Normalization Functions::.
77489 -`long double ldexpl (long double VALUE, int EXPONENT)'
77490 - `math.h' (ISO): *Note Normalization Functions::.
77492 -`ldiv_t ldiv (long int NUMERATOR, long int DENOMINATOR)'
77493 - `stdlib.h' (ISO): *Note Integer Division::.
77495 -`ldiv_t'
77496 - `stdlib.h' (ISO): *Note Integer Division::.
77498 -`void * lfind (const void *KEY, void *BASE, size_t *NMEMB, size_t SIZE, comparison_fn_t COMPAR)'
77499 - `search.h' (SVID): *Note Array Search Function::.
77501 -`double lgamma (double X)'
77502 - `math.h' (SVID): *Note Special Functions::.
77504 -`float lgammaf (float X)'
77505 - `math.h' (SVID): *Note Special Functions::.
77507 -`float lgammaf_r (float X, int *SIGNP)'
77508 - `math.h' (XPG): *Note Special Functions::.
77510 -`long double lgammal (long double X)'
77511 - `math.h' (SVID): *Note Special Functions::.
77513 -`long double lgammal_r (long double X, int *SIGNP)'
77514 - `math.h' (XPG): *Note Special Functions::.
77516 -`double lgamma_r (double X, int *SIGNP)'
77517 - `math.h' (XPG): *Note Special Functions::.
77519 -`L_INCR'
77520 - `sys/file.h' (BSD): *Note File Positioning::.
77522 -`int LINE_MAX'
77523 - `limits.h' (POSIX.2): *Note Utility Limits::.
77525 -`int link (const char *OLDNAME, const char *NEWNAME)'
77526 - `unistd.h' (POSIX.1): *Note Hard Links::.
77528 -`int LINK_MAX'
77529 - `limits.h' (POSIX.1): *Note Limits for Files::.
77531 -`int lio_listio (int MODE, struct aiocb *const LIST[], int NENT, struct sigevent *SIG)'
77532 - `aio.h' (POSIX.1b): *Note Asynchronous Reads/Writes::.
77534 -`int lio_listio64 (int MODE, struct aiocb *const LIST, int NENT, struct sigevent *SIG)'
77535 - `aio.h' (Unix98): *Note Asynchronous Reads/Writes::.
77537 -`int listen (int SOCKET, unsigned int N)'
77538 - `sys/socket.h' (BSD): *Note Listening::.
77540 -`long long int llabs (long long int NUMBER)'
77541 - `stdlib.h' (ISO): *Note Absolute Value::.
77543 -`lldiv_t lldiv (long long int NUMERATOR, long long int DENOMINATOR)'
77544 - `stdlib.h' (ISO): *Note Integer Division::.
77546 -`lldiv_t'
77547 - `stdlib.h' (ISO): *Note Integer Division::.
77549 -`long long int llrint (double X)'
77550 - `math.h' (ISO): *Note Rounding Functions::.
77552 -`long long int llrintf (float X)'
77553 - `math.h' (ISO): *Note Rounding Functions::.
77555 -`long long int llrintl (long double X)'
77556 - `math.h' (ISO): *Note Rounding Functions::.
77558 -`long long int llround (double X)'
77559 - `math.h' (ISO): *Note Rounding Functions::.
77561 -`long long int llroundf (float X)'
77562 - `math.h' (ISO): *Note Rounding Functions::.
77564 -`long long int llroundl (long double X)'
77565 - `math.h' (ISO): *Note Rounding Functions::.
77567 -`struct lconv * localeconv (void)'
77568 - `locale.h' (ISO): *Note The Lame Way to Locale Data::.
77570 -`struct tm * localtime (const time_t *TIME)'
77571 - `time.h' (ISO): *Note Broken-down Time::.
77573 -`struct tm * localtime_r (const time_t *TIME, struct tm *RESULTP)'
77574 - `time.h' (POSIX.1c): *Note Broken-down Time::.
77576 -`double log (double X)'
77577 - `math.h' (ISO): *Note Exponents and Logarithms::.
77579 -`double log10 (double X)'
77580 - `math.h' (ISO): *Note Exponents and Logarithms::.
77582 -`float log10f (float X)'
77583 - `math.h' (ISO): *Note Exponents and Logarithms::.
77585 -`long double log10l (long double X)'
77586 - `math.h' (ISO): *Note Exponents and Logarithms::.
77588 -`double log1p (double X)'
77589 - `math.h' (ISO): *Note Exponents and Logarithms::.
77591 -`float log1pf (float X)'
77592 - `math.h' (ISO): *Note Exponents and Logarithms::.
77594 -`long double log1pl (long double X)'
77595 - `math.h' (ISO): *Note Exponents and Logarithms::.
77597 -`double log2 (double X)'
77598 - `math.h' (ISO): *Note Exponents and Logarithms::.
77600 -`float log2f (float X)'
77601 - `math.h' (ISO): *Note Exponents and Logarithms::.
77603 -`long double log2l (long double X)'
77604 - `math.h' (ISO): *Note Exponents and Logarithms::.
77606 -`double logb (double X)'
77607 - `math.h' (ISO): *Note Exponents and Logarithms::.
77609 -`float logbf (float X)'
77610 - `math.h' (ISO): *Note Exponents and Logarithms::.
77612 -`long double logbl (long double X)'
77613 - `math.h' (ISO): *Note Exponents and Logarithms::.
77615 -`float logf (float X)'
77616 - `math.h' (ISO): *Note Exponents and Logarithms::.
77618 -`void login (const struct utmp *ENTRY)'
77619 - `utmp.h' (BSD): *Note Logging In and Out::.
77621 -`LOGIN_PROCESS'
77622 - `utmp.h' (SVID): *Note Manipulating the Database::.
77624 -`LOGIN_PROCESS'
77625 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
77627 -`int login_tty (int FILEDES)'
77628 - `utmp.h' (BSD): *Note Logging In and Out::.
77630 -`long double logl (long double X)'
77631 - `math.h' (ISO): *Note Exponents and Logarithms::.
77633 -`int logout (const char *UT_LINE)'
77634 - `utmp.h' (BSD): *Note Logging In and Out::.
77636 -`void logwtmp (const char *UT_LINE, const char *UT_NAME, const char *UT_HOST)'
77637 - `utmp.h' (BSD): *Note Logging In and Out::.
77639 -`void longjmp (jmp_buf STATE, int VALUE)'
77640 - `setjmp.h' (ISO): *Note Non-Local Details::.
77642 -`LONG_LONG_MAX'
77643 - `limits.h' (GNU): *Note Range of Type::.
77645 -`LONG_LONG_MIN'
77646 - `limits.h' (GNU): *Note Range of Type::.
77648 -`LONG_MAX'
77649 - `limits.h' (ISO): *Note Range of Type::.
77651 -`LONG_MIN'
77652 - `limits.h' (ISO): *Note Range of Type::.
77654 -`long int lrand48 (void)'
77655 - `stdlib.h' (SVID): *Note SVID Random::.
77657 -`int lrand48_r (struct drand48_data *BUFFER, double *RESULT)'
77658 - `stdlib.h' (GNU): *Note SVID Random::.
77660 -`long int lrint (double X)'
77661 - `math.h' (ISO): *Note Rounding Functions::.
77663 -`long int lrintf (float X)'
77664 - `math.h' (ISO): *Note Rounding Functions::.
77666 -`long int lrintl (long double X)'
77667 - `math.h' (ISO): *Note Rounding Functions::.
77669 -`long int lround (double X)'
77670 - `math.h' (ISO): *Note Rounding Functions::.
77672 -`long int lroundf (float X)'
77673 - `math.h' (ISO): *Note Rounding Functions::.
77675 -`long int lroundl (long double X)'
77676 - `math.h' (ISO): *Note Rounding Functions::.
77678 -`void * lsearch (const void *KEY, void *BASE, size_t *NMEMB, size_t SIZE, comparison_fn_t COMPAR)'
77679 - `search.h' (SVID): *Note Array Search Function::.
77681 -`off_t lseek (int FILEDES, off_t OFFSET, int WHENCE)'
77682 - `unistd.h' (POSIX.1): *Note File Position Primitive::.
77684 -`off64_t lseek64 (int FILEDES, off64_t OFFSET, int WHENCE)'
77685 - `unistd.h' (Unix98): *Note File Position Primitive::.
77687 -`L_SET'
77688 - `sys/file.h' (BSD): *Note File Positioning::.
77690 -`int lstat (const char *FILENAME, struct stat *BUF)'
77691 - `sys/stat.h' (BSD): *Note Reading Attributes::.
77693 -`int lstat64 (const char *FILENAME, struct stat64 *BUF)'
77694 - `sys/stat.h' (Unix98): *Note Reading Attributes::.
77696 -`int L_tmpnam'
77697 - `stdio.h' (ISO): *Note Temporary Files::.
77699 -`int lutimes (const char *FILENAME, struct timeval TVP[2])'
77700 - `sys/time.h' (BSD): *Note File Times::.
77702 -`L_XTND'
77703 - `sys/file.h' (BSD): *Note File Positioning::.
77705 -`int madvise (void *ADDR, size_t LENGTH, int ADVICE)'
77706 - `sys/mman.h' (POSIX): *Note Memory-mapped I/O::.
77708 -`void makecontext (ucontext_t *UCP, void (*FUNC) (void), int ARGC, ...)'
77709 - `ucontext.h' (SVID): *Note System V contexts::.
77711 -`struct mallinfo mallinfo (void)'
77712 - `malloc.h' (SVID): *Note Statistics of Malloc::.
77714 -`void * malloc (size_t SIZE)'
77715 - `malloc.h', `stdlib.h' (ISO): *Note Basic Allocation::.
77717 -`__malloc_hook'
77718 - `malloc.h' (GNU): *Note Hooks for Malloc::.
77720 -`__malloc_initialize_hook'
77721 - `malloc.h' (GNU): *Note Hooks for Malloc::.
77723 -`int MAX_CANON'
77724 - `limits.h' (POSIX.1): *Note Limits for Files::.
77726 -`int MAX_INPUT'
77727 - `limits.h' (POSIX.1): *Note Limits for Files::.
77729 -`int MAXNAMLEN'
77730 - `dirent.h' (BSD): *Note Limits for Files::.
77732 -`int MAXSYMLINKS'
77733 - `sys/param.h' (BSD): *Note Symbolic Links::.
77735 -`int MB_CUR_MAX'
77736 - `stdlib.h' (ISO): *Note Selecting the Conversion::.
77738 -`int mblen (const char *STRING, size_t SIZE)'
77739 - `stdlib.h' (ISO): *Note Non-reentrant Character Conversion::.
77741 -`int MB_LEN_MAX'
77742 - `limits.h' (ISO): *Note Selecting the Conversion::.
77744 -`size_t mbrlen (const char *restrict S, size_t N, mbstate_t *PS)'
77745 - `wchar.h' (ISO): *Note Converting a Character::.
77747 -`size_t mbrtowc (wchar_t *restrict PWC, const char *restrict S, size_t N, mbstate_t *restrict PS)'
77748 - `wchar.h' (ISO): *Note Converting a Character::.
77750 -`int mbsinit (const mbstate_t *PS)'
77751 - `wchar.h' (ISO): *Note Keeping the state::.
77753 -`size_t mbsnrtowcs (wchar_t *restrict DST, const char **restrict SRC, size_t NMC, size_t LEN, mbstate_t *restrict PS)'
77754 - `wchar.h' (GNU): *Note Converting Strings::.
77756 -`size_t mbsrtowcs (wchar_t *restrict DST, const char **restrict SRC, size_t LEN, mbstate_t *restrict PS)'
77757 - `wchar.h' (ISO): *Note Converting Strings::.
77759 -`mbstate_t'
77760 - `wchar.h' (ISO): *Note Keeping the state::.
77762 -`size_t mbstowcs (wchar_t *WSTRING, const char *STRING, size_t SIZE)'
77763 - `stdlib.h' (ISO): *Note Non-reentrant String Conversion::.
77765 -`int mbtowc (wchar_t *restrict RESULT, const char *restrict STRING, size_t SIZE)'
77766 - `stdlib.h' (ISO): *Note Non-reentrant Character Conversion::.
77768 -`int mcheck (void (*ABORTFN) (enum mcheck_status STATUS))'
77769 - `mcheck.h' (GNU): *Note Heap Consistency Checking::.
77771 -`tcflag_t MDMBUF'
77772 - `termios.h' (BSD): *Note Control Modes::.
77774 -`void * memalign (size_t BOUNDARY, size_t SIZE)'
77775 - `malloc.h' (BSD): *Note Aligned Memory Blocks::.
77777 -`__memalign_hook'
77778 - `malloc.h' (GNU): *Note Hooks for Malloc::.
77780 -`void * memccpy (void *restrict TO, const void *restrict FROM, int C, size_t SIZE)'
77781 - `string.h' (SVID): *Note Copying and Concatenation::.
77783 -`void * memchr (const void *BLOCK, int C, size_t SIZE)'
77784 - `string.h' (ISO): *Note Search Functions::.
77786 -`int memcmp (const void *A1, const void *A2, size_t SIZE)'
77787 - `string.h' (ISO): *Note String/Array Comparison::.
77789 -`void * memcpy (void *restrict TO, const void *restrict FROM, size_t SIZE)'
77790 - `string.h' (ISO): *Note Copying and Concatenation::.
77792 -`void * memfrob (void *MEM, size_t LENGTH)'
77793 - `string.h' (GNU): *Note Trivial Encryption::.
77795 -`void * memmem (const void *HAYSTACK, size_t HAYSTACK-LEN,
77796 - const void *NEEDLE, size_t NEEDLE-LEN)'
77797 - `string.h' (GNU): *Note Search Functions::.
77799 -`void * memmove (void *TO, const void *FROM, size_t SIZE)'
77800 - `string.h' (ISO): *Note Copying and Concatenation::.
77802 -`void * mempcpy (void *restrict TO, const void *restrict FROM, size_t SIZE)'
77803 - `string.h' (GNU): *Note Copying and Concatenation::.
77805 -`void * memrchr (const void *BLOCK, int C, size_t SIZE)'
77806 - `string.h' (GNU): *Note Search Functions::.
77808 -`void * memset (void *BLOCK, int C, size_t SIZE)'
77809 - `string.h' (ISO): *Note Copying and Concatenation::.
77811 -`int mkdir (const char *FILENAME, mode_t MODE)'
77812 - `sys/stat.h' (POSIX.1): *Note Creating Directories::.
77814 -`char * mkdtemp (char *TEMPLATE)'
77815 - `stdlib.h' (BSD): *Note Temporary Files::.
77817 -`int mkfifo (const char *FILENAME, mode_t MODE)'
77818 - `sys/stat.h' (POSIX.1): *Note FIFO Special Files::.
77820 -`int mknod (const char *FILENAME, int MODE, int DEV)'
77821 - `sys/stat.h' (BSD): *Note Making Special Files::.
77823 -`int mkstemp (char *TEMPLATE)'
77824 - `stdlib.h' (BSD): *Note Temporary Files::.
77826 -`char * mktemp (char *TEMPLATE)'
77827 - `stdlib.h' (Unix): *Note Temporary Files::.
77829 -`time_t mktime (struct tm *BROKENTIME)'
77830 - `time.h' (ISO): *Note Broken-down Time::.
77832 -`int mlock (const void *ADDR, size_t LEN)'
77833 - `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::.
77835 -`int mlockall (int FLAGS)'
77836 - `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::.
77838 -`void * mmap (void *ADDRESS, size_t LENGTH,int PROTECT, int FLAGS, int FILEDES, off_t OFFSET)'
77839 - `sys/mman.h' (POSIX): *Note Memory-mapped I/O::.
77841 -`void * mmap64 (void *ADDRESS, size_t LENGTH,int PROTECT, int FLAGS, int FILEDES, off64_t OFFSET)'
77842 - `sys/mman.h' (LFS): *Note Memory-mapped I/O::.
77844 -`mode_t'
77845 - `sys/types.h' (POSIX.1): *Note Attribute Meanings::.
77847 -`double modf (double VALUE, double *INTEGER-PART)'
77848 - `math.h' (ISO): *Note Rounding Functions::.
77850 -`float modff (float VALUE, float *INTEGER-PART)'
77851 - `math.h' (ISO): *Note Rounding Functions::.
77853 -`long double modfl (long double VALUE, long double *INTEGER-PART)'
77854 - `math.h' (ISO): *Note Rounding Functions::.
77856 -`int mount (const char *SPECIAL_FILE, const char *DIR, const char *FSTYPE, unsigned long int OPTIONS, const void *DATA)'
77857 - `sys/mount.h' (SVID, BSD): *Note Mount-Unmount-Remount::.
77859 -`long int mrand48 (void)'
77860 - `stdlib.h' (SVID): *Note SVID Random::.
77862 -`int mrand48_r (struct drand48_data *BUFFER, double *RESULT)'
77863 - `stdlib.h' (GNU): *Note SVID Random::.
77865 -`void * mremap (void *ADDRESS, size_t LENGTH, size_t NEW_LENGTH, int FLAG)'
77866 - `sys/mman.h' (GNU): *Note Memory-mapped I/O::.
77868 -`int MSG_DONTROUTE'
77869 - `sys/socket.h' (BSD): *Note Socket Data Options::.
77871 -`int MSG_OOB'
77872 - `sys/socket.h' (BSD): *Note Socket Data Options::.
77874 -`int MSG_PEEK'
77875 - `sys/socket.h' (BSD): *Note Socket Data Options::.
77877 -`int msync (void *ADDRESS, size_t LENGTH, int FLAGS)'
77878 - `sys/mman.h' (POSIX): *Note Memory-mapped I/O::.
77880 -`void mtrace (void)'
77881 - `mcheck.h' (GNU): *Note Tracing malloc::.
77883 -`int munlock (const void *ADDR, size_t LEN)'
77884 - `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::.
77886 -`int munlockall (void)'
77887 - `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::.
77889 -`int munmap (void *ADDR, size_t LENGTH)'
77890 - `sys/mman.h' (POSIX): *Note Memory-mapped I/O::.
77892 -`void muntrace (void)'
77893 - `mcheck.h' (GNU): *Note Tracing malloc::.
77895 -`int NAME_MAX'
77896 - `limits.h' (POSIX.1): *Note Limits for Files::.
77898 -`float NAN'
77899 - `math.h' (GNU): *Note Infinity and NaN::.
77901 -`double nan (const char *TAGP)'
77902 - `math.h' (ISO): *Note FP Bit Twiddling::.
77904 -`float nanf (const char *TAGP)'
77905 - `math.h' (ISO): *Note FP Bit Twiddling::.
77907 -`long double nanl (const char *TAGP)'
77908 - `math.h' (ISO): *Note FP Bit Twiddling::.
77910 -`int nanosleep (const struct timespec *REQUESTED_TIME, struct timespec *REMAINING)'
77911 - `time.h' (POSIX.1): *Note Sleeping::.
77913 -`int NCCS'
77914 - `termios.h' (POSIX.1): *Note Mode Data Types::.
77916 -`double nearbyint (double X)'
77917 - `math.h' (ISO): *Note Rounding Functions::.
77919 -`float nearbyintf (float X)'
77920 - `math.h' (ISO): *Note Rounding Functions::.
77922 -`long double nearbyintl (long double X)'
77923 - `math.h' (ISO): *Note Rounding Functions::.
77925 -`NEW_TIME'
77926 - `utmp.h' (SVID): *Note Manipulating the Database::.
77928 -`NEW_TIME'
77929 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
77931 -`double nextafter (double X, double Y)'
77932 - `math.h' (ISO): *Note FP Bit Twiddling::.
77934 -`float nextafterf (float X, float Y)'
77935 - `math.h' (ISO): *Note FP Bit Twiddling::.
77937 -`long double nextafterl (long double X, long double Y)'
77938 - `math.h' (ISO): *Note FP Bit Twiddling::.
77940 -`double nexttoward (double X, long double Y)'
77941 - `math.h' (ISO): *Note FP Bit Twiddling::.
77943 -`float nexttowardf (float X, long double Y)'
77944 - `math.h' (ISO): *Note FP Bit Twiddling::.
77946 -`long double nexttowardl (long double X, long double Y)'
77947 - `math.h' (ISO): *Note FP Bit Twiddling::.
77949 -`int nftw (const char *FILENAME, __nftw_func_t FUNC, int DESCRIPTORS, int FLAG)'
77950 - `ftw.h' (XPG4.2): *Note Working with Directory Trees::.
77952 -`int nftw64 (const char *FILENAME, __nftw64_func_t FUNC, int DESCRIPTORS, int FLAG)'
77953 - `ftw.h' (Unix98): *Note Working with Directory Trees::.
77955 -`__nftw64_func_t'
77956 - `ftw.h' (GNU): *Note Working with Directory Trees::.
77958 -`__nftw_func_t'
77959 - `ftw.h' (GNU): *Note Working with Directory Trees::.
77961 -`char * ngettext (const char *MSGID1, const char *MSGID2, unsigned long int N)'
77962 - `libintl.h' (GNU): *Note Advanced gettext functions::.
77964 -`int NGROUPS_MAX'
77965 - `limits.h' (POSIX.1): *Note General Limits::.
77967 -`int nice (int INCREMENT)'
77968 - `unistd.h' (BSD): *Note Traditional Scheduling Functions::.
77970 -`nlink_t'
77971 - `sys/types.h' (POSIX.1): *Note Attribute Meanings::.
77973 -`char * nl_langinfo (nl_item ITEM)'
77974 - `langinfo.h' (XOPEN): *Note The Elegant and Fast Way::.
77976 -`NO_ADDRESS'
77977 - `netdb.h' (BSD): *Note Host Names::.
77979 -`tcflag_t NOFLSH'
77980 - `termios.h' (POSIX.1): *Note Local Modes::.
77982 -`tcflag_t NOKERNINFO'
77983 - `termios.h' (BSD): *Note Local Modes::.
77985 -`NO_RECOVERY'
77986 - `netdb.h' (BSD): *Note Host Names::.
77988 -`long int nrand48 (unsigned short int XSUBI[3])'
77989 - `stdlib.h' (SVID): *Note SVID Random::.
77991 -`int nrand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, long int *RESULT)'
77992 - `stdlib.h' (GNU): *Note SVID Random::.
77994 -`int NSIG'
77995 - `signal.h' (BSD): *Note Standard Signals::.
77997 -`uint32_t ntohl (uint32_t NETLONG)'
77998 - `netinet/in.h' (BSD): *Note Byte Order::.
78000 -`uint16_t ntohs (uint16_t NETSHORT)'
78001 - `netinet/in.h' (BSD): *Note Byte Order::.
78003 -`int ntp_adjtime (struct timex *TPTR)'
78004 - `sys/timex.h' (GNU): *Note High Accuracy Clock::.
78006 -`int ntp_gettime (struct ntptimeval *TPTR)'
78007 - `sys/timex.h' (GNU): *Note High Accuracy Clock::.
78009 -`void * NULL'
78010 - `stddef.h' (ISO): *Note Null Pointer Constant::.
78012 -`int O_ACCMODE'
78013 - `fcntl.h' (POSIX.1): *Note Access Modes::.
78015 -`int O_APPEND'
78016 - `fcntl.h' (POSIX.1): *Note Operating Modes::.
78018 -`int O_ASYNC'
78019 - `fcntl.h' (BSD): *Note Operating Modes::.
78021 -`void obstack_1grow (struct obstack *OBSTACK-PTR, char C)'
78022 - `obstack.h' (GNU): *Note Growing Objects::.
78024 -`void obstack_1grow_fast (struct obstack *OBSTACK-PTR, char C)'
78025 - `obstack.h' (GNU): *Note Extra Fast Growing::.
78027 -`int obstack_alignment_mask (struct obstack *OBSTACK-PTR)'
78028 - `obstack.h' (GNU): *Note Obstacks Data Alignment::.
78030 -`void * obstack_alloc (struct obstack *OBSTACK-PTR, int SIZE)'
78031 - `obstack.h' (GNU): *Note Allocation in an Obstack::.
78033 -`obstack_alloc_failed_handler'
78034 - `obstack.h' (GNU): *Note Preparing for Obstacks::.
78036 -`void * obstack_base (struct obstack *OBSTACK-PTR)'
78037 - `obstack.h' (GNU): *Note Status of an Obstack::.
78039 -`void obstack_blank (struct obstack *OBSTACK-PTR, int SIZE)'
78040 - `obstack.h' (GNU): *Note Growing Objects::.
78042 -`void obstack_blank_fast (struct obstack *OBSTACK-PTR, int SIZE)'
78043 - `obstack.h' (GNU): *Note Extra Fast Growing::.
78045 -`int obstack_chunk_size (struct obstack *OBSTACK-PTR)'
78046 - `obstack.h' (GNU): *Note Obstack Chunks::.
78048 -`void * obstack_copy (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)'
78049 - `obstack.h' (GNU): *Note Allocation in an Obstack::.
78051 -`void * obstack_copy0 (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)'
78052 - `obstack.h' (GNU): *Note Allocation in an Obstack::.
78054 -`void * obstack_finish (struct obstack *OBSTACK-PTR)'
78055 - `obstack.h' (GNU): *Note Growing Objects::.
78057 -`void obstack_free (struct obstack *OBSTACK-PTR, void *OBJECT)'
78058 - `obstack.h' (GNU): *Note Freeing Obstack Objects::.
78060 -`void obstack_grow (struct obstack *OBSTACK-PTR, void *DATA, int SIZE)'
78061 - `obstack.h' (GNU): *Note Growing Objects::.
78063 -`void obstack_grow0 (struct obstack *OBSTACK-PTR, void *DATA, int SIZE)'
78064 - `obstack.h' (GNU): *Note Growing Objects::.
78066 -`int obstack_init (struct obstack *OBSTACK-PTR)'
78067 - `obstack.h' (GNU): *Note Preparing for Obstacks::.
78069 -`void obstack_int_grow (struct obstack *OBSTACK-PTR, int DATA)'
78070 - `obstack.h' (GNU): *Note Growing Objects::.
78072 -`void obstack_int_grow_fast (struct obstack *OBSTACK-PTR, int DATA)'
78073 - `obstack.h' (GNU): *Note Extra Fast Growing::.
78075 -`void * obstack_next_free (struct obstack *OBSTACK-PTR)'
78076 - `obstack.h' (GNU): *Note Status of an Obstack::.
78078 -`int obstack_object_size (struct obstack *OBSTACK-PTR)'
78079 - `obstack.h' (GNU): *Note Growing Objects::.
78081 -`int obstack_object_size (struct obstack *OBSTACK-PTR)'
78082 - `obstack.h' (GNU): *Note Status of an Obstack::.
78084 -`int obstack_printf (struct obstack *OBSTACK, const char *TEMPLATE, ...)'
78085 - `stdio.h' (GNU): *Note Dynamic Output::.
78087 -`void obstack_ptr_grow (struct obstack *OBSTACK-PTR, void *DATA)'
78088 - `obstack.h' (GNU): *Note Growing Objects::.
78090 -`void obstack_ptr_grow_fast (struct obstack *OBSTACK-PTR, void *DATA)'
78091 - `obstack.h' (GNU): *Note Extra Fast Growing::.
78093 -`int obstack_room (struct obstack *OBSTACK-PTR)'
78094 - `obstack.h' (GNU): *Note Extra Fast Growing::.
78096 -`int obstack_vprintf (struct obstack *OBSTACK, const char *TEMPLATE, va_list AP)'
78097 - `stdio.h' (GNU): *Note Variable Arguments Output::.
78099 -`int O_CREAT'
78100 - `fcntl.h' (POSIX.1): *Note Open-time Flags::.
78102 -`int O_EXCL'
78103 - `fcntl.h' (POSIX.1): *Note Open-time Flags::.
78105 -`int O_EXEC'
78106 - `fcntl.h' (GNU): *Note Access Modes::.
78108 -`int O_EXLOCK'
78109 - `fcntl.h' (BSD): *Note Open-time Flags::.
78111 -`off64_t'
78112 - `sys/types.h' (Unix98): *Note File Position Primitive::.
78114 -`size_t offsetof (TYPE, MEMBER)'
78115 - `stddef.h' (ISO): *Note Structure Measurement::.
78117 -`off_t'
78118 - `sys/types.h' (POSIX.1): *Note File Position Primitive::.
78120 -`int O_FSYNC'
78121 - `fcntl.h' (BSD): *Note Operating Modes::.
78123 -`int O_IGNORE_CTTY'
78124 - `fcntl.h' (GNU): *Note Open-time Flags::.
78126 -`OLD_TIME'
78127 - `utmp.h' (SVID): *Note Manipulating the Database::.
78129 -`OLD_TIME'
78130 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
78132 -`int O_NDELAY'
78133 - `fcntl.h' (BSD): *Note Operating Modes::.
78135 -`int on_exit (void (*FUNCTION)(int STATUS, void *ARG), void *ARG)'
78136 - `stdlib.h' (SunOS): *Note Cleanups on Exit::.
78138 -`tcflag_t ONLCR'
78139 - `termios.h' (BSD): *Note Output Modes::.
78141 -`int O_NOATIME'
78142 - `fcntl.h' (GNU): *Note Operating Modes::.
78144 -`int O_NOCTTY'
78145 - `fcntl.h' (POSIX.1): *Note Open-time Flags::.
78147 -`tcflag_t ONOEOT'
78148 - `termios.h' (BSD): *Note Output Modes::.
78150 -`int O_NOLINK'
78151 - `fcntl.h' (GNU): *Note Open-time Flags::.
78153 -`int O_NONBLOCK'
78154 - `fcntl.h' (POSIX.1): *Note Open-time Flags::.
78156 -`int O_NONBLOCK'
78157 - `fcntl.h' (POSIX.1): *Note Operating Modes::.
78159 -`int O_NOTRANS'
78160 - `fcntl.h' (GNU): *Note Open-time Flags::.
78162 -`int open (const char *FILENAME, int FLAGS[, mode_t MODE])'
78163 - `fcntl.h' (POSIX.1): *Note Opening and Closing Files::.
78165 -`int open64 (const char *FILENAME, int FLAGS[, mode_t MODE])'
78166 - `fcntl.h' (Unix98): *Note Opening and Closing Files::.
78168 -`DIR * opendir (const char *DIRNAME)'
78169 - `dirent.h' (POSIX.1): *Note Opening a Directory::.
78171 -`void openlog (const char *IDENT, int OPTION, int FACILITY)'
78172 - `syslog.h' (BSD): *Note openlog::.
78174 -`int OPEN_MAX'
78175 - `limits.h' (POSIX.1): *Note General Limits::.
78177 -`FILE * open_memstream (char **PTR, size_t *SIZELOC)'
78178 - `stdio.h' (GNU): *Note String Streams::.
78180 -`FILE * open_obstack_stream (struct obstack *OBSTACK)'
78181 - `stdio.h' (GNU): *Note Obstack Streams::.
78183 -`int openpty (int *AMASTER, int *ASLAVE, char *NAME, struct termios *TERMP, struct winsize *WINP)'
78184 - `pty.h' (BSD): *Note Pseudo-Terminal Pairs::.
78186 -`tcflag_t OPOST'
78187 - `termios.h' (POSIX.1): *Note Output Modes::.
78189 -`char * optarg'
78190 - `unistd.h' (POSIX.2): *Note Using Getopt::.
78192 -`int opterr'
78193 - `unistd.h' (POSIX.2): *Note Using Getopt::.
78195 -`int optind'
78196 - `unistd.h' (POSIX.2): *Note Using Getopt::.
78198 -`OPTION_ALIAS'
78199 - `argp.h' (GNU): *Note Argp Option Flags::.
78201 -`OPTION_ARG_OPTIONAL'
78202 - `argp.h' (GNU): *Note Argp Option Flags::.
78204 -`OPTION_DOC'
78205 - `argp.h' (GNU): *Note Argp Option Flags::.
78207 -`OPTION_HIDDEN'
78208 - `argp.h' (GNU): *Note Argp Option Flags::.
78210 -`OPTION_NO_USAGE'
78211 - `argp.h' (GNU): *Note Argp Option Flags::.
78213 -`int optopt'
78214 - `unistd.h' (POSIX.2): *Note Using Getopt::.
78216 -`int O_RDONLY'
78217 - `fcntl.h' (POSIX.1): *Note Access Modes::.
78219 -`int O_RDWR'
78220 - `fcntl.h' (POSIX.1): *Note Access Modes::.
78222 -`int O_READ'
78223 - `fcntl.h' (GNU): *Note Access Modes::.
78225 -`int O_SHLOCK'
78226 - `fcntl.h' (BSD): *Note Open-time Flags::.
78228 -`int O_SYNC'
78229 - `fcntl.h' (BSD): *Note Operating Modes::.
78231 -`int O_TRUNC'
78232 - `fcntl.h' (POSIX.1): *Note Open-time Flags::.
78234 -`int O_WRITE'
78235 - `fcntl.h' (GNU): *Note Access Modes::.
78237 -`int O_WRONLY'
78238 - `fcntl.h' (POSIX.1): *Note Access Modes::.
78240 -`tcflag_t OXTABS'
78241 - `termios.h' (BSD): *Note Output Modes::.
78243 -`PA_CHAR'
78244 - `printf.h' (GNU): *Note Parsing a Template String::.
78246 -`PA_DOUBLE'
78247 - `printf.h' (GNU): *Note Parsing a Template String::.
78249 -`PA_FLAG_LONG'
78250 - `printf.h' (GNU): *Note Parsing a Template String::.
78252 -`PA_FLAG_LONG_DOUBLE'
78253 - `printf.h' (GNU): *Note Parsing a Template String::.
78255 -`PA_FLAG_LONG_LONG'
78256 - `printf.h' (GNU): *Note Parsing a Template String::.
78258 -`int PA_FLAG_MASK'
78259 - `printf.h' (GNU): *Note Parsing a Template String::.
78261 -`PA_FLAG_PTR'
78262 - `printf.h' (GNU): *Note Parsing a Template String::.
78264 -`PA_FLAG_SHORT'
78265 - `printf.h' (GNU): *Note Parsing a Template String::.
78267 -`PA_FLOAT'
78268 - `printf.h' (GNU): *Note Parsing a Template String::.
78270 -`PA_INT'
78271 - `printf.h' (GNU): *Note Parsing a Template String::.
78273 -`PA_LAST'
78274 - `printf.h' (GNU): *Note Parsing a Template String::.
78276 -`PA_POINTER'
78277 - `printf.h' (GNU): *Note Parsing a Template String::.
78279 -`tcflag_t PARENB'
78280 - `termios.h' (POSIX.1): *Note Control Modes::.
78282 -`tcflag_t PARMRK'
78283 - `termios.h' (POSIX.1): *Note Input Modes::.
78285 -`tcflag_t PARODD'
78286 - `termios.h' (POSIX.1): *Note Control Modes::.
78288 -`size_t parse_printf_format (const char *TEMPLATE, size_t N, int *ARGTYPES)'
78289 - `printf.h' (GNU): *Note Parsing a Template String::.
78291 -`PA_STRING'
78292 - `printf.h' (GNU): *Note Parsing a Template String::.
78294 -`long int pathconf (const char *FILENAME, int PARAMETER)'
78295 - `unistd.h' (POSIX.1): *Note Pathconf::.
78297 -`int PATH_MAX'
78298 - `limits.h' (POSIX.1): *Note Limits for Files::.
78300 -`int pause ()'
78301 - `unistd.h' (POSIX.1): *Note Using Pause::.
78303 -`_PC_ASYNC_IO'
78304 - `unistd.h' (POSIX.1): *Note Pathconf::.
78306 -`_PC_CHOWN_RESTRICTED'
78307 - `unistd.h' (POSIX.1): *Note Pathconf::.
78309 -`_PC_FILESIZEBITS'
78310 - `unistd.h' (LFS): *Note Pathconf::.
78312 -`_PC_LINK_MAX'
78313 - `unistd.h' (POSIX.1): *Note Pathconf::.
78315 -`int pclose (FILE *STREAM)'
78316 - `stdio.h' (POSIX.2, SVID, BSD): *Note Pipe to a Subprocess::.
78318 -`_PC_MAX_CANON'
78319 - `unistd.h' (POSIX.1): *Note Pathconf::.
78321 -`_PC_MAX_INPUT'
78322 - `unistd.h' (POSIX.1): *Note Pathconf::.
78324 -`_PC_NAME_MAX'
78325 - `unistd.h' (POSIX.1): *Note Pathconf::.
78327 -`_PC_NO_TRUNC'
78328 - `unistd.h' (POSIX.1): *Note Pathconf::.
78330 -`_PC_PATH_MAX'
78331 - `unistd.h' (POSIX.1): *Note Pathconf::.
78333 -`_PC_PIPE_BUF'
78334 - `unistd.h' (POSIX.1): *Note Pathconf::.
78336 -`_PC_PRIO_IO'
78337 - `unistd.h' (POSIX.1): *Note Pathconf::.
78339 -`_PC_REC_INCR_XFER_SIZE'
78340 - `unistd.h' (POSIX.1): *Note Pathconf::.
78342 -`_PC_REC_MAX_XFER_SIZE'
78343 - `unistd.h' (POSIX.1): *Note Pathconf::.
78345 -`_PC_REC_MIN_XFER_SIZE'
78346 - `unistd.h' (POSIX.1): *Note Pathconf::.
78348 -`_PC_REC_XFER_ALIGN'
78349 - `unistd.h' (POSIX.1): *Note Pathconf::.
78351 -`_PC_SOCK_MAXBUF'
78352 - `unistd.h' (POSIX.1g): *Note Pathconf::.
78354 -`_PC_SYNC_IO'
78355 - `unistd.h' (POSIX.1): *Note Pathconf::.
78357 -`_PC_VDISABLE'
78358 - `unistd.h' (POSIX.1): *Note Pathconf::.
78360 -`tcflag_t PENDIN'
78361 - `termios.h' (BSD): *Note Local Modes::.
78363 -`void perror (const char *MESSAGE)'
78364 - `stdio.h' (ISO): *Note Error Messages::.
78366 -`int PF_FILE'
78367 - `sys/socket.h' (GNU): *Note Local Namespace Details::.
78369 -`int PF_INET'
78370 - `sys/socket.h' (BSD): *Note Internet Namespace::.
78372 -`int PF_INET6'
78373 - `sys/socket.h' (X/Open): *Note Internet Namespace::.
78375 -`int PF_LOCAL'
78376 - `sys/socket.h' (POSIX): *Note Local Namespace Details::.
78378 -`int PF_UNIX'
78379 - `sys/socket.h' (BSD): *Note Local Namespace Details::.
78381 -`pid_t'
78382 - `sys/types.h' (POSIX.1): *Note Process Identification::.
78384 -`int pipe (int FILEDES[2])'
78385 - `unistd.h' (POSIX.1): *Note Creating a Pipe::.
78387 -`int PIPE_BUF'
78388 - `limits.h' (POSIX.1): *Note Limits for Files::.
78390 -`FILE * popen (const char *COMMAND, const char *MODE)'
78391 - `stdio.h' (POSIX.2, SVID, BSD): *Note Pipe to a Subprocess::.
78393 -`_POSIX2_BC_BASE_MAX'
78394 - `limits.h' (POSIX.2): *Note Utility Minimums::.
78396 -`_POSIX2_BC_DIM_MAX'
78397 - `limits.h' (POSIX.2): *Note Utility Minimums::.
78399 -`_POSIX2_BC_SCALE_MAX'
78400 - `limits.h' (POSIX.2): *Note Utility Minimums::.
78402 -`_POSIX2_BC_STRING_MAX'
78403 - `limits.h' (POSIX.2): *Note Utility Minimums::.
78405 -`int _POSIX2_C_DEV'
78406 - `unistd.h' (POSIX.2): *Note System Options::.
78408 -`_POSIX2_COLL_WEIGHTS_MAX'
78409 - `limits.h' (POSIX.2): *Note Utility Minimums::.
78411 -`long int _POSIX2_C_VERSION'
78412 - `unistd.h' (POSIX.2): *Note Version Supported::.
78414 -`_POSIX2_EQUIV_CLASS_MAX'
78415 - `limits.h' (POSIX.2): *Note Utility Minimums::.
78417 -`_POSIX2_EXPR_NEST_MAX'
78418 - `limits.h' (POSIX.2): *Note Utility Minimums::.
78420 -`int _POSIX2_FORT_DEV'
78421 - `unistd.h' (POSIX.2): *Note System Options::.
78423 -`int _POSIX2_FORT_RUN'
78424 - `unistd.h' (POSIX.2): *Note System Options::.
78426 -`_POSIX2_LINE_MAX'
78427 - `limits.h' (POSIX.2): *Note Utility Minimums::.
78429 -`int _POSIX2_LOCALEDEF'
78430 - `unistd.h' (POSIX.2): *Note System Options::.
78432 -`_POSIX2_RE_DUP_MAX'
78433 - `limits.h' (POSIX.2): *Note Minimums::.
78435 -`int _POSIX2_SW_DEV'
78436 - `unistd.h' (POSIX.2): *Note System Options::.
78438 -`_POSIX_AIO_LISTIO_MAX'
78439 - `limits.h' (POSIX.1): *Note Minimums::.
78441 -`_POSIX_AIO_MAX'
78442 - `limits.h' (POSIX.1): *Note Minimums::.
78444 -`_POSIX_ARG_MAX'
78445 - `limits.h' (POSIX.1): *Note Minimums::.
78447 -`_POSIX_CHILD_MAX'
78448 - `limits.h' (POSIX.1): *Note Minimums::.
78450 -`int _POSIX_CHOWN_RESTRICTED'
78451 - `unistd.h' (POSIX.1): *Note Options for Files::.
78453 -`_POSIX_C_SOURCE'
78454 - (POSIX.2): *Note Feature Test Macros::.
78456 -`int _POSIX_JOB_CONTROL'
78457 - `unistd.h' (POSIX.1): *Note System Options::.
78459 -`_POSIX_LINK_MAX'
78460 - `limits.h' (POSIX.1): *Note File Minimums::.
78462 -`_POSIX_MAX_CANON'
78463 - `limits.h' (POSIX.1): *Note File Minimums::.
78465 -`_POSIX_MAX_INPUT'
78466 - `limits.h' (POSIX.1): *Note File Minimums::.
78468 -`int posix_memalign (void **MEMPTR, size_t ALIGNMENT, size_t SIZE)'
78469 - `stdlib.h' (POSIX): *Note Aligned Memory Blocks::.
78471 -`_POSIX_NAME_MAX'
78472 - `limits.h' (POSIX.1): *Note File Minimums::.
78474 -`_POSIX_NGROUPS_MAX'
78475 - `limits.h' (POSIX.1): *Note Minimums::.
78477 -`int _POSIX_NO_TRUNC'
78478 - `unistd.h' (POSIX.1): *Note Options for Files::.
78480 -`_POSIX_OPEN_MAX'
78481 - `limits.h' (POSIX.1): *Note Minimums::.
78483 -`_POSIX_PATH_MAX'
78484 - `limits.h' (POSIX.1): *Note File Minimums::.
78486 -`_POSIX_PIPE_BUF'
78487 - `limits.h' (POSIX.1): *Note File Minimums::.
78489 -`POSIX_REC_INCR_XFER_SIZE'
78490 - `limits.h' (POSIX.1): *Note File Minimums::.
78492 -`POSIX_REC_MAX_XFER_SIZE'
78493 - `limits.h' (POSIX.1): *Note File Minimums::.
78495 -`POSIX_REC_MIN_XFER_SIZE'
78496 - `limits.h' (POSIX.1): *Note File Minimums::.
78498 -`POSIX_REC_XFER_ALIGN'
78499 - `limits.h' (POSIX.1): *Note File Minimums::.
78501 -`int _POSIX_SAVED_IDS'
78502 - `unistd.h' (POSIX.1): *Note System Options::.
78504 -`_POSIX_SOURCE'
78505 - (POSIX.1): *Note Feature Test Macros::.
78507 -`_POSIX_SSIZE_MAX'
78508 - `limits.h' (POSIX.1): *Note Minimums::.
78510 -`_POSIX_STREAM_MAX'
78511 - `limits.h' (POSIX.1): *Note Minimums::.
78513 -`_POSIX_TZNAME_MAX'
78514 - `limits.h' (POSIX.1): *Note Minimums::.
78516 -`unsigned char _POSIX_VDISABLE'
78517 - `unistd.h' (POSIX.1): *Note Options for Files::.
78519 -`long int _POSIX_VERSION'
78520 - `unistd.h' (POSIX.1): *Note Version Supported::.
78522 -`double pow (double BASE, double POWER)'
78523 - `math.h' (ISO): *Note Exponents and Logarithms::.
78525 -`double pow10 (double X)'
78526 - `math.h' (GNU): *Note Exponents and Logarithms::.
78528 -`float pow10f (float X)'
78529 - `math.h' (GNU): *Note Exponents and Logarithms::.
78531 -`long double pow10l (long double X)'
78532 - `math.h' (GNU): *Note Exponents and Logarithms::.
78534 -`float powf (float BASE, float POWER)'
78535 - `math.h' (ISO): *Note Exponents and Logarithms::.
78537 -`long double powl (long double BASE, long double POWER)'
78538 - `math.h' (ISO): *Note Exponents and Logarithms::.
78540 -`ssize_t pread (int FILEDES, void *BUFFER, size_t SIZE, off_t OFFSET)'
78541 - `unistd.h' (Unix98): *Note I/O Primitives::.
78543 -`ssize_t pread64 (int FILEDES, void *BUFFER, size_t SIZE, off64_t OFFSET)'
78544 - `unistd.h' (Unix98): *Note I/O Primitives::.
78546 -`int printf (const char *TEMPLATE, ...)'
78547 - `stdio.h' (ISO): *Note Formatted Output Functions::.
78549 -`printf_arginfo_function'
78550 - `printf.h' (GNU): *Note Defining the Output Handler::.
78552 -`printf_function'
78553 - `printf.h' (GNU): *Note Defining the Output Handler::.
78555 -`int printf_size (FILE *FP, const struct printf_info *INFO, const void *const *ARGS)'
78556 - `printf.h' (GNU): *Note Predefined Printf Handlers::.
78558 -`int printf_size_info (const struct printf_info *INFO, size_t N, int *ARGTYPES)'
78559 - `printf.h' (GNU): *Note Predefined Printf Handlers::.
78561 -`PRIO_MAX'
78562 - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::.
78564 -`PRIO_MIN'
78565 - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::.
78567 -`PRIO_PGRP'
78568 - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::.
78570 -`PRIO_PROCESS'
78571 - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::.
78573 -`PRIO_USER'
78574 - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::.
78576 -`char * program_invocation_name'
78577 - `errno.h' (GNU): *Note Error Messages::.
78579 -`char * program_invocation_short_name'
78580 - `errno.h' (GNU): *Note Error Messages::.
78582 -`void psignal (int SIGNUM, const char *MESSAGE)'
78583 - `signal.h' (BSD): *Note Signal Messages::.
78585 -`int pthread_atfork (void (*PREPARE)(void), void (*PARENT)(void), void (*CHILD)(void))'
78586 - `pthread.h' (POSIX): *Note Threads and Fork::.
78588 -`int pthread_attr_destroy (pthread_attr_t *ATTR)'
78589 - `pthread.h' (POSIX): *Note Thread Attributes::.
78591 -`int pthread_attr_getattr (const pthread_attr_t *OBJ, int *VALUE)'
78592 - `pthread.h' (POSIX): *Note Thread Attributes::.
78594 -`int pthread_attr_init (pthread_attr_t *ATTR)'
78595 - `pthread.h' (POSIX): *Note Thread Attributes::.
78597 -`int pthread_attr_setattr (pthread_attr_t *OBJ, int VALUE)'
78598 - `pthread.h' (POSIX): *Note Thread Attributes::.
78600 -`int pthread_cancel (pthread_t THREAD)'
78601 - `pthread.h' (POSIX): *Note Basic Thread Operations::.
78603 -`void pthread_cleanup_pop (int EXECUTE)'
78604 - `pthread.h' (POSIX): *Note Cleanup Handlers::.
78606 -`void pthread_cleanup_pop_restore_np (int EXECUTE)'
78607 - `pthread.h' (GNU): *Note Cleanup Handlers::.
78609 -`void pthread_cleanup_push (void (*ROUTINE) (void *), void *ARG)'
78610 - `pthread.h' (POSIX): *Note Cleanup Handlers::.
78612 -`void pthread_cleanup_push_defer_np (void (*ROUTINE) (void *), void *ARG)'
78613 - `pthread.h' (GNU): *Note Cleanup Handlers::.
78615 -`int pthread_condattr_init (pthread_condattr_t *ATTR)'
78616 - `pthread.h' (POSIX): *Note Condition Variables::.
78618 -`int pthread_cond_broadcast (pthread_cond_t *COND)'
78619 - `pthread.h' (POSIX): *Note Condition Variables::.
78621 -`int pthread_cond_destroy (pthread_cond_t *COND)'
78622 - `pthread.h' (POSIX): *Note Condition Variables::.
78624 -`int pthread_cond_init (pthread_cond_t *COND, pthread_condattr_t *cond_ATTR)'
78625 - `pthread.h' (POSIX): *Note Condition Variables::.
78627 -`int pthread_cond_signal (pthread_cond_t *COND)'
78628 - `pthread.h' (POSIX): *Note Condition Variables::.
78630 -`int pthread_cond_timedwait (pthread_cond_t *COND, pthread_mutex_t *MUTEX, const struct timespec *ABSTIME)'
78631 - `pthread.h' (POSIX): *Note Condition Variables::.
78633 -`int pthread_cond_wait (pthread_cond_t *COND, pthread_mutex_t *MUTEX)'
78634 - `pthread.h' (POSIX): *Note Condition Variables::.
78636 -`int pthread_create (pthread_t * THREAD, pthread_attr_t * ATTR, void * (*START_ROUTINE)(void *), void * ARG)'
78637 - `pthread.h' (POSIX): *Note Basic Thread Operations::.
78639 -`int pthread_detach (pthread_t TH)'
78640 - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::.
78642 -`int pthread_equal (pthread_t thread1, pthread_t thread2)'
78643 - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::.
78645 -`void pthread_exit (void *RETVAL)'
78646 - `pthread.h' (POSIX): *Note Basic Thread Operations::.
78648 -`int pthread_getconcurrency ()'
78649 - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::.
78651 -`int pthread_getschedparam (pthread_t target_THREAD, int *POLICY, struct sched_param *PARAM)'
78652 - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::.
78654 -`void * pthread_getspecific (pthread_key_t KEY)'
78655 - `pthread.h' (POSIX): *Note Thread-Specific Data::.
78657 -`int pthread_join (pthread_t TH, void **thread_RETURN)'
78658 - `pthread.h' (POSIX): *Note Basic Thread Operations::.
78660 -`int pthread_key_create (pthread_key_t *KEY, void (*destr_function) (void *))'
78661 - `pthread.h' (POSIX): *Note Thread-Specific Data::.
78663 -`int pthread_key_delete (pthread_key_t KEY)'
78664 - `pthread.h' (POSIX): *Note Thread-Specific Data::.
78666 -`int pthread_kill (pthread_t THREAD, int SIGNO)'
78667 - `pthread.h' (POSIX): *Note Threads and Signal Handling::.
78669 -`void pthread_kill_other_threads_np (VOID)'
78670 - `pthread.h' (GNU): *Note Miscellaneous Thread Functions::.
78672 -`int pthread_mutexattr_destroy (pthread_mutexattr_t *ATTR)'
78673 - `pthread.h' (POSIX): *Note Mutexes::.
78675 -`int pthread_mutexattr_gettype (const pthread_mutexattr_t *ATTR, int *TYPE)'
78676 - `pthread.h' (POSIX): *Note Mutexes::.
78678 -`int pthread_mutexattr_init (pthread_mutexattr_t *ATTR)'
78679 - `pthread.h' (POSIX): *Note Mutexes::.
78681 -`int pthread_mutexattr_settype (pthread_mutexattr_t *ATTR, int TYPE)'
78682 - `pthread.h' (POSIX): *Note Mutexes::.
78684 -`int pthread_mutex_destroy (pthread_mutex_t *MUTEX)'
78685 - `pthread.h' (POSIX): *Note Mutexes::.
78687 -`int pthread_mutex_init (pthread_mutex_t *MUTEX, const pthread_mutexattr_t *MUTEXATTR)'
78688 - `pthread.h' (POSIX): *Note Mutexes::.
78690 -`int pthread_mutex_lock (pthread_mutex_t *mutex))'
78691 - `pthread.h' (POSIX): *Note Mutexes::.
78693 -`int pthread_mutex_timedlock (pthread_mutex_t *MUTEX, const struct timespec *ABSTIME)'
78694 - `pthread.h' (POSIX): *Note Mutexes::.
78696 -`int pthread_mutex_trylock (pthread_mutex_t *MUTEX)'
78697 - `pthread.h' (POSIX): *Note Mutexes::.
78699 -`int pthread_mutex_unlock (pthread_mutex_t *MUTEX)'
78700 - `pthread.h' (POSIX): *Note Mutexes::.
78702 -`int pthread_once (pthread_once_t *once_CONTROL, void (*INIT_ROUTINE) (void))'
78703 - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::.
78705 -`pthread_t pthread_self (VOID)'
78706 - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::.
78708 -`int pthread_setcancelstate (int STATE, int *OLDSTATE)'
78709 - `pthread.h' (POSIX): *Note Cancellation::.
78711 -`int pthread_setcanceltype (int TYPE, int *OLDTYPE)'
78712 - `pthread.h' (POSIX): *Note Cancellation::.
78714 -`int pthread_setconcurrency (int LEVEL)'
78715 - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::.
78717 -`int pthread_setschedparam (pthread_t target_THREAD, int POLICY, const struct sched_param *PARAM)'
78718 - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::.
78720 -`int pthread_setspecific (pthread_key_t KEY, const void *POINTER)'
78721 - `pthread.h' (POSIX): *Note Thread-Specific Data::.
78723 -`int pthread_sigmask (int HOW, const sigset_t *NEWMASK, sigset_t *OLDMASK)'
78724 - `pthread.h' (POSIX): *Note Threads and Signal Handling::.
78726 -`void pthread_testcancel (VOID)'
78727 - `pthread.h' (POSIX): *Note Cancellation::.
78729 -`char * P_tmpdir'
78730 - `stdio.h' (SVID): *Note Temporary Files::.
78732 -`ptrdiff_t'
78733 - `stddef.h' (ISO): *Note Important Data Types::.
78735 -`char * ptsname (int FILEDES)'
78736 - `stdlib.h' (SVID, XPG4.2): *Note Allocation::.
78738 -`int ptsname_r (int FILEDES, char *BUF, size_t LEN)'
78739 - `stdlib.h' (GNU): *Note Allocation::.
78741 -`int putc (int C, FILE *STREAM)'
78742 - `stdio.h' (ISO): *Note Simple Output::.
78744 -`int putchar (int C)'
78745 - `stdio.h' (ISO): *Note Simple Output::.
78747 -`int putchar_unlocked (int C)'
78748 - `stdio.h' (POSIX): *Note Simple Output::.
78750 -`int putc_unlocked (int C, FILE *STREAM)'
78751 - `stdio.h' (POSIX): *Note Simple Output::.
78753 -`int putenv (char *STRING)'
78754 - `stdlib.h' (SVID): *Note Environment Access::.
78756 -`int putpwent (const struct passwd *P, FILE *STREAM)'
78757 - `pwd.h' (SVID): *Note Writing a User Entry::.
78759 -`int puts (const char *S)'
78760 - `stdio.h' (ISO): *Note Simple Output::.
78762 -`struct utmp * pututline (const struct utmp *UTMP)'
78763 - `utmp.h' (SVID): *Note Manipulating the Database::.
78765 -`struct utmpx * pututxline (const struct utmpx *UTMP)'
78766 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
78768 -`int putw (int W, FILE *STREAM)'
78769 - `stdio.h' (SVID): *Note Simple Output::.
78771 -`wint_t putwc (wchar_t WC, FILE *STREAM)'
78772 - `wchar.h' (ISO): *Note Simple Output::.
78774 -`wint_t putwchar (wchar_t WC)'
78775 - `wchar.h' (ISO): *Note Simple Output::.
78777 -`wint_t putwchar_unlocked (wchar_t WC)'
78778 - `wchar.h' (GNU): *Note Simple Output::.
78780 -`wint_t putwc_unlocked (wchar_t WC, FILE *STREAM)'
78781 - `wchar.h' (GNU): *Note Simple Output::.
78783 -`ssize_t pwrite (int FILEDES, const void *BUFFER, size_t SIZE, off_t OFFSET)'
78784 - `unistd.h' (Unix98): *Note I/O Primitives::.
78786 -`ssize_t pwrite64 (int FILEDES, const void *BUFFER, size_t SIZE, off64_t OFFSET)'
78787 - `unistd.h' (Unix98): *Note I/O Primitives::.
78789 -`char * qecvt (long double VALUE, int NDIGIT, int *DECPT, int *NEG)'
78790 - `stdlib.h' (GNU): *Note System V Number Conversion::.
78792 -`char * qecvt_r (long double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)'
78793 - `stdlib.h' (GNU): *Note System V Number Conversion::.
78795 -`char * qfcvt (long double VALUE, int NDIGIT, int *DECPT, int *NEG)'
78796 - `stdlib.h' (GNU): *Note System V Number Conversion::.
78798 -`char * qfcvt_r (long double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)'
78799 - `stdlib.h' (GNU): *Note System V Number Conversion::.
78801 -`char * qgcvt (long double VALUE, int NDIGIT, char *BUF)'
78802 - `stdlib.h' (GNU): *Note System V Number Conversion::.
78804 -`void qsort (void *ARRAY, size_t COUNT, size_t SIZE, comparison_fn_t COMPARE)'
78805 - `stdlib.h' (ISO): *Note Array Sort Function::.
78807 -`int raise (int SIGNUM)'
78808 - `signal.h' (ISO): *Note Signaling Yourself::.
78810 -`int rand (void)'
78811 - `stdlib.h' (ISO): *Note ISO Random::.
78813 -`int RAND_MAX'
78814 - `stdlib.h' (ISO): *Note ISO Random::.
78816 -`long int random (void)'
78817 - `stdlib.h' (BSD): *Note BSD Random::.
78819 -`int random_r (struct random_data *restrict BUF, int32_t *restrict RESULT)'
78820 - `stdlib.h' (GNU): *Note BSD Random::.
78822 -`int rand_r (unsigned int *SEED)'
78823 - `stdlib.h' (POSIX.1): *Note ISO Random::.
78825 -`void * rawmemchr (const void *BLOCK, int C)'
78826 - `string.h' (GNU): *Note Search Functions::.
78828 -`ssize_t read (int FILEDES, void *BUFFER, size_t SIZE)'
78829 - `unistd.h' (POSIX.1): *Note I/O Primitives::.
78831 -`struct dirent * readdir (DIR *DIRSTREAM)'
78832 - `dirent.h' (POSIX.1): *Note Reading/Closing Directory::.
78834 -`struct dirent64 * readdir64 (DIR *DIRSTREAM)'
78835 - `dirent.h' (LFS): *Note Reading/Closing Directory::.
78837 -`int readdir64_r (DIR *DIRSTREAM, struct dirent64 *ENTRY, struct dirent64 **RESULT)'
78838 - `dirent.h' (LFS): *Note Reading/Closing Directory::.
78840 -`int readdir_r (DIR *DIRSTREAM, struct dirent *ENTRY, struct dirent **RESULT)'
78841 - `dirent.h' (GNU): *Note Reading/Closing Directory::.
78843 -`int readlink (const char *FILENAME, char *BUFFER, size_t SIZE)'
78844 - `unistd.h' (BSD): *Note Symbolic Links::.
78846 -`ssize_t readv (int FILEDES, const struct iovec *VECTOR, int COUNT)'
78847 - `sys/uio.h' (BSD): *Note Scatter-Gather::.
78849 -`void * realloc (void *PTR, size_t NEWSIZE)'
78850 - `malloc.h', `stdlib.h' (ISO): *Note Changing Block Size::.
78852 -`__realloc_hook'
78853 - `malloc.h' (GNU): *Note Hooks for Malloc::.
78855 -`char * realpath (const char *restrict NAME, char *restrict RESOLVED)'
78856 - `stdlib.h' (XPG): *Note Symbolic Links::.
78858 -`int recv (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)'
78859 - `sys/socket.h' (BSD): *Note Receiving Data::.
78861 -`int recvfrom (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)'
78862 - `sys/socket.h' (BSD): *Note Receiving Datagrams::.
78864 -`int recvmsg (int SOCKET, struct msghdr *MESSAGE, int FLAGS)'
78865 - `sys/socket.h' (BSD): *Note Receiving Datagrams::.
78867 -`int RE_DUP_MAX'
78868 - `limits.h' (POSIX.2): *Note General Limits::.
78870 -`_REENTRANT'
78871 - (GNU): *Note Feature Test Macros::.
78873 -`REG_BADBR'
78874 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78876 -`REG_BADPAT'
78877 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78879 -`REG_BADRPT'
78880 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78882 -`int regcomp (regex_t *COMPILED, const char *PATTERN, int CFLAGS)'
78883 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78885 -`REG_EBRACE'
78886 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78888 -`REG_EBRACK'
78889 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78891 -`REG_ECOLLATE'
78892 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78894 -`REG_ECTYPE'
78895 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78897 -`REG_EESCAPE'
78898 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78900 -`REG_EPAREN'
78901 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78903 -`REG_ERANGE'
78904 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78906 -`size_t regerror (int ERRCODE, regex_t *COMPILED, char *BUFFER, size_t LENGTH)'
78907 - `regex.h' (POSIX.2): *Note Regexp Cleanup::.
78909 -`REG_ESPACE'
78910 - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::.
78912 -`REG_ESPACE'
78913 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78915 -`REG_ESUBREG'
78916 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78918 -`int regexec (regex_t *COMPILED, char *STRING, size_t NMATCH, regmatch_t MATCHPTR [], int EFLAGS)'
78919 - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::.
78921 -`regex_t'
78922 - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::.
78924 -`REG_EXTENDED'
78925 - `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::.
78927 -`void regfree (regex_t *COMPILED)'
78928 - `regex.h' (POSIX.2): *Note Regexp Cleanup::.
78930 -`REG_ICASE'
78931 - `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::.
78933 -`int register_printf_function (int SPEC, printf_function HANDLER-FUNCTION, printf_arginfo_function ARGINFO-FUNCTION)'
78934 - `printf.h' (GNU): *Note Registering New Conversions::.
78936 -`regmatch_t'
78937 - `regex.h' (POSIX.2): *Note Regexp Subexpressions::.
78939 -`REG_NEWLINE'
78940 - `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::.
78942 -`REG_NOMATCH'
78943 - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::.
78945 -`REG_NOSUB'
78946 - `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::.
78948 -`REG_NOTBOL'
78949 - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::.
78951 -`REG_NOTEOL'
78952 - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::.
78954 -`regoff_t'
78955 - `regex.h' (POSIX.2): *Note Regexp Subexpressions::.
78957 -`double remainder (double NUMERATOR, double DENOMINATOR)'
78958 - `math.h' (BSD): *Note Remainder Functions::.
78960 -`float remainderf (float NUMERATOR, float DENOMINATOR)'
78961 - `math.h' (BSD): *Note Remainder Functions::.
78963 -`long double remainderl (long double NUMERATOR, long double DENOMINATOR)'
78964 - `math.h' (BSD): *Note Remainder Functions::.
78966 -`int remove (const char *FILENAME)'
78967 - `stdio.h' (ISO): *Note Deleting Files::.
78969 -`int rename (const char *OLDNAME, const char *NEWNAME)'
78970 - `stdio.h' (ISO): *Note Renaming Files::.
78972 -`void rewind (FILE *STREAM)'
78973 - `stdio.h' (ISO): *Note File Positioning::.
78975 -`void rewinddir (DIR *DIRSTREAM)'
78976 - `dirent.h' (POSIX.1): *Note Random Access Directory::.
78978 -`char * rindex (const char *STRING, int C)'
78979 - `string.h' (BSD): *Note Search Functions::.
78981 -`double rint (double X)'
78982 - `math.h' (ISO): *Note Rounding Functions::.
78984 -`float rintf (float X)'
78985 - `math.h' (ISO): *Note Rounding Functions::.
78987 -`long double rintl (long double X)'
78988 - `math.h' (ISO): *Note Rounding Functions::.
78990 -`int RLIM_INFINITY'
78991 - `sys/resource.h' (BSD): *Note Limits on Resources::.
78993 -`RLIMIT_AS'
78994 - `sys/resource.h' (Unix98): *Note Limits on Resources::.
78996 -`RLIMIT_CORE'
78997 - `sys/resource.h' (BSD): *Note Limits on Resources::.
78999 -`RLIMIT_CPU'
79000 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79002 -`RLIMIT_DATA'
79003 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79005 -`RLIMIT_FSIZE'
79006 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79008 -`RLIMIT_MEMLOCK'
79009 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79011 -`RLIMIT_NOFILE'
79012 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79014 -`RLIMIT_NPROC'
79015 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79017 -`RLIMIT_RSS'
79018 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79020 -`RLIMIT_STACK'
79021 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79023 -`RLIM_NLIMITS'
79024 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79026 -`int rmdir (const char *FILENAME)'
79027 - `unistd.h' (POSIX.1): *Note Deleting Files::.
79029 -`int R_OK'
79030 - `unistd.h' (POSIX.1): *Note Testing File Access::.
79032 -`double round (double X)'
79033 - `math.h' (ISO): *Note Rounding Functions::.
79035 -`float roundf (float X)'
79036 - `math.h' (ISO): *Note Rounding Functions::.
79038 -`long double roundl (long double X)'
79039 - `math.h' (ISO): *Note Rounding Functions::.
79041 -`int rpmatch (const char *RESPONSE)'
79042 - `stdlib.h' (stdlib.h): *Note Yes-or-No Questions::.
79044 -`RUN_LVL'
79045 - `utmp.h' (SVID): *Note Manipulating the Database::.
79047 -`RUN_LVL'
79048 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
79050 -`RUSAGE_CHILDREN'
79051 - `sys/resource.h' (BSD): *Note Resource Usage::.
79053 -`RUSAGE_SELF'
79054 - `sys/resource.h' (BSD): *Note Resource Usage::.
79056 -`int SA_NOCLDSTOP'
79057 - `signal.h' (POSIX.1): *Note Flags for Sigaction::.
79059 -`int SA_ONSTACK'
79060 - `signal.h' (BSD): *Note Flags for Sigaction::.
79062 -`int SA_RESTART'
79063 - `signal.h' (BSD): *Note Flags for Sigaction::.
79065 -`int sbrk (ptrdiff_t DELTA)'
79066 - `unistd.h' (BSD): *Note Resizing the Data Segment::.
79068 -`_SC_2_C_DEV'
79069 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79071 -`_SC_2_FORT_DEV'
79072 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79074 -`_SC_2_FORT_RUN'
79075 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79077 -`_SC_2_LOCALEDEF'
79078 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79080 -`_SC_2_SW_DEV'
79081 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79083 -`_SC_2_VERSION'
79084 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79086 -`_SC_AIO_LISTIO_MAX'
79087 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79089 -`_SC_AIO_MAX'
79090 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79092 -`_SC_AIO_PRIO_DELTA_MAX'
79093 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79095 -`double scalb (double VALUE, int EXPONENT)'
79096 - `math.h' (BSD): *Note Normalization Functions::.
79098 -`float scalbf (float VALUE, int EXPONENT)'
79099 - `math.h' (BSD): *Note Normalization Functions::.
79101 -`long double scalbl (long double VALUE, int EXPONENT)'
79102 - `math.h' (BSD): *Note Normalization Functions::.
79104 -`long long int scalbln (double X, long int n)'
79105 - `math.h' (BSD): *Note Normalization Functions::.
79107 -`long long int scalblnf (float X, long int n)'
79108 - `math.h' (BSD): *Note Normalization Functions::.
79110 -`long long int scalblnl (long double X, long int n)'
79111 - `math.h' (BSD): *Note Normalization Functions::.
79113 -`long long int scalbn (double X, int n)'
79114 - `math.h' (BSD): *Note Normalization Functions::.
79116 -`long long int scalbnf (float X, int n)'
79117 - `math.h' (BSD): *Note Normalization Functions::.
79119 -`long long int scalbnl (long double X, int n)'
79120 - `math.h' (BSD): *Note Normalization Functions::.
79122 -`int scandir (const char *DIR, struct dirent ***NAMELIST, int (*SELECTOR) (const struct dirent *), int (*CMP) (const void *, const void *))'
79123 - `dirent.h' (BSD/SVID): *Note Scanning Directory Content::.
79125 -`int scandir64 (const char *DIR, struct dirent64 ***NAMELIST, int (*SELECTOR) (const struct dirent64 *), int (*CMP) (const void *, const void *))'
79126 - `dirent.h' (GNU): *Note Scanning Directory Content::.
79128 -`int scanf (const char *TEMPLATE, ...)'
79129 - `stdio.h' (ISO): *Note Formatted Input Functions::.
79131 -`_SC_ARG_MAX'
79132 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79134 -`_SC_ASYNCHRONOUS_IO'
79135 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79137 -`_SC_ATEXIT_MAX'
79138 - `unistd.h' (GNU): *Note Constants for Sysconf::.
79140 -`_SC_AVPHYS_PAGES'
79141 - `unistd.h' (GNU): *Note Constants for Sysconf::.
79143 -`_SC_BC_BASE_MAX'
79144 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79146 -`_SC_BC_DIM_MAX'
79147 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79149 -`_SC_BC_SCALE_MAX'
79150 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79152 -`_SC_BC_STRING_MAX'
79153 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79155 -`_SC_CHAR_BIT'
79156 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79158 -`_SC_CHARCLASS_NAME_MAX'
79159 - `unistd.h' (GNU): *Note Constants for Sysconf::.
79161 -`_SC_CHAR_MAX'
79162 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79164 -`_SC_CHAR_MIN'
79165 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79167 -`_SC_CHILD_MAX'
79168 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79170 -`_SC_CLK_TCK'
79171 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79173 -`_SC_COLL_WEIGHTS_MAX'
79174 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79176 -`_SC_DELAYTIMER_MAX'
79177 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79179 -`_SC_EQUIV_CLASS_MAX'
79180 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79182 -`_SC_EXPR_NEST_MAX'
79183 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79185 -`_SC_FSYNC'
79186 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79188 -`_SC_GETGR_R_SIZE_MAX'
79189 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79191 -`_SC_GETPW_R_SIZE_MAX'
79192 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79194 -`SCHAR_MAX'
79195 - `limits.h' (ISO): *Note Range of Type::.
79197 -`SCHAR_MIN'
79198 - `limits.h' (ISO): *Note Range of Type::.
79200 -`int sched_getparam (pid_t PID, const struct sched_param *PARAM)'
79201 - `sched.h' (POSIX): *Note Basic Scheduling Functions::.
79203 -`int sched_get_priority_max (int *POLICY);'
79204 - `sched.h' (POSIX): *Note Basic Scheduling Functions::.
79206 -`int sched_get_priority_min (int *POLICY);'
79207 - `sched.h' (POSIX): *Note Basic Scheduling Functions::.
79209 -`int sched_getscheduler (pid_t PID)'
79210 - `sched.h' (POSIX): *Note Basic Scheduling Functions::.
79212 -`int sched_rr_get_interval (pid_t PID, struct timespec *INTERVAL)'
79213 - `sched.h' (POSIX): *Note Basic Scheduling Functions::.
79215 -`int sched_setparam (pid_t PID, const struct sched_param *PARAM)'
79216 - `sched.h' (POSIX): *Note Basic Scheduling Functions::.
79218 -`int sched_setscheduler (pid_t PID, int POLICY, const struct sched_param *PARAM)'
79219 - `sched.h' (POSIX): *Note Basic Scheduling Functions::.
79221 -`int sched_yield (void)'
79222 - `sched.h' (POSIX): *Note Basic Scheduling Functions::.
79224 -`_SC_INT_MAX'
79225 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79227 -`_SC_INT_MIN'
79228 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79230 -`_SC_JOB_CONTROL'
79231 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79233 -`_SC_LINE_MAX'
79234 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79236 -`_SC_LOGIN_NAME_MAX'
79237 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79239 -`_SC_LONG_BIT'
79240 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79242 -`_SC_MAPPED_FILES'
79243 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79245 -`_SC_MB_LEN_MAX'
79246 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79248 -`_SC_MEMLOCK'
79249 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79251 -`_SC_MEMLOCK_RANGE'
79252 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79254 -`_SC_MEMORY_PROTECTION'
79255 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79257 -`_SC_MESSAGE_PASSING'
79258 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79260 -`_SC_MQ_OPEN_MAX'
79261 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79263 -`_SC_MQ_PRIO_MAX'
79264 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79266 -`_SC_NGROUPS_MAX'
79267 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79269 -`_SC_NL_ARGMAX'
79270 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79272 -`_SC_NL_LANGMAX'
79273 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79275 -`_SC_NL_MSGMAX'
79276 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79278 -`_SC_NL_NMAX'
79279 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79281 -`_SC_NL_SETMAX'
79282 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79284 -`_SC_NL_TEXTMAX'
79285 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79287 -`_SC_NPROCESSORS_CONF'
79288 - `unistd.h' (GNU): *Note Constants for Sysconf::.
79290 -`_SC_NPROCESSORS_ONLN'
79291 - `unistd.h' (GNU): *Note Constants for Sysconf::.
79293 -`_SC_NZERO'
79294 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79296 -`_SC_OPEN_MAX'
79297 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79299 -`_SC_PAGESIZE'
79300 - `unistd.h' (GNU): *Note Constants for Sysconf::.
79302 -`_SC_PHYS_PAGES'
79303 - `unistd.h' (GNU): *Note Constants for Sysconf::.
79305 -`_SC_PII'
79306 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79308 -`_SC_PII_INTERNET'
79309 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79311 -`_SC_PII_INTERNET_DGRAM'
79312 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79314 -`_SC_PII_INTERNET_STREAM'
79315 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79317 -`_SC_PII_OSI'
79318 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79320 -`_SC_PII_OSI_CLTS'
79321 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79323 -`_SC_PII_OSI_COTS'
79324 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79326 -`_SC_PII_OSI_M'
79327 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79329 -`_SC_PII_SOCKET'
79330 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79332 -`_SC_PII_XTI'
79333 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79335 -`_SC_PRIORITIZED_IO'
79336 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79338 -`_SC_PRIORITY_SCHEDULING'
79339 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79341 -`_SC_REALTIME_SIGNALS'
79342 - `unistdh.h' (POSIX.1): *Note Constants for Sysconf::.
79344 -`_SC_RTSIG_MAX'
79345 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79347 -`_SC_SAVED_IDS'
79348 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79350 -`_SC_SCHAR_MAX'
79351 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79353 -`_SC_SCHAR_MIN'
79354 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79356 -`_SC_SELECT'
79357 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79359 -`_SC_SEMAPHORES'
79360 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79362 -`_SC_SEM_NSEMS_MAX'
79363 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79365 -`_SC_SEM_VALUE_MAX'
79366 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79368 -`_SC_SHARED_MEMORY_OBJECTS'
79369 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79371 -`_SC_SHRT_MAX'
79372 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79374 -`_SC_SHRT_MIN'
79375 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79377 -`_SC_SIGQUEUE_MAX'
79378 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79380 -`SC_SSIZE_MAX'
79381 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79383 -`_SC_STREAM_MAX'
79384 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79386 -`_SC_SYNCHRONIZED_IO'
79387 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79389 -`_SC_THREAD_ATTR_STACKADDR'
79390 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79392 -`_SC_THREAD_ATTR_STACKSIZE'
79393 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79395 -`_SC_THREAD_DESTRUCTOR_ITERATIONS'
79396 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79398 -`_SC_THREAD_KEYS_MAX'
79399 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79401 -`_SC_THREAD_PRIO_INHERIT'
79402 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79404 -`_SC_THREAD_PRIO_PROTECT'
79405 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79407 -`_SC_THREAD_PRIORITY_SCHEDULING'
79408 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79410 -`_SC_THREAD_PROCESS_SHARED'
79411 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79413 -`_SC_THREADS'
79414 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79416 -`_SC_THREAD_SAFE_FUNCTIONS'
79417 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79419 -`_SC_THREAD_STACK_MIN'
79420 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79422 -`_SC_THREAD_THREADS_MAX'
79423 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79425 -`_SC_TIMER_MAX'
79426 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79428 -`_SC_TIMERS'
79429 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79431 -`_SC_T_IOV_MAX'
79432 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79434 -`_SC_TTY_NAME_MAX'
79435 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79437 -`_SC_TZNAME_MAX'
79438 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79440 -`_SC_UCHAR_MAX'
79441 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79443 -`_SC_UINT_MAX'
79444 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79446 -`_SC_UIO_MAXIOV'
79447 - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::.
79449 -`_SC_ULONG_MAX'
79450 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79452 -`_SC_USHRT_MAX'
79453 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79455 -`_SC_VERSION'
79456 - `unistd.h' (POSIX.1): *Note Constants for Sysconf::.
79458 -`_SC_VERSION'
79459 - `unistd.h' (POSIX.2): *Note Constants for Sysconf::.
79461 -`_SC_WORD_BIT'
79462 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79464 -`_SC_XOPEN_CRYPT'
79465 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79467 -`_SC_XOPEN_ENH_I18N'
79468 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79470 -`_SC_XOPEN_LEGACY'
79471 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79473 -`_SC_XOPEN_REALTIME'
79474 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79476 -`_SC_XOPEN_REALTIME_THREADS'
79477 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79479 -`_SC_XOPEN_SHM'
79480 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79482 -`_SC_XOPEN_UNIX'
79483 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79485 -`_SC_XOPEN_VERSION'
79486 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79488 -`_SC_XOPEN_XCU_VERSION'
79489 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79491 -`_SC_XOPEN_XPG2'
79492 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79494 -`_SC_XOPEN_XPG3'
79495 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79497 -`_SC_XOPEN_XPG4'
79498 - `unistd.h' (X/Open): *Note Constants for Sysconf::.
79500 -`unsigned short int * seed48 (unsigned short int SEED16V[3])'
79501 - `stdlib.h' (SVID): *Note SVID Random::.
79503 -`int seed48_r (unsigned short int SEED16V[3], struct drand48_data *BUFFER)'
79504 - `stdlib.h' (GNU): *Note SVID Random::.
79506 -`int SEEK_CUR'
79507 - `stdio.h' (ISO): *Note File Positioning::.
79509 -`void seekdir (DIR *DIRSTREAM, off_t POS)'
79510 - `dirent.h' (BSD): *Note Random Access Directory::.
79512 -`int SEEK_END'
79513 - `stdio.h' (ISO): *Note File Positioning::.
79515 -`int SEEK_SET'
79516 - `stdio.h' (ISO): *Note File Positioning::.
79518 -`int select (int NFDS, fd_set *READ-FDS, fd_set *WRITE-FDS, fd_set *EXCEPT-FDS, struct timeval *TIMEOUT)'
79519 - `sys/types.h' (BSD): *Note Waiting for I/O::.
79521 -`int sem_destroy (sem_t * SEM)'
79522 - `semaphore.h' (POSIX): *Note POSIX Semaphores::.
79524 -`int sem_getvalue (sem_t * SEM, int * SVAL)'
79525 - `semaphore.h' (POSIX): *Note POSIX Semaphores::.
79527 -`int sem_init (sem_t *SEM, int PSHARED, unsigned int VALUE)'
79528 - `semaphore.h' (POSIX): *Note POSIX Semaphores::.
79530 -`int sem_post (sem_t * SEM)'
79531 - `semaphore.h' (POSIX): *Note POSIX Semaphores::.
79533 -`int sem_trywait (sem_t * SEM)'
79534 - `semaphore.h' (POSIX): *Note POSIX Semaphores::.
79536 -`int sem_wait (sem_t * SEM)'
79537 - `semaphore.h' (POSIX): *Note POSIX Semaphores::.
79539 -`int send (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)'
79540 - `sys/socket.h' (BSD): *Note Sending Data::.
79542 -`int sendmsg (int SOCKET, const struct msghdr *MESSAGE, int FLAGS)'
79543 - `sys/socket.h' (BSD): *Note Receiving Datagrams::.
79545 -`int sendto (int SOCKET, void *BUFFER. size_t SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t LENGTH)'
79546 - `sys/socket.h' (BSD): *Note Sending Datagrams::.
79548 -`void setbuf (FILE *STREAM, char *BUF)'
79549 - `stdio.h' (ISO): *Note Controlling Buffering::.
79551 -`void setbuffer (FILE *STREAM, char *BUF, size_t SIZE)'
79552 - `stdio.h' (BSD): *Note Controlling Buffering::.
79554 -`int setcontext (const ucontext_t *UCP)'
79555 - `ucontext.h' (SVID): *Note System V contexts::.
79557 -`int setdomainname (const char *NAME, size_t LENGTH)'
79558 - `unistd.h' (???): *Note Host Identification::.
79560 -`int setegid (gid_t NEWGID)'
79561 - `unistd.h' (POSIX.1): *Note Setting Groups::.
79563 -`int setenv (const char *NAME, const char *VALUE, int REPLACE)'
79564 - `stdlib.h' (BSD): *Note Environment Access::.
79566 -`int seteuid (uid_t NEWEUID)'
79567 - `unistd.h' (POSIX.1): *Note Setting User ID::.
79569 -`int setfsent (void)'
79570 - `fstab.h' (BSD): *Note fstab::.
79572 -`int setgid (gid_t NEWGID)'
79573 - `unistd.h' (POSIX.1): *Note Setting Groups::.
79575 -`void setgrent (void)'
79576 - `grp.h' (SVID, BSD): *Note Scanning All Groups::.
79578 -`int setgroups (size_t COUNT, gid_t *GROUPS)'
79579 - `grp.h' (BSD): *Note Setting Groups::.
79581 -`void sethostent (int STAYOPEN)'
79582 - `netdb.h' (BSD): *Note Host Names::.
79584 -`int sethostid (long int ID)'
79585 - `unistd.h' (BSD): *Note Host Identification::.
79587 -`int sethostname (const char *NAME, size_t LENGTH)'
79588 - `unistd.h' (BSD): *Note Host Identification::.
79590 -`int setitimer (int WHICH, struct itimerval *NEW, struct itimerval *OLD)'
79591 - `sys/time.h' (BSD): *Note Setting an Alarm::.
79593 -`int setjmp (jmp_buf STATE)'
79594 - `setjmp.h' (ISO): *Note Non-Local Details::.
79596 -`void setkey (const char *KEY)'
79597 - `crypt.h' (BSD, SVID): *Note DES Encryption::.
79599 -`void setkey_r (const char *KEY, struct crypt_data * DATA)'
79600 - `crypt.h' (GNU): *Note DES Encryption::.
79602 -`void setlinebuf (FILE *STREAM)'
79603 - `stdio.h' (BSD): *Note Controlling Buffering::.
79605 -`char * setlocale (int CATEGORY, const char *LOCALE)'
79606 - `locale.h' (ISO): *Note Setting the Locale::.
79608 -`int setlogmask (int MASK)'
79609 - `syslog.h' (BSD): *Note setlogmask::.
79611 -`FILE * setmntent (const char *FILE, const char *MODE)'
79612 - `mntent.h' (BSD): *Note mtab::.
79614 -`void setnetent (int STAYOPEN)'
79615 - `netdb.h' (BSD): *Note Networks Database::.
79617 -`int setnetgrent (const char *NETGROUP)'
79618 - `netdb.h' (BSD): *Note Lookup Netgroup::.
79620 -`int setpgid (pid_t PID, pid_t PGID)'
79621 - `unistd.h' (POSIX.1): *Note Process Group Functions::.
79623 -`int setpgrp (pid_t PID, pid_t PGID)'
79624 - `unistd.h' (BSD): *Note Process Group Functions::.
79626 -`int setpriority (int CLASS, int ID, int NICEVAL)'
79627 - `sys/resource.h' (BSD,POSIX): *Note Traditional Scheduling
79628 - Functions::.
79630 -`void setprotoent (int STAYOPEN)'
79631 - `netdb.h' (BSD): *Note Protocols Database::.
79633 -`void setpwent (void)'
79634 - `pwd.h' (SVID, BSD): *Note Scanning All Users::.
79636 -`int setregid (gid_t RGID, gid_t EGID)'
79637 - `unistd.h' (BSD): *Note Setting Groups::.
79639 -`int setreuid (uid_t RUID, uid_t EUID)'
79640 - `unistd.h' (BSD): *Note Setting User ID::.
79642 -`int setrlimit (int RESOURCE, const struct rlimit *RLP)'
79643 - `sys/resource.h' (BSD): *Note Limits on Resources::.
79645 -`int setrlimit64 (int RESOURCE, const struct rlimit64 *RLP)'
79646 - `sys/resource.h' (Unix98): *Note Limits on Resources::.
79648 -`void setservent (int STAYOPEN)'
79649 - `netdb.h' (BSD): *Note Services Database::.
79651 -`pid_t setsid (void)'
79652 - `unistd.h' (POSIX.1): *Note Process Group Functions::.
79654 -`int setsockopt (int SOCKET, int LEVEL, int OPTNAME, void *OPTVAL, socklen_t OPTLEN)'
79655 - `sys/socket.h' (BSD): *Note Socket Option Functions::.
79657 -`void * setstate (void *STATE)'
79658 - `stdlib.h' (BSD): *Note BSD Random::.
79660 -`int setstate_r (char *restrict STATEBUF, struct random_data *restrict BUF)'
79661 - `stdlib.h' (GNU): *Note BSD Random::.
79663 -`int settimeofday (const struct timeval *TP, const struct timezone *TZP)'
79664 - `sys/time.h' (BSD): *Note High-Resolution Calendar::.
79666 -`int setuid (uid_t NEWUID)'
79667 - `unistd.h' (POSIX.1): *Note Setting User ID::.
79669 -`void setutent (void)'
79670 - `utmp.h' (SVID): *Note Manipulating the Database::.
79672 -`void setutxent (void)'
79673 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
79675 -`int setvbuf (FILE *STREAM, char *BUF, int MODE, size_t SIZE)'
79676 - `stdio.h' (ISO): *Note Controlling Buffering::.
79678 -`SHRT_MAX'
79679 - `limits.h' (ISO): *Note Range of Type::.
79681 -`SHRT_MIN'
79682 - `limits.h' (ISO): *Note Range of Type::.
79684 -`int shutdown (int SOCKET, int HOW)'
79685 - `sys/socket.h' (BSD): *Note Closing a Socket::.
79687 -`S_IEXEC'
79688 - `sys/stat.h' (BSD): *Note Permission Bits::.
79690 -`S_IFBLK'
79691 - `sys/stat.h' (BSD): *Note Testing File Type::.
79693 -`S_IFCHR'
79694 - `sys/stat.h' (BSD): *Note Testing File Type::.
79696 -`S_IFDIR'
79697 - `sys/stat.h' (BSD): *Note Testing File Type::.
79699 -`S_IFIFO'
79700 - `sys/stat.h' (BSD): *Note Testing File Type::.
79702 -`S_IFLNK'
79703 - `sys/stat.h' (BSD): *Note Testing File Type::.
79705 -`int S_IFMT'
79706 - `sys/stat.h' (BSD): *Note Testing File Type::.
79708 -`S_IFREG'
79709 - `sys/stat.h' (BSD): *Note Testing File Type::.
79711 -`S_IFSOCK'
79712 - `sys/stat.h' (BSD): *Note Testing File Type::.
79714 -`int SIGABRT'
79715 - `signal.h' (ISO): *Note Program Error Signals::.
79717 -`int sigaction (int SIGNUM, const struct sigaction *restrict ACTION, struct sigaction *restrict OLD-ACTION)'
79718 - `signal.h' (POSIX.1): *Note Advanced Signal Handling::.
79720 -`int sigaddset (sigset_t *SET, int SIGNUM)'
79721 - `signal.h' (POSIX.1): *Note Signal Sets::.
79723 -`int SIGALRM'
79724 - `signal.h' (POSIX.1): *Note Alarm Signals::.
79726 -`int sigaltstack (const stack_t *restrict STACK, stack_t *restrict OLDSTACK)'
79727 - `signal.h' (XPG): *Note Signal Stack::.
79729 -`sig_atomic_t'
79730 - `signal.h' (ISO): *Note Atomic Types::.
79732 -`SIG_BLOCK'
79733 - `signal.h' (POSIX.1): *Note Process Signal Mask::.
79735 -`int sigblock (int MASK)'
79736 - `signal.h' (BSD): *Note Blocking in BSD::.
79738 -`int SIGBUS'
79739 - `signal.h' (BSD): *Note Program Error Signals::.
79741 -`int SIGCHLD'
79742 - `signal.h' (POSIX.1): *Note Job Control Signals::.
79744 -`int SIGCLD'
79745 - `signal.h' (SVID): *Note Job Control Signals::.
79747 -`int SIGCONT'
79748 - `signal.h' (POSIX.1): *Note Job Control Signals::.
79750 -`int sigdelset (sigset_t *SET, int SIGNUM)'
79751 - `signal.h' (POSIX.1): *Note Signal Sets::.
79753 -`int sigemptyset (sigset_t *SET)'
79754 - `signal.h' (POSIX.1): *Note Signal Sets::.
79756 -`int SIGEMT'
79757 - `signal.h' (BSD): *Note Program Error Signals::.
79759 -`sighandler_t SIG_ERR'
79760 - `signal.h' (ISO): *Note Basic Signal Handling::.
79762 -`int sigfillset (sigset_t *SET)'
79763 - `signal.h' (POSIX.1): *Note Signal Sets::.
79765 -`int SIGFPE'
79766 - `signal.h' (ISO): *Note Program Error Signals::.
79768 -`sighandler_t'
79769 - `signal.h' (GNU): *Note Basic Signal Handling::.
79771 -`int SIGHUP'
79772 - `signal.h' (POSIX.1): *Note Termination Signals::.
79774 -`int SIGILL'
79775 - `signal.h' (ISO): *Note Program Error Signals::.
79777 -`int SIGINFO'
79778 - `signal.h' (BSD): *Note Miscellaneous Signals::.
79780 -`int SIGINT'
79781 - `signal.h' (ISO): *Note Termination Signals::.
79783 -`int siginterrupt (int SIGNUM, int FAILFLAG)'
79784 - `signal.h' (BSD): *Note BSD Handler::.
79786 -`int SIGIO'
79787 - `signal.h' (BSD): *Note Asynchronous I/O Signals::.
79789 -`int SIGIOT'
79790 - `signal.h' (Unix): *Note Program Error Signals::.
79792 -`int sigismember (const sigset_t *SET, int SIGNUM)'
79793 - `signal.h' (POSIX.1): *Note Signal Sets::.
79795 -`sigjmp_buf'
79796 - `setjmp.h' (POSIX.1): *Note Non-Local Exits and Signals::.
79798 -`int SIGKILL'
79799 - `signal.h' (POSIX.1): *Note Termination Signals::.
79801 -`void siglongjmp (sigjmp_buf STATE, int VALUE)'
79802 - `setjmp.h' (POSIX.1): *Note Non-Local Exits and Signals::.
79804 -`int SIGLOST'
79805 - `signal.h' (GNU): *Note Operation Error Signals::.
79807 -`int sigmask (int SIGNUM)'
79808 - `signal.h' (BSD): *Note Blocking in BSD::.
79810 -`sighandler_t signal (int SIGNUM, sighandler_t ACTION)'
79811 - `signal.h' (ISO): *Note Basic Signal Handling::.
79813 -`int signbit (_float-type_ X)'
79814 - `math.h' (ISO): *Note FP Bit Twiddling::.
79816 -`long long int significand (double X)'
79817 - `math.h' (BSD): *Note Normalization Functions::.
79819 -`long long int significandf (float X)'
79820 - `math.h' (BSD): *Note Normalization Functions::.
79822 -`long long int significandl (long double X)'
79823 - `math.h' (BSD): *Note Normalization Functions::.
79825 -`int sigpause (int MASK)'
79826 - `signal.h' (BSD): *Note Blocking in BSD::.
79828 -`int sigpending (sigset_t *SET)'
79829 - `signal.h' (POSIX.1): *Note Checking for Pending Signals::.
79831 -`int SIGPIPE'
79832 - `signal.h' (POSIX.1): *Note Operation Error Signals::.
79834 -`int SIGPOLL'
79835 - `signal.h' (SVID): *Note Asynchronous I/O Signals::.
79837 -`int sigprocmask (int HOW, const sigset_t *restrict SET, sigset_t *restrict OLDSET)'
79838 - `signal.h' (POSIX.1): *Note Process Signal Mask::.
79840 -`int SIGPROF'
79841 - `signal.h' (BSD): *Note Alarm Signals::.
79843 -`int SIGQUIT'
79844 - `signal.h' (POSIX.1): *Note Termination Signals::.
79846 -`int SIGSEGV'
79847 - `signal.h' (ISO): *Note Program Error Signals::.
79849 -`int sigsetjmp (sigjmp_buf STATE, int SAVESIGS)'
79850 - `setjmp.h' (POSIX.1): *Note Non-Local Exits and Signals::.
79852 -`SIG_SETMASK'
79853 - `signal.h' (POSIX.1): *Note Process Signal Mask::.
79855 -`int sigsetmask (int MASK)'
79856 - `signal.h' (BSD): *Note Blocking in BSD::.
79858 -`sigset_t'
79859 - `signal.h' (POSIX.1): *Note Signal Sets::.
79861 -`int sigstack (const struct sigstack *STACK, struct sigstack *OLDSTACK)'
79862 - `signal.h' (BSD): *Note Signal Stack::.
79864 -`int SIGSTOP'
79865 - `signal.h' (POSIX.1): *Note Job Control Signals::.
79867 -`int sigsuspend (const sigset_t *SET)'
79868 - `signal.h' (POSIX.1): *Note Sigsuspend::.
79870 -`int SIGSYS'
79871 - `signal.h' (Unix): *Note Program Error Signals::.
79873 -`int SIGTERM'
79874 - `signal.h' (ISO): *Note Termination Signals::.
79876 -`int SIGTRAP'
79877 - `signal.h' (BSD): *Note Program Error Signals::.
79879 -`int SIGTSTP'
79880 - `signal.h' (POSIX.1): *Note Job Control Signals::.
79882 -`int SIGTTIN'
79883 - `signal.h' (POSIX.1): *Note Job Control Signals::.
79885 -`int SIGTTOU'
79886 - `signal.h' (POSIX.1): *Note Job Control Signals::.
79888 -`SIG_UNBLOCK'
79889 - `signal.h' (POSIX.1): *Note Process Signal Mask::.
79891 -`int SIGURG'
79892 - `signal.h' (BSD): *Note Asynchronous I/O Signals::.
79894 -`int SIGUSR1'
79895 - `signal.h' (POSIX.1): *Note Miscellaneous Signals::.
79897 -`int SIGUSR2'
79898 - `signal.h' (POSIX.1): *Note Miscellaneous Signals::.
79900 -`int sigvec (int SIGNUM, const struct sigvec *ACTION,struct sigvec *OLD-ACTION)'
79901 - `signal.h' (BSD): *Note BSD Handler::.
79903 -`int SIGVTALRM'
79904 - `signal.h' (BSD): *Note Alarm Signals::.
79906 -`int sigwait (const sigset_t *SET, int *SIG)'
79907 - `pthread.h' (POSIX): *Note Threads and Signal Handling::.
79909 -`int SIGWINCH'
79910 - `signal.h' (BSD): *Note Miscellaneous Signals::.
79912 -`int SIGXCPU'
79913 - `signal.h' (BSD): *Note Operation Error Signals::.
79915 -`int SIGXFSZ'
79916 - `signal.h' (BSD): *Note Operation Error Signals::.
79918 -`double sin (double X)'
79919 - `math.h' (ISO): *Note Trig Functions::.
79921 -`void sincos (double X, double *SINX, double *COSX)'
79922 - `math.h' (GNU): *Note Trig Functions::.
79924 -`void sincosf (float X, float *SINX, float *COSX)'
79925 - `math.h' (GNU): *Note Trig Functions::.
79927 -`void sincosl (long double X, long double *SINX, long double *COSX)'
79928 - `math.h' (GNU): *Note Trig Functions::.
79930 -`float sinf (float X)'
79931 - `math.h' (ISO): *Note Trig Functions::.
79933 -`double sinh (double X)'
79934 - `math.h' (ISO): *Note Hyperbolic Functions::.
79936 -`float sinhf (float X)'
79937 - `math.h' (ISO): *Note Hyperbolic Functions::.
79939 -`long double sinhl (long double X)'
79940 - `math.h' (ISO): *Note Hyperbolic Functions::.
79942 -`long double sinl (long double X)'
79943 - `math.h' (ISO): *Note Trig Functions::.
79945 -`S_IREAD'
79946 - `sys/stat.h' (BSD): *Note Permission Bits::.
79948 -`S_IRGRP'
79949 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
79951 -`S_IROTH'
79952 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
79954 -`S_IRUSR'
79955 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
79957 -`S_IRWXG'
79958 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
79960 -`S_IRWXO'
79961 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
79963 -`S_IRWXU'
79964 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
79966 -`int S_ISBLK (mode_t M)'
79967 - `sys/stat.h' (POSIX): *Note Testing File Type::.
79969 -`int S_ISCHR (mode_t M)'
79970 - `sys/stat.h' (POSIX): *Note Testing File Type::.
79972 -`int S_ISDIR (mode_t M)'
79973 - `sys/stat.h' (POSIX): *Note Testing File Type::.
79975 -`int S_ISFIFO (mode_t M)'
79976 - `sys/stat.h' (POSIX): *Note Testing File Type::.
79978 -`S_ISGID'
79979 - `sys/stat.h' (POSIX): *Note Permission Bits::.
79981 -`int S_ISLNK (mode_t M)'
79982 - `sys/stat.h' (GNU): *Note Testing File Type::.
79984 -`int S_ISREG (mode_t M)'
79985 - `sys/stat.h' (POSIX): *Note Testing File Type::.
79987 -`int S_ISSOCK (mode_t M)'
79988 - `sys/stat.h' (GNU): *Note Testing File Type::.
79990 -`S_ISUID'
79991 - `sys/stat.h' (POSIX): *Note Permission Bits::.
79993 -`S_ISVTX'
79994 - `sys/stat.h' (BSD): *Note Permission Bits::.
79996 -`S_IWGRP'
79997 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
79999 -`S_IWOTH'
80000 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
80002 -`S_IWRITE'
80003 - `sys/stat.h' (BSD): *Note Permission Bits::.
80005 -`S_IWUSR'
80006 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
80008 -`S_IXGRP'
80009 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
80011 -`S_IXOTH'
80012 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
80014 -`S_IXUSR'
80015 - `sys/stat.h' (POSIX.1): *Note Permission Bits::.
80017 -`size_t'
80018 - `stddef.h' (ISO): *Note Important Data Types::.
80020 -`unsigned int sleep (unsigned int SECONDS)'
80021 - `unistd.h' (POSIX.1): *Note Sleeping::.
80023 -`int snprintf (char *S, size_t SIZE, const char *TEMPLATE, ...)'
80024 - `stdio.h' (GNU): *Note Formatted Output Functions::.
80026 -`SO_BROADCAST'
80027 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80029 -`int SOCK_DGRAM'
80030 - `sys/socket.h' (BSD): *Note Communication Styles::.
80032 -`int socket (int NAMESPACE, int STYLE, int PROTOCOL)'
80033 - `sys/socket.h' (BSD): *Note Creating a Socket::.
80035 -`int socketpair (int NAMESPACE, int STYLE, int PROTOCOL, int FILEDES[2])'
80036 - `sys/socket.h' (BSD): *Note Socket Pairs::.
80038 -`int SOCK_RAW'
80039 - `sys/socket.h' (BSD): *Note Communication Styles::.
80041 -`int SOCK_RDM'
80042 - `sys/socket.h' (BSD): *Note Communication Styles::.
80044 -`int SOCK_SEQPACKET'
80045 - `sys/socket.h' (BSD): *Note Communication Styles::.
80047 -`int SOCK_STREAM'
80048 - `sys/socket.h' (BSD): *Note Communication Styles::.
80050 -`SO_DEBUG'
80051 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80053 -`SO_DONTROUTE'
80054 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80056 -`SO_ERROR'
80057 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80059 -`SO_KEEPALIVE'
80060 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80062 -`SO_LINGER'
80063 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80065 -`int SOL_SOCKET'
80066 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80068 -`SO_OOBINLINE'
80069 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80071 -`SO_RCVBUF'
80072 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80074 -`SO_REUSEADDR'
80075 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80077 -`SO_SNDBUF'
80078 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80080 -`SO_STYLE'
80081 - `sys/socket.h' (GNU): *Note Socket-Level Options::.
80083 -`SO_TYPE'
80084 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80086 -`speed_t'
80087 - `termios.h' (POSIX.1): *Note Line Speed::.
80089 -`int sprintf (char *S, const char *TEMPLATE, ...)'
80090 - `stdio.h' (ISO): *Note Formatted Output Functions::.
80092 -`double sqrt (double X)'
80093 - `math.h' (ISO): *Note Exponents and Logarithms::.
80095 -`float sqrtf (float X)'
80096 - `math.h' (ISO): *Note Exponents and Logarithms::.
80098 -`long double sqrtl (long double X)'
80099 - `math.h' (ISO): *Note Exponents and Logarithms::.
80101 -`void srand (unsigned int SEED)'
80102 - `stdlib.h' (ISO): *Note ISO Random::.
80104 -`void srand48 (long int SEEDVAL)'
80105 - `stdlib.h' (SVID): *Note SVID Random::.
80107 -`int srand48_r (long int SEEDVAL, struct drand48_data *BUFFER)'
80108 - `stdlib.h' (GNU): *Note SVID Random::.
80110 -`void srandom (unsigned int SEED)'
80111 - `stdlib.h' (BSD): *Note BSD Random::.
80113 -`int srandom_r (unsigned int SEED, struct random_data *BUF)'
80114 - `stdlib.h' (GNU): *Note BSD Random::.
80116 -`int sscanf (const char *S, const char *TEMPLATE, ...)'
80117 - `stdio.h' (ISO): *Note Formatted Input Functions::.
80119 -`sighandler_t ssignal (int SIGNUM, sighandler_t ACTION)'
80120 - `signal.h' (SVID): *Note Basic Signal Handling::.
80122 -`int SSIZE_MAX'
80123 - `limits.h' (POSIX.1): *Note General Limits::.
80125 -`ssize_t'
80126 - `unistd.h' (POSIX.1): *Note I/O Primitives::.
80128 -`stack_t'
80129 - `signal.h' (XPG): *Note Signal Stack::.
80131 -`int stat (const char *FILENAME, struct stat *BUF)'
80132 - `sys/stat.h' (POSIX.1): *Note Reading Attributes::.
80134 -`int stat64 (const char *FILENAME, struct stat64 *BUF)'
80135 - `sys/stat.h' (Unix98): *Note Reading Attributes::.
80137 -`FILE * stderr'
80138 - `stdio.h' (ISO): *Note Standard Streams::.
80140 -`STDERR_FILENO'
80141 - `unistd.h' (POSIX.1): *Note Descriptors and Streams::.
80143 -`FILE * stdin'
80144 - `stdio.h' (ISO): *Note Standard Streams::.
80146 -`STDIN_FILENO'
80147 - `unistd.h' (POSIX.1): *Note Descriptors and Streams::.
80149 -`FILE * stdout'
80150 - `stdio.h' (ISO): *Note Standard Streams::.
80152 -`STDOUT_FILENO'
80153 - `unistd.h' (POSIX.1): *Note Descriptors and Streams::.
80155 -`int stime (time_t *NEWTIME)'
80156 - `time.h' (SVID, XPG): *Note Simple Calendar Time::.
80158 -`char * stpcpy (char *restrict TO, const char *restrict FROM)'
80159 - `string.h' (Unknown origin): *Note Copying and Concatenation::.
80161 -`char * stpncpy (char *restrict TO, const char *restrict FROM, size_t SIZE)'
80162 - `string.h' (GNU): *Note Copying and Concatenation::.
80164 -`int strcasecmp (const char *S1, const char *S2)'
80165 - `string.h' (BSD): *Note String/Array Comparison::.
80167 -`char * strcasestr (const char *HAYSTACK, const char *NEEDLE)'
80168 - `string.h' (GNU): *Note Search Functions::.
80170 -`char * strcat (char *restrict TO, const char *restrict FROM)'
80171 - `string.h' (ISO): *Note Copying and Concatenation::.
80173 -`char * strchr (const char *STRING, int C)'
80174 - `string.h' (ISO): *Note Search Functions::.
80176 -`char * strchrnul (const char *STRING, int C)'
80177 - `string.h' (GNU): *Note Search Functions::.
80179 -`int strcmp (const char *S1, const char *S2)'
80180 - `string.h' (ISO): *Note String/Array Comparison::.
80182 -`int strcoll (const char *S1, const char *S2)'
80183 - `string.h' (ISO): *Note Collation Functions::.
80185 -`char * strcpy (char *restrict TO, const char *restrict FROM)'
80186 - `string.h' (ISO): *Note Copying and Concatenation::.
80188 -`size_t strcspn (const char *STRING, const char *STOPSET)'
80189 - `string.h' (ISO): *Note Search Functions::.
80191 -`char * strdup (const char *S)'
80192 - `string.h' (SVID): *Note Copying and Concatenation::.
80194 -`char * strdupa (const char *S)'
80195 - `string.h' (GNU): *Note Copying and Concatenation::.
80197 -`int STREAM_MAX'
80198 - `limits.h' (POSIX.1): *Note General Limits::.
80200 -`char * strerror (int ERRNUM)'
80201 - `string.h' (ISO): *Note Error Messages::.
80203 -`char * strerror_r (int ERRNUM, char *BUF, size_t N)'
80204 - `string.h' (GNU): *Note Error Messages::.
80206 -`char * strfry (char *STRING)'
80207 - `string.h' (GNU): *Note strfry::.
80209 -`size_t strftime (char *S, size_t SIZE, const char *TEMPLATE, const struct tm *BROKENTIME)'
80210 - `time.h' (ISO): *Note Formatting Calendar Time::.
80212 -`size_t strlen (const char *S)'
80213 - `string.h' (ISO): *Note String Length::.
80215 -`int strncasecmp (const char *S1, const char *S2, size_t N)'
80216 - `string.h' (BSD): *Note String/Array Comparison::.
80218 -`char * strncat (char *restrict TO, const char *restrict FROM, size_t SIZE)'
80219 - `string.h' (ISO): *Note Copying and Concatenation::.
80221 -`int strncmp (const char *S1, const char *S2, size_t SIZE)'
80222 - `string.h' (ISO): *Note String/Array Comparison::.
80224 -`char * strncpy (char *restrict TO, const char *restrict FROM, size_t SIZE)'
80225 - `string.h' (ISO): *Note Copying and Concatenation::.
80227 -`char * strndup (const char *S, size_t SIZE)'
80228 - `string.h' (GNU): *Note Copying and Concatenation::.
80230 -`char * strndupa (const char *S, size_t SIZE)'
80231 - `string.h' (GNU): *Note Copying and Concatenation::.
80233 -`size_t strnlen (const char *S, size_t MAXLEN)'
80234 - `string.h' (GNU): *Note String Length::.
80236 -`char * strpbrk (const char *STRING, const char *STOPSET)'
80237 - `string.h' (ISO): *Note Search Functions::.
80239 -`char * strptime (const char *S, const char *FMT, struct tm *TP)'
80240 - `time.h' (XPG4): *Note Low-Level Time String Parsing::.
80242 -`char * strrchr (const char *STRING, int C)'
80243 - `string.h' (ISO): *Note Search Functions::.
80245 -`char * strsep (char **STRING_PTR, const char *DELIMITER)'
80246 - `string.h' (BSD): *Note Finding Tokens in a String::.
80248 -`char * strsignal (int SIGNUM)'
80249 - `string.h' (GNU): *Note Signal Messages::.
80251 -`size_t strspn (const char *STRING, const char *SKIPSET)'
80252 - `string.h' (ISO): *Note Search Functions::.
80254 -`char * strstr (const char *HAYSTACK, const char *NEEDLE)'
80255 - `string.h' (ISO): *Note Search Functions::.
80257 -`double strtod (const char *restrict STRING, char **restrict TAILPTR)'
80258 - `stdlib.h' (ISO): *Note Parsing of Floats::.
80260 -`float strtof (const char *STRING, char **TAILPTR)'
80261 - `stdlib.h' (ISO): *Note Parsing of Floats::.
80263 -`intmax_t strtoimax (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
80264 - `inttypes.h' (ISO): *Note Parsing of Integers::.
80266 -`char * strtok (char *restrict NEWSTRING, const char *restrict DELIMITERS)'
80267 - `string.h' (ISO): *Note Finding Tokens in a String::.
80269 -`char * strtok_r (char *NEWSTRING, const char *DELIMITERS, char **SAVE_PTR)'
80270 - `string.h' (POSIX): *Note Finding Tokens in a String::.
80272 -`long int strtol (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
80273 - `stdlib.h' (ISO): *Note Parsing of Integers::.
80275 -`long double strtold (const char *STRING, char **TAILPTR)'
80276 - `stdlib.h' (ISO): *Note Parsing of Floats::.
80278 -`long long int strtoll (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
80279 - `stdlib.h' (ISO): *Note Parsing of Integers::.
80281 -`long long int strtoq (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
80282 - `stdlib.h' (BSD): *Note Parsing of Integers::.
80284 -`unsigned long int strtoul (const char *retrict STRING, char **restrict TAILPTR, int BASE)'
80285 - `stdlib.h' (ISO): *Note Parsing of Integers::.
80287 -`unsigned long long int strtoull (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
80288 - `stdlib.h' (ISO): *Note Parsing of Integers::.
80290 -`uintmax_t strtoumax (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
80291 - `inttypes.h' (ISO): *Note Parsing of Integers::.
80293 -`unsigned long long int strtouq (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
80294 - `stdlib.h' (BSD): *Note Parsing of Integers::.
80296 -`struct aiocb'
80297 - `aio.h' (POSIX.1b): *Note Asynchronous I/O::.
80299 -`struct aiocb64'
80300 - `aio.h' (POSIX.1b): *Note Asynchronous I/O::.
80302 -`struct aioinit'
80303 - `aio.h' (GNU): *Note Configuration of AIO::.
80305 -`struct argp'
80306 - `argp.h' (GNU): *Note Argp Parsers::.
80308 -`struct argp_child'
80309 - `argp.h' (GNU): *Note Argp Children::.
80311 -`struct argp_option'
80312 - `argp.h' (GNU): *Note Argp Option Vectors::.
80314 -`struct argp_state'
80315 - `argp.h' (GNU): *Note Argp Parsing State::.
80317 -`struct dirent'
80318 - `dirent.h' (POSIX.1): *Note Directory Entries::.
80320 -`struct exit_status'
80321 - `utmp.h' (SVID): *Note Manipulating the Database::.
80323 -`struct flock'
80324 - `fcntl.h' (POSIX.1): *Note File Locks::.
80326 -`struct fstab'
80327 - `fstab.h' (BSD): *Note fstab::.
80329 -`struct FTW'
80330 - `ftw.h' (XPG4.2): *Note Working with Directory Trees::.
80332 -`struct __gconv_step'
80333 - `gconv.h' (GNU): *Note glibc iconv Implementation::.
80335 -`struct __gconv_step_data'
80336 - `gconv.h' (GNU): *Note glibc iconv Implementation::.
80338 -`struct group'
80339 - `grp.h' (POSIX.1): *Note Group Data Structure::.
80341 -`struct hostent'
80342 - `netdb.h' (BSD): *Note Host Names::.
80344 -`struct if_nameindex'
80345 - `net/if.h' (IPv6 basic API): *Note Interface Naming::.
80347 -`struct in6_addr'
80348 - `netinet/in.h' (IPv6 basic API): *Note Host Address Data Type::.
80350 -`struct in_addr'
80351 - `netinet/in.h' (BSD): *Note Host Address Data Type::.
80353 -`struct iovec'
80354 - `sys/uio.h' (BSD): *Note Scatter-Gather::.
80356 -`struct itimerval'
80357 - `sys/time.h' (BSD): *Note Setting an Alarm::.
80359 -`struct lconv'
80360 - `locale.h' (ISO): *Note The Lame Way to Locale Data::.
80362 -`struct linger'
80363 - `sys/socket.h' (BSD): *Note Socket-Level Options::.
80365 -`struct mallinfo'
80366 - `malloc.h' (GNU): *Note Statistics of Malloc::.
80368 -`struct mntent'
80369 - `mntent.h' (BSD): *Note mtab::.
80371 -`struct msghdr'
80372 - `sys/socket.h' (BSD): *Note Receiving Datagrams::.
80374 -`struct netent'
80375 - `netdb.h' (BSD): *Note Networks Database::.
80377 -`struct obstack'
80378 - `obstack.h' (GNU): *Note Creating Obstacks::.
80380 -`struct option'
80381 - `getopt.h' (GNU): *Note Getopt Long Options::.
80383 -`struct passwd'
80384 - `pwd.h' (POSIX.1): *Note User Data Structure::.
80386 -`struct printf_info'
80387 - `printf.h' (GNU): *Note Conversion Specifier Options::.
80389 -`struct protoent'
80390 - `netdb.h' (BSD): *Note Protocols Database::.
80392 -`struct random_data'
80393 - `stdlib.h' (GNU): *Note BSD Random::.
80395 -`struct rlimit'
80396 - `sys/resource.h' (BSD): *Note Limits on Resources::.
80398 -`struct rlimit64'
80399 - `sys/resource.h' (Unix98): *Note Limits on Resources::.
80401 -`struct rusage'
80402 - `sys/resource.h' (BSD): *Note Resource Usage::.
80404 -`struct sched_param'
80405 - `sched.h' (POSIX): *Note Basic Scheduling Functions::.
80407 -`struct servent'
80408 - `netdb.h' (BSD): *Note Services Database::.
80410 -`struct sgttyb'
80411 - `termios.h' (BSD): *Note BSD Terminal Modes::.
80413 -`struct sigaction'
80414 - `signal.h' (POSIX.1): *Note Advanced Signal Handling::.
80416 -`struct sigstack'
80417 - `signal.h' (BSD): *Note Signal Stack::.
80419 -`struct sigvec'
80420 - `signal.h' (BSD): *Note BSD Handler::.
80422 -`struct sockaddr'
80423 - `sys/socket.h' (BSD): *Note Address Formats::.
80425 -`struct sockaddr_in'
80426 - `netinet/in.h' (BSD): *Note Internet Address Formats::.
80428 -`struct sockaddr_un'
80429 - `sys/un.h' (BSD): *Note Local Namespace Details::.
80431 -`struct stat'
80432 - `sys/stat.h' (POSIX.1): *Note Attribute Meanings::.
80434 -`struct stat64'
80435 - `sys/stat.h' (LFS): *Note Attribute Meanings::.
80437 -`struct termios'
80438 - `termios.h' (POSIX.1): *Note Mode Data Types::.
80440 -`struct timespec'
80441 - `sys/time.h' (POSIX.1): *Note Elapsed Time::.
80443 -`struct timeval'
80444 - `sys/time.h' (BSD): *Note Elapsed Time::.
80446 -`struct timezone'
80447 - `sys/time.h' (BSD): *Note High-Resolution Calendar::.
80449 -`struct tm'
80450 - `time.h' (ISO): *Note Broken-down Time::.
80452 -`struct tms'
80453 - `sys/times.h' (POSIX.1): *Note Processor Time::.
80455 -`struct utimbuf'
80456 - `time.h' (POSIX.1): *Note File Times::.
80458 -`struct utsname'
80459 - `sys/utsname.h' (POSIX.1): *Note Platform Type::.
80461 -`int strverscmp (const char *S1, const char *S2)'
80462 - `string.h' (GNU): *Note String/Array Comparison::.
80464 -`size_t strxfrm (char *restrict TO, const char *restrict FROM, size_t SIZE)'
80465 - `string.h' (ISO): *Note Collation Functions::.
80467 -`int stty (int FILEDES, struct sgttyb * attributes)'
80468 - `sgtty.h' (BSD): *Note BSD Terminal Modes::.
80470 -`int S_TYPEISMQ (struct stat *S)'
80471 - `sys/stat.h' (POSIX): *Note Testing File Type::.
80473 -`int S_TYPEISSEM (struct stat *S)'
80474 - `sys/stat.h' (POSIX): *Note Testing File Type::.
80476 -`int S_TYPEISSHM (struct stat *S)'
80477 - `sys/stat.h' (POSIX): *Note Testing File Type::.
80479 -`int SUN_LEN (_struct sockaddr_un *_ PTR)'
80480 - `sys/un.h' (BSD): *Note Local Namespace Details::.
80482 -`_SVID_SOURCE'
80483 - (GNU): *Note Feature Test Macros::.
80485 -`int SV_INTERRUPT'
80486 - `signal.h' (BSD): *Note BSD Handler::.
80488 -`int SV_ONSTACK'
80489 - `signal.h' (BSD): *Note BSD Handler::.
80491 -`int SV_RESETHAND'
80492 - `signal.h' (Sun): *Note BSD Handler::.
80494 -`int swapcontext (ucontext_t *restrict OUCP, const ucontext_t *restrict UCP)'
80495 - `ucontext.h' (SVID): *Note System V contexts::.
80497 -`int swprintf (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, ...)'
80498 - `wchar.h' (GNU): *Note Formatted Output Functions::.
80500 -`int swscanf (const wchar_t *WS, const char *TEMPLATE, ...)'
80501 - `wchar.h' (ISO): *Note Formatted Input Functions::.
80503 -`int symlink (const char *OLDNAME, const char *NEWNAME)'
80504 - `unistd.h' (BSD): *Note Symbolic Links::.
80506 -`SYMLINK_MAX'
80507 - `limits.h' (POSIX.1): *Note File Minimums::.
80509 -`int sync (void)'
80510 - `unistd.h' (X/Open): *Note Synchronizing I/O::.
80512 -`long int syscall (long int SYSNO, ...)'
80513 - `unistd.h' (???): *Note System Calls::.
80515 -`long int sysconf (int PARAMETER)'
80516 - `unistd.h' (POSIX.1): *Note Sysconf Definition::.
80518 -`int sysctl (int *NAMES, int NLEN, void *OLDVAL,'
80519 - `sysctl.h' (BSD): *Note System Parameters::.
80521 -`void syslog (int FACILITY_PRIORITY, char *FORMAT, ...)'
80522 - `syslog.h' (BSD): *Note syslog; vsyslog::.
80524 -`int system (const char *COMMAND)'
80525 - `stdlib.h' (ISO): *Note Running a Command::.
80527 -`sighandler_t sysv_signal (int SIGNUM, sighandler_t ACTION)'
80528 - `signal.h' (GNU): *Note Basic Signal Handling::.
80530 -`double tan (double X)'
80531 - `math.h' (ISO): *Note Trig Functions::.
80533 -`float tanf (float X)'
80534 - `math.h' (ISO): *Note Trig Functions::.
80536 -`double tanh (double X)'
80537 - `math.h' (ISO): *Note Hyperbolic Functions::.
80539 -`float tanhf (float X)'
80540 - `math.h' (ISO): *Note Hyperbolic Functions::.
80542 -`long double tanhl (long double X)'
80543 - `math.h' (ISO): *Note Hyperbolic Functions::.
80545 -`long double tanl (long double X)'
80546 - `math.h' (ISO): *Note Trig Functions::.
80548 -`int tcdrain (int FILEDES)'
80549 - `termios.h' (POSIX.1): *Note Line Control::.
80551 -`tcflag_t'
80552 - `termios.h' (POSIX.1): *Note Mode Data Types::.
80554 -`int tcflow (int FILEDES, int ACTION)'
80555 - `termios.h' (POSIX.1): *Note Line Control::.
80557 -`int tcflush (int FILEDES, int QUEUE)'
80558 - `termios.h' (POSIX.1): *Note Line Control::.
80560 -`int tcgetattr (int FILEDES, struct termios *TERMIOS-P)'
80561 - `termios.h' (POSIX.1): *Note Mode Functions::.
80563 -`pid_t tcgetpgrp (int FILEDES)'
80564 - `unistd.h' (POSIX.1): *Note Terminal Access Functions::.
80566 -`pid_t tcgetsid (int FILDES)'
80567 - `termios.h' (Unix98): *Note Terminal Access Functions::.
80569 -`TCSADRAIN'
80570 - `termios.h' (POSIX.1): *Note Mode Functions::.
80572 -`TCSAFLUSH'
80573 - `termios.h' (POSIX.1): *Note Mode Functions::.
80575 -`TCSANOW'
80576 - `termios.h' (POSIX.1): *Note Mode Functions::.
80578 -`TCSASOFT'
80579 - `termios.h' (BSD): *Note Mode Functions::.
80581 -`int tcsendbreak (int FILEDES, int DURATION)'
80582 - `termios.h' (POSIX.1): *Note Line Control::.
80584 -`int tcsetattr (int FILEDES, int WHEN, const struct termios *TERMIOS-P)'
80585 - `termios.h' (POSIX.1): *Note Mode Functions::.
80587 -`int tcsetpgrp (int FILEDES, pid_t PGID)'
80588 - `unistd.h' (POSIX.1): *Note Terminal Access Functions::.
80590 -`void * tdelete (const void *KEY, void **ROOTP, comparison_fn_t COMPAR)'
80591 - `search.h' (SVID): *Note Tree Search Function::.
80593 -`void tdestroy (void *VROOT, __free_fn_t FREEFCT)'
80594 - `search.h' (GNU): *Note Tree Search Function::.
80596 -`off_t telldir (DIR *DIRSTREAM)'
80597 - `dirent.h' (BSD): *Note Random Access Directory::.
80599 -`TEMP_FAILURE_RETRY (EXPRESSION)'
80600 - `unistd.h' (GNU): *Note Interrupted Primitives::.
80602 -`char * tempnam (const char *DIR, const char *PREFIX)'
80603 - `stdio.h' (SVID): *Note Temporary Files::.
80605 -`char * textdomain (const char *DOMAINNAME)'
80606 - `libintl.h' (GNU): *Note Locating gettext catalog::.
80608 -`void * tfind (const void *KEY, void *const *ROOTP, comparison_fn_t COMPAR)'
80609 - `search.h' (SVID): *Note Tree Search Function::.
80611 -`double tgamma (double X)'
80612 - `math.h' (XPG, ISO): *Note Special Functions::.
80614 -`float tgammaf (float X)'
80615 - `math.h' (XPG, ISO): *Note Special Functions::.
80617 -`long double tgammal (long double X)'
80618 - `math.h' (XPG, ISO): *Note Special Functions::.
80620 -`time_t time (time_t *RESULT)'
80621 - `time.h' (ISO): *Note Simple Calendar Time::.
80623 -`time_t timegm (struct tm *BROKENTIME)'
80624 - `time.h' (???): *Note Broken-down Time::.
80626 -`time_t timelocal (struct tm *BROKENTIME)'
80627 - `time.h' (???): *Note Broken-down Time::.
80629 -`clock_t times (struct tms *BUFFER)'
80630 - `sys/times.h' (POSIX.1): *Note Processor Time::.
80632 -`time_t'
80633 - `time.h' (ISO): *Note Simple Calendar Time::.
80635 -`long int timezone'
80636 - `time.h' (SVID): *Note Time Zone Functions::.
80638 -`FILE * tmpfile (void)'
80639 - `stdio.h' (ISO): *Note Temporary Files::.
80641 -`FILE * tmpfile64 (void)'
80642 - `stdio.h' (Unix98): *Note Temporary Files::.
80644 -`int TMP_MAX'
80645 - `stdio.h' (ISO): *Note Temporary Files::.
80647 -`char * tmpnam (char *RESULT)'
80648 - `stdio.h' (ISO): *Note Temporary Files::.
80650 -`char * tmpnam_r (char *RESULT)'
80651 - `stdio.h' (GNU): *Note Temporary Files::.
80653 -`int toascii (int C)'
80654 - `ctype.h' (SVID, BSD): *Note Case Conversion::.
80656 -`int _tolower (int C)'
80657 - `ctype.h' (SVID): *Note Case Conversion::.
80659 -`int tolower (int C)'
80660 - `ctype.h' (ISO): *Note Case Conversion::.
80662 -`tcflag_t TOSTOP'
80663 - `termios.h' (POSIX.1): *Note Local Modes::.
80665 -`int _toupper (int C)'
80666 - `ctype.h' (SVID): *Note Case Conversion::.
80668 -`int toupper (int C)'
80669 - `ctype.h' (ISO): *Note Case Conversion::.
80671 -`wint_t towctrans (wint_t WC, wctrans_t DESC)'
80672 - `wctype.h' (ISO): *Note Wide Character Case Conversion::.
80674 -`wint_t towlower (wint_t WC)'
80675 - `wctype.h' (ISO): *Note Wide Character Case Conversion::.
80677 -`wint_t towupper (wint_t WC)'
80678 - `wctype.h' (ISO): *Note Wide Character Case Conversion::.
80680 -`double trunc (double X)'
80681 - `math.h' (ISO): *Note Rounding Functions::.
80683 -`int truncate (const char *FILENAME, off_t LENGTH)'
80684 - `unistd.h' (X/Open): *Note File Size::.
80686 -`int truncate64 (const char *NAME, off64_t LENGTH)'
80687 - `unistd.h' (Unix98): *Note File Size::.
80689 -`float truncf (float X)'
80690 - `math.h' (ISO): *Note Rounding Functions::.
80692 -`long double truncl (long double X)'
80693 - `math.h' (ISO): *Note Rounding Functions::.
80695 -`TRY_AGAIN'
80696 - `netdb.h' (BSD): *Note Host Names::.
80698 -`void * tsearch (const void *KEY, void **ROOTP, comparison_fn_t COMPAR)'
80699 - `search.h' (SVID): *Note Tree Search Function::.
80701 -`char * ttyname (int FILEDES)'
80702 - `unistd.h' (POSIX.1): *Note Is It a Terminal::.
80704 -`int ttyname_r (int FILEDES, char *BUF, size_t LEN)'
80705 - `unistd.h' (POSIX.1): *Note Is It a Terminal::.
80707 -`void twalk (const void *ROOT, __action_fn_t ACTION)'
80708 - `search.h' (SVID): *Note Tree Search Function::.
80710 -`char * tzname [2]'
80711 - `time.h' (POSIX.1): *Note Time Zone Functions::.
80713 -`int TZNAME_MAX'
80714 - `limits.h' (POSIX.1): *Note General Limits::.
80716 -`void tzset (void)'
80717 - `time.h' (POSIX.1): *Note Time Zone Functions::.
80719 -`UCHAR_MAX'
80720 - `limits.h' (ISO): *Note Range of Type::.
80722 -`ucontext_t'
80723 - `ucontext.h' (SVID): *Note System V contexts::.
80725 -`uid_t'
80726 - `sys/types.h' (POSIX.1): *Note Reading Persona::.
80728 -`UINT_MAX'
80729 - `limits.h' (ISO): *Note Range of Type::.
80731 -`int ulimit (int CMD, ...)'
80732 - `ulimit.h' (BSD): *Note Limits on Resources::.
80734 -`ULONG_LONG_MAX'
80735 - `limits.h' (ISO): *Note Range of Type::.
80737 -`ULONG_MAX'
80738 - `limits.h' (ISO): *Note Range of Type::.
80740 -`mode_t umask (mode_t MASK)'
80741 - `sys/stat.h' (POSIX.1): *Note Setting Permissions::.
80743 -`int umount (const char *FILE)'
80744 - `sys/mount.h' (SVID, GNU): *Note Mount-Unmount-Remount::.
80746 -`int umount2 (const char *FILE, int FLAGS)'
80747 - `sys/mount.h' (GNU): *Note Mount-Unmount-Remount::.
80749 -`int uname (struct utsname *INFO)'
80750 - `sys/utsname.h' (POSIX.1): *Note Platform Type::.
80752 -`int ungetc (int C, FILE *STREAM)'
80753 - `stdio.h' (ISO): *Note How Unread::.
80755 -`wint_t ungetwc (wint_t WC, FILE *STREAM)'
80756 - `wchar.h' (ISO): *Note How Unread::.
80758 -`union wait'
80759 - `sys/wait.h' (BSD): *Note BSD Wait Functions::.
80761 -`int unlink (const char *FILENAME)'
80762 - `unistd.h' (POSIX.1): *Note Deleting Files::.
80764 -`int unlockpt (int FILEDES)'
80765 - `stdlib.h' (SVID, XPG4.2): *Note Allocation::.
80767 -`int unsetenv (const char *NAME)'
80768 - `stdlib.h' (BSD): *Note Environment Access::.
80770 -`void updwtmp (const char *WTMP_FILE, const struct utmp *UTMP)'
80771 - `utmp.h' (SVID): *Note Manipulating the Database::.
80773 -`USER_PROCESS'
80774 - `utmp.h' (SVID): *Note Manipulating the Database::.
80776 -`USER_PROCESS'
80777 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
80779 -`USHRT_MAX'
80780 - `limits.h' (ISO): *Note Range of Type::.
80782 -`int utime (const char *FILENAME, const struct utimbuf *TIMES)'
80783 - `time.h' (POSIX.1): *Note File Times::.
80785 -`int utimes (const char *FILENAME, struct timeval TVP[2])'
80786 - `sys/time.h' (BSD): *Note File Times::.
80788 -`int utmpname (const char *FILE)'
80789 - `utmp.h' (SVID): *Note Manipulating the Database::.
80791 -`int utmpxname (const char *FILE)'
80792 - `utmpx.h' (XPG4.2): *Note XPG Functions::.
80794 -`va_alist'
80795 - `varargs.h' (Unix): *Note Old Varargs::.
80797 -`TYPE va_arg (va_list AP, TYPE)'
80798 - `stdarg.h' (ISO): *Note Argument Macros::.
80800 -`void __va_copy (va_list DEST, va_list SRC)'
80801 - `stdarg.h' (GNU): *Note Argument Macros::.
80803 -`va_dcl'
80804 - `varargs.h' (Unix): *Note Old Varargs::.
80806 -`void va_end (va_list AP)'
80807 - `stdarg.h' (ISO): *Note Argument Macros::.
80809 -`va_list'
80810 - `stdarg.h' (ISO): *Note Argument Macros::.
80812 -`void * valloc (size_t SIZE)'
80813 - `malloc.h', `stdlib.h' (BSD): *Note Aligned Memory Blocks::.
80815 -`int vasprintf (char **PTR, const char *TEMPLATE, va_list AP)'
80816 - `stdio.h' (GNU): *Note Variable Arguments Output::.
80818 -`void va_start (va_list AP)'
80819 - `varargs.h' (Unix): *Note Old Varargs::.
80821 -`void va_start (va_list AP, LAST-REQUIRED)'
80822 - `stdarg.h' (ISO): *Note Argument Macros::.
80824 -`int VDISCARD'
80825 - `termios.h' (BSD): *Note Other Special::.
80827 -`int VDSUSP'
80828 - `termios.h' (BSD): *Note Signal Characters::.
80830 -`int VEOF'
80831 - `termios.h' (POSIX.1): *Note Editing Characters::.
80833 -`int VEOL'
80834 - `termios.h' (POSIX.1): *Note Editing Characters::.
80836 -`int VEOL2'
80837 - `termios.h' (BSD): *Note Editing Characters::.
80839 -`int VERASE'
80840 - `termios.h' (POSIX.1): *Note Editing Characters::.
80842 -`void verr (int STATUS, const char *FORMAT, va_list)'
80843 - `err.h' (BSD): *Note Error Messages::.
80845 -`void verrx (int STATUS, const char *FORMAT, va_list)'
80846 - `err.h' (BSD): *Note Error Messages::.
80848 -`int versionsort (const void *A, const void *B)'
80849 - `dirent.h' (GNU): *Note Scanning Directory Content::.
80851 -`int versionsort64 (const void *A, const void *B)'
80852 - `dirent.h' (GNU): *Note Scanning Directory Content::.
80854 -`pid_t vfork (void)'
80855 - `unistd.h' (BSD): *Note Creating a Process::.
80857 -`int vfprintf (FILE *STREAM, const char *TEMPLATE, va_list AP)'
80858 - `stdio.h' (ISO): *Note Variable Arguments Output::.
80860 -`int vfscanf (FILE *STREAM, const char *TEMPLATE, va_list AP)'
80861 - `stdio.h' (ISO): *Note Variable Arguments Input::.
80863 -`int vfwprintf (FILE *STREAM, const wchar_t *TEMPLATE, va_list AP)'
80864 - `wchar.h' (ISO): *Note Variable Arguments Output::.
80866 -`int vfwscanf (FILE *STREAM, const wchar_t *TEMPLATE, va_list AP)'
80867 - `wchar.h' (ISO): *Note Variable Arguments Input::.
80869 -`int VINTR'
80870 - `termios.h' (POSIX.1): *Note Signal Characters::.
80872 -`int VKILL'
80873 - `termios.h' (POSIX.1): *Note Editing Characters::.
80875 -`int vlimit (int RESOURCE, int LIMIT)'
80876 - `sys/vlimit.h' (BSD): *Note Limits on Resources::.
80878 -`int VLNEXT'
80879 - `termios.h' (BSD): *Note Other Special::.
80881 -`int VMIN'
80882 - `termios.h' (POSIX.1): *Note Noncanonical Input::.
80884 -`int vprintf (const char *TEMPLATE, va_list AP)'
80885 - `stdio.h' (ISO): *Note Variable Arguments Output::.
80887 -`int VQUIT'
80888 - `termios.h' (POSIX.1): *Note Signal Characters::.
80890 -`int VREPRINT'
80891 - `termios.h' (BSD): *Note Editing Characters::.
80893 -`int vscanf (const char *TEMPLATE, va_list AP)'
80894 - `stdio.h' (ISO): *Note Variable Arguments Input::.
80896 -`int vsnprintf (char *S, size_t SIZE, const char *TEMPLATE, va_list AP)'
80897 - `stdio.h' (GNU): *Note Variable Arguments Output::.
80899 -`int vsprintf (char *S, const char *TEMPLATE, va_list AP)'
80900 - `stdio.h' (ISO): *Note Variable Arguments Output::.
80902 -`int vsscanf (const char *S, const char *TEMPLATE, va_list AP)'
80903 - `stdio.h' (ISO): *Note Variable Arguments Input::.
80905 -`int VSTART'
80906 - `termios.h' (POSIX.1): *Note Start/Stop Characters::.
80908 -`int VSTATUS'
80909 - `termios.h' (BSD): *Note Other Special::.
80911 -`int VSTOP'
80912 - `termios.h' (POSIX.1): *Note Start/Stop Characters::.
80914 -`int VSUSP'
80915 - `termios.h' (POSIX.1): *Note Signal Characters::.
80917 -`int vswprintf (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, va_list AP)'
80918 - `wchar.h' (GNU): *Note Variable Arguments Output::.
80920 -`int vswscanf (const wchar_t *S, const wchar_t *TEMPLATE, va_list AP)'
80921 - `wchar.h' (ISO): *Note Variable Arguments Input::.
80923 -`void vsyslog (int FACILITY_PRIORITY, char *FORMAT, va_list arglist)'
80924 - `syslog.h' (BSD): *Note syslog; vsyslog::.
80926 -`int VTIME'
80927 - `termios.h' (POSIX.1): *Note Noncanonical Input::.
80929 -`int vtimes (struct vtimes CURRENT, struct vtimes CHILD)'
80930 - `vtimes.h' (vtimes.h): *Note Resource Usage::.
80932 -`void vwarn (const char *FORMAT, va_list)'
80933 - `err.h' (BSD): *Note Error Messages::.
80935 -`void vwarnx (const char *FORMAT, va_list)'
80936 - `err.h' (BSD): *Note Error Messages::.
80938 -`int VWERASE'
80939 - `termios.h' (BSD): *Note Editing Characters::.
80941 -`int vwprintf (const wchar_t *TEMPLATE, va_list AP)'
80942 - `wchar.h' (ISO): *Note Variable Arguments Output::.
80944 -`int vwscanf (const wchar_t *TEMPLATE, va_list AP)'
80945 - `wchar.h' (ISO): *Note Variable Arguments Input::.
80947 -`pid_t wait (int *STATUS-PTR)'
80948 - `sys/wait.h' (POSIX.1): *Note Process Completion::.
80950 -`pid_t wait3 (union wait *STATUS-PTR, int OPTIONS, struct rusage *USAGE)'
80951 - `sys/wait.h' (BSD): *Note BSD Wait Functions::.
80953 -`pid_t wait4 (pid_t PID, int *STATUS-PTR, int OPTIONS, struct rusage *USAGE)'
80954 - `sys/wait.h' (BSD): *Note Process Completion::.
80956 -`pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS)'
80957 - `sys/wait.h' (POSIX.1): *Note Process Completion::.
80959 -`void warn (const char *FORMAT, ...)'
80960 - `err.h' (BSD): *Note Error Messages::.
80962 -`void warnx (const char *FORMAT, ...)'
80963 - `err.h' (BSD): *Note Error Messages::.
80965 -`WCHAR_MAX'
80966 - `limits.h' (GNU): *Note Range of Type::.
80968 -`wint_t WCHAR_MAX'
80969 - `wchar.h' (ISO): *Note Extended Char Intro::.
80971 -`wint_t WCHAR_MIN'
80972 - `wchar.h' (ISO): *Note Extended Char Intro::.
80974 -`wchar_t'
80975 - `stddef.h' (ISO): *Note Extended Char Intro::.
80977 -`int WCOREDUMP (int STATUS)'
80978 - `sys/wait.h' (BSD): *Note Process Completion Status::.
80980 -`wchar_t * wcpcpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM)'
80981 - `wchar.h' (GNU): *Note Copying and Concatenation::.
80983 -`wchar_t * wcpncpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)'
80984 - `wchar.h' (GNU): *Note Copying and Concatenation::.
80986 -`size_t wcrtomb (char *restrict S, wchar_t WC, mbstate_t *restrict PS)'
80987 - `wchar.h' (ISO): *Note Converting a Character::.
80989 -`int wcscasecmp (const wchar_t *WS1, const wchar_T *WS2)'
80990 - `wchar.h' (GNU): *Note String/Array Comparison::.
80992 -`wchar_t * wcscat (wchar_t *restrict WTO, const wchar_t *restrict WFROM)'
80993 - `wchar.h' (ISO): *Note Copying and Concatenation::.
80995 -`wchar_t * wcschr (const wchar_t *WSTRING, int WC)'
80996 - `wchar.h' (ISO): *Note Search Functions::.
80998 -`wchar_t * wcschrnul (const wchar_t *WSTRING, wchar_t WC)'
80999 - `wchar.h' (GNU): *Note Search Functions::.
81001 -`int wcscmp (const wchar_t *WS1, const wchar_t *WS2)'
81002 - `wchar.h' (ISO): *Note String/Array Comparison::.
81004 -`int wcscoll (const wchar_t *WS1, const wchar_t *WS2)'
81005 - `wchar.h' (ISO): *Note Collation Functions::.
81007 -`wchar_t * wcscpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM)'
81008 - `wchar.h' (ISO): *Note Copying and Concatenation::.
81010 -`size_t wcscspn (const wchar_t *WSTRING, const wchar_t *STOPSET)'
81011 - `wchar.h' (ISO): *Note Search Functions::.
81013 -`wchar_t * wcsdup (const wchar_t *WS)'
81014 - `wchar.h' (GNU): *Note Copying and Concatenation::.
81016 -`size_t wcsftime (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, const struct tm *BROKENTIME)'
81017 - `time.h' (ISO/Amend1): *Note Formatting Calendar Time::.
81019 -`size_t wcslen (const wchar_t *WS)'
81020 - `wchar.h' (ISO): *Note String Length::.
81022 -`int wcsncasecmp (const wchar_t *WS1, const wchar_t *S2, size_t N)'
81023 - `wchar.h' (GNU): *Note String/Array Comparison::.
81025 -`wchar_t * wcsncat (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)'
81026 - `wchar.h' (ISO): *Note Copying and Concatenation::.
81028 -`int wcsncmp (const wchar_t *WS1, const wchar_t *WS2, size_t SIZE)'
81029 - `wchar.h' (ISO): *Note String/Array Comparison::.
81031 -`wchar_t * wcsncpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)'
81032 - `wchar.h' (ISO): *Note Copying and Concatenation::.
81034 -`size_t wcsnlen (const wchar_t *WS, size_t MAXLEN)'
81035 - `wchar.h' (GNU): *Note String Length::.
81037 -`size_t wcsnrtombs (char *restrict DST, const wchar_t **restrict SRC, size_t NWC, size_t LEN, mbstate_t *restrict PS)'
81038 - `wchar.h' (GNU): *Note Converting Strings::.
81040 -`wchar_t * wcspbrk (const wchar_t *WSTRING, const wchar_t *STOPSET)'
81041 - `wchar.h' (ISO): *Note Search Functions::.
81043 -`wchar_t * wcsrchr (const wchar_t *WSTRING, wchar_t C)'
81044 - `wchar.h' (ISO): *Note Search Functions::.
81046 -`size_t wcsrtombs (char *restrict DST, const wchar_t **restrict SRC, size_t LEN, mbstate_t *restrict PS)'
81047 - `wchar.h' (ISO): *Note Converting Strings::.
81049 -`size_t wcsspn (const wchar_t *WSTRING, const wchar_t *SKIPSET)'
81050 - `wchar.h' (ISO): *Note Search Functions::.
81052 -`wchar_t * wcsstr (const wchar_t *HAYSTACK, const wchar_t *NEEDLE)'
81053 - `wchar.h' (ISO): *Note Search Functions::.
81055 -`double wcstod (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR)'
81056 - `wchar.h' (ISO): *Note Parsing of Floats::.
81058 -`float wcstof (const wchar_t *STRING, wchar_t **TAILPTR)'
81059 - `stdlib.h' (ISO): *Note Parsing of Floats::.
81061 -`intmax_t wcstoimax (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
81062 - `wchar.h' (ISO): *Note Parsing of Integers::.
81064 -`wchar_t * wcstok (wchar_t *NEWSTRING, const char *DELIMITERS)'
81065 - `wchar.h' (ISO): *Note Finding Tokens in a String::.
81067 -`long int wcstol (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
81068 - `wchar.h' (ISO): *Note Parsing of Integers::.
81070 -`long double wcstold (const wchar_t *STRING, wchar_t **TAILPTR)'
81071 - `stdlib.h' (ISO): *Note Parsing of Floats::.
81073 -`long long int wcstoll (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
81074 - `wchar.h' (ISO): *Note Parsing of Integers::.
81076 -`size_t wcstombs (char *STRING, const wchar_t *WSTRING, size_t SIZE)'
81077 - `stdlib.h' (ISO): *Note Non-reentrant String Conversion::.
81079 -`long long int wcstoq (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
81080 - `wchar.h' (GNU): *Note Parsing of Integers::.
81082 -`unsigned long int wcstoul (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
81083 - `wchar.h' (ISO): *Note Parsing of Integers::.
81085 -`unsigned long long int wcstoull (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
81086 - `wchar.h' (ISO): *Note Parsing of Integers::.
81088 -`uintmax_t wcstoumax (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
81089 - `wchar.h' (ISO): *Note Parsing of Integers::.
81091 -`unsigned long long int wcstouq (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
81092 - `wchar.h' (GNU): *Note Parsing of Integers::.
81094 -`wchar_t * wcswcs (const wchar_t *HAYSTACK, const wchar_t *NEEDLE)'
81095 - `wchar.h' (XPG): *Note Search Functions::.
81097 -`size_t wcsxfrm (wchar_t *restrict WTO, const wchar_t *WFROM, size_t SIZE)'
81098 - `wchar.h' (ISO): *Note Collation Functions::.
81100 -`int wctob (wint_t C)'
81101 - `wchar.h' (ISO): *Note Converting a Character::.
81103 -`int wctomb (char *STRING, wchar_t WCHAR)'
81104 - `stdlib.h' (ISO): *Note Non-reentrant Character Conversion::.
81106 -`wctrans_t wctrans (const char *PROPERTY)'
81107 - `wctype.h' (ISO): *Note Wide Character Case Conversion::.
81109 -`wctrans_t'
81110 - `wctype.h' (ISO): *Note Wide Character Case Conversion::.
81112 -`wctype_t wctype (const char *PROPERTY)'
81113 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
81115 -`wctype_t'
81116 - `wctype.h' (ISO): *Note Classification of Wide Characters::.
81118 -`int WEOF'
81119 - `wchar.h' (ISO): *Note EOF and Errors::.
81121 -`wint_t WEOF'
81122 - `wchar.h' (ISO): *Note Extended Char Intro::.
81124 -`int WEXITSTATUS (int STATUS)'
81125 - `sys/wait.h' (POSIX.1): *Note Process Completion Status::.
81127 -`int WIFEXITED (int STATUS)'
81128 - `sys/wait.h' (POSIX.1): *Note Process Completion Status::.
81130 -`int WIFSIGNALED (int STATUS)'
81131 - `sys/wait.h' (POSIX.1): *Note Process Completion Status::.
81133 -`int WIFSTOPPED (int STATUS)'
81134 - `sys/wait.h' (POSIX.1): *Note Process Completion Status::.
81136 -`wint_t'
81137 - `wchar.h' (ISO): *Note Extended Char Intro::.
81139 -`wchar_t * wmemchr (const wchar_t *BLOCK, wchar_t WC, size_t SIZE)'
81140 - `wchar.h' (ISO): *Note Search Functions::.
81142 -`int wmemcmp (const wchar_t *A1, const wchar_t *A2, size_t SIZE)'
81143 - `wcjar.h' (ISO): *Note String/Array Comparison::.
81145 -`wchar_t * wmemcpy (wchar_t *restrict WTO, const wchar_t *restruct WFROM, size_t SIZE)'
81146 - `wchar.h' (ISO): *Note Copying and Concatenation::.
81148 -`wchar_t * wmemmove (wchar *WTO, const wchar_t *WFROM, size_t SIZE)'
81149 - `wchar.h' (ISO): *Note Copying and Concatenation::.
81151 -`wchar_t * wmempcpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)'
81152 - `wchar.h' (GNU): *Note Copying and Concatenation::.
81154 -`wchar_t * wmemset (wchar_t *BLOCK, wchar_t WC, size_t SIZE)'
81155 - `wchar.h' (ISO): *Note Copying and Concatenation::.
81157 -`int W_OK'
81158 - `unistd.h' (POSIX.1): *Note Testing File Access::.
81160 -`int wordexp (const char *WORDS, wordexp_t *WORD-VECTOR-PTR, int FLAGS)'
81161 - `wordexp.h' (POSIX.2): *Note Calling Wordexp::.
81163 -`wordexp_t'
81164 - `wordexp.h' (POSIX.2): *Note Calling Wordexp::.
81166 -`void wordfree (wordexp_t *WORD-VECTOR-PTR)'
81167 - `wordexp.h' (POSIX.2): *Note Calling Wordexp::.
81169 -`int wprintf (const wchar_t *TEMPLATE, ...)'
81170 - `wchar.h' (ISO): *Note Formatted Output Functions::.
81172 -`WRDE_APPEND'
81173 - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::.
81175 -`WRDE_BADCHAR'
81176 - `wordexp.h' (POSIX.2): *Note Calling Wordexp::.
81178 -`WRDE_BADVAL'
81179 - `wordexp.h' (POSIX.2): *Note Calling Wordexp::.
81181 -`WRDE_CMDSUB'
81182 - `wordexp.h' (POSIX.2): *Note Calling Wordexp::.
81184 -`WRDE_DOOFFS'
81185 - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::.
81187 -`WRDE_NOCMD'
81188 - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::.
81190 -`WRDE_NOSPACE'
81191 - `wordexp.h' (POSIX.2): *Note Calling Wordexp::.
81193 -`WRDE_REUSE'
81194 - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::.
81196 -`WRDE_SHOWERR'
81197 - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::.
81199 -`WRDE_SYNTAX'
81200 - `wordexp.h' (POSIX.2): *Note Calling Wordexp::.
81202 -`WRDE_UNDEF'
81203 - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::.
81205 -`ssize_t write (int FILEDES, const void *BUFFER, size_t SIZE)'
81206 - `unistd.h' (POSIX.1): *Note I/O Primitives::.
81208 -`ssize_t writev (int FILEDES, const struct iovec *VECTOR, int COUNT)'
81209 - `sys/uio.h' (BSD): *Note Scatter-Gather::.
81211 -`int wscanf (const wchar_t *TEMPLATE, ...)'
81212 - `wchar.h' (ISO): *Note Formatted Input Functions::.
81214 -`int WSTOPSIG (int STATUS)'
81215 - `sys/wait.h' (POSIX.1): *Note Process Completion Status::.
81217 -`int WTERMSIG (int STATUS)'
81218 - `sys/wait.h' (POSIX.1): *Note Process Completion Status::.
81220 -`int X_OK'
81221 - `unistd.h' (POSIX.1): *Note Testing File Access::.
81223 -`_XOPEN_SOURCE'
81224 - (X/Open): *Note Feature Test Macros::.
81226 -`_XOPEN_SOURCE_EXTENDED'
81227 - (X/Open): *Note Feature Test Macros::.
81229 -`double y0 (double X)'
81230 - `math.h' (SVID): *Note Special Functions::.
81232 -`float y0f (float X)'
81233 - `math.h' (SVID): *Note Special Functions::.
81235 -`long double y0l (long double X)'
81236 - `math.h' (SVID): *Note Special Functions::.
81238 -`double y1 (double X)'
81239 - `math.h' (SVID): *Note Special Functions::.
81241 -`float y1f (float X)'
81242 - `math.h' (SVID): *Note Special Functions::.
81244 -`long double y1l (long double X)'
81245 - `math.h' (SVID): *Note Special Functions::.
81247 -`double yn (int n, double X)'
81248 - `math.h' (SVID): *Note Special Functions::.
81250 -`float ynf (int n, float X)'
81251 - `math.h' (SVID): *Note Special Functions::.
81253 -`long double ynl (int n, long double X)'
81254 - `math.h' (SVID): *Note Special Functions::.
81256 diff -u -udbrN glibc-2.3.2/manual/libc.info-54 glibc-2.3.2-200304020432/manual/libc.info-54
81257 --- glibc-2.3.2/manual/libc.info-54 Sat Mar 1 02:39:41 2003
81258 +++ glibc-2.3.2-200304020432/manual/libc.info-54 Thu Jan 1 01:00:00 1970
81259 @@ -1,1037 +0,0 @@
81260 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
81262 -INFO-DIR-SECTION GNU libraries
81263 -START-INFO-DIR-ENTRY
81264 -* Libc: (libc). C library.
81265 -END-INFO-DIR-ENTRY
81267 - This file documents the GNU C library.
81269 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
81270 -Reference Manual', for Version 2.3.x.
81272 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
81273 -Free Software Foundation, Inc.
81275 - Permission is granted to copy, distribute and/or modify this document
81276 -under the terms of the GNU Free Documentation License, Version 1.1 or
81277 -any later version published by the Free Software Foundation; with the
81278 -Invariant Sections being "Free Software Needs Free Documentation" and
81279 -"GNU Lesser General Public License", the Front-Cover texts being (a)
81280 -(see below), and with the Back-Cover Texts being (b) (see below). A
81281 -copy of the license is included in the section entitled "GNU Free
81282 -Documentation License".
81284 - (a) The FSF's Front-Cover Text is:
81286 - A GNU Manual
81288 - (b) The FSF's Back-Cover Text is:
81290 - You have freedom to copy and modify this GNU Manual, like GNU
81291 -software. Copies published by the Free Software Foundation raise
81292 -funds for GNU development.
81294 -\x1f
81295 -File: libc.info, Node: Installation, Next: Maintenance, Prev: Library Summary, Up: Top
81297 -Installing the GNU C Library
81298 -****************************
81300 - Before you do anything else, you should read the file `FAQ' located
81301 -at the top level of the source tree. This file answers common questions
81302 -and describes problems you may experience with compilation and
81303 -installation. It is updated more frequently than this manual.
81305 - Features can be added to GNU Libc via "add-on" bundles. These are
81306 -separate tar files, which you unpack into the top level of the source
81307 -tree. Then you give `configure' the `--enable-add-ons' option to
81308 -activate them, and they will be compiled into the library. As of the
81309 -2.2 release, one important component of glibc is distributed as
81310 -"official" add-ons: the linuxthreads add-on. Unless you are doing an
81311 -unusual installation, you should get this.
81313 - Support for POSIX threads is maintained by someone else, so it's in a
81314 -separate package. It is only available for GNU/Linux systems, but this
81315 -will change in the future. Get it from the same place you got the main
81316 -bundle; the file is `glibc-linuxthreads-VERSION.tar.gz'.
81318 - You will need recent versions of several GNU tools: definitely GCC
81319 -and GNU Make, and possibly others. *Note Tools for Compilation::,
81320 -below.
81322 -* Menu:
81324 -* Configuring and compiling:: How to compile and test GNU libc.
81325 -* Running make install:: How to install it once you've got it
81326 - compiled.
81327 -* Tools for Compilation:: You'll need these first.
81328 -* Supported Configurations:: What it runs on, what it doesn't.
81329 -* Linux:: Specific advice for GNU/Linux systems.
81330 -* Reporting Bugs:: So they'll get fixed.
81332 -\x1f
81333 -File: libc.info, Node: Configuring and compiling, Next: Running make install, Up: Installation
81335 -Configuring and compiling GNU Libc
81336 -==================================
81338 - GNU libc can be compiled in the source directory, but we strongly
81339 -advise building it in a separate build directory. For example, if you
81340 -have unpacked the glibc sources in `/src/gnu/glibc-2.3', create a
81341 -directory `/src/gnu/glibc-build' to put the object files in. This
81342 -allows removing the whole build directory in case an error occurs,
81343 -which is the safest way to get a fresh start and should always be done.
81345 - From your object directory, run the shell script `configure' located
81346 -at the top level of the source tree. In the scenario above, you'd type
81348 - $ ../glibc-2.3/configure ARGS...
81350 - Please note that even if you're building in a separate build
81351 -directory, the compilation needs to modify a few files in the source
81352 -directory, especially some files in the manual subdirectory.
81354 -`configure' takes many options, but you can get away with knowing only
81355 -two: `--prefix' and `--enable-add-ons'. The `--prefix' option tells
81356 -`configure' where you want glibc installed. This defaults to
81357 -`/usr/local'. The `--enable-add-ons' option tells `configure' to use
81358 -all the add-on bundles it finds in the source directory. Since
81359 -important functionality is provided in add-ons, you should always
81360 -specify this option.
81362 - It may also be useful to set the CC and CFLAGS variables in the
81363 -environment when running `configure'. CC selects the C compiler that
81364 -will be used, and CFLAGS sets optimization options for the compiler.
81366 - The following list describes all of the available options for
81367 -`configure':
81369 -`--prefix=DIRECTORY'
81370 - Install machine-independent data files in subdirectories of
81371 - `DIRECTORY'. The default is to install in `/usr/local'.
81373 -`--exec-prefix=DIRECTORY'
81374 - Install the library and other machine-dependent files in
81375 - subdirectories of `DIRECTORY'. The default is to the `--prefix'
81376 - directory if that option is specified, or `/usr/local' otherwise.
81378 -`--with-headers=DIRECTORY'
81379 - Look for kernel header files in DIRECTORY, not `/usr/include'.
81380 - Glibc needs information from the kernel's private header files.
81381 - Glibc will normally look in `/usr/include' for them, but if you
81382 - specify this option, it will look in DIRECTORY instead.
81384 - This option is primarily of use on a system where the headers in
81385 - `/usr/include' come from an older version of glibc. Conflicts can
81386 - occasionally happen in this case. Note that Linux libc5 qualifies
81387 - as an older version of glibc. You can also use this option if you
81388 - want to compile glibc with a newer set of kernel headers than the
81389 - ones found in `/usr/include'.
81391 -`--enable-add-ons[=LIST]'
81392 - Enable add-on packages in your source tree. If this option is
81393 - specified with no list, it enables all the add-on packages it
81394 - finds. If you do not wish to use some add-on packages that you
81395 - have present in your source tree, give this option a list of the
81396 - add-ons that you _do_ want used, like this:
81397 - `--enable-add-ons=linuxthreads'
81399 -`--enable-kernel=VERSION'
81400 - This option is currently only useful on GNU/Linux systems. The
81401 - VERSION parameter should have the form X.Y.Z and describes the
81402 - smallest version of the Linux kernel the generated library is
81403 - expected to support. The higher the VERSION number is, the less
81404 - compatibility code is added, and the faster the code gets.
81406 -`--with-binutils=DIRECTORY'
81407 - Use the binutils (assembler and linker) in `DIRECTORY', not the
81408 - ones the C compiler would default to. You can use this option if
81409 - the default binutils on your system cannot deal with all the
81410 - constructs in the GNU C library. In that case, `configure' will
81411 - detect the problem and suppress these constructs, so that the
81412 - library will still be usable, but functionality may be lost--for
81413 - example, you can't build a shared libc with old binutils.
81415 -`--without-fp'
81416 - Use this option if your computer lacks hardware floating-point
81417 - support and your operating system does not emulate an FPU.
81419 - these
81421 -`--disable-shared'
81422 - Don't build shared libraries even if it is possible. Not all
81423 - systems support shared libraries; you need ELF support and
81424 - (currently) the GNU linker.
81426 -`--disable-profile'
81427 - Don't build libraries with profiling information. You may want to
81428 - use this option if you don't plan to do profiling.
81430 -`--enable-omitfp'
81431 - Use maximum optimization for the normal (static and shared)
81432 - libraries, and compile separate static libraries with debugging
81433 - information and no optimization. We recommend not doing this.
81434 - The extra optimization doesn't gain you much, it may provoke
81435 - compiler bugs, and you won't be able to trace bugs through the C
81436 - library.
81438 -`--disable-versioning'
81439 - Don't compile the shared libraries with symbol version information.
81440 - Doing this will make the resulting library incompatible with old
81441 - binaries, so it's not recommended.
81443 -`--enable-static-nss'
81444 - Compile static versions of the NSS (Name Service Switch) libraries.
81445 - This is not recommended because it defeats the purpose of NSS; a
81446 - program linked statically with the NSS libraries cannot be
81447 - dynamically reconfigured to use a different name database.
81449 -`--without-tls'
81450 - By default the C library is built with support for thread-local
81451 - storage if the used tools support it. By using `--without-tls'
81452 - this can be prevented though there generally is no reason since it
81453 - creates compatibility problems.
81455 -`--build=BUILD-SYSTEM'
81456 -`--host=HOST-SYSTEM'
81457 - These options are for cross-compiling. If you specify both
81458 - options and BUILD-SYSTEM is different from HOST-SYSTEM, `configure'
81459 - will prepare to cross-compile glibc from BUILD-SYSTEM to be used
81460 - on HOST-SYSTEM. You'll probably need the `--with-headers' option
81461 - too, and you may have to override CONFIGURE's selection of the
81462 - compiler and/or binutils.
81464 - If you only specify `--host', `configure' will prepare for a
81465 - native compile but use what you specify instead of guessing what
81466 - your system is. This is most useful to change the CPU submodel.
81467 - For example, if `configure' guesses your machine as
81468 - `i586-pc-linux-gnu' but you want to compile a library for 386es,
81469 - give `--host=i386-pc-linux-gnu' or just `--host=i386-linux' and add
81470 - the appropriate compiler flags (`-mcpu=i386' will do the trick) to
81471 - CFLAGS.
81473 - If you specify just `--build', `configure' will get confused.
81475 - To build the library and related programs, type `make'. This will
81476 -produce a lot of output, some of which may look like errors from `make'
81477 -but isn't. Look for error messages from `make' containing `***'.
81478 -Those indicate that something is seriously wrong.
81480 - The compilation process can take several hours. Expect at least two
81481 -hours for the default configuration on i586 for GNU/Linux. For Hurd,
81482 -times are much longer. Some complex modules may take a very long time
81483 -to compile, as much as several minutes on slower machines. Do not
81484 -panic if the compiler appears to hang.
81486 - If you want to run a parallel make, simply pass the `-j' option with
81487 -an appropriate numeric parameter to `make'. You need a recent GNU
81488 -`make' version, though.
81490 - To build and run test programs which exercise some of the library
81491 -facilities, type `make check'. If it does not complete successfully,
81492 -do not use the built library, and report a bug after verifying that the
81493 -problem is not already known. *Note Reporting Bugs::, for instructions
81494 -on reporting bugs. Note that some of the tests assume they are not
81495 -being run by `root'. We recommend you compile and test glibc as an
81496 -unprivileged user.
81498 - Before reporting bugs make sure there is no problem with your system.
81499 -The tests (and later installation) use some pre-existing files of the
81500 -system such as `/etc/passwd', `/etc/nsswitch.conf' and others. These
81501 -files must all contain correct and sensible content.
81503 - To format the `GNU C Library Reference Manual' for printing, type
81504 -`make dvi'. You need a working TeX installation to do this. The
81505 -distribution already includes the on-line formatted version of the
81506 -manual, as Info files. You can regenerate those with `make info', but
81507 -it shouldn't be necessary.
81509 - The library has a number of special-purpose configuration parameters
81510 -which you can find in `Makeconfig'. These can be overwritten with the
81511 -file `configparms'. To change them, create a `configparms' in your
81512 -build directory and add values as appropriate for your system. The
81513 -file is included and parsed by `make' and has to follow the conventions
81514 -for makefiles.
81516 - It is easy to configure the GNU C library for cross-compilation by
81517 -setting a few variables in `configparms'. Set `CC' to the
81518 -cross-compiler for the target you configured the library for; it is
81519 -important to use this same `CC' value when running `configure', like
81520 -this: `CC=TARGET-gcc configure TARGET'. Set `BUILD_CC' to the compiler
81521 -to use for programs run on the build system as part of compiling the
81522 -library. You may need to set `AR' and `RANLIB' to cross-compiling
81523 -versions of `ar' and `ranlib' if the native tools are not configured to
81524 -work with object files for the target you configured for.
81526 -\x1f
81527 -File: libc.info, Node: Running make install, Next: Tools for Compilation, Prev: Configuring and compiling, Up: Installation
81529 -Installing the C Library
81530 -========================
81532 - To install the library and its header files, and the Info files of
81533 -the manual, type `env LANGUAGE=C LC_ALL=C make install'. This will
81534 -build things, if necessary, before installing them; however, you should
81535 -still compile everything first. If you are installing glibc as your
81536 -primary C library, we recommend that you shut the system down to
81537 -single-user mode first, and reboot afterward. This minimizes the risk
81538 -of breaking things when the library changes out from underneath.
81540 - If you're upgrading from Linux libc5 or some other C library, you
81541 -need to replace the `/usr/include' with a fresh directory before
81542 -installing it. The new `/usr/include' should contain the Linux
81543 -headers, but nothing else.
81545 - You must first build the library (`make'), optionally check it
81546 -(`make check'), switch the include directories and then install (`make
81547 -install'). The steps must be done in this order. Not moving the
81548 -directory before install will result in an unusable mixture of header
81549 -files from both libraries, but configuring, building, and checking the
81550 -library requires the ability to compile and run programs against the old
81551 -library.
81553 - If you are upgrading from a previous installation of glibc 2.0 or
81554 -2.1, `make install' will do the entire job. You do not need to remove
81555 -the old includes - if you want to do so anyway you must then follow the
81556 -order given above.
81558 - You may also need to reconfigure GCC to work with the new library.
81559 -The easiest way to do that is to figure out the compiler switches to
81560 -make it work again (`-Wl,--dynamic-linker=/lib/ld-linux.so.2' should
81561 -work on GNU/Linux systems) and use them to recompile gcc. You can also
81562 -edit the specs file (`/usr/lib/gcc-lib/TARGET/VERSION/specs'), but that
81563 -is a bit of a black art.
81565 - You can install glibc somewhere other than where you configured it
81566 -to go by setting the `install_root' variable on the command line for
81567 -`make install'. The value of this variable is prepended to all the
81568 -paths for installation. This is useful when setting up a chroot
81569 -environment or preparing a binary distribution. The directory should be
81570 -specified with an absolute file name.
81572 - Glibc 2.2 includes a daemon called `nscd', which you may or may not
81573 -want to run. `nscd' caches name service lookups; it can dramatically
81574 -improve performance with NIS+, and may help with DNS as well.
81576 - One auxiliary program, `/usr/libexec/pt_chown', is installed setuid
81577 -`root'. This program is invoked by the `grantpt' function; it sets the
81578 -permissions on a pseudoterminal so it can be used by the calling
81579 -process. This means programs like `xterm' and `screen' do not have to
81580 -be setuid to get a pty. (There may be other reasons why they need
81581 -privileges.) If you are using a 2.1 or newer Linux kernel with the
81582 -`devptsfs' or `devfs' filesystems providing pty slaves, you don't need
81583 -this program; otherwise you do. The source for `pt_chown' is in
81584 -`login/programs/pt_chown.c'.
81586 - After installation you might want to configure the timezone and
81587 -locale installation of your system. The GNU C library comes with a
81588 -locale database which gets configured with `localedef'. For example, to
81589 -set up a German locale with name `de_DE', simply issue the command
81590 -`localedef -i de_DE -f ISO-8859-1 de_DE'. To configure all locales
81591 -that are supported by glibc, you can issue from your build directory the
81592 -command `make localedata/install-locales'.
81594 - To configure the locally used timezone, set the `TZ' environment
81595 -variable. The script `tzselect' helps you to select the right value.
81596 -As an example, for Germany, `tzselect' would tell you to use
81597 -`TZ='Europe/Berlin''. For a system wide installation (the given paths
81598 -are for an installation with `--prefix=/usr'), link the timezone file
81599 -which is in `/usr/share/zoneinfo' to the file `/etc/localtime'. For
81600 -Germany, you might execute `ln -s /usr/share/zoneinfo/Europe/Berlin
81601 -/etc/localtime'.
81603 -\x1f
81604 -File: libc.info, Node: Tools for Compilation, Next: Supported Configurations, Prev: Running make install, Up: Installation
81606 -Recommended Tools for Compilation
81607 -=================================
81609 - We recommend installing the following GNU tools before attempting to
81610 -build the GNU C library:
81612 - * GNU `make' 3.79 or newer
81614 - You need the latest version of GNU `make'. Modifying the GNU C
81615 - Library to work with other `make' programs would be so difficult
81616 - that we recommend you port GNU `make' instead. *Really.* We
81617 - recommend GNU `make' version 3.79. All earlier versions have
81618 - severe bugs or lack features.
81620 - * GCC 3.2 or newer
81622 - The GNU C library can only be compiled with the GNU C compiler
81623 - family. As of the 2.3 release, GCC 3.2 or higher is required. As
81624 - of this writing, GCC 3.2 is the compiler we advise to use.
81626 - You can use whatever compiler you like to compile programs that
81627 - use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in
81628 - their floating-point support that may be triggered by the math
81629 - library.
81631 - Check the FAQ for any special compiler issues on particular
81632 - platforms.
81634 - * GNU `binutils' 2.13 or later
81636 - You must use GNU `binutils' (as and ld) to build the GNU C library.
81637 - No other assembler and linker has the necessary functionality in
81638 - the moment.
81640 - * GNU `texinfo' 3.12f
81642 - To correctly translate and install the Texinfo documentation you
81643 - need this version of the `texinfo' package. Earlier versions do
81644 - not understand all the tags used in the document, and the
81645 - installation mechanism for the info files is not present or works
81646 - differently.
81648 - * GNU `awk' 3.0, or some other POSIX awk
81650 - `Awk' is used in several places to generate files. The scripts
81651 - should work with any POSIX-compliant `awk' implementation; `gawk'
81652 - 3.0 and `mawk' 1.3 are known to work.
81654 - * Perl 5
81656 - Perl is not required, but it is used if present to test the
81657 - installation. We may decide to use it elsewhere in the future.
81659 - * GNU `sed' 3.02 or newer
81661 - `Sed' is used in several places to generate files. Most scripts
81662 - work with any version of `sed'. The known exception is the script
81663 - `po2test.sed' in the `intl' subdirectory which is used to generate
81664 - `msgs.h' for the test suite. This script works correctly only
81665 - with GNU `sed' 3.02. If you like to run the test suite, you
81666 - should definitely upgrade `sed'.
81669 -If you change any of the `configure.in' files you will also need
81671 - * GNU `autoconf' 2.12 or higher
81673 -and if you change any of the message translation files you will need
81675 - * GNU `gettext' 0.10.36 or later
81677 -You may also need these packages if you upgrade your source tree using
81678 -patches, although we try to avoid this.
81680 -\x1f
81681 -File: libc.info, Node: Supported Configurations, Next: Linux, Prev: Tools for Compilation, Up: Installation
81683 -Supported Configurations
81684 -========================
81686 - The GNU C Library currently supports configurations that match the
81687 -following patterns:
81689 - alpha*-*-linux
81690 - arm-*-linux
81691 - cris-*-linux
81692 - hppa-*-linux
81693 - iX86-*-gnu
81694 - iX86-*-linux
81695 - ia64-*-linux
81696 - m68k-*-linux
81697 - mips*-*-linux
81698 - powerpc-*-linux
81699 - s390-*-linux
81700 - s390x-*-linux
81701 - sparc-*-linux
81702 - sparc64-*-linux
81704 - Former releases of this library (version 2.1 and/or 2.0) used to run
81705 -on the following configurations:
81707 - arm-*-linuxaout
81708 - arm-*-none
81710 - Very early releases (version 1.09.1 and perhaps earlier versions)
81711 -used to run on the following configurations:
81713 - alpha-dec-osf1
81714 - alpha-*-linuxecoff
81715 - iX86-*-bsd4.3
81716 - iX86-*-isc2.2
81717 - iX86-*-isc3.N
81718 - iX86-*-sco3.2
81719 - iX86-*-sco3.2v4
81720 - iX86-*-sysv
81721 - iX86-*-sysv4
81722 - iX86-force_cpu386-none
81723 - iX86-sequent-bsd
81724 - i960-nindy960-none
81725 - m68k-hp-bsd4.3
81726 - m68k-mvme135-none
81727 - m68k-mvme136-none
81728 - m68k-sony-newsos3
81729 - m68k-sony-newsos4
81730 - m68k-sun-sunos4.N
81731 - mips-dec-ultrix4.N
81732 - mips-sgi-irix4.N
81733 - sparc-sun-solaris2.N
81734 - sparc-sun-sunos4.N
81736 - Since no one has volunteered to test and fix these configurations,
81737 -they are not supported at the moment. They probably don't compile;
81738 -they definitely don't work anymore. Porting the library is not hard.
81739 -If you are interested in doing a port, please contact the glibc
81740 -maintainers by sending electronic mail to <bug-glibc@gnu.org>.
81742 - Valid cases of `iX86' include `i386', `i486', `i586', and `i686'.
81743 -All of those configurations produce a library that can run on this
81744 -processor and newer processors. The GCC compiler by default generates
81745 -code that's optimized for the machine it's configured for and will use
81746 -the instructions available on that machine. For example if your GCC is
81747 -configured for `i686', gcc will optimize for `i686' and might issue
81748 -some `i686' specific instructions. To generate code for other models,
81749 -you have to configure for that model and give GCC the appropriate
81750 -`-march=' and `-mcpu=' compiler switches via CFLAGS.
81752 -\x1f
81753 -File: libc.info, Node: Linux, Next: Reporting Bugs, Prev: Supported Configurations, Up: Installation
81755 -Specific advice for GNU/Linux systems
81756 -=====================================
81758 - If you are installing GNU libc on a GNU/Linux system, you need to
81759 -have the header files from a 2.2 or newer kernel around for reference.
81760 -For some architectures, like ia64, sh and hppa, you need at least
81761 -headers from kernel 2.3.99 (sh and hppa) or 2.4.0 (ia64). You do not
81762 -need to use that kernel, just have its headers where glibc can access
81763 -at them. The easiest way to do this is to unpack it in a directory
81764 -such as `/usr/src/linux-2.2.1'. In that directory, run `make config'
81765 -and accept all the defaults. Then run `make include/linux/version.h'.
81766 -Finally, configure glibc with the option
81767 -`--with-headers=/usr/src/linux-2.2.1/include'. Use the most recent
81768 -kernel you can get your hands on.
81770 - An alternate tactic is to unpack the 2.2 kernel and run `make
81771 -config' as above; then, rename or delete `/usr/include', create a new
81772 -`/usr/include', and make symbolic links of `/usr/include/linux' and
81773 -`/usr/include/asm' into the kernel sources. You can then configure
81774 -glibc with no special options. This tactic is recommended if you are
81775 -upgrading from libc5, since you need to get rid of the old header files
81776 -anyway.
81778 - After installing GNU libc, you may need to remove or rename
81779 -`/usr/include/linux' and `/usr/include/asm', and replace them with
81780 -copies of `include/linux' and `include/asm-$ARCHITECTURE' taken from
81781 -the Linux source package which supplied kernel headers for building the
81782 -library. ARCHITECTURE will be the machine architecture for which the
81783 -library was built, such as `i386' or `alpha'. You do not need to do
81784 -this if you did not specify an alternate kernel header source using
81785 -`--with-headers'. The intent here is that these directories should be
81786 -copies of, *not* symlinks to, the kernel headers used to build the
81787 -library.
81789 - Note that `/usr/include/net' and `/usr/include/scsi' should *not* be
81790 -symlinks into the kernel sources. GNU libc provides its own versions
81791 -of these files.
81793 - GNU/Linux expects some components of the libc installation to be in
81794 -`/lib' and some in `/usr/lib'. This is handled automatically if you
81795 -configure glibc with `--prefix=/usr'. If you set some other prefix or
81796 -allow it to default to `/usr/local', then all the components are
81797 -installed there.
81799 - If you are upgrading from libc5, you need to recompile every shared
81800 -library on your system against the new library for the sake of new code,
81801 -but keep the old libraries around for old binaries to use. This is
81802 -complicated and difficult. Consult the Glibc2 HOWTO at
81803 -<http://www.imaxx.net/~thrytis/glibc> for details.
81805 - You cannot use `nscd' with 2.0 kernels, due to bugs in the
81806 -kernel-side thread support. `nscd' happens to hit these bugs
81807 -particularly hard, but you might have problems with any threaded
81808 -program.
81810 -\x1f
81811 -File: libc.info, Node: Reporting Bugs, Prev: Linux, Up: Installation
81813 -Reporting Bugs
81814 -==============
81816 - There are probably bugs in the GNU C library. There are certainly
81817 -errors and omissions in this manual. If you report them, they will get
81818 -fixed. If you don't, no one will ever know about them and they will
81819 -remain unfixed for all eternity, if not longer.
81821 - It is a good idea to verify that the problem has not already been
81822 -reported. Bugs are documented in two places: The file `BUGS' describes
81823 -a number of well known bugs and the bug tracking system has a WWW
81824 -interface at <http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl>. The
81825 -WWW interface gives you access to open and closed reports. A closed
81826 -report normally includes a patch or a hint on solving the problem.
81828 - To report a bug, first you must find it. With any luck, this will
81829 -be the hard part. Once you've found a bug, make sure it's really a
81830 -bug. A good way to do this is to see if the GNU C library behaves the
81831 -same way some other C library does. If so, probably you are wrong and
81832 -the libraries are right (but not necessarily). If not, one of the
81833 -libraries is probably wrong. It might not be the GNU library. Many
81834 -historical Unix C libraries permit things that we don't, such as
81835 -closing a file twice.
81837 - If you think you have found some way in which the GNU C library does
81838 -not conform to the ISO and POSIX standards (*note Standards and
81839 -Portability::), that is definitely a bug. Report it!
81841 - Once you're sure you've found a bug, try to narrow it down to the
81842 -smallest test case that reproduces the problem. In the case of a C
81843 -library, you really only need to narrow it down to one library function
81844 -call, if possible. This should not be too difficult.
81846 - The final step when you have a simple test case is to report the bug.
81847 -Do this using the `glibcbug' script. It is installed with libc, or if
81848 -you haven't installed it, will be in your build directory. Send your
81849 -test case, the results you got, the results you expected, and what you
81850 -think the problem might be (if you've thought of anything). `glibcbug'
81851 -will insert the configuration information we need to see, and ship the
81852 -report off to <bugs@gnu.org>. Don't send a message there directly; it
81853 -is fed to a program that expects mail to be formatted in a particular
81854 -way. Use the script.
81856 - If you are not sure how a function should behave, and this manual
81857 -doesn't tell you, that's a bug in the manual. Report that too! If the
81858 -function's behavior disagrees with the manual, then either the library
81859 -or the manual has a bug, so report the disagreement. If you find any
81860 -errors or omissions in this manual, please report them to the Internet
81861 -address <bug-glibc-manual@gnu.org>. If you refer to specific sections
81862 -of the manual, please include the section names for easier
81863 -identification.
81865 -\x1f
81866 -File: libc.info, Node: Maintenance, Next: Contributors, Prev: Installation, Up: Top
81868 -Library Maintenance
81869 -*******************
81871 -* Menu:
81873 -* Source Layout:: How to add new functions or header files
81874 - to the GNU C library.
81875 -* Porting:: How to port the GNU C library to
81876 - a new machine or operating system.
81878 -\x1f
81879 -File: libc.info, Node: Source Layout, Next: Porting, Up: Maintenance
81881 -Adding New Functions
81882 -====================
81884 - The process of building the library is driven by the makefiles, which
81885 -make heavy use of special features of GNU `make'. The makefiles are
81886 -very complex, and you probably don't want to try to understand them.
81887 -But what they do is fairly straightforward, and only requires that you
81888 -define a few variables in the right places.
81890 - The library sources are divided into subdirectories, grouped by
81891 -topic.
81893 - The `string' subdirectory has all the string-manipulation functions,
81894 -`math' has all the mathematical functions, etc.
81896 - Each subdirectory contains a simple makefile, called `Makefile',
81897 -which defines a few `make' variables and then includes the global
81898 -makefile `Rules' with a line like:
81900 - include ../Rules
81902 -The basic variables that a subdirectory makefile defines are:
81904 -`subdir'
81905 - The name of the subdirectory, for example `stdio'. This variable
81906 - *must* be defined.
81908 -`headers'
81909 - The names of the header files in this section of the library, such
81910 - as `stdio.h'.
81912 -`routines'
81913 -`aux'
81914 - The names of the modules (source files) in this section of the
81915 - library. These should be simple names, such as `strlen' (rather
81916 - than complete file names, such as `strlen.c'). Use `routines' for
81917 - modules that define functions in the library, and `aux' for
81918 - auxiliary modules containing things like data definitions. But the
81919 - values of `routines' and `aux' are just concatenated, so there
81920 - really is no practical difference.
81922 -`tests'
81923 - The names of test programs for this section of the library. These
81924 - should be simple names, such as `tester' (rather than complete file
81925 - names, such as `tester.c'). `make tests' will build and run all
81926 - the test programs. If a test program needs input, put the test
81927 - data in a file called `TEST-PROGRAM.input'; it will be given to
81928 - the test program on its standard input. If a test program wants
81929 - to be run with arguments, put the arguments (all on a single line)
81930 - in a file called `TEST-PROGRAM.args'. Test programs should exit
81931 - with zero status when the test passes, and nonzero status when the
81932 - test indicates a bug in the library or error in building.
81934 -`others'
81935 - The names of "other" programs associated with this section of the
81936 - library. These are programs which are not tests per se, but are
81937 - other small programs included with the library. They are built by
81938 - `make others'.
81940 -`install-lib'
81941 -`install-data'
81942 -`install'
81943 - Files to be installed by `make install'. Files listed in
81944 - `install-lib' are installed in the directory specified by `libdir'
81945 - in `configparms' or `Makeconfig' (*note Installation::). Files
81946 - listed in `install-data' are installed in the directory specified
81947 - by `datadir' in `configparms' or `Makeconfig'. Files listed in
81948 - `install' are installed in the directory specified by `bindir' in
81949 - `configparms' or `Makeconfig'.
81951 -`distribute'
81952 - Other files from this subdirectory which should be put into a
81953 - distribution tar file. You need not list here the makefile itself
81954 - or the source and header files listed in the other standard
81955 - variables. Only define `distribute' if there are files used in an
81956 - unusual way that should go into the distribution.
81958 -`generated'
81959 - Files which are generated by `Makefile' in this subdirectory.
81960 - These files will be removed by `make clean', and they will never
81961 - go into a distribution.
81963 -`extra-objs'
81964 - Extra object files which are built by `Makefile' in this
81965 - subdirectory. This should be a list of file names like `foo.o';
81966 - the files will actually be found in whatever directory object
81967 - files are being built in. These files will be removed by
81968 - `make clean'. This variable is used for secondary object files
81969 - needed to build `others' or `tests'.
81971 -\x1f
81972 -File: libc.info, Node: Porting, Prev: Source Layout, Up: Maintenance
81974 -Porting the GNU C Library
81975 -=========================
81977 - The GNU C library is written to be easily portable to a variety of
81978 -machines and operating systems. Machine- and operating system-dependent
81979 -functions are well separated to make it easy to add implementations for
81980 -new machines or operating systems. This section describes the layout of
81981 -the library source tree and explains the mechanisms used to select
81982 -machine-dependent code to use.
81984 - All the machine-dependent and operating system-dependent files in the
81985 -library are in the subdirectory `sysdeps' under the top-level library
81986 -source directory. This directory contains a hierarchy of
81987 -subdirectories (*note Hierarchy Conventions::).
81989 - Each subdirectory of `sysdeps' contains source files for a
81990 -particular machine or operating system, or for a class of machine or
81991 -operating system (for example, systems by a particular vendor, or all
81992 -machines that use IEEE 754 floating-point format). A configuration
81993 -specifies an ordered list of these subdirectories. Each subdirectory
81994 -implicitly appends its parent directory to the list. For example,
81995 -specifying the list `unix/bsd/vax' is equivalent to specifying the list
81996 -`unix/bsd/vax unix/bsd unix'. A subdirectory can also specify that it
81997 -implies other subdirectories which are not directly above it in the
81998 -directory hierarchy. If the file `Implies' exists in a subdirectory,
81999 -it lists other subdirectories of `sysdeps' which are appended to the
82000 -list, appearing after the subdirectory containing the `Implies' file.
82001 -Lines in an `Implies' file that begin with a `#' character are ignored
82002 -as comments. For example, `unix/bsd/Implies' contains:
82003 - # BSD has Internet-related things.
82004 - unix/inet
82006 -and `unix/Implies' contains:
82007 - posix
82009 -So the final list is `unix/bsd/vax unix/bsd unix/inet unix posix'.
82011 - `sysdeps' has a "special" subdirectory called `generic'. It is
82012 -always implicitly appended to the list of subdirectories, so you
82013 -needn't put it in an `Implies' file, and you should not create any
82014 -subdirectories under it intended to be new specific categories.
82015 -`generic' serves two purposes. First, the makefiles do not bother to
82016 -look for a system-dependent version of a file that's not in `generic'.
82017 -This means that any system-dependent source file must have an analogue
82018 -in `generic', even if the routines defined by that file are not
82019 -implemented on other platforms. Second. the `generic' version of a
82020 -system-dependent file is used if the makefiles do not find a version
82021 -specific to the system you're compiling for.
82023 - If it is possible to implement the routines in a `generic' file in
82024 -machine-independent C, using only other machine-independent functions in
82025 -the C library, then you should do so. Otherwise, make them stubs. A
82026 -"stub" function is a function which cannot be implemented on a
82027 -particular machine or operating system. Stub functions always return an
82028 -error, and set `errno' to `ENOSYS' (Function not implemented). *Note
82029 -Error Reporting::. If you define a stub function, you must place the
82030 -statement `stub_warning(FUNCTION)', where FUNCTION is the name of your
82031 -function, after its definition; also, you must include the file
82032 -`<stub-tag.h>' into your file. This causes the function to be listed
82033 -in the installed `<gnu/stubs.h>', and makes GNU ld warn when the
82034 -function is used.
82036 - Some rare functions are only useful on specific systems and aren't
82037 -defined at all on others; these do not appear anywhere in the
82038 -system-independent source code or makefiles (including the `generic'
82039 -directory), only in the system-dependent `Makefile' in the specific
82040 -system's subdirectory.
82042 - If you come across a file that is in one of the main source
82043 -directories (`string', `stdio', etc.), and you want to write a machine-
82044 -or operating system-dependent version of it, move the file into
82045 -`sysdeps/generic' and write your new implementation in the appropriate
82046 -system-specific subdirectory. Note that if a file is to be
82047 -system-dependent, it *must not* appear in one of the main source
82048 -directories.
82050 - There are a few special files that may exist in each subdirectory of
82051 -`sysdeps':
82053 -`Makefile'
82054 - A makefile for this machine or operating system, or class of
82055 - machine or operating system. This file is included by the library
82056 - makefile `Makerules', which is used by the top-level makefile and
82057 - the subdirectory makefiles. It can change the variables set in the
82058 - including makefile or add new rules. It can use GNU `make'
82059 - conditional directives based on the variable `subdir' (see above)
82060 - to select different sets of variables and rules for different
82061 - sections of the library. It can also set the `make' variable
82062 - `sysdep-routines', to specify extra modules to be included in the
82063 - library. You should use `sysdep-routines' rather than adding
82064 - modules to `routines' because the latter is used in determining
82065 - what to distribute for each subdirectory of the main source tree.
82067 - Each makefile in a subdirectory in the ordered list of
82068 - subdirectories to be searched is included in order. Since several
82069 - system-dependent makefiles may be included, each should append to
82070 - `sysdep-routines' rather than simply setting it:
82072 - sysdep-routines := $(sysdep-routines) foo bar
82074 -`Subdirs'
82075 - This file contains the names of new whole subdirectories under the
82076 - top-level library source tree that should be included for this
82077 - system. These subdirectories are treated just like the
82078 - system-independent subdirectories in the library source tree, such
82079 - as `stdio' and `math'.
82081 - Use this when there are completely new sets of functions and header
82082 - files that should go into the library for the system this
82083 - subdirectory of `sysdeps' implements. For example,
82084 - `sysdeps/unix/inet/Subdirs' contains `inet'; the `inet' directory
82085 - contains various network-oriented operations which only make sense
82086 - to put in the library on systems that support the Internet.
82088 -`Dist'
82089 - This file contains the names of files (relative to the
82090 - subdirectory of `sysdeps' in which it appears) which should be
82091 - included in the distribution. List any new files used by rules in
82092 - the `Makefile' in the same directory, or header files used by the
82093 - source files in that directory. You don't need to list files that
82094 - are implementations (either C or assembly source) of routines
82095 - whose names are given in the machine-independent makefiles in the
82096 - main source tree.
82098 -`configure'
82099 - This file is a shell script fragment to be run at configuration
82100 - time. The top-level `configure' script uses the shell `.' command
82101 - to read the `configure' file in each system-dependent directory
82102 - chosen, in order. The `configure' files are often generated from
82103 - `configure.in' files using Autoconf.
82105 - A system-dependent `configure' script will usually add things to
82106 - the shell variables `DEFS' and `config_vars'; see the top-level
82107 - `configure' script for details. The script can check for
82108 - `--with-PACKAGE' options that were passed to the top-level
82109 - `configure'. For an option `--with-PACKAGE=VALUE' `configure'
82110 - sets the shell variable `with_PACKAGE' (with any dashes in PACKAGE
82111 - converted to underscores) to VALUE; if the option is just
82112 - `--with-PACKAGE' (no argument), then it sets `with_PACKAGE' to
82113 - `yes'.
82115 -`configure.in'
82116 - This file is an Autoconf input fragment to be processed into the
82117 - file `configure' in this subdirectory. *Note Introduction:
82118 - (autoconf.info)Introduction, for a description of Autoconf. You
82119 - should write either `configure' or `configure.in', but not both.
82120 - The first line of `configure.in' should invoke the `m4' macro
82121 - `GLIBC_PROVIDES'. This macro does several `AC_PROVIDE' calls for
82122 - Autoconf macros which are used by the top-level `configure'
82123 - script; without this, those macros might be invoked again
82124 - unnecessarily by Autoconf.
82126 - That is the general system for how system-dependencies are isolated.
82128 -* Menu:
82130 -* Hierarchy Conventions:: The layout of the `sysdeps' hierarchy.
82131 -* Porting to Unix:: Porting the library to an average
82132 - Unix-like system.
82134 -\x1f
82135 -File: libc.info, Node: Hierarchy Conventions, Next: Porting to Unix, Up: Porting
82137 -Layout of the `sysdeps' Directory Hierarchy
82138 --------------------------------------------
82140 - A GNU configuration name has three parts: the CPU type, the
82141 -manufacturer's name, and the operating system. `configure' uses these
82142 -to pick the list of system-dependent directories to look for. If the
82143 -`--nfp' option is _not_ passed to `configure', the directory
82144 -`MACHINE/fpu' is also used. The operating system often has a "base
82145 -operating system"; for example, if the operating system is `Linux', the
82146 -base operating system is `unix/sysv'. The algorithm used to pick the
82147 -list of directories is simple: `configure' makes a list of the base
82148 -operating system, manufacturer, CPU type, and operating system, in that
82149 -order. It then concatenates all these together with slashes in
82150 -between, to produce a directory name; for example, the configuration
82151 -`i686-linux-gnu' results in `unix/sysv/linux/i386/i686'. `configure'
82152 -then tries removing each element of the list in turn, so
82153 -`unix/sysv/linux' and `unix/sysv' are also tried, among others. Since
82154 -the precise version number of the operating system is often not
82155 -important, and it would be very inconvenient, for example, to have
82156 -identical `irix6.2' and `irix6.3' directories, `configure' tries
82157 -successively less specific operating system names by removing trailing
82158 -suffixes starting with a period.
82160 - As an example, here is the complete list of directories that would be
82161 -tried for the configuration `i686-linux-gnu' (with the `crypt' and
82162 -`linuxthreads' add-on):
82164 - sysdeps/i386/elf
82165 - crypt/sysdeps/unix
82166 - linuxthreads/sysdeps/unix/sysv/linux
82167 - linuxthreads/sysdeps/pthread
82168 - linuxthreads/sysdeps/unix/sysv
82169 - linuxthreads/sysdeps/unix
82170 - linuxthreads/sysdeps/i386/i686
82171 - linuxthreads/sysdeps/i386
82172 - linuxthreads/sysdeps/pthread/no-cmpxchg
82173 - sysdeps/unix/sysv/linux/i386
82174 - sysdeps/unix/sysv/linux
82175 - sysdeps/gnu
82176 - sysdeps/unix/common
82177 - sysdeps/unix/mman
82178 - sysdeps/unix/inet
82179 - sysdeps/unix/sysv/i386/i686
82180 - sysdeps/unix/sysv/i386
82181 - sysdeps/unix/sysv
82182 - sysdeps/unix/i386
82183 - sysdeps/unix
82184 - sysdeps/posix
82185 - sysdeps/i386/i686
82186 - sysdeps/i386/i486
82187 - sysdeps/libm-i387/i686
82188 - sysdeps/i386/fpu
82189 - sysdeps/libm-i387
82190 - sysdeps/i386
82191 - sysdeps/wordsize-32
82192 - sysdeps/ieee754
82193 - sysdeps/libm-ieee754
82194 - sysdeps/generic
82196 - Different machine architectures are conventionally subdirectories at
82197 -the top level of the `sysdeps' directory tree. For example,
82198 -`sysdeps/sparc' and `sysdeps/m68k'. These contain files specific to
82199 -those machine architectures, but not specific to any particular
82200 -operating system. There might be subdirectories for specializations of
82201 -those architectures, such as `sysdeps/m68k/68020'. Code which is
82202 -specific to the floating-point coprocessor used with a particular
82203 -machine should go in `sysdeps/MACHINE/fpu'.
82205 - There are a few directories at the top level of the `sysdeps'
82206 -hierarchy that are not for particular machine architectures.
82208 -`generic'
82209 - As described above (*note Porting::), this is the subdirectory
82210 - that every configuration implicitly uses after all others.
82212 -`ieee754'
82213 - This directory is for code using the IEEE 754 floating-point
82214 - format, where the C type `float' is IEEE 754 single-precision
82215 - format, and `double' is IEEE 754 double-precision format. Usually
82216 - this directory is referred to in the `Implies' file in a machine
82217 - architecture-specific directory, such as `m68k/Implies'.
82219 -`libm-ieee754'
82220 - This directory contains an implementation of a mathematical library
82221 - usable on platforms which use IEEE 754 conformant floating-point
82222 - arithmetic.
82224 -`libm-i387'
82225 - This is a special case. Ideally the code should be in
82226 - `sysdeps/i386/fpu' but for various reasons it is kept aside.
82228 -`posix'
82229 - This directory contains implementations of things in the library in
82230 - terms of POSIX.1 functions. This includes some of the POSIX.1
82231 - functions themselves. Of course, POSIX.1 cannot be completely
82232 - implemented in terms of itself, so a configuration using just
82233 - `posix' cannot be complete.
82235 -`unix'
82236 - This is the directory for Unix-like things. *Note Porting to
82237 - Unix::. `unix' implies `posix'. There are some special-purpose
82238 - subdirectories of `unix':
82240 - `unix/common'
82241 - This directory is for things common to both BSD and System V
82242 - release 4. Both `unix/bsd' and `unix/sysv/sysv4' imply
82243 - `unix/common'.
82245 - `unix/inet'
82246 - This directory is for `socket' and related functions on Unix
82247 - systems. `unix/inet/Subdirs' enables the `inet' top-level
82248 - subdirectory. `unix/common' implies `unix/inet'.
82250 -`mach'
82251 - This is the directory for things based on the Mach microkernel
82252 - from CMU (including the GNU operating system). Other basic
82253 - operating systems (VMS, for example) would have their own
82254 - directories at the top level of the `sysdeps' hierarchy, parallel
82255 - to `unix' and `mach'.
82257 -\x1f
82258 -File: libc.info, Node: Porting to Unix, Prev: Hierarchy Conventions, Up: Porting
82260 -Porting the GNU C Library to Unix Systems
82261 ------------------------------------------
82263 - Most Unix systems are fundamentally very similar. There are
82264 -variations between different machines, and variations in what
82265 -facilities are provided by the kernel. But the interface to the
82266 -operating system facilities is, for the most part, pretty uniform and
82267 -simple.
82269 - The code for Unix systems is in the directory `unix', at the top
82270 -level of the `sysdeps' hierarchy. This directory contains
82271 -subdirectories (and subdirectory trees) for various Unix variants.
82273 - The functions which are system calls in most Unix systems are
82274 -implemented in assembly code, which is generated automatically from
82275 -specifications in files named `syscalls.list'. There are several such
82276 -files, one in `sysdeps/unix' and others in its subdirectories. Some
82277 -special system calls are implemented in files that are named with a
82278 -suffix of `.S'; for example, `_exit.S'. Files ending in `.S' are run
82279 -through the C preprocessor before being fed to the assembler.
82281 - These files all use a set of macros that should be defined in
82282 -`sysdep.h'. The `sysdep.h' file in `sysdeps/unix' partially defines
82283 -them; a `sysdep.h' file in another directory must finish defining them
82284 -for the particular machine and operating system variant. See
82285 -`sysdeps/unix/sysdep.h' and the machine-specific `sysdep.h'
82286 -implementations to see what these macros are and what they should do.
82288 - The system-specific makefile for the `unix' directory
82289 -(`sysdeps/unix/Makefile') gives rules to generate several files from
82290 -the Unix system you are building the library on (which is assumed to be
82291 -the target system you are building the library _for_). All the
82292 -generated files are put in the directory where the object files are
82293 -kept; they should not affect the source tree itself. The files
82294 -generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c'
82295 -(for the `stdio' section of the library).
82297 diff -u -udbrN glibc-2.3.2/manual/libc.info-55 glibc-2.3.2-200304020432/manual/libc.info-55
82298 --- glibc-2.3.2/manual/libc.info-55 Sat Mar 1 02:39:41 2003
82299 +++ glibc-2.3.2-200304020432/manual/libc.info-55 Thu Jan 1 01:00:00 1970
82300 @@ -1,827 +0,0 @@
82301 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
82303 -INFO-DIR-SECTION GNU libraries
82304 -START-INFO-DIR-ENTRY
82305 -* Libc: (libc). C library.
82306 -END-INFO-DIR-ENTRY
82308 - This file documents the GNU C library.
82310 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
82311 -Reference Manual', for Version 2.3.x.
82313 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
82314 -Free Software Foundation, Inc.
82316 - Permission is granted to copy, distribute and/or modify this document
82317 -under the terms of the GNU Free Documentation License, Version 1.1 or
82318 -any later version published by the Free Software Foundation; with the
82319 -Invariant Sections being "Free Software Needs Free Documentation" and
82320 -"GNU Lesser General Public License", the Front-Cover texts being (a)
82321 -(see below), and with the Back-Cover Texts being (b) (see below). A
82322 -copy of the license is included in the section entitled "GNU Free
82323 -Documentation License".
82325 - (a) The FSF's Front-Cover Text is:
82327 - A GNU Manual
82329 - (b) The FSF's Back-Cover Text is:
82331 - You have freedom to copy and modify this GNU Manual, like GNU
82332 -software. Copies published by the Free Software Foundation raise
82333 -funds for GNU development.
82335 -\x1f
82336 -File: libc.info, Node: Contributors, Next: Free Manuals, Prev: Maintenance, Up: Top
82338 -Contributors to the GNU C Library
82339 -*********************************
82341 - The GNU C library was written originally by Roland McGrath, and is
82342 -currently maintained by Ulrich Drepper. Some parts of the library were
82343 -contributed or worked on by other people.
82345 - * The `getopt' function and related code was written by Richard
82346 - Stallman, David J. MacKenzie, and Roland McGrath.
82348 - * The merge sort function `qsort' was written by Michael J. Haertel.
82350 - * The quick sort function used as a fallback by `qsort' was written
82351 - by Douglas C. Schmidt.
82353 - * The memory allocation functions `malloc', `realloc' and `free' and
82354 - related code were written by Michael J. Haertel, Wolfram Gloger,
82355 - and Doug Lea.
82357 - * Fast implementations of many of the string functions (`memcpy',
82358 - `strlen', etc.) were written by Torbjo"rn Granlund.
82360 - * The `tar.h' header file was written by David J. MacKenzie.
82362 - * The port to the MIPS DECStation running Ultrix 4
82363 - (`mips-dec-ultrix4') was contributed by Brendan Kehoe and Ian
82364 - Lance Taylor.
82366 - * The DES encryption function `crypt' and related functions were
82367 - contributed by Michael Glad.
82369 - * The `ftw' and `nftw' functions were contributed by Ulrich Drepper.
82371 - * The startup code to support SunOS shared libraries was contributed
82372 - by Tom Quinn.
82374 - * The `mktime' function was contributed by Paul Eggert.
82376 - * The port to the Sequent Symmetry running Dynix version 3
82377 - (`i386-sequent-bsd') was contributed by Jason Merrill.
82379 - * The timezone support code is derived from the public-domain
82380 - timezone package by Arthur David Olson and his many contributors.
82382 - * The port to the DEC Alpha running OSF/1 (`alpha-dec-osf1') was
82383 - contributed by Brendan Kehoe, using some code written by Roland
82384 - McGrath.
82386 - * The port to SGI machines running Irix 4 (`mips-sgi-irix4') was
82387 - contributed by Tom Quinn.
82389 - * The port of the Mach and Hurd code to the MIPS architecture
82390 - (`mips-ANYTHING-gnu') was contributed by Kazumoto Kojima.
82392 - * The floating-point printing function used by `printf' and friends
82393 - and the floating-point reading function used by `scanf', `strtod'
82394 - and friends were written by Ulrich Drepper. The multi-precision
82395 - integer functions used in those functions are taken from GNU MP,
82396 - which was contributed by Torbjo"rn Granlund.
82398 - * The internationalization support in the library, and the support
82399 - programs `locale' and `localedef', were written by Ulrich Drepper.
82400 - Ulrich Drepper adapted the support code for message catalogs
82401 - (`libintl.h', etc.) from the GNU `gettext' package, which he also
82402 - wrote. He also contributed the `catgets' support and the entire
82403 - suite of multi-byte and wide-character support functions
82404 - (`wctype.h', `wchar.h', etc.).
82406 - * The implementations of the `nsswitch.conf' mechanism and the files
82407 - and DNS backends for it were designed and written by Ulrich
82408 - Drepper and Roland McGrath, based on a backend interface defined
82409 - by Peter Eriksson.
82411 - * The port to Linux i386/ELF (`i386-ANYTHING-linux') was contributed
82412 - by Ulrich Drepper, based in large part on work done in Hongjiu
82413 - Lu's Linux version of the GNU C Library.
82415 - * The port to Linux/m68k (`m68k-ANYTHING-linux') was contributed by
82416 - Andreas Schwab.
82418 - * The ports to Linux/ARM (`arm-ANYTHING-linuxaout') and ARM
82419 - standalone (`arm-ANYTHING-none'), as well as parts of the IPv6
82420 - support code, were contributed by Philip Blundell.
82422 - * Richard Henderson contributed the ELF dynamic linking code and
82423 - other support for the Alpha processor.
82425 - * David Mosberger-Tang contributed the port to Linux/Alpha
82426 - (`alpha-ANYTHING-linux').
82428 - * The port to Linux on PowerPC (`powerpc-ANYTHING-linux') was
82429 - contributed by Geoffrey Keating.
82431 - * Miles Bader wrote the argp argument-parsing package, and the
82432 - argz/envz interfaces.
82434 - * Stephen R. van den Berg contributed a highly-optimized `strstr'
82435 - function.
82437 - * Ulrich Drepper contributed the `hsearch' and `drand48' families of
82438 - functions; reentrant `...`_r'' versions of the `random' family;
82439 - System V shared memory and IPC support code; and several
82440 - highly-optimized string functions for iX86 processors.
82442 - * The math functions are taken from `fdlibm-5.1' by Sun
82443 - Microsystems, as modified by J.T. Conklin, Ian Lance Taylor,
82444 - Ulrich Drepper, Andreas Schwab, and Roland McGrath.
82446 - * The `libio' library used to implement `stdio' functions on some
82447 - platforms was written by Per Bothner and modified by Ulrich
82448 - Drepper.
82450 - * Eric Youngdale and Ulrich Drepper implemented versioning of
82451 - objects on the symbol level.
82453 - * Thorsten Kukuk provided an implementation for NIS (YP) and NIS+,
82454 - securelevel 0, 1 and 2.
82456 - * Andreas Jaeger provided a test suite for the math library.
82458 - * Mark Kettenis implemented the utmpx interface and an utmp daemon.
82460 - * Ulrich Drepper added character conversion functions (`iconv').
82462 - * Thorsten Kukuk provided an implementation for a caching daemon for
82463 - NSS (nscd).
82465 - * Tim Waugh provided an implementation of the POSIX.2 wordexp
82466 - function family.
82468 - * Mark Kettenis provided a Hesiod NSS module.
82470 - * The Internet-related code (most of the `inet' subdirectory) and
82471 - several other miscellaneous functions and header files have been
82472 - included from 4.4 BSD with little or no modification. The copying
82473 - permission notice for this code can be found in the file `LICENSES'
82474 - in the source distribution.
82476 - * The random number generation functions `random', `srandom',
82477 - `setstate' and `initstate', which are also the basis for the
82478 - `rand' and `srand' functions, were written by Earl T. Cohen for
82479 - the University of California at Berkeley and are copyrighted by the
82480 - Regents of the University of California. They have undergone minor
82481 - changes to fit into the GNU C library and to fit the ISO C
82482 - standard, but the functional code is Berkeley's.
82484 - * The DNS resolver code is taken directly from BIND 4.9.5, which
82485 - includes copyrighted code from UC Berkeley and from Digital
82486 - Equipment Corporation. See the file `LICENSES' for the text of
82487 - the DEC license.
82489 - * The code to support Sun RPC is taken verbatim from Sun's
82490 - RPCSRC-4.0 distribution; see the file `LICENSES' for the text of
82491 - the license.
82493 - * Some of the support code for Mach is taken from Mach 3.0 by CMU;
82494 - the file if_ppp.h is also copyright by CMU, but under a different
82495 - license; see the file `LICENSES' for the text of the licenses.
82497 - * Many of the IA64 math functions are taken from a collection of
82498 - "Highly Optimized Mathematical Functions for Itanium" that Intel
82499 - makes available under a free license; see the file `LICENSES' for
82500 - details.
82502 - * The `getaddrinfo' and `getnameinfo' functions and supporting code
82503 - were written by Craig Metz; see the file `LICENSES' for details on
82504 - their licensing.
82506 - * Many of the IEEE 64-bit double precision math functions (in the
82507 - `sysdeps/ieee754/dbl-64' subdirectory) come from the IBM Accurate
82508 - Mathematical Library, contributed by IBM.
82511 -\x1f
82512 -File: libc.info, Node: Free Manuals, Next: Copying, Prev: Contributors, Up: Top
82514 -Free Software Needs Free Documentation
82515 -**************************************
82517 - The biggest deficiency in the free software community today is not in
82518 -the software--it is the lack of good free documentation that we can
82519 -include with the free software. Many of our most important programs do
82520 -not come with free reference manuals and free introductory texts.
82521 -Documentation is an essential part of any software package; when an
82522 -important free software package does not come with a free manual and a
82523 -free tutorial, that is a major gap. We have many such gaps today.
82525 - Consider Perl, for instance. The tutorial manuals that people
82526 -normally use are non-free. How did this come about? Because the
82527 -authors of those manuals published them with restrictive terms--no
82528 -copying, no modification, source files not available--which exclude
82529 -them from the free software world.
82531 - That wasn't the first time this sort of thing happened, and it was
82532 -far from the last. Many times we have heard a GNU user eagerly
82533 -describe a manual that he is writing, his intended contribution to the
82534 -community, only to learn that he had ruined everything by signing a
82535 -publication contract to make it non-free.
82537 - Free documentation, like free software, is a matter of freedom, not
82538 -price. The problem with the non-free manual is not that publishers
82539 -charge a price for printed copies--that in itself is fine. (The Free
82540 -Software Foundation sells printed copies of manuals, too.) The problem
82541 -is the restrictions on the use of the manual. Free manuals are
82542 -available in source code form, and give you permission to copy and
82543 -modify. Non-free manuals do not allow this.
82545 - The criteria of freedom for a free manual are roughly the same as for
82546 -free software. Redistribution (including the normal kinds of
82547 -commercial redistribution) must be permitted, so that the manual can
82548 -accompany every copy of the program, both on-line and on paper.
82550 - Permission for modification of the technical content is crucial too.
82551 -When people modify the software, adding or changing features, if they
82552 -are conscientious they will change the manual too--so they can provide
82553 -accurate and clear documentation for the modified program. A manual
82554 -that leaves you no choice but to write a new manual to document a
82555 -changed version of the program is not really available to our community.
82557 - Some kinds of limits on the way modification is handled are
82558 -acceptable. For example, requirements to preserve the original
82559 -author's copyright notice, the distribution terms, or the list of
82560 -authors, are ok. It is also no problem to require modified versions to
82561 -include notice that they were modified. Even entire sections that may
82562 -not be deleted or changed are acceptable, as long as they deal with
82563 -nontechnical topics (like this one). These kinds of restrictions are
82564 -acceptable because they don't obstruct the community's normal use of
82565 -the manual.
82567 - However, it must be possible to modify all the _technical_ content
82568 -of the manual, and then distribute the result in all the usual media,
82569 -through all the usual channels. Otherwise, the restrictions obstruct
82570 -the use of the manual, it is not free, and we need another manual to
82571 -replace it.
82573 - Please spread the word about this issue. Our community continues to
82574 -lose manuals to proprietary publishing. If we spread the word that
82575 -free software needs free reference manuals and free tutorials, perhaps
82576 -the next person who wants to contribute by writing documentation will
82577 -realize, before it is too late, that only free manuals contribute to
82578 -the free software community.
82580 - If you are writing documentation, please insist on publishing it
82581 -under the GNU Free Documentation License or another free documentation
82582 -license. Remember that this decision requires your approval--you don't
82583 -have to let the publisher decide. Some commercial publishers will use
82584 -a free license if you insist, but they will not propose the option; it
82585 -is up to you to raise the issue and say firmly that this is what you
82586 -want. If the publisher you are dealing with refuses, please try other
82587 -publishers. If you're not sure whether a proposed license is free,
82588 -write to <licensing@gnu.org>.
82590 - You can encourage commercial publishers to sell more free, copylefted
82591 -manuals and tutorials by buying them, and particularly by buying copies
82592 -from the publishers that paid for their writing or for major
82593 -improvements. Meanwhile, try to avoid buying non-free documentation at
82594 -all. Check the distribution terms of a manual before you buy it, and
82595 -insist that whoever seeks your business must respect your freedom.
82596 -Check the history of the book, and try reward the publishers that have
82597 -paid or pay the authors to work on it.
82599 - The Free Software Foundation maintains a list of free documentation
82600 -published by other publishers, at
82601 -<http://www.fsf.org/doc/other-free-books.html>.
82603 -\x1f
82604 -File: libc.info, Node: Copying, Next: Documentation License, Prev: Free Manuals, Up: Top
82606 -GNU Lesser General Public License
82607 -*********************************
82609 - Version 2.1, February 1999
82610 - Copyright (C) 1991, 1999 Free Software Foundation, Inc.
82611 - 59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA
82613 - Everyone is permitted to copy and distribute verbatim copies
82614 - of this license document, but changing it is not allowed.
82616 - [This is the first released version of the Lesser GPL. It also counts
82617 - as the successor of the GNU Library Public License, version 2, hence the
82618 - version number 2.1.]
82620 -Preamble
82621 ---------
82623 - The licenses for most software are designed to take away your
82624 -freedom to share and change it. By contrast, the GNU General Public
82625 -Licenses are intended to guarantee your freedom to share and change
82626 -free software--to make sure the software is free for all its users.
82628 - This license, the Lesser General Public License, applies to some
82629 -specially designated software--typically libraries--of the Free
82630 -Software Foundation and other authors who decide to use it. You can use
82631 -it too, but we suggest you first think carefully about whether this
82632 -license or the ordinary General Public License is the better strategy to
82633 -use in any particular case, based on the explanations below.
82635 - When we speak of free software, we are referring to freedom of use,
82636 -not price. Our General Public Licenses are designed to make sure that
82637 -you have the freedom to distribute copies of free software (and charge
82638 -for this service if you wish); that you receive source code or can get
82639 -it if you want it; that you can change the software and use pieces of it
82640 -in new free programs; and that you are informed that you can do these
82641 -things.
82643 - To protect your rights, we need to make restrictions that forbid
82644 -distributors to deny you these rights or to ask you to surrender these
82645 -rights. These restrictions translate to certain responsibilities for
82646 -you if you distribute copies of the library or if you modify it.
82648 - For example, if you distribute copies of the library, whether gratis
82649 -or for a fee, you must give the recipients all the rights that we gave
82650 -you. You must make sure that they, too, receive or can get the source
82651 -code. If you link other code with the library, you must provide
82652 -complete object files to the recipients, so that they can relink them
82653 -with the library after making changes to the library and recompiling
82654 -it. And you must show them these terms so they know their rights.
82656 - We protect your rights with a two-step method: (1) we copyright the
82657 -library, and (2) we offer you this license, which gives you legal
82658 -permission to copy, distribute and/or modify the library.
82660 - To protect each distributor, we want to make it very clear that
82661 -there is no warranty for the free library. Also, if the library is
82662 -modified by someone else and passed on, the recipients should know that
82663 -what they have is not the original version, so that the original
82664 -author's reputation will not be affected by problems that might be
82665 -introduced by others.
82667 - Finally, software patents pose a constant threat to the existence of
82668 -any free program. We wish to make sure that a company cannot
82669 -effectively restrict the users of a free program by obtaining a
82670 -restrictive license from a patent holder. Therefore, we insist that
82671 -any patent license obtained for a version of the library must be
82672 -consistent with the full freedom of use specified in this license.
82674 - Most GNU software, including some libraries, is covered by the
82675 -ordinary GNU General Public License. This license, the GNU Lesser
82676 -General Public License, applies to certain designated libraries, and is
82677 -quite different from the ordinary General Public License. We use this
82678 -license for certain libraries in order to permit linking those
82679 -libraries into non-free programs.
82681 - When a program is linked with a library, whether statically or using
82682 -a shared library, the combination of the two is legally speaking a
82683 -combined work, a derivative of the original library. The ordinary
82684 -General Public License therefore permits such linking only if the
82685 -entire combination fits its criteria of freedom. The Lesser General
82686 -Public License permits more lax criteria for linking other code with
82687 -the library.
82689 - We call this license the "Lesser" General Public License because it
82690 -does _Less_ to protect the user's freedom than the ordinary General
82691 -Public License. It also provides other free software developers Less
82692 -of an advantage over competing non-free programs. These disadvantages
82693 -are the reason we use the ordinary General Public License for many
82694 -libraries. However, the Lesser license provides advantages in certain
82695 -special circumstances.
82697 - For example, on rare occasions, there may be a special need to
82698 -encourage the widest possible use of a certain library, so that it
82699 -becomes a de-facto standard. To achieve this, non-free programs must be
82700 -allowed to use the library. A more frequent case is that a free
82701 -library does the same job as widely used non-free libraries. In this
82702 -case, there is little to gain by limiting the free library to free
82703 -software only, so we use the Lesser General Public License.
82705 - In other cases, permission to use a particular library in non-free
82706 -programs enables a greater number of people to use a large body of free
82707 -software. For example, permission to use the GNU C Library in non-free
82708 -programs enables many more people to use the whole GNU operating
82709 -system, as well as its variant, the GNU/Linux operating system.
82711 - Although the Lesser General Public License is Less protective of the
82712 -users' freedom, it does ensure that the user of a program that is
82713 -linked with the Library has the freedom and the wherewithal to run that
82714 -program using a modified version of the Library.
82716 - The precise terms and conditions for copying, distribution and
82717 -modification follow. Pay close attention to the difference between a
82718 -"work based on the library" and a "work that uses the library". The
82719 -former contains code derived from the library, whereas the latter must
82720 -be combined with the library in order to run.
82722 - GNU LESSER GENERAL PUBLIC LICENSE
82723 - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
82724 - 0. This License Agreement applies to any software library or other
82725 - program which contains a notice placed by the copyright holder or
82726 - other authorized party saying it may be distributed under the
82727 - terms of this Lesser General Public License (also called "this
82728 - License"). Each licensee is addressed as "you".
82730 - A "library" means a collection of software functions and/or data
82731 - prepared so as to be conveniently linked with application programs
82732 - (which use some of those functions and data) to form executables.
82734 - The "Library", below, refers to any such software library or work
82735 - which has been distributed under these terms. A "work based on the
82736 - Library" means either the Library or any derivative work under
82737 - copyright law: that is to say, a work containing the Library or a
82738 - portion of it, either verbatim or with modifications and/or
82739 - translated straightforwardly into another language. (Hereinafter,
82740 - translation is included without limitation in the term
82741 - "modification".)
82743 - "Source code" for a work means the preferred form of the work for
82744 - making modifications to it. For a library, complete source code
82745 - means all the source code for all modules it contains, plus any
82746 - associated interface definition files, plus the scripts used to
82747 - control compilation and installation of the library.
82749 - Activities other than copying, distribution and modification are
82750 - not covered by this License; they are outside its scope. The act
82751 - of running a program using the Library is not restricted, and
82752 - output from such a program is covered only if its contents
82753 - constitute a work based on the Library (independent of the use of
82754 - the Library in a tool for writing it). Whether that is true
82755 - depends on what the Library does and what the program that uses
82756 - the Library does.
82758 - 1. You may copy and distribute verbatim copies of the Library's
82759 - complete source code as you receive it, in any medium, provided
82760 - that you conspicuously and appropriately publish on each copy an
82761 - appropriate copyright notice and disclaimer of warranty; keep
82762 - intact all the notices that refer to this License and to the
82763 - absence of any warranty; and distribute a copy of this License
82764 - along with the Library.
82766 - You may charge a fee for the physical act of transferring a copy,
82767 - and you may at your option offer warranty protection in exchange
82768 - for a fee.
82770 - 2. You may modify your copy or copies of the Library or any portion
82771 - of it, thus forming a work based on the Library, and copy and
82772 - distribute such modifications or work under the terms of Section 1
82773 - above, provided that you also meet all of these conditions:
82775 - a. The modified work must itself be a software library.
82777 - b. You must cause the files modified to carry prominent notices
82778 - stating that you changed the files and the date of any change.
82780 - c. You must cause the whole of the work to be licensed at no
82781 - charge to all third parties under the terms of this License.
82783 - d. If a facility in the modified Library refers to a function or
82784 - a table of data to be supplied by an application program that
82785 - uses the facility, other than as an argument passed when the
82786 - facility is invoked, then you must make a good faith effort
82787 - to ensure that, in the event an application does not supply
82788 - such function or table, the facility still operates, and
82789 - performs whatever part of its purpose remains meaningful.
82791 - (For example, a function in a library to compute square roots
82792 - has a purpose that is entirely well-defined independent of the
82793 - application. Therefore, Subsection 2d requires that any
82794 - application-supplied function or table used by this function
82795 - must be optional: if the application does not supply it, the
82796 - square root function must still compute square roots.)
82798 - These requirements apply to the modified work as a whole. If
82799 - identifiable sections of that work are not derived from the
82800 - Library, and can be reasonably considered independent and separate
82801 - works in themselves, then this License, and its terms, do not
82802 - apply to those sections when you distribute them as separate
82803 - works. But when you distribute the same sections as part of a
82804 - whole which is a work based on the Library, the distribution of
82805 - the whole must be on the terms of this License, whose permissions
82806 - for other licensees extend to the entire whole, and thus to each
82807 - and every part regardless of who wrote it.
82809 - Thus, it is not the intent of this section to claim rights or
82810 - contest your rights to work written entirely by you; rather, the
82811 - intent is to exercise the right to control the distribution of
82812 - derivative or collective works based on the Library.
82814 - In addition, mere aggregation of another work not based on the
82815 - Library with the Library (or with a work based on the Library) on
82816 - a volume of a storage or distribution medium does not bring the
82817 - other work under the scope of this License.
82819 - 3. You may opt to apply the terms of the ordinary GNU General Public
82820 - License instead of this License to a given copy of the Library.
82821 - To do this, you must alter all the notices that refer to this
82822 - License, so that they refer to the ordinary GNU General Public
82823 - License, version 2, instead of to this License. (If a newer
82824 - version than version 2 of the ordinary GNU General Public License
82825 - has appeared, then you can specify that version instead if you
82826 - wish.) Do not make any other change in these notices.
82828 - Once this change is made in a given copy, it is irreversible for
82829 - that copy, so the ordinary GNU General Public License applies to
82830 - all subsequent copies and derivative works made from that copy.
82832 - This option is useful when you wish to copy part of the code of
82833 - the Library into a program that is not a library.
82835 - 4. You may copy and distribute the Library (or a portion or
82836 - derivative of it, under Section 2) in object code or executable
82837 - form under the terms of Sections 1 and 2 above provided that you
82838 - accompany it with the complete corresponding machine-readable
82839 - source code, which must be distributed under the terms of Sections
82840 - 1 and 2 above on a medium customarily used for software
82841 - interchange.
82843 - If distribution of object code is made by offering access to copy
82844 - from a designated place, then offering equivalent access to copy
82845 - the source code from the same place satisfies the requirement to
82846 - distribute the source code, even though third parties are not
82847 - compelled to copy the source along with the object code.
82849 - 5. A program that contains no derivative of any portion of the
82850 - Library, but is designed to work with the Library by being
82851 - compiled or linked with it, is called a "work that uses the
82852 - Library". Such a work, in isolation, is not a derivative work of
82853 - the Library, and therefore falls outside the scope of this License.
82855 - However, linking a "work that uses the Library" with the Library
82856 - creates an executable that is a derivative of the Library (because
82857 - it contains portions of the Library), rather than a "work that
82858 - uses the library". The executable is therefore covered by this
82859 - License. Section 6 states terms for distribution of such
82860 - executables.
82862 - When a "work that uses the Library" uses material from a header
82863 - file that is part of the Library, the object code for the work may
82864 - be a derivative work of the Library even though the source code is
82865 - not. Whether this is true is especially significant if the work
82866 - can be linked without the Library, or if the work is itself a
82867 - library. The threshold for this to be true is not precisely
82868 - defined by law.
82870 - If such an object file uses only numerical parameters, data
82871 - structure layouts and accessors, and small macros and small inline
82872 - functions (ten lines or less in length), then the use of the object
82873 - file is unrestricted, regardless of whether it is legally a
82874 - derivative work. (Executables containing this object code plus
82875 - portions of the Library will still fall under Section 6.)
82877 - Otherwise, if the work is a derivative of the Library, you may
82878 - distribute the object code for the work under the terms of Section
82879 - 6. Any executables containing that work also fall under Section 6,
82880 - whether or not they are linked directly with the Library itself.
82882 - 6. As an exception to the Sections above, you may also combine or
82883 - link a "work that uses the Library" with the Library to produce a
82884 - work containing portions of the Library, and distribute that work
82885 - under terms of your choice, provided that the terms permit
82886 - modification of the work for the customer's own use and reverse
82887 - engineering for debugging such modifications.
82889 - You must give prominent notice with each copy of the work that the
82890 - Library is used in it and that the Library and its use are covered
82891 - by this License. You must supply a copy of this License. If the
82892 - work during execution displays copyright notices, you must include
82893 - the copyright notice for the Library among them, as well as a
82894 - reference directing the user to the copy of this License. Also,
82895 - you must do one of these things:
82897 - a. Accompany the work with the complete corresponding
82898 - machine-readable source code for the Library including
82899 - whatever changes were used in the work (which must be
82900 - distributed under Sections 1 and 2 above); and, if the work
82901 - is an executable linked with the Library, with the complete
82902 - machine-readable "work that uses the Library", as object code
82903 - and/or source code, so that the user can modify the Library
82904 - and then relink to produce a modified executable containing
82905 - the modified Library. (It is understood that the user who
82906 - changes the contents of definitions files in the Library will
82907 - not necessarily be able to recompile the application to use
82908 - the modified definitions.)
82910 - b. Use a suitable shared library mechanism for linking with the
82911 - Library. A suitable mechanism is one that (1) uses at run
82912 - time a copy of the library already present on the user's
82913 - computer system, rather than copying library functions into
82914 - the executable, and (2) will operate properly with a modified
82915 - version of the library, if the user installs one, as long as
82916 - the modified version is interface-compatible with the version
82917 - that the work was made with.
82919 - c. Accompany the work with a written offer, valid for at least
82920 - three years, to give the same user the materials specified in
82921 - Subsection 6a, above, for a charge no more than the cost of
82922 - performing this distribution.
82924 - d. If distribution of the work is made by offering access to copy
82925 - from a designated place, offer equivalent access to copy the
82926 - above specified materials from the same place.
82928 - e. Verify that the user has already received a copy of these
82929 - materials or that you have already sent this user a copy.
82931 - For an executable, the required form of the "work that uses the
82932 - Library" must include any data and utility programs needed for
82933 - reproducing the executable from it. However, as a special
82934 - exception, the materials to be distributed need not include
82935 - anything that is normally distributed (in either source or binary
82936 - form) with the major components (compiler, kernel, and so on) of
82937 - the operating system on which the executable runs, unless that
82938 - component itself accompanies the executable.
82940 - It may happen that this requirement contradicts the license
82941 - restrictions of other proprietary libraries that do not normally
82942 - accompany the operating system. Such a contradiction means you
82943 - cannot use both them and the Library together in an executable
82944 - that you distribute.
82946 - 7. You may place library facilities that are a work based on the
82947 - Library side-by-side in a single library together with other
82948 - library facilities not covered by this License, and distribute
82949 - such a combined library, provided that the separate distribution
82950 - of the work based on the Library and of the other library
82951 - facilities is otherwise permitted, and provided that you do these
82952 - two things:
82954 - a. Accompany the combined library with a copy of the same work
82955 - based on the Library, uncombined with any other library
82956 - facilities. This must be distributed under the terms of the
82957 - Sections above.
82959 - b. Give prominent notice with the combined library of the fact
82960 - that part of it is a work based on the Library, and explaining
82961 - where to find the accompanying uncombined form of the same
82962 - work.
82964 - 8. You may not copy, modify, sublicense, link with, or distribute the
82965 - Library except as expressly provided under this License. Any
82966 - attempt otherwise to copy, modify, sublicense, link with, or
82967 - distribute the Library is void, and will automatically terminate
82968 - your rights under this License. However, parties who have
82969 - received copies, or rights, from you under this License will not
82970 - have their licenses terminated so long as such parties remain in
82971 - full compliance.
82973 - 9. You are not required to accept this License, since you have not
82974 - signed it. However, nothing else grants you permission to modify
82975 - or distribute the Library or its derivative works. These actions
82976 - are prohibited by law if you do not accept this License.
82977 - Therefore, by modifying or distributing the Library (or any work
82978 - based on the Library), you indicate your acceptance of this
82979 - License to do so, and all its terms and conditions for copying,
82980 - distributing or modifying the Library or works based on it.
82982 - 10. Each time you redistribute the Library (or any work based on the
82983 - Library), the recipient automatically receives a license from the
82984 - original licensor to copy, distribute, link with or modify the
82985 - Library subject to these terms and conditions. You may not impose
82986 - any further restrictions on the recipients' exercise of the rights
82987 - granted herein. You are not responsible for enforcing compliance
82988 - by third parties with this License.
82990 - 11. If, as a consequence of a court judgment or allegation of patent
82991 - infringement or for any other reason (not limited to patent
82992 - issues), conditions are imposed on you (whether by court order,
82993 - agreement or otherwise) that contradict the conditions of this
82994 - License, they do not excuse you from the conditions of this
82995 - License. If you cannot distribute so as to satisfy simultaneously
82996 - your obligations under this License and any other pertinent
82997 - obligations, then as a consequence you may not distribute the
82998 - Library at all. For example, if a patent license would not permit
82999 - royalty-free redistribution of the Library by all those who
83000 - receive copies directly or indirectly through you, then the only
83001 - way you could satisfy both it and this License would be to refrain
83002 - entirely from distribution of the Library.
83004 - If any portion of this section is held invalid or unenforceable
83005 - under any particular circumstance, the balance of the section is
83006 - intended to apply, and the section as a whole is intended to apply
83007 - in other circumstances.
83009 - It is not the purpose of this section to induce you to infringe any
83010 - patents or other property right claims or to contest validity of
83011 - any such claims; this section has the sole purpose of protecting
83012 - the integrity of the free software distribution system which is
83013 - implemented by public license practices. Many people have made
83014 - generous contributions to the wide range of software distributed
83015 - through that system in reliance on consistent application of that
83016 - system; it is up to the author/donor to decide if he or she is
83017 - willing to distribute software through any other system and a
83018 - licensee cannot impose that choice.
83020 - This section is intended to make thoroughly clear what is believed
83021 - to be a consequence of the rest of this License.
83023 - 12. If the distribution and/or use of the Library is restricted in
83024 - certain countries either by patents or by copyrighted interfaces,
83025 - the original copyright holder who places the Library under this
83026 - License may add an explicit geographical distribution limitation
83027 - excluding those countries, so that distribution is permitted only
83028 - in or among countries not thus excluded. In such case, this
83029 - License incorporates the limitation as if written in the body of
83030 - this License.
83032 - 13. The Free Software Foundation may publish revised and/or new
83033 - versions of the Lesser General Public License from time to time.
83034 - Such new versions will be similar in spirit to the present version,
83035 - but may differ in detail to address new problems or concerns.
83037 - Each version is given a distinguishing version number. If the
83038 - Library specifies a version number of this License which applies
83039 - to it and "any later version", you have the option of following
83040 - the terms and conditions either of that version or of any later
83041 - version published by the Free Software Foundation. If the Library
83042 - does not specify a license version number, you may choose any
83043 - version ever published by the Free Software Foundation.
83045 - 14. If you wish to incorporate parts of the Library into other free
83046 - programs whose distribution conditions are incompatible with these,
83047 - write to the author to ask for permission. For software which is
83048 - copyrighted by the Free Software Foundation, write to the Free
83049 - Software Foundation; we sometimes make exceptions for this. Our
83050 - decision will be guided by the two goals of preserving the free
83051 - status of all derivatives of our free software and of promoting
83052 - the sharing and reuse of software generally.
83054 - NO WARRANTY
83056 - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
83057 - WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE
83058 - LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
83059 - HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT
83060 - WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
83061 - NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
83062 - FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
83063 - QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE
83064 - LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
83065 - SERVICING, REPAIR OR CORRECTION.
83067 - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
83068 - WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
83069 - MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
83070 - LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
83071 - INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
83072 - INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
83073 - DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
83074 - OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY
83075 - OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
83076 - ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
83078 - END OF TERMS AND CONDITIONS
83080 -How to Apply These Terms to Your New Libraries
83081 -----------------------------------------------
83083 - If you develop a new library, and you want it to be of the greatest
83084 -possible use to the public, we recommend making it free software that
83085 -everyone can redistribute and change. You can do so by permitting
83086 -redistribution under these terms (or, alternatively, under the terms of
83087 -the ordinary General Public License).
83089 - To apply these terms, attach the following notices to the library.
83090 -It is safest to attach them to the start of each source file to most
83091 -effectively convey the exclusion of warranty; and each file should have
83092 -at least the "copyright" line and a pointer to where the full notice is
83093 -found.
83095 - ONE LINE TO GIVE THE LIBRARY'S NAME AND AN IDEA OF WHAT IT DOES.
83096 - Copyright (C) YEAR NAME OF AUTHOR
83098 - This library is free software; you can redistribute it and/or modify it
83099 - under the terms of the GNU Lesser General Public License as published by
83100 - the Free Software Foundation; either version 2.1 of the License, or (at
83101 - your option) any later version.
83103 - This library is distributed in the hope that it will be useful, but
83104 - WITHOUT ANY WARRANTY; without even the implied warranty of
83105 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
83106 - Lesser General Public License for more details.
83108 - You should have received a copy of the GNU Lesser General Public
83109 - License along with this library; if not, write to the Free Software
83110 - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
83111 - USA.
83113 - Also add information on how to contact you by electronic and paper
83114 -mail.
83116 - You should also get your employer (if you work as a programmer) or
83117 -your school, if any, to sign a "copyright disclaimer" for the library,
83118 -if necessary. Here is a sample; alter the names:
83120 - Yoyodyne, Inc., hereby disclaims all copyright interest in the library
83121 - `Frob' (a library for tweaking knobs) written by James Random Hacker.
83123 - SIGNATURE OF TY COON, 1 April 1990
83124 - Ty Coon, President of Vice
83126 - That's all there is to it!
83128 diff -u -udbrN glibc-2.3.2/manual/libc.info-56 glibc-2.3.2-200304020432/manual/libc.info-56
83129 --- glibc-2.3.2/manual/libc.info-56 Sat Mar 1 02:39:41 2003
83130 +++ glibc-2.3.2-200304020432/manual/libc.info-56 Thu Jan 1 01:00:00 1970
83131 @@ -1,419 +0,0 @@
83132 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
83134 -INFO-DIR-SECTION GNU libraries
83135 -START-INFO-DIR-ENTRY
83136 -* Libc: (libc). C library.
83137 -END-INFO-DIR-ENTRY
83139 - This file documents the GNU C library.
83141 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
83142 -Reference Manual', for Version 2.3.x.
83144 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
83145 -Free Software Foundation, Inc.
83147 - Permission is granted to copy, distribute and/or modify this document
83148 -under the terms of the GNU Free Documentation License, Version 1.1 or
83149 -any later version published by the Free Software Foundation; with the
83150 -Invariant Sections being "Free Software Needs Free Documentation" and
83151 -"GNU Lesser General Public License", the Front-Cover texts being (a)
83152 -(see below), and with the Back-Cover Texts being (b) (see below). A
83153 -copy of the license is included in the section entitled "GNU Free
83154 -Documentation License".
83156 - (a) The FSF's Front-Cover Text is:
83158 - A GNU Manual
83160 - (b) The FSF's Back-Cover Text is:
83162 - You have freedom to copy and modify this GNU Manual, like GNU
83163 -software. Copies published by the Free Software Foundation raise
83164 -funds for GNU development.
83166 -\x1f
83167 -File: libc.info, Node: Documentation License, Next: Concept Index, Prev: Copying, Up: Top
83169 -GNU Free Documentation License
83170 -******************************
83172 - Version 1.1, March 2000
83173 - Copyright (C) 2000 Free Software Foundation, Inc.
83174 - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
83176 - Everyone is permitted to copy and distribute verbatim copies
83177 - of this license document, but changing it is not allowed.
83179 - 0. PREAMBLE
83181 - The purpose of this License is to make a manual, textbook, or other
83182 - written document "free" in the sense of freedom: to assure everyone
83183 - the effective freedom to copy and redistribute it, with or without
83184 - modifying it, either commercially or noncommercially. Secondarily,
83185 - this License preserves for the author and publisher a way to get
83186 - credit for their work, while not being considered responsible for
83187 - modifications made by others.
83189 - This License is a kind of "copyleft", which means that derivative
83190 - works of the document must themselves be free in the same sense.
83191 - It complements the GNU General Public License, which is a copyleft
83192 - license designed for free software.
83194 - We have designed this License in order to use it for manuals for
83195 - free software, because free software needs free documentation: a
83196 - free program should come with manuals providing the same freedoms
83197 - that the software does. But this License is not limited to
83198 - software manuals; it can be used for any textual work, regardless
83199 - of subject matter or whether it is published as a printed book.
83200 - We recommend this License principally for works whose purpose is
83201 - instruction or reference.
83203 - 1. APPLICABILITY AND DEFINITIONS
83205 - This License applies to any manual or other work that contains a
83206 - notice placed by the copyright holder saying it can be distributed
83207 - under the terms of this License. The "Document", below, refers to
83208 - any such manual or work. Any member of the public is a licensee,
83209 - and is addressed as "you".
83211 - A "Modified Version" of the Document means any work containing the
83212 - Document or a portion of it, either copied verbatim, or with
83213 - modifications and/or translated into another language.
83215 - A "Secondary Section" is a named appendix or a front-matter
83216 - section of the Document that deals exclusively with the
83217 - relationship of the publishers or authors of the Document to the
83218 - Document's overall subject (or to related matters) and contains
83219 - nothing that could fall directly within that overall subject.
83220 - (For example, if the Document is in part a textbook of
83221 - mathematics, a Secondary Section may not explain any mathematics.)
83222 - The relationship could be a matter of historical connection with
83223 - the subject or with related matters, or of legal, commercial,
83224 - philosophical, ethical or political position regarding them.
83226 - The "Invariant Sections" are certain Secondary Sections whose
83227 - titles are designated, as being those of Invariant Sections, in
83228 - the notice that says that the Document is released under this
83229 - License.
83231 - The "Cover Texts" are certain short passages of text that are
83232 - listed, as Front-Cover Texts or Back-Cover Texts, in the notice
83233 - that says that the Document is released under this License.
83235 - A "Transparent" copy of the Document means a machine-readable copy,
83236 - represented in a format whose specification is available to the
83237 - general public, whose contents can be viewed and edited directly
83238 - and straightforwardly with generic text editors or (for images
83239 - composed of pixels) generic paint programs or (for drawings) some
83240 - widely available drawing editor, and that is suitable for input to
83241 - text formatters or for automatic translation to a variety of
83242 - formats suitable for input to text formatters. A copy made in an
83243 - otherwise Transparent file format whose markup has been designed
83244 - to thwart or discourage subsequent modification by readers is not
83245 - Transparent. A copy that is not "Transparent" is called "Opaque".
83247 - Examples of suitable formats for Transparent copies include plain
83248 - ASCII without markup, Texinfo input format, LaTeX input format,
83249 - SGML or XML using a publicly available DTD, and
83250 - standard-conforming simple HTML designed for human modification.
83251 - Opaque formats include PostScript, PDF, proprietary formats that
83252 - can be read and edited only by proprietary word processors, SGML
83253 - or XML for which the DTD and/or processing tools are not generally
83254 - available, and the machine-generated HTML produced by some word
83255 - processors for output purposes only.
83257 - The "Title Page" means, for a printed book, the title page itself,
83258 - plus such following pages as are needed to hold, legibly, the
83259 - material this License requires to appear in the title page. For
83260 - works in formats which do not have any title page as such, "Title
83261 - Page" means the text near the most prominent appearance of the
83262 - work's title, preceding the beginning of the body of the text.
83264 - 2. VERBATIM COPYING
83266 - You may copy and distribute the Document in any medium, either
83267 - commercially or noncommercially, provided that this License, the
83268 - copyright notices, and the license notice saying this License
83269 - applies to the Document are reproduced in all copies, and that you
83270 - add no other conditions whatsoever to those of this License. You
83271 - may not use technical measures to obstruct or control the reading
83272 - or further copying of the copies you make or distribute. However,
83273 - you may accept compensation in exchange for copies. If you
83274 - distribute a large enough number of copies you must also follow
83275 - the conditions in section 3.
83277 - You may also lend copies, under the same conditions stated above,
83278 - and you may publicly display copies.
83280 - 3. COPYING IN QUANTITY
83282 - If you publish printed copies of the Document numbering more than
83283 - 100, and the Document's license notice requires Cover Texts, you
83284 - must enclose the copies in covers that carry, clearly and legibly,
83285 - all these Cover Texts: Front-Cover Texts on the front cover, and
83286 - Back-Cover Texts on the back cover. Both covers must also clearly
83287 - and legibly identify you as the publisher of these copies. The
83288 - front cover must present the full title with all words of the
83289 - title equally prominent and visible. You may add other material
83290 - on the covers in addition. Copying with changes limited to the
83291 - covers, as long as they preserve the title of the Document and
83292 - satisfy these conditions, can be treated as verbatim copying in
83293 - other respects.
83295 - If the required texts for either cover are too voluminous to fit
83296 - legibly, you should put the first ones listed (as many as fit
83297 - reasonably) on the actual cover, and continue the rest onto
83298 - adjacent pages.
83300 - If you publish or distribute Opaque copies of the Document
83301 - numbering more than 100, you must either include a
83302 - machine-readable Transparent copy along with each Opaque copy, or
83303 - state in or with each Opaque copy a publicly-accessible
83304 - computer-network location containing a complete Transparent copy
83305 - of the Document, free of added material, which the general
83306 - network-using public has access to download anonymously at no
83307 - charge using public-standard network protocols. If you use the
83308 - latter option, you must take reasonably prudent steps, when you
83309 - begin distribution of Opaque copies in quantity, to ensure that
83310 - this Transparent copy will remain thus accessible at the stated
83311 - location until at least one year after the last time you
83312 - distribute an Opaque copy (directly or through your agents or
83313 - retailers) of that edition to the public.
83315 - It is requested, but not required, that you contact the authors of
83316 - the Document well before redistributing any large number of
83317 - copies, to give them a chance to provide you with an updated
83318 - version of the Document.
83320 - 4. MODIFICATIONS
83322 - You may copy and distribute a Modified Version of the Document
83323 - under the conditions of sections 2 and 3 above, provided that you
83324 - release the Modified Version under precisely this License, with
83325 - the Modified Version filling the role of the Document, thus
83326 - licensing distribution and modification of the Modified Version to
83327 - whoever possesses a copy of it. In addition, you must do these
83328 - things in the Modified Version:
83330 - A. Use in the Title Page (and on the covers, if any) a title
83331 - distinct from that of the Document, and from those of
83332 - previous versions (which should, if there were any, be listed
83333 - in the History section of the Document). You may use the
83334 - same title as a previous version if the original publisher of
83335 - that version gives permission.
83337 - B. List on the Title Page, as authors, one or more persons or
83338 - entities responsible for authorship of the modifications in
83339 - the Modified Version, together with at least five of the
83340 - principal authors of the Document (all of its principal
83341 - authors, if it has less than five).
83343 - C. State on the Title page the name of the publisher of the
83344 - Modified Version, as the publisher.
83346 - D. Preserve all the copyright notices of the Document.
83348 - E. Add an appropriate copyright notice for your modifications
83349 - adjacent to the other copyright notices.
83351 - F. Include, immediately after the copyright notices, a license
83352 - notice giving the public permission to use the Modified
83353 - Version under the terms of this License, in the form shown in
83354 - the Addendum below.
83356 - G. Preserve in that license notice the full lists of Invariant
83357 - Sections and required Cover Texts given in the Document's
83358 - license notice.
83360 - H. Include an unaltered copy of this License.
83362 - I. Preserve the section entitled "History", and its title, and
83363 - add to it an item stating at least the title, year, new
83364 - authors, and publisher of the Modified Version as given on
83365 - the Title Page. If there is no section entitled "History" in
83366 - the Document, create one stating the title, year, authors,
83367 - and publisher of the Document as given on its Title Page,
83368 - then add an item describing the Modified Version as stated in
83369 - the previous sentence.
83371 - J. Preserve the network location, if any, given in the Document
83372 - for public access to a Transparent copy of the Document, and
83373 - likewise the network locations given in the Document for
83374 - previous versions it was based on. These may be placed in
83375 - the "History" section. You may omit a network location for a
83376 - work that was published at least four years before the
83377 - Document itself, or if the original publisher of the version
83378 - it refers to gives permission.
83380 - K. In any section entitled "Acknowledgments" or "Dedications",
83381 - preserve the section's title, and preserve in the section all
83382 - the substance and tone of each of the contributor
83383 - acknowledgments and/or dedications given therein.
83385 - L. Preserve all the Invariant Sections of the Document,
83386 - unaltered in their text and in their titles. Section numbers
83387 - or the equivalent are not considered part of the section
83388 - titles.
83390 - M. Delete any section entitled "Endorsements". Such a section
83391 - may not be included in the Modified Version.
83393 - N. Do not retitle any existing section as "Endorsements" or to
83394 - conflict in title with any Invariant Section.
83396 - If the Modified Version includes new front-matter sections or
83397 - appendices that qualify as Secondary Sections and contain no
83398 - material copied from the Document, you may at your option
83399 - designate some or all of these sections as invariant. To do this,
83400 - add their titles to the list of Invariant Sections in the Modified
83401 - Version's license notice. These titles must be distinct from any
83402 - other section titles.
83404 - You may add a section entitled "Endorsements", provided it contains
83405 - nothing but endorsements of your Modified Version by various
83406 - parties--for example, statements of peer review or that the text
83407 - has been approved by an organization as the authoritative
83408 - definition of a standard.
83410 - You may add a passage of up to five words as a Front-Cover Text,
83411 - and a passage of up to 25 words as a Back-Cover Text, to the end
83412 - of the list of Cover Texts in the Modified Version. Only one
83413 - passage of Front-Cover Text and one of Back-Cover Text may be
83414 - added by (or through arrangements made by) any one entity. If the
83415 - Document already includes a cover text for the same cover,
83416 - previously added by you or by arrangement made by the same entity
83417 - you are acting on behalf of, you may not add another; but you may
83418 - replace the old one, on explicit permission from the previous
83419 - publisher that added the old one.
83421 - The author(s) and publisher(s) of the Document do not by this
83422 - License give permission to use their names for publicity for or to
83423 - assert or imply endorsement of any Modified Version.
83425 - 5. COMBINING DOCUMENTS
83427 - You may combine the Document with other documents released under
83428 - this License, under the terms defined in section 4 above for
83429 - modified versions, provided that you include in the combination
83430 - all of the Invariant Sections of all of the original documents,
83431 - unmodified, and list them all as Invariant Sections of your
83432 - combined work in its license notice.
83434 - The combined work need only contain one copy of this License, and
83435 - multiple identical Invariant Sections may be replaced with a single
83436 - copy. If there are multiple Invariant Sections with the same name
83437 - but different contents, make the title of each such section unique
83438 - by adding at the end of it, in parentheses, the name of the
83439 - original author or publisher of that section if known, or else a
83440 - unique number. Make the same adjustment to the section titles in
83441 - the list of Invariant Sections in the license notice of the
83442 - combined work.
83444 - In the combination, you must combine any sections entitled
83445 - "History" in the various original documents, forming one section
83446 - entitled "History"; likewise combine any sections entitled
83447 - "Acknowledgments", and any sections entitled "Dedications". You
83448 - must delete all sections entitled "Endorsements."
83450 - 6. COLLECTIONS OF DOCUMENTS
83452 - You may make a collection consisting of the Document and other
83453 - documents released under this License, and replace the individual
83454 - copies of this License in the various documents with a single copy
83455 - that is included in the collection, provided that you follow the
83456 - rules of this License for verbatim copying of each of the
83457 - documents in all other respects.
83459 - You may extract a single document from such a collection, and
83460 - distribute it individually under this License, provided you insert
83461 - a copy of this License into the extracted document, and follow
83462 - this License in all other respects regarding verbatim copying of
83463 - that document.
83465 - 7. AGGREGATION WITH INDEPENDENT WORKS
83467 - A compilation of the Document or its derivatives with other
83468 - separate and independent documents or works, in or on a volume of
83469 - a storage or distribution medium, does not as a whole count as a
83470 - Modified Version of the Document, provided no compilation
83471 - copyright is claimed for the compilation. Such a compilation is
83472 - called an "aggregate", and this License does not apply to the
83473 - other self-contained works thus compiled with the Document, on
83474 - account of their being thus compiled, if they are not themselves
83475 - derivative works of the Document.
83477 - If the Cover Text requirement of section 3 is applicable to these
83478 - copies of the Document, then if the Document is less than one
83479 - quarter of the entire aggregate, the Document's Cover Texts may be
83480 - placed on covers that surround only the Document within the
83481 - aggregate. Otherwise they must appear on covers around the whole
83482 - aggregate.
83484 - 8. TRANSLATION
83486 - Translation is considered a kind of modification, so you may
83487 - distribute translations of the Document under the terms of section
83488 - 4. Replacing Invariant Sections with translations requires special
83489 - permission from their copyright holders, but you may include
83490 - translations of some or all Invariant Sections in addition to the
83491 - original versions of these Invariant Sections. You may include a
83492 - translation of this License provided that you also include the
83493 - original English version of this License. In case of a
83494 - disagreement between the translation and the original English
83495 - version of this License, the original English version will prevail.
83497 - 9. TERMINATION
83499 - You may not copy, modify, sublicense, or distribute the Document
83500 - except as expressly provided for under this License. Any other
83501 - attempt to copy, modify, sublicense or distribute the Document is
83502 - void, and will automatically terminate your rights under this
83503 - License. However, parties who have received copies, or rights,
83504 - from you under this License will not have their licenses
83505 - terminated so long as such parties remain in full compliance.
83507 - 10. FUTURE REVISIONS OF THIS LICENSE
83509 - The Free Software Foundation may publish new, revised versions of
83510 - the GNU Free Documentation License from time to time. Such new
83511 - versions will be similar in spirit to the present version, but may
83512 - differ in detail to address new problems or concerns. See
83513 - `http://www.gnu.org/copyleft/'.
83515 - Each version of the License is given a distinguishing version
83516 - number. If the Document specifies that a particular numbered
83517 - version of this License "or any later version" applies to it, you
83518 - have the option of following the terms and conditions either of
83519 - that specified version or of any later version that has been
83520 - published (not as a draft) by the Free Software Foundation. If
83521 - the Document does not specify a version number of this License,
83522 - you may choose any version ever published (not as a draft) by the
83523 - Free Software Foundation.
83525 -ADDENDUM: How to use this License for your documents
83526 -----------------------------------------------------
83528 - To use this License in a document you have written, include a copy of
83529 -the License in the document and put the following copyright and license
83530 -notices just after the title page:
83532 - Copyright (C) YEAR YOUR NAME.
83533 - Permission is granted to copy, distribute and/or modify this document
83534 - under the terms of the GNU Free Documentation License, Version 1.1
83535 - or any later version published by the Free Software Foundation;
83536 - with the Invariant Sections being LIST THEIR TITLES, with the
83537 - Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
83538 - A copy of the license is included in the section entitled ``GNU
83539 - Free Documentation License''.
83541 - If you have no Invariant Sections, write "with no Invariant Sections"
83542 -instead of saying which ones are invariant. If you have no Front-Cover
83543 -Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being
83544 -LIST"; likewise for Back-Cover Texts.
83546 - If your document contains nontrivial examples of program code, we
83547 -recommend releasing these examples in parallel under your choice of
83548 -free software license, such as the GNU General Public License, to
83549 -permit their use in free software.
83551 diff -u -udbrN glibc-2.3.2/manual/libc.info-57 glibc-2.3.2-200304020432/manual/libc.info-57
83552 --- glibc-2.3.2/manual/libc.info-57 Sat Mar 1 02:39:41 2003
83553 +++ glibc-2.3.2-200304020432/manual/libc.info-57 Thu Jan 1 01:00:00 1970
83554 @@ -1,1087 +0,0 @@
83555 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
83557 -INFO-DIR-SECTION GNU libraries
83558 -START-INFO-DIR-ENTRY
83559 -* Libc: (libc). C library.
83560 -END-INFO-DIR-ENTRY
83562 - This file documents the GNU C library.
83564 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
83565 -Reference Manual', for Version 2.3.x.
83567 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
83568 -Free Software Foundation, Inc.
83570 - Permission is granted to copy, distribute and/or modify this document
83571 -under the terms of the GNU Free Documentation License, Version 1.1 or
83572 -any later version published by the Free Software Foundation; with the
83573 -Invariant Sections being "Free Software Needs Free Documentation" and
83574 -"GNU Lesser General Public License", the Front-Cover texts being (a)
83575 -(see below), and with the Back-Cover Texts being (b) (see below). A
83576 -copy of the license is included in the section entitled "GNU Free
83577 -Documentation License".
83579 - (a) The FSF's Front-Cover Text is:
83581 - A GNU Manual
83583 - (b) The FSF's Back-Cover Text is:
83585 - You have freedom to copy and modify this GNU Manual, like GNU
83586 -software. Copies published by the Free Software Foundation raise
83587 -funds for GNU development.
83589 -\x1f
83590 -File: libc.info, Node: Concept Index, Next: Type Index, Prev: Documentation License, Up: Top
83592 -Concept Index
83593 -*************
83595 -* Menu:
83597 -* /etc/hostname: Host Identification.
83598 -* /etc/nsswitch.conf: NSS Configuration File.
83599 -* 4.N BSD Unix: Berkeley Unix.
83600 -* __va_copy: Copying and Concatenation.
83601 -* _POSIX_OPTION_ORDER environment variable.: Standard Environment.
83602 -* _POSIX_SAVED_IDS: How Change Persona.
83603 -* abort signal: Program Error Signals.
83604 -* aborting a program: Aborting a Program.
83605 -* absolute file name: File Name Resolution.
83606 -* absolute priority: Absolute Priority.
83607 -* absolute value functions: Absolute Value.
83608 -* accepting connections: Accepting Connections.
83609 -* access permission for a file: Access Permission.
83610 -* access, testing for: Testing File Access.
83611 -* accessing directories: Accessing Directories.
83612 -* address of socket: Socket Addresses.
83613 -* address space <1>: Program Basics.
83614 -* address space: Memory Subsystem.
83615 -* alarm signal: Alarm Signals.
83616 -* alarms, setting: Setting an Alarm.
83617 -* alignment (in obstacks): Obstacks Data Alignment.
83618 -* alignment (with malloc): Aligned Memory Blocks.
83619 -* alloca disadvantages: Disadvantages of Alloca.
83620 -* alloca function: Variable Size Automatic.
83621 -* allocating pseudo-terminals: Allocation.
83622 -* allocation (obstacks): Allocation in an Obstack.
83623 -* allocation debugging: Allocation Debugging.
83624 -* allocation hooks, for malloc: Hooks for Malloc.
83625 -* allocation of memory with malloc: Basic Allocation.
83626 -* allocation size of string: Representation of Strings.
83627 -* allocation statistics: Statistics of Malloc.
83628 -* alphabetic character <1>: Classification of Wide Characters.
83629 -* alphabetic character: Classification of Characters.
83630 -* alphanumeric character <1>: Classification of Wide Characters.
83631 -* alphanumeric character: Classification of Characters.
83632 -* append-access files: File Position.
83633 -* argc (program argument count): Program Arguments.
83634 -* argp (program argument parser): Argp.
83635 -* argp parser functions: Argp Parser Functions.
83636 -* ARGP_HELP_FMT environment variable: Argp User Customization.
83637 -* argument parsing with argp: Argp.
83638 -* argument promotion: Calling Variadics.
83639 -* argument vectors, null-character separated: Argz and Envz Vectors.
83640 -* arguments (variadic functions): Receiving Arguments.
83641 -* arguments, how many: How Many Arguments.
83642 -* arguments, to program: Program Arguments.
83643 -* argv (program argument vector): Program Arguments.
83644 -* argz vectors (string vectors): Argz and Envz Vectors.
83645 -* arithmetic expansion: Expansion Stages.
83646 -* array comparison functions: String/Array Comparison.
83647 -* array copy functions: Copying and Concatenation.
83648 -* array search function: Array Search Function.
83649 -* array sort function: Array Sort Function.
83650 -* ASCII character: Classification of Characters.
83651 -* assertions: Consistency Checking.
83652 -* attributes of a file: Attribute Meanings.
83653 -* automatic freeing: Variable Size Automatic.
83654 -* automatic memory allocation: Memory Allocation and C.
83655 -* automatic storage class: Memory Allocation and C.
83656 -* automatic storage with variable size: Variable Size Automatic.
83657 -* background job: Concepts of Job Control.
83658 -* background job, launching: Foreground and Background.
83659 -* backtrace: Backtraces.
83660 -* backtrace_fd: Backtraces.
83661 -* backtrace_symbols: Backtraces.
83662 -* base (of floating point number): Floating Point Concepts.
83663 -* baud rate: Line Speed.
83664 -* Berkeley Unix: Berkeley Unix.
83665 -* Bessel functions: Special Functions.
83666 -* bias (of floating point number exponent): Floating Point Concepts.
83667 -* big-endian: Byte Order.
83668 -* binary I/O to a stream: Block Input/Output.
83669 -* binary search function (for arrays): Array Search Function.
83670 -* binary stream: Binary Streams.
83671 -* binding a socket address: Socket Addresses.
83672 -* blank character <1>: Classification of Wide Characters.
83673 -* blank character: Classification of Characters.
83674 -* block I/O to a stream: Block Input/Output.
83675 -* blocked signals: Delivery of Signal.
83676 -* blocked signals, checking for: Checking for Pending Signals.
83677 -* blocking signals: Blocking Signals.
83678 -* blocking signals, in a handler: Blocking for Handler.
83679 -* bootstrapping, and services: Actions in the NSS configuration.
83680 -* break condition, detecting: Input Modes.
83681 -* break condition, generating: Line Control.
83682 -* breaking a string into tokens: Finding Tokens in a String.
83683 -* broken pipe signal: Operation Error Signals.
83684 -* broken-down time <1>: Broken-down Time.
83685 -* broken-down time: Calendar Time.
83686 -* BSD compatibility library: Process Group Functions.
83687 -* BSD compatibility library.: Feature Test Macros.
83688 -* BSD Unix: Berkeley Unix.
83689 -* buffering of streams: Stream Buffering.
83690 -* buffering, controlling: Controlling Buffering.
83691 -* bugs, reporting: Reporting Bugs.
83692 -* bus error: Program Error Signals.
83693 -* butterfly: Misc FP Arithmetic.
83694 -* byte order conversion, for socket: Byte Order.
83695 -* byte stream: Socket Concepts.
83696 -* C++ streams: Streams and I18N.
83697 -* calendar time: Time Basics.
83698 -* calendar time and broken-down time: Broken-down Time.
83699 -* calendar, Gregorian: Calendar Time.
83700 -* calling variadic functions: Calling Variadics.
83701 -* canonical input processing: Canonical or Not.
83702 -* capacity limits, POSIX: General Limits.
83703 -* carrier detect: Control Modes.
83704 -* case conversion of characters: Case Conversion.
83705 -* catching signals: Delivery of Signal.
83706 -* categories for locales: Locale Categories.
83707 -* change working directory: Working Directory.
83708 -* changing the locale: Setting the Locale.
83709 -* changing the size of a block (malloc): Changing Block Size.
83710 -* changing the size of a block (obstacks): Growing Objects.
83711 -* channels: Stream/Descriptor Precautions.
83712 -* character case conversion: Case Conversion.
83713 -* character predicates: Classification of Characters.
83714 -* character testing: Classification of Characters.
83715 -* checking for pending signals: Checking for Pending Signals.
83716 -* child process <1>: Process Creation Concepts.
83717 -* child process <2>: Processes.
83718 -* child process: Processor Time.
83719 -* child process signal: Job Control Signals.
83720 -* chunks: Obstack Chunks.
83721 -* classes, floating-point: Floating Point Classes.
83722 -* classification of characters: Classification of Characters.
83723 -* cleaning up a stream: Linked Channels.
83724 -* clearing terminal input queue: Line Control.
83725 -* client: Connections.
83726 -* clock ticks: Processor And CPU Time.
83727 -* clock, high accuracy: High Accuracy Clock.
83728 -* close-on-exec (file descriptor flag): Descriptor Flags.
83729 -* closing a file descriptor: Opening and Closing Files.
83730 -* closing a socket: Closing a Socket.
83731 -* closing a stream: Closing Streams.
83732 -* collating strings: Collation Functions.
83733 -* combining locales: Choosing Locale.
83734 -* command argument syntax: Argument Syntax.
83735 -* command arguments, parsing: Parsing Program Arguments.
83736 -* command line arguments: Program Arguments.
83737 -* command substitution: Expansion Stages.
83738 -* communication style (of a socket): Socket Concepts.
83739 -* comparing strings and arrays: String/Array Comparison.
83740 -* Comparison Function: Comparison Functions.
83741 -* compiling: Configuring and compiling.
83742 -* complex exponentiation functions: Exponents and Logarithms.
83743 -* complex logarithm functions: Exponents and Logarithms.
83744 -* complex numbers: Complex Numbers.
83745 -* complex trigonometric functions: Trig Functions.
83746 -* concatenating strings: Copying and Concatenation.
83747 -* configurations, all supported: Supported Configurations.
83748 -* configuring: Configuring and compiling.
83749 -* conjugate complex numbers: Operations on Complex.
83750 -* connecting a socket: Connecting.
83751 -* connection: Connections.
83752 -* consistency checking: Consistency Checking.
83753 -* consistency checking, of heap: Heap Consistency Checking.
83754 -* constants <1>: Mathematical Constants.
83755 -* constants: Memory Concepts.
83756 -* continue signal: Job Control Signals.
83757 -* control character <1>: Classification of Wide Characters.
83758 -* control character: Classification of Characters.
83759 -* control operations on files: Control Operations.
83760 -* controlling process: Controlling Terminal.
83761 -* controlling terminal: Concepts of Job Control.
83762 -* controlling terminal, access to: Access to the Terminal.
83763 -* controlling terminal, determining: Identifying the Terminal.
83764 -* controlling terminal, setting: Open-time Flags.
83765 -* conversion specifications (printf): Formatted Output Basics.
83766 -* conversion specifications (scanf): Formatted Input Basics.
83767 -* converting byte order: Byte Order.
83768 -* converting case of characters: Case Conversion.
83769 -* converting file descriptor to stream: Descriptors and Streams.
83770 -* converting floats to integers: Rounding Functions.
83771 -* converting group ID to group name: Lookup Group.
83772 -* converting group name to group ID: Lookup Group.
83773 -* converting host address to name: Host Names.
83774 -* converting host name to address: Host Names.
83775 -* converting network name to network number: Networks Database.
83776 -* converting network number to network name: Networks Database.
83777 -* converting port number to service name: Services Database.
83778 -* converting service name to port number: Services Database.
83779 -* converting string to collation order: Collation Functions.
83780 -* converting strings to numbers: Parsing of Numbers.
83781 -* converting user ID to user name: Lookup User.
83782 -* converting user name to user ID: Lookup User.
83783 -* cookie, for custom stream: Streams and Cookies.
83784 -* copy-on-write page fault: Locked Memory Details.
83785 -* copying strings and arrays: Copying and Concatenation.
83786 -* cpu priority: Priority.
83787 -* CPU time <1>: Processor Time.
83788 -* CPU time <2>: Processor And CPU Time.
83789 -* CPU time: Time Basics.
83790 -* create on open (file status flag): Open-time Flags.
83791 -* creating a directory: Creating Directories.
83792 -* creating a FIFO special file: FIFO Special Files.
83793 -* creating a pipe: Creating a Pipe.
83794 -* creating a pipe to a subprocess: Pipe to a Subprocess.
83795 -* creating a process: Process Creation Concepts.
83796 -* creating a socket: Creating a Socket.
83797 -* creating a socket pair: Socket Pairs.
83798 -* creating special files: Making Special Files.
83799 -* cube root function: Exponents and Logarithms.
83800 -* currency symbols: Currency Symbol.
83801 -* current limit: Limits on Resources.
83802 -* current working directory: Working Directory.
83803 -* custom streams: Custom Streams.
83804 -* customizing printf: Customizing Printf.
83805 -* data loss on sockets: Socket Concepts.
83806 -* databases: Name Service Switch.
83807 -* datagram socket: Datagrams.
83808 -* datagrams, transmitting: Sending Datagrams.
83809 -* date: Time Basics.
83810 -* Daylight Saving Time: Broken-down Time.
83811 -* decimal digit character: Classification of Characters.
83812 -* decimal-point separator: General Numeric.
83813 -* declaration (compared to definition): Header Files.
83814 -* declaring variadic functions: Calling Variadics.
83815 -* decompose complex numbers: Operations on Complex.
83816 -* default action (for a signal): Delivery of Signal.
83817 -* default action for a signal: Basic Signal Handling.
83818 -* default argument promotions: Calling Variadics.
83819 -* default value, and NSS: Notes on NSS Configuration File.
83820 -* defining new printf conversions: Customizing Printf.
83821 -* definition (compared to declaration): Header Files.
83822 -* delayed suspend character: Signal Characters.
83823 -* deleting a directory: Deleting Files.
83824 -* deleting a file: Deleting Files.
83825 -* delivery of signals: Delivery of Signal.
83826 -* descriptors and streams: Stream/Descriptor Precautions.
83827 -* digit character <1>: Classification of Wide Characters.
83828 -* digit character: Classification of Characters.
83829 -* directories, accessing: Accessing Directories.
83830 -* directories, creating: Creating Directories.
83831 -* directories, deleting: Deleting Files.
83832 -* directory: Directories.
83833 -* directory entry: Directories.
83834 -* directory hierarchy: Working with Directory Trees.
83835 -* directory stream: Accessing Directories.
83836 -* disadvantages of alloca: Disadvantages of Alloca.
83837 -* DISCARD character: Other Special.
83838 -* division by zero: FP Exceptions.
83839 -* DNS: Host Identification.
83840 -* DNS server unavailable: Actions in the NSS configuration.
83841 -* domain (of socket): Socket Concepts.
83842 -* domain error: Math Error Reporting.
83843 -* domain name: Host Identification.
83844 -* Domain Name System: Host Identification.
83845 -* dot notation, for Internet addresses: Abstract Host Addresses.
83846 -* DSUSP character: Signal Characters.
83847 -* duplicating file descriptors: Duplicating Descriptors.
83848 -* dynamic memory allocation: Memory Allocation and C.
83849 -* EBCDIC: Extended Char Intro.
83850 -* echo of terminal input: Local Modes.
83851 -* effective group ID: Process Persona.
83852 -* effective user ID: Process Persona.
83853 -* efficiency and malloc: Efficiency and Malloc.
83854 -* efficiency and obstacks: Extra Fast Growing.
83855 -* efficiency of chunks: Obstack Chunks.
83856 -* EINTR, and restarting interrupted primitives: Interrupted Primitives.
83857 -* elapsed time <1>: Elapsed Time.
83858 -* elapsed time: Time Basics.
83859 -* encryption: Trivial Encryption.
83860 -* end of file, on a stream: EOF and Errors.
83861 -* end-of-file, on a file descriptor: I/O Primitives.
83862 -* environment: Environment Variables.
83863 -* environment access: Environment Access.
83864 -* environment representation: Environment Access.
83865 -* environment variable: Environment Variables.
83866 -* environment vectors, null-character separated: Argz and Envz Vectors.
83867 -* envz vectors (environment vectors): Argz and Envz Vectors.
83868 -* EOF character: Editing Characters.
83869 -* EOL character: Editing Characters.
83870 -* EOL2 character: Editing Characters.
83871 -* epoch: Simple Calendar Time.
83872 -* ERASE character: Editing Characters.
83873 -* errno: System Calls.
83874 -* error codes: Error Reporting.
83875 -* error messages, in argp: Argp Helper Functions.
83876 -* error reporting: Error Reporting.
83877 -* errors, mathematical: Math Error Reporting.
83878 -* establishing a handler: Signal Actions.
83879 -* ethers: NSS Basics.
83880 -* EUC: Extended Char Intro.
83881 -* EUC-JP: glibc iconv Implementation.
83882 -* exception <1>: Program Error Signals.
83883 -* exception: FP Exceptions.
83884 -* exclusive lock: File Locks.
83885 -* exec functions: Executing a File.
83886 -* execing a program: Memory Concepts.
83887 -* executable: Memory Concepts.
83888 -* executing a file: Executing a File.
83889 -* exit status: Exit Status.
83890 -* exit status value: Program Termination.
83891 -* exiting a program: Memory Concepts.
83892 -* expansion of shell words: Word Expansion.
83893 -* exponent (of floating point number): Floating Point Concepts.
83894 -* exponentiation functions: Exponents and Logarithms.
83895 -* extending printf: Customizing Printf.
83896 -* extracting file descriptor from stream: Descriptors and Streams.
83897 -* fcntl function: Control Operations.
83898 -* FDL, GNU Free Documentation License: Documentation License.
83899 -* feature test macros: Feature Test Macros.
83900 -* field splitting: Expansion Stages.
83901 -* FIFO special file: Pipes and FIFOs.
83902 -* file access permission: Access Permission.
83903 -* file access time: File Times.
83904 -* file attribute modification time: File Times.
83905 -* file attributes: Attribute Meanings.
83906 -* file creation mask: Setting Permissions.
83907 -* file descriptor flags: Descriptor Flags.
83908 -* file descriptor sets, for select: Waiting for I/O.
83909 -* file descriptors, standard: Descriptors and Streams.
83910 -* file locks: File Locks.
83911 -* file modification time: File Times.
83912 -* file name: File Names.
83913 -* file name component: Directories.
83914 -* file name errors: File Name Errors.
83915 -* file name resolution: File Name Resolution.
83916 -* file name translation flags: Open-time Flags.
83917 -* file names, multiple: Hard Links.
83918 -* file owner: File Owner.
83919 -* file permission bits: Permission Bits.
83920 -* file pointer: Streams.
83921 -* file position: File Position.
83922 -* file positioning on a file descriptor: File Position Primitive.
83923 -* file positioning on a stream: File Positioning.
83924 -* file status flags: File Status Flags.
83925 -* files, accessing: Memory Concepts.
83926 -* filtering i/o through subprocess: Pipe to a Subprocess.
83927 -* flag character (printf): Output Conversion Syntax.
83928 -* flag character (scanf): Input Conversion Syntax.
83929 -* flags for sigaction: Flags for Sigaction.
83930 -* flags, file name translation: Open-time Flags.
83931 -* flags, open-time action: Open-time Flags.
83932 -* floating point: Floating Point Numbers.
83933 -* floating point, IEEE: IEEE Floating Point.
83934 -* floating type measurements: Floating Type Macros.
83935 -* floating-point classes: Floating Point Classes.
83936 -* floating-point exception: Program Error Signals.
83937 -* flow control, terminal: Line Control.
83938 -* flushing a stream: Flushing Buffers.
83939 -* flushing terminal output queue: Line Control.
83940 -* foreground job: Concepts of Job Control.
83941 -* foreground job, launching: Foreground and Background.
83942 -* forking a process: Process Creation Concepts.
83943 -* format string, for printf: Formatted Output.
83944 -* format string, for scanf: Formatted Input.
83945 -* formatted input from a stream: Formatted Input.
83946 -* formatted messages: Formatted Messages.
83947 -* formatted output to a stream: Formatted Output.
83948 -* FP arithmetic: FP Bit Twiddling.
83949 -* FQDN: Host Identification.
83950 -* frame, real memory: Memory Concepts.
83951 -* free documentation: Free Manuals.
83952 -* freeing (obstacks): Freeing Obstack Objects.
83953 -* freeing memory: Memory Concepts.
83954 -* freeing memory allocated with malloc: Freeing after Malloc.
83955 -* fully buffered stream: Buffering Concepts.
83956 -* function prototypes (variadic): Variadic Prototypes.
83957 -* gamma function: Special Functions.
83958 -* gcvt_r: System V Number Conversion.
83959 -* gencat: The gencat program.
83960 -* generation of signals: Signal Generation.
83961 -* generic i/o control operations: IOCTLs.
83962 -* globbing: Globbing.
83963 -* graphic character <1>: Classification of Wide Characters.
83964 -* graphic character: Classification of Characters.
83965 -* Gregorian calendar: Calendar Time.
83966 -* group: NSS Basics.
83967 -* group database: Group Database.
83968 -* group ID: User and Group IDs.
83969 -* group name: User and Group IDs.
83970 -* group owner of a file: File Owner.
83971 -* grouping of digits: General Numeric.
83972 -* growing objects (in obstacks): Growing Objects.
83973 -* handling multiple signals: Merged Signals.
83974 -* hangup signal: Termination Signals.
83975 -* hard limit: Limits on Resources.
83976 -* hard link: Hard Links.
83977 -* header files: Header Files.
83978 -* heap consistency checking: Heap Consistency Checking.
83979 -* heap, dynamic allocation from: Unconstrained Allocation.
83980 -* heap, freeing memory from: Freeing after Malloc.
83981 -* hexadecimal digit character <1>: Classification of Wide Characters.
83982 -* hexadecimal digit character: Classification of Characters.
83983 -* hidden bit (of floating point number mantissa): Floating Point Concepts.
83984 -* hierarchy, directory: Working with Directory Trees.
83985 -* high-priority data: Out-of-Band Data.
83986 -* high-resolution time: Calendar Time.
83987 -* holes in files: File Position Primitive.
83988 -* home directory: Standard Environment.
83989 -* HOME environment variable: Standard Environment.
83990 -* hook functions (of custom streams): Hook Functions.
83991 -* host address, Internet: Abstract Host Addresses.
83992 -* host name: Host Identification.
83993 -* hostname: Host Identification.
83994 -* hosts: NSS Basics.
83995 -* hosts database: Host Names.
83996 -* how many arguments: How Many Arguments.
83997 -* hyperbolic functions: Hyperbolic Functions.
83998 -* identifying terminals: Is It a Terminal.
83999 -* IEEE 754: Floating Point Numbers.
84000 -* IEEE floating point: Floating Point Numbers.
84001 -* IEEE floating point representation: IEEE Floating Point.
84002 -* IEEE Std 1003.1: POSIX.
84003 -* IEEE Std 1003.2: POSIX.
84004 -* ignore action for a signal: Basic Signal Handling.
84005 -* illegal instruction: Program Error Signals.
84006 -* impossible events: Consistency Checking.
84007 -* independent channels: Independent Channels.
84008 -* inexact exception: FP Exceptions.
84009 -* infinity: Infinity and NaN.
84010 -* initial signal actions: Initial Signal Actions.
84011 -* inode number: Attribute Meanings.
84012 -* input available signal: Asynchronous I/O Signals.
84013 -* input conversions, for scanf: Table of Input Conversions.
84014 -* input from multiple files: Waiting for I/O.
84015 -* installation tools: Tools for Compilation.
84016 -* installing: Running make install.
84017 -* integer: Integers.
84018 -* integer division functions: Integer Division.
84019 -* integer type range: Range of Type.
84020 -* integer type width: Width of Type.
84021 -* interactive signals, from terminal: Local Modes.
84022 -* interactive stop signal: Job Control Signals.
84023 -* internal representation: Extended Char Intro.
84024 -* internationalization: Locales.
84025 -* Internet host address: Abstract Host Addresses.
84026 -* Internet namespace, for sockets: Internet Namespace.
84027 -* interprocess communication, with FIFO: FIFO Special Files.
84028 -* interprocess communication, with pipes: Creating a Pipe.
84029 -* interprocess communication, with signals: Kill Example.
84030 -* interprocess communication, with sockets: Sockets.
84031 -* interrupt character: Signal Characters.
84032 -* interrupt signal: Termination Signals.
84033 -* interrupt-driven input: Interrupt Input.
84034 -* interrupting primitives: Interrupted Primitives.
84035 -* interval: Time Basics.
84036 -* interval timer, setting: Setting an Alarm.
84037 -* INTR character: Signal Characters.
84038 -* invalid exception: FP Exceptions.
84039 -* inverse complex hyperbolic functions: Hyperbolic Functions.
84040 -* inverse complex trigonometric functions: Inverse Trig Functions.
84041 -* inverse hyperbolic functions: Hyperbolic Functions.
84042 -* inverse trigonometric functions: Inverse Trig Functions.
84043 -* invocation of program: Program Arguments.
84044 -* IOCTLs: IOCTLs.
84045 -* ISO 10646: Extended Char Intro.
84046 -* ISO 2022: Extended Char Intro.
84047 -* ISO 6937: Extended Char Intro.
84048 -* ISO C: ISO C.
84049 -* ISO-2022-JP: glibc iconv Implementation.
84050 -* ISO/IEC 9945-1: POSIX.
84051 -* ISO/IEC 9945-2: POSIX.
84052 -* job: Job Control.
84053 -* job control: Job Control.
84054 -* job control functions: Functions for Job Control.
84055 -* job control is optional: Job Control is Optional.
84056 -* job control signals: Job Control Signals.
84057 -* job control, enabling: Initializing the Shell.
84058 -* Kermit the frog: Search/Sort Example.
84059 -* kernel call: System Calls.
84060 -* kernel header files: Linux.
84061 -* KILL character: Editing Characters.
84062 -* kill signal: Termination Signals.
84063 -* killing a process: Signaling Another Process.
84064 -* Korn Shell: Wildcard Matching.
84065 -* LANG environment variable <1>: Standard Environment.
84066 -* LANG environment variable: The catgets Functions.
84067 -* launching jobs: Launching Jobs.
84068 -* LC_ALL environment variable <1>: Standard Environment.
84069 -* LC_ALL environment variable: The catgets Functions.
84070 -* LC_COLLATE environment variable: Standard Environment.
84071 -* LC_CTYPE environment variable: Standard Environment.
84072 -* LC_MESSAGES environment variable <1>: Standard Environment.
84073 -* LC_MESSAGES environment variable: The catgets Functions.
84074 -* LC_MONETARY environment variable: Standard Environment.
84075 -* LC_NUMERIC environment variable: Standard Environment.
84076 -* LC_TIME environment variable: Standard Environment.
84077 -* leap second: Broken-down Time.
84078 -* length of string: Representation of Strings.
84079 -* level, for socket options: Socket Options.
84080 -* LGPL, Lesser General Public License: Copying.
84081 -* library: Introduction.
84082 -* limit: Limits on Resources.
84083 -* limits on resource usage: Limits on Resources.
84084 -* limits, file name length: Limits for Files.
84085 -* limits, floating types: Floating Type Macros.
84086 -* limits, integer types: Range of Type.
84087 -* limits, link count of files: Limits for Files.
84088 -* limits, number of open files: General Limits.
84089 -* limits, number of processes: General Limits.
84090 -* limits, number of supplementary group IDs: General Limits.
84091 -* limits, pipe buffer size: Limits for Files.
84092 -* limits, POSIX: General Limits.
84093 -* limits, program argument size: General Limits.
84094 -* limits, terminal input queue: Limits for Files.
84095 -* limits, time zone name length: General Limits.
84096 -* line buffered stream: Buffering Concepts.
84097 -* line speed: Line Speed.
84098 -* lines (in a text file): Binary Streams.
84099 -* link: Directories.
84100 -* link, hard: Hard Links.
84101 -* link, soft: Symbolic Links.
84102 -* link, symbolic: Symbolic Links.
84103 -* linked channels: Linked Channels.
84104 -* listening (sockets): Listening.
84105 -* literals: Memory Concepts.
84106 -* little-endian: Byte Order.
84107 -* LNEXT character: Other Special.
84108 -* load average: Processor Resources.
84109 -* local namespace, for sockets: Local Namespace.
84110 -* local network address number: Abstract Host Addresses.
84111 -* local time: Calendar Time.
84112 -* locale categories: Locale Categories.
84113 -* locale, changing: Setting the Locale.
84114 -* locales: Locales.
84115 -* locking pages: Locking Pages.
84116 -* logarithm functions: Exponents and Logarithms.
84117 -* login name: User and Group IDs.
84118 -* login name, determining: Who Logged In.
84119 -* LOGNAME environment variable: Standard Environment.
84120 -* long jumps: Non-Local Exits.
84121 -* long-named options: Argument Syntax.
84122 -* longjmp: Advantages of Alloca.
84123 -* loss of data on sockets: Socket Concepts.
84124 -* lost resource signal: Operation Error Signals.
84125 -* lower-case character <1>: Classification of Wide Characters.
84126 -* lower-case character: Classification of Characters.
84127 -* macros: Obstack Functions.
84128 -* main function: Program Arguments.
84129 -* malloc debugger: Allocation Debugging.
84130 -* malloc function: Unconstrained Allocation.
84131 -* mantissa (of floating point number): Floating Point Concepts.
84132 -* matching failure, in scanf: Formatted Input Basics.
84133 -* math errors: Errors in Math Functions.
84134 -* mathematical constants: Mathematical Constants.
84135 -* maximum: Misc FP Arithmetic.
84136 -* maximum field width (scanf): Input Conversion Syntax.
84137 -* maximum limit: Limits on Resources.
84138 -* maximum possible integer: Integers.
84139 -* measurements of floating types: Floating Type Macros.
84140 -* memory allocation: Memory.
84141 -* memory lock: Locking Pages.
84142 -* memory mapped file: Memory Concepts.
84143 -* memory mapped I/O: Memory Concepts.
84144 -* memory page: Memory Subsystem.
84145 -* merging of signals: Merged Signals.
84146 -* MIN termios slot: Noncanonical Input.
84147 -* minimum: Misc FP Arithmetic.
84148 -* minimum field width (printf): Output Conversion Syntax.
84149 -* minimum possible integer: Integers.
84150 -* mixing descriptors and streams: Stream/Descriptor Precautions.
84151 -* modem disconnect: Control Modes.
84152 -* modem status lines: Control Modes.
84153 -* monetary value formatting: The Lame Way to Locale Data.
84154 -* multi-threaded application: Streams and Threads.
84155 -* multibyte character: Extended Char Intro.
84156 -* multibyte character string: Representation of Strings.
84157 -* multibyte string: Representation of Strings.
84158 -* multiple names for one file: Hard Links.
84159 -* multiplexing input: Waiting for I/O.
84160 -* multiply-add: Misc FP Arithmetic.
84161 -* name of running program: Error Messages.
84162 -* name of socket: Socket Addresses.
84163 -* Name Service Switch: Name Service Switch.
84164 -* name space: Reserved Names.
84165 -* names of signals: Standard Signals.
84166 -* namespace (of socket): Socket Concepts.
84167 -* NaN <1>: FP Bit Twiddling.
84168 -* NaN: Infinity and NaN.
84169 -* Netgroup: Netgroup Data.
84170 -* netgroup: NSS Basics.
84171 -* network byte order: Byte Order.
84172 -* network number: Abstract Host Addresses.
84173 -* network protocol: Socket Concepts.
84174 -* networks: NSS Basics.
84175 -* networks database: Networks Database.
84176 -* NIS: Host Identification.
84177 -* NIS domain name: Host Identification.
84178 -* nisplus, and booting: Actions in the NSS configuration.
84179 -* nisplus, and completeness: Actions in the NSS configuration.
84180 -* NLSPATH environment variable <1>: Standard Environment.
84181 -* NLSPATH environment variable: The catgets Functions.
84182 -* non-blocking open: Open-time Flags.
84183 -* non-local exit, from signal handler: Longjmp in Handler.
84184 -* non-local exits: Non-Local Exits.
84185 -* noncanonical input processing: Canonical or Not.
84186 -* normalization functions (floating-point): Normalization Functions.
84187 -* normalized floating point number: Floating Point Concepts.
84188 -* not a number: Infinity and NaN.
84189 -* NSS: Name Service Switch.
84190 -* nsswitch.conf: NSS Configuration File.
84191 -* null character: Representation of Strings.
84192 -* null pointer constant: Null Pointer Constant.
84193 -* null wide character: Representation of Strings.
84194 -* number of arguments passed: How Many Arguments.
84195 -* number syntax, parsing: Parsing of Numbers.
84196 -* numeric value formatting: The Lame Way to Locale Data.
84197 -* obstack status: Status of an Obstack.
84198 -* obstacks: Obstacks.
84199 -* open-time action flags: Open-time Flags.
84200 -* opening a file: I/O Concepts.
84201 -* opening a file descriptor: Opening and Closing Files.
84202 -* opening a pipe: Creating a Pipe.
84203 -* opening a pseudo-terminal pair: Pseudo-Terminal Pairs.
84204 -* opening a socket: Creating a Socket.
84205 -* opening a socket pair: Socket Pairs.
84206 -* opening a stream: Opening Streams.
84207 -* Optimization: FP Function Optimizations.
84208 -* optimizing NSS: Notes on NSS Configuration File.
84209 -* option parsing with argp: Argp.
84210 -* optional arguments: Variadic Functions.
84211 -* optional POSIX features: System Options.
84212 -* orientation, stream <1>: Streams and I18N.
84213 -* orientation, stream: Opening Streams.
84214 -* orphaned process group: Orphaned Process Groups.
84215 -* out-of-band data: Out-of-Band Data.
84216 -* output conversions, for printf: Table of Output Conversions.
84217 -* output possible signal: Asynchronous I/O Signals.
84218 -* overflow exception: FP Exceptions.
84219 -* owner of a file: File Owner.
84220 -* packet: Socket Concepts.
84221 -* page boundary: Aligned Memory Blocks.
84222 -* page fault: Memory Concepts.
84223 -* page fault, copy-on-write: Locked Memory Details.
84224 -* page frame: Memory Concepts.
84225 -* page, memory: Memory Subsystem.
84226 -* page, virtual memory: Memory Concepts.
84227 -* paging <1>: Locking Pages.
84228 -* paging: Memory Concepts.
84229 -* parameter promotion: String/Array Conventions.
84230 -* parent directory: File Name Resolution.
84231 -* parent process <1>: Process Creation Concepts.
84232 -* parent process: Processes.
84233 -* parity checking: Input Modes.
84234 -* parsing a template string: Parsing a Template String.
84235 -* parsing numbers (in formatted input): Parsing of Numbers.
84236 -* parsing program arguments: Parsing Program Arguments.
84237 -* parsing tokens from a string: Finding Tokens in a String.
84238 -* passwd: NSS Basics.
84239 -* password database: User Database.
84240 -* PATH environment variable: Standard Environment.
84241 -* pause function: Waiting for a Signal.
84242 -* peeking at input: Unreading.
84243 -* pending signals: Delivery of Signal.
84244 -* pending signals, checking for: Checking for Pending Signals.
84245 -* period of time: Time Basics.
84246 -* permission to access a file: Access Permission.
84247 -* persona: Process Persona.
84248 -* physical address: Memory Subsystem.
84249 -* physical memory: Memory Subsystem.
84250 -* pi (trigonometric constant): Trig Functions.
84251 -* pipe: Pipes and FIFOs.
84252 -* pipe signal: Operation Error Signals.
84253 -* pipe to a subprocess: Pipe to a Subprocess.
84254 -* port number: Ports.
84255 -* positioning a file descriptor: File Position Primitive.
84256 -* positioning a stream: File Positioning.
84257 -* positive difference: Misc FP Arithmetic.
84258 -* POSIX: POSIX.
84259 -* POSIX capacity limits: General Limits.
84260 -* POSIX optional features: System Options.
84261 -* POSIX.1: POSIX.
84262 -* POSIX.2: POSIX.
84263 -* power functions: Exponents and Logarithms.
84264 -* precision (of floating point number): Floating Point Concepts.
84265 -* precision (printf): Output Conversion Syntax.
84266 -* predicates on arrays: String/Array Comparison.
84267 -* predicates on characters: Classification of Characters.
84268 -* predicates on strings: String/Array Comparison.
84269 -* preemptive scheduling: Absolute Priority.
84270 -* primitives, interrupting: Interrupted Primitives.
84271 -* printing character <1>: Classification of Wide Characters.
84272 -* printing character: Classification of Characters.
84273 -* priority of a process: Priority.
84274 -* priority, absolute: Absolute Priority.
84275 -* process <1>: Processes.
84276 -* process: Program Basics.
84277 -* process completion: Process Completion.
84278 -* process group functions: Functions for Job Control.
84279 -* process group ID: Launching Jobs.
84280 -* process group leader: Launching Jobs.
84281 -* process groups: Job Control.
84282 -* process ID: Process Creation Concepts.
84283 -* process image: Process Creation Concepts.
84284 -* process lifetime: Process Creation Concepts.
84285 -* process priority: Priority.
84286 -* process signal mask: Process Signal Mask.
84287 -* process termination: Program Termination.
84288 -* processor time <1>: Processor Time.
84289 -* processor time: Time Basics.
84290 -* profiling alarm signal: Alarm Signals.
84291 -* profiling timer: Setting an Alarm.
84292 -* program: Program Basics.
84293 -* program argument syntax: Argument Syntax.
84294 -* program arguments: Program Arguments.
84295 -* program arguments, parsing: Parsing Program Arguments.
84296 -* program error signals: Program Error Signals.
84297 -* program name: Error Messages.
84298 -* program startup: Program Arguments.
84299 -* program termination: Program Termination.
84300 -* program termination signals: Termination Signals.
84301 -* programming your own streams: Custom Streams.
84302 -* project complex numbers: Operations on Complex.
84303 -* protocol (of socket): Socket Concepts.
84304 -* protocol family: Socket Concepts.
84305 -* protocols: NSS Basics.
84306 -* protocols database: Protocols Database.
84307 -* prototypes for variadic functions: Variadic Prototypes.
84308 -* pseudo-random numbers: Pseudo-Random Numbers.
84309 -* pseudo-terminals: Pseudo-Terminals.
84310 -* punctuation character <1>: Classification of Wide Characters.
84311 -* punctuation character: Classification of Characters.
84312 -* pushing input back: Unreading.
84313 -* quick sort function (for arrays): Array Sort Function.
84314 -* QUIT character: Signal Characters.
84315 -* quit signal: Termination Signals.
84316 -* quote removal: Expansion Stages.
84317 -* race conditions, relating to job control: Launching Jobs.
84318 -* race conditions, relating to signals: Signals in Handler.
84319 -* radix (of floating point number): Floating Point Concepts.
84320 -* raising signals: Generating Signals.
84321 -* random numbers: Pseudo-Random Numbers.
84322 -* random-access files: File Position.
84323 -* range error: Math Error Reporting.
84324 -* range of integer type: Range of Type.
84325 -* read lock: File Locks.
84326 -* reading from a directory: Accessing Directories.
84327 -* reading from a file descriptor: I/O Primitives.
84328 -* reading from a socket: Transferring Data.
84329 -* reading from a stream, by blocks: Block Input/Output.
84330 -* reading from a stream, by characters: Character Input.
84331 -* reading from a stream, formatted: Formatted Input.
84332 -* ready to run: Absolute Priority.
84333 -* real group ID: Process Persona.
84334 -* real user ID: Process Persona.
84335 -* real-time timer: Setting an Alarm.
84336 -* realtime CPU scheduling: Absolute Priority.
84337 -* realtime processing: Why Lock Pages.
84338 -* realtime scheduling: Realtime Scheduling.
84339 -* receiving datagrams: Receiving Datagrams.
84340 -* record locking: File Locks.
84341 -* redirecting input and output: Duplicating Descriptors.
84342 -* reentrant functions: Nonreentrancy.
84343 -* reentrant NSS functions: NSS Module Names.
84344 -* relative file name: File Name Resolution.
84345 -* removal of quotes: Expansion Stages.
84346 -* removing a file: Deleting Files.
84347 -* removing macros that shadow functions: Macro Definitions.
84348 -* renaming a file: Renaming Files.
84349 -* reporting bugs: Reporting Bugs.
84350 -* reporting errors: Error Reporting.
84351 -* REPRINT character: Editing Characters.
84352 -* reserved names: Reserved Names.
84353 -* resource limits: Limits on Resources.
84354 -* restarting interrupted primitives: Interrupted Primitives.
84355 -* restrictions on signal handler functions: Nonreentrancy.
84356 -* root directory: File Name Resolution.
84357 -* Rot13: Trivial Encryption.
84358 -* rpc: NSS Basics.
84359 -* runnable process: Absolute Priority.
84360 -* running a command: Running a Command.
84361 -* saved set-group-ID: How Change Persona.
84362 -* saved set-user-ID: How Change Persona.
84363 -* scanning the group list: Scanning All Groups.
84364 -* scanning the user list: Scanning All Users.
84365 -* scatter-gather: Scatter-Gather.
84366 -* scheduling, traditional: Traditional Scheduling.
84367 -* search function (for arrays): Array Search Function.
84368 -* search functions (for strings): Search Functions.
84369 -* seed (for random numbers): Pseudo-Random Numbers.
84370 -* seeking on a file descriptor: File Position Primitive.
84371 -* seeking on a stream: File Positioning.
84372 -* segmentation violation: Program Error Signals.
84373 -* sending a datagram: Sending Datagrams.
84374 -* sending signals: Generating Signals.
84375 -* sequential-access files: File Position.
84376 -* server: Connections.
84377 -* services: NSS Basics.
84378 -* services database: Services Database.
84379 -* session <1>: Concepts of Job Control.
84380 -* session: Job Control.
84381 -* session leader: Concepts of Job Control.
84382 -* setting an alarm: Setting an Alarm.
84383 -* setuid programs: How Change Persona.
84384 -* setuid programs and file access: Testing File Access.
84385 -* severity class <1>: Adding Severity Classes.
84386 -* severity class: Printing Formatted Messages.
84387 -* sgettext: GUI program problems.
84388 -* shadow: NSS Basics.
84389 -* shadowing functions with macros: Macro Definitions.
84390 -* shared lock: File Locks.
84391 -* shared memory: Memory Subsystem.
84392 -* shell: Concepts of Job Control.
84393 -* shift state: Keeping the state.
84394 -* Shift_JIS: Extended Char Intro.
84395 -* shrinking objects: Growing Objects.
84396 -* shutting down a socket: Closing a Socket.
84397 -* sigaction flags: Flags for Sigaction.
84398 -* sigaction function: Advanced Signal Handling.
84399 -* SIGCHLD, handling of: Stopped and Terminated Jobs.
84400 -* sign (of floating point number): Floating Point Concepts.
84401 -* signal <1>: Signal Handling.
84402 -* signal: FP Exceptions.
84403 -* signal action: Delivery of Signal.
84404 -* signal actions: Signal Actions.
84405 -* signal flags: Flags for Sigaction.
84406 -* signal function: Basic Signal Handling.
84407 -* signal handler function: Defining Handlers.
84408 -* signal mask: Process Signal Mask.
84409 -* signal messages: Signal Messages.
84410 -* signal names: Standard Signals.
84411 -* signal number: Standard Signals.
84412 -* signal set: Signal Sets.
84413 -* signals, generating: Generating Signals.
84414 -* signedness: Integers.
84415 -* significand (of floating point number): Floating Point Concepts.
84416 -* SIGTTIN, from background job: Access to the Terminal.
84417 -* SIGTTOU, from background job: Access to the Terminal.
84418 -* simple time: Calendar Time.
84419 -* single-byte string: Representation of Strings.
84420 -* size of string: Representation of Strings.
84421 -* SJIS: Extended Char Intro.
84422 -* socket: Sockets.
84423 -* socket address (name) binding: Socket Addresses.
84424 -* socket domain: Socket Concepts.
84425 -* socket namespace: Socket Concepts.
84426 -* socket option level: Socket Options.
84427 -* socket options: Socket Options.
84428 -* socket pair: Socket Pairs.
84429 -* socket protocol: Socket Concepts.
84430 -* socket shutdown: Closing a Socket.
84431 -* socket, client actions: Connecting.
84432 -* socket, closing: Closing a Socket.
84433 -* socket, connecting: Connecting.
84434 -* socket, creating: Creating a Socket.
84435 -* socket, initiating a connection: Connecting.
84436 -* sockets, accepting connections: Accepting Connections.
84437 -* sockets, listening: Listening.
84438 -* sockets, server actions: Listening.
84439 -* soft limit: Limits on Resources.
84440 -* soft link: Symbolic Links.
84441 -* sort function (for arrays): Array Sort Function.
84442 -* sparse files: File Position Primitive.
84443 -* special files: Making Special Files.
84444 -* special functions: Special Functions.
84445 -* specified action (for a signal): Delivery of Signal.
84446 -* speed of execution: Why Lock Pages.
84447 -* square root function: Exponents and Logarithms.
84448 -* stable sorting: Array Sort Function.
84449 -* standard dot notation, for Internet addresses: Abstract Host Addresses.
84450 -* standard environment variables: Standard Environment.
84451 -* standard error file descriptor: Descriptors and Streams.
84452 -* standard error stream: Standard Streams.
84453 -* standard file descriptors: Descriptors and Streams.
84454 -* standard input file descriptor: Descriptors and Streams.
84455 -* standard input stream: Standard Streams.
84456 -* standard output file descriptor: Descriptors and Streams.
84457 -* standard output stream: Standard Streams.
84458 -* standard streams: Standard Streams.
84459 -* standards: Standards and Portability.
84460 -* START character: Start/Stop Characters.
84461 -* startup of program: Program Arguments.
84462 -* stateful <1>: glibc iconv Implementation.
84463 -* stateful <2>: iconv Examples.
84464 -* stateful <3>: Generic Conversion Interface.
84465 -* stateful <4>: Converting Strings.
84466 -* stateful <5>: Converting a Character.
84467 -* stateful: Keeping the state.
84468 -* static memory allocation: Memory Allocation and C.
84469 -* static storage class: Memory Allocation and C.
84470 -* STATUS character: Other Special.
84471 -* status codes: Error Reporting.
84472 -* status of a file: Attribute Meanings.
84473 -* status of obstack: Status of an Obstack.
84474 -* sticky bit: Permission Bits.
84475 -* STOP character: Start/Stop Characters.
84476 -* stop signal: Job Control Signals.
84477 -* stopped job: Concepts of Job Control.
84478 -* stopped jobs, continuing: Continuing Stopped Jobs.
84479 -* stopped jobs, detecting: Stopped and Terminated Jobs.
84480 -* storage allocation: Memory.
84481 -* stream (sockets): Socket Concepts.
84482 -* stream orientation <1>: Streams and I18N.
84483 -* stream orientation: Opening Streams.
84484 -* stream, for I/O to a string: String Streams.
84485 -* streams and descriptors: Stream/Descriptor Precautions.
84486 -* streams, and file descriptors: Descriptors and Streams.
84487 -* streams, C++: Streams and I18N.
84488 -* streams, standard: Standard Streams.
84489 -* string: Representation of Strings.
84490 -* string allocation: Representation of Strings.
84491 -* string collation functions: Collation Functions.
84492 -* string comparison functions: String/Array Comparison.
84493 -* string concatenation functions: Copying and Concatenation.
84494 -* string copy functions: Copying and Concatenation.
84495 -* string length: Representation of Strings.
84496 -* string literal: Representation of Strings.
84497 -* string search functions: Search Functions.
84498 -* string stream: String Streams.
84499 -* string vectors, null-character separated: Argz and Envz Vectors.
84500 -* string, representation of: Representation of Strings.
84501 -* style of communication (of a socket): Socket Concepts.
84502 -* subshell: Initializing the Shell.
84503 -* substitution of variables and commands: Expansion Stages.
84504 -* successive signals: Merged Signals.
84505 -* summer time: Broken-down Time.
84506 -* SunOS: Berkeley Unix.
84507 -* supplementary group IDs: Process Persona.
84508 -* SUSP character: Signal Characters.
84509 -* suspend character: Signal Characters.
84510 -* SVID: SVID.
84511 -* swap space: Memory Concepts.
84512 -* symbolic link: Symbolic Links.
84513 -* symbolic link, opening: Open-time Flags.
84514 -* synchronizing <1>: Synchronizing AIO Operations.
84515 -* synchronizing: Synchronizing I/O.
84516 -* syntax error messages, in argp: Argp Helper Functions.
84517 -* syntax, for program arguments: Argument Syntax.
84518 -* syntax, for reading numbers: Parsing of Numbers.
84519 -* sysconf <1>: Processor Resources.
84520 -* sysconf: Query Memory Parameters.
84521 -* system call: System Calls.
84522 -* system call number: System Calls.
84523 -* System V Unix: SVID.
84524 -* TCP (Internet protocol): Protocols Database.
84525 -* template, for printf: Formatted Output.
84526 -* template, for scanf: Formatted Input.
84527 -* TERM environment variable: Standard Environment.
84528 -* terminal flow control: Line Control.
84529 -* terminal identification: Is It a Terminal.
84530 -* terminal input queue: I/O Queues.
84531 -* terminal input queue, clearing: Line Control.
84532 -* terminal input signal: Job Control Signals.
84533 -* terminal line control functions: Line Control.
84534 -* terminal line speed: Line Speed.
84535 -* terminal mode data types: Mode Data Types.
84536 -* terminal mode functions: Mode Functions.
84537 -* terminal modes, BSD: BSD Terminal Modes.
84538 -* terminal output queue: I/O Queues.
84539 -* terminal output queue, flushing: Line Control.
84540 -* terminal output signal: Job Control Signals.
84541 -* terminated jobs, detecting: Stopped and Terminated Jobs.
84542 -* termination signal: Termination Signals.
84543 -* testing access permission: Testing File Access.
84544 -* testing exit status of child process: Process Completion.
84545 -* text stream: Binary Streams.
84546 -* thrashing: Memory Subsystem.
84547 -* thread of control: Program Basics.
84548 -* threads: Streams and Threads.
84549 -* ticks, clock: Processor And CPU Time.
84550 -* tilde expansion: Expansion Stages.
84551 -* time: Time Basics.
84552 -* TIME termios slot: Noncanonical Input.
84553 -* time zone: TZ Variable.
84554 -* time zone database: TZ Variable.
84555 -* time, elapsed: Time Basics.
84556 -* time, high precision: High Accuracy Clock.
84557 -* timer, profiling: Setting an Alarm.
84558 -* timer, real-time: Setting an Alarm.
84559 -* timer, virtual: Setting an Alarm.
84560 -* timers, setting: Setting an Alarm.
84561 -* timespec: Elapsed Time.
84562 -* timeval: Elapsed Time.
84563 -* timing error in signal handling: Remembering a Signal.
84564 -* TMPDIR environment variable: Temporary Files.
84565 -* tokenizing strings: Finding Tokens in a String.
84566 -* tools, for installing library: Tools for Compilation.
84567 -* transmitting datagrams: Sending Datagrams.
84568 -* tree, directory: Working with Directory Trees.
84569 -* triangulation: glibc iconv Implementation.
84570 -* trigonometric functions: Trig Functions.
84571 -* type measurements, floating: Floating Type Macros.
84572 -* type measurements, integer: Width of Type.
84573 -* type modifier character (printf): Output Conversion Syntax.
84574 -* type modifier character (scanf): Input Conversion Syntax.
84575 -* typeahead buffer: I/O Queues.
84576 -* TZ environment variable: Standard Environment.
84577 -* UCS-2: Extended Char Intro.
84578 -* UCS-4: Extended Char Intro.
84579 -* ulps: Errors in Math Functions.
84580 -* umask: Setting Permissions.
84581 -* unbuffered stream: Buffering Concepts.
84582 -* unconstrained memory allocation: Unconstrained Allocation.
84583 -* undefining macros that shadow functions: Macro Definitions.
84584 -* underflow exception: FP Exceptions.
84585 -* Unicode: Extended Char Intro.
84586 -* Unix, Berkeley: Berkeley Unix.
84587 -* Unix, System V: SVID.
84588 -* unlinking a file: Deleting Files.
84589 -* unordered comparison: FP Comparison Functions.
84590 -* unreading characters: Unreading.
84591 -* upgrading from libc5: Linux.
84592 -* upper-case character <1>: Classification of Wide Characters.
84593 -* upper-case character: Classification of Characters.
84594 -* urgent data signal: Asynchronous I/O Signals.
84595 -* urgent socket condition: Out-of-Band Data.
84596 -* usage limits: Limits on Resources.
84597 -* usage messages, in argp: Argp Helper Functions.
84598 -* user accounting database: User Accounting Database.
84599 -* user database: User Database.
84600 -* user ID: User and Group IDs.
84601 -* user ID, determining: Who Logged In.
84602 -* user name: User and Group IDs.
84603 -* user signals: Miscellaneous Signals.
84604 -* usual file name errors: File Name Errors.
84605 -* UTF-16: Extended Char Intro.
84606 -* UTF-7: Extended Char Intro.
84607 -* UTF-8: Extended Char Intro.
84608 -* va_copy: Copying and Concatenation.
84609 -* variable number of arguments: Variadic Functions.
84610 -* variable substitution: Expansion Stages.
84611 -* variable-sized arrays: GNU C Variable-Size Arrays.
84612 -* variadic function argument access: Receiving Arguments.
84613 -* variadic function prototypes: Variadic Prototypes.
84614 -* variadic functions: Variadic Functions.
84615 -* variadic functions, calling: Calling Variadics.
84616 -* virtual time alarm signal: Alarm Signals.
84617 -* virtual timer: Setting an Alarm.
84618 -* volatile declarations: Nonreentrancy.
84619 -* waiting for a signal: Waiting for a Signal.
84620 -* waiting for completion of child process: Process Completion.
84621 -* waiting for input or output: Waiting for I/O.
84622 -* WERASE character: Editing Characters.
84623 -* whitespace character <1>: Classification of Wide Characters.
84624 -* whitespace character: Classification of Characters.
84625 -* wide character: Extended Char Intro.
84626 -* wide character string: Representation of Strings.
84627 -* width of integer type: Width of Type.
84628 -* wildcard expansion: Expansion Stages.
84629 -* wint_t: String/Array Conventions.
84630 -* word expansion: Word Expansion.
84631 -* working directory: Working Directory.
84632 -* write lock: File Locks.
84633 -* writing to a file descriptor: I/O Primitives.
84634 -* writing to a socket: Transferring Data.
84635 -* writing to a stream, by blocks: Block Input/Output.
84636 -* writing to a stream, by characters: Simple Output.
84637 -* writing to a stream, formatted: Formatted Output.
84638 -* YP: Host Identification.
84639 -* YP domain name: Host Identification.
84640 -* zero divide: FP Exceptions.
84642 diff -u -udbrN glibc-2.3.2/manual/libc.info-58 glibc-2.3.2-200304020432/manual/libc.info-58
84643 --- glibc-2.3.2/manual/libc.info-58 Sat Mar 1 02:39:41 2003
84644 +++ glibc-2.3.2-200304020432/manual/libc.info-58 Thu Jan 1 01:00:00 1970
84645 @@ -1,168 +0,0 @@
84646 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
84648 -INFO-DIR-SECTION GNU libraries
84649 -START-INFO-DIR-ENTRY
84650 -* Libc: (libc). C library.
84651 -END-INFO-DIR-ENTRY
84653 - This file documents the GNU C library.
84655 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
84656 -Reference Manual', for Version 2.3.x.
84658 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
84659 -Free Software Foundation, Inc.
84661 - Permission is granted to copy, distribute and/or modify this document
84662 -under the terms of the GNU Free Documentation License, Version 1.1 or
84663 -any later version published by the Free Software Foundation; with the
84664 -Invariant Sections being "Free Software Needs Free Documentation" and
84665 -"GNU Lesser General Public License", the Front-Cover texts being (a)
84666 -(see below), and with the Back-Cover Texts being (b) (see below). A
84667 -copy of the license is included in the section entitled "GNU Free
84668 -Documentation License".
84670 - (a) The FSF's Front-Cover Text is:
84672 - A GNU Manual
84674 - (b) The FSF's Back-Cover Text is:
84676 - You have freedom to copy and modify this GNU Manual, like GNU
84677 -software. Copies published by the Free Software Foundation raise
84678 -funds for GNU development.
84680 -\x1f
84681 -File: libc.info, Node: Type Index, Next: Function Index, Prev: Concept Index, Up: Top
84683 -Type Index
84684 -**********
84686 -* Menu:
84688 -* __ftw64_func_t: Working with Directory Trees.
84689 -* __ftw_func_t: Working with Directory Trees.
84690 -* __nftw64_func_t: Working with Directory Trees.
84691 -* __nftw_func_t: Working with Directory Trees.
84692 -* blkcnt64_t: Attribute Meanings.
84693 -* blkcnt_t: Attribute Meanings.
84694 -* cc_t: Mode Data Types.
84695 -* clock_t: CPU Time.
84696 -* comparison_fn_t: Comparison Functions.
84697 -* cookie_close_function: Hook Functions.
84698 -* cookie_io_functions_t: Streams and Cookies.
84699 -* cookie_read_function: Hook Functions.
84700 -* cookie_seek_function: Hook Functions.
84701 -* cookie_write_function: Hook Functions.
84702 -* dev_t: Attribute Meanings.
84703 -* DIR: Opening a Directory.
84704 -* div_t: Integer Division.
84705 -* enum mcheck_status: Heap Consistency Checking.
84706 -* fd_set: Waiting for I/O.
84707 -* FILE: Streams.
84708 -* fpos64_t: Portable Positioning.
84709 -* fpos_t: Portable Positioning.
84710 -* gid_t: Reading Persona.
84711 -* glob64_t: Calling Glob.
84712 -* glob_t: Calling Glob.
84713 -* iconv_t: Generic Conversion Interface.
84714 -* imaxdiv_t: Integer Division.
84715 -* ino64_t: Attribute Meanings.
84716 -* ino_t: Attribute Meanings.
84717 -* jmp_buf: Non-Local Details.
84718 -* ldiv_t: Integer Division.
84719 -* lldiv_t: Integer Division.
84720 -* mbstate_t: Keeping the state.
84721 -* mode_t: Attribute Meanings.
84722 -* nlink_t: Attribute Meanings.
84723 -* off64_t: File Position Primitive.
84724 -* off_t: File Position Primitive.
84725 -* pid_t: Process Identification.
84726 -* printf_arginfo_function: Defining the Output Handler.
84727 -* printf_function: Defining the Output Handler.
84728 -* ptrdiff_t: Important Data Types.
84729 -* regex_t: POSIX Regexp Compilation.
84730 -* regmatch_t: Regexp Subexpressions.
84731 -* regoff_t: Regexp Subexpressions.
84732 -* sig_atomic_t: Atomic Types.
84733 -* sighandler_t: Basic Signal Handling.
84734 -* sigjmp_buf: Non-Local Exits and Signals.
84735 -* sigset_t: Signal Sets.
84736 -* size_t: Important Data Types.
84737 -* speed_t: Line Speed.
84738 -* ssize_t: I/O Primitives.
84739 -* stack_t: Signal Stack.
84740 -* struct __gconv_step: glibc iconv Implementation.
84741 -* struct __gconv_step_data: glibc iconv Implementation.
84742 -* struct aiocb: Asynchronous I/O.
84743 -* struct aiocb64: Asynchronous I/O.
84744 -* struct aioinit: Configuration of AIO.
84745 -* struct argp: Argp Parsers.
84746 -* struct argp_child: Argp Children.
84747 -* struct argp_option: Argp Option Vectors.
84748 -* struct argp_state: Argp Parsing State.
84749 -* struct dirent: Directory Entries.
84750 -* struct ENTRY: Hash Search Function.
84751 -* struct exit_status: Manipulating the Database.
84752 -* struct flock: File Locks.
84753 -* struct fstab: fstab.
84754 -* struct FTW: Working with Directory Trees.
84755 -* struct group: Group Data Structure.
84756 -* struct hostent: Host Names.
84757 -* struct if_nameindex: Interface Naming.
84758 -* struct in6_addr: Host Address Data Type.
84759 -* struct in_addr: Host Address Data Type.
84760 -* struct iovec: Scatter-Gather.
84761 -* struct itimerval: Setting an Alarm.
84762 -* struct lconv: The Lame Way to Locale Data.
84763 -* struct linger: Socket-Level Options.
84764 -* struct mallinfo: Statistics of Malloc.
84765 -* struct mntent: mtab.
84766 -* struct netent: Networks Database.
84767 -* struct ntptimeval: High Accuracy Clock.
84768 -* struct obstack: Creating Obstacks.
84769 -* struct option: Getopt Long Options.
84770 -* struct passwd: User Data Structure.
84771 -* struct printf_info: Conversion Specifier Options.
84772 -* struct protoent: Protocols Database.
84773 -* struct random_data: BSD Random.
84774 -* struct rlimit: Limits on Resources.
84775 -* struct rlimit64: Limits on Resources.
84776 -* struct rusage: Resource Usage.
84777 -* struct sched_param: Basic Scheduling Functions.
84778 -* struct servent: Services Database.
84779 -* struct sgttyb: BSD Terminal Modes.
84780 -* struct sigaction: Advanced Signal Handling.
84781 -* struct sigstack: Signal Stack.
84782 -* struct sigvec: BSD Handler.
84783 -* struct sockaddr: Address Formats.
84784 -* struct sockaddr_in: Internet Address Formats.
84785 -* struct sockaddr_in6: Internet Address Formats.
84786 -* struct sockaddr_un: Local Namespace Details.
84787 -* struct stat: Attribute Meanings.
84788 -* struct stat64: Attribute Meanings.
84789 -* struct termios: Mode Data Types.
84790 -* struct timespec: Elapsed Time.
84791 -* struct timeval: Elapsed Time.
84792 -* struct timex: High Accuracy Clock.
84793 -* struct timezone: High-Resolution Calendar.
84794 -* struct tm: Broken-down Time.
84795 -* struct tms: Processor Time.
84796 -* struct utimbuf: File Times.
84797 -* struct utmp: Manipulating the Database.
84798 -* struct utmpx: XPG Functions.
84799 -* struct utsname: Platform Type.
84800 -* struct vtimes: Resource Usage.
84801 -* tcflag_t: Mode Data Types.
84802 -* time_t: Simple Calendar Time.
84803 -* ucontext_t: System V contexts.
84804 -* uid_t: Reading Persona.
84805 -* union wait: BSD Wait Functions.
84806 -* va_list: Argument Macros.
84807 -* VISIT: Tree Search Function.
84808 -* wchar_t: Extended Char Intro.
84809 -* wctrans_t: Wide Character Case Conversion.
84810 -* wctype_t: Classification of Wide Characters.
84811 -* wint_t: Extended Char Intro.
84812 -* wordexp_t: Calling Wordexp.
84814 diff -u -udbrN glibc-2.3.2/manual/libc.info-59 glibc-2.3.2-200304020432/manual/libc.info-59
84815 --- glibc-2.3.2/manual/libc.info-59 Sat Mar 1 02:39:41 2003
84816 +++ glibc-2.3.2-200304020432/manual/libc.info-59 Thu Jan 1 01:00:00 1970
84817 @@ -1,1374 +0,0 @@
84818 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
84820 -INFO-DIR-SECTION GNU libraries
84821 -START-INFO-DIR-ENTRY
84822 -* Libc: (libc). C library.
84823 -END-INFO-DIR-ENTRY
84825 - This file documents the GNU C library.
84827 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
84828 -Reference Manual', for Version 2.3.x.
84830 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
84831 -Free Software Foundation, Inc.
84833 - Permission is granted to copy, distribute and/or modify this document
84834 -under the terms of the GNU Free Documentation License, Version 1.1 or
84835 -any later version published by the Free Software Foundation; with the
84836 -Invariant Sections being "Free Software Needs Free Documentation" and
84837 -"GNU Lesser General Public License", the Front-Cover texts being (a)
84838 -(see below), and with the Back-Cover Texts being (b) (see below). A
84839 -copy of the license is included in the section entitled "GNU Free
84840 -Documentation License".
84842 - (a) The FSF's Front-Cover Text is:
84844 - A GNU Manual
84846 - (b) The FSF's Back-Cover Text is:
84848 - You have freedom to copy and modify this GNU Manual, like GNU
84849 -software. Copies published by the Free Software Foundation raise
84850 -funds for GNU development.
84852 -\x1f
84853 -File: libc.info, Node: Function Index, Next: Variable Index, Prev: Type Index, Up: Top
84855 -Function and Macro Index
84856 -************************
84858 -* Menu:
84860 -* __fbufsize: Controlling Buffering.
84861 -* __flbf: Controlling Buffering.
84862 -* __fpending: Controlling Buffering.
84863 -* __fpurge: Flushing Buffers.
84864 -* __freadable: Opening Streams.
84865 -* __freading: Opening Streams.
84866 -* __fsetlocking: Streams and Threads.
84867 -* __fwritable: Opening Streams.
84868 -* __fwriting: Opening Streams.
84869 -* __va_copy: Argument Macros.
84870 -* _Exit: Termination Internals.
84871 -* _exit: Termination Internals.
84872 -* _flushlbf: Flushing Buffers.
84873 -* _tolower: Case Conversion.
84874 -* _toupper: Case Conversion.
84875 -* a64l: Encode Binary Data.
84876 -* abort: Aborting a Program.
84877 -* abs: Absolute Value.
84878 -* accept: Accepting Connections.
84879 -* access: Testing File Access.
84880 -* acos: Inverse Trig Functions.
84881 -* acosf: Inverse Trig Functions.
84882 -* acosh: Hyperbolic Functions.
84883 -* acoshf: Hyperbolic Functions.
84884 -* acoshl: Hyperbolic Functions.
84885 -* acosl: Inverse Trig Functions.
84886 -* addmntent: mtab.
84887 -* addseverity: Adding Severity Classes.
84888 -* adjtime: High-Resolution Calendar.
84889 -* adjtimex: High-Resolution Calendar.
84890 -* aio_cancel: Cancel AIO Operations.
84891 -* aio_cancel64: Cancel AIO Operations.
84892 -* aio_error: Status of AIO Operations.
84893 -* aio_error64: Status of AIO Operations.
84894 -* aio_fsync: Synchronizing AIO Operations.
84895 -* aio_fsync64: Synchronizing AIO Operations.
84896 -* aio_init: Configuration of AIO.
84897 -* aio_read: Asynchronous Reads/Writes.
84898 -* aio_read64: Asynchronous Reads/Writes.
84899 -* aio_return: Status of AIO Operations.
84900 -* aio_return64: Status of AIO Operations.
84901 -* aio_suspend: Synchronizing AIO Operations.
84902 -* aio_suspend64: Synchronizing AIO Operations.
84903 -* aio_write: Asynchronous Reads/Writes.
84904 -* aio_write64: Asynchronous Reads/Writes.
84905 -* alarm: Setting an Alarm.
84906 -* alloca: Variable Size Automatic.
84907 -* alphasort: Scanning Directory Content.
84908 -* alphasort64: Scanning Directory Content.
84909 -* argp_error: Argp Helper Functions.
84910 -* argp_failure: Argp Helper Functions.
84911 -* argp_help: Argp Help.
84912 -* argp_parse: Argp.
84913 -* argp_state_help: Argp Helper Functions.
84914 -* argp_usage: Argp Helper Functions.
84915 -* argz_add: Argz Functions.
84916 -* argz_add_sep: Argz Functions.
84917 -* argz_append: Argz Functions.
84918 -* argz_count: Argz Functions.
84919 -* argz_create: Argz Functions.
84920 -* argz_create_sep: Argz Functions.
84921 -* argz_delete: Argz Functions.
84922 -* argz_extract: Argz Functions.
84923 -* argz_insert: Argz Functions.
84924 -* argz_next: Argz Functions.
84925 -* argz_replace: Argz Functions.
84926 -* argz_stringify: Argz Functions.
84927 -* asctime: Formatting Calendar Time.
84928 -* asctime_r: Formatting Calendar Time.
84929 -* asin: Inverse Trig Functions.
84930 -* asinf: Inverse Trig Functions.
84931 -* asinh: Hyperbolic Functions.
84932 -* asinhf: Hyperbolic Functions.
84933 -* asinhl: Hyperbolic Functions.
84934 -* asinl: Inverse Trig Functions.
84935 -* asprintf: Dynamic Output.
84936 -* assert: Consistency Checking.
84937 -* assert_perror: Consistency Checking.
84938 -* atan: Inverse Trig Functions.
84939 -* atan2: Inverse Trig Functions.
84940 -* atan2f: Inverse Trig Functions.
84941 -* atan2l: Inverse Trig Functions.
84942 -* atanf: Inverse Trig Functions.
84943 -* atanh: Hyperbolic Functions.
84944 -* atanhf: Hyperbolic Functions.
84945 -* atanhl: Hyperbolic Functions.
84946 -* atanl: Inverse Trig Functions.
84947 -* atexit: Cleanups on Exit.
84948 -* atof: Parsing of Floats.
84949 -* atoi: Parsing of Integers.
84950 -* atol: Parsing of Integers.
84951 -* atoll: Parsing of Integers.
84952 -* backtrace: Backtraces.
84953 -* backtrace_symbols: Backtraces.
84954 -* backtrace_symbols_fd: Backtraces.
84955 -* basename: Finding Tokens in a String.
84956 -* bcmp: String/Array Comparison.
84957 -* bcopy: Copying and Concatenation.
84958 -* bind: Setting Address.
84959 -* bind_textdomain_codeset: Charset conversion in gettext.
84960 -* bindtextdomain: Locating gettext catalog.
84961 -* brk: Resizing the Data Segment.
84962 -* bsearch: Array Search Function.
84963 -* btowc: Converting a Character.
84964 -* bzero: Copying and Concatenation.
84965 -* cabs: Absolute Value.
84966 -* cabsf: Absolute Value.
84967 -* cabsl: Absolute Value.
84968 -* cacos: Inverse Trig Functions.
84969 -* cacosf: Inverse Trig Functions.
84970 -* cacosh: Hyperbolic Functions.
84971 -* cacoshf: Hyperbolic Functions.
84972 -* cacoshl: Hyperbolic Functions.
84973 -* cacosl: Inverse Trig Functions.
84974 -* calloc: Allocating Cleared Space.
84975 -* canonicalize_file_name: Symbolic Links.
84976 -* carg: Operations on Complex.
84977 -* cargf: Operations on Complex.
84978 -* cargl: Operations on Complex.
84979 -* casin: Inverse Trig Functions.
84980 -* casinf: Inverse Trig Functions.
84981 -* casinh: Hyperbolic Functions.
84982 -* casinhf: Hyperbolic Functions.
84983 -* casinhl: Hyperbolic Functions.
84984 -* casinl: Inverse Trig Functions.
84985 -* catan: Inverse Trig Functions.
84986 -* catanf: Inverse Trig Functions.
84987 -* catanh: Hyperbolic Functions.
84988 -* catanhf: Hyperbolic Functions.
84989 -* catanhl: Hyperbolic Functions.
84990 -* catanl: Inverse Trig Functions.
84991 -* catclose: The catgets Functions.
84992 -* catgets: The catgets Functions.
84993 -* catopen: The catgets Functions.
84994 -* cbc_crypt: DES Encryption.
84995 -* cbrt: Exponents and Logarithms.
84996 -* cbrtf: Exponents and Logarithms.
84997 -* cbrtl: Exponents and Logarithms.
84998 -* ccos: Trig Functions.
84999 -* ccosf: Trig Functions.
85000 -* ccosh: Hyperbolic Functions.
85001 -* ccoshf: Hyperbolic Functions.
85002 -* ccoshl: Hyperbolic Functions.
85003 -* ccosl: Trig Functions.
85004 -* ceil: Rounding Functions.
85005 -* ceilf: Rounding Functions.
85006 -* ceill: Rounding Functions.
85007 -* cexp: Exponents and Logarithms.
85008 -* cexpf: Exponents and Logarithms.
85009 -* cexpl: Exponents and Logarithms.
85010 -* cfgetispeed: Line Speed.
85011 -* cfgetospeed: Line Speed.
85012 -* cfmakeraw: Noncanonical Input.
85013 -* cfree: Freeing after Malloc.
85014 -* cfsetispeed: Line Speed.
85015 -* cfsetospeed: Line Speed.
85016 -* cfsetspeed: Line Speed.
85017 -* chdir: Working Directory.
85018 -* chmod: Setting Permissions.
85019 -* chown: File Owner.
85020 -* cimag: Operations on Complex.
85021 -* cimagf: Operations on Complex.
85022 -* cimagl: Operations on Complex.
85023 -* clearenv: Environment Access.
85024 -* clearerr: Error Recovery.
85025 -* clearerr_unlocked: Error Recovery.
85026 -* clock: CPU Time.
85027 -* clog: Exponents and Logarithms.
85028 -* clog10: Exponents and Logarithms.
85029 -* clog10f: Exponents and Logarithms.
85030 -* clog10l: Exponents and Logarithms.
85031 -* clogf: Exponents and Logarithms.
85032 -* clogl: Exponents and Logarithms.
85033 -* close: Opening and Closing Files.
85034 -* closedir: Reading/Closing Directory.
85035 -* closelog: closelog.
85036 -* confstr: String Parameters.
85037 -* conj: Operations on Complex.
85038 -* conjf: Operations on Complex.
85039 -* conjl: Operations on Complex.
85040 -* connect: Connecting.
85041 -* copysign: FP Bit Twiddling.
85042 -* copysignf: FP Bit Twiddling.
85043 -* copysignl: FP Bit Twiddling.
85044 -* cos: Trig Functions.
85045 -* cosf: Trig Functions.
85046 -* cosh: Hyperbolic Functions.
85047 -* coshf: Hyperbolic Functions.
85048 -* coshl: Hyperbolic Functions.
85049 -* cosl: Trig Functions.
85050 -* cpow: Exponents and Logarithms.
85051 -* cpowf: Exponents and Logarithms.
85052 -* cpowl: Exponents and Logarithms.
85053 -* cproj: Operations on Complex.
85054 -* cprojf: Operations on Complex.
85055 -* cprojl: Operations on Complex.
85056 -* creal: Operations on Complex.
85057 -* crealf: Operations on Complex.
85058 -* creall: Operations on Complex.
85059 -* creat: Opening and Closing Files.
85060 -* creat64: Opening and Closing Files.
85061 -* crypt: crypt.
85062 -* crypt_r: crypt.
85063 -* csin: Trig Functions.
85064 -* csinf: Trig Functions.
85065 -* csinh: Hyperbolic Functions.
85066 -* csinhf: Hyperbolic Functions.
85067 -* csinhl: Hyperbolic Functions.
85068 -* csinl: Trig Functions.
85069 -* csqrt: Exponents and Logarithms.
85070 -* csqrtf: Exponents and Logarithms.
85071 -* csqrtl: Exponents and Logarithms.
85072 -* ctan: Trig Functions.
85073 -* ctanf: Trig Functions.
85074 -* ctanh: Hyperbolic Functions.
85075 -* ctanhf: Hyperbolic Functions.
85076 -* ctanhl: Hyperbolic Functions.
85077 -* ctanl: Trig Functions.
85078 -* ctermid: Identifying the Terminal.
85079 -* ctime: Formatting Calendar Time.
85080 -* ctime_r: Formatting Calendar Time.
85081 -* cuserid: Who Logged In.
85082 -* dcgettext: Translation with gettext.
85083 -* dcngettext: Advanced gettext functions.
85084 -* DES_FAILED: DES Encryption.
85085 -* des_setparity: DES Encryption.
85086 -* dgettext: Translation with gettext.
85087 -* difftime: Elapsed Time.
85088 -* dirfd: Opening a Directory.
85089 -* dirname: Finding Tokens in a String.
85090 -* div: Integer Division.
85091 -* dngettext: Advanced gettext functions.
85092 -* drand48: SVID Random.
85093 -* drand48_r: SVID Random.
85094 -* drem: Remainder Functions.
85095 -* dremf: Remainder Functions.
85096 -* dreml: Remainder Functions.
85097 -* DTTOIF: Directory Entries.
85098 -* dup: Duplicating Descriptors.
85099 -* dup2: Duplicating Descriptors.
85100 -* ecb_crypt: DES Encryption.
85101 -* ecvt: System V Number Conversion.
85102 -* ecvt_r: System V Number Conversion.
85103 -* encrypt: DES Encryption.
85104 -* encrypt_r: DES Encryption.
85105 -* endfsent: fstab.
85106 -* endgrent: Scanning All Groups.
85107 -* endhostent: Host Names.
85108 -* endmntent: mtab.
85109 -* endnetent: Networks Database.
85110 -* endnetgrent: Lookup Netgroup.
85111 -* endprotoent: Protocols Database.
85112 -* endpwent: Scanning All Users.
85113 -* endservent: Services Database.
85114 -* endutent: Manipulating the Database.
85115 -* endutxent: XPG Functions.
85116 -* envz_add: Envz Functions.
85117 -* envz_entry: Envz Functions.
85118 -* envz_get: Envz Functions.
85119 -* envz_merge: Envz Functions.
85120 -* envz_strip: Envz Functions.
85121 -* erand48: SVID Random.
85122 -* erand48_r: SVID Random.
85123 -* erf: Special Functions.
85124 -* erfc: Special Functions.
85125 -* erfcf: Special Functions.
85126 -* erfcl: Special Functions.
85127 -* erff: Special Functions.
85128 -* erfl: Special Functions.
85129 -* err: Error Messages.
85130 -* error: Error Messages.
85131 -* error_at_line: Error Messages.
85132 -* errx: Error Messages.
85133 -* execl: Executing a File.
85134 -* execle: Executing a File.
85135 -* execlp: Executing a File.
85136 -* execv: Executing a File.
85137 -* execve: Executing a File.
85138 -* execvp: Executing a File.
85139 -* exit: Normal Termination.
85140 -* exp: Exponents and Logarithms.
85141 -* exp10: Exponents and Logarithms.
85142 -* exp10f: Exponents and Logarithms.
85143 -* exp10l: Exponents and Logarithms.
85144 -* exp2: Exponents and Logarithms.
85145 -* exp2f: Exponents and Logarithms.
85146 -* exp2l: Exponents and Logarithms.
85147 -* expf: Exponents and Logarithms.
85148 -* expl: Exponents and Logarithms.
85149 -* expm1: Exponents and Logarithms.
85150 -* expm1f: Exponents and Logarithms.
85151 -* expm1l: Exponents and Logarithms.
85152 -* fabs: Absolute Value.
85153 -* fabsf: Absolute Value.
85154 -* fabsl: Absolute Value.
85155 -* fchdir: Working Directory.
85156 -* fchmod: Setting Permissions.
85157 -* fchown: File Owner.
85158 -* fclean: Cleaning Streams.
85159 -* fclose: Closing Streams.
85160 -* fcloseall: Closing Streams.
85161 -* fcntl: Control Operations.
85162 -* fcvt: System V Number Conversion.
85163 -* fcvt_r: System V Number Conversion.
85164 -* FD_CLR: Waiting for I/O.
85165 -* FD_ISSET: Waiting for I/O.
85166 -* FD_SET: Waiting for I/O.
85167 -* FD_ZERO: Waiting for I/O.
85168 -* fdatasync: Synchronizing I/O.
85169 -* fdim: Misc FP Arithmetic.
85170 -* fdimf: Misc FP Arithmetic.
85171 -* fdiml: Misc FP Arithmetic.
85172 -* fdopen: Descriptors and Streams.
85173 -* feclearexcept: Status bit operations.
85174 -* fedisableexcept: Control Functions.
85175 -* feenableexcept: Control Functions.
85176 -* fegetenv: Control Functions.
85177 -* fegetexcept: Control Functions.
85178 -* fegetexceptflag: Status bit operations.
85179 -* fegetround: Rounding.
85180 -* feholdexcept: Control Functions.
85181 -* feof: EOF and Errors.
85182 -* feof_unlocked: EOF and Errors.
85183 -* feraiseexcept: Status bit operations.
85184 -* ferror: EOF and Errors.
85185 -* ferror_unlocked: EOF and Errors.
85186 -* fesetenv: Control Functions.
85187 -* fesetexceptflag: Status bit operations.
85188 -* fesetround: Rounding.
85189 -* fetestexcept: Status bit operations.
85190 -* feupdateenv: Control Functions.
85191 -* fflush: Flushing Buffers.
85192 -* fflush_unlocked: Flushing Buffers.
85193 -* fgetc: Character Input.
85194 -* fgetc_unlocked: Character Input.
85195 -* fgetgrent: Scanning All Groups.
85196 -* fgetgrent_r: Scanning All Groups.
85197 -* fgetpos: Portable Positioning.
85198 -* fgetpos64: Portable Positioning.
85199 -* fgetpwent: Scanning All Users.
85200 -* fgetpwent_r: Scanning All Users.
85201 -* fgets: Line Input.
85202 -* fgets_unlocked: Line Input.
85203 -* fgetwc: Character Input.
85204 -* fgetwc_unlocked: Character Input.
85205 -* fgetws: Line Input.
85206 -* fgetws_unlocked: Line Input.
85207 -* fileno: Descriptors and Streams.
85208 -* fileno_unlocked: Descriptors and Streams.
85209 -* finite: Floating Point Classes.
85210 -* finitef: Floating Point Classes.
85211 -* finitel: Floating Point Classes.
85212 -* flockfile: Streams and Threads.
85213 -* floor: Rounding Functions.
85214 -* floorf: Rounding Functions.
85215 -* floorl: Rounding Functions.
85216 -* fma: Misc FP Arithmetic.
85217 -* fmaf: Misc FP Arithmetic.
85218 -* fmal: Misc FP Arithmetic.
85219 -* fmax: Misc FP Arithmetic.
85220 -* fmaxf: Misc FP Arithmetic.
85221 -* fmaxl: Misc FP Arithmetic.
85222 -* fmemopen: String Streams.
85223 -* fmin: Misc FP Arithmetic.
85224 -* fminf: Misc FP Arithmetic.
85225 -* fminl: Misc FP Arithmetic.
85226 -* fmod: Remainder Functions.
85227 -* fmodf: Remainder Functions.
85228 -* fmodl: Remainder Functions.
85229 -* fmtmsg: Printing Formatted Messages.
85230 -* fnmatch: Wildcard Matching.
85231 -* fopen: Opening Streams.
85232 -* fopen64: Opening Streams.
85233 -* fopencookie: Streams and Cookies.
85234 -* fork: Creating a Process.
85235 -* forkpty: Pseudo-Terminal Pairs.
85236 -* fpathconf: Pathconf.
85237 -* fpclassify: Floating Point Classes.
85238 -* fprintf: Formatted Output Functions.
85239 -* fputc: Simple Output.
85240 -* fputc_unlocked: Simple Output.
85241 -* fputs: Simple Output.
85242 -* fputs_unlocked: Simple Output.
85243 -* fputwc: Simple Output.
85244 -* fputwc_unlocked: Simple Output.
85245 -* fputws: Simple Output.
85246 -* fputws_unlocked: Simple Output.
85247 -* fread: Block Input/Output.
85248 -* fread_unlocked: Block Input/Output.
85249 -* free: Freeing after Malloc.
85250 -* freopen: Opening Streams.
85251 -* freopen64: Opening Streams.
85252 -* frexp: Normalization Functions.
85253 -* frexpf: Normalization Functions.
85254 -* frexpl: Normalization Functions.
85255 -* fscanf: Formatted Input Functions.
85256 -* fseek: File Positioning.
85257 -* fseeko: File Positioning.
85258 -* fseeko64: File Positioning.
85259 -* fsetpos: Portable Positioning.
85260 -* fsetpos64: Portable Positioning.
85261 -* fstat: Reading Attributes.
85262 -* fstat64: Reading Attributes.
85263 -* fsync: Synchronizing I/O.
85264 -* ftell: File Positioning.
85265 -* ftello: File Positioning.
85266 -* ftello64: File Positioning.
85267 -* ftruncate: File Size.
85268 -* ftruncate64: File Size.
85269 -* ftrylockfile: Streams and Threads.
85270 -* ftw: Working with Directory Trees.
85271 -* ftw64: Working with Directory Trees.
85272 -* funlockfile: Streams and Threads.
85273 -* futimes: File Times.
85274 -* fwide: Streams and I18N.
85275 -* fwprintf: Formatted Output Functions.
85276 -* fwrite: Block Input/Output.
85277 -* fwrite_unlocked: Block Input/Output.
85278 -* fwscanf: Formatted Input Functions.
85279 -* gamma: Special Functions.
85280 -* gammaf: Special Functions.
85281 -* gammal: Special Functions.
85282 -* gcvt: System V Number Conversion.
85283 -* get_avphys_pages: Query Memory Parameters.
85284 -* get_current_dir_name: Working Directory.
85285 -* get_nprocs: Processor Resources.
85286 -* get_nprocs_conf: Processor Resources.
85287 -* get_phys_pages: Query Memory Parameters.
85288 -* getc: Character Input.
85289 -* getc_unlocked: Character Input.
85290 -* getchar: Character Input.
85291 -* getchar_unlocked: Character Input.
85292 -* getcontext: System V contexts.
85293 -* getcwd: Working Directory.
85294 -* getdate: General Time String Parsing.
85295 -* getdate_r: General Time String Parsing.
85296 -* getdelim: Line Input.
85297 -* getdomainnname: Host Identification.
85298 -* getegid: Reading Persona.
85299 -* getenv: Environment Access.
85300 -* geteuid: Reading Persona.
85301 -* getfsent: fstab.
85302 -* getfsfile: fstab.
85303 -* getfsspec: fstab.
85304 -* getgid: Reading Persona.
85305 -* getgrent: Scanning All Groups.
85306 -* getgrent_r: Scanning All Groups.
85307 -* getgrgid: Lookup Group.
85308 -* getgrgid_r: Lookup Group.
85309 -* getgrnam: Lookup Group.
85310 -* getgrnam_r: Lookup Group.
85311 -* getgrouplist: Setting Groups.
85312 -* getgroups: Reading Persona.
85313 -* gethostbyaddr: Host Names.
85314 -* gethostbyaddr_r: Host Names.
85315 -* gethostbyname: Host Names.
85316 -* gethostbyname2: Host Names.
85317 -* gethostbyname2_r: Host Names.
85318 -* gethostbyname_r: Host Names.
85319 -* gethostent: Host Names.
85320 -* gethostid: Host Identification.
85321 -* gethostname: Host Identification.
85322 -* getitimer: Setting an Alarm.
85323 -* getline: Line Input.
85324 -* getloadavg: Processor Resources.
85325 -* getlogin: Who Logged In.
85326 -* getmntent: mtab.
85327 -* getmntent_r: mtab.
85328 -* getnetbyaddr: Networks Database.
85329 -* getnetbyname: Networks Database.
85330 -* getnetent: Networks Database.
85331 -* getnetgrent: Lookup Netgroup.
85332 -* getnetgrent_r: Lookup Netgroup.
85333 -* getopt: Using Getopt.
85334 -* getopt_long: Getopt Long Options.
85335 -* getopt_long_only: Getopt Long Options.
85336 -* getpagesize: Query Memory Parameters.
85337 -* getpass: getpass.
85338 -* getpeername: Who is Connected.
85339 -* getpgid: Process Group Functions.
85340 -* getpgrp: Process Group Functions.
85341 -* getpid: Process Identification.
85342 -* getppid: Process Identification.
85343 -* getpriority: Traditional Scheduling Functions.
85344 -* getprotobyname: Protocols Database.
85345 -* getprotobynumber: Protocols Database.
85346 -* getprotoent: Protocols Database.
85347 -* getpt: Allocation.
85348 -* getpwent: Scanning All Users.
85349 -* getpwent_r: Scanning All Users.
85350 -* getpwnam: Lookup User.
85351 -* getpwnam_r: Lookup User.
85352 -* getpwuid: Lookup User.
85353 -* getpwuid_r: Lookup User.
85354 -* getrlimit: Limits on Resources.
85355 -* getrlimit64: Limits on Resources.
85356 -* getrusage: Resource Usage.
85357 -* gets: Line Input.
85358 -* getservbyname: Services Database.
85359 -* getservbyport: Services Database.
85360 -* getservent: Services Database.
85361 -* getsid: Process Group Functions.
85362 -* getsockname: Reading Address.
85363 -* getsockopt: Socket Option Functions.
85364 -* getsubopt: Suboptions.
85365 -* gettext: Translation with gettext.
85366 -* gettimeofday: High-Resolution Calendar.
85367 -* getuid: Reading Persona.
85368 -* getumask: Setting Permissions.
85369 -* getutent: Manipulating the Database.
85370 -* getutent_r: Manipulating the Database.
85371 -* getutid: Manipulating the Database.
85372 -* getutid_r: Manipulating the Database.
85373 -* getutline: Manipulating the Database.
85374 -* getutline_r: Manipulating the Database.
85375 -* getutmp: XPG Functions.
85376 -* getutmpx: XPG Functions.
85377 -* getutxent: XPG Functions.
85378 -* getutxid: XPG Functions.
85379 -* getutxline: XPG Functions.
85380 -* getw: Character Input.
85381 -* getwc: Character Input.
85382 -* getwc_unlocked: Character Input.
85383 -* getwchar: Character Input.
85384 -* getwchar_unlocked: Character Input.
85385 -* getwd: Working Directory.
85386 -* glob: Calling Glob.
85387 -* glob64: Calling Glob.
85388 -* globfree: More Flags for Globbing.
85389 -* globfree64: More Flags for Globbing.
85390 -* gmtime: Broken-down Time.
85391 -* gmtime_r: Broken-down Time.
85392 -* grantpt: Allocation.
85393 -* gsignal: Signaling Yourself.
85394 -* gtty: BSD Terminal Modes.
85395 -* hasmntopt: mtab.
85396 -* hcreate: Hash Search Function.
85397 -* hcreate_r: Hash Search Function.
85398 -* hdestroy: Hash Search Function.
85399 -* hdestroy_r: Hash Search Function.
85400 -* hsearch: Hash Search Function.
85401 -* hsearch_r: Hash Search Function.
85402 -* htonl: Byte Order.
85403 -* htons: Byte Order.
85404 -* hypot: Exponents and Logarithms.
85405 -* hypotf: Exponents and Logarithms.
85406 -* hypotl: Exponents and Logarithms.
85407 -* iconv: Generic Conversion Interface.
85408 -* iconv_close: Generic Conversion Interface.
85409 -* iconv_open: Generic Conversion Interface.
85410 -* if_freenameindex: Interface Naming.
85411 -* if_indextoname: Interface Naming.
85412 -* if_nameindex: Interface Naming.
85413 -* if_nametoindex: Interface Naming.
85414 -* IFTODT: Directory Entries.
85415 -* ilogb: Exponents and Logarithms.
85416 -* ilogbf: Exponents and Logarithms.
85417 -* ilogbl: Exponents and Logarithms.
85418 -* imaxabs: Absolute Value.
85419 -* imaxdiv: Integer Division.
85420 -* index: Search Functions.
85421 -* inet_addr: Host Address Functions.
85422 -* inet_aton: Host Address Functions.
85423 -* inet_lnaof: Host Address Functions.
85424 -* inet_makeaddr: Host Address Functions.
85425 -* inet_netof: Host Address Functions.
85426 -* inet_network: Host Address Functions.
85427 -* inet_ntoa: Host Address Functions.
85428 -* inet_ntop: Host Address Functions.
85429 -* inet_pton: Host Address Functions.
85430 -* initgroups: Setting Groups.
85431 -* initstate: BSD Random.
85432 -* initstate_r: BSD Random.
85433 -* innetgr: Netgroup Membership.
85434 -* ioctl: IOCTLs.
85435 -* isalnum: Classification of Characters.
85436 -* isalpha: Classification of Characters.
85437 -* isascii: Classification of Characters.
85438 -* isatty: Is It a Terminal.
85439 -* isblank: Classification of Characters.
85440 -* iscntrl: Classification of Characters.
85441 -* isdigit: Classification of Characters.
85442 -* isfinite: Floating Point Classes.
85443 -* isgraph: Classification of Characters.
85444 -* isgreater: FP Comparison Functions.
85445 -* isgreaterequal: FP Comparison Functions.
85446 -* isinf: Floating Point Classes.
85447 -* isinff: Floating Point Classes.
85448 -* isinfl: Floating Point Classes.
85449 -* isless: FP Comparison Functions.
85450 -* islessequal: FP Comparison Functions.
85451 -* islessgreater: FP Comparison Functions.
85452 -* islower: Classification of Characters.
85453 -* isnan: Floating Point Classes.
85454 -* isnanf: Floating Point Classes.
85455 -* isnanl: Floating Point Classes.
85456 -* isnormal: Floating Point Classes.
85457 -* isprint: Classification of Characters.
85458 -* ispunct: Classification of Characters.
85459 -* isspace: Classification of Characters.
85460 -* isunordered: FP Comparison Functions.
85461 -* isupper: Classification of Characters.
85462 -* iswalnum: Classification of Wide Characters.
85463 -* iswalpha: Classification of Wide Characters.
85464 -* iswblank: Classification of Wide Characters.
85465 -* iswcntrl: Classification of Wide Characters.
85466 -* iswctype: Classification of Wide Characters.
85467 -* iswdigit: Classification of Wide Characters.
85468 -* iswgraph: Classification of Wide Characters.
85469 -* iswlower: Classification of Wide Characters.
85470 -* iswprint: Classification of Wide Characters.
85471 -* iswpunct: Classification of Wide Characters.
85472 -* iswspace: Classification of Wide Characters.
85473 -* iswupper: Classification of Wide Characters.
85474 -* iswxdigit: Classification of Wide Characters.
85475 -* isxdigit: Classification of Characters.
85476 -* j0: Special Functions.
85477 -* j0f: Special Functions.
85478 -* j0l: Special Functions.
85479 -* j1: Special Functions.
85480 -* j1f: Special Functions.
85481 -* j1l: Special Functions.
85482 -* jn: Special Functions.
85483 -* jnf: Special Functions.
85484 -* jnl: Special Functions.
85485 -* jrand48: SVID Random.
85486 -* jrand48_r: SVID Random.
85487 -* kill: Signaling Another Process.
85488 -* killpg: Signaling Another Process.
85489 -* l64a: Encode Binary Data.
85490 -* labs: Absolute Value.
85491 -* lcong48: SVID Random.
85492 -* lcong48_r: SVID Random.
85493 -* ldexp: Normalization Functions.
85494 -* ldexpf: Normalization Functions.
85495 -* ldexpl: Normalization Functions.
85496 -* ldiv: Integer Division.
85497 -* lfind: Array Search Function.
85498 -* lgamma: Special Functions.
85499 -* lgamma_r: Special Functions.
85500 -* lgammaf: Special Functions.
85501 -* lgammaf_r: Special Functions.
85502 -* lgammal: Special Functions.
85503 -* lgammal_r: Special Functions.
85504 -* link: Hard Links.
85505 -* lio_listio: Asynchronous Reads/Writes.
85506 -* lio_listio64: Asynchronous Reads/Writes.
85507 -* listen: Listening.
85508 -* llabs: Absolute Value.
85509 -* lldiv: Integer Division.
85510 -* llrint: Rounding Functions.
85511 -* llrintf: Rounding Functions.
85512 -* llrintl: Rounding Functions.
85513 -* llround: Rounding Functions.
85514 -* llroundf: Rounding Functions.
85515 -* llroundl: Rounding Functions.
85516 -* localeconv: The Lame Way to Locale Data.
85517 -* localtime: Broken-down Time.
85518 -* localtime_r: Broken-down Time.
85519 -* log: Exponents and Logarithms.
85520 -* log10: Exponents and Logarithms.
85521 -* log10f: Exponents and Logarithms.
85522 -* log10l: Exponents and Logarithms.
85523 -* log1p: Exponents and Logarithms.
85524 -* log1pf: Exponents and Logarithms.
85525 -* log1pl: Exponents and Logarithms.
85526 -* log2: Exponents and Logarithms.
85527 -* log2f: Exponents and Logarithms.
85528 -* log2l: Exponents and Logarithms.
85529 -* logb: Exponents and Logarithms.
85530 -* logbf: Exponents and Logarithms.
85531 -* logbl: Exponents and Logarithms.
85532 -* logf: Exponents and Logarithms.
85533 -* login: Logging In and Out.
85534 -* login_tty: Logging In and Out.
85535 -* logl: Exponents and Logarithms.
85536 -* logout: Logging In and Out.
85537 -* logwtmp: Logging In and Out.
85538 -* longjmp: Non-Local Details.
85539 -* lrand48: SVID Random.
85540 -* lrand48_r: SVID Random.
85541 -* lrint: Rounding Functions.
85542 -* lrintf: Rounding Functions.
85543 -* lrintl: Rounding Functions.
85544 -* lround: Rounding Functions.
85545 -* lroundf: Rounding Functions.
85546 -* lroundl: Rounding Functions.
85547 -* lsearch: Array Search Function.
85548 -* lseek: File Position Primitive.
85549 -* lseek64: File Position Primitive.
85550 -* lstat: Reading Attributes.
85551 -* lstat64: Reading Attributes.
85552 -* lutimes: File Times.
85553 -* madvise: Memory-mapped I/O.
85554 -* main: Program Arguments.
85555 -* makecontext: System V contexts.
85556 -* mallinfo: Statistics of Malloc.
85557 -* malloc: Basic Allocation.
85558 -* mallopt: Malloc Tunable Parameters.
85559 -* matherr: FP Exceptions.
85560 -* mblen: Non-reentrant Character Conversion.
85561 -* mbrlen: Converting a Character.
85562 -* mbrtowc: Converting a Character.
85563 -* mbsinit: Keeping the state.
85564 -* mbsnrtowcs: Converting Strings.
85565 -* mbsrtowcs: Converting Strings.
85566 -* mbstowcs: Non-reentrant String Conversion.
85567 -* mbtowc: Non-reentrant Character Conversion.
85568 -* mcheck: Heap Consistency Checking.
85569 -* memalign: Aligned Memory Blocks.
85570 -* memccpy: Copying and Concatenation.
85571 -* memchr: Search Functions.
85572 -* memcmp: String/Array Comparison.
85573 -* memcpy: Copying and Concatenation.
85574 -* memfrob: Trivial Encryption.
85575 -* memmem: Search Functions.
85576 -* memmove: Copying and Concatenation.
85577 -* mempcpy: Copying and Concatenation.
85578 -* memrchr: Search Functions.
85579 -* memset: Copying and Concatenation.
85580 -* mkdir: Creating Directories.
85581 -* mkdtemp: Temporary Files.
85582 -* mkfifo: FIFO Special Files.
85583 -* mknod: Making Special Files.
85584 -* mkstemp: Temporary Files.
85585 -* mktemp: Temporary Files.
85586 -* mktime: Broken-down Time.
85587 -* mlock: Page Lock Functions.
85588 -* mlockall: Page Lock Functions.
85589 -* mmap: Memory-mapped I/O.
85590 -* mmap64: Memory-mapped I/O.
85591 -* modf: Rounding Functions.
85592 -* modff: Rounding Functions.
85593 -* modfl: Rounding Functions.
85594 -* mount: Mount-Unmount-Remount.
85595 -* mprobe: Heap Consistency Checking.
85596 -* mrand48: SVID Random.
85597 -* mrand48_r: SVID Random.
85598 -* mremap: Memory-mapped I/O.
85599 -* msync: Memory-mapped I/O.
85600 -* mtrace: Tracing malloc.
85601 -* munlock: Page Lock Functions.
85602 -* munlockall: Page Lock Functions.
85603 -* munmap: Memory-mapped I/O.
85604 -* muntrace: Tracing malloc.
85605 -* nan: FP Bit Twiddling.
85606 -* nanf: FP Bit Twiddling.
85607 -* nanl: FP Bit Twiddling.
85608 -* nanosleep: Sleeping.
85609 -* nearbyint: Rounding Functions.
85610 -* nearbyintf: Rounding Functions.
85611 -* nearbyintl: Rounding Functions.
85612 -* nextafter: FP Bit Twiddling.
85613 -* nextafterf: FP Bit Twiddling.
85614 -* nextafterl: FP Bit Twiddling.
85615 -* nexttoward: FP Bit Twiddling.
85616 -* nexttowardf: FP Bit Twiddling.
85617 -* nexttowardl: FP Bit Twiddling.
85618 -* nftw: Working with Directory Trees.
85619 -* nftw64: Working with Directory Trees.
85620 -* ngettext: Advanced gettext functions.
85621 -* nice: Traditional Scheduling Functions.
85622 -* nl_langinfo: The Elegant and Fast Way.
85623 -* notfound: Actions in the NSS configuration.
85624 -* nrand48: SVID Random.
85625 -* nrand48_r: SVID Random.
85626 -* ntohl: Byte Order.
85627 -* ntohs: Byte Order.
85628 -* ntp_adjtime: High Accuracy Clock.
85629 -* ntp_gettime: High Accuracy Clock.
85630 -* obstack_1grow: Growing Objects.
85631 -* obstack_1grow_fast: Extra Fast Growing.
85632 -* obstack_alignment_mask: Obstacks Data Alignment.
85633 -* obstack_alloc: Allocation in an Obstack.
85634 -* obstack_base: Status of an Obstack.
85635 -* obstack_blank: Growing Objects.
85636 -* obstack_blank_fast: Extra Fast Growing.
85637 -* obstack_chunk_alloc: Preparing for Obstacks.
85638 -* obstack_chunk_free: Preparing for Obstacks.
85639 -* obstack_chunk_size: Obstack Chunks.
85640 -* obstack_copy: Allocation in an Obstack.
85641 -* obstack_copy0: Allocation in an Obstack.
85642 -* obstack_finish: Growing Objects.
85643 -* obstack_free: Freeing Obstack Objects.
85644 -* obstack_grow: Growing Objects.
85645 -* obstack_grow0: Growing Objects.
85646 -* obstack_init: Preparing for Obstacks.
85647 -* obstack_int_grow: Growing Objects.
85648 -* obstack_int_grow_fast: Extra Fast Growing.
85649 -* obstack_next_free: Status of an Obstack.
85650 -* obstack_object_size <1>: Status of an Obstack.
85651 -* obstack_object_size: Growing Objects.
85652 -* obstack_printf: Dynamic Output.
85653 -* obstack_ptr_grow: Growing Objects.
85654 -* obstack_ptr_grow_fast: Extra Fast Growing.
85655 -* obstack_room: Extra Fast Growing.
85656 -* obstack_vprintf: Variable Arguments Output.
85657 -* offsetof: Structure Measurement.
85658 -* on_exit: Cleanups on Exit.
85659 -* open: Opening and Closing Files.
85660 -* open64: Opening and Closing Files.
85661 -* open_memstream: String Streams.
85662 -* open_obstack_stream: Obstack Streams.
85663 -* opendir: Opening a Directory.
85664 -* openlog: openlog.
85665 -* openpty: Pseudo-Terminal Pairs.
85666 -* parse_printf_format: Parsing a Template String.
85667 -* pathconf: Pathconf.
85668 -* pause: Using Pause.
85669 -* pclose: Pipe to a Subprocess.
85670 -* perror: Error Messages.
85671 -* pipe: Creating a Pipe.
85672 -* popen: Pipe to a Subprocess.
85673 -* posix_memalign: Aligned Memory Blocks.
85674 -* pow: Exponents and Logarithms.
85675 -* pow10: Exponents and Logarithms.
85676 -* pow10f: Exponents and Logarithms.
85677 -* pow10l: Exponents and Logarithms.
85678 -* powf: Exponents and Logarithms.
85679 -* powl: Exponents and Logarithms.
85680 -* pread: I/O Primitives.
85681 -* pread64: I/O Primitives.
85682 -* printf: Formatted Output Functions.
85683 -* printf_size: Predefined Printf Handlers.
85684 -* printf_size_info: Predefined Printf Handlers.
85685 -* psignal: Signal Messages.
85686 -* pthread_atfork: Threads and Fork.
85687 -* pthread_attr_destroy: Thread Attributes.
85688 -* pthread_attr_getattr: Thread Attributes.
85689 -* pthread_attr_getdetachstate: Thread Attributes.
85690 -* pthread_attr_getguardsize: Thread Attributes.
85691 -* pthread_attr_getinheritsched: Thread Attributes.
85692 -* pthread_attr_getschedparam: Thread Attributes.
85693 -* pthread_attr_getschedpolicy: Thread Attributes.
85694 -* pthread_attr_getscope: Thread Attributes.
85695 -* pthread_attr_getstack: Thread Attributes.
85696 -* pthread_attr_getstackaddr: Thread Attributes.
85697 -* pthread_attr_getstacksize: Thread Attributes.
85698 -* pthread_attr_init: Thread Attributes.
85699 -* pthread_attr_setattr: Thread Attributes.
85700 -* pthread_attr_setdetachstate: Thread Attributes.
85701 -* pthread_attr_setguardsize: Thread Attributes.
85702 -* pthread_attr_setinheritsched: Thread Attributes.
85703 -* pthread_attr_setschedparam: Thread Attributes.
85704 -* pthread_attr_setschedpolicy: Thread Attributes.
85705 -* pthread_attr_setscope: Thread Attributes.
85706 -* pthread_attr_setstack: Thread Attributes.
85707 -* pthread_attr_setstackaddr: Thread Attributes.
85708 -* pthread_attr_setstacksize: Thread Attributes.
85709 -* pthread_cancel: Basic Thread Operations.
85710 -* pthread_cleanup_pop: Cleanup Handlers.
85711 -* pthread_cleanup_pop_restore_np: Cleanup Handlers.
85712 -* pthread_cleanup_push: Cleanup Handlers.
85713 -* pthread_cleanup_push_defer_np: Cleanup Handlers.
85714 -* pthread_cond_broadcast: Condition Variables.
85715 -* pthread_cond_destroy: Condition Variables.
85716 -* pthread_cond_init: Condition Variables.
85717 -* pthread_cond_signal: Condition Variables.
85718 -* pthread_cond_timedwait: Condition Variables.
85719 -* pthread_cond_wait: Condition Variables.
85720 -* pthread_condattr_destroy: Condition Variables.
85721 -* pthread_condattr_init: Condition Variables.
85722 -* pthread_create: Basic Thread Operations.
85723 -* pthread_detach: Miscellaneous Thread Functions.
85724 -* pthread_equal: Miscellaneous Thread Functions.
85725 -* pthread_exit: Basic Thread Operations.
85726 -* pthread_getconcurrency: Miscellaneous Thread Functions.
85727 -* pthread_getschedparam: Miscellaneous Thread Functions.
85728 -* pthread_getspecific: Thread-Specific Data.
85729 -* pthread_join: Basic Thread Operations.
85730 -* pthread_key_create: Thread-Specific Data.
85731 -* pthread_key_delete: Thread-Specific Data.
85732 -* pthread_kill: Threads and Signal Handling.
85733 -* pthread_kill_other_threads_np: Miscellaneous Thread Functions.
85734 -* pthread_mutex_destroy: Mutexes.
85735 -* pthread_mutex_init: Mutexes.
85736 -* pthread_mutex_lock: Mutexes.
85737 -* pthread_mutex_timedlock: Mutexes.
85738 -* pthread_mutex_trylock: Mutexes.
85739 -* pthread_mutex_unlock: Mutexes.
85740 -* pthread_mutexattr_destroy: Mutexes.
85741 -* pthread_mutexattr_gettype: Mutexes.
85742 -* pthread_mutexattr_init: Mutexes.
85743 -* pthread_mutexattr_settype: Mutexes.
85744 -* pthread_once: Miscellaneous Thread Functions.
85745 -* pthread_self: Miscellaneous Thread Functions.
85746 -* pthread_setcancelstate: Cancellation.
85747 -* pthread_setcanceltype: Cancellation.
85748 -* pthread_setconcurrency: Miscellaneous Thread Functions.
85749 -* pthread_setschedparam: Miscellaneous Thread Functions.
85750 -* pthread_setspecific: Thread-Specific Data.
85751 -* pthread_sigmask: Threads and Signal Handling.
85752 -* pthread_testcancel: Cancellation.
85753 -* ptsname: Allocation.
85754 -* ptsname_r: Allocation.
85755 -* putc: Simple Output.
85756 -* putc_unlocked: Simple Output.
85757 -* putchar: Simple Output.
85758 -* putchar_unlocked: Simple Output.
85759 -* putenv: Environment Access.
85760 -* putpwent: Writing a User Entry.
85761 -* puts: Simple Output.
85762 -* pututline: Manipulating the Database.
85763 -* pututxline: XPG Functions.
85764 -* putw: Simple Output.
85765 -* putwc: Simple Output.
85766 -* putwc_unlocked: Simple Output.
85767 -* putwchar: Simple Output.
85768 -* putwchar_unlocked: Simple Output.
85769 -* pwrite: I/O Primitives.
85770 -* pwrite64: I/O Primitives.
85771 -* qecvt: System V Number Conversion.
85772 -* qecvt_r: System V Number Conversion.
85773 -* qfcvt: System V Number Conversion.
85774 -* qfcvt_r: System V Number Conversion.
85775 -* qgcvt: System V Number Conversion.
85776 -* qsort: Array Sort Function.
85777 -* raise: Signaling Yourself.
85778 -* rand: ISO Random.
85779 -* rand_r: ISO Random.
85780 -* random: BSD Random.
85781 -* random_r: BSD Random.
85782 -* rawmemchr: Search Functions.
85783 -* read: I/O Primitives.
85784 -* readdir: Reading/Closing Directory.
85785 -* readdir64: Reading/Closing Directory.
85786 -* readdir64_r: Reading/Closing Directory.
85787 -* readdir_r: Reading/Closing Directory.
85788 -* readlink: Symbolic Links.
85789 -* readv: Scatter-Gather.
85790 -* realloc: Changing Block Size.
85791 -* realpath: Symbolic Links.
85792 -* recv: Receiving Data.
85793 -* recvfrom: Receiving Datagrams.
85794 -* regcomp: POSIX Regexp Compilation.
85795 -* regerror: Regexp Cleanup.
85796 -* regexec: Matching POSIX Regexps.
85797 -* regfree: Regexp Cleanup.
85798 -* register_printf_function: Registering New Conversions.
85799 -* remainder: Remainder Functions.
85800 -* remainderf: Remainder Functions.
85801 -* remainderl: Remainder Functions.
85802 -* remove: Deleting Files.
85803 -* rename: Renaming Files.
85804 -* rewind: File Positioning.
85805 -* rewinddir: Random Access Directory.
85806 -* rindex: Search Functions.
85807 -* rint: Rounding Functions.
85808 -* rintf: Rounding Functions.
85809 -* rintl: Rounding Functions.
85810 -* rmdir: Deleting Files.
85811 -* round: Rounding Functions.
85812 -* roundf: Rounding Functions.
85813 -* roundl: Rounding Functions.
85814 -* rpmatch: Yes-or-No Questions.
85815 -* S_ISBLK: Testing File Type.
85816 -* S_ISCHR: Testing File Type.
85817 -* S_ISDIR: Testing File Type.
85818 -* S_ISFIFO: Testing File Type.
85819 -* S_ISLNK: Testing File Type.
85820 -* S_ISREG: Testing File Type.
85821 -* S_ISSOCK: Testing File Type.
85822 -* S_TYPEISMQ: Testing File Type.
85823 -* S_TYPEISSEM: Testing File Type.
85824 -* S_TYPEISSHM: Testing File Type.
85825 -* sbrk: Resizing the Data Segment.
85826 -* scalb: Normalization Functions.
85827 -* scalbf: Normalization Functions.
85828 -* scalbl: Normalization Functions.
85829 -* scalbln: Normalization Functions.
85830 -* scalblnf: Normalization Functions.
85831 -* scalblnl: Normalization Functions.
85832 -* scalbn: Normalization Functions.
85833 -* scalbnf: Normalization Functions.
85834 -* scalbnl: Normalization Functions.
85835 -* scandir: Scanning Directory Content.
85836 -* scandir64: Scanning Directory Content.
85837 -* scanf: Formatted Input Functions.
85838 -* sched_get_priority_max: Basic Scheduling Functions.
85839 -* sched_get_priority_min: Basic Scheduling Functions.
85840 -* sched_getparam: Basic Scheduling Functions.
85841 -* sched_getscheduler: Basic Scheduling Functions.
85842 -* sched_rr_get_interval: Basic Scheduling Functions.
85843 -* sched_setparam: Basic Scheduling Functions.
85844 -* sched_setscheduler: Basic Scheduling Functions.
85845 -* sched_yield: Basic Scheduling Functions.
85846 -* seed48: SVID Random.
85847 -* seed48_r: SVID Random.
85848 -* seekdir: Random Access Directory.
85849 -* select: Waiting for I/O.
85850 -* sem_destroy: POSIX Semaphores.
85851 -* sem_getvalue: POSIX Semaphores.
85852 -* sem_init: POSIX Semaphores.
85853 -* sem_post: POSIX Semaphores.
85854 -* sem_trywait: POSIX Semaphores.
85855 -* sem_wait: POSIX Semaphores.
85856 -* send: Sending Data.
85857 -* sendto: Sending Datagrams.
85858 -* setbuf: Controlling Buffering.
85859 -* setbuffer: Controlling Buffering.
85860 -* setcontext: System V contexts.
85861 -* setdomainname: Host Identification.
85862 -* setegid: Setting Groups.
85863 -* setenv: Environment Access.
85864 -* seteuid: Setting User ID.
85865 -* setfsent: fstab.
85866 -* setgid: Setting Groups.
85867 -* setgrent: Scanning All Groups.
85868 -* setgroups: Setting Groups.
85869 -* sethostent: Host Names.
85870 -* sethostid: Host Identification.
85871 -* sethostname: Host Identification.
85872 -* setitimer: Setting an Alarm.
85873 -* setjmp: Non-Local Details.
85874 -* setkey: DES Encryption.
85875 -* setkey_r: DES Encryption.
85876 -* setlinebuf: Controlling Buffering.
85877 -* setlocale: Setting the Locale.
85878 -* setlogmask: setlogmask.
85879 -* setmntent: mtab.
85880 -* setnetent: Networks Database.
85881 -* setnetgrent: Lookup Netgroup.
85882 -* setpgid: Process Group Functions.
85883 -* setpgrp: Process Group Functions.
85884 -* setpriority: Traditional Scheduling Functions.
85885 -* setprotoent: Protocols Database.
85886 -* setpwent: Scanning All Users.
85887 -* setregid: Setting Groups.
85888 -* setreuid: Setting User ID.
85889 -* setrlimit: Limits on Resources.
85890 -* setrlimit64: Limits on Resources.
85891 -* setservent: Services Database.
85892 -* setsid: Process Group Functions.
85893 -* setsockopt: Socket Option Functions.
85894 -* setstate: BSD Random.
85895 -* setstate_r: BSD Random.
85896 -* settimeofday: High-Resolution Calendar.
85897 -* setuid: Setting User ID.
85898 -* setutent: Manipulating the Database.
85899 -* setutxent: XPG Functions.
85900 -* setvbuf: Controlling Buffering.
85901 -* shutdown: Closing a Socket.
85902 -* sigaction: Advanced Signal Handling.
85903 -* sigaddset: Signal Sets.
85904 -* sigaltstack: Signal Stack.
85905 -* sigblock: Blocking in BSD.
85906 -* sigdelset: Signal Sets.
85907 -* sigemptyset: Signal Sets.
85908 -* sigfillset: Signal Sets.
85909 -* siginterrupt: BSD Handler.
85910 -* sigismember: Signal Sets.
85911 -* siglongjmp: Non-Local Exits and Signals.
85912 -* sigmask: Blocking in BSD.
85913 -* signal: Basic Signal Handling.
85914 -* signbit: FP Bit Twiddling.
85915 -* significand: Normalization Functions.
85916 -* significandf: Normalization Functions.
85917 -* significandl: Normalization Functions.
85918 -* sigpause: Blocking in BSD.
85919 -* sigpending: Checking for Pending Signals.
85920 -* sigprocmask: Process Signal Mask.
85921 -* sigsetjmp: Non-Local Exits and Signals.
85922 -* sigsetmask: Blocking in BSD.
85923 -* sigstack: Signal Stack.
85924 -* sigsuspend: Sigsuspend.
85925 -* sigvec: BSD Handler.
85926 -* sigwait: Threads and Signal Handling.
85927 -* sin: Trig Functions.
85928 -* sincos: Trig Functions.
85929 -* sincosf: Trig Functions.
85930 -* sincosl: Trig Functions.
85931 -* sinf: Trig Functions.
85932 -* sinh: Hyperbolic Functions.
85933 -* sinhf: Hyperbolic Functions.
85934 -* sinhl: Hyperbolic Functions.
85935 -* sinl: Trig Functions.
85936 -* sleep: Sleeping.
85937 -* snprintf: Formatted Output Functions.
85938 -* socket: Creating a Socket.
85939 -* socketpair: Socket Pairs.
85940 -* sprintf: Formatted Output Functions.
85941 -* sqrt: Exponents and Logarithms.
85942 -* sqrtf: Exponents and Logarithms.
85943 -* sqrtl: Exponents and Logarithms.
85944 -* srand: ISO Random.
85945 -* srand48: SVID Random.
85946 -* srand48_r: SVID Random.
85947 -* srandom: BSD Random.
85948 -* srandom_r: BSD Random.
85949 -* sscanf: Formatted Input Functions.
85950 -* ssignal: Basic Signal Handling.
85951 -* stat: Reading Attributes.
85952 -* stat64: Reading Attributes.
85953 -* stime: Simple Calendar Time.
85954 -* stpcpy: Copying and Concatenation.
85955 -* stpncpy: Copying and Concatenation.
85956 -* strcasecmp: String/Array Comparison.
85957 -* strcasestr: Search Functions.
85958 -* strcat: Copying and Concatenation.
85959 -* strchr: Search Functions.
85960 -* strchrnul: Search Functions.
85961 -* strcmp: String/Array Comparison.
85962 -* strcoll: Collation Functions.
85963 -* strcpy: Copying and Concatenation.
85964 -* strcspn: Search Functions.
85965 -* strdup: Copying and Concatenation.
85966 -* strdupa: Copying and Concatenation.
85967 -* strerror: Error Messages.
85968 -* strerror_r: Error Messages.
85969 -* strfmon: Formatting Numbers.
85970 -* strfry: strfry.
85971 -* strftime: Formatting Calendar Time.
85972 -* strlen: String Length.
85973 -* strncasecmp: String/Array Comparison.
85974 -* strncat: Copying and Concatenation.
85975 -* strncmp: String/Array Comparison.
85976 -* strncpy: Copying and Concatenation.
85977 -* strndup: Copying and Concatenation.
85978 -* strndupa: Copying and Concatenation.
85979 -* strnlen: String Length.
85980 -* strpbrk: Search Functions.
85981 -* strptime: Low-Level Time String Parsing.
85982 -* strrchr: Search Functions.
85983 -* strsep: Finding Tokens in a String.
85984 -* strsignal: Signal Messages.
85985 -* strspn: Search Functions.
85986 -* strstr: Search Functions.
85987 -* strtod: Parsing of Floats.
85988 -* strtof: Parsing of Floats.
85989 -* strtoimax: Parsing of Integers.
85990 -* strtok: Finding Tokens in a String.
85991 -* strtok_r: Finding Tokens in a String.
85992 -* strtol: Parsing of Integers.
85993 -* strtold: Parsing of Floats.
85994 -* strtoll: Parsing of Integers.
85995 -* strtoq: Parsing of Integers.
85996 -* strtoul: Parsing of Integers.
85997 -* strtoull: Parsing of Integers.
85998 -* strtoumax: Parsing of Integers.
85999 -* strtouq: Parsing of Integers.
86000 -* strverscmp: String/Array Comparison.
86001 -* strxfrm: Collation Functions.
86002 -* stty: BSD Terminal Modes.
86003 -* success: Actions in the NSS configuration.
86004 -* SUN_LEN: Local Namespace Details.
86005 -* swapcontext: System V contexts.
86006 -* swprintf: Formatted Output Functions.
86007 -* swscanf: Formatted Input Functions.
86008 -* symlink: Symbolic Links.
86009 -* sync: Synchronizing I/O.
86010 -* syscall: System Calls.
86011 -* sysconf: Sysconf Definition.
86012 -* sysctl: System Parameters.
86013 -* syslog: syslog; vsyslog.
86014 -* system: Running a Command.
86015 -* sysv_signal: Basic Signal Handling.
86016 -* tan: Trig Functions.
86017 -* tanf: Trig Functions.
86018 -* tanh: Hyperbolic Functions.
86019 -* tanhf: Hyperbolic Functions.
86020 -* tanhl: Hyperbolic Functions.
86021 -* tanl: Trig Functions.
86022 -* tcdrain: Line Control.
86023 -* tcflow: Line Control.
86024 -* tcflush: Line Control.
86025 -* tcgetattr: Mode Functions.
86026 -* tcgetpgrp: Terminal Access Functions.
86027 -* tcgetsid: Terminal Access Functions.
86028 -* tcsendbreak: Line Control.
86029 -* tcsetattr: Mode Functions.
86030 -* tcsetpgrp: Terminal Access Functions.
86031 -* tdelete: Tree Search Function.
86032 -* tdestroy: Tree Search Function.
86033 -* telldir: Random Access Directory.
86034 -* TEMP_FAILURE_RETRY: Interrupted Primitives.
86035 -* tempnam: Temporary Files.
86036 -* textdomain: Locating gettext catalog.
86037 -* tfind: Tree Search Function.
86038 -* tgamma: Special Functions.
86039 -* tgammaf: Special Functions.
86040 -* tgammal: Special Functions.
86041 -* time: Simple Calendar Time.
86042 -* timegm: Broken-down Time.
86043 -* timelocal: Broken-down Time.
86044 -* times: Processor Time.
86045 -* tmpfile: Temporary Files.
86046 -* tmpfile64: Temporary Files.
86047 -* tmpnam: Temporary Files.
86048 -* tmpnam_r: Temporary Files.
86049 -* toascii: Case Conversion.
86050 -* tolower: Case Conversion.
86051 -* toupper: Case Conversion.
86052 -* towctrans: Wide Character Case Conversion.
86053 -* towlower: Wide Character Case Conversion.
86054 -* towupper: Wide Character Case Conversion.
86055 -* trunc: Rounding Functions.
86056 -* truncate: File Size.
86057 -* truncate64: File Size.
86058 -* truncf: Rounding Functions.
86059 -* truncl: Rounding Functions.
86060 -* tryagain: Actions in the NSS configuration.
86061 -* tsearch: Tree Search Function.
86062 -* ttyname: Is It a Terminal.
86063 -* ttyname_r: Is It a Terminal.
86064 -* twalk: Tree Search Function.
86065 -* tzset: Time Zone Functions.
86066 -* ulimit: Limits on Resources.
86067 -* umask: Setting Permissions.
86068 -* umount: Mount-Unmount-Remount.
86069 -* umount2: Mount-Unmount-Remount.
86070 -* uname: Platform Type.
86071 -* unavail: Actions in the NSS configuration.
86072 -* ungetc: How Unread.
86073 -* ungetwc: How Unread.
86074 -* unlink: Deleting Files.
86075 -* unlockpt: Allocation.
86076 -* unsetenv: Environment Access.
86077 -* updwtmp: Manipulating the Database.
86078 -* utime: File Times.
86079 -* utimes: File Times.
86080 -* utmpname: Manipulating the Database.
86081 -* utmpxname: XPG Functions.
86082 -* va_alist: Old Varargs.
86083 -* va_arg: Argument Macros.
86084 -* va_dcl: Old Varargs.
86085 -* va_end: Argument Macros.
86086 -* va_start <1>: Old Varargs.
86087 -* va_start: Argument Macros.
86088 -* valloc: Aligned Memory Blocks.
86089 -* vasprintf: Variable Arguments Output.
86090 -* verr: Error Messages.
86091 -* verrx: Error Messages.
86092 -* versionsort: Scanning Directory Content.
86093 -* versionsort64: Scanning Directory Content.
86094 -* vfork: Creating a Process.
86095 -* vfprintf: Variable Arguments Output.
86096 -* vfscanf: Variable Arguments Input.
86097 -* vfwprintf: Variable Arguments Output.
86098 -* vfwscanf: Variable Arguments Input.
86099 -* vlimit: Limits on Resources.
86100 -* vprintf: Variable Arguments Output.
86101 -* vscanf: Variable Arguments Input.
86102 -* vsnprintf: Variable Arguments Output.
86103 -* vsprintf: Variable Arguments Output.
86104 -* vsscanf: Variable Arguments Input.
86105 -* vswprintf: Variable Arguments Output.
86106 -* vswscanf: Variable Arguments Input.
86107 -* vsyslog: syslog; vsyslog.
86108 -* vtimes: Resource Usage.
86109 -* vwarn: Error Messages.
86110 -* vwarnx: Error Messages.
86111 -* vwprintf: Variable Arguments Output.
86112 -* vwscanf: Variable Arguments Input.
86113 -* wait: Process Completion.
86114 -* wait3: BSD Wait Functions.
86115 -* wait4: Process Completion.
86116 -* waitpid: Process Completion.
86117 -* warn: Error Messages.
86118 -* warnx: Error Messages.
86119 -* WCOREDUMP: Process Completion Status.
86120 -* wcpcpy: Copying and Concatenation.
86121 -* wcpncpy: Copying and Concatenation.
86122 -* wcrtomb: Converting a Character.
86123 -* wcscasecmp: String/Array Comparison.
86124 -* wcscat: Copying and Concatenation.
86125 -* wcschr: Search Functions.
86126 -* wcschrnul: Search Functions.
86127 -* wcscmp: String/Array Comparison.
86128 -* wcscoll: Collation Functions.
86129 -* wcscpy: Copying and Concatenation.
86130 -* wcscspn: Search Functions.
86131 -* wcsdup: Copying and Concatenation.
86132 -* wcsftime: Formatting Calendar Time.
86133 -* wcslen: String Length.
86134 -* wcsncasecmp: String/Array Comparison.
86135 -* wcsncat: Copying and Concatenation.
86136 -* wcsncmp: String/Array Comparison.
86137 -* wcsncpy: Copying and Concatenation.
86138 -* wcsnlen: String Length.
86139 -* wcsnrtombs: Converting Strings.
86140 -* wcspbrk: Search Functions.
86141 -* wcsrchr: Search Functions.
86142 -* wcsrtombs: Converting Strings.
86143 -* wcsspn: Search Functions.
86144 -* wcsstr: Search Functions.
86145 -* wcstod: Parsing of Floats.
86146 -* wcstof: Parsing of Floats.
86147 -* wcstoimax: Parsing of Integers.
86148 -* wcstok: Finding Tokens in a String.
86149 -* wcstol: Parsing of Integers.
86150 -* wcstold: Parsing of Floats.
86151 -* wcstoll: Parsing of Integers.
86152 -* wcstombs: Non-reentrant String Conversion.
86153 -* wcstoq: Parsing of Integers.
86154 -* wcstoul: Parsing of Integers.
86155 -* wcstoull: Parsing of Integers.
86156 -* wcstoumax: Parsing of Integers.
86157 -* wcstouq: Parsing of Integers.
86158 -* wcswcs: Search Functions.
86159 -* wcsxfrm: Collation Functions.
86160 -* wctob: Converting a Character.
86161 -* wctomb: Non-reentrant Character Conversion.
86162 -* wctrans: Wide Character Case Conversion.
86163 -* wctype: Classification of Wide Characters.
86164 -* WEXITSTATUS: Process Completion Status.
86165 -* WIFEXITED: Process Completion Status.
86166 -* WIFSIGNALED: Process Completion Status.
86167 -* WIFSTOPPED: Process Completion Status.
86168 -* wmemchr: Search Functions.
86169 -* wmemcmp: String/Array Comparison.
86170 -* wmemcpy: Copying and Concatenation.
86171 -* wmemmove: Copying and Concatenation.
86172 -* wmempcpy: Copying and Concatenation.
86173 -* wmemset: Copying and Concatenation.
86174 -* wordexp: Calling Wordexp.
86175 -* wordfree: Calling Wordexp.
86176 -* wprintf: Formatted Output Functions.
86177 -* write: I/O Primitives.
86178 -* writev: Scatter-Gather.
86179 -* wscanf: Formatted Input Functions.
86180 -* WSTOPSIG: Process Completion Status.
86181 -* WTERMSIG: Process Completion Status.
86182 -* y0: Special Functions.
86183 -* y0f: Special Functions.
86184 -* y0l: Special Functions.
86185 -* y1: Special Functions.
86186 -* y1f: Special Functions.
86187 -* y1l: Special Functions.
86188 -* yn: Special Functions.
86189 -* ynf: Special Functions.
86190 -* ynl: Special Functions.
86192 diff -u -udbrN glibc-2.3.2/manual/libc.info-6 glibc-2.3.2-200304020432/manual/libc.info-6
86193 --- glibc-2.3.2/manual/libc.info-6 Sat Mar 1 02:39:41 2003
86194 +++ glibc-2.3.2-200304020432/manual/libc.info-6 Thu Jan 1 01:00:00 1970
86195 @@ -1,686 +0,0 @@
86196 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
86198 -INFO-DIR-SECTION GNU libraries
86199 -START-INFO-DIR-ENTRY
86200 -* Libc: (libc). C library.
86201 -END-INFO-DIR-ENTRY
86203 - This file documents the GNU C library.
86205 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
86206 -Reference Manual', for Version 2.3.x.
86208 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
86209 -Free Software Foundation, Inc.
86211 - Permission is granted to copy, distribute and/or modify this document
86212 -under the terms of the GNU Free Documentation License, Version 1.1 or
86213 -any later version published by the Free Software Foundation; with the
86214 -Invariant Sections being "Free Software Needs Free Documentation" and
86215 -"GNU Lesser General Public License", the Front-Cover texts being (a)
86216 -(see below), and with the Back-Cover Texts being (b) (see below). A
86217 -copy of the license is included in the section entitled "GNU Free
86218 -Documentation License".
86220 - (a) The FSF's Front-Cover Text is:
86222 - A GNU Manual
86224 - (b) The FSF's Back-Cover Text is:
86226 - You have freedom to copy and modify this GNU Manual, like GNU
86227 -software. Copies published by the Free Software Foundation raise
86228 -funds for GNU development.
86230 -\x1f
86231 -File: libc.info, Node: Classification of Wide Characters, Next: Using Wide Char Classes, Prev: Case Conversion, Up: Character Handling
86233 -Character class determination for wide characters
86234 -=================================================
86236 - Amendment 1 to ISO C90 defines functions to classify wide
86237 -characters. Although the original ISO C90 standard already defined the
86238 -type `wchar_t', no functions operating on them were defined.
86240 - The general design of the classification functions for wide
86241 -characters is more general. It allows extensions to the set of
86242 -available classifications, beyond those which are always available.
86243 -The POSIX standard specifies how extensions can be made, and this is
86244 -already implemented in the GNU C library implementation of the
86245 -`localedef' program.
86247 - The character class functions are normally implemented with bitsets,
86248 -with a bitset per character. For a given character, the appropriate
86249 -bitset is read from a table and a test is performed as to whether a
86250 -certain bit is set. Which bit is tested for is determined by the class.
86252 - For the wide character classification functions this is made visible.
86253 -There is a type classification type defined, a function to retrieve this
86254 -value for a given class, and a function to test whether a given
86255 -character is in this class, using the classification value. On top of
86256 -this the normal character classification functions as used for `char'
86257 -objects can be defined.
86259 - - Data type: wctype_t
86260 - The `wctype_t' can hold a value which represents a character class.
86261 - The only defined way to generate such a value is by using the
86262 - `wctype' function.
86264 - This type is defined in `wctype.h'.
86266 - - Function: wctype_t wctype (const char *PROPERTY)
86267 - The `wctype' returns a value representing a class of wide
86268 - characters which is identified by the string PROPERTY. Beside
86269 - some standard properties each locale can define its own ones. In
86270 - case no property with the given name is known for the current
86271 - locale selected for the `LC_CTYPE' category, the function returns
86272 - zero.
86274 - The properties known in every locale are:
86276 - `"alnum"' `"alpha"' `"cntrl"' `"digit"'
86277 - `"graph"' `"lower"' `"print"' `"punct"'
86278 - `"space"' `"upper"' `"xdigit"'
86280 - This function is declared in `wctype.h'.
86282 - To test the membership of a character to one of the non-standard
86283 -classes the ISO C standard defines a completely new function.
86285 - - Function: int iswctype (wint_t WC, wctype_t DESC)
86286 - This function returns a nonzero value if WC is in the character
86287 - class specified by DESC. DESC must previously be returned by a
86288 - successful call to `wctype'.
86290 - This function is declared in `wctype.h'.
86292 - To make it easier to use the commonly-used classification functions,
86293 -they are defined in the C library. There is no need to use `wctype' if
86294 -the property string is one of the known character classes. In some
86295 -situations it is desirable to construct the property strings, and then
86296 -it is important that `wctype' can also handle the standard classes.
86298 - - Function: int iswalnum (wint_t WC)
86299 - This function returns a nonzero value if WC is an alphanumeric
86300 - character (a letter or number); in other words, if either
86301 - `iswalpha' or `iswdigit' is true of a character, then `iswalnum'
86302 - is also true.
86304 - This function can be implemented using
86306 - iswctype (wc, wctype ("alnum"))
86308 - It is declared in `wctype.h'.
86310 - - Function: int iswalpha (wint_t WC)
86311 - Returns true if WC is an alphabetic character (a letter). If
86312 - `iswlower' or `iswupper' is true of a character, then `iswalpha'
86313 - is also true.
86315 - In some locales, there may be additional characters for which
86316 - `iswalpha' is true--letters which are neither upper case nor lower
86317 - case. But in the standard `"C"' locale, there are no such
86318 - additional characters.
86320 - This function can be implemented using
86322 - iswctype (wc, wctype ("alpha"))
86324 - It is declared in `wctype.h'.
86326 - - Function: int iswcntrl (wint_t WC)
86327 - Returns true if WC is a control character (that is, a character
86328 - that is not a printing character).
86330 - This function can be implemented using
86332 - iswctype (wc, wctype ("cntrl"))
86334 - It is declared in `wctype.h'.
86336 - - Function: int iswdigit (wint_t WC)
86337 - Returns true if WC is a digit (e.g., `0' through `9'). Please
86338 - note that this function does not only return a nonzero value for
86339 - _decimal_ digits, but for all kinds of digits. A consequence is
86340 - that code like the following will *not* work unconditionally for
86341 - wide characters:
86343 - n = 0;
86344 - while (iswdigit (*wc))
86346 - n *= 10;
86347 - n += *wc++ - L'0';
86350 - This function can be implemented using
86352 - iswctype (wc, wctype ("digit"))
86354 - It is declared in `wctype.h'.
86356 - - Function: int iswgraph (wint_t WC)
86357 - Returns true if WC is a graphic character; that is, a character
86358 - that has a glyph associated with it. The whitespace characters
86359 - are not considered graphic.
86361 - This function can be implemented using
86363 - iswctype (wc, wctype ("graph"))
86365 - It is declared in `wctype.h'.
86367 - - Function: int iswlower (wint_t WC)
86368 - Returns true if WC is a lower-case letter. The letter need not be
86369 - from the Latin alphabet, any alphabet representable is valid.
86371 - This function can be implemented using
86373 - iswctype (wc, wctype ("lower"))
86375 - It is declared in `wctype.h'.
86377 - - Function: int iswprint (wint_t WC)
86378 - Returns true if WC is a printing character. Printing characters
86379 - include all the graphic characters, plus the space (` ') character.
86381 - This function can be implemented using
86383 - iswctype (wc, wctype ("print"))
86385 - It is declared in `wctype.h'.
86387 - - Function: int iswpunct (wint_t WC)
86388 - Returns true if WC is a punctuation character. This means any
86389 - printing character that is not alphanumeric or a space character.
86391 - This function can be implemented using
86393 - iswctype (wc, wctype ("punct"))
86395 - It is declared in `wctype.h'.
86397 - - Function: int iswspace (wint_t WC)
86398 - Returns true if WC is a "whitespace" character. In the standard
86399 - `"C"' locale, `iswspace' returns true for only the standard
86400 - whitespace characters:
86402 - `L' ''
86403 - space
86405 - `L'\f''
86406 - formfeed
86408 - `L'\n''
86409 - newline
86411 - `L'\r''
86412 - carriage return
86414 - `L'\t''
86415 - horizontal tab
86417 - `L'\v''
86418 - vertical tab
86420 - This function can be implemented using
86422 - iswctype (wc, wctype ("space"))
86424 - It is declared in `wctype.h'.
86426 - - Function: int iswupper (wint_t WC)
86427 - Returns true if WC is an upper-case letter. The letter need not be
86428 - from the Latin alphabet, any alphabet representable is valid.
86430 - This function can be implemented using
86432 - iswctype (wc, wctype ("upper"))
86434 - It is declared in `wctype.h'.
86436 - - Function: int iswxdigit (wint_t WC)
86437 - Returns true if WC is a hexadecimal digit. Hexadecimal digits
86438 - include the normal decimal digits `0' through `9' and the letters
86439 - `A' through `F' and `a' through `f'.
86441 - This function can be implemented using
86443 - iswctype (wc, wctype ("xdigit"))
86445 - It is declared in `wctype.h'.
86447 - The GNU C library also provides a function which is not defined in
86448 -the ISO C standard but which is available as a version for single byte
86449 -characters as well.
86451 - - Function: int iswblank (wint_t WC)
86452 - Returns true if WC is a blank character; that is, a space or a tab.
86453 - This function is a GNU extension. It is declared in `wchar.h'.
86455 -\x1f
86456 -File: libc.info, Node: Using Wide Char Classes, Next: Wide Character Case Conversion, Prev: Classification of Wide Characters, Up: Character Handling
86458 -Notes on using the wide character classes
86459 -=========================================
86461 - The first note is probably not astonishing but still occasionally a
86462 -cause of problems. The `iswXXX' functions can be implemented using
86463 -macros and in fact, the GNU C library does this. They are still
86464 -available as real functions but when the `wctype.h' header is included
86465 -the macros will be used. This is the same as the `char' type versions
86466 -of these functions.
86468 - The second note covers something new. It can be best illustrated by
86469 -a (real-world) example. The first piece of code is an excerpt from the
86470 -original code. It is truncated a bit but the intention should be clear.
86472 - int
86473 - is_in_class (int c, const char *class)
86475 - if (strcmp (class, "alnum") == 0)
86476 - return isalnum (c);
86477 - if (strcmp (class, "alpha") == 0)
86478 - return isalpha (c);
86479 - if (strcmp (class, "cntrl") == 0)
86480 - return iscntrl (c);
86481 - ...
86482 - return 0;
86485 - Now, with the `wctype' and `iswctype' you can avoid the `if'
86486 -cascades, but rewriting the code as follows is wrong:
86488 - int
86489 - is_in_class (int c, const char *class)
86491 - wctype_t desc = wctype (class);
86492 - return desc ? iswctype ((wint_t) c, desc) : 0;
86495 - The problem is that it is not guaranteed that the wide character
86496 -representation of a single-byte character can be found using casting.
86497 -In fact, usually this fails miserably. The correct solution to this
86498 -problem is to write the code as follows:
86500 - int
86501 - is_in_class (int c, const char *class)
86503 - wctype_t desc = wctype (class);
86504 - return desc ? iswctype (btowc (c), desc) : 0;
86507 - *Note Converting a Character::, for more information on `btowc'.
86508 -Note that this change probably does not improve the performance of the
86509 -program a lot since the `wctype' function still has to make the string
86510 -comparisons. It gets really interesting if the `is_in_class' function
86511 -is called more than once for the same class name. In this case the
86512 -variable DESC could be computed once and reused for all the calls.
86513 -Therefore the above form of the function is probably not the final one.
86515 -\x1f
86516 -File: libc.info, Node: Wide Character Case Conversion, Prev: Using Wide Char Classes, Up: Character Handling
86518 -Mapping of wide characters.
86519 -===========================
86521 - The classification functions are also generalized by the ISO C
86522 -standard. Instead of just allowing the two standard mappings, a locale
86523 -can contain others. Again, the `localedef' program already supports
86524 -generating such locale data files.
86526 - - Data Type: wctrans_t
86527 - This data type is defined as a scalar type which can hold a value
86528 - representing the locale-dependent character mapping. There is no
86529 - way to construct such a value apart from using the return value of
86530 - the `wctrans' function.
86532 - This type is defined in `wctype.h'.
86534 - - Function: wctrans_t wctrans (const char *PROPERTY)
86535 - The `wctrans' function has to be used to find out whether a named
86536 - mapping is defined in the current locale selected for the
86537 - `LC_CTYPE' category. If the returned value is non-zero, you can
86538 - use it afterwards in calls to `towctrans'. If the return value is
86539 - zero no such mapping is known in the current locale.
86541 - Beside locale-specific mappings there are two mappings which are
86542 - guaranteed to be available in every locale:
86544 - `"tolower"' `"toupper"'
86546 - These functions are declared in `wctype.h'.
86548 - - Function: wint_t towctrans (wint_t WC, wctrans_t DESC)
86549 - `towctrans' maps the input character WC according to the rules of
86550 - the mapping for which DESC is a descriptor, and returns the value
86551 - it finds. DESC must be obtained by a successful call to `wctrans'.
86553 - This function is declared in `wctype.h'.
86555 - For the generally available mappings, the ISO C standard defines
86556 -convenient shortcuts so that it is not necessary to call `wctrans' for
86557 -them.
86559 - - Function: wint_t towlower (wint_t WC)
86560 - If WC is an upper-case letter, `towlower' returns the corresponding
86561 - lower-case letter. If WC is not an upper-case letter, WC is
86562 - returned unchanged.
86564 - `towlower' can be implemented using
86566 - towctrans (wc, wctrans ("tolower"))
86568 - This function is declared in `wctype.h'.
86570 - - Function: wint_t towupper (wint_t WC)
86571 - If WC is a lower-case letter, `towupper' returns the corresponding
86572 - upper-case letter. Otherwise WC is returned unchanged.
86574 - `towupper' can be implemented using
86576 - towctrans (wc, wctrans ("toupper"))
86578 - This function is declared in `wctype.h'.
86580 - The same warnings given in the last section for the use of the wide
86581 -character classification functions apply here. It is not possible to
86582 -simply cast a `char' type value to a `wint_t' and use it as an argument
86583 -to `towctrans' calls.
86585 -\x1f
86586 -File: libc.info, Node: String and Array Utilities, Next: Character Set Handling, Prev: Character Handling, Up: Top
86588 -String and Array Utilities
86589 -**************************
86591 - Operations on strings (or arrays of characters) are an important
86592 -part of many programs. The GNU C library provides an extensive set of
86593 -string utility functions, including functions for copying,
86594 -concatenating, comparing, and searching strings. Many of these
86595 -functions can also operate on arbitrary regions of storage; for
86596 -example, the `memcpy' function can be used to copy the contents of any
86597 -kind of array.
86599 - It's fairly common for beginning C programmers to "reinvent the
86600 -wheel" by duplicating this functionality in their own code, but it pays
86601 -to become familiar with the library functions and to make use of them,
86602 -since this offers benefits in maintenance, efficiency, and portability.
86604 - For instance, you could easily compare one string to another in two
86605 -lines of C code, but if you use the built-in `strcmp' function, you're
86606 -less likely to make a mistake. And, since these library functions are
86607 -typically highly optimized, your program may run faster too.
86609 -* Menu:
86611 -* Representation of Strings:: Introduction to basic concepts.
86612 -* String/Array Conventions:: Whether to use a string function or an
86613 - arbitrary array function.
86614 -* String Length:: Determining the length of a string.
86615 -* Copying and Concatenation:: Functions to copy the contents of strings
86616 - and arrays.
86617 -* String/Array Comparison:: Functions for byte-wise and character-wise
86618 - comparison.
86619 -* Collation Functions:: Functions for collating strings.
86620 -* Search Functions:: Searching for a specific element or substring.
86621 -* Finding Tokens in a String:: Splitting a string into tokens by looking
86622 - for delimiters.
86623 -* strfry:: Function for flash-cooking a string.
86624 -* Trivial Encryption:: Obscuring data.
86625 -* Encode Binary Data:: Encoding and Decoding of Binary Data.
86626 -* Argz and Envz Vectors:: Null-separated string vectors.
86628 -\x1f
86629 -File: libc.info, Node: Representation of Strings, Next: String/Array Conventions, Up: String and Array Utilities
86631 -Representation of Strings
86632 -=========================
86634 - This section is a quick summary of string concepts for beginning C
86635 -programmers. It describes how character strings are represented in C
86636 -and some common pitfalls. If you are already familiar with this
86637 -material, you can skip this section.
86639 - A "string" is an array of `char' objects. But string-valued
86640 -variables are usually declared to be pointers of type `char *'. Such
86641 -variables do not include space for the text of a string; that has to be
86642 -stored somewhere else--in an array variable, a string constant, or
86643 -dynamically allocated memory (*note Memory Allocation::). It's up to
86644 -you to store the address of the chosen memory space into the pointer
86645 -variable. Alternatively you can store a "null pointer" in the pointer
86646 -variable. The null pointer does not point anywhere, so attempting to
86647 -reference the string it points to gets an error.
86649 - "string" normally refers to multibyte character strings as opposed to
86650 -wide character strings. Wide character strings are arrays of type
86651 -`wchar_t' and as for multibyte character strings usually pointers of
86652 -type `wchar_t *' are used.
86654 - By convention, a "null character", `'\0'', marks the end of a
86655 -multibyte character string and the "null wide character", `L'\0'',
86656 -marks the end of a wide character string. For example, in testing to
86657 -see whether the `char *' variable P points to a null character marking
86658 -the end of a string, you can write `!*P' or `*P == '\0''.
86660 - A null character is quite different conceptually from a null pointer,
86661 -although both are represented by the integer `0'.
86663 - "String literals" appear in C program source as strings of
86664 -characters between double-quote characters (`"') where the initial
86665 -double-quote character is immediately preceded by a capital `L' (ell)
86666 -character (as in `L"foo"'). In ISO C, string literals can also be
86667 -formed by "string concatenation": `"a" "b"' is the same as `"ab"'. For
86668 -wide character strings one can either use `L"a" L"b"' or `L"a" "b"'.
86669 -Modification of string literals is not allowed by the GNU C compiler,
86670 -because literals are placed in read-only storage.
86672 - Character arrays that are declared `const' cannot be modified
86673 -either. It's generally good style to declare non-modifiable string
86674 -pointers to be of type `const char *', since this often allows the C
86675 -compiler to detect accidental modifications as well as providing some
86676 -amount of documentation about what your program intends to do with the
86677 -string.
86679 - The amount of memory allocated for the character array may extend
86680 -past the null character that normally marks the end of the string. In
86681 -this document, the term "allocated size" is always used to refer to the
86682 -total amount of memory allocated for the string, while the term
86683 -"length" refers to the number of characters up to (but not including)
86684 -the terminating null character.
86686 - A notorious source of program bugs is trying to put more characters
86687 -in a string than fit in its allocated size. When writing code that
86688 -extends strings or moves characters into a pre-allocated array, you
86689 -should be very careful to keep track of the length of the text and make
86690 -explicit checks for overflowing the array. Many of the library
86691 -functions _do not_ do this for you! Remember also that you need to
86692 -allocate an extra byte to hold the null character that marks the end of
86693 -the string.
86695 - Originally strings were sequences of bytes where each byte
86696 -represents a single character. This is still true today if the strings
86697 -are encoded using a single-byte character encoding. Things are
86698 -different if the strings are encoded using a multibyte encoding (for
86699 -more information on encodings see *Note Extended Char Intro::). There
86700 -is no difference in the programming interface for these two kind of
86701 -strings; the programmer has to be aware of this and interpret the byte
86702 -sequences accordingly.
86704 - But since there is no separate interface taking care of these
86705 -differences the byte-based string functions are sometimes hard to use.
86706 -Since the count parameters of these functions specify bytes a call to
86707 -`strncpy' could cut a multibyte character in the middle and put an
86708 -incomplete (and therefore unusable) byte sequence in the target buffer.
86710 - To avoid these problems later versions of the ISO C standard
86711 -introduce a second set of functions which are operating on "wide
86712 -characters" (*note Extended Char Intro::). These functions don't have
86713 -the problems the single-byte versions have since every wide character is
86714 -a legal, interpretable value. This does not mean that cutting wide
86715 -character strings at arbitrary points is without problems. It normally
86716 -is for alphabet-based languages (except for non-normalized text) but
86717 -languages based on syllables still have the problem that more than one
86718 -wide character is necessary to complete a logical unit. This is a
86719 -higher level problem which the C library functions are not designed to
86720 -solve. But it is at least good that no invalid byte sequences can be
86721 -created. Also, the higher level functions can also much easier operate
86722 -on wide character than on multibyte characters so that a general advise
86723 -is to use wide characters internally whenever text is more than simply
86724 -copied.
86726 - The remaining of this chapter will discuss the functions for handling
86727 -wide character strings in parallel with the discussion of the multibyte
86728 -character strings since there is almost always an exact equivalent
86729 -available.
86731 -\x1f
86732 -File: libc.info, Node: String/Array Conventions, Next: String Length, Prev: Representation of Strings, Up: String and Array Utilities
86734 -String and Array Conventions
86735 -============================
86737 - This chapter describes both functions that work on arbitrary arrays
86738 -or blocks of memory, and functions that are specific to null-terminated
86739 -arrays of characters and wide characters.
86741 - Functions that operate on arbitrary blocks of memory have names
86742 -beginning with `mem' and `wmem' (such as `memcpy' and `wmemcpy') and
86743 -invariably take an argument which specifies the size (in bytes and wide
86744 -characters respectively) of the block of memory to operate on. The
86745 -array arguments and return values for these functions have type `void
86746 -*' or `wchar_t'. As a matter of style, the elements of the arrays used
86747 -with the `mem' functions are referred to as "bytes". You can pass any
86748 -kind of pointer to these functions, and the `sizeof' operator is useful
86749 -in computing the value for the size argument. Parameters to the `wmem'
86750 -functions must be of type `wchar_t *'. These functions are not really
86751 -usable with anything but arrays of this type.
86753 - In contrast, functions that operate specifically on strings and wide
86754 -character strings have names beginning with `str' and `wcs'
86755 -respectively (such as `strcpy' and `wcscpy') and look for a null
86756 -character to terminate the string instead of requiring an explicit size
86757 -argument to be passed. (Some of these functions accept a specified
86758 -maximum length, but they also check for premature termination with a
86759 -null character.) The array arguments and return values for these
86760 -functions have type `char *' and `wchar_t *' respectively, and the
86761 -array elements are referred to as "characters" and "wide characters".
86763 - In many cases, there are both `mem' and `str'/`wcs' versions of a
86764 -function. The one that is more appropriate to use depends on the exact
86765 -situation. When your program is manipulating arbitrary arrays or
86766 -blocks of storage, then you should always use the `mem' functions. On
86767 -the other hand, when you are manipulating null-terminated strings it is
86768 -usually more convenient to use the `str'/`wcs' functions, unless you
86769 -already know the length of the string in advance. The `wmem' functions
86770 -should be used for wide character arrays with known size.
86772 - Some of the memory and string functions take single characters as
86773 -arguments. Since a value of type `char' is automatically promoted into
86774 -an value of type `int' when used as a parameter, the functions are
86775 -declared with `int' as the type of the parameter in question. In case
86776 -of the wide character function the situation is similarly: the
86777 -parameter type for a single wide character is `wint_t' and not
86778 -`wchar_t'. This would for many implementations not be necessary since
86779 -the `wchar_t' is large enough to not be automatically promoted, but
86780 -since the ISO C standard does not require such a choice of types the
86781 -`wint_t' type is used.
86783 -\x1f
86784 -File: libc.info, Node: String Length, Next: Copying and Concatenation, Prev: String/Array Conventions, Up: String and Array Utilities
86786 -String Length
86787 -=============
86789 - You can get the length of a string using the `strlen' function.
86790 -This function is declared in the header file `string.h'.
86792 - - Function: size_t strlen (const char *S)
86793 - The `strlen' function returns the length of the null-terminated
86794 - string S in bytes. (In other words, it returns the offset of the
86795 - terminating null character within the array.)
86797 - For example,
86798 - strlen ("hello, world")
86799 - => 12
86801 - When applied to a character array, the `strlen' function returns
86802 - the length of the string stored there, not its allocated size.
86803 - You can get the allocated size of the character array that holds a
86804 - string using the `sizeof' operator:
86806 - char string[32] = "hello, world";
86807 - sizeof (string)
86808 - => 32
86809 - strlen (string)
86810 - => 12
86812 - But beware, this will not work unless STRING is the character
86813 - array itself, not a pointer to it. For example:
86815 - char string[32] = "hello, world";
86816 - char *ptr = string;
86817 - sizeof (string)
86818 - => 32
86819 - sizeof (ptr)
86820 - => 4 /* (on a machine with 4 byte pointers) */
86822 - This is an easy mistake to make when you are working with
86823 - functions that take string arguments; those arguments are always
86824 - pointers, not arrays.
86826 - It must also be noted that for multibyte encoded strings the return
86827 - value does not have to correspond to the number of characters in
86828 - the string. To get this value the string can be converted to wide
86829 - characters and `wcslen' can be used or something like the following
86830 - code can be used:
86832 - /* The input is in `string'.
86833 - The length is expected in `n'. */
86835 - mbstate_t t;
86836 - char *scopy = string;
86837 - /* In initial state. */
86838 - memset (&t, '\0', sizeof (t));
86839 - /* Determine number of characters. */
86840 - n = mbsrtowcs (NULL, &scopy, strlen (scopy), &t);
86843 - This is cumbersome to do so if the number of characters (as
86844 - opposed to bytes) is needed often it is better to work with wide
86845 - characters.
86847 - The wide character equivalent is declared in `wchar.h'.
86849 - - Function: size_t wcslen (const wchar_t *WS)
86850 - The `wcslen' function is the wide character equivalent to
86851 - `strlen'. The return value is the number of wide characters in the
86852 - wide character string pointed to by WS (this is also the offset of
86853 - the terminating null wide character of WS).
86855 - Since there are no multi wide character sequences making up one
86856 - character the return value is not only the offset in the array, it
86857 - is also the number of wide characters.
86859 - This function was introduced in Amendment 1 to ISO C90.
86861 - - Function: size_t strnlen (const char *S, size_t MAXLEN)
86862 - The `strnlen' function returns the length of the string S in bytes
86863 - if this length is smaller than MAXLEN bytes. Otherwise it returns
86864 - MAXLEN. Therefore this function is equivalent to `(strlen (S) < n
86865 - ? strlen (S) : MAXLEN)' but it is more efficient and works even if
86866 - the string S is not null-terminated.
86868 - char string[32] = "hello, world";
86869 - strnlen (string, 32)
86870 - => 12
86871 - strnlen (string, 5)
86872 - => 5
86874 - This function is a GNU extension and is declared in `string.h'.
86876 - - Function: size_t wcsnlen (const wchar_t *WS, size_t MAXLEN)
86877 - `wcsnlen' is the wide character equivalent to `strnlen'. The
86878 - MAXLEN parameter specifies the maximum number of wide characters.
86880 - This function is a GNU extension and is declared in `wchar.h'.
86882 diff -u -udbrN glibc-2.3.2/manual/libc.info-60 glibc-2.3.2-200304020432/manual/libc.info-60
86883 --- glibc-2.3.2/manual/libc.info-60 Sat Mar 1 02:39:41 2003
86884 +++ glibc-2.3.2-200304020432/manual/libc.info-60 Thu Jan 1 01:00:00 1970
86885 @@ -1,1115 +0,0 @@
86886 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
86888 -INFO-DIR-SECTION GNU libraries
86889 -START-INFO-DIR-ENTRY
86890 -* Libc: (libc). C library.
86891 -END-INFO-DIR-ENTRY
86893 - This file documents the GNU C library.
86895 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
86896 -Reference Manual', for Version 2.3.x.
86898 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
86899 -Free Software Foundation, Inc.
86901 - Permission is granted to copy, distribute and/or modify this document
86902 -under the terms of the GNU Free Documentation License, Version 1.1 or
86903 -any later version published by the Free Software Foundation; with the
86904 -Invariant Sections being "Free Software Needs Free Documentation" and
86905 -"GNU Lesser General Public License", the Front-Cover texts being (a)
86906 -(see below), and with the Back-Cover Texts being (b) (see below). A
86907 -copy of the license is included in the section entitled "GNU Free
86908 -Documentation License".
86910 - (a) The FSF's Front-Cover Text is:
86912 - A GNU Manual
86914 - (b) The FSF's Back-Cover Text is:
86916 - You have freedom to copy and modify this GNU Manual, like GNU
86917 -software. Copies published by the Free Software Foundation raise
86918 -funds for GNU development.
86920 -\x1f
86921 -File: libc.info, Node: Variable Index, Next: File Index, Prev: Function Index, Up: Top
86923 -Variable and Constant Macro Index
86924 -*********************************
86926 -* Menu:
86928 -* (*__gconv_end_fct): glibc iconv Implementation.
86929 -* (*__gconv_fct): glibc iconv Implementation.
86930 -* (*__gconv_init_fct): glibc iconv Implementation.
86931 -* __free_hook: Hooks for Malloc.
86932 -* __malloc_hook: Hooks for Malloc.
86933 -* __malloc_initialize_hook: Hooks for Malloc.
86934 -* __memalign_hook: Hooks for Malloc.
86935 -* __realloc_hook: Hooks for Malloc.
86936 -* _BSD_SOURCE: Feature Test Macros.
86937 -* _Complex_I: Complex Numbers.
86938 -* _FILE_OFFSET_BITS: Feature Test Macros.
86939 -* _GNU_SOURCE: Feature Test Macros.
86940 -* _IOFBF: Controlling Buffering.
86941 -* _IOLBF: Controlling Buffering.
86942 -* _IONBF: Controlling Buffering.
86943 -* _ISOC99_SOURCE: Feature Test Macros.
86944 -* _LARGEFILE64_SOURCE: Feature Test Macros.
86945 -* _LARGEFILE_SOURCE: Feature Test Macros.
86946 -* _PATH_FSTAB: Mount Information.
86947 -* _PATH_MNTTAB: Mount Information.
86948 -* _PATH_MOUNTED: Mount Information.
86949 -* _PATH_UTMP: Manipulating the Database.
86950 -* _PATH_WTMP: Manipulating the Database.
86951 -* _POSIX2_C_DEV: System Options.
86952 -* _POSIX2_C_VERSION: Version Supported.
86953 -* _POSIX2_FORT_DEV: System Options.
86954 -* _POSIX2_FORT_RUN: System Options.
86955 -* _POSIX2_LOCALEDEF: System Options.
86956 -* _POSIX2_SW_DEV: System Options.
86957 -* _POSIX_C_SOURCE: Feature Test Macros.
86958 -* _POSIX_CHOWN_RESTRICTED: Options for Files.
86959 -* _POSIX_JOB_CONTROL: System Options.
86960 -* _POSIX_NO_TRUNC: Options for Files.
86961 -* _POSIX_SAVED_IDS: System Options.
86962 -* _POSIX_SOURCE: Feature Test Macros.
86963 -* _POSIX_VDISABLE <1>: Options for Files.
86964 -* _POSIX_VDISABLE: Special Characters.
86965 -* _POSIX_VERSION: Version Supported.
86966 -* _REENTRANT: Feature Test Macros.
86967 -* _SC_2_C_DEV: Constants for Sysconf.
86968 -* _SC_2_FORT_DEV: Constants for Sysconf.
86969 -* _SC_2_FORT_RUN: Constants for Sysconf.
86970 -* _SC_2_LOCALEDEF: Constants for Sysconf.
86971 -* _SC_2_SW_DEV: Constants for Sysconf.
86972 -* _SC_2_VERSION: Constants for Sysconf.
86973 -* _SC_AIO_LISTIO_MAX: Constants for Sysconf.
86974 -* _SC_AIO_MAX: Constants for Sysconf.
86975 -* _SC_AIO_PRIO_DELTA_MAX: Constants for Sysconf.
86976 -* _SC_ARG_MAX: Constants for Sysconf.
86977 -* _SC_ASYNCHRONOUS_IO: Constants for Sysconf.
86978 -* _SC_ATEXIT_MAX: Constants for Sysconf.
86979 -* _SC_AVPHYS_PAGES <1>: Constants for Sysconf.
86980 -* _SC_AVPHYS_PAGES: Query Memory Parameters.
86981 -* _SC_BC_BASE_MAX: Constants for Sysconf.
86982 -* _SC_BC_DIM_MAX: Constants for Sysconf.
86983 -* _SC_BC_SCALE_MAX: Constants for Sysconf.
86984 -* _SC_BC_STRING_MAX: Constants for Sysconf.
86985 -* _SC_CHAR_BIT: Constants for Sysconf.
86986 -* _SC_CHAR_MAX: Constants for Sysconf.
86987 -* _SC_CHAR_MIN: Constants for Sysconf.
86988 -* _SC_CHARCLASS_NAME_MAX: Constants for Sysconf.
86989 -* _SC_CHILD_MAX: Constants for Sysconf.
86990 -* _SC_CLK_TCK: Constants for Sysconf.
86991 -* _SC_COLL_WEIGHTS_MAX: Constants for Sysconf.
86992 -* _SC_DELAYTIMER_MAX: Constants for Sysconf.
86993 -* _SC_EQUIV_CLASS_MAX: Constants for Sysconf.
86994 -* _SC_EXPR_NEST_MAX: Constants for Sysconf.
86995 -* _SC_FSYNC: Constants for Sysconf.
86996 -* _SC_GETGR_R_SIZE_MAX: Constants for Sysconf.
86997 -* _SC_GETPW_R_SIZE_MAX: Constants for Sysconf.
86998 -* _SC_INT_MAX: Constants for Sysconf.
86999 -* _SC_INT_MIN: Constants for Sysconf.
87000 -* _SC_JOB_CONTROL: Constants for Sysconf.
87001 -* _SC_LINE_MAX: Constants for Sysconf.
87002 -* _SC_LOGIN_NAME_MAX: Constants for Sysconf.
87003 -* _SC_LONG_BIT: Constants for Sysconf.
87004 -* _SC_MAPPED_FILES: Constants for Sysconf.
87005 -* _SC_MB_LEN_MAX: Constants for Sysconf.
87006 -* _SC_MEMLOCK: Constants for Sysconf.
87007 -* _SC_MEMLOCK_RANGE: Constants for Sysconf.
87008 -* _SC_MEMORY_PROTECTION: Constants for Sysconf.
87009 -* _SC_MESSAGE_PASSING: Constants for Sysconf.
87010 -* _SC_MQ_OPEN_MAX: Constants for Sysconf.
87011 -* _SC_MQ_PRIO_MAX: Constants for Sysconf.
87012 -* _SC_NGROUPS_MAX: Constants for Sysconf.
87013 -* _SC_NL_ARGMAX: Constants for Sysconf.
87014 -* _SC_NL_LANGMAX: Constants for Sysconf.
87015 -* _SC_NL_MSGMAX: Constants for Sysconf.
87016 -* _SC_NL_NMAX: Constants for Sysconf.
87017 -* _SC_NL_SETMAX: Constants for Sysconf.
87018 -* _SC_NL_TEXTMAX: Constants for Sysconf.
87019 -* _SC_NPROCESSORS_CONF <1>: Constants for Sysconf.
87020 -* _SC_NPROCESSORS_CONF: Processor Resources.
87021 -* _SC_NPROCESSORS_ONLN <1>: Constants for Sysconf.
87022 -* _SC_NPROCESSORS_ONLN: Processor Resources.
87023 -* _SC_NZERO: Constants for Sysconf.
87024 -* _SC_OPEN_MAX: Constants for Sysconf.
87025 -* _SC_PAGESIZE <1>: Constants for Sysconf.
87026 -* _SC_PAGESIZE <2>: Query Memory Parameters.
87027 -* _SC_PAGESIZE: Memory-mapped I/O.
87028 -* _SC_PHYS_PAGES <1>: Constants for Sysconf.
87029 -* _SC_PHYS_PAGES: Query Memory Parameters.
87030 -* _SC_PII: Constants for Sysconf.
87031 -* _SC_PII_INTERNET: Constants for Sysconf.
87032 -* _SC_PII_INTERNET_DGRAM: Constants for Sysconf.
87033 -* _SC_PII_INTERNET_STREAM: Constants for Sysconf.
87034 -* _SC_PII_OSI: Constants for Sysconf.
87035 -* _SC_PII_OSI_CLTS: Constants for Sysconf.
87036 -* _SC_PII_OSI_COTS: Constants for Sysconf.
87037 -* _SC_PII_OSI_M: Constants for Sysconf.
87038 -* _SC_PII_SOCKET: Constants for Sysconf.
87039 -* _SC_PII_XTI: Constants for Sysconf.
87040 -* _SC_PRIORITIZED_IO: Constants for Sysconf.
87041 -* _SC_PRIORITY_SCHEDULING: Constants for Sysconf.
87042 -* _SC_REALTIME_SIGNALS: Constants for Sysconf.
87043 -* _SC_RTSIG_MAX: Constants for Sysconf.
87044 -* _SC_SAVED_IDS: Constants for Sysconf.
87045 -* _SC_SCHAR_MAX: Constants for Sysconf.
87046 -* _SC_SCHAR_MIN: Constants for Sysconf.
87047 -* _SC_SELECT: Constants for Sysconf.
87048 -* _SC_SEM_NSEMS_MAX: Constants for Sysconf.
87049 -* _SC_SEM_VALUE_MAX: Constants for Sysconf.
87050 -* _SC_SEMAPHORES: Constants for Sysconf.
87051 -* _SC_SHARED_MEMORY_OBJECTS: Constants for Sysconf.
87052 -* _SC_SHRT_MAX: Constants for Sysconf.
87053 -* _SC_SHRT_MIN: Constants for Sysconf.
87054 -* _SC_SIGQUEUE_MAX: Constants for Sysconf.
87055 -* _SC_STREAM_MAX: Constants for Sysconf.
87056 -* _SC_SYNCHRONIZED_IO: Constants for Sysconf.
87057 -* _SC_T_IOV_MAX: Constants for Sysconf.
87058 -* _SC_THREAD_ATTR_STACKADDR: Constants for Sysconf.
87059 -* _SC_THREAD_ATTR_STACKSIZE: Constants for Sysconf.
87060 -* _SC_THREAD_DESTRUCTOR_ITERATIONS: Constants for Sysconf.
87061 -* _SC_THREAD_KEYS_MAX: Constants for Sysconf.
87062 -* _SC_THREAD_PRIO_INHERIT: Constants for Sysconf.
87063 -* _SC_THREAD_PRIO_PROTECT: Constants for Sysconf.
87064 -* _SC_THREAD_PRIORITY_SCHEDULING: Constants for Sysconf.
87065 -* _SC_THREAD_PROCESS_SHARED: Constants for Sysconf.
87066 -* _SC_THREAD_SAFE_FUNCTIONS: Constants for Sysconf.
87067 -* _SC_THREAD_STACK_MIN: Constants for Sysconf.
87068 -* _SC_THREAD_THREADS_MAX: Constants for Sysconf.
87069 -* _SC_THREADS: Constants for Sysconf.
87070 -* _SC_TIMER_MAX: Constants for Sysconf.
87071 -* _SC_TIMERS: Constants for Sysconf.
87072 -* _SC_TTY_NAME_MAX: Constants for Sysconf.
87073 -* _SC_TZNAME_MAX: Constants for Sysconf.
87074 -* _SC_UCHAR_MAX: Constants for Sysconf.
87075 -* _SC_UINT_MAX: Constants for Sysconf.
87076 -* _SC_UIO_MAXIOV: Constants for Sysconf.
87077 -* _SC_ULONG_MAX: Constants for Sysconf.
87078 -* _SC_USHRT_MAX: Constants for Sysconf.
87079 -* _SC_VERSION: Constants for Sysconf.
87080 -* _SC_WORD_BIT: Constants for Sysconf.
87081 -* _SC_XOPEN_CRYPT: Constants for Sysconf.
87082 -* _SC_XOPEN_ENH_I18N: Constants for Sysconf.
87083 -* _SC_XOPEN_LEGACY: Constants for Sysconf.
87084 -* _SC_XOPEN_REALTIME: Constants for Sysconf.
87085 -* _SC_XOPEN_REALTIME_THREADS: Constants for Sysconf.
87086 -* _SC_XOPEN_SHM: Constants for Sysconf.
87087 -* _SC_XOPEN_UNIX: Constants for Sysconf.
87088 -* _SC_XOPEN_VERSION: Constants for Sysconf.
87089 -* _SC_XOPEN_XCU_VERSION: Constants for Sysconf.
87090 -* _SC_XOPEN_XPG2: Constants for Sysconf.
87091 -* _SC_XOPEN_XPG3: Constants for Sysconf.
87092 -* _SC_XOPEN_XPG4: Constants for Sysconf.
87093 -* _SVID_SOURCE: Feature Test Macros.
87094 -* _THREAD_SAFE: Feature Test Macros.
87095 -* _XOPEN_SOURCE: Feature Test Macros.
87096 -* _XOPEN_SOURCE_EXTENDED: Feature Test Macros.
87097 -* ABDAY_1: The Elegant and Fast Way.
87098 -* ABDAY_2: The Elegant and Fast Way.
87099 -* ABDAY_3: The Elegant and Fast Way.
87100 -* ABDAY_4: The Elegant and Fast Way.
87101 -* ABDAY_5: The Elegant and Fast Way.
87102 -* ABDAY_6: The Elegant and Fast Way.
87103 -* ABDAY_7: The Elegant and Fast Way.
87104 -* ABMON_1: The Elegant and Fast Way.
87105 -* ABMON_10: The Elegant and Fast Way.
87106 -* ABMON_11: The Elegant and Fast Way.
87107 -* ABMON_12: The Elegant and Fast Way.
87108 -* ABMON_2: The Elegant and Fast Way.
87109 -* ABMON_3: The Elegant and Fast Way.
87110 -* ABMON_4: The Elegant and Fast Way.
87111 -* ABMON_5: The Elegant and Fast Way.
87112 -* ABMON_6: The Elegant and Fast Way.
87113 -* ABMON_7: The Elegant and Fast Way.
87114 -* ABMON_8: The Elegant and Fast Way.
87115 -* ABMON_9: The Elegant and Fast Way.
87116 -* ACCOUNTING: Manipulating the Database.
87117 -* AF_FILE: Address Formats.
87118 -* AF_INET: Address Formats.
87119 -* AF_LOCAL: Address Formats.
87120 -* AF_UNIX: Address Formats.
87121 -* AF_UNSPEC: Address Formats.
87122 -* aliases: NSS Basics.
87123 -* ALT_DIGITS: The Elegant and Fast Way.
87124 -* ALTWERASE: Local Modes.
87125 -* AM_STR: The Elegant and Fast Way.
87126 -* ARG_MAX: General Limits.
87127 -* argp_err_exit_status: Argp Global Variables.
87128 -* ARGP_ERR_UNKNOWN: Argp Parser Functions.
87129 -* ARGP_HELP_BUG_ADDR: Argp Help Flags.
87130 -* ARGP_HELP_DOC: Argp Help Flags.
87131 -* ARGP_HELP_EXIT_ERR: Argp Help Flags.
87132 -* ARGP_HELP_EXIT_OK: Argp Help Flags.
87133 -* ARGP_HELP_LONG: Argp Help Flags.
87134 -* ARGP_HELP_LONG_ONLY: Argp Help Flags.
87135 -* ARGP_HELP_POST_DOC: Argp Help Flags.
87136 -* ARGP_HELP_PRE_DOC: Argp Help Flags.
87137 -* ARGP_HELP_SEE: Argp Help Flags.
87138 -* ARGP_HELP_SHORT_USAGE: Argp Help Flags.
87139 -* ARGP_HELP_STD_ERR: Argp Help Flags.
87140 -* ARGP_HELP_STD_HELP: Argp Help Flags.
87141 -* ARGP_HELP_STD_USAGE: Argp Help Flags.
87142 -* ARGP_HELP_USAGE: Argp Help Flags.
87143 -* ARGP_IN_ORDER: Argp Flags.
87144 -* ARGP_KEY_ARG: Argp Special Keys.
87145 -* ARGP_KEY_ARGS: Argp Special Keys.
87146 -* ARGP_KEY_END: Argp Special Keys.
87147 -* ARGP_KEY_ERROR: Argp Special Keys.
87148 -* ARGP_KEY_FINI: Argp Special Keys.
87149 -* ARGP_KEY_HELP_ARGS_DOC: Argp Help Filter Keys.
87150 -* ARGP_KEY_HELP_DUP_ARGS_NOTE: Argp Help Filter Keys.
87151 -* ARGP_KEY_HELP_EXTRA: Argp Help Filter Keys.
87152 -* ARGP_KEY_HELP_HEADER: Argp Help Filter Keys.
87153 -* ARGP_KEY_HELP_POST_DOC: Argp Help Filter Keys.
87154 -* ARGP_KEY_HELP_PRE_DOC: Argp Help Filter Keys.
87155 -* ARGP_KEY_INIT: Argp Special Keys.
87156 -* ARGP_KEY_NO_ARGS: Argp Special Keys.
87157 -* ARGP_KEY_SUCCESS: Argp Special Keys.
87158 -* ARGP_LONG_ONLY: Argp Flags.
87159 -* ARGP_NO_ARGS: Argp Flags.
87160 -* ARGP_NO_ERRS: Argp Flags.
87161 -* ARGP_NO_EXIT: Argp Flags.
87162 -* ARGP_NO_HELP: Argp Flags.
87163 -* ARGP_PARSE_ARGV0: Argp Flags.
87164 -* argp_program_bug_address: Argp Global Variables.
87165 -* argp_program_version: Argp Global Variables.
87166 -* argp_program_version_hook: Argp Global Variables.
87167 -* ARGP_SILENT: Argp Flags.
87168 -* B0: Line Speed.
87169 -* B110: Line Speed.
87170 -* B115200: Line Speed.
87171 -* B1200: Line Speed.
87172 -* B134: Line Speed.
87173 -* B150: Line Speed.
87174 -* B1800: Line Speed.
87175 -* B19200: Line Speed.
87176 -* B200: Line Speed.
87177 -* B230400: Line Speed.
87178 -* B2400: Line Speed.
87179 -* B300: Line Speed.
87180 -* B38400: Line Speed.
87181 -* B460800: Line Speed.
87182 -* B4800: Line Speed.
87183 -* B50: Line Speed.
87184 -* B57600: Line Speed.
87185 -* B600: Line Speed.
87186 -* B75: Line Speed.
87187 -* B9600: Line Speed.
87188 -* BC_BASE_MAX: Utility Limits.
87189 -* BC_DIM_MAX: Utility Limits.
87190 -* BC_SCALE_MAX: Utility Limits.
87191 -* BC_STRING_MAX: Utility Limits.
87192 -* BOOT_TIME <1>: XPG Functions.
87193 -* BOOT_TIME: Manipulating the Database.
87194 -* BRKINT: Input Modes.
87195 -* BUFSIZ: Controlling Buffering.
87196 -* CCTS_OFLOW: Control Modes.
87197 -* CHAR_MAX: Range of Type.
87198 -* CHAR_MIN: Range of Type.
87199 -* CHILD_MAX: General Limits.
87200 -* CIGNORE: Control Modes.
87201 -* CLK_TCK: CPU Time.
87202 -* CLOCAL: Control Modes.
87203 -* CLOCKS_PER_SEC: CPU Time.
87204 -* CODESET: The Elegant and Fast Way.
87205 -* COLL_WEIGHTS_MAX: Utility Limits.
87206 -* COREFILE: Program Error Signals.
87207 -* CREAD: Control Modes.
87208 -* CRNCYSTR: The Elegant and Fast Way.
87209 -* CRTS_IFLOW: Control Modes.
87210 -* CS5: Control Modes.
87211 -* CS6: Control Modes.
87212 -* CS7: Control Modes.
87213 -* CS8: Control Modes.
87214 -* CSIZE: Control Modes.
87215 -* CSTOPB: Control Modes.
87216 -* CURRENCY_SYMBOL: The Elegant and Fast Way.
87217 -* D_FMT: The Elegant and Fast Way.
87218 -* D_T_FMT: The Elegant and Fast Way.
87219 -* DAY_1: The Elegant and Fast Way.
87220 -* DAY_2: The Elegant and Fast Way.
87221 -* DAY_3: The Elegant and Fast Way.
87222 -* DAY_4: The Elegant and Fast Way.
87223 -* DAY_5: The Elegant and Fast Way.
87224 -* DAY_6: The Elegant and Fast Way.
87225 -* DAY_7: The Elegant and Fast Way.
87226 -* daylight: Time Zone Functions.
87227 -* DBL_DIG: Floating Point Parameters.
87228 -* DBL_EPSILON: Floating Point Parameters.
87229 -* DBL_MANT_DIG: Floating Point Parameters.
87230 -* DBL_MAX: Floating Point Parameters.
87231 -* DBL_MAX_10_EXP: Floating Point Parameters.
87232 -* DBL_MAX_EXP: Floating Point Parameters.
87233 -* DBL_MIN: Floating Point Parameters.
87234 -* DBL_MIN_10_EXP: Floating Point Parameters.
87235 -* DBL_MIN_EXP: Floating Point Parameters.
87236 -* DEAD_PROCESS <1>: XPG Functions.
87237 -* DEAD_PROCESS: Manipulating the Database.
87238 -* DECIMAL_POINT: The Elegant and Fast Way.
87239 -* DES_DECRYPT: DES Encryption.
87240 -* DES_ENCRYPT: DES Encryption.
87241 -* DES_HW: DES Encryption.
87242 -* DES_SW: DES Encryption.
87243 -* DESERR_BADPARAM: DES Encryption.
87244 -* DESERR_HWERROR: DES Encryption.
87245 -* DESERR_NOHWDEVICE: DES Encryption.
87246 -* DESERR_NONE: DES Encryption.
87247 -* DT_BLK: Directory Entries.
87248 -* DT_CHR: Directory Entries.
87249 -* DT_DIR: Directory Entries.
87250 -* DT_FIFO: Directory Entries.
87251 -* DT_REG: Directory Entries.
87252 -* DT_SOCK: Directory Entries.
87253 -* DT_UNKNOWN: Directory Entries.
87254 -* E2BIG: Error Codes.
87255 -* EACCES: Error Codes.
87256 -* EADDRINUSE: Error Codes.
87257 -* EADDRNOTAVAIL: Error Codes.
87258 -* EADV: Error Codes.
87259 -* EAFNOSUPPORT: Error Codes.
87260 -* EAGAIN: Error Codes.
87261 -* EALREADY: Error Codes.
87262 -* EAUTH: Error Codes.
87263 -* EBACKGROUND: Error Codes.
87264 -* EBADE: Error Codes.
87265 -* EBADF <1>: Line Control.
87266 -* EBADF: Error Codes.
87267 -* EBADFD: Error Codes.
87268 -* EBADMSG: Error Codes.
87269 -* EBADR: Error Codes.
87270 -* EBADRPC: Error Codes.
87271 -* EBADRQC: Error Codes.
87272 -* EBADSLT: Error Codes.
87273 -* EBFONT: Error Codes.
87274 -* EBUSY: Error Codes.
87275 -* ECANCELED: Error Codes.
87276 -* ECHILD: Error Codes.
87277 -* ECHO: Local Modes.
87278 -* ECHOCTL: Local Modes.
87279 -* ECHOE: Local Modes.
87280 -* ECHOK: Local Modes.
87281 -* ECHOKE: Local Modes.
87282 -* ECHONL: Local Modes.
87283 -* ECHOPRT: Local Modes.
87284 -* ECHRNG: Error Codes.
87285 -* ECOMM: Error Codes.
87286 -* ECONNABORTED: Error Codes.
87287 -* ECONNREFUSED: Error Codes.
87288 -* ECONNRESET: Error Codes.
87289 -* ED: Error Codes.
87290 -* EDEADLK: Error Codes.
87291 -* EDEADLOCK: Error Codes.
87292 -* EDESTADDRREQ: Error Codes.
87293 -* EDIED: Error Codes.
87294 -* EDOM: Error Codes.
87295 -* EDOTDOT: Error Codes.
87296 -* EDQUOT: Error Codes.
87297 -* EEXIST: Error Codes.
87298 -* EFAULT: Error Codes.
87299 -* EFBIG: Error Codes.
87300 -* EFTYPE: Error Codes.
87301 -* EGRATUITOUS: Error Codes.
87302 -* EGREGIOUS: Error Codes.
87303 -* EHOSTDOWN: Error Codes.
87304 -* EHOSTUNREACH: Error Codes.
87305 -* EIDRM: Error Codes.
87306 -* EIEIO: Error Codes.
87307 -* EILSEQ: Error Codes.
87308 -* EINPROGRESS: Error Codes.
87309 -* EINTR: Error Codes.
87310 -* EINVAL <1>: Line Control.
87311 -* EINVAL: Error Codes.
87312 -* EIO: Error Codes.
87313 -* EISCONN: Error Codes.
87314 -* EISDIR: Error Codes.
87315 -* EISNAM: Error Codes.
87316 -* EL2HLT: Error Codes.
87317 -* EL2NSYNC: Error Codes.
87318 -* EL3HLT: Error Codes.
87319 -* EL3RST: Error Codes.
87320 -* ELIBACC: Error Codes.
87321 -* ELIBBAD: Error Codes.
87322 -* ELIBEXEC: Error Codes.
87323 -* ELIBMAX: Error Codes.
87324 -* ELIBSCN: Error Codes.
87325 -* ELNRNG: Error Codes.
87326 -* ELOOP: Error Codes.
87327 -* EMEDIUMTYPE: Error Codes.
87328 -* EMFILE: Error Codes.
87329 -* EMLINK: Error Codes.
87330 -* EMPTY <1>: XPG Functions.
87331 -* EMPTY: Manipulating the Database.
87332 -* EMSGSIZE: Error Codes.
87333 -* EMULTIHOP: Error Codes.
87334 -* ENAMETOOLONG: Error Codes.
87335 -* ENAVAIL: Error Codes.
87336 -* ENEEDAUTH: Error Codes.
87337 -* ENETDOWN: Error Codes.
87338 -* ENETRESET: Error Codes.
87339 -* ENETUNREACH: Error Codes.
87340 -* ENFILE: Error Codes.
87341 -* ENOANO: Error Codes.
87342 -* ENOBUFS: Error Codes.
87343 -* ENOCSI: Error Codes.
87344 -* ENODATA: Error Codes.
87345 -* ENODEV: Error Codes.
87346 -* ENOENT: Error Codes.
87347 -* ENOEXEC: Error Codes.
87348 -* ENOLCK: Error Codes.
87349 -* ENOLINK: Error Codes.
87350 -* ENOMEDIUM: Error Codes.
87351 -* ENOMEM: Error Codes.
87352 -* ENOMSG: Error Codes.
87353 -* ENONET: Error Codes.
87354 -* ENOPKG: Error Codes.
87355 -* ENOPROTOOPT: Error Codes.
87356 -* ENOSPC: Error Codes.
87357 -* ENOSR: Error Codes.
87358 -* ENOSTR: Error Codes.
87359 -* ENOSYS: Error Codes.
87360 -* ENOTBLK: Error Codes.
87361 -* ENOTCONN: Error Codes.
87362 -* ENOTDIR: Error Codes.
87363 -* ENOTEMPTY: Error Codes.
87364 -* ENOTNAM: Error Codes.
87365 -* ENOTSOCK: Error Codes.
87366 -* ENOTSUP: Error Codes.
87367 -* ENOTTY <1>: Line Control.
87368 -* ENOTTY: Error Codes.
87369 -* ENOTUNIQ: Error Codes.
87370 -* environ: Environment Access.
87371 -* ENXIO: Error Codes.
87372 -* EOF: EOF and Errors.
87373 -* EOPNOTSUPP: Error Codes.
87374 -* EOVERFLOW: Error Codes.
87375 -* EPERM: Error Codes.
87376 -* EPFNOSUPPORT: Error Codes.
87377 -* EPIPE: Error Codes.
87378 -* EPROCLIM: Error Codes.
87379 -* EPROCUNAVAIL: Error Codes.
87380 -* EPROGMISMATCH: Error Codes.
87381 -* EPROGUNAVAIL: Error Codes.
87382 -* EPROTO: Error Codes.
87383 -* EPROTONOSUPPORT: Error Codes.
87384 -* EPROTOTYPE: Error Codes.
87385 -* EQUIV_CLASS_MAX: Utility Limits.
87386 -* ERA: The Elegant and Fast Way.
87387 -* ERA_D_FMT: The Elegant and Fast Way.
87388 -* ERA_D_T_FMT: The Elegant and Fast Way.
87389 -* ERA_T_FMT: The Elegant and Fast Way.
87390 -* ERA_YEAR: The Elegant and Fast Way.
87391 -* ERANGE: Error Codes.
87392 -* EREMCHG: Error Codes.
87393 -* EREMOTE: Error Codes.
87394 -* EREMOTEIO: Error Codes.
87395 -* ERESTART: Error Codes.
87396 -* EROFS: Error Codes.
87397 -* ERPCMISMATCH: Error Codes.
87398 -* errno: Checking for Errors.
87399 -* error_message_count: Error Messages.
87400 -* error_one_per_line: Error Messages.
87401 -* error_print_progname: Error Messages.
87402 -* ESHUTDOWN: Error Codes.
87403 -* ESOCKTNOSUPPORT: Error Codes.
87404 -* ESPIPE: Error Codes.
87405 -* ESRCH: Error Codes.
87406 -* ESRMNT: Error Codes.
87407 -* ESTALE: Error Codes.
87408 -* ESTRPIPE: Error Codes.
87409 -* ethers: NSS Basics.
87410 -* ETIME: Error Codes.
87411 -* ETIMEDOUT: Error Codes.
87412 -* ETOOMANYREFS: Error Codes.
87413 -* ETXTBSY: Error Codes.
87414 -* EUCLEAN: Error Codes.
87415 -* EUNATCH: Error Codes.
87416 -* EUSERS: Error Codes.
87417 -* EWOULDBLOCK: Error Codes.
87418 -* EXDEV: Error Codes.
87419 -* EXFULL: Error Codes.
87420 -* EXIT_FAILURE: Exit Status.
87421 -* EXIT_SUCCESS: Exit Status.
87422 -* EXPR_NEST_MAX: Utility Limits.
87423 -* EXTA: Line Speed.
87424 -* EXTB: Line Speed.
87425 -* F_DUPFD: Duplicating Descriptors.
87426 -* F_GETFD: Descriptor Flags.
87427 -* F_GETFL: Getting File Status Flags.
87428 -* F_GETLK: File Locks.
87429 -* F_GETOWN: Interrupt Input.
87430 -* F_OK: Testing File Access.
87431 -* F_RDLCK: File Locks.
87432 -* F_SETFD: Descriptor Flags.
87433 -* F_SETFL: Getting File Status Flags.
87434 -* F_SETLK: File Locks.
87435 -* F_SETLKW: File Locks.
87436 -* F_SETOWN: Interrupt Input.
87437 -* F_UNLCK: File Locks.
87438 -* F_WRLCK: File Locks.
87439 -* FD_CLOEXEC: Descriptor Flags.
87440 -* FD_SETSIZE: Waiting for I/O.
87441 -* FE_DFL_ENV: Control Functions.
87442 -* FE_DIVBYZERO: Status bit operations.
87443 -* FE_DOWNWARD: Rounding.
87444 -* FE_INEXACT: Status bit operations.
87445 -* FE_INVALID: Status bit operations.
87446 -* FE_NOMASK_ENV: Control Functions.
87447 -* FE_OVERFLOW: Status bit operations.
87448 -* FE_TONEAREST: Rounding.
87449 -* FE_TOWARDZERO: Rounding.
87450 -* FE_UNDERFLOW: Status bit operations.
87451 -* FE_UPWARD: Rounding.
87452 -* FILENAME_MAX: Limits for Files.
87453 -* FLT_DIG: Floating Point Parameters.
87454 -* FLT_EPSILON: Floating Point Parameters.
87455 -* FLT_MANT_DIG: Floating Point Parameters.
87456 -* FLT_MAX: Floating Point Parameters.
87457 -* FLT_MAX_10_EXP: Floating Point Parameters.
87458 -* FLT_MAX_EXP: Floating Point Parameters.
87459 -* FLT_MIN: Floating Point Parameters.
87460 -* FLT_MIN_10_EXP: Floating Point Parameters.
87461 -* FLT_MIN_EXP: Floating Point Parameters.
87462 -* FLT_RADIX: Floating Point Parameters.
87463 -* FLT_ROUNDS: Floating Point Parameters.
87464 -* FLUSHO: Local Modes.
87465 -* FOPEN_MAX: Opening Streams.
87466 -* FP_FAST_FMA: Misc FP Arithmetic.
87467 -* FP_ILOGB0: Exponents and Logarithms.
87468 -* FP_ILOGBNAN: Exponents and Logarithms.
87469 -* FP_INFINITE: Floating Point Classes.
87470 -* FP_NAN: Floating Point Classes.
87471 -* FP_NORMAL: Floating Point Classes.
87472 -* FP_SUBNORMAL: Floating Point Classes.
87473 -* FP_ZERO: Floating Point Classes.
87474 -* FPE_DECOVF_TRAP: Program Error Signals.
87475 -* FPE_FLTDIV_TRAP: Program Error Signals.
87476 -* FPE_FLTOVF_TRAP: Program Error Signals.
87477 -* FPE_FLTUND_TRAP: Program Error Signals.
87478 -* FPE_INTDIV_TRAP: Program Error Signals.
87479 -* FPE_INTOVF_TRAP: Program Error Signals.
87480 -* FPE_SUBRNG_TRAP: Program Error Signals.
87481 -* FRAC_DIGITS: The Elegant and Fast Way.
87482 -* FSETLOCKING_BYCALLER: Streams and Threads.
87483 -* FSETLOCKING_INTERNAL: Streams and Threads.
87484 -* FSETLOCKING_QUERY: Streams and Threads.
87485 -* FSTAB: Mount Information.
87486 -* FSTAB_RO: fstab.
87487 -* FSTAB_RQ: fstab.
87488 -* FSTAB_RW: fstab.
87489 -* FSTAB_SW: fstab.
87490 -* FSTAB_XX: fstab.
87491 -* FTW_CHDIR: Working with Directory Trees.
87492 -* FTW_D: Working with Directory Trees.
87493 -* FTW_DEPTH: Working with Directory Trees.
87494 -* FTW_DNR: Working with Directory Trees.
87495 -* FTW_DP: Working with Directory Trees.
87496 -* FTW_F: Working with Directory Trees.
87497 -* FTW_MOUNT: Working with Directory Trees.
87498 -* FTW_NS: Working with Directory Trees.
87499 -* FTW_PHYS: Working with Directory Trees.
87500 -* FTW_SL: Working with Directory Trees.
87501 -* FTW_SLN: Working with Directory Trees.
87502 -* getdate_err: General Time String Parsing.
87503 -* GLOB_ABORTED: Calling Glob.
87504 -* GLOB_ALTDIRFUNC: More Flags for Globbing.
87505 -* GLOB_APPEND: Flags for Globbing.
87506 -* GLOB_BRACE: More Flags for Globbing.
87507 -* GLOB_DOOFFS: Flags for Globbing.
87508 -* GLOB_ERR: Flags for Globbing.
87509 -* GLOB_MAGCHAR: More Flags for Globbing.
87510 -* GLOB_MARK: Flags for Globbing.
87511 -* GLOB_NOCHECK: Flags for Globbing.
87512 -* GLOB_NOESCAPE: Flags for Globbing.
87513 -* GLOB_NOMAGIC: More Flags for Globbing.
87514 -* GLOB_NOMATCH: Calling Glob.
87515 -* GLOB_NOSORT: Flags for Globbing.
87516 -* GLOB_NOSPACE: Calling Glob.
87517 -* GLOB_ONLYDIR: More Flags for Globbing.
87518 -* GLOB_PERIOD: More Flags for Globbing.
87519 -* GLOB_TILDE: More Flags for Globbing.
87520 -* GLOB_TILDE_CHECK: More Flags for Globbing.
87521 -* group: NSS Basics.
87522 -* GROUPING: The Elegant and Fast Way.
87523 -* h_errno: Host Names.
87524 -* HOST_NOT_FOUND: Host Names.
87525 -* hosts: NSS Basics.
87526 -* HUGE_VAL: Math Error Reporting.
87527 -* HUGE_VALF: Math Error Reporting.
87528 -* HUGE_VALL: Math Error Reporting.
87529 -* HUPCL: Control Modes.
87530 -* I: Complex Numbers.
87531 -* ICANON: Local Modes.
87532 -* ICRNL: Input Modes.
87533 -* IEXTEN: Local Modes.
87534 -* IFNAMSIZ: Interface Naming.
87535 -* IGNBRK: Input Modes.
87536 -* IGNCR: Input Modes.
87537 -* IGNPAR: Input Modes.
87538 -* IMAXBEL: Input Modes.
87539 -* in6addr_any: Host Address Data Type.
87540 -* in6addr_loopback: Host Address Data Type.
87541 -* INADDR_ANY: Host Address Data Type.
87542 -* INADDR_BROADCAST: Host Address Data Type.
87543 -* INADDR_LOOPBACK: Host Address Data Type.
87544 -* INADDR_NONE: Host Address Data Type.
87545 -* INFINITY: Infinity and NaN.
87546 -* INIT_PROCESS <1>: XPG Functions.
87547 -* INIT_PROCESS: Manipulating the Database.
87548 -* INLCR: Input Modes.
87549 -* INPCK: Input Modes.
87550 -* INT_CURR_SYMBOL: The Elegant and Fast Way.
87551 -* INT_FRAC_DIGITS: The Elegant and Fast Way.
87552 -* INT_MAX: Range of Type.
87553 -* INT_MIN: Range of Type.
87554 -* INT_N_CS_PRECEDES: The Elegant and Fast Way.
87555 -* INT_N_SEP_BY_SPACE: The Elegant and Fast Way.
87556 -* INT_N_SIGN_POSN: The Elegant and Fast Way.
87557 -* INT_P_CS_PRECEDES: The Elegant and Fast Way.
87558 -* INT_P_SEP_BY_SPACE: The Elegant and Fast Way.
87559 -* INT_P_SIGN_POSN: The Elegant and Fast Way.
87560 -* IPPORT_RESERVED: Ports.
87561 -* IPPORT_USERRESERVED: Ports.
87562 -* ISIG: Local Modes.
87563 -* ISTRIP: Input Modes.
87564 -* ITIMER_PROF: Setting an Alarm.
87565 -* ITIMER_REAL: Setting an Alarm.
87566 -* ITIMER_VIRTUAL: Setting an Alarm.
87567 -* IXANY: Input Modes.
87568 -* IXOFF: Input Modes.
87569 -* IXON: Input Modes.
87570 -* L_ctermid: Identifying the Terminal.
87571 -* L_cuserid: Who Logged In.
87572 -* L_INCR: File Positioning.
87573 -* L_SET: File Positioning.
87574 -* L_tmpnam: Temporary Files.
87575 -* L_XTND: File Positioning.
87576 -* LANG: Locale Categories.
87577 -* LANGUAGE: Locale Categories.
87578 -* LC_ALL: Locale Categories.
87579 -* LC_COLLATE: Locale Categories.
87580 -* LC_CTYPE: Locale Categories.
87581 -* LC_MESSAGES: Locale Categories.
87582 -* LC_MONETARY: Locale Categories.
87583 -* LC_NUMERIC: Locale Categories.
87584 -* LC_TIME: Locale Categories.
87585 -* LDBL_DIG: Floating Point Parameters.
87586 -* LDBL_EPSILON: Floating Point Parameters.
87587 -* LDBL_MANT_DIG: Floating Point Parameters.
87588 -* LDBL_MAX: Floating Point Parameters.
87589 -* LDBL_MAX_10_EXP: Floating Point Parameters.
87590 -* LDBL_MAX_EXP: Floating Point Parameters.
87591 -* LDBL_MIN: Floating Point Parameters.
87592 -* LDBL_MIN_10_EXP: Floating Point Parameters.
87593 -* LDBL_MIN_EXP: Floating Point Parameters.
87594 -* LINE_MAX: Utility Limits.
87595 -* LINK_MAX: Limits for Files.
87596 -* LIO_NOP: Asynchronous I/O.
87597 -* LIO_READ: Asynchronous I/O.
87598 -* LIO_WRITE: Asynchronous I/O.
87599 -* LOG_ALERT: syslog; vsyslog.
87600 -* LOG_AUTH: syslog; vsyslog.
87601 -* LOG_AUTHPRIV: syslog; vsyslog.
87602 -* LOG_CRIT: syslog; vsyslog.
87603 -* LOG_CRON: syslog; vsyslog.
87604 -* LOG_DAEMON: syslog; vsyslog.
87605 -* LOG_DEBUG: syslog; vsyslog.
87606 -* LOG_EMERG: syslog; vsyslog.
87607 -* LOG_ERR: syslog; vsyslog.
87608 -* LOG_FTP: syslog; vsyslog.
87609 -* LOG_INFO: syslog; vsyslog.
87610 -* LOG_LOCAL0: syslog; vsyslog.
87611 -* LOG_LOCAL1: syslog; vsyslog.
87612 -* LOG_LOCAL2: syslog; vsyslog.
87613 -* LOG_LOCAL3: syslog; vsyslog.
87614 -* LOG_LOCAL4: syslog; vsyslog.
87615 -* LOG_LOCAL5: syslog; vsyslog.
87616 -* LOG_LOCAL6: syslog; vsyslog.
87617 -* LOG_LOCAL7: syslog; vsyslog.
87618 -* LOG_LPR: syslog; vsyslog.
87619 -* LOG_MAIL: syslog; vsyslog.
87620 -* LOG_NEWS: syslog; vsyslog.
87621 -* LOG_NOTICE: syslog; vsyslog.
87622 -* LOG_SYSLOG: syslog; vsyslog.
87623 -* LOG_USER: syslog; vsyslog.
87624 -* LOG_UUCP: syslog; vsyslog.
87625 -* LOG_WARNING: syslog; vsyslog.
87626 -* LOGIN_PROCESS <1>: XPG Functions.
87627 -* LOGIN_PROCESS: Manipulating the Database.
87628 -* LONG_LONG_MAX: Range of Type.
87629 -* LONG_LONG_MIN: Range of Type.
87630 -* LONG_MAX: Range of Type.
87631 -* LONG_MIN: Range of Type.
87632 -* M_1_PI: Mathematical Constants.
87633 -* M_2_PI: Mathematical Constants.
87634 -* M_2_SQRTPI: Mathematical Constants.
87635 -* M_E: Mathematical Constants.
87636 -* M_LN10: Mathematical Constants.
87637 -* M_LN2: Mathematical Constants.
87638 -* M_LOG10E: Mathematical Constants.
87639 -* M_LOG2E: Mathematical Constants.
87640 -* M_PI: Mathematical Constants.
87641 -* M_PI_2: Mathematical Constants.
87642 -* M_PI_4: Mathematical Constants.
87643 -* M_SQRT1_2: Mathematical Constants.
87644 -* M_SQRT2: Mathematical Constants.
87645 -* MAP_ANON: Memory-mapped I/O.
87646 -* MAP_ANONYMOUS: Memory-mapped I/O.
87647 -* MAP_FIXED: Memory-mapped I/O.
87648 -* MAP_PRIVATE: Memory-mapped I/O.
87649 -* MAP_SHARED: Memory-mapped I/O.
87650 -* MAX_CANON: Limits for Files.
87651 -* MAX_INPUT: Limits for Files.
87652 -* MAXNAMLEN: Limits for Files.
87653 -* MAXSYMLINKS: Symbolic Links.
87654 -* MB_CUR_MAX: Selecting the Conversion.
87655 -* MB_LEN_MAX: Selecting the Conversion.
87656 -* MDMBUF: Control Modes.
87657 -* MINSIGSTKSZ: Signal Stack.
87658 -* MM_APPL: Printing Formatted Messages.
87659 -* MM_CONSOLE: Printing Formatted Messages.
87660 -* MM_ERROR: Printing Formatted Messages.
87661 -* MM_FIRM: Printing Formatted Messages.
87662 -* MM_HALT: Printing Formatted Messages.
87663 -* MM_HARD: Printing Formatted Messages.
87664 -* MM_INFO: Printing Formatted Messages.
87665 -* MM_NOSEV: Printing Formatted Messages.
87666 -* MM_NRECOV: Printing Formatted Messages.
87667 -* MM_NULLACT: Printing Formatted Messages.
87668 -* MM_NULLLBL: Printing Formatted Messages.
87669 -* MM_NULLMC: Printing Formatted Messages.
87670 -* MM_NULLSEV: Printing Formatted Messages.
87671 -* MM_NULLTAG: Printing Formatted Messages.
87672 -* MM_NULLTXT: Printing Formatted Messages.
87673 -* MM_OPSYS: Printing Formatted Messages.
87674 -* MM_PRINT: Printing Formatted Messages.
87675 -* MM_RECOVER: Printing Formatted Messages.
87676 -* MM_SOFT: Printing Formatted Messages.
87677 -* MM_UTIL: Printing Formatted Messages.
87678 -* MM_WARNING: Printing Formatted Messages.
87679 -* MNTOPT_DEFAULTS: mtab.
87680 -* MNTOPT_NOAUTO: mtab.
87681 -* MNTOPT_NOSUID: mtab.
87682 -* MNTOPT_RO: mtab.
87683 -* MNTOPT_RW: mtab.
87684 -* MNTOPT_SUID: mtab.
87685 -* MNTTAB: Mount Information.
87686 -* MNTTYPE_IGNORE: mtab.
87687 -* MNTTYPE_NFS: mtab.
87688 -* MNTTYPE_SWAP: mtab.
87689 -* MON_1: The Elegant and Fast Way.
87690 -* MON_10: The Elegant and Fast Way.
87691 -* MON_11: The Elegant and Fast Way.
87692 -* MON_12: The Elegant and Fast Way.
87693 -* MON_2: The Elegant and Fast Way.
87694 -* MON_3: The Elegant and Fast Way.
87695 -* MON_4: The Elegant and Fast Way.
87696 -* MON_5: The Elegant and Fast Way.
87697 -* MON_6: The Elegant and Fast Way.
87698 -* MON_7: The Elegant and Fast Way.
87699 -* MON_8: The Elegant and Fast Way.
87700 -* MON_9: The Elegant and Fast Way.
87701 -* MON_DECIMAL_POINT: The Elegant and Fast Way.
87702 -* MON_GROUPING: The Elegant and Fast Way.
87703 -* MON_THOUSANDS_SEP: The Elegant and Fast Way.
87704 -* MOUNTED: Mount Information.
87705 -* MS_ASYNC: Memory-mapped I/O.
87706 -* MS_SYNC: Memory-mapped I/O.
87707 -* MSG_DONTROUTE: Socket Data Options.
87708 -* MSG_OOB: Socket Data Options.
87709 -* MSG_PEEK: Socket Data Options.
87710 -* N_CS_PRECEDES: The Elegant and Fast Way.
87711 -* N_SEP_BY_SPACE: The Elegant and Fast Way.
87712 -* N_SIGN_POSN: The Elegant and Fast Way.
87713 -* NAME_MAX: Limits for Files.
87714 -* NAN: Infinity and NaN.
87715 -* NCCS: Mode Data Types.
87716 -* NDEBUG: Consistency Checking.
87717 -* NEGATIVE_SIGN: The Elegant and Fast Way.
87718 -* netgroup: NSS Basics.
87719 -* networks: NSS Basics.
87720 -* NEW_TIME <1>: XPG Functions.
87721 -* NEW_TIME: Manipulating the Database.
87722 -* NGROUPS_MAX: General Limits.
87723 -* NL_ARGMAX: Output Conversion Syntax.
87724 -* NO_ADDRESS: Host Names.
87725 -* NO_RECOVERY: Host Names.
87726 -* NOEXPR: The Elegant and Fast Way.
87727 -* NOFLSH: Local Modes.
87728 -* NOKERNINFO: Local Modes.
87729 -* NOSTR: The Elegant and Fast Way.
87730 -* NSIG: Standard Signals.
87731 -* NSS_STATUS_NOTFOUND: NSS Modules Interface.
87732 -* NSS_STATUS_SUCCESS: NSS Modules Interface.
87733 -* NSS_STATUS_TRYAGAIN: NSS Modules Interface.
87734 -* NSS_STATUS_UNAVAIL: NSS Modules Interface.
87735 -* NULL: Null Pointer Constant.
87736 -* O_ACCMODE: Access Modes.
87737 -* O_APPEND: Operating Modes.
87738 -* O_ASYNC: Operating Modes.
87739 -* O_CREAT: Open-time Flags.
87740 -* O_EXCL: Open-time Flags.
87741 -* O_EXEC: Access Modes.
87742 -* O_EXLOCK: Open-time Flags.
87743 -* O_FSYNC: Operating Modes.
87744 -* O_IGNORE_CTTY: Open-time Flags.
87745 -* O_NDELAY: Operating Modes.
87746 -* O_NOATIME: Operating Modes.
87747 -* O_NOCTTY: Open-time Flags.
87748 -* O_NOLINK: Open-time Flags.
87749 -* O_NONBLOCK <1>: Operating Modes.
87750 -* O_NONBLOCK: Open-time Flags.
87751 -* O_NOTRANS: Open-time Flags.
87752 -* O_RDONLY: Access Modes.
87753 -* O_RDWR: Access Modes.
87754 -* O_READ: Access Modes.
87755 -* O_SHLOCK: Open-time Flags.
87756 -* O_SYNC: Operating Modes.
87757 -* O_TRUNC: Open-time Flags.
87758 -* O_WRITE: Access Modes.
87759 -* O_WRONLY: Access Modes.
87760 -* obstack_alloc_failed_handler: Preparing for Obstacks.
87761 -* OLD_TIME <1>: XPG Functions.
87762 -* OLD_TIME: Manipulating the Database.
87763 -* ONLCR: Output Modes.
87764 -* ONOEOT: Output Modes.
87765 -* OPEN_MAX: General Limits.
87766 -* OPOST: Output Modes.
87767 -* optarg: Using Getopt.
87768 -* opterr: Using Getopt.
87769 -* optind: Using Getopt.
87770 -* OPTION_ALIAS: Argp Option Flags.
87771 -* OPTION_ARG_OPTIONAL: Argp Option Flags.
87772 -* OPTION_DOC: Argp Option Flags.
87773 -* OPTION_HIDDEN: Argp Option Flags.
87774 -* OPTION_NO_USAGE: Argp Option Flags.
87775 -* optopt: Using Getopt.
87776 -* OXTABS: Output Modes.
87777 -* P_CS_PRECEDES: The Elegant and Fast Way.
87778 -* P_SEP_BY_SPACE: The Elegant and Fast Way.
87779 -* P_SIGN_POSN: The Elegant and Fast Way.
87780 -* P_tmpdir: Temporary Files.
87781 -* PA_CHAR: Parsing a Template String.
87782 -* PA_DOUBLE: Parsing a Template String.
87783 -* PA_FLAG_LONG: Parsing a Template String.
87784 -* PA_FLAG_LONG_DOUBLE: Parsing a Template String.
87785 -* PA_FLAG_LONG_LONG: Parsing a Template String.
87786 -* PA_FLAG_MASK: Parsing a Template String.
87787 -* PA_FLAG_PTR: Parsing a Template String.
87788 -* PA_FLAG_SHORT: Parsing a Template String.
87789 -* PA_FLOAT: Parsing a Template String.
87790 -* PA_INT: Parsing a Template String.
87791 -* PA_LAST: Parsing a Template String.
87792 -* PA_POINTER: Parsing a Template String.
87793 -* PA_STRING: Parsing a Template String.
87794 -* PARENB: Control Modes.
87795 -* PARMRK: Input Modes.
87796 -* PARODD: Control Modes.
87797 -* passwd: NSS Basics.
87798 -* PATH_MAX: Limits for Files.
87799 -* PENDIN: Local Modes.
87800 -* PF_CCITT: Misc Namespaces.
87801 -* PF_FILE: Local Namespace Details.
87802 -* PF_IMPLINK: Misc Namespaces.
87803 -* PF_INET: Internet Namespace.
87804 -* PF_INET6: Internet Namespace.
87805 -* PF_ISO: Misc Namespaces.
87806 -* PF_LOCAL: Local Namespace Details.
87807 -* PF_NS: Misc Namespaces.
87808 -* PF_ROUTE: Misc Namespaces.
87809 -* PF_UNIX: Local Namespace Details.
87810 -* PI: Mathematical Constants.
87811 -* PIPE_BUF: Limits for Files.
87812 -* PM_STR: The Elegant and Fast Way.
87813 -* POSITIVE_SIGN: The Elegant and Fast Way.
87814 -* PRIO_MAX: Traditional Scheduling Functions.
87815 -* PRIO_MIN: Traditional Scheduling Functions.
87816 -* PRIO_PGRP: Traditional Scheduling Functions.
87817 -* PRIO_PROCESS: Traditional Scheduling Functions.
87818 -* PRIO_USER: Traditional Scheduling Functions.
87819 -* program_invocation_name: Error Messages.
87820 -* program_invocation_short_name: Error Messages.
87821 -* PROT_EXEC: Memory-mapped I/O.
87822 -* PROT_READ: Memory-mapped I/O.
87823 -* PROT_WRITE: Memory-mapped I/O.
87824 -* protocols: NSS Basics.
87825 -* PWD: Working Directory.
87826 -* R_OK: Testing File Access.
87827 -* RADIXCHAR: The Elegant and Fast Way.
87828 -* RAND_MAX: ISO Random.
87829 -* RE_DUP_MAX: General Limits.
87830 -* RLIM_INFINITY: Limits on Resources.
87831 -* RLIM_NLIMITS: Limits on Resources.
87832 -* RLIMIT_AS: Limits on Resources.
87833 -* RLIMIT_CORE: Limits on Resources.
87834 -* RLIMIT_CPU: Limits on Resources.
87835 -* RLIMIT_DATA: Limits on Resources.
87836 -* RLIMIT_FSIZE: Limits on Resources.
87837 -* RLIMIT_NOFILE: Limits on Resources.
87838 -* RLIMIT_OFILE: Limits on Resources.
87839 -* RLIMIT_RSS: Limits on Resources.
87840 -* RLIMIT_STACK: Limits on Resources.
87841 -* rpc: NSS Basics.
87842 -* RUN_LVL <1>: XPG Functions.
87843 -* RUN_LVL: Manipulating the Database.
87844 -* S_IEXEC: Permission Bits.
87845 -* S_IFBLK: Testing File Type.
87846 -* S_IFCHR: Testing File Type.
87847 -* S_IFDIR: Testing File Type.
87848 -* S_IFIFO: Testing File Type.
87849 -* S_IFLNK: Testing File Type.
87850 -* S_IFMT: Testing File Type.
87851 -* S_IFREG: Testing File Type.
87852 -* S_IFSOCK: Testing File Type.
87853 -* S_IREAD: Permission Bits.
87854 -* S_IRGRP: Permission Bits.
87855 -* S_IROTH: Permission Bits.
87856 -* S_IRUSR: Permission Bits.
87857 -* S_IRWXG: Permission Bits.
87858 -* S_IRWXO: Permission Bits.
87859 -* S_IRWXU: Permission Bits.
87860 -* S_ISGID: Permission Bits.
87861 -* S_ISUID: Permission Bits.
87862 -* S_ISVTX: Permission Bits.
87863 -* S_IWGRP: Permission Bits.
87864 -* S_IWOTH: Permission Bits.
87865 -* S_IWRITE: Permission Bits.
87866 -* S_IWUSR: Permission Bits.
87867 -* S_IXGRP: Permission Bits.
87868 -* S_IXOTH: Permission Bits.
87869 -* S_IXUSR: Permission Bits.
87870 -* SA_NOCLDSTOP: Flags for Sigaction.
87871 -* SA_ONSTACK: Flags for Sigaction.
87872 -* SA_RESTART: Flags for Sigaction.
87873 -* SC_SSIZE_MAX: Constants for Sysconf.
87874 -* SCHAR_MAX: Range of Type.
87875 -* SCHAR_MIN: Range of Type.
87876 -* SEEK_CUR: File Positioning.
87877 -* SEEK_END: File Positioning.
87878 -* SEEK_SET: File Positioning.
87879 -* SEM_VALUE_MAX: POSIX Semaphores.
87880 -* services: NSS Basics.
87881 -* shadow: NSS Basics.
87882 -* SHRT_MAX: Range of Type.
87883 -* SHRT_MIN: Range of Type.
87884 -* SIG_BLOCK: Process Signal Mask.
87885 -* SIG_DFL: Basic Signal Handling.
87886 -* SIG_ERR: Basic Signal Handling.
87887 -* SIG_IGN: Basic Signal Handling.
87888 -* SIG_SETMASK: Process Signal Mask.
87889 -* SIG_UNBLOCK: Process Signal Mask.
87890 -* SIGABRT: Program Error Signals.
87891 -* SIGALRM: Alarm Signals.
87892 -* SIGBUS: Program Error Signals.
87893 -* SIGCHLD: Job Control Signals.
87894 -* SIGCLD: Job Control Signals.
87895 -* SIGCONT: Job Control Signals.
87896 -* SIGEMT: Program Error Signals.
87897 -* SIGFPE: Program Error Signals.
87898 -* SIGHUP: Termination Signals.
87899 -* SIGILL: Program Error Signals.
87900 -* SIGINFO: Miscellaneous Signals.
87901 -* SIGINT: Termination Signals.
87902 -* SIGIO: Asynchronous I/O Signals.
87903 -* SIGIOT: Program Error Signals.
87904 -* SIGKILL: Termination Signals.
87905 -* SIGLOST: Operation Error Signals.
87906 -* signgam: Special Functions.
87907 -* SIGPIPE: Operation Error Signals.
87908 -* SIGPOLL: Asynchronous I/O Signals.
87909 -* SIGPROF: Alarm Signals.
87910 -* SIGQUIT: Termination Signals.
87911 -* SIGSEGV: Program Error Signals.
87912 -* SIGSTKSZ: Signal Stack.
87913 -* SIGSTOP: Job Control Signals.
87914 -* SIGSYS: Program Error Signals.
87915 -* SIGTERM: Termination Signals.
87916 -* SIGTRAP: Program Error Signals.
87917 -* SIGTSTP: Job Control Signals.
87918 -* SIGTTIN: Job Control Signals.
87919 -* SIGTTOU: Job Control Signals.
87920 -* SIGURG: Asynchronous I/O Signals.
87921 -* SIGUSR1: Miscellaneous Signals.
87922 -* SIGUSR2: Miscellaneous Signals.
87923 -* SIGVTALRM: Alarm Signals.
87924 -* SIGWINCH: Miscellaneous Signals.
87925 -* SIGXCPU: Operation Error Signals.
87926 -* SIGXFSZ: Operation Error Signals.
87927 -* SOCK_DGRAM: Communication Styles.
87928 -* SOCK_RAW: Communication Styles.
87929 -* SOCK_STREAM: Communication Styles.
87930 -* SOL_SOCKET: Socket-Level Options.
87931 -* SS_DISABLE: Signal Stack.
87932 -* SS_ONSTACK: Signal Stack.
87933 -* SSIZE_MAX: General Limits.
87934 -* stderr: Standard Streams.
87935 -* STDERR_FILENO: Descriptors and Streams.
87936 -* stdin: Standard Streams.
87937 -* STDIN_FILENO: Descriptors and Streams.
87938 -* stdout: Standard Streams.
87939 -* STDOUT_FILENO: Descriptors and Streams.
87940 -* STREAM_MAX: General Limits.
87941 -* SV_INTERRUPT: BSD Handler.
87942 -* SV_ONSTACK: BSD Handler.
87943 -* SV_RESETHAND: BSD Handler.
87944 -* sys_siglist: Signal Messages.
87945 -* T_FMT: The Elegant and Fast Way.
87946 -* T_FMT_AMPM: The Elegant and Fast Way.
87947 -* TCIFLUSH: Line Control.
87948 -* TCIOFF: Line Control.
87949 -* TCIOFLUSH: Line Control.
87950 -* TCION: Line Control.
87951 -* TCOFLUSH: Line Control.
87952 -* TCOOFF: Line Control.
87953 -* TCOON: Line Control.
87954 -* TCSADRAIN: Mode Functions.
87955 -* TCSAFLUSH: Mode Functions.
87956 -* TCSANOW: Mode Functions.
87957 -* TCSASOFT: Mode Functions.
87958 -* THOUSANDS_SEP: The Elegant and Fast Way.
87959 -* THOUSEP: The Elegant and Fast Way.
87960 -* timezone: Time Zone Functions.
87961 -* TMP_MAX: Temporary Files.
87962 -* TOSTOP: Local Modes.
87963 -* TRY_AGAIN: Host Names.
87964 -* tzname: Time Zone Functions.
87965 -* TZNAME_MAX: General Limits.
87966 -* UCHAR_MAX: Range of Type.
87967 -* UINT_MAX: Range of Type.
87968 -* ULONG_LONG_MAX: Range of Type.
87969 -* ULONG_MAX: Range of Type.
87970 -* USER_PROCESS <1>: XPG Functions.
87971 -* USER_PROCESS: Manipulating the Database.
87972 -* USHRT_MAX: Range of Type.
87973 -* VDISCARD: Other Special.
87974 -* VDSUSP: Signal Characters.
87975 -* VEOF: Editing Characters.
87976 -* VEOL: Editing Characters.
87977 -* VEOL2: Editing Characters.
87978 -* VERASE: Editing Characters.
87979 -* VINTR: Signal Characters.
87980 -* VKILL: Editing Characters.
87981 -* VLNEXT: Other Special.
87982 -* VMIN: Noncanonical Input.
87983 -* VQUIT: Signal Characters.
87984 -* VREPRINT: Editing Characters.
87985 -* VSTART: Start/Stop Characters.
87986 -* VSTATUS: Other Special.
87987 -* VSTOP: Start/Stop Characters.
87988 -* VSUSP: Signal Characters.
87989 -* VTIME: Noncanonical Input.
87990 -* VWERASE: Editing Characters.
87991 -* W_OK: Testing File Access.
87992 -* WCHAR_MAX <1>: Range of Type.
87993 -* WCHAR_MAX: Extended Char Intro.
87994 -* WCHAR_MIN: Extended Char Intro.
87995 -* WEOF <1>: EOF and Errors.
87996 -* WEOF: Extended Char Intro.
87997 -* X_OK: Testing File Access.
87998 -* YESEXPR: The Elegant and Fast Way.
87999 -* YESSTR: The Elegant and Fast Way.
88001 diff -u -udbrN glibc-2.3.2/manual/libc.info-61 glibc-2.3.2-200304020432/manual/libc.info-61
88002 --- glibc-2.3.2/manual/libc.info-61 Sat Mar 1 02:39:41 2003
88003 +++ glibc-2.3.2-200304020432/manual/libc.info-61 Thu Jan 1 01:00:00 1970
88004 @@ -1,302 +0,0 @@
88005 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
88007 -INFO-DIR-SECTION GNU libraries
88008 -START-INFO-DIR-ENTRY
88009 -* Libc: (libc). C library.
88010 -END-INFO-DIR-ENTRY
88012 - This file documents the GNU C library.
88014 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
88015 -Reference Manual', for Version 2.3.x.
88017 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
88018 -Free Software Foundation, Inc.
88020 - Permission is granted to copy, distribute and/or modify this document
88021 -under the terms of the GNU Free Documentation License, Version 1.1 or
88022 -any later version published by the Free Software Foundation; with the
88023 -Invariant Sections being "Free Software Needs Free Documentation" and
88024 -"GNU Lesser General Public License", the Front-Cover texts being (a)
88025 -(see below), and with the Back-Cover Texts being (b) (see below). A
88026 -copy of the license is included in the section entitled "GNU Free
88027 -Documentation License".
88029 - (a) The FSF's Front-Cover Text is:
88031 - A GNU Manual
88033 - (b) The FSF's Back-Cover Text is:
88035 - You have freedom to copy and modify this GNU Manual, like GNU
88036 -software. Copies published by the Free Software Foundation raise
88037 -funds for GNU development.
88039 -\x1f
88040 -File: libc.info, Node: File Index, Prev: Variable Index, Up: Top
88042 -Program and File Index
88043 -**********************
88045 -* Menu:
88047 -* -lbsd-compat <1>: Process Group Functions.
88048 -* -lbsd-compat: Feature Test Macros.
88049 -* /etc/group: Group Database.
88050 -* /etc/hosts: Host Names.
88051 -* /etc/localtime: TZ Variable.
88052 -* /etc/networks: Networks Database.
88053 -* /etc/passwd: User Database.
88054 -* /etc/protocols: Protocols Database.
88055 -* /etc/services: Services Database.
88056 -* /share/lib/zoneinfo: TZ Variable.
88057 -* argp.h: Argp.
88058 -* argz.h: Argz Functions.
88059 -* arpa/inet.h: Host Address Functions.
88060 -* assert.h: Consistency Checking.
88061 -* bsd-compat <1>: Process Group Functions.
88062 -* bsd-compat: Feature Test Macros.
88063 -* cd: Working Directory.
88064 -* chgrp: File Owner.
88065 -* chown: File Owner.
88066 -* complex.h <1>: Operations on Complex.
88067 -* complex.h <2>: Complex Numbers.
88068 -* complex.h: Mathematics.
88069 -* ctype.h <1>: Case Conversion.
88070 -* ctype.h <2>: Classification of Characters.
88071 -* ctype.h: Character Handling.
88072 -* dirent.h <1>: Random Access Directory.
88073 -* dirent.h <2>: Reading/Closing Directory.
88074 -* dirent.h <3>: Opening a Directory.
88075 -* dirent.h <4>: Directory Entries.
88076 -* dirent.h: Reserved Names.
88077 -* envz.h: Envz Functions.
88078 -* errno.h <1>: Error Codes.
88079 -* errno.h <2>: Checking for Errors.
88080 -* errno.h: Error Reporting.
88081 -* execinfo.h: Backtraces.
88082 -* fcntl.h <1>: Interrupt Input.
88083 -* fcntl.h <2>: File Locks.
88084 -* fcntl.h <3>: File Status Flags.
88085 -* fcntl.h <4>: Descriptor Flags.
88086 -* fcntl.h <5>: Duplicating Descriptors.
88087 -* fcntl.h <6>: Control Operations.
88088 -* fcntl.h <7>: Opening and Closing Files.
88089 -* fcntl.h: Reserved Names.
88090 -* float.h: Floating Point Parameters.
88091 -* fnmatch.h: Wildcard Matching.
88092 -* gcc: ISO C.
88093 -* gconv.h: glibc iconv Implementation.
88094 -* grp.h <1>: Group Data Structure.
88095 -* grp.h <2>: Setting Groups.
88096 -* grp.h: Reserved Names.
88097 -* hostid: Host Identification.
88098 -* hostname: Host Identification.
88099 -* iconv.h: Generic Conversion Interface.
88100 -* kill: Termination Signals.
88101 -* ksh: Wildcard Matching.
88102 -* langinfo.h: The Elegant and Fast Way.
88103 -* limits.h <1>: Width of Type.
88104 -* limits.h <2>: Limits for Files.
88105 -* limits.h <3>: General Limits.
88106 -* limits.h <4>: Selecting the Conversion.
88107 -* limits.h: Reserved Names.
88108 -* locale: Setting the Locale.
88109 -* locale.h <1>: The Lame Way to Locale Data.
88110 -* locale.h: Setting the Locale.
88111 -* localtime: TZ Variable.
88112 -* ls: File Attributes.
88113 -* malloc.h <1>: Statistics of Malloc.
88114 -* malloc.h <2>: Hooks for Malloc.
88115 -* malloc.h: Malloc Tunable Parameters.
88116 -* math.h <1>: Rounding Functions.
88117 -* math.h <2>: Normalization Functions.
88118 -* math.h <3>: Absolute Value.
88119 -* math.h <4>: Floating Point Classes.
88120 -* math.h: Mathematics.
88121 -* mcheck.h: Heap Consistency Checking.
88122 -* mkdir: Creating Directories.
88123 -* netdb.h <1>: Networks Database.
88124 -* netdb.h <2>: Protocols Database.
88125 -* netdb.h <3>: Services Database.
88126 -* netdb.h: Host Names.
88127 -* netinet/in.h <1>: Byte Order.
88128 -* netinet/in.h <2>: Ports.
88129 -* netinet/in.h <3>: Host Address Data Type.
88130 -* netinet/in.h: Internet Address Formats.
88131 -* obstack.h: Creating Obstacks.
88132 -* printf.h <1>: Conversion Specifier Options.
88133 -* printf.h: Registering New Conversions.
88134 -* pwd.h <1>: User Data Structure.
88135 -* pwd.h: Reserved Names.
88136 -* setjmp.h <1>: Non-Local Exits and Signals.
88137 -* setjmp.h: Non-Local Details.
88138 -* sh: Running a Command.
88139 -* signal.h <1>: BSD Signal Handling.
88140 -* signal.h <2>: Checking for Pending Signals.
88141 -* signal.h <3>: Process Signal Mask.
88142 -* signal.h <4>: Signal Sets.
88143 -* signal.h <5>: Signaling Another Process.
88144 -* signal.h <6>: Signaling Yourself.
88145 -* signal.h <7>: Flags for Sigaction.
88146 -* signal.h <8>: Advanced Signal Handling.
88147 -* signal.h <9>: Basic Signal Handling.
88148 -* signal.h <10>: Standard Signals.
88149 -* signal.h: Reserved Names.
88150 -* stdarg.h <1>: Argument Macros.
88151 -* stdarg.h: Receiving Arguments.
88152 -* stddef.h: Important Data Types.
88153 -* stdint.h: Integers.
88154 -* stdio.h <1>: Who Logged In.
88155 -* stdio.h <2>: Identifying the Terminal.
88156 -* stdio.h <3>: Signal Messages.
88157 -* stdio.h <4>: Temporary Files.
88158 -* stdio.h <5>: Deleting Files.
88159 -* stdio.h <6>: Descriptors and Streams.
88160 -* stdio.h <7>: Streams and Cookies.
88161 -* stdio.h <8>: String Streams.
88162 -* stdio.h <9>: Controlling Buffering.
88163 -* stdio.h <10>: Flushing Buffers.
88164 -* stdio.h <11>: Portable Positioning.
88165 -* stdio.h <12>: File Positioning.
88166 -* stdio.h <13>: Formatted Input Functions.
88167 -* stdio.h <14>: Variable Arguments Output.
88168 -* stdio.h <15>: Formatted Output Functions.
88169 -* stdio.h <16>: Block Input/Output.
88170 -* stdio.h <17>: Character Input.
88171 -* stdio.h <18>: Simple Output.
88172 -* stdio.h <19>: Opening Streams.
88173 -* stdio.h <20>: Standard Streams.
88174 -* stdio.h: Streams.
88175 -* stdlib.h <1>: Running a Command.
88176 -* stdlib.h <2>: Aborting a Program.
88177 -* stdlib.h <3>: Exit Status.
88178 -* stdlib.h <4>: Environment Access.
88179 -* stdlib.h <5>: Parsing of Floats.
88180 -* stdlib.h <6>: Parsing of Integers.
88181 -* stdlib.h <7>: Absolute Value.
88182 -* stdlib.h <8>: Integer Division.
88183 -* stdlib.h <9>: SVID Random.
88184 -* stdlib.h <10>: BSD Random.
88185 -* stdlib.h <11>: ISO Random.
88186 -* stdlib.h <12>: Allocation.
88187 -* stdlib.h <13>: Array Sort Function.
88188 -* stdlib.h <14>: Array Search Function.
88189 -* stdlib.h <15>: Non-reentrant Character Conversion.
88190 -* stdlib.h <16>: Selecting the Conversion.
88191 -* stdlib.h <17>: Variable Size Automatic.
88192 -* stdlib.h <18>: Aligned Memory Blocks.
88193 -* stdlib.h <19>: Allocating Cleared Space.
88194 -* stdlib.h <20>: Changing Block Size.
88195 -* stdlib.h <21>: Freeing after Malloc.
88196 -* stdlib.h: Basic Allocation.
88197 -* string.h <1>: Signal Messages.
88198 -* string.h <2>: Trivial Encryption.
88199 -* string.h <3>: Finding Tokens in a String.
88200 -* string.h <4>: Search Functions.
88201 -* string.h <5>: Collation Functions.
88202 -* string.h <6>: String/Array Comparison.
88203 -* string.h <7>: Copying and Concatenation.
88204 -* string.h: String Length.
88205 -* sys/param.h: Host Identification.
88206 -* sys/resource.h <1>: Traditional Scheduling Functions.
88207 -* sys/resource.h <2>: Limits on Resources.
88208 -* sys/resource.h: Resource Usage.
88209 -* sys/socket.h <1>: Socket-Level Options.
88210 -* sys/socket.h <2>: Socket Option Functions.
88211 -* sys/socket.h <3>: Sending Datagrams.
88212 -* sys/socket.h <4>: Socket Data Options.
88213 -* sys/socket.h <5>: Receiving Data.
88214 -* sys/socket.h <6>: Sending Data.
88215 -* sys/socket.h <7>: Socket Pairs.
88216 -* sys/socket.h <8>: Closing a Socket.
88217 -* sys/socket.h <9>: Creating a Socket.
88218 -* sys/socket.h <10>: Internet Namespace.
88219 -* sys/socket.h <11>: Local Namespace Details.
88220 -* sys/socket.h <12>: Reading Address.
88221 -* sys/socket.h <13>: Setting Address.
88222 -* sys/socket.h <14>: Address Formats.
88223 -* sys/socket.h: Communication Styles.
88224 -* sys/stat.h <1>: FIFO Special Files.
88225 -* sys/stat.h <2>: Making Special Files.
88226 -* sys/stat.h <3>: Setting Permissions.
88227 -* sys/stat.h <4>: Permission Bits.
88228 -* sys/stat.h <5>: Testing File Type.
88229 -* sys/stat.h <6>: Attribute Meanings.
88230 -* sys/stat.h <7>: Creating Directories.
88231 -* sys/stat.h: Reserved Names.
88232 -* sys/time.h <1>: Setting an Alarm.
88233 -* sys/time.h <2>: High-Resolution Calendar.
88234 -* sys/time.h: File Times.
88235 -* sys/times.h <1>: Processor Time.
88236 -* sys/times.h: Reserved Names.
88237 -* sys/timex.h: High Accuracy Clock.
88238 -* sys/types.h <1>: Setting Groups.
88239 -* sys/types.h <2>: Setting User ID.
88240 -* sys/types.h <3>: Reading Persona.
88241 -* sys/types.h <4>: Terminal Access Functions.
88242 -* sys/types.h <5>: Process Group Functions.
88243 -* sys/types.h <6>: Process Identification.
88244 -* sys/types.h: Waiting for I/O.
88245 -* sys/un.h: Local Namespace Details.
88246 -* sys/utsname.h: Platform Type.
88247 -* sys/vlimit.h: Limits on Resources.
88248 -* sys/vtimes.h: Resource Usage.
88249 -* sys/wait.h <1>: BSD Wait Functions.
88250 -* sys/wait.h <2>: Process Completion Status.
88251 -* sys/wait.h: Process Completion.
88252 -* termios.h <1>: Terminal Modes.
88253 -* termios.h: Reserved Names.
88254 -* time.h <1>: TZ Variable.
88255 -* time.h <2>: Formatting Calendar Time.
88256 -* time.h <3>: Simple Calendar Time.
88257 -* time.h <4>: CPU Time.
88258 -* time.h: File Times.
88259 -* ulimit.h: Limits on Resources.
88260 -* umask: Setting Permissions.
88261 -* unistd.h <1>: Options for Files.
88262 -* unistd.h <2>: System Options.
88263 -* unistd.h <3>: Host Identification.
88264 -* unistd.h <4>: Who Logged In.
88265 -* unistd.h <5>: Setting Groups.
88266 -* unistd.h <6>: Setting User ID.
88267 -* unistd.h <7>: Reading Persona.
88268 -* unistd.h <8>: Terminal Access Functions.
88269 -* unistd.h <9>: Process Group Functions.
88270 -* unistd.h <10>: Executing a File.
88271 -* unistd.h <11>: Creating a Process.
88272 -* unistd.h <12>: Process Identification.
88273 -* unistd.h <13>: Termination Internals.
88274 -* unistd.h <14>: Using Getopt.
88275 -* unistd.h <15>: Setting an Alarm.
88276 -* unistd.h <16>: Is It a Terminal.
88277 -* unistd.h <17>: Creating a Pipe.
88278 -* unistd.h <18>: Testing File Access.
88279 -* unistd.h <19>: File Owner.
88280 -* unistd.h <20>: Deleting Files.
88281 -* unistd.h <21>: Symbolic Links.
88282 -* unistd.h <22>: Hard Links.
88283 -* unistd.h <23>: Working Directory.
88284 -* unistd.h <24>: Duplicating Descriptors.
88285 -* unistd.h <25>: Descriptors and Streams.
88286 -* unistd.h <26>: I/O Primitives.
88287 -* unistd.h: Opening and Closing Files.
88288 -* utime.h: File Times.
88289 -* utmp.h <1>: Logging In and Out.
88290 -* utmp.h: Manipulating the Database.
88291 -* utmpx.h: XPG Functions.
88292 -* varargs.h: Old Varargs.
88293 -* wchar.h <1>: Parsing of Integers.
88294 -* wchar.h <2>: Character Input.
88295 -* wchar.h <3>: Simple Output.
88296 -* wchar.h <4>: Converting Strings.
88297 -* wchar.h <5>: Converting a Character.
88298 -* wchar.h <6>: Keeping the state.
88299 -* wchar.h <7>: Extended Char Intro.
88300 -* wchar.h <8>: Collation Functions.
88301 -* wchar.h: Copying and Concatenation.
88302 -* wctype.h <1>: Wide Character Case Conversion.
88303 -* wctype.h: Classification of Wide Characters.
88304 -* zoneinfo: TZ Variable.
88307 diff -u -udbrN glibc-2.3.2/manual/libc.info-7 glibc-2.3.2-200304020432/manual/libc.info-7
88308 --- glibc-2.3.2/manual/libc.info-7 Sat Mar 1 02:39:41 2003
88309 +++ glibc-2.3.2-200304020432/manual/libc.info-7 Thu Jan 1 01:00:00 1970
88310 @@ -1,1131 +0,0 @@
88311 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
88313 -INFO-DIR-SECTION GNU libraries
88314 -START-INFO-DIR-ENTRY
88315 -* Libc: (libc). C library.
88316 -END-INFO-DIR-ENTRY
88318 - This file documents the GNU C library.
88320 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
88321 -Reference Manual', for Version 2.3.x.
88323 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
88324 -Free Software Foundation, Inc.
88326 - Permission is granted to copy, distribute and/or modify this document
88327 -under the terms of the GNU Free Documentation License, Version 1.1 or
88328 -any later version published by the Free Software Foundation; with the
88329 -Invariant Sections being "Free Software Needs Free Documentation" and
88330 -"GNU Lesser General Public License", the Front-Cover texts being (a)
88331 -(see below), and with the Back-Cover Texts being (b) (see below). A
88332 -copy of the license is included in the section entitled "GNU Free
88333 -Documentation License".
88335 - (a) The FSF's Front-Cover Text is:
88337 - A GNU Manual
88339 - (b) The FSF's Back-Cover Text is:
88341 - You have freedom to copy and modify this GNU Manual, like GNU
88342 -software. Copies published by the Free Software Foundation raise
88343 -funds for GNU development.
88345 -\x1f
88346 -File: libc.info, Node: Copying and Concatenation, Next: String/Array Comparison, Prev: String Length, Up: String and Array Utilities
88348 -Copying and Concatenation
88349 -=========================
88351 - You can use the functions described in this section to copy the
88352 -contents of strings and arrays, or to append the contents of one string
88353 -to another. The `str' and `mem' functions are declared in the header
88354 -file `string.h' while the `wstr' and `wmem' functions are declared in
88355 -the file `wchar.h'.
88357 - A helpful way to remember the ordering of the arguments to the
88358 -functions in this section is that it corresponds to an assignment
88359 -expression, with the destination array specified to the left of the
88360 -source array. All of these functions return the address of the
88361 -destination array.
88363 - Most of these functions do not work properly if the source and
88364 -destination arrays overlap. For example, if the beginning of the
88365 -destination array overlaps the end of the source array, the original
88366 -contents of that part of the source array may get overwritten before it
88367 -is copied. Even worse, in the case of the string functions, the null
88368 -character marking the end of the string may be lost, and the copy
88369 -function might get stuck in a loop trashing all the memory allocated to
88370 -your program.
88372 - All functions that have problems copying between overlapping arrays
88373 -are explicitly identified in this manual. In addition to functions in
88374 -this section, there are a few others like `sprintf' (*note Formatted
88375 -Output Functions::) and `scanf' (*note Formatted Input Functions::).
88377 - - Function: void * memcpy (void *restrict TO, const void *restrict
88378 - FROM, size_t SIZE)
88379 - The `memcpy' function copies SIZE bytes from the object beginning
88380 - at FROM into the object beginning at TO. The behavior of this
88381 - function is undefined if the two arrays TO and FROM overlap; use
88382 - `memmove' instead if overlapping is possible.
88384 - The value returned by `memcpy' is the value of TO.
88386 - Here is an example of how you might use `memcpy' to copy the
88387 - contents of an array:
88389 - struct foo *oldarray, *newarray;
88390 - int arraysize;
88391 - ...
88392 - memcpy (new, old, arraysize * sizeof (struct foo));
88394 - - Function: wchar_t * wmemcpy (wchar_t *restrict WTO, const wchar_t
88395 - *restruct WFROM, size_t SIZE)
88396 - The `wmemcpy' function copies SIZE wide characters from the object
88397 - beginning at WFROM into the object beginning at WTO. The behavior
88398 - of this function is undefined if the two arrays WTO and WFROM
88399 - overlap; use `wmemmove' instead if overlapping is possible.
88401 - The following is a possible implementation of `wmemcpy' but there
88402 - are more optimizations possible.
88404 - wchar_t *
88405 - wmemcpy (wchar_t *restrict wto, const wchar_t *restrict wfrom,
88406 - size_t size)
88408 - return (wchar_t *) memcpy (wto, wfrom, size * sizeof (wchar_t));
88411 - The value returned by `wmemcpy' is the value of WTO.
88413 - This function was introduced in Amendment 1 to ISO C90.
88415 - - Function: void * mempcpy (void *restrict TO, const void *restrict
88416 - FROM, size_t SIZE)
88417 - The `mempcpy' function is nearly identical to the `memcpy'
88418 - function. It copies SIZE bytes from the object beginning at
88419 - `from' into the object pointed to by TO. But instead of returning
88420 - the value of TO it returns a pointer to the byte following the
88421 - last written byte in the object beginning at TO. I.e., the value
88422 - is `((void *) ((char *) TO + SIZE))'.
88424 - This function is useful in situations where a number of objects
88425 - shall be copied to consecutive memory positions.
88427 - void *
88428 - combine (void *o1, size_t s1, void *o2, size_t s2)
88430 - void *result = malloc (s1 + s2);
88431 - if (result != NULL)
88432 - mempcpy (mempcpy (result, o1, s1), o2, s2);
88433 - return result;
88436 - This function is a GNU extension.
88438 - - Function: wchar_t * wmempcpy (wchar_t *restrict WTO, const wchar_t
88439 - *restrict WFROM, size_t SIZE)
88440 - The `wmempcpy' function is nearly identical to the `wmemcpy'
88441 - function. It copies SIZE wide characters from the object
88442 - beginning at `wfrom' into the object pointed to by WTO. But
88443 - instead of returning the value of WTO it returns a pointer to the
88444 - wide character following the last written wide character in the
88445 - object beginning at WTO. I.e., the value is `WTO + SIZE'.
88447 - This function is useful in situations where a number of objects
88448 - shall be copied to consecutive memory positions.
88450 - The following is a possible implementation of `wmemcpy' but there
88451 - are more optimizations possible.
88453 - wchar_t *
88454 - wmempcpy (wchar_t *restrict wto, const wchar_t *restrict wfrom,
88455 - size_t size)
88457 - return (wchar_t *) mempcpy (wto, wfrom, size * sizeof (wchar_t));
88460 - This function is a GNU extension.
88462 - - Function: void * memmove (void *TO, const void *FROM, size_t SIZE)
88463 - `memmove' copies the SIZE bytes at FROM into the SIZE bytes at TO,
88464 - even if those two blocks of space overlap. In the case of
88465 - overlap, `memmove' is careful to copy the original values of the
88466 - bytes in the block at FROM, including those bytes which also
88467 - belong to the block at TO.
88469 - The value returned by `memmove' is the value of TO.
88471 - - Function: wchar_t * wmemmove (wchar *WTO, const wchar_t *WFROM,
88472 - size_t SIZE)
88473 - `wmemmove' copies the SIZE wide characters at WFROM into the SIZE
88474 - wide characters at WTO, even if those two blocks of space overlap.
88475 - In the case of overlap, `memmove' is careful to copy the original
88476 - values of the wide characters in the block at WFROM, including
88477 - those wide characters which also belong to the block at WTO.
88479 - The following is a possible implementation of `wmemcpy' but there
88480 - are more optimizations possible.
88482 - wchar_t *
88483 - wmempcpy (wchar_t *restrict wto, const wchar_t *restrict wfrom,
88484 - size_t size)
88486 - return (wchar_t *) mempcpy (wto, wfrom, size * sizeof (wchar_t));
88489 - The value returned by `wmemmove' is the value of WTO.
88491 - This function is a GNU extension.
88493 - - Function: void * memccpy (void *restrict TO, const void *restrict
88494 - FROM, int C, size_t SIZE)
88495 - This function copies no more than SIZE bytes from FROM to TO,
88496 - stopping if a byte matching C is found. The return value is a
88497 - pointer into TO one byte past where C was copied, or a null
88498 - pointer if no byte matching C appeared in the first SIZE bytes of
88499 - FROM.
88501 - - Function: void * memset (void *BLOCK, int C, size_t SIZE)
88502 - This function copies the value of C (converted to an `unsigned
88503 - char') into each of the first SIZE bytes of the object beginning
88504 - at BLOCK. It returns the value of BLOCK.
88506 - - Function: wchar_t * wmemset (wchar_t *BLOCK, wchar_t WC, size_t SIZE)
88507 - This function copies the value of WC into each of the first SIZE
88508 - wide characters of the object beginning at BLOCK. It returns the
88509 - value of BLOCK.
88511 - - Function: char * strcpy (char *restrict TO, const char *restrict
88512 - FROM)
88513 - This copies characters from the string FROM (up to and including
88514 - the terminating null character) into the string TO. Like
88515 - `memcpy', this function has undefined results if the strings
88516 - overlap. The return value is the value of TO.
88518 - - Function: wchar_t * wcscpy (wchar_t *restrict WTO, const wchar_t
88519 - *restrict WFROM)
88520 - This copies wide characters from the string WFROM (up to and
88521 - including the terminating null wide character) into the string
88522 - WTO. Like `wmemcpy', this function has undefined results if the
88523 - strings overlap. The return value is the value of WTO.
88525 - - Function: char * strncpy (char *restrict TO, const char *restrict
88526 - FROM, size_t SIZE)
88527 - This function is similar to `strcpy' but always copies exactly
88528 - SIZE characters into TO.
88530 - If the length of FROM is more than SIZE, then `strncpy' copies
88531 - just the first SIZE characters. Note that in this case there is
88532 - no null terminator written into TO.
88534 - If the length of FROM is less than SIZE, then `strncpy' copies all
88535 - of FROM, followed by enough null characters to add up to SIZE
88536 - characters in all. This behavior is rarely useful, but it is
88537 - specified by the ISO C standard.
88539 - The behavior of `strncpy' is undefined if the strings overlap.
88541 - Using `strncpy' as opposed to `strcpy' is a way to avoid bugs
88542 - relating to writing past the end of the allocated space for TO.
88543 - However, it can also make your program much slower in one common
88544 - case: copying a string which is probably small into a potentially
88545 - large buffer. In this case, SIZE may be large, and when it is,
88546 - `strncpy' will waste a considerable amount of time copying null
88547 - characters.
88549 - - Function: wchar_t * wcsncpy (wchar_t *restrict WTO, const wchar_t
88550 - *restrict WFROM, size_t SIZE)
88551 - This function is similar to `wcscpy' but always copies exactly
88552 - SIZE wide characters into WTO.
88554 - If the length of WFROM is more than SIZE, then `wcsncpy' copies
88555 - just the first SIZE wide characters. Note that in this case there
88556 - is no null terminator written into WTO.
88558 - If the length of WFROM is less than SIZE, then `wcsncpy' copies
88559 - all of WFROM, followed by enough null wide characters to add up to
88560 - SIZE wide characters in all. This behavior is rarely useful, but
88561 - it is specified by the ISO C standard.
88563 - The behavior of `wcsncpy' is undefined if the strings overlap.
88565 - Using `wcsncpy' as opposed to `wcscpy' is a way to avoid bugs
88566 - relating to writing past the end of the allocated space for WTO.
88567 - However, it can also make your program much slower in one common
88568 - case: copying a string which is probably small into a potentially
88569 - large buffer. In this case, SIZE may be large, and when it is,
88570 - `wcsncpy' will waste a considerable amount of time copying null
88571 - wide characters.
88573 - - Function: char * strdup (const char *S)
88574 - This function copies the null-terminated string S into a newly
88575 - allocated string. The string is allocated using `malloc'; see
88576 - *Note Unconstrained Allocation::. If `malloc' cannot allocate
88577 - space for the new string, `strdup' returns a null pointer.
88578 - Otherwise it returns a pointer to the new string.
88580 - - Function: wchar_t * wcsdup (const wchar_t *WS)
88581 - This function copies the null-terminated wide character string WS
88582 - into a newly allocated string. The string is allocated using
88583 - `malloc'; see *Note Unconstrained Allocation::. If `malloc'
88584 - cannot allocate space for the new string, `wcsdup' returns a null
88585 - pointer. Otherwise it returns a pointer to the new wide character
88586 - string.
88588 - This function is a GNU extension.
88590 - - Function: char * strndup (const char *S, size_t SIZE)
88591 - This function is similar to `strdup' but always copies at most
88592 - SIZE characters into the newly allocated string.
88594 - If the length of S is more than SIZE, then `strndup' copies just
88595 - the first SIZE characters and adds a closing null terminator.
88596 - Otherwise all characters are copied and the string is terminated.
88598 - This function is different to `strncpy' in that it always
88599 - terminates the destination string.
88601 - `strndup' is a GNU extension.
88603 - - Function: char * stpcpy (char *restrict TO, const char *restrict
88604 - FROM)
88605 - This function is like `strcpy', except that it returns a pointer to
88606 - the end of the string TO (that is, the address of the terminating
88607 - null character `to + strlen (from)') rather than the beginning.
88609 - For example, this program uses `stpcpy' to concatenate `foo' and
88610 - `bar' to produce `foobar', which it then prints.
88612 - #include <string.h>
88613 - #include <stdio.h>
88615 - int
88616 - main (void)
88618 - char buffer[10];
88619 - char *to = buffer;
88620 - to = stpcpy (to, "foo");
88621 - to = stpcpy (to, "bar");
88622 - puts (buffer);
88623 - return 0;
88626 - This function is not part of the ISO or POSIX standards, and is not
88627 - customary on Unix systems, but we did not invent it either.
88628 - Perhaps it comes from MS-DOG.
88630 - Its behavior is undefined if the strings overlap. The function is
88631 - declared in `string.h'.
88633 - - Function: wchar_t * wcpcpy (wchar_t *restrict WTO, const wchar_t
88634 - *restrict WFROM)
88635 - This function is like `wcscpy', except that it returns a pointer to
88636 - the end of the string WTO (that is, the address of the terminating
88637 - null character `wto + strlen (wfrom)') rather than the beginning.
88639 - This function is not part of ISO or POSIX but was found useful
88640 - while developing the GNU C Library itself.
88642 - The behavior of `wcpcpy' is undefined if the strings overlap.
88644 - `wcpcpy' is a GNU extension and is declared in `wchar.h'.
88646 - - Function: char * stpncpy (char *restrict TO, const char *restrict
88647 - FROM, size_t SIZE)
88648 - This function is similar to `stpcpy' but copies always exactly
88649 - SIZE characters into TO.
88651 - If the length of FROM is more then SIZE, then `stpncpy' copies
88652 - just the first SIZE characters and returns a pointer to the
88653 - character directly following the one which was copied last. Note
88654 - that in this case there is no null terminator written into TO.
88656 - If the length of FROM is less than SIZE, then `stpncpy' copies all
88657 - of FROM, followed by enough null characters to add up to SIZE
88658 - characters in all. This behavior is rarely useful, but it is
88659 - implemented to be useful in contexts where this behavior of the
88660 - `strncpy' is used. `stpncpy' returns a pointer to the _first_
88661 - written null character.
88663 - This function is not part of ISO or POSIX but was found useful
88664 - while developing the GNU C Library itself.
88666 - Its behavior is undefined if the strings overlap. The function is
88667 - declared in `string.h'.
88669 - - Function: wchar_t * wcpncpy (wchar_t *restrict WTO, const wchar_t
88670 - *restrict WFROM, size_t SIZE)
88671 - This function is similar to `wcpcpy' but copies always exactly
88672 - WSIZE characters into WTO.
88674 - If the length of WFROM is more then SIZE, then `wcpncpy' copies
88675 - just the first SIZE wide characters and returns a pointer to the
88676 - wide character directly following the one which was copied last.
88677 - Note that in this case there is no null terminator written into
88678 - WTO.
88680 - If the length of WFROM is less than SIZE, then `wcpncpy' copies
88681 - all of WFROM, followed by enough null characters to add up to SIZE
88682 - characters in all. This behavior is rarely useful, but it is
88683 - implemented to be useful in contexts where this behavior of the
88684 - `wcsncpy' is used. `wcpncpy' returns a pointer to the _first_
88685 - written null character.
88687 - This function is not part of ISO or POSIX but was found useful
88688 - while developing the GNU C Library itself.
88690 - Its behavior is undefined if the strings overlap.
88692 - `wcpncpy' is a GNU extension and is declared in `wchar.h'.
88694 - - Macro: char * strdupa (const char *S)
88695 - This macro is similar to `strdup' but allocates the new string
88696 - using `alloca' instead of `malloc' (*note Variable Size
88697 - Automatic::). This means of course the returned string has the
88698 - same limitations as any block of memory allocated using `alloca'.
88700 - For obvious reasons `strdupa' is implemented only as a macro; you
88701 - cannot get the address of this function. Despite this limitation
88702 - it is a useful function. The following code shows a situation
88703 - where using `malloc' would be a lot more expensive.
88705 - #include <paths.h>
88706 - #include <string.h>
88707 - #include <stdio.h>
88709 - const char path[] = _PATH_STDPATH;
88711 - int
88712 - main (void)
88714 - char *wr_path = strdupa (path);
88715 - char *cp = strtok (wr_path, ":");
88717 - while (cp != NULL)
88719 - puts (cp);
88720 - cp = strtok (NULL, ":");
88722 - return 0;
88725 - Please note that calling `strtok' using PATH directly is invalid.
88726 - It is also not allowed to call `strdupa' in the argument list of
88727 - `strtok' since `strdupa' uses `alloca' (*note Variable Size
88728 - Automatic::) can interfere with the parameter passing.
88730 - This function is only available if GNU CC is used.
88732 - - Macro: char * strndupa (const char *S, size_t SIZE)
88733 - This function is similar to `strndup' but like `strdupa' it
88734 - allocates the new string using `alloca' *note Variable Size
88735 - Automatic::. The same advantages and limitations of `strdupa' are
88736 - valid for `strndupa', too.
88738 - This function is implemented only as a macro, just like `strdupa'.
88739 - Just as `strdupa' this macro also must not be used inside the
88740 - parameter list in a function call.
88742 - `strndupa' is only available if GNU CC is used.
88744 - - Function: char * strcat (char *restrict TO, const char *restrict
88745 - FROM)
88746 - The `strcat' function is similar to `strcpy', except that the
88747 - characters from FROM are concatenated or appended to the end of
88748 - TO, instead of overwriting it. That is, the first character from
88749 - FROM overwrites the null character marking the end of TO.
88751 - An equivalent definition for `strcat' would be:
88753 - char *
88754 - strcat (char *restrict to, const char *restrict from)
88756 - strcpy (to + strlen (to), from);
88757 - return to;
88760 - This function has undefined results if the strings overlap.
88762 - - Function: wchar_t * wcscat (wchar_t *restrict WTO, const wchar_t
88763 - *restrict WFROM)
88764 - The `wcscat' function is similar to `wcscpy', except that the
88765 - characters from WFROM are concatenated or appended to the end of
88766 - WTO, instead of overwriting it. That is, the first character from
88767 - WFROM overwrites the null character marking the end of WTO.
88769 - An equivalent definition for `wcscat' would be:
88771 - wchar_t *
88772 - wcscat (wchar_t *wto, const wchar_t *wfrom)
88774 - wcscpy (wto + wcslen (wto), wfrom);
88775 - return wto;
88778 - This function has undefined results if the strings overlap.
88780 - Programmers using the `strcat' or `wcscat' function (or the
88781 -following `strncat' or `wcsncar' functions for that matter) can easily
88782 -be recognized as lazy and reckless. In almost all situations the
88783 -lengths of the participating strings are known (it better should be
88784 -since how can one otherwise ensure the allocated size of the buffer is
88785 -sufficient?) Or at least, one could know them if one keeps track of the
88786 -results of the various function calls. But then it is very inefficient
88787 -to use `strcat'/`wcscat'. A lot of time is wasted finding the end of
88788 -the destination string so that the actual copying can start. This is a
88789 -common example:
88791 - /* This function concatenates arbitrarily many strings. The last
88792 - parameter must be `NULL'. */
88793 - char *
88794 - concat (const char *str, ...)
88796 - va_list ap, ap2;
88797 - size_t total = 1;
88798 - const char *s;
88799 - char *result;
88801 - va_start (ap, str);
88802 - /* Actually `va_copy', but this is the name more gcc versions
88803 - understand. */
88804 - __va_copy (ap2, ap);
88806 - /* Determine how much space we need. */
88807 - for (s = str; s != NULL; s = va_arg (ap, const char *))
88808 - total += strlen (s);
88810 - va_end (ap);
88812 - result = (char *) malloc (total);
88813 - if (result != NULL)
88815 - result[0] = '\0';
88817 - /* Copy the strings. */
88818 - for (s = str; s != NULL; s = va_arg (ap2, const char *))
88819 - strcat (result, s);
88822 - va_end (ap2);
88824 - return result;
88827 - This looks quite simple, especially the second loop where the strings
88828 -are actually copied. But these innocent lines hide a major performance
88829 -penalty. Just imagine that ten strings of 100 bytes each have to be
88830 -concatenated. For the second string we search the already stored 100
88831 -bytes for the end of the string so that we can append the next string.
88832 -For all strings in total the comparisons necessary to find the end of
88833 -the intermediate results sums up to 5500! If we combine the copying
88834 -with the search for the allocation we can write this function more
88835 -efficient:
88837 - char *
88838 - concat (const char *str, ...)
88840 - va_list ap;
88841 - size_t allocated = 100;
88842 - char *result = (char *) malloc (allocated);
88843 - char *wp;
88845 - if (allocated != NULL)
88847 - char *newp;
88849 - va_start (ap, atr);
88851 - wp = result;
88852 - for (s = str; s != NULL; s = va_arg (ap, const char *))
88854 - size_t len = strlen (s);
88856 - /* Resize the allocated memory if necessary. */
88857 - if (wp + len + 1 > result + allocated)
88859 - allocated = (allocated + len) * 2;
88860 - newp = (char *) realloc (result, allocated);
88861 - if (newp == NULL)
88863 - free (result);
88864 - return NULL;
88866 - wp = newp + (wp - result);
88867 - result = newp;
88870 - wp = mempcpy (wp, s, len);
88873 - /* Terminate the result string. */
88874 - *wp++ = '\0';
88876 - /* Resize memory to the optimal size. */
88877 - newp = realloc (result, wp - result);
88878 - if (newp != NULL)
88879 - result = newp;
88881 - va_end (ap);
88884 - return result;
88887 - With a bit more knowledge about the input strings one could fine-tune
88888 -the memory allocation. The difference we are pointing to here is that
88889 -we don't use `strcat' anymore. We always keep track of the length of
88890 -the current intermediate result so we can safe us the search for the
88891 -end of the string and use `mempcpy'. Please note that we also don't
88892 -use `stpcpy' which might seem more natural since we handle with
88893 -strings. But this is not necessary since we already know the length of
88894 -the string and therefore can use the faster memory copying function.
88895 -The example would work for wide characters the same way.
88897 - Whenever a programmer feels the need to use `strcat' she or he
88898 -should think twice and look through the program whether the code cannot
88899 -be rewritten to take advantage of already calculated results. Again: it
88900 -is almost always unnecessary to use `strcat'.
88902 - - Function: char * strncat (char *restrict TO, const char *restrict
88903 - FROM, size_t SIZE)
88904 - This function is like `strcat' except that not more than SIZE
88905 - characters from FROM are appended to the end of TO. A single null
88906 - character is also always appended to TO, so the total allocated
88907 - size of TO must be at least `SIZE + 1' bytes longer than its
88908 - initial length.
88910 - The `strncat' function could be implemented like this:
88912 - char *
88913 - strncat (char *to, const char *from, size_t size)
88915 - to[strlen (to) + size] = '\0';
88916 - strncpy (to + strlen (to), from, size);
88917 - return to;
88920 - The behavior of `strncat' is undefined if the strings overlap.
88922 - - Function: wchar_t * wcsncat (wchar_t *restrict WTO, const wchar_t
88923 - *restrict WFROM, size_t SIZE)
88924 - This function is like `wcscat' except that not more than SIZE
88925 - characters from FROM are appended to the end of TO. A single null
88926 - character is also always appended to TO, so the total allocated
88927 - size of TO must be at least `SIZE + 1' bytes longer than its
88928 - initial length.
88930 - The `wcsncat' function could be implemented like this:
88932 - wchar_t *
88933 - wcsncat (wchar_t *restrict wto, const wchar_t *restrict wfrom,
88934 - size_t size)
88936 - wto[wcslen (to) + size] = L'\0';
88937 - wcsncpy (wto + wcslen (wto), wfrom, size);
88938 - return wto;
88941 - The behavior of `wcsncat' is undefined if the strings overlap.
88943 - Here is an example showing the use of `strncpy' and `strncat' (the
88944 -wide character version is equivalent). Notice how, in the call to
88945 -`strncat', the SIZE parameter is computed to avoid overflowing the
88946 -character array `buffer'.
88948 - #include <string.h>
88949 - #include <stdio.h>
88951 - #define SIZE 10
88953 - static char buffer[SIZE];
88955 - main ()
88957 - strncpy (buffer, "hello", SIZE);
88958 - puts (buffer);
88959 - strncat (buffer, ", world", SIZE - strlen (buffer) - 1);
88960 - puts (buffer);
88963 -The output produced by this program looks like:
88965 - hello
88966 - hello, wo
88968 - - Function: void bcopy (const void *FROM, void *TO, size_t SIZE)
88969 - This is a partially obsolete alternative for `memmove', derived
88970 - from BSD. Note that it is not quite equivalent to `memmove',
88971 - because the arguments are not in the same order and there is no
88972 - return value.
88974 - - Function: void bzero (void *BLOCK, size_t SIZE)
88975 - This is a partially obsolete alternative for `memset', derived from
88976 - BSD. Note that it is not as general as `memset', because the only
88977 - value it can store is zero.
88979 -\x1f
88980 -File: libc.info, Node: String/Array Comparison, Next: Collation Functions, Prev: Copying and Concatenation, Up: String and Array Utilities
88982 -String/Array Comparison
88983 -=======================
88985 - You can use the functions in this section to perform comparisons on
88986 -the contents of strings and arrays. As well as checking for equality,
88987 -these functions can also be used as the ordering functions for sorting
88988 -operations. *Note Searching and Sorting::, for an example of this.
88990 - Unlike most comparison operations in C, the string comparison
88991 -functions return a nonzero value if the strings are _not_ equivalent
88992 -rather than if they are. The sign of the value indicates the relative
88993 -ordering of the first characters in the strings that are not
88994 -equivalent: a negative value indicates that the first string is "less"
88995 -than the second, while a positive value indicates that the first string
88996 -is "greater".
88998 - The most common use of these functions is to check only for equality.
88999 -This is canonically done with an expression like `! strcmp (s1, s2)'.
89001 - All of these functions are declared in the header file `string.h'.
89003 - - Function: int memcmp (const void *A1, const void *A2, size_t SIZE)
89004 - The function `memcmp' compares the SIZE bytes of memory beginning
89005 - at A1 against the SIZE bytes of memory beginning at A2. The value
89006 - returned has the same sign as the difference between the first
89007 - differing pair of bytes (interpreted as `unsigned char' objects,
89008 - then promoted to `int').
89010 - If the contents of the two blocks are equal, `memcmp' returns `0'.
89012 - - Function: int wmemcmp (const wchar_t *A1, const wchar_t *A2, size_t
89013 - SIZE)
89014 - The function `wmemcmp' compares the SIZE wide characters beginning
89015 - at A1 against the SIZE wide characters beginning at A2. The value
89016 - returned is smaller than or larger than zero depending on whether
89017 - the first differing wide character is A1 is smaller or larger than
89018 - the corresponding character in A2.
89020 - If the contents of the two blocks are equal, `wmemcmp' returns `0'.
89022 - On arbitrary arrays, the `memcmp' function is mostly useful for
89023 -testing equality. It usually isn't meaningful to do byte-wise ordering
89024 -comparisons on arrays of things other than bytes. For example, a
89025 -byte-wise comparison on the bytes that make up floating-point numbers
89026 -isn't likely to tell you anything about the relationship between the
89027 -values of the floating-point numbers.
89029 - `wmemcmp' is really only useful to compare arrays of type `wchar_t'
89030 -since the function looks at `sizeof (wchar_t)' bytes at a time and this
89031 -number of bytes is system dependent.
89033 - You should also be careful about using `memcmp' to compare objects
89034 -that can contain "holes", such as the padding inserted into structure
89035 -objects to enforce alignment requirements, extra space at the end of
89036 -unions, and extra characters at the ends of strings whose length is less
89037 -than their allocated size. The contents of these "holes" are
89038 -indeterminate and may cause strange behavior when performing byte-wise
89039 -comparisons. For more predictable results, perform an explicit
89040 -component-wise comparison.
89042 - For example, given a structure type definition like:
89044 - struct foo
89046 - unsigned char tag;
89047 - union
89049 - double f;
89050 - long i;
89051 - char *p;
89052 - } value;
89053 - };
89055 -you are better off writing a specialized comparison function to compare
89056 -`struct foo' objects instead of comparing them with `memcmp'.
89058 - - Function: int strcmp (const char *S1, const char *S2)
89059 - The `strcmp' function compares the string S1 against S2, returning
89060 - a value that has the same sign as the difference between the first
89061 - differing pair of characters (interpreted as `unsigned char'
89062 - objects, then promoted to `int').
89064 - If the two strings are equal, `strcmp' returns `0'.
89066 - A consequence of the ordering used by `strcmp' is that if S1 is an
89067 - initial substring of S2, then S1 is considered to be "less than"
89068 - S2.
89070 - `strcmp' does not take sorting conventions of the language the
89071 - strings are written in into account. To get that one has to use
89072 - `strcoll'.
89074 - - Function: int wcscmp (const wchar_t *WS1, const wchar_t *WS2)
89075 - The `wcscmp' function compares the wide character string WS1
89076 - against WS2. The value returned is smaller than or larger than
89077 - zero depending on whether the first differing wide character is
89078 - WS1 is smaller or larger than the corresponding character in WS2.
89080 - If the two strings are equal, `wcscmp' returns `0'.
89082 - A consequence of the ordering used by `wcscmp' is that if WS1 is
89083 - an initial substring of WS2, then WS1 is considered to be "less
89084 - than" WS2.
89086 - `wcscmp' does not take sorting conventions of the language the
89087 - strings are written in into account. To get that one has to use
89088 - `wcscoll'.
89090 - - Function: int strcasecmp (const char *S1, const char *S2)
89091 - This function is like `strcmp', except that differences in case are
89092 - ignored. How uppercase and lowercase characters are related is
89093 - determined by the currently selected locale. In the standard `"C"'
89094 - locale the characters A" and a" do not match but in a locale which
89095 - regards these characters as parts of the alphabet they do match.
89097 - `strcasecmp' is derived from BSD.
89099 - - Function: int wcscasecmp (const wchar_t *WS1, const wchar_T *WS2)
89100 - This function is like `wcscmp', except that differences in case are
89101 - ignored. How uppercase and lowercase characters are related is
89102 - determined by the currently selected locale. In the standard `"C"'
89103 - locale the characters A" and a" do not match but in a locale which
89104 - regards these characters as parts of the alphabet they do match.
89106 - `wcscasecmp' is a GNU extension.
89108 - - Function: int strncmp (const char *S1, const char *S2, size_t SIZE)
89109 - This function is the similar to `strcmp', except that no more than
89110 - SIZE wide characters are compared. In other words, if the two
89111 - strings are the same in their first SIZE wide characters, the
89112 - return value is zero.
89114 - - Function: int wcsncmp (const wchar_t *WS1, const wchar_t *WS2,
89115 - size_t SIZE)
89116 - This function is the similar to `wcscmp', except that no more than
89117 - SIZE wide characters are compared. In other words, if the two
89118 - strings are the same in their first SIZE wide characters, the
89119 - return value is zero.
89121 - - Function: int strncasecmp (const char *S1, const char *S2, size_t N)
89122 - This function is like `strncmp', except that differences in case
89123 - are ignored. Like `strcasecmp', it is locale dependent how
89124 - uppercase and lowercase characters are related.
89126 - `strncasecmp' is a GNU extension.
89128 - - Function: int wcsncasecmp (const wchar_t *WS1, const wchar_t *S2,
89129 - size_t N)
89130 - This function is like `wcsncmp', except that differences in case
89131 - are ignored. Like `wcscasecmp', it is locale dependent how
89132 - uppercase and lowercase characters are related.
89134 - `wcsncasecmp' is a GNU extension.
89136 - Here are some examples showing the use of `strcmp' and `strncmp'
89137 -(equivalent examples can be constructed for the wide character
89138 -functions). These examples assume the use of the ASCII character set.
89139 -(If some other character set--say, EBCDIC--is used instead, then the
89140 -glyphs are associated with different numeric codes, and the return
89141 -values and ordering may differ.)
89143 - strcmp ("hello", "hello")
89144 - => 0 /* These two strings are the same. */
89145 - strcmp ("hello", "Hello")
89146 - => 32 /* Comparisons are case-sensitive. */
89147 - strcmp ("hello", "world")
89148 - => -15 /* The character `'h'' comes before `'w''. */
89149 - strcmp ("hello", "hello, world")
89150 - => -44 /* Comparing a null character against a comma. */
89151 - strncmp ("hello", "hello, world", 5)
89152 - => 0 /* The initial 5 characters are the same. */
89153 - strncmp ("hello, world", "hello, stupid world!!!", 5)
89154 - => 0 /* The initial 5 characters are the same. */
89156 - - Function: int strverscmp (const char *S1, const char *S2)
89157 - The `strverscmp' function compares the string S1 against S2,
89158 - considering them as holding indices/version numbers. Return value
89159 - follows the same conventions as found in the `strverscmp'
89160 - function. In fact, if S1 and S2 contain no digits, `strverscmp'
89161 - behaves like `strcmp'.
89163 - Basically, we compare strings normally (character by character),
89164 - until we find a digit in each string - then we enter a special
89165 - comparison mode, where each sequence of digits is taken as a
89166 - whole. If we reach the end of these two parts without noticing a
89167 - difference, we return to the standard comparison mode. There are
89168 - two types of numeric parts: "integral" and "fractional" (those
89169 - begin with a '0'). The types of the numeric parts affect the way
89170 - we sort them:
89172 - * integral/integral: we compare values as you would expect.
89174 - * fractional/integral: the fractional part is less than the
89175 - integral one. Again, no surprise.
89177 - * fractional/fractional: the things become a bit more complex.
89178 - If the common prefix contains only leading zeroes, the
89179 - longest part is less than the other one; else the comparison
89180 - behaves normally.
89182 - strverscmp ("no digit", "no digit")
89183 - => 0 /* same behavior as strcmp. */
89184 - strverscmp ("item#99", "item#100")
89185 - => <0 /* same prefix, but 99 < 100. */
89186 - strverscmp ("alpha1", "alpha001")
89187 - => >0 /* fractional part inferior to integral one. */
89188 - strverscmp ("part1_f012", "part1_f01")
89189 - => >0 /* two fractional parts. */
89190 - strverscmp ("foo.009", "foo.0")
89191 - => <0 /* idem, but with leading zeroes only. */
89193 - This function is especially useful when dealing with filename
89194 - sorting, because filenames frequently hold indices/version numbers.
89196 - `strverscmp' is a GNU extension.
89198 - - Function: int bcmp (const void *A1, const void *A2, size_t SIZE)
89199 - This is an obsolete alias for `memcmp', derived from BSD.
89201 -\x1f
89202 -File: libc.info, Node: Collation Functions, Next: Search Functions, Prev: String/Array Comparison, Up: String and Array Utilities
89204 -Collation Functions
89205 -===================
89207 - In some locales, the conventions for lexicographic ordering differ
89208 -from the strict numeric ordering of character codes. For example, in
89209 -Spanish most glyphs with diacritical marks such as accents are not
89210 -considered distinct letters for the purposes of collation. On the
89211 -other hand, the two-character sequence `ll' is treated as a single
89212 -letter that is collated immediately after `l'.
89214 - You can use the functions `strcoll' and `strxfrm' (declared in the
89215 -headers file `string.h') and `wcscoll' and `wcsxfrm' (declared in the
89216 -headers file `wchar') to compare strings using a collation ordering
89217 -appropriate for the current locale. The locale used by these functions
89218 -in particular can be specified by setting the locale for the
89219 -`LC_COLLATE' category; see *Note Locales::.
89221 - In the standard C locale, the collation sequence for `strcoll' is
89222 -the same as that for `strcmp'. Similarly, `wcscoll' and `wcscmp' are
89223 -the same in this situation.
89225 - Effectively, the way these functions work is by applying a mapping to
89226 -transform the characters in a string to a byte sequence that represents
89227 -the string's position in the collating sequence of the current locale.
89228 -Comparing two such byte sequences in a simple fashion is equivalent to
89229 -comparing the strings with the locale's collating sequence.
89231 - The functions `strcoll' and `wcscoll' perform this translation
89232 -implicitly, in order to do one comparison. By contrast, `strxfrm' and
89233 -`wcsxfrm' perform the mapping explicitly. If you are making multiple
89234 -comparisons using the same string or set of strings, it is likely to be
89235 -more efficient to use `strxfrm' or `wcsxfrm' to transform all the
89236 -strings just once, and subsequently compare the transformed strings
89237 -with `strcmp' or `wcscmp'.
89239 - - Function: int strcoll (const char *S1, const char *S2)
89240 - The `strcoll' function is similar to `strcmp' but uses the
89241 - collating sequence of the current locale for collation (the
89242 - `LC_COLLATE' locale).
89244 - - Function: int wcscoll (const wchar_t *WS1, const wchar_t *WS2)
89245 - The `wcscoll' function is similar to `wcscmp' but uses the
89246 - collating sequence of the current locale for collation (the
89247 - `LC_COLLATE' locale).
89249 - Here is an example of sorting an array of strings, using `strcoll'
89250 -to compare them. The actual sort algorithm is not written here; it
89251 -comes from `qsort' (*note Array Sort Function::). The job of the code
89252 -shown here is to say how to compare the strings while sorting them.
89253 -(Later on in this section, we will show a way to do this more
89254 -efficiently using `strxfrm'.)
89256 - /* This is the comparison function used with `qsort'. */
89258 - int
89259 - compare_elements (char **p1, char **p2)
89261 - return strcoll (*p1, *p2);
89264 - /* This is the entry point--the function to sort
89265 - strings using the locale's collating sequence. */
89267 - void
89268 - sort_strings (char **array, int nstrings)
89270 - /* Sort `temp_array' by comparing the strings. */
89271 - qsort (array, nstrings,
89272 - sizeof (char *), compare_elements);
89275 - - Function: size_t strxfrm (char *restrict TO, const char *restrict
89276 - FROM, size_t SIZE)
89277 - The function `strxfrm' transforms the string FROM using the
89278 - collation transformation determined by the locale currently
89279 - selected for collation, and stores the transformed string in the
89280 - array TO. Up to SIZE characters (including a terminating null
89281 - character) are stored.
89283 - The behavior is undefined if the strings TO and FROM overlap; see
89284 - *Note Copying and Concatenation::.
89286 - The return value is the length of the entire transformed string.
89287 - This value is not affected by the value of SIZE, but if it is
89288 - greater or equal than SIZE, it means that the transformed string
89289 - did not entirely fit in the array TO. In this case, only as much
89290 - of the string as actually fits was stored. To get the whole
89291 - transformed string, call `strxfrm' again with a bigger output
89292 - array.
89294 - The transformed string may be longer than the original string, and
89295 - it may also be shorter.
89297 - If SIZE is zero, no characters are stored in TO. In this case,
89298 - `strxfrm' simply returns the number of characters that would be
89299 - the length of the transformed string. This is useful for
89300 - determining what size the allocated array should be. It does not
89301 - matter what TO is if SIZE is zero; TO may even be a null pointer.
89303 - - Function: size_t wcsxfrm (wchar_t *restrict WTO, const wchar_t
89304 - *WFROM, size_t SIZE)
89305 - The function `wcsxfrm' transforms wide character string WFROM
89306 - using the collation transformation determined by the locale
89307 - currently selected for collation, and stores the transformed
89308 - string in the array WTO. Up to SIZE wide characters (including a
89309 - terminating null character) are stored.
89311 - The behavior is undefined if the strings WTO and WFROM overlap;
89312 - see *Note Copying and Concatenation::.
89314 - The return value is the length of the entire transformed wide
89315 - character string. This value is not affected by the value of
89316 - SIZE, but if it is greater or equal than SIZE, it means that the
89317 - transformed wide character string did not entirely fit in the
89318 - array WTO. In this case, only as much of the wide character
89319 - string as actually fits was stored. To get the whole transformed
89320 - wide character string, call `wcsxfrm' again with a bigger output
89321 - array.
89323 - The transformed wide character string may be longer than the
89324 - original wide character string, and it may also be shorter.
89326 - If SIZE is zero, no characters are stored in TO. In this case,
89327 - `wcsxfrm' simply returns the number of wide characters that would
89328 - be the length of the transformed wide character string. This is
89329 - useful for determining what size the allocated array should be
89330 - (remember to multiply with `sizeof (wchar_t)'). It does not
89331 - matter what WTO is if SIZE is zero; WTO may even be a null pointer.
89333 - Here is an example of how you can use `strxfrm' when you plan to do
89334 -many comparisons. It does the same thing as the previous example, but
89335 -much faster, because it has to transform each string only once, no
89336 -matter how many times it is compared with other strings. Even the time
89337 -needed to allocate and free storage is much less than the time we save,
89338 -when there are many strings.
89340 - struct sorter { char *input; char *transformed; };
89342 - /* This is the comparison function used with `qsort'
89343 - to sort an array of `struct sorter'. */
89345 - int
89346 - compare_elements (struct sorter *p1, struct sorter *p2)
89348 - return strcmp (p1->transformed, p2->transformed);
89351 - /* This is the entry point--the function to sort
89352 - strings using the locale's collating sequence. */
89354 - void
89355 - sort_strings_fast (char **array, int nstrings)
89357 - struct sorter temp_array[nstrings];
89358 - int i;
89360 - /* Set up `temp_array'. Each element contains
89361 - one input string and its transformed string. */
89362 - for (i = 0; i < nstrings; i++)
89364 - size_t length = strlen (array[i]) * 2;
89365 - char *transformed;
89366 - size_t transformed_length;
89368 - temp_array[i].input = array[i];
89370 - /* First try a buffer perhaps big enough. */
89371 - transformed = (char *) xmalloc (length);
89373 - /* Transform `array[i]'. */
89374 - transformed_length = strxfrm (transformed, array[i], length);
89376 - /* If the buffer was not large enough, resize it
89377 - and try again. */
89378 - if (transformed_length >= length)
89380 - /* Allocate the needed space. +1 for terminating
89381 - `NUL' character. */
89382 - transformed = (char *) xrealloc (transformed,
89383 - transformed_length + 1);
89385 - /* The return value is not interesting because we know
89386 - how long the transformed string is. */
89387 - (void) strxfrm (transformed, array[i],
89388 - transformed_length + 1);
89391 - temp_array[i].transformed = transformed;
89394 - /* Sort `temp_array' by comparing transformed strings. */
89395 - qsort (temp_array, sizeof (struct sorter),
89396 - nstrings, compare_elements);
89398 - /* Put the elements back in the permanent array
89399 - in their sorted order. */
89400 - for (i = 0; i < nstrings; i++)
89401 - array[i] = temp_array[i].input;
89403 - /* Free the strings we allocated. */
89404 - for (i = 0; i < nstrings; i++)
89405 - free (temp_array[i].transformed);
89408 - The interesting part of this code for the wide character version
89409 -would look like this:
89411 - void
89412 - sort_strings_fast (wchar_t **array, int nstrings)
89414 - ...
89415 - /* Transform `array[i]'. */
89416 - transformed_length = wcsxfrm (transformed, array[i], length);
89418 - /* If the buffer was not large enough, resize it
89419 - and try again. */
89420 - if (transformed_length >= length)
89422 - /* Allocate the needed space. +1 for terminating
89423 - `NUL' character. */
89424 - transformed = (wchar_t *) xrealloc (transformed,
89425 - (transformed_length + 1)
89426 - * sizeof (wchar_t));
89428 - /* The return value is not interesting because we know
89429 - how long the transformed string is. */
89430 - (void) wcsxfrm (transformed, array[i],
89431 - transformed_length + 1);
89433 - ...
89435 -Note the additional multiplication with `sizeof (wchar_t)' in the
89436 -`realloc' call.
89438 - *Compatibility Note:* The string collation functions are a new
89439 -feature of ISO C90. Older C dialects have no equivalent feature. The
89440 -wide character versions were introduced in Amendment 1 to ISO C90.
89442 diff -u -udbrN glibc-2.3.2/manual/libc.info-8 glibc-2.3.2-200304020432/manual/libc.info-8
89443 --- glibc-2.3.2/manual/libc.info-8 Sat Mar 1 02:39:41 2003
89444 +++ glibc-2.3.2-200304020432/manual/libc.info-8 Thu Jan 1 01:00:00 1970
89445 @@ -1,997 +0,0 @@
89446 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
89448 -INFO-DIR-SECTION GNU libraries
89449 -START-INFO-DIR-ENTRY
89450 -* Libc: (libc). C library.
89451 -END-INFO-DIR-ENTRY
89453 - This file documents the GNU C library.
89455 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
89456 -Reference Manual', for Version 2.3.x.
89458 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
89459 -Free Software Foundation, Inc.
89461 - Permission is granted to copy, distribute and/or modify this document
89462 -under the terms of the GNU Free Documentation License, Version 1.1 or
89463 -any later version published by the Free Software Foundation; with the
89464 -Invariant Sections being "Free Software Needs Free Documentation" and
89465 -"GNU Lesser General Public License", the Front-Cover texts being (a)
89466 -(see below), and with the Back-Cover Texts being (b) (see below). A
89467 -copy of the license is included in the section entitled "GNU Free
89468 -Documentation License".
89470 - (a) The FSF's Front-Cover Text is:
89472 - A GNU Manual
89474 - (b) The FSF's Back-Cover Text is:
89476 - You have freedom to copy and modify this GNU Manual, like GNU
89477 -software. Copies published by the Free Software Foundation raise
89478 -funds for GNU development.
89480 -\x1f
89481 -File: libc.info, Node: Search Functions, Next: Finding Tokens in a String, Prev: Collation Functions, Up: String and Array Utilities
89483 -Search Functions
89484 -================
89486 - This section describes library functions which perform various kinds
89487 -of searching operations on strings and arrays. These functions are
89488 -declared in the header file `string.h'.
89490 - - Function: void * memchr (const void *BLOCK, int C, size_t SIZE)
89491 - This function finds the first occurrence of the byte C (converted
89492 - to an `unsigned char') in the initial SIZE bytes of the object
89493 - beginning at BLOCK. The return value is a pointer to the located
89494 - byte, or a null pointer if no match was found.
89496 - - Function: wchar_t * wmemchr (const wchar_t *BLOCK, wchar_t WC,
89497 - size_t SIZE)
89498 - This function finds the first occurrence of the wide character WC
89499 - in the initial SIZE wide characters of the object beginning at
89500 - BLOCK. The return value is a pointer to the located wide
89501 - character, or a null pointer if no match was found.
89503 - - Function: void * rawmemchr (const void *BLOCK, int C)
89504 - Often the `memchr' function is used with the knowledge that the
89505 - byte C is available in the memory block specified by the
89506 - parameters. But this means that the SIZE parameter is not really
89507 - needed and that the tests performed with it at runtime (to check
89508 - whether the end of the block is reached) are not needed.
89510 - The `rawmemchr' function exists for just this situation which is
89511 - surprisingly frequent. The interface is similar to `memchr' except
89512 - that the SIZE parameter is missing. The function will look beyond
89513 - the end of the block pointed to by BLOCK in case the programmer
89514 - made an error in assuming that the byte C is present in the block.
89515 - In this case the result is unspecified. Otherwise the return
89516 - value is a pointer to the located byte.
89518 - This function is of special interest when looking for the end of a
89519 - string. Since all strings are terminated by a null byte a call
89520 - like
89522 - rawmemchr (str, '\0')
89524 - will never go beyond the end of the string.
89526 - This function is a GNU extension.
89528 - - Function: void * memrchr (const void *BLOCK, int C, size_t SIZE)
89529 - The function `memrchr' is like `memchr', except that it searches
89530 - backwards from the end of the block defined by BLOCK and SIZE
89531 - (instead of forwards from the front).
89533 - - Function: char * strchr (const char *STRING, int C)
89534 - The `strchr' function finds the first occurrence of the character
89535 - C (converted to a `char') in the null-terminated string beginning
89536 - at STRING. The return value is a pointer to the located
89537 - character, or a null pointer if no match was found.
89539 - For example,
89540 - strchr ("hello, world", 'l')
89541 - => "llo, world"
89542 - strchr ("hello, world", '?')
89543 - => NULL
89545 - The terminating null character is considered to be part of the
89546 - string, so you can use this function get a pointer to the end of a
89547 - string by specifying a null character as the value of the C
89548 - argument. It would be better (but less portable) to use
89549 - `strchrnul' in this case, though.
89551 - - Function: wchar_t * wcschr (const wchar_t *WSTRING, int WC)
89552 - The `wcschr' function finds the first occurrence of the wide
89553 - character WC in the null-terminated wide character string
89554 - beginning at WSTRING. The return value is a pointer to the
89555 - located wide character, or a null pointer if no match was found.
89557 - The terminating null character is considered to be part of the wide
89558 - character string, so you can use this function get a pointer to
89559 - the end of a wide character string by specifying a null wude
89560 - character as the value of the WC argument. It would be better
89561 - (but less portable) to use `wcschrnul' in this case, though.
89563 - - Function: char * strchrnul (const char *STRING, int C)
89564 - `strchrnul' is the same as `strchr' except that if it does not
89565 - find the character, it returns a pointer to string's terminating
89566 - null character rather than a null pointer.
89568 - This function is a GNU extension.
89570 - - Function: wchar_t * wcschrnul (const wchar_t *WSTRING, wchar_t WC)
89571 - `wcschrnul' is the same as `wcschr' except that if it does not
89572 - find the wide character, it returns a pointer to wide character
89573 - string's terminating null wide character rather than a null
89574 - pointer.
89576 - This function is a GNU extension.
89578 - One useful, but unusual, use of the `strchr' function is when one
89579 -wants to have a pointer pointing to the NUL byte terminating a string.
89580 -This is often written in this way:
89582 - s += strlen (s);
89584 -This is almost optimal but the addition operation duplicated a bit of
89585 -the work already done in the `strlen' function. A better solution is
89586 -this:
89588 - s = strchr (s, '\0');
89590 - There is no restriction on the second parameter of `strchr' so it
89591 -could very well also be the NUL character. Those readers thinking very
89592 -hard about this might now point out that the `strchr' function is more
89593 -expensive than the `strlen' function since we have two abort criteria.
89594 -This is right. But in the GNU C library the implementation of `strchr'
89595 -is optimized in a special way so that `strchr' actually is faster.
89597 - - Function: char * strrchr (const char *STRING, int C)
89598 - The function `strrchr' is like `strchr', except that it searches
89599 - backwards from the end of the string STRING (instead of forwards
89600 - from the front).
89602 - For example,
89603 - strrchr ("hello, world", 'l')
89604 - => "ld"
89606 - - Function: wchar_t * wcsrchr (const wchar_t *WSTRING, wchar_t C)
89607 - The function `wcsrchr' is like `wcschr', except that it searches
89608 - backwards from the end of the string WSTRING (instead of forwards
89609 - from the front).
89611 - - Function: char * strstr (const char *HAYSTACK, const char *NEEDLE)
89612 - This is like `strchr', except that it searches HAYSTACK for a
89613 - substring NEEDLE rather than just a single character. It returns
89614 - a pointer into the string HAYSTACK that is the first character of
89615 - the substring, or a null pointer if no match was found. If NEEDLE
89616 - is an empty string, the function returns HAYSTACK.
89618 - For example,
89619 - strstr ("hello, world", "l")
89620 - => "llo, world"
89621 - strstr ("hello, world", "wo")
89622 - => "world"
89624 - - Function: wchar_t * wcsstr (const wchar_t *HAYSTACK, const wchar_t
89625 - *NEEDLE)
89626 - This is like `wcschr', except that it searches HAYSTACK for a
89627 - substring NEEDLE rather than just a single wide character. It
89628 - returns a pointer into the string HAYSTACK that is the first wide
89629 - character of the substring, or a null pointer if no match was
89630 - found. If NEEDLE is an empty string, the function returns
89631 - HAYSTACK.
89633 - - Function: wchar_t * wcswcs (const wchar_t *HAYSTACK, const wchar_t
89634 - *NEEDLE)
89635 - `wcsstr' is an depricated alias for `wcsstr'. This is the name
89636 - originally used in the X/Open Portability Guide before the
89637 - Amendment 1 to ISO C90 was published.
89639 - - Function: char * strcasestr (const char *HAYSTACK, const char
89640 - *NEEDLE)
89641 - This is like `strstr', except that it ignores case in searching for
89642 - the substring. Like `strcasecmp', it is locale dependent how
89643 - uppercase and lowercase characters are related.
89645 - For example,
89646 - strstr ("hello, world", "L")
89647 - => "llo, world"
89648 - strstr ("hello, World", "wo")
89649 - => "World"
89651 - - Function: void * memmem (const void *HAYSTACK, size_t HAYSTACK-LEN,
89652 - const void *NEEDLE, size_t NEEDLE-LEN)
89653 - This is like `strstr', but NEEDLE and HAYSTACK are byte arrays
89654 - rather than null-terminated strings. NEEDLE-LEN is the length of
89655 - NEEDLE and HAYSTACK-LEN is the length of HAYSTACK.
89657 - This function is a GNU extension.
89659 - - Function: size_t strspn (const char *STRING, const char *SKIPSET)
89660 - The `strspn' ("string span") function returns the length of the
89661 - initial substring of STRING that consists entirely of characters
89662 - that are members of the set specified by the string SKIPSET. The
89663 - order of the characters in SKIPSET is not important.
89665 - For example,
89666 - strspn ("hello, world", "abcdefghijklmnopqrstuvwxyz")
89667 - => 5
89669 - Note that "character" is here used in the sense of byte. In a
89670 - string using a multibyte character encoding (abstract) character
89671 - consisting of more than one byte are not treated as an entity.
89672 - Each byte is treated separately. The function is not
89673 - locale-dependent.
89675 - - Function: size_t wcsspn (const wchar_t *WSTRING, const wchar_t
89676 - *SKIPSET)
89677 - The `wcsspn' ("wide character string span") function returns the
89678 - length of the initial substring of WSTRING that consists entirely
89679 - of wide characters that are members of the set specified by the
89680 - string SKIPSET. The order of the wide characters in SKIPSET is not
89681 - important.
89683 - - Function: size_t strcspn (const char *STRING, const char *STOPSET)
89684 - The `strcspn' ("string complement span") function returns the
89685 - length of the initial substring of STRING that consists entirely
89686 - of characters that are _not_ members of the set specified by the
89687 - string STOPSET. (In other words, it returns the offset of the
89688 - first character in STRING that is a member of the set STOPSET.)
89690 - For example,
89691 - strcspn ("hello, world", " \t\n,.;!?")
89692 - => 5
89694 - Note that "character" is here used in the sense of byte. In a
89695 - string using a multibyte character encoding (abstract) character
89696 - consisting of more than one byte are not treated as an entity.
89697 - Each byte is treated separately. The function is not
89698 - locale-dependent.
89700 - - Function: size_t wcscspn (const wchar_t *WSTRING, const wchar_t
89701 - *STOPSET)
89702 - The `wcscspn' ("wide character string complement span") function
89703 - returns the length of the initial substring of WSTRING that
89704 - consists entirely of wide characters that are _not_ members of the
89705 - set specified by the string STOPSET. (In other words, it returns
89706 - the offset of the first character in STRING that is a member of
89707 - the set STOPSET.)
89709 - - Function: char * strpbrk (const char *STRING, const char *STOPSET)
89710 - The `strpbrk' ("string pointer break") function is related to
89711 - `strcspn', except that it returns a pointer to the first character
89712 - in STRING that is a member of the set STOPSET instead of the
89713 - length of the initial substring. It returns a null pointer if no
89714 - such character from STOPSET is found.
89716 - For example,
89718 - strpbrk ("hello, world", " \t\n,.;!?")
89719 - => ", world"
89721 - Note that "character" is here used in the sense of byte. In a
89722 - string using a multibyte character encoding (abstract) character
89723 - consisting of more than one byte are not treated as an entity.
89724 - Each byte is treated separately. The function is not
89725 - locale-dependent.
89727 - - Function: wchar_t * wcspbrk (const wchar_t *WSTRING, const wchar_t
89728 - *STOPSET)
89729 - The `wcspbrk' ("wide character string pointer break") function is
89730 - related to `wcscspn', except that it returns a pointer to the first
89731 - wide character in WSTRING that is a member of the set STOPSET
89732 - instead of the length of the initial substring. It returns a null
89733 - pointer if no such character from STOPSET is found.
89735 -Compatibility String Search Functions
89736 --------------------------------------
89738 - - Function: char * index (const char *STRING, int C)
89739 - `index' is another name for `strchr'; they are exactly the same.
89740 - New code should always use `strchr' since this name is defined in
89741 - ISO C while `index' is a BSD invention which never was available
89742 - on System V derived systems.
89744 - - Function: char * rindex (const char *STRING, int C)
89745 - `rindex' is another name for `strrchr'; they are exactly the same.
89746 - New code should always use `strrchr' since this name is defined in
89747 - ISO C while `rindex' is a BSD invention which never was available
89748 - on System V derived systems.
89750 -\x1f
89751 -File: libc.info, Node: Finding Tokens in a String, Next: strfry, Prev: Search Functions, Up: String and Array Utilities
89753 -Finding Tokens in a String
89754 -==========================
89756 - It's fairly common for programs to have a need to do some simple
89757 -kinds of lexical analysis and parsing, such as splitting a command
89758 -string up into tokens. You can do this with the `strtok' function,
89759 -declared in the header file `string.h'.
89761 - - Function: char * strtok (char *restrict NEWSTRING, const char
89762 - *restrict DELIMITERS)
89763 - A string can be split into tokens by making a series of calls to
89764 - the function `strtok'.
89766 - The string to be split up is passed as the NEWSTRING argument on
89767 - the first call only. The `strtok' function uses this to set up
89768 - some internal state information. Subsequent calls to get
89769 - additional tokens from the same string are indicated by passing a
89770 - null pointer as the NEWSTRING argument. Calling `strtok' with
89771 - another non-null NEWSTRING argument reinitializes the state
89772 - information. It is guaranteed that no other library function ever
89773 - calls `strtok' behind your back (which would mess up this internal
89774 - state information).
89776 - The DELIMITERS argument is a string that specifies a set of
89777 - delimiters that may surround the token being extracted. All the
89778 - initial characters that are members of this set are discarded.
89779 - The first character that is _not_ a member of this set of
89780 - delimiters marks the beginning of the next token. The end of the
89781 - token is found by looking for the next character that is a member
89782 - of the delimiter set. This character in the original string
89783 - NEWSTRING is overwritten by a null character, and the pointer to
89784 - the beginning of the token in NEWSTRING is returned.
89786 - On the next call to `strtok', the searching begins at the next
89787 - character beyond the one that marked the end of the previous token.
89788 - Note that the set of delimiters DELIMITERS do not have to be the
89789 - same on every call in a series of calls to `strtok'.
89791 - If the end of the string NEWSTRING is reached, or if the remainder
89792 - of string consists only of delimiter characters, `strtok' returns
89793 - a null pointer.
89795 - Note that "character" is here used in the sense of byte. In a
89796 - string using a multibyte character encoding (abstract) character
89797 - consisting of more than one byte are not treated as an entity.
89798 - Each byte is treated separately. The function is not
89799 - locale-dependent.
89801 - Note that "character" is here used in the sense of byte. In a
89802 - string using a multibyte character encoding (abstract) character
89803 - consisting of more than one byte are not treated as an entity.
89804 - Each byte is treated separately. The function is not
89805 - locale-dependent.
89807 - - Function: wchar_t * wcstok (wchar_t *NEWSTRING, const char
89808 - *DELIMITERS)
89809 - A string can be split into tokens by making a series of calls to
89810 - the function `wcstok'.
89812 - The string to be split up is passed as the NEWSTRING argument on
89813 - the first call only. The `wcstok' function uses this to set up
89814 - some internal state information. Subsequent calls to get
89815 - additional tokens from the same wide character string are
89816 - indicated by passing a null pointer as the NEWSTRING argument.
89817 - Calling `wcstok' with another non-null NEWSTRING argument
89818 - reinitializes the state information. It is guaranteed that no
89819 - other library function ever calls `wcstok' behind your back (which
89820 - would mess up this internal state information).
89822 - The DELIMITERS argument is a wide character string that specifies
89823 - a set of delimiters that may surround the token being extracted.
89824 - All the initial wide characters that are members of this set are
89825 - discarded. The first wide character that is _not_ a member of
89826 - this set of delimiters marks the beginning of the next token. The
89827 - end of the token is found by looking for the next wide character
89828 - that is a member of the delimiter set. This wide character in the
89829 - original wide character string NEWSTRING is overwritten by a null
89830 - wide character, and the pointer to the beginning of the token in
89831 - NEWSTRING is returned.
89833 - On the next call to `wcstok', the searching begins at the next
89834 - wide character beyond the one that marked the end of the previous
89835 - token. Note that the set of delimiters DELIMITERS do not have to
89836 - be the same on every call in a series of calls to `wcstok'.
89838 - If the end of the wide character string NEWSTRING is reached, or
89839 - if the remainder of string consists only of delimiter wide
89840 - characters, `wcstok' returns a null pointer.
89842 - Note that "character" is here used in the sense of byte. In a
89843 - string using a multibyte character encoding (abstract) character
89844 - consisting of more than one byte are not treated as an entity.
89845 - Each byte is treated separately. The function is not
89846 - locale-dependent.
89848 - *Warning:* Since `strtok' and `wcstok' alter the string they is
89849 -parsing, you should always copy the string to a temporary buffer before
89850 -parsing it with `strtok'/`wcstok' (*note Copying and Concatenation::).
89851 -If you allow `strtok' or `wcstok' to modify a string that came from
89852 -another part of your program, you are asking for trouble; that string
89853 -might be used for other purposes after `strtok' or `wcstok' has
89854 -modified it, and it would not have the expected value.
89856 - The string that you are operating on might even be a constant. Then
89857 -when `strtok' or `wcstok' tries to modify it, your program will get a
89858 -fatal signal for writing in read-only memory. *Note Program Error
89859 -Signals::. Even if the operation of `strtok' or `wcstok' would not
89860 -require a modification of the string (e.g., if there is exactly one
89861 -token) the string can (and in the GNU libc case will) be modified.
89863 - This is a special case of a general principle: if a part of a program
89864 -does not have as its purpose the modification of a certain data
89865 -structure, then it is error-prone to modify the data structure
89866 -temporarily.
89868 - The functions `strtok' and `wcstok' are not reentrant. *Note
89869 -Nonreentrancy::, for a discussion of where and why reentrancy is
89870 -important.
89872 - Here is a simple example showing the use of `strtok'.
89874 - #include <string.h>
89875 - #include <stddef.h>
89877 - ...
89879 - const char string[] = "words separated by spaces -- and, punctuation!";
89880 - const char delimiters[] = " .,;:!-";
89881 - char *token, *cp;
89883 - ...
89885 - cp = strdupa (string); /* Make writable copy. */
89886 - token = strtok (cp, delimiters); /* token => "words" */
89887 - token = strtok (NULL, delimiters); /* token => "separated" */
89888 - token = strtok (NULL, delimiters); /* token => "by" */
89889 - token = strtok (NULL, delimiters); /* token => "spaces" */
89890 - token = strtok (NULL, delimiters); /* token => "and" */
89891 - token = strtok (NULL, delimiters); /* token => "punctuation" */
89892 - token = strtok (NULL, delimiters); /* token => NULL */
89894 - The GNU C library contains two more functions for tokenizing a string
89895 -which overcome the limitation of non-reentrancy. They are only
89896 -available for multibyte character strings.
89898 - - Function: char * strtok_r (char *NEWSTRING, const char *DELIMITERS,
89899 - char **SAVE_PTR)
89900 - Just like `strtok', this function splits the string into several
89901 - tokens which can be accessed by successive calls to `strtok_r'.
89902 - The difference is that the information about the next token is
89903 - stored in the space pointed to by the third argument, SAVE_PTR,
89904 - which is a pointer to a string pointer. Calling `strtok_r' with a
89905 - null pointer for NEWSTRING and leaving SAVE_PTR between the calls
89906 - unchanged does the job without hindering reentrancy.
89908 - This function is defined in POSIX.1 and can be found on many
89909 - systems which support multi-threading.
89911 - - Function: char * strsep (char **STRING_PTR, const char *DELIMITER)
89912 - This function has a similar functionality as `strtok_r' with the
89913 - NEWSTRING argument replaced by the SAVE_PTR argument. The
89914 - initialization of the moving pointer has to be done by the user.
89915 - Successive calls to `strsep' move the pointer along the tokens
89916 - separated by DELIMITER, returning the address of the next token
89917 - and updating STRING_PTR to point to the beginning of the next
89918 - token.
89920 - One difference between `strsep' and `strtok_r' is that if the
89921 - input string contains more than one character from DELIMITER in a
89922 - row `strsep' returns an empty string for each pair of characters
89923 - from DELIMITER. This means that a program normally should test
89924 - for `strsep' returning an empty string before processing it.
89926 - This function was introduced in 4.3BSD and therefore is widely
89927 - available.
89929 - Here is how the above example looks like when `strsep' is used.
89931 - #include <string.h>
89932 - #include <stddef.h>
89934 - ...
89936 - const char string[] = "words separated by spaces -- and, punctuation!";
89937 - const char delimiters[] = " .,;:!-";
89938 - char *running;
89939 - char *token;
89941 - ...
89943 - running = strdupa (string);
89944 - token = strsep (&running, delimiters); /* token => "words" */
89945 - token = strsep (&running, delimiters); /* token => "separated" */
89946 - token = strsep (&running, delimiters); /* token => "by" */
89947 - token = strsep (&running, delimiters); /* token => "spaces" */
89948 - token = strsep (&running, delimiters); /* token => "" */
89949 - token = strsep (&running, delimiters); /* token => "" */
89950 - token = strsep (&running, delimiters); /* token => "" */
89951 - token = strsep (&running, delimiters); /* token => "and" */
89952 - token = strsep (&running, delimiters); /* token => "" */
89953 - token = strsep (&running, delimiters); /* token => "punctuation" */
89954 - token = strsep (&running, delimiters); /* token => "" */
89955 - token = strsep (&running, delimiters); /* token => NULL */
89957 - - Function: char * basename (const char *FILENAME)
89958 - The GNU version of the `basename' function returns the last
89959 - component of the path in FILENAME. This function is the preferred
89960 - usage, since it does not modify the argument, FILENAME, and
89961 - respects trailing slashes. The prototype for `basename' can be
89962 - found in `string.h'. Note, this function is overriden by the XPG
89963 - version, if `libgen.h' is included.
89965 - Example of using GNU `basename':
89967 - #include <string.h>
89969 - int
89970 - main (int argc, char *argv[])
89972 - char *prog = basename (argv[0]);
89974 - if (argc < 2)
89976 - fprintf (stderr, "Usage %s <arg>\n", prog);
89977 - exit (1);
89980 - ...
89983 - *Portability Note:* This function may produce different results on
89984 - different systems.
89987 - - Function: char * basename (char *PATH)
89988 - This is the standard XPG defined `basename'. It is similar in
89989 - spirit to the GNU version, but may modify the PATH by removing
89990 - trailing '/' characters. If the PATH is made up entirely of '/'
89991 - characters, then "/" will be returned. Also, if PATH is `NULL' or
89992 - an empty string, then "." is returned. The prototype for the XPG
89993 - version can be found in `libgen.h'.
89995 - Example of using XPG `basename':
89997 - #include <libgen.h>
89999 - int
90000 - main (int argc, char *argv[])
90002 - char *prog;
90003 - char *path = strdupa (argv[0]);
90005 - prog = basename (path);
90007 - if (argc < 2)
90009 - fprintf (stderr, "Usage %s <arg>\n", prog);
90010 - exit (1);
90013 - ...
90017 - - Function: char * dirname (char *PATH)
90018 - The `dirname' function is the compliment to the XPG version of
90019 - `basename'. It returns the parent directory of the file specified
90020 - by PATH. If PATH is `NULL', an empty string, or contains no '/'
90021 - characters, then "." is returned. The prototype for this function
90022 - can be found in `libgen.h'.
90024 -\x1f
90025 -File: libc.info, Node: strfry, Next: Trivial Encryption, Prev: Finding Tokens in a String, Up: String and Array Utilities
90027 -strfry
90028 -======
90030 - The function below addresses the perennial programming quandary:
90031 -"How do I take good data in string form and painlessly turn it into
90032 -garbage?" This is actually a fairly simple task for C programmers who
90033 -do not use the GNU C library string functions, but for programs based
90034 -on the GNU C library, the `strfry' function is the preferred method for
90035 -destroying string data.
90037 - The prototype for this function is in `string.h'.
90039 - - Function: char * strfry (char *STRING)
90040 - `strfry' creates a pseudorandom anagram of a string, replacing the
90041 - input with the anagram in place. For each position in the string,
90042 - `strfry' swaps it with a position in the string selected at random
90043 - (from a uniform distribution). The two positions may be the same.
90045 - The return value of `strfry' is always STRING.
90047 - *Portability Note:* This function is unique to the GNU C library.
90050 -\x1f
90051 -File: libc.info, Node: Trivial Encryption, Next: Encode Binary Data, Prev: strfry, Up: String and Array Utilities
90053 -Trivial Encryption
90054 -==================
90056 - The `memfrob' function converts an array of data to something
90057 -unrecognizable and back again. It is not encryption in its usual sense
90058 -since it is easy for someone to convert the encrypted data back to clear
90059 -text. The transformation is analogous to Usenet's "Rot13" encryption
90060 -method for obscuring offensive jokes from sensitive eyes and such.
90061 -Unlike Rot13, `memfrob' works on arbitrary binary data, not just text.
90063 - For true encryption, *Note Cryptographic Functions::.
90065 - This function is declared in `string.h'.
90067 - - Function: void * memfrob (void *MEM, size_t LENGTH)
90068 - `memfrob' transforms (frobnicates) each byte of the data structure
90069 - at MEM, which is LENGTH bytes long, by bitwise exclusive oring it
90070 - with binary 00101010. It does the transformation in place and its
90071 - return value is always MEM.
90073 - Note that `memfrob' a second time on the same data structure
90074 - returns it to its original state.
90076 - This is a good function for hiding information from someone who
90077 - doesn't want to see it or doesn't want to see it very much. To
90078 - really prevent people from retrieving the information, use
90079 - stronger encryption such as that described in *Note Cryptographic
90080 - Functions::.
90082 - *Portability Note:* This function is unique to the GNU C library.
90085 -\x1f
90086 -File: libc.info, Node: Encode Binary Data, Next: Argz and Envz Vectors, Prev: Trivial Encryption, Up: String and Array Utilities
90088 -Encode Binary Data
90089 -==================
90091 - To store or transfer binary data in environments which only support
90092 -text one has to encode the binary data by mapping the input bytes to
90093 -characters in the range allowed for storing or transfering. SVID
90094 -systems (and nowadays XPG compliant systems) provide minimal support for
90095 -this task.
90097 - - Function: char * l64a (long int N)
90098 - This function encodes a 32-bit input value using characters from
90099 - the basic character set. It returns a pointer to a 6 character
90100 - buffer which contains an encoded version of N. To encode a series
90101 - of bytes the user must copy the returned string to a destination
90102 - buffer. It returns the empty string if N is zero, which is
90103 - somewhat bizarre but mandated by the standard.
90104 - *Warning:* Since a static buffer is used this function should not
90105 - be used in multi-threaded programs. There is no thread-safe
90106 - alternative to this function in the C library.
90107 - *Compatibility Note:* The XPG standard states that the return
90108 - value of `l64a' is undefined if N is negative. In the GNU
90109 - implementation, `l64a' treats its argument as unsigned, so it will
90110 - return a sensible encoding for any nonzero N; however, portable
90111 - programs should not rely on this.
90113 - To encode a large buffer `l64a' must be called in a loop, once for
90114 - each 32-bit word of the buffer. For example, one could do
90115 - something like this:
90117 - char *
90118 - encode (const void *buf, size_t len)
90120 - /* We know in advance how long the buffer has to be. */
90121 - unsigned char *in = (unsigned char *) buf;
90122 - char *out = malloc (6 + ((len + 3) / 4) * 6 + 1);
90123 - char *cp = out;
90125 - /* Encode the length. */
90126 - /* Using `htonl' is necessary so that the data can be
90127 - decoded even on machines with different byte order. */
90129 - cp = mempcpy (cp, l64a (htonl (len)), 6);
90131 - while (len > 3)
90133 - unsigned long int n = *in++;
90134 - n = (n << 8) | *in++;
90135 - n = (n << 8) | *in++;
90136 - n = (n << 8) | *in++;
90137 - len -= 4;
90138 - if (n)
90139 - cp = mempcpy (cp, l64a (htonl (n)), 6);
90140 - else
90141 - /* `l64a' returns the empty string for n==0, so we
90142 - must generate its encoding ("......") by hand. */
90143 - cp = stpcpy (cp, "......");
90145 - if (len > 0)
90147 - unsigned long int n = *in++;
90148 - if (--len > 0)
90150 - n = (n << 8) | *in++;
90151 - if (--len > 0)
90152 - n = (n << 8) | *in;
90154 - memcpy (cp, l64a (htonl (n)), 6);
90155 - cp += 6;
90157 - *cp = '\0';
90158 - return out;
90161 - It is strange that the library does not provide the complete
90162 - functionality needed but so be it.
90165 - To decode data produced with `l64a' the following function should be
90166 -used.
90168 - - Function: long int a64l (const char *STRING)
90169 - The parameter STRING should contain a string which was produced by
90170 - a call to `l64a'. The function processes at least 6 characters of
90171 - this string, and decodes the characters it finds according to the
90172 - table below. It stops decoding when it finds a character not in
90173 - the table, rather like `atoi'; if you have a buffer which has been
90174 - broken into lines, you must be careful to skip over the
90175 - end-of-line characters.
90177 - The decoded number is returned as a `long int' value.
90179 - The `l64a' and `a64l' functions use a base 64 encoding, in which
90180 -each character of an encoded string represents six bits of an input
90181 -word. These symbols are used for the base 64 digits:
90183 - 0 1 2 3 4 5 6 7
90184 -0 `.' `/' `0' `1' `2' `3' `4' `5'
90185 -8 `6' `7' `8' `9' `A' `B' `C' `D'
90186 -16 `E' `F' `G' `H' `I' `J' `K' `L'
90187 -24 `M' `N' `O' `P' `Q' `R' `S' `T'
90188 -32 `U' `V' `W' `X' `Y' `Z' `a' `b'
90189 -40 `c' `d' `e' `f' `g' `h' `i' `j'
90190 -48 `k' `l' `m' `n' `o' `p' `q' `r'
90191 -56 `s' `t' `u' `v' `w' `x' `y' `z'
90193 - This encoding scheme is not standard. There are some other encoding
90194 -methods which are much more widely used (UU encoding, MIME encoding).
90195 -Generally, it is better to use one of these encodings.
90197 -\x1f
90198 -File: libc.info, Node: Argz and Envz Vectors, Prev: Encode Binary Data, Up: String and Array Utilities
90200 -Argz and Envz Vectors
90201 -=====================
90203 - "argz vectors" are vectors of strings in a contiguous block of
90204 -memory, each element separated from its neighbors by null-characters
90205 -(`'\0'').
90207 - "Envz vectors" are an extension of argz vectors where each element
90208 -is a name-value pair, separated by a `'='' character (as in a Unix
90209 -environment).
90211 -* Menu:
90213 -* Argz Functions:: Operations on argz vectors.
90214 -* Envz Functions:: Additional operations on environment vectors.
90216 -\x1f
90217 -File: libc.info, Node: Argz Functions, Next: Envz Functions, Up: Argz and Envz Vectors
90219 -Argz Functions
90220 ---------------
90222 - Each argz vector is represented by a pointer to the first element, of
90223 -type `char *', and a size, of type `size_t', both of which can be
90224 -initialized to `0' to represent an empty argz vector. All argz
90225 -functions accept either a pointer and a size argument, or pointers to
90226 -them, if they will be modified.
90228 - The argz functions use `malloc'/`realloc' to allocate/grow argz
90229 -vectors, and so any argz vector creating using these functions may be
90230 -freed by using `free'; conversely, any argz function that may grow a
90231 -string expects that string to have been allocated using `malloc' (those
90232 -argz functions that only examine their arguments or modify them in
90233 -place will work on any sort of memory). *Note Unconstrained
90234 -Allocation::.
90236 - All argz functions that do memory allocation have a return type of
90237 -`error_t', and return `0' for success, and `ENOMEM' if an allocation
90238 -error occurs.
90240 - These functions are declared in the standard include file `argz.h'.
90242 - - Function: error_t argz_create (char *const ARGV[], char **ARGZ,
90243 - size_t *ARGZ_LEN)
90244 - The `argz_create' function converts the Unix-style argument vector
90245 - ARGV (a vector of pointers to normal C strings, terminated by
90246 - `(char *)0'; *note Program Arguments::) into an argz vector with
90247 - the same elements, which is returned in ARGZ and ARGZ_LEN.
90249 - - Function: error_t argz_create_sep (const char *STRING, int SEP, char
90250 - **ARGZ, size_t *ARGZ_LEN)
90251 - The `argz_create_sep' function converts the null-terminated string
90252 - STRING into an argz vector (returned in ARGZ and ARGZ_LEN) by
90253 - splitting it into elements at every occurrence of the character
90254 - SEP.
90256 - - Function: size_t argz_count (const char *ARGZ, size_t ARG_LEN)
90257 - Returns the number of elements in the argz vector ARGZ and
90258 - ARGZ_LEN.
90260 - - Function: void argz_extract (char *ARGZ, size_t ARGZ_LEN, char
90261 - **ARGV)
90262 - The `argz_extract' function converts the argz vector ARGZ and
90263 - ARGZ_LEN into a Unix-style argument vector stored in ARGV, by
90264 - putting pointers to every element in ARGZ into successive
90265 - positions in ARGV, followed by a terminator of `0'. ARGV must be
90266 - pre-allocated with enough space to hold all the elements in ARGZ
90267 - plus the terminating `(char *)0' (`(argz_count (ARGZ, ARGZ_LEN) +
90268 - 1) * sizeof (char *)' bytes should be enough). Note that the
90269 - string pointers stored into ARGV point into ARGZ--they are not
90270 - copies--and so ARGZ must be copied if it will be changed while
90271 - ARGV is still active. This function is useful for passing the
90272 - elements in ARGZ to an exec function (*note Executing a File::).
90274 - - Function: void argz_stringify (char *ARGZ, size_t LEN, int SEP)
90275 - The `argz_stringify' converts ARGZ into a normal string with the
90276 - elements separated by the character SEP, by replacing each `'\0''
90277 - inside ARGZ (except the last one, which terminates the string)
90278 - with SEP. This is handy for printing ARGZ in a readable manner.
90280 - - Function: error_t argz_add (char **ARGZ, size_t *ARGZ_LEN, const
90281 - char *STR)
90282 - The `argz_add' function adds the string STR to the end of the argz
90283 - vector `*ARGZ', and updates `*ARGZ' and `*ARGZ_LEN' accordingly.
90285 - - Function: error_t argz_add_sep (char **ARGZ, size_t *ARGZ_LEN, const
90286 - char *STR, int DELIM)
90287 - The `argz_add_sep' function is similar to `argz_add', but STR is
90288 - split into separate elements in the result at occurrences of the
90289 - character DELIM. This is useful, for instance, for adding the
90290 - components of a Unix search path to an argz vector, by using a
90291 - value of `':'' for DELIM.
90293 - - Function: error_t argz_append (char **ARGZ, size_t *ARGZ_LEN, const
90294 - char *BUF, size_t BUF_LEN)
90295 - The `argz_append' function appends BUF_LEN bytes starting at BUF
90296 - to the argz vector `*ARGZ', reallocating `*ARGZ' to accommodate
90297 - it, and adding BUF_LEN to `*ARGZ_LEN'.
90299 - - Function: error_t argz_delete (char **ARGZ, size_t *ARGZ_LEN, char
90300 - *ENTRY)
90301 - If ENTRY points to the beginning of one of the elements in the
90302 - argz vector `*ARGZ', the `argz_delete' function will remove this
90303 - entry and reallocate `*ARGZ', modifying `*ARGZ' and `*ARGZ_LEN'
90304 - accordingly. Note that as destructive argz functions usually
90305 - reallocate their argz argument, pointers into argz vectors such as
90306 - ENTRY will then become invalid.
90308 - - Function: error_t argz_insert (char **ARGZ, size_t *ARGZ_LEN, char
90309 - *BEFORE, const char *ENTRY)
90310 - The `argz_insert' function inserts the string ENTRY into the argz
90311 - vector `*ARGZ' at a point just before the existing element pointed
90312 - to by BEFORE, reallocating `*ARGZ' and updating `*ARGZ' and
90313 - `*ARGZ_LEN'. If BEFORE is `0', ENTRY is added to the end instead
90314 - (as if by `argz_add'). Since the first element is in fact the
90315 - same as `*ARGZ', passing in `*ARGZ' as the value of BEFORE will
90316 - result in ENTRY being inserted at the beginning.
90318 - - Function: char * argz_next (char *ARGZ, size_t ARGZ_LEN, const char
90319 - *ENTRY)
90320 - The `argz_next' function provides a convenient way of iterating
90321 - over the elements in the argz vector ARGZ. It returns a pointer
90322 - to the next element in ARGZ after the element ENTRY, or `0' if
90323 - there are no elements following ENTRY. If ENTRY is `0', the first
90324 - element of ARGZ is returned.
90326 - This behavior suggests two styles of iteration:
90328 - char *entry = 0;
90329 - while ((entry = argz_next (ARGZ, ARGZ_LEN, entry)))
90330 - ACTION;
90332 - (the double parentheses are necessary to make some C compilers
90333 - shut up about what they consider a questionable `while'-test) and:
90335 - char *entry;
90336 - for (entry = ARGZ;
90337 - entry;
90338 - entry = argz_next (ARGZ, ARGZ_LEN, entry))
90339 - ACTION;
90341 - Note that the latter depends on ARGZ having a value of `0' if it
90342 - is empty (rather than a pointer to an empty block of memory); this
90343 - invariant is maintained for argz vectors created by the functions
90344 - here.
90346 - - Function: error_t argz_replace (char **ARGZ, size_t *ARGZ_LEN,
90347 - const char *STR, const char *WITH, unsigned *REPLACE_COUNT)
90348 - Replace any occurrences of the string STR in ARGZ with WITH,
90349 - reallocating ARGZ as necessary. If REPLACE_COUNT is non-zero,
90350 - `*REPLACE_COUNT' will be incremented by number of replacements
90351 - performed.
90353 -\x1f
90354 -File: libc.info, Node: Envz Functions, Prev: Argz Functions, Up: Argz and Envz Vectors
90356 -Envz Functions
90357 ---------------
90359 - Envz vectors are just argz vectors with additional constraints on
90360 -the form of each element; as such, argz functions can also be used on
90361 -them, where it makes sense.
90363 - Each element in an envz vector is a name-value pair, separated by a
90364 -`'='' character; if multiple `'='' characters are present in an
90365 -element, those after the first are considered part of the value, and
90366 -treated like all other non-`'\0'' characters.
90368 - If _no_ `'='' characters are present in an element, that element is
90369 -considered the name of a "null" entry, as distinct from an entry with an
90370 -empty value: `envz_get' will return `0' if given the name of null
90371 -entry, whereas an entry with an empty value would result in a value of
90372 -`""'; `envz_entry' will still find such entries, however. Null entries
90373 -can be removed with `envz_strip' function.
90375 - As with argz functions, envz functions that may allocate memory (and
90376 -thus fail) have a return type of `error_t', and return either `0' or
90377 -`ENOMEM'.
90379 - These functions are declared in the standard include file `envz.h'.
90381 - - Function: char * envz_entry (const char *ENVZ, size_t ENVZ_LEN,
90382 - const char *NAME)
90383 - The `envz_entry' function finds the entry in ENVZ with the name
90384 - NAME, and returns a pointer to the whole entry--that is, the argz
90385 - element which begins with NAME followed by a `'='' character. If
90386 - there is no entry with that name, `0' is returned.
90388 - - Function: char * envz_get (const char *ENVZ, size_t ENVZ_LEN, const
90389 - char *NAME)
90390 - The `envz_get' function finds the entry in ENVZ with the name NAME
90391 - (like `envz_entry'), and returns a pointer to the value portion of
90392 - that entry (following the `'=''). If there is no entry with that
90393 - name (or only a null entry), `0' is returned.
90395 - - Function: error_t envz_add (char **ENVZ, size_t *ENVZ_LEN, const
90396 - char *NAME, const char *VALUE)
90397 - The `envz_add' function adds an entry to `*ENVZ' (updating `*ENVZ'
90398 - and `*ENVZ_LEN') with the name NAME, and value VALUE. If an entry
90399 - with the same name already exists in ENVZ, it is removed first.
90400 - If VALUE is `0', then the new entry will the special null type of
90401 - entry (mentioned above).
90403 - - Function: error_t envz_merge (char **ENVZ, size_t *ENVZ_LEN, const
90404 - char *ENVZ2, size_t ENVZ2_LEN, int OVERRIDE)
90405 - The `envz_merge' function adds each entry in ENVZ2 to ENVZ, as if
90406 - with `envz_add', updating `*ENVZ' and `*ENVZ_LEN'. If OVERRIDE is
90407 - true, then values in ENVZ2 will supersede those with the same name
90408 - in ENVZ, otherwise not.
90410 - Null entries are treated just like other entries in this respect,
90411 - so a null entry in ENVZ can prevent an entry of the same name in
90412 - ENVZ2 from being added to ENVZ, if OVERRIDE is false.
90414 - - Function: void envz_strip (char **ENVZ, size_t *ENVZ_LEN)
90415 - The `envz_strip' function removes any null entries from ENVZ,
90416 - updating `*ENVZ' and `*ENVZ_LEN'.
90418 -\x1f
90419 -File: libc.info, Node: Character Set Handling, Next: Locales, Prev: String and Array Utilities, Up: Top
90421 -Character Set Handling
90422 -**********************
90424 - Character sets used in the early days of computing had only six,
90425 -seven, or eight bits for each character: there was never a case where
90426 -more than eight bits (one byte) were used to represent a single
90427 -character. The limitations of this approach became more apparent as
90428 -more people grappled with non-Roman character sets, where not all the
90429 -characters that make up a language's character set can be represented
90430 -by 2^8 choices. This chapter shows the functionality that was added to
90431 -the C library to support multiple character sets.
90433 -* Menu:
90435 -* Extended Char Intro:: Introduction to Extended Characters.
90436 -* Charset Function Overview:: Overview about Character Handling
90437 - Functions.
90438 -* Restartable multibyte conversion:: Restartable multibyte conversion
90439 - Functions.
90440 -* Non-reentrant Conversion:: Non-reentrant Conversion Function.
90441 -* Generic Charset Conversion:: Generic Charset Conversion.
90443 diff -u -udbrN glibc-2.3.2/manual/libc.info-9 glibc-2.3.2-200304020432/manual/libc.info-9
90444 --- glibc-2.3.2/manual/libc.info-9 Sat Mar 1 02:39:41 2003
90445 +++ glibc-2.3.2-200304020432/manual/libc.info-9 Thu Jan 1 01:00:00 1970
90446 @@ -1,1056 +0,0 @@
90447 -This is libc.info, produced by makeinfo version 4.2 from libc.texinfo.
90449 -INFO-DIR-SECTION GNU libraries
90450 -START-INFO-DIR-ENTRY
90451 -* Libc: (libc). C library.
90452 -END-INFO-DIR-ENTRY
90454 - This file documents the GNU C library.
90456 - This is Edition 0.10, last updated 2001-07-06, of `The GNU C Library
90457 -Reference Manual', for Version 2.3.x.
90459 - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
90460 -Free Software Foundation, Inc.
90462 - Permission is granted to copy, distribute and/or modify this document
90463 -under the terms of the GNU Free Documentation License, Version 1.1 or
90464 -any later version published by the Free Software Foundation; with the
90465 -Invariant Sections being "Free Software Needs Free Documentation" and
90466 -"GNU Lesser General Public License", the Front-Cover texts being (a)
90467 -(see below), and with the Back-Cover Texts being (b) (see below). A
90468 -copy of the license is included in the section entitled "GNU Free
90469 -Documentation License".
90471 - (a) The FSF's Front-Cover Text is:
90473 - A GNU Manual
90475 - (b) The FSF's Back-Cover Text is:
90477 - You have freedom to copy and modify this GNU Manual, like GNU
90478 -software. Copies published by the Free Software Foundation raise
90479 -funds for GNU development.
90481 -\x1f
90482 -File: libc.info, Node: Extended Char Intro, Next: Charset Function Overview, Up: Character Set Handling
90484 -Introduction to Extended Characters
90485 -===================================
90487 - A variety of solutions is available to overcome the differences
90488 -between character sets with a 1:1 relation between bytes and characters
90489 -and character sets with ratios of 2:1 or 4:1. The remainder of this
90490 -section gives a few examples to help understand the design decisions
90491 -made while developing the functionality of the C library.
90493 - A distinction we have to make right away is between internal and
90494 -external representation. "Internal representation" means the
90495 -representation used by a program while keeping the text in memory.
90496 -External representations are used when text is stored or transmitted
90497 -through some communication channel. Examples of external
90498 -representations include files waiting in a directory to be read and
90499 -parsed.
90501 - Traditionally there has been no difference between the two
90502 -representations. It was equally comfortable and useful to use the same
90503 -single-byte representation internally and externally. This comfort
90504 -level decreases with more and larger character sets.
90506 - One of the problems to overcome with the internal representation is
90507 -handling text that is externally encoded using different character
90508 -sets. Assume a program that reads two texts and compares them using
90509 -some metric. The comparison can be usefully done only if the texts are
90510 -internally kept in a common format.
90512 - For such a common format (= character set) eight bits are certainly
90513 -no longer enough. So the smallest entity will have to grow: "wide
90514 -characters" will now be used. Instead of one byte per character, two or
90515 -four will be used instead. (Three are not good to address in memory and
90516 -more than four bytes seem not to be necessary).
90518 - As shown in some other part of this manual, a completely new family
90519 -has been created of functions that can handle wide character texts in
90520 -memory. The most commonly used character sets for such internal wide
90521 -character representations are Unicode and ISO 10646 (also known as UCS
90522 -for Universal Character Set). Unicode was originally planned as a
90523 -16-bit character set; whereas, ISO 10646 was designed to be a 31-bit
90524 -large code space. The two standards are practically identical. They
90525 -have the same character repertoire and code table, but Unicode specifies
90526 -added semantics. At the moment, only characters in the first `0x10000'
90527 -code positions (the so-called Basic Multilingual Plane, BMP) have been
90528 -assigned, but the assignment of more specialized characters outside this
90529 -16-bit space is already in progress. A number of encodings have been
90530 -defined for Unicode and ISO 10646 characters: UCS-2 is a 16-bit word
90531 -that can only represent characters from the BMP, UCS-4 is a 32-bit word
90532 -than can represent any Unicode and ISO 10646 character, UTF-8 is an
90533 -ASCII compatible encoding where ASCII characters are represented by
90534 -ASCII bytes and non-ASCII characters by sequences of 2-6 non-ASCII
90535 -bytes, and finally UTF-16 is an extension of UCS-2 in which pairs of
90536 -certain UCS-2 words can be used to encode non-BMP characters up to
90537 -`0x10ffff'.
90539 - To represent wide characters the `char' type is not suitable. For
90540 -this reason the ISO C standard introduces a new type that is designed
90541 -to keep one character of a wide character string. To maintain the
90542 -similarity there is also a type corresponding to `int' for those
90543 -functions that take a single wide character.
90545 - - Data type: wchar_t
90546 - This data type is used as the base type for wide character strings.
90547 - In other words, arrays of objects of this type are the equivalent
90548 - of `char[]' for multibyte character strings. The type is defined
90549 - in `stddef.h'.
90551 - The ISO C90 standard, where `wchar_t' was introduced, does not say
90552 - anything specific about the representation. It only requires that
90553 - this type is capable of storing all elements of the basic
90554 - character set. Therefore it would be legitimate to define
90555 - `wchar_t' as `char', which might make sense for embedded systems.
90557 - But for GNU systems `wchar_t' is always 32 bits wide and,
90558 - therefore, capable of representing all UCS-4 values and,
90559 - therefore, covering all of ISO 10646. Some Unix systems define
90560 - `wchar_t' as a 16-bit type and thereby follow Unicode very
90561 - strictly. This definition is perfectly fine with the standard,
90562 - but it also means that to represent all characters from Unicode
90563 - and ISO 10646 one has to use UTF-16 surrogate characters, which is
90564 - in fact a multi-wide-character encoding. But resorting to
90565 - multi-wide-character encoding contradicts the purpose of the
90566 - `wchar_t' type.
90568 - - Data type: wint_t
90569 - `wint_t' is a data type used for parameters and variables that
90570 - contain a single wide character. As the name suggests this type
90571 - is the equivalent of `int' when using the normal `char' strings.
90572 - The types `wchar_t' and `wint_t' often have the same
90573 - representation if their size is 32 bits wide but if `wchar_t' is
90574 - defined as `char' the type `wint_t' must be defined as `int' due
90575 - to the parameter promotion.
90577 - This type is defined in `wchar.h' and was introduced in
90578 - Amendment 1 to ISO C90.
90580 - As there are for the `char' data type macros are available for
90581 -specifying the minimum and maximum value representable in an object of
90582 -type `wchar_t'.
90584 - - Macro: wint_t WCHAR_MIN
90585 - The macro `WCHAR_MIN' evaluates to the minimum value representable
90586 - by an object of type `wint_t'.
90588 - This macro was introduced in Amendment 1 to ISO C90.
90590 - - Macro: wint_t WCHAR_MAX
90591 - The macro `WCHAR_MAX' evaluates to the maximum value representable
90592 - by an object of type `wint_t'.
90594 - This macro was introduced in Amendment 1 to ISO C90.
90596 - Another special wide character value is the equivalent to `EOF'.
90598 - - Macro: wint_t WEOF
90599 - The macro `WEOF' evaluates to a constant expression of type
90600 - `wint_t' whose value is different from any member of the extended
90601 - character set.
90603 - `WEOF' need not be the same value as `EOF' and unlike `EOF' it
90604 - also need _not_ be negative. In other words, sloppy code like
90607 - int c;
90608 - ...
90609 - while ((c = getc (fp)) < 0)
90610 - ...
90613 - has to be rewritten to use `WEOF' explicitly when wide characters
90614 - are used:
90617 - wint_t c;
90618 - ...
90619 - while ((c = wgetc (fp)) != WEOF)
90620 - ...
90623 - This macro was introduced in Amendment 1 to ISO C90 and is defined
90624 - in `wchar.h'.
90626 - These internal representations present problems when it comes to
90627 -storing and transmittal. Because each single wide character consists
90628 -of more than one byte, they are effected by byte-ordering. Thus,
90629 -machines with different endianesses would see different values when
90630 -accessing the same data. This byte ordering concern also applies for
90631 -communication protocols that are all byte-based and, thereforet require
90632 -that the sender has to decide about splitting the wide character in
90633 -bytes. A last (but not least important) point is that wide characters
90634 -often require more storage space than a customized byte-oriented
90635 -character set.
90637 - For all the above reasons, an external encoding that is different
90638 -from the internal encoding is often used if the latter is UCS-2 or
90639 -UCS-4. The external encoding is byte-based and can be chosen
90640 -appropriately for the environment and for the texts to be handled. A
90641 -variety of different character sets can be used for this external
90642 -encoding (information that will not be exhaustively presented
90643 -here-instead, a description of the major groups will suffice). All of
90644 -the ASCII-based character sets fulfill one requirement: they are
90645 -"filesystem safe." This means that the character `'/'' is used in the
90646 -encoding _only_ to represent itself. Things are a bit different for
90647 -character sets like EBCDIC (Extended Binary Coded Decimal Interchange
90648 -Code, a character set family used by IBM), but if the operation system
90649 -does not understand EBCDIC directly the parameters-to-system calls have
90650 -to be converted first anyhow.
90652 - * The simplest character sets are single-byte character sets. There
90653 - can be only up to 256 characters (for 8 bit character sets), which
90654 - is not sufficient to cover all languages but might be sufficient
90655 - to handle a specific text. Handling of a 8 bit character sets is
90656 - simple. This is not true for other kinds presented later, and
90657 - therefore, the application one uses might require the use of 8 bit
90658 - character sets.
90660 - * The ISO 2022 standard defines a mechanism for extended character
90661 - sets where one character _can_ be represented by more than one
90662 - byte. This is achieved by associating a state with the text.
90663 - Characters that can be used to change the state can be embedded in
90664 - the text. Each byte in the text might have a different
90665 - interpretation in each state. The state might even influence
90666 - whether a given byte stands for a character on its own or whether
90667 - it has to be combined with some more bytes.
90669 - In most uses of ISO 2022 the defined character sets do not allow
90670 - state changes that cover more than the next character. This has
90671 - the big advantage that whenever one can identify the beginning of
90672 - the byte sequence of a character one can interpret a text
90673 - correctly. Examples of character sets using this policy are the
90674 - various EUC character sets (used by Sun's operations systems,
90675 - EUC-JP, EUC-KR, EUC-TW, and EUC-CN) or Shift_JIS (SJIS, a Japanese
90676 - encoding).
90678 - But there are also character sets using a state that is valid for
90679 - more than one character and has to be changed by another byte
90680 - sequence. Examples for this are ISO-2022-JP, ISO-2022-KR, and
90681 - ISO-2022-CN.
90683 - * Early attempts to fix 8 bit character sets for other languages
90684 - using the Roman alphabet lead to character sets like ISO 6937.
90685 - Here bytes representing characters like the acute accent do not
90686 - produce output themselves: one has to combine them with other
90687 - characters to get the desired result. For example, the byte
90688 - sequence `0xc2 0x61' (non-spacing acute accent, followed by
90689 - lower-case `a') to get the "small a with acute" character. To
90690 - get the acute accent character on its own, one has to write `0xc2
90691 - 0x20' (the non-spacing acute followed by a space).
90693 - Character sets like ISO 6937 are used in some embedded systems such
90694 - as teletex.
90696 - * Instead of converting the Unicode or ISO 10646 text used
90697 - internally, it is often also sufficient to simply use an encoding
90698 - different than UCS-2/UCS-4. The Unicode and ISO 10646 standards
90699 - even specify such an encoding: UTF-8. This encoding is able to
90700 - represent all of ISO 10646 31 bits in a byte string of length one
90701 - to six.
90703 - There were a few other attempts to encode ISO 10646 such as UTF-7,
90704 - but UTF-8 is today the only encoding that should be used. In
90705 - fact, with any luck UTF-8 will soon be the only external encoding
90706 - that has to be supported. It proves to be universally usable and
90707 - its only disadvantage is that it favors Roman languages by making
90708 - the byte string representation of other scripts (Cyrillic, Greek,
90709 - Asian scripts) longer than necessary if using a specific character
90710 - set for these scripts. Methods like the Unicode compression
90711 - scheme can alleviate these problems.
90713 - The question remaining is: how to select the character set or
90714 -encoding to use. The answer: you cannot decide about it yourself, it
90715 -is decided by the developers of the system or the majority of the
90716 -users. Since the goal is interoperability one has to use whatever the
90717 -other people one works with use. If there are no constraints, the
90718 -selection is based on the requirements the expected circle of users
90719 -will have. In other words, if a project is expected to be used in
90720 -only, say, Russia it is fine to use KOI8-R or a similar character set.
90721 -But if at the same time people from, say, Greece are participating one
90722 -should use a character set that allows all people to collaborate.
90724 - The most widely useful solution seems to be: go with the most general
90725 -character set, namely ISO 10646. Use UTF-8 as the external encoding
90726 -and problems about users not being able to use their own language
90727 -adequately are a thing of the past.
90729 - One final comment about the choice of the wide character
90730 -representation is necessary at this point. We have said above that the
90731 -natural choice is using Unicode or ISO 10646. This is not required,
90732 -but at least encouraged, by the ISO C standard. The standard defines
90733 -at least a macro `__STDC_ISO_10646__' that is only defined on systems
90734 -where the `wchar_t' type encodes ISO 10646 characters. If this symbol
90735 -is not defined one should avoid making assumptions about the wide
90736 -character representation. If the programmer uses only the functions
90737 -provided by the C library to handle wide character strings there should
90738 -be no compatibility problems with other systems.
90740 -\x1f
90741 -File: libc.info, Node: Charset Function Overview, Next: Restartable multibyte conversion, Prev: Extended Char Intro, Up: Character Set Handling
90743 -Overview about Character Handling Functions
90744 -===========================================
90746 - A Unix C library contains three different sets of functions in two
90747 -families to handle character set conversion. One of the function
90748 -families (the most commonly used) is specified in the ISO C90 standard
90749 -and, therefore, is portable even beyond the Unix world. Unfortunately
90750 -this family is the least useful one. These functions should be avoided
90751 -whenever possible, especially when developing libraries (as opposed to
90752 -applications).
90754 - The second family of functions got introduced in the early Unix
90755 -standards (XPG2) and is still part of the latest and greatest Unix
90756 -standard: Unix 98. It is also the most powerful and useful set of
90757 -functions. But we will start with the functions defined in Amendment 1
90758 -to ISO C90.
90760 -\x1f
90761 -File: libc.info, Node: Restartable multibyte conversion, Next: Non-reentrant Conversion, Prev: Charset Function Overview, Up: Character Set Handling
90763 -Restartable Multibyte Conversion Functions
90764 -==========================================
90766 - The ISO C standard defines functions to convert strings from a
90767 -multibyte representation to wide character strings. There are a number
90768 -of peculiarities:
90770 - * The character set assumed for the multibyte encoding is not
90771 - specified as an argument to the functions. Instead the character
90772 - set specified by the `LC_CTYPE' category of the current locale is
90773 - used; see *Note Locale Categories::.
90775 - * The functions handling more than one character at a time require
90776 - NUL terminated strings as the argument (i.e., converting blocks of
90777 - text does not work unless one can add a NUL byte at an appropriate
90778 - place). The GNU C library contains some extensions to the
90779 - standard that allow specifying a size, but basically they also
90780 - expect terminated strings.
90782 - Despite these limitations the ISO C functions can be used in many
90783 -contexts. In graphical user interfaces, for instance, it is not
90784 -uncommon to have functions that require text to be displayed in a wide
90785 -character string if the text is not simple ASCII. The text itself might
90786 -come from a file with translations and the user should decide about the
90787 -current locale, which determines the translation and therefore also the
90788 -external encoding used. In such a situation (and many others) the
90789 -functions described here are perfect. If more freedom while performing
90790 -the conversion is necessary take a look at the `iconv' functions (*note
90791 -Generic Charset Conversion::).
90793 -* Menu:
90795 -* Selecting the Conversion:: Selecting the conversion and its properties.
90796 -* Keeping the state:: Representing the state of the conversion.
90797 -* Converting a Character:: Converting Single Characters.
90798 -* Converting Strings:: Converting Multibyte and Wide Character
90799 - Strings.
90800 -* Multibyte Conversion Example:: A Complete Multibyte Conversion Example.
90802 -\x1f
90803 -File: libc.info, Node: Selecting the Conversion, Next: Keeping the state, Up: Restartable multibyte conversion
90805 -Selecting the conversion and its properties
90806 --------------------------------------------
90808 - We already said above that the currently selected locale for the
90809 -`LC_CTYPE' category decides about the conversion that is performed by
90810 -the functions we are about to describe. Each locale uses its own
90811 -character set (given as an argument to `localedef') and this is the one
90812 -assumed as the external multibyte encoding. The wide character
90813 -character set always is UCS-4, at least on GNU systems.
90815 - A characteristic of each multibyte character set is the maximum
90816 -number of bytes that can be necessary to represent one character. This
90817 -information is quite important when writing code that uses the
90818 -conversion functions (as shown in the examples below). The ISO C
90819 -standard defines two macros that provide this information.
90821 - - Macro: int MB_LEN_MAX
90822 - `MB_LEN_MAX' specifies the maximum number of bytes in the multibyte
90823 - sequence for a single character in any of the supported locales.
90824 - It is a compile-time constant and is defined in `limits.h'.
90826 - - Macro: int MB_CUR_MAX
90827 - `MB_CUR_MAX' expands into a positive integer expression that is the
90828 - maximum number of bytes in a multibyte character in the current
90829 - locale. The value is never greater than `MB_LEN_MAX'. Unlike
90830 - `MB_LEN_MAX' this macro need not be a compile-time constant, and in
90831 - the GNU C library it is not.
90833 - `MB_CUR_MAX' is defined in `stdlib.h'.
90835 - Two different macros are necessary since strictly ISO C90 compilers
90836 -do not allow variable length array definitions, but still it is
90837 -desirable to avoid dynamic allocation. This incomplete piece of code
90838 -shows the problem:
90841 - char buf[MB_LEN_MAX];
90842 - ssize_t len = 0;
90844 - while (! feof (fp))
90846 - fread (&buf[len], 1, MB_CUR_MAX - len, fp);
90847 - /* ... process buf */
90848 - len -= used;
90852 - The code in the inner loop is expected to have always enough bytes in
90853 -the array BUF to convert one multibyte character. The array BUF has to
90854 -be sized statically since many compilers do not allow a variable size.
90855 -The `fread' call makes sure that `MB_CUR_MAX' bytes are always
90856 -available in BUF. Note that it isn't a problem if `MB_CUR_MAX' is not
90857 -a compile-time constant.
90859 -\x1f
90860 -File: libc.info, Node: Keeping the state, Next: Converting a Character, Prev: Selecting the Conversion, Up: Restartable multibyte conversion
90862 -Representing the state of the conversion
90863 -----------------------------------------
90865 - In the introduction of this chapter it was said that certain
90866 -character sets use a "stateful" encoding. That is, the encoded values
90867 -depend in some way on the previous bytes in the text.
90869 - Since the conversion functions allow converting a text in more than
90870 -one step we must have a way to pass this information from one call of
90871 -the functions to another.
90873 - - Data type: mbstate_t
90874 - A variable of type `mbstate_t' can contain all the information
90875 - about the "shift state" needed from one call to a conversion
90876 - function to another.
90878 - `mbstate_t' is defined in `wchar.h'. It was introduced in
90879 - Amendment 1 to ISO C90.
90881 - To use objects of type `mbstate_t' the programmer has to define such
90882 -objects (normally as local variables on the stack) and pass a pointer to
90883 -the object to the conversion functions. This way the conversion
90884 -function can update the object if the current multibyte character set
90885 -is stateful.
90887 - There is no specific function or initializer to put the state object
90888 -in any specific state. The rules are that the object should always
90889 -represent the initial state before the first use, and this is achieved
90890 -by clearing the whole variable with code such as follows:
90893 - mbstate_t state;
90894 - memset (&state, '\0', sizeof (state));
90895 - /* from now on STATE can be used. */
90896 - ...
90899 - When using the conversion functions to generate output it is often
90900 -necessary to test whether the current state corresponds to the initial
90901 -state. This is necessary, for example, to decide whether to emit
90902 -escape sequences to set the state to the initial state at certain
90903 -sequence points. Communication protocols often require this.
90905 - - Function: int mbsinit (const mbstate_t *PS)
90906 - The `mbsinit' function determines whether the state object pointed
90907 - to by PS is in the initial state. If PS is a null pointer or the
90908 - object is in the initial state the return value is nonzero.
90909 - Otherwise it is zero.
90911 - `mbsinit' was introduced in Amendment 1 to ISO C90 and is declared
90912 - in `wchar.h'.
90914 - Code using `mbsinit' often looks similar to this:
90917 - mbstate_t state;
90918 - memset (&state, '\0', sizeof (state));
90919 - /* Use STATE. */
90920 - ...
90921 - if (! mbsinit (&state))
90923 - /* Emit code to return to initial state. */
90924 - const wchar_t empty[] = L"";
90925 - const wchar_t *srcp = empty;
90926 - wcsrtombs (outbuf, &srcp, outbuflen, &state);
90928 - ...
90931 - The code to emit the escape sequence to get back to the initial
90932 -state is interesting. The `wcsrtombs' function can be used to
90933 -determine the necessary output code (*note Converting Strings::).
90934 -Please note that on GNU systems it is not necessary to perform this
90935 -extra action for the conversion from multibyte text to wide character
90936 -text since the wide character encoding is not stateful. But there is
90937 -nothing mentioned in any standard that prohibits making `wchar_t' using
90938 -a stateful encoding.
90940 -\x1f
90941 -File: libc.info, Node: Converting a Character, Next: Converting Strings, Prev: Keeping the state, Up: Restartable multibyte conversion
90943 -Converting Single Characters
90944 -----------------------------
90946 - The most fundamental of the conversion functions are those dealing
90947 -with single characters. Please note that this does not always mean
90948 -single bytes. But since there is very often a subset of the multibyte
90949 -character set that consists of single byte sequences, there are
90950 -functions to help with converting bytes. Frequently, ASCII is a subpart
90951 -of the multibyte character set. In such a scenario, each ASCII
90952 -character stands for itself, and all other characters have at least a
90953 -first byte that is beyond the range 0 to 127.
90955 - - Function: wint_t btowc (int C)
90956 - The `btowc' function ("byte to wide character") converts a valid
90957 - single byte character C in the initial shift state into the wide
90958 - character equivalent using the conversion rules from the currently
90959 - selected locale of the `LC_CTYPE' category.
90961 - If `(unsigned char) C' is no valid single byte multibyte character
90962 - or if C is `EOF', the function returns `WEOF'.
90964 - Please note the restriction of C being tested for validity only in
90965 - the initial shift state. No `mbstate_t' object is used from which
90966 - the state information is taken, and the function also does not use
90967 - any static state.
90969 - The `btowc' function was introduced in Amendment 1 to ISO C90 and
90970 - is declared in `wchar.h'.
90972 - Despite the limitation that the single byte value always is
90973 -interpreted in the initial state this function is actually useful most
90974 -of the time. Most characters are either entirely single-byte character
90975 -sets or they are extension to ASCII. But then it is possible to write
90976 -code like this (not that this specific example is very useful):
90978 - wchar_t *
90979 - itow (unsigned long int val)
90981 - static wchar_t buf[30];
90982 - wchar_t *wcp = &buf[29];
90983 - *wcp = L'\0';
90984 - while (val != 0)
90986 - *--wcp = btowc ('0' + val % 10);
90987 - val /= 10;
90989 - if (wcp == &buf[29])
90990 - *--wcp = L'0';
90991 - return wcp;
90994 - Why is it necessary to use such a complicated implementation and not
90995 -simply cast `'0' + val % 10' to a wide character? The answer is that
90996 -there is no guarantee that one can perform this kind of arithmetic on
90997 -the character of the character set used for `wchar_t' representation.
90998 -In other situations the bytes are not constant at compile time and so
90999 -the compiler cannot do the work. In situations like this it is
91000 -necessary `btowc'.
91002 -There also is a function for the conversion in the other direction.
91004 - - Function: int wctob (wint_t C)
91005 - The `wctob' function ("wide character to byte") takes as the
91006 - parameter a valid wide character. If the multibyte representation
91007 - for this character in the initial state is exactly one byte long,
91008 - the return value of this function is this character. Otherwise
91009 - the return value is `EOF'.
91011 - `wctob' was introduced in Amendment 1 to ISO C90 and is declared
91012 - in `wchar.h'.
91014 - There are more general functions to convert single character from
91015 -multibyte representation to wide characters and vice versa. These
91016 -functions pose no limit on the length of the multibyte representation
91017 -and they also do not require it to be in the initial state.
91019 - - Function: size_t mbrtowc (wchar_t *restrict PWC, const char
91020 - *restrict S, size_t N, mbstate_t *restrict PS)
91021 - The `mbrtowc' function ("multibyte restartable to wide character")
91022 - converts the next multibyte character in the string pointed to by
91023 - S into a wide character and stores it in the wide character string
91024 - pointed to by PWC. The conversion is performed according to the
91025 - locale currently selected for the `LC_CTYPE' category. If the
91026 - conversion for the character set used in the locale requires a
91027 - state, the multibyte string is interpreted in the state
91028 - represented by the object pointed to by PS. If PS is a null
91029 - pointer, a static, internal state variable used only by the
91030 - `mbrtowc' function is used.
91032 - If the next multibyte character corresponds to the NUL wide
91033 - character, the return value of the function is 0 and the state
91034 - object is afterwards in the initial state. If the next N or fewer
91035 - bytes form a correct multibyte character, the return value is the
91036 - number of bytes starting from S that form the multibyte character.
91037 - The conversion state is updated according to the bytes consumed
91038 - in the conversion. In both cases the wide character (either the
91039 - `L'\0'' or the one found in the conversion) is stored in the
91040 - string pointed to by PWC if PWC is not null.
91042 - If the first N bytes of the multibyte string possibly form a valid
91043 - multibyte character but there are more than N bytes needed to
91044 - complete it, the return value of the function is `(size_t) -2' and
91045 - no value is stored. Please note that this can happen even if N
91046 - has a value greater than or equal to `MB_CUR_MAX' since the input
91047 - might contain redundant shift sequences.
91049 - If the first `n' bytes of the multibyte string cannot possibly form
91050 - a valid multibyte character, no value is stored, the global
91051 - variable `errno' is set to the value `EILSEQ', and the function
91052 - returns `(size_t) -1'. The conversion state is afterwards
91053 - undefined.
91055 - `mbrtowc' was introduced in Amendment 1 to ISO C90 and is declared
91056 - in `wchar.h'.
91058 - Use of `mbrtowc' is straightforward. A function that copies a
91059 -multibyte string into a wide character string while at the same time
91060 -converting all lowercase characters into uppercase could look like this
91061 -(this is not the final version, just an example; it has no error
91062 -checking, and sometimes leaks memory):
91064 - wchar_t *
91065 - mbstouwcs (const char *s)
91067 - size_t len = strlen (s);
91068 - wchar_t *result = malloc ((len + 1) * sizeof (wchar_t));
91069 - wchar_t *wcp = result;
91070 - wchar_t tmp[1];
91071 - mbstate_t state;
91072 - size_t nbytes;
91074 - memset (&state, '\0', sizeof (state));
91075 - while ((nbytes = mbrtowc (tmp, s, len, &state)) > 0)
91077 - if (nbytes >= (size_t) -2)
91078 - /* Invalid input string. */
91079 - return NULL;
91080 - *result++ = towupper (tmp[0]);
91081 - len -= nbytes;
91082 - s += nbytes;
91084 - return result;
91087 - The use of `mbrtowc' should be clear. A single wide character is
91088 -stored in `TMP[0]', and the number of consumed bytes is stored in the
91089 -variable NBYTES. If the conversion is successful, the uppercase
91090 -variant of the wide character is stored in the RESULT array and the
91091 -pointer to the input string and the number of available bytes is
91092 -adjusted.
91094 - The only non-obvious thing about `mbrtowc' might be the way memory
91095 -is allocated for the result. The above code uses the fact that there
91096 -can never be more wide characters in the converted results than there
91097 -are bytes in the multibyte input string. This method yields a
91098 -pessimistic guess about the size of the result, and if many wide
91099 -character strings have to be constructed this way or if the strings are
91100 -long, the extra memory required to be allocated because the input
91101 -string contains multibyte characters might be significant. The
91102 -allocated memory block can be resized to the correct size before
91103 -returning it, but a better solution might be to allocate just the right
91104 -amount of space for the result right away. Unfortunately there is no
91105 -function to compute the length of the wide character string directly
91106 -from the multibyte string. There is, however, a function that does
91107 -part of the work.
91109 - - Function: size_t mbrlen (const char *restrict S, size_t N, mbstate_t
91110 - *PS)
91111 - The `mbrlen' function ("multibyte restartable length") computes
91112 - the number of at most N bytes starting at S, which form the next
91113 - valid and complete multibyte character.
91115 - If the next multibyte character corresponds to the NUL wide
91116 - character, the return value is 0. If the next N bytes form a valid
91117 - multibyte character, the number of bytes belonging to this
91118 - multibyte character byte sequence is returned.
91120 - If the the first N bytes possibly form a valid multibyte character
91121 - but the character is incomplete, the return value is `(size_t)
91122 - -2'. Otherwise the multibyte character sequence is invalid and
91123 - the return value is `(size_t) -1'.
91125 - The multibyte sequence is interpreted in the state represented by
91126 - the object pointed to by PS. If PS is a null pointer, a state
91127 - object local to `mbrlen' is used.
91129 - `mbrlen' was introduced in Amendment 1 to ISO C90 and is declared
91130 - in `wchar.h'.
91132 - The attentive reader now will note that `mbrlen' can be implemented
91135 - mbrtowc (NULL, s, n, ps != NULL ? ps : &internal)
91137 - This is true and in fact is mentioned in the official specification.
91138 -How can this function be used to determine the length of the wide
91139 -character string created from a multibyte character string? It is not
91140 -directly usable, but we can define a function `mbslen' using it:
91142 - size_t
91143 - mbslen (const char *s)
91145 - mbstate_t state;
91146 - size_t result = 0;
91147 - size_t nbytes;
91148 - memset (&state, '\0', sizeof (state));
91149 - while ((nbytes = mbrlen (s, MB_LEN_MAX, &state)) > 0)
91151 - if (nbytes >= (size_t) -2)
91152 - /* Something is wrong. */
91153 - return (size_t) -1;
91154 - s += nbytes;
91155 - ++result;
91157 - return result;
91160 - This function simply calls `mbrlen' for each multibyte character in
91161 -the string and counts the number of function calls. Please note that
91162 -we here use `MB_LEN_MAX' as the size argument in the `mbrlen' call.
91163 -This is acceptable since a) this value is larger then the length of the
91164 -longest multibyte character sequence and b) we know that the string S
91165 -ends with a NUL byte, which cannot be part of any other multibyte
91166 -character sequence but the one representing the NUL wide character.
91167 -Therefore, the `mbrlen' function will never read invalid memory.
91169 - Now that this function is available (just to make this clear, this
91170 -function is _not_ part of the GNU C library) we can compute the number
91171 -of wide character required to store the converted multibyte character
91172 -string S using
91174 - wcs_bytes = (mbslen (s) + 1) * sizeof (wchar_t);
91176 - Please note that the `mbslen' function is quite inefficient. The
91177 -implementation of `mbstouwcs' with `mbslen' would have to perform the
91178 -conversion of the multibyte character input string twice, and this
91179 -conversion might be quite expensive. So it is necessary to think about
91180 -the consequences of using the easier but imprecise method before doing
91181 -the work twice.
91183 - - Function: size_t wcrtomb (char *restrict S, wchar_t WC, mbstate_t
91184 - *restrict PS)
91185 - The `wcrtomb' function ("wide character restartable to multibyte")
91186 - converts a single wide character into a multibyte string
91187 - corresponding to that wide character.
91189 - If S is a null pointer, the function resets the state stored in
91190 - the objects pointed to by PS (or the internal `mbstate_t' object)
91191 - to the initial state. This can also be achieved by a call like
91192 - this:
91194 - wcrtombs (temp_buf, L'\0', ps)
91196 - since, if S is a null pointer, `wcrtomb' performs as if it writes
91197 - into an internal buffer, which is guaranteed to be large enough.
91199 - If WC is the NUL wide character, `wcrtomb' emits, if necessary, a
91200 - shift sequence to get the state PS into the initial state followed
91201 - by a single NUL byte, which is stored in the string S.
91203 - Otherwise a byte sequence (possibly including shift sequences) is
91204 - written into the string S. This only happens if WC is a valid wide
91205 - character (i.e., it has a multibyte representation in the
91206 - character set selected by locale of the `LC_CTYPE' category). If
91207 - WC is no valid wide character, nothing is stored in the strings S,
91208 - `errno' is set to `EILSEQ', the conversion state in PS is
91209 - undefined and the return value is `(size_t) -1'.
91211 - If no error occurred the function returns the number of bytes
91212 - stored in the string S. This includes all bytes representing shift
91213 - sequences.
91215 - One word about the interface of the function: there is no parameter
91216 - specifying the length of the array S. Instead the function
91217 - assumes that there are at least `MB_CUR_MAX' bytes available since
91218 - this is the maximum length of any byte sequence representing a
91219 - single character. So the caller has to make sure that there is
91220 - enough space available, otherwise buffer overruns can occur.
91222 - `wcrtomb' was introduced in Amendment 1 to ISO C90 and is declared
91223 - in `wchar.h'.
91225 - Using `wcrtomb' is as easy as using `mbrtowc'. The following
91226 -example appends a wide character string to a multibyte character string.
91227 -Again, the code is not really useful (or correct), it is simply here to
91228 -demonstrate the use and some problems.
91230 - char *
91231 - mbscatwcs (char *s, size_t len, const wchar_t *ws)
91233 - mbstate_t state;
91234 - /* Find the end of the existing string. */
91235 - char *wp = strchr (s, '\0');
91236 - len -= wp - s;
91237 - memset (&state, '\0', sizeof (state));
91238 - do
91240 - size_t nbytes;
91241 - if (len < MB_CUR_LEN)
91243 - /* We cannot guarantee that the next
91244 - character fits into the buffer, so
91245 - return an error. */
91246 - errno = E2BIG;
91247 - return NULL;
91249 - nbytes = wcrtomb (wp, *ws, &state);
91250 - if (nbytes == (size_t) -1)
91251 - /* Error in the conversion. */
91252 - return NULL;
91253 - len -= nbytes;
91254 - wp += nbytes;
91256 - while (*ws++ != L'\0');
91257 - return s;
91260 - First the function has to find the end of the string currently in the
91261 -array S. The `strchr' call does this very efficiently since a
91262 -requirement for multibyte character representations is that the NUL byte
91263 -is never used except to represent itself (and in this context, the end
91264 -of the string).
91266 - After initializing the state object the loop is entered where the
91267 -first task is to make sure there is enough room in the array S. We
91268 -abort if there are not at least `MB_CUR_LEN' bytes available. This is
91269 -not always optimal but we have no other choice. We might have less
91270 -than `MB_CUR_LEN' bytes available but the next multibyte character
91271 -might also be only one byte long. At the time the `wcrtomb' call
91272 -returns it is too late to decide whether the buffer was large enough.
91273 -If this solution is unsuitable, there is a very slow but more accurate
91274 -solution.
91276 - ...
91277 - if (len < MB_CUR_LEN)
91279 - mbstate_t temp_state;
91280 - memcpy (&temp_state, &state, sizeof (state));
91281 - if (wcrtomb (NULL, *ws, &temp_state) > len)
91283 - /* We cannot guarantee that the next
91284 - character fits into the buffer, so
91285 - return an error. */
91286 - errno = E2BIG;
91287 - return NULL;
91290 - ...
91292 - Here we perform the conversion that might overflow the buffer so that
91293 -we are afterwards in the position to make an exact decision about the
91294 -buffer size. Please note the `NULL' argument for the destination
91295 -buffer in the new `wcrtomb' call; since we are not interested in the
91296 -converted text at this point, this is a nice way to express this. The
91297 -most unusual thing about this piece of code certainly is the duplication
91298 -of the conversion state object, but if a change of the state is
91299 -necessary to emit the next multibyte character, we want to have the
91300 -same shift state change performed in the real conversion. Therefore,
91301 -we have to preserve the initial shift state information.
91303 - There are certainly many more and even better solutions to this
91304 -problem. This example is only provided for educational purposes.
91306 -\x1f
91307 -File: libc.info, Node: Converting Strings, Next: Multibyte Conversion Example, Prev: Converting a Character, Up: Restartable multibyte conversion
91309 -Converting Multibyte and Wide Character Strings
91310 ------------------------------------------------
91312 - The functions described in the previous section only convert a single
91313 -character at a time. Most operations to be performed in real-world
91314 -programs include strings and therefore the ISO C standard also defines
91315 -conversions on entire strings. However, the defined set of functions
91316 -is quite limited; therefore, the GNU C library contains a few
91317 -extensions that can help in some important situations.
91319 - - Function: size_t mbsrtowcs (wchar_t *restrict DST, const char
91320 - **restrict SRC, size_t LEN, mbstate_t *restrict PS)
91321 - The `mbsrtowcs' function ("multibyte string restartable to wide
91322 - character string") converts an NUL-terminated multibyte character
91323 - string at `*SRC' into an equivalent wide character string,
91324 - including the NUL wide character at the end. The conversion is
91325 - started using the state information from the object pointed to by
91326 - PS or from an internal object of `mbsrtowcs' if PS is a null
91327 - pointer. Before returning, the state object is updated to match
91328 - the state after the last converted character. The state is the
91329 - initial state if the terminating NUL byte is reached and converted.
91331 - If DST is not a null pointer, the result is stored in the array
91332 - pointed to by DST; otherwise, the conversion result is not
91333 - available since it is stored in an internal buffer.
91335 - If LEN wide characters are stored in the array DST before reaching
91336 - the end of the input string, the conversion stops and LEN is
91337 - returned. If DST is a null pointer, LEN is never checked.
91339 - Another reason for a premature return from the function call is if
91340 - the input string contains an invalid multibyte sequence. In this
91341 - case the global variable `errno' is set to `EILSEQ' and the
91342 - function returns `(size_t) -1'.
91344 - In all other cases the function returns the number of wide
91345 - characters converted during this call. If DST is not null,
91346 - `mbsrtowcs' stores in the pointer pointed to by SRC either a null
91347 - pointer (if the NUL byte in the input string was reached) or the
91348 - address of the byte following the last converted multibyte
91349 - character.
91351 - `mbsrtowcs' was introduced in Amendment 1 to ISO C90 and is
91352 - declared in `wchar.h'.
91354 - The definition of the `mbsrtowcs' function has one important
91355 -limitation. The requirement that DST has to be a NUL-terminated string
91356 -provides problems if one wants to convert buffers with text. A buffer
91357 -is normally no collection of NUL-terminated strings but instead a
91358 -continuous collection of lines, separated by newline characters. Now
91359 -assume that a function to convert one line from a buffer is needed.
91360 -Since the line is not NUL-terminated, the source pointer cannot
91361 -directly point into the unmodified text buffer. This means, either one
91362 -inserts the NUL byte at the appropriate place for the time of the
91363 -`mbsrtowcs' function call (which is not doable for a read-only buffer
91364 -or in a multi-threaded application) or one copies the line in an extra
91365 -buffer where it can be terminated by a NUL byte. Note that it is not
91366 -in general possible to limit the number of characters to convert by
91367 -setting the parameter LEN to any specific value. Since it is not known
91368 -how many bytes each multibyte character sequence is in length, one can
91369 -only guess.
91371 - There is still a problem with the method of NUL-terminating a line
91372 -right after the newline character, which could lead to very strange
91373 -results. As said in the description of the `mbsrtowcs' function above
91374 -the conversion state is guaranteed to be in the initial shift state
91375 -after processing the NUL byte at the end of the input string. But this
91376 -NUL byte is not really part of the text (i.e., the conversion state
91377 -after the newline in the original text could be something different
91378 -than the initial shift state and therefore the first character of the
91379 -next line is encoded using this state). But the state in question is
91380 -never accessible to the user since the conversion stops after the NUL
91381 -byte (which resets the state). Most stateful character sets in use
91382 -today require that the shift state after a newline be the initial
91383 -state-but this is not a strict guarantee. Therefore, simply
91384 -NUL-terminating a piece of a running text is not always an adequate
91385 -solution and, therefore, should never be used in generally used code.
91387 - The generic conversion interface (*note Generic Charset Conversion::)
91388 -does not have this limitation (it simply works on buffers, not
91389 -strings), and the GNU C library contains a set of functions that take
91390 -additional parameters specifying the maximal number of bytes that are
91391 -consumed from the input string. This way the problem of `mbsrtowcs''s
91392 -example above could be solved by determining the line length and
91393 -passing this length to the function.
91395 - - Function: size_t wcsrtombs (char *restrict DST, const wchar_t
91396 - **restrict SRC, size_t LEN, mbstate_t *restrict PS)
91397 - The `wcsrtombs' function ("wide character string restartable to
91398 - multibyte string") converts the NUL-terminated wide character
91399 - string at `*SRC' into an equivalent multibyte character string and
91400 - stores the result in the array pointed to by DST. The NUL wide
91401 - character is also converted. The conversion starts in the state
91402 - described in the object pointed to by PS or by a state object
91403 - locally to `wcsrtombs' in case PS is a null pointer. If DST is a
91404 - null pointer, the conversion is performed as usual but the result
91405 - is not available. If all characters of the input string were
91406 - successfully converted and if DST is not a null pointer, the
91407 - pointer pointed to by SRC gets assigned a null pointer.
91409 - If one of the wide characters in the input string has no valid
91410 - multibyte character equivalent, the conversion stops early, sets
91411 - the global variable `errno' to `EILSEQ', and returns `(size_t) -1'.
91413 - Another reason for a premature stop is if DST is not a null
91414 - pointer and the next converted character would require more than
91415 - LEN bytes in total to the array DST. In this case (and if DEST is
91416 - not a null pointer) the pointer pointed to by SRC is assigned a
91417 - value pointing to the wide character right after the last one
91418 - successfully converted.
91420 - Except in the case of an encoding error the return value of the
91421 - `wcsrtombs' function is the number of bytes in all the multibyte
91422 - character sequences stored in DST. Before returning the state in
91423 - the object pointed to by PS (or the internal object in case PS is
91424 - a null pointer) is updated to reflect the state after the last
91425 - conversion. The state is the initial shift state in case the
91426 - terminating NUL wide character was converted.
91428 - The `wcsrtombs' function was introduced in Amendment 1 to ISO C90
91429 - and is declared in `wchar.h'.
91431 - The restriction mentioned above for the `mbsrtowcs' function applies
91432 -here also. There is no possibility of directly controlling the number
91433 -of input characters. One has to place the NUL wide character at the
91434 -correct place or control the consumed input indirectly via the
91435 -available output array size (the LEN parameter).
91437 - - Function: size_t mbsnrtowcs (wchar_t *restrict DST, const char
91438 - **restrict SRC, size_t NMC, size_t LEN, mbstate_t *restrict
91439 - PS)
91440 - The `mbsnrtowcs' function is very similar to the `mbsrtowcs'
91441 - function. All the parameters are the same except for NMC, which is
91442 - new. The return value is the same as for `mbsrtowcs'.
91444 - This new parameter specifies how many bytes at most can be used
91445 - from the multibyte character string. In other words, the
91446 - multibyte character string `*SRC' need not be NUL-terminated. But
91447 - if a NUL byte is found within the NMC first bytes of the string,
91448 - the conversion stops here.
91450 - This function is a GNU extension. It is meant to work around the
91451 - problems mentioned above. Now it is possible to convert a buffer
91452 - with multibyte character text piece for piece without having to
91453 - care about inserting NUL bytes and the effect of NUL bytes on the
91454 - conversion state.
91456 - A function to convert a multibyte string into a wide character string
91457 -and display it could be written like this (this is not a really useful
91458 -example):
91460 - void
91461 - showmbs (const char *src, FILE *fp)
91463 - mbstate_t state;
91464 - int cnt = 0;
91465 - memset (&state, '\0', sizeof (state));
91466 - while (1)
91468 - wchar_t linebuf[100];
91469 - const char *endp = strchr (src, '\n');
91470 - size_t n;
91472 - /* Exit if there is no more line. */
91473 - if (endp == NULL)
91474 - break;
91476 - n = mbsnrtowcs (linebuf, &src, endp - src, 99, &state);
91477 - linebuf[n] = L'\0';
91478 - fprintf (fp, "line %d: \"%S\"\n", linebuf);
91482 - There is no problem with the state after a call to `mbsnrtowcs'.
91483 -Since we don't insert characters in the strings that were not in there
91484 -right from the beginning and we use STATE only for the conversion of
91485 -the given buffer, there is no problem with altering the state.
91487 - - Function: size_t wcsnrtombs (char *restrict DST, const wchar_t
91488 - **restrict SRC, size_t NWC, size_t LEN, mbstate_t *restrict
91489 - PS)
91490 - The `wcsnrtombs' function implements the conversion from wide
91491 - character strings to multibyte character strings. It is similar to
91492 - `wcsrtombs' but, just like `mbsnrtowcs', it takes an extra
91493 - parameter, which specifies the length of the input string.
91495 - No more than NWC wide characters from the input string `*SRC' are
91496 - converted. If the input string contains a NUL wide character in
91497 - the first NWC characters, the conversion stops at this place.
91499 - The `wcsnrtombs' function is a GNU extension and just like
91500 - `mbsnrtowcs' helps in situations where no NUL-terminated input
91501 - strings are available.
91503 diff -u -udbrN glibc-2.3.2/manual/libc.pg glibc-2.3.2-200304020432/manual/libc.pg
91504 --- glibc-2.3.2/manual/libc.pg Tue Feb 25 11:35:07 2003
91505 +++ glibc-2.3.2-200304020432/manual/libc.pg Thu Jan 1 01:00:00 1970
91506 @@ -1,289 +0,0 @@
91507 -\entry{gcc}{2}{\code {gcc}}
91508 -\entry{dirent.h}{7}{\code {dirent.h}}
91509 -\entry{fcntl.h}{7}{\code {fcntl.h}}
91510 -\entry{grp.h}{7}{\code {grp.h}}
91511 -\entry{limits.h}{7}{\code {limits.h}}
91512 -\entry{pwd.h}{7}{\code {pwd.h}}
91513 -\entry{signal.h}{7}{\code {signal.h}}
91514 -\entry{sys/stat.h}{7}{\code {sys/stat.h}}
91515 -\entry{sys/times.h}{7}{\code {sys/times.h}}
91516 -\entry{termios.h}{7}{\code {termios.h}}
91517 -\entry{-lbsd-compat}{8}{\code {-lbsd-compat}}
91518 -\entry{bsd-compat}{8}{\code {bsd-compat}}
91519 -\entry{errno.h}{15}{\code {errno.h}}
91520 -\entry{errno.h}{15}{\code {errno.h}}
91521 -\entry{errno.h}{16}{\code {errno.h}}
91522 -\entry{errno.h}{16}{\code {errno.h}}
91523 -\entry{stdlib.h}{34}{\code {stdlib.h}}
91524 -\entry{stdlib.h}{35}{\code {stdlib.h}}
91525 -\entry{stdlib.h}{36}{\code {stdlib.h}}
91526 -\entry{stdlib.h}{37}{\code {stdlib.h}}
91527 -\entry{stdlib.h}{38}{\code {stdlib.h}}
91528 -\entry{malloc.h}{39}{\code {malloc.h}}
91529 -\entry{mcheck.h}{39}{\code {mcheck.h}}
91530 -\entry{malloc.h}{41}{\code {malloc.h}}
91531 -\entry{malloc.h}{43}{\code {malloc.h}}
91532 -\entry{obstack.h}{49}{\code {obstack.h}}
91533 -\entry{stdlib.h}{59}{\code {stdlib.h}}
91534 -\entry{ctype.h}{67}{\code {ctype.h}}
91535 -\entry{ctype.h}{67}{\code {ctype.h}}
91536 -\entry{ctype.h}{69}{\code {ctype.h}}
91537 -\entry{wctype.h}{70}{\code {wctype.h}}
91538 -\entry{wctype.h}{70}{\code {wctype.h}}
91539 -\entry{wctype.h}{70}{\code {wctype.h}}
91540 -\entry{wctype.h}{70}{\code {wctype.h}}
91541 -\entry{wctype.h}{71}{\code {wctype.h}}
91542 -\entry{wctype.h}{71}{\code {wctype.h}}
91543 -\entry{wctype.h}{71}{\code {wctype.h}}
91544 -\entry{wctype.h}{71}{\code {wctype.h}}
91545 -\entry{wctype.h}{71}{\code {wctype.h}}
91546 -\entry{wctype.h}{71}{\code {wctype.h}}
91547 -\entry{wctype.h}{72}{\code {wctype.h}}
91548 -\entry{wctype.h}{72}{\code {wctype.h}}
91549 -\entry{wctype.h}{72}{\code {wctype.h}}
91550 -\entry{wctype.h}{72}{\code {wctype.h}}
91551 -\entry{wctype.h}{74}{\code {wctype.h}}
91552 -\entry{wctype.h}{74}{\code {wctype.h}}
91553 -\entry{wctype.h}{74}{\code {wctype.h}}
91554 -\entry{wctype.h}{74}{\code {wctype.h}}
91555 -\entry{wctype.h}{74}{\code {wctype.h}}
91556 -\entry{string.h}{77}{\code {string.h}}
91557 -\entry{string.h}{79}{\code {string.h}}
91558 -\entry{wchar.h}{79}{\code {wchar.h}}
91559 -\entry{string.h}{89}{\code {string.h}}
91560 -\entry{string.h}{92}{\code {string.h}}
91561 -\entry{wchar.h}{92}{\code {wchar.h}}
91562 -\entry{string.h}{96}{\code {string.h}}
91563 -\entry{string.h}{100}{\code {string.h}}
91564 -\entry{string.h}{105}{\code {string.h}}
91565 -\entry{argz.h}{107}{\code {argz.h}}
91566 -\entry{envz.h}{110}{\code {envz.h}}
91567 -\entry{wchar.h}{112}{\code {wchar.h}}
91568 -\entry{wchar.h}{113}{\code {wchar.h}}
91569 -\entry{limits.h}{116}{\code {limits.h}}
91570 -\entry{stdlib.h}{116}{\code {stdlib.h}}
91571 -\entry{wchar.h}{116}{\code {wchar.h}}
91572 -\entry{wchar.h}{117}{\code {wchar.h}}
91573 -\entry{wchar.h}{118}{\code {wchar.h}}
91574 -\entry{wchar.h}{118}{\code {wchar.h}}
91575 -\entry{wchar.h}{119}{\code {wchar.h}}
91576 -\entry{wchar.h}{120}{\code {wchar.h}}
91577 -\entry{wchar.h}{122}{\code {wchar.h}}
91578 -\entry{wchar.h}{123}{\code {wchar.h}}
91579 -\entry{wchar.h}{125}{\code {wchar.h}}
91580 -\entry{stdlib.h}{129}{\code {stdlib.h}}
91581 -\entry{iconv.h}{133}{\code {iconv.h}}
91582 -\entry{iconv.h}{133}{\code {iconv.h}}
91583 -\entry{iconv.h}{135}{\code {iconv.h}}
91584 -\entry{gconv.h}{142}{\code {gconv.h}}
91585 -\entry{locale.h}{155}{\code {locale.h}}
91586 -\entry{locale}{155}{\code {locale}}
91587 -\entry{locale.h}{158}{\code {locale.h}}
91588 -\entry{langinfo.h}{162}{\code {langinfo.h}}
91589 -\entry{stdlib.h}{196}{\code {stdlib.h}}
91590 -\entry{stdlib.h}{196}{\code {stdlib.h}}
91591 -\entry{fnmatch.h}{205}{\code {fnmatch.h}}
91592 -\entry{ksh}{206}{\code {ksh}}
91593 -\entry{stdio.h}{231}{\code {stdio.h}}
91594 -\entry{stdio.h}{231}{\code {stdio.h}}
91595 -\entry{stdio.h}{232}{\code {stdio.h}}
91596 -\entry{stdio.h}{241}{\code {stdio.h}}
91597 -\entry{wchar.h}{241}{\code {wchar.h}}
91598 -\entry{stdio.h}{243}{\code {stdio.h}}
91599 -\entry{wchar.h}{243}{\code {wchar.h}}
91600 -\entry{stdio.h}{249}{\code {stdio.h}}
91601 -\entry{stdio.h}{259}{\code {stdio.h}}
91602 -\entry{stdio.h}{262}{\code {stdio.h}}
91603 -\entry{printf.h}{266}{\code {printf.h}}
91604 -\entry{printf.h}{267}{\code {printf.h}}
91605 -\entry{stdio.h}{279}{\code {stdio.h}}
91606 -\entry{stdio.h}{284}{\code {stdio.h}}
91607 -\entry{stdio.h}{287}{\code {stdio.h}}
91608 -\entry{stdio.h}{289}{\code {stdio.h}}
91609 -\entry{stdio.h}{290}{\code {stdio.h}}
91610 -\entry{stdio.h}{292}{\code {stdio.h}}
91611 -\entry{stdio.h}{295}{\code {stdio.h}}
91612 -\entry{unistd.h}{303}{\code {unistd.h}}
91613 -\entry{fcntl.h}{303}{\code {fcntl.h}}
91614 -\entry{unistd.h}{306}{\code {unistd.h}}
91615 -\entry{stdio.h}{313}{\code {stdio.h}}
91616 -\entry{unistd.h}{313}{\code {unistd.h}}
91617 -\entry{sys/types.h}{321}{\code {sys/types.h}}
91618 -\entry{fcntl.h}{336}{\code {fcntl.h}}
91619 -\entry{unistd.h}{337}{\code {unistd.h}}
91620 -\entry{fcntl.h}{337}{\code {fcntl.h}}
91621 -\entry{fcntl.h}{339}{\code {fcntl.h}}
91622 -\entry{fcntl.h}{340}{\code {fcntl.h}}
91623 -\entry{fcntl.h}{346}{\code {fcntl.h}}
91624 -\entry{fcntl.h}{348}{\code {fcntl.h}}
91625 -\entry{cd}{351}{\code {cd}}
91626 -\entry{unistd.h}{351}{\code {unistd.h}}
91627 -\entry{dirent.h}{353}{\code {dirent.h}}
91628 -\entry{dirent.h}{354}{\code {dirent.h}}
91629 -\entry{dirent.h}{355}{\code {dirent.h}}
91630 -\entry{dirent.h}{357}{\code {dirent.h}}
91631 -\entry{unistd.h}{364}{\code {unistd.h}}
91632 -\entry{unistd.h}{365}{\code {unistd.h}}
91633 -\entry{unistd.h}{367}{\code {unistd.h}}
91634 -\entry{unistd.h}{368}{\code {unistd.h}}
91635 -\entry{stdio.h}{368}{\code {stdio.h}}
91636 -\entry{mkdir}{369}{\code {mkdir}}
91637 -\entry{sys/stat.h}{370}{\code {sys/stat.h}}
91638 -\entry{ls}{370}{\code {ls}}
91639 -\entry{sys/stat.h}{370}{\code {sys/stat.h}}
91640 -\entry{sys/stat.h}{376}{\code {sys/stat.h}}
91641 -\entry{chown}{377}{\code {chown}}
91642 -\entry{chgrp}{377}{\code {chgrp}}
91643 -\entry{unistd.h}{377}{\code {unistd.h}}
91644 -\entry{sys/stat.h}{378}{\code {sys/stat.h}}
91645 -\entry{umask}{381}{\code {umask}}
91646 -\entry{sys/stat.h}{381}{\code {sys/stat.h}}
91647 -\entry{unistd.h}{383}{\code {unistd.h}}
91648 -\entry{unistd.h}{383}{\code {unistd.h}}
91649 -\entry{time.h}{383}{\code {time.h}}
91650 -\entry{utime.h}{384}{\code {utime.h}}
91651 -\entry{sys/time.h}{385}{\code {sys/time.h}}
91652 -\entry{sys/stat.h}{388}{\code {sys/stat.h}}
91653 -\entry{stdio.h}{389}{\code {stdio.h}}
91654 -\entry{unistd.h}{393}{\code {unistd.h}}
91655 -\entry{sys/stat.h}{396}{\code {sys/stat.h}}
91656 -\entry{sys/socket.h}{400}{\code {sys/socket.h}}
91657 -\entry{sys/socket.h}{402}{\code {sys/socket.h}}
91658 -\entry{sys/socket.h}{403}{\code {sys/socket.h}}
91659 -\entry{sys/socket.h}{403}{\code {sys/socket.h}}
91660 -\entry{sys/socket.h}{405}{\code {sys/socket.h}}
91661 -\entry{sys/un.h}{406}{\code {sys/un.h}}
91662 -\entry{sys/socket.h}{407}{\code {sys/socket.h}}
91663 -\entry{netinet/in.h}{408}{\code {netinet/in.h}}
91664 -\entry{netinet/in.h}{411}{\code {netinet/in.h}}
91665 -\entry{arpa/inet.h}{411}{\code {arpa/inet.h}}
91666 -\entry{/etc/hosts}{413}{\code {/etc/hosts}}
91667 -\entry{netdb.h}{413}{\code {netdb.h}}
91668 -\entry{netinet/in.h}{417}{\code {netinet/in.h}}
91669 -\entry{/etc/services}{417}{\code {/etc/services}}
91670 -\entry{netdb.h}{417}{\code {netdb.h}}
91671 -\entry{netinet/in.h}{418}{\code {netinet/in.h}}
91672 -\entry{/etc/protocols}{419}{\code {/etc/protocols}}
91673 -\entry{netdb.h}{419}{\code {netdb.h}}
91674 -\entry{sys/socket.h}{422}{\code {sys/socket.h}}
91675 -\entry{sys/socket.h}{422}{\code {sys/socket.h}}
91676 -\entry{sys/socket.h}{423}{\code {sys/socket.h}}
91677 -\entry{sys/socket.h}{428}{\code {sys/socket.h}}
91678 -\entry{sys/socket.h}{428}{\code {sys/socket.h}}
91679 -\entry{sys/socket.h}{429}{\code {sys/socket.h}}
91680 -\entry{sys/socket.h}{436}{\code {sys/socket.h}}
91681 -\entry{sys/socket.h}{441}{\code {sys/socket.h}}
91682 -\entry{sys/socket.h}{441}{\code {sys/socket.h}}
91683 -\entry{/etc/networks}{443}{\code {/etc/networks}}
91684 -\entry{netdb.h}{443}{\code {netdb.h}}
91685 -\entry{unistd.h}{445}{\code {unistd.h}}
91686 -\entry{termios.h}{447}{\code {termios.h}}
91687 -\entry{stdlib.h}{468}{\code {stdlib.h}}
91688 -\entry{math.h}{479}{\code {math.h}}
91689 -\entry{complex.h}{479}{\code {complex.h}}
91690 -\entry{stdlib.h}{508}{\code {stdlib.h}}
91691 -\entry{stdlib.h}{509}{\code {stdlib.h}}
91692 -\entry{stdlib.h}{511}{\code {stdlib.h}}
91693 -\entry{stdint.h}{517}{\code {stdint.h}}
91694 -\entry{stdlib.h}{518}{\code {stdlib.h}}
91695 -\entry{math.h}{520}{\code {math.h}}
91696 -\entry{math.h}{530}{\code {math.h}}
91697 -\entry{stdlib.h}{530}{\code {stdlib.h}}
91698 -\entry{math.h}{531}{\code {math.h}}
91699 -\entry{math.h}{532}{\code {math.h}}
91700 -\entry{complex.h}{538}{\code {complex.h}}
91701 -\entry{complex.h}{539}{\code {complex.h}}
91702 -\entry{stdlib.h}{540}{\code {stdlib.h}}
91703 -\entry{wchar.h}{540}{\code {wchar.h}}
91704 -\entry{stdlib.h}{544}{\code {stdlib.h}}
91705 -\entry{time.h}{551}{\code {time.h}}
91706 -\entry{sys/times.h}{552}{\code {sys/times.h}}
91707 -\entry{time.h}{553}{\code {time.h}}
91708 -\entry{sys/time.h}{554}{\code {sys/time.h}}
91709 -\entry{sys/timex.h}{559}{\code {sys/timex.h}}
91710 -\entry{time.h}{562}{\code {time.h}}
91711 -\entry{time.h}{575}{\code {time.h}}
91712 -\entry{/etc/localtime}{576}{\code {/etc/localtime}}
91713 -\entry{localtime}{576}{\code {localtime}}
91714 -\entry{/share/lib/zoneinfo}{576}{\code {/share/lib/zoneinfo}}
91715 -\entry{zoneinfo}{576}{\code {zoneinfo}}
91716 -\entry{unistd.h}{579}{\code {unistd.h}}
91717 -\entry{sys/time.h}{579}{\code {sys/time.h}}
91718 -\entry{sys/resource.h}{583}{\code {sys/resource.h}}
91719 -\entry{sys/vtimes.h}{584}{\code {sys/vtimes.h}}
91720 -\entry{sys/resource.h}{586}{\code {sys/resource.h}}
91721 -\entry{ulimit.h}{588}{\code {ulimit.h}}
91722 -\entry{sys/vlimit.h}{588}{\code {sys/vlimit.h}}
91723 -\entry{sys/resource.h}{596}{\code {sys/resource.h}}
91724 -\entry{setjmp.h}{602}{\code {setjmp.h}}
91725 -\entry{setjmp.h}{603}{\code {setjmp.h}}
91726 -\entry{signal.h}{613}{\code {signal.h}}
91727 -\entry{kill}{616}{\code {kill}}
91728 -\entry{string.h}{621}{\code {string.h}}
91729 -\entry{stdio.h}{622}{\code {stdio.h}}
91730 -\entry{signal.h}{622}{\code {signal.h}}
91731 -\entry{signal.h}{624}{\code {signal.h}}
91732 -\entry{signal.h}{627}{\code {signal.h}}
91733 -\entry{signal.h}{639}{\code {signal.h}}
91734 -\entry{signal.h}{640}{\code {signal.h}}
91735 -\entry{signal.h}{644}{\code {signal.h}}
91736 -\entry{signal.h}{645}{\code {signal.h}}
91737 -\entry{signal.h}{647}{\code {signal.h}}
91738 -\entry{signal.h}{654}{\code {signal.h}}
91739 -\entry{unistd.h}{659}{\code {unistd.h}}
91740 -\entry{argp.h}{666}{\code {argp.h}}
91741 -\entry{stdlib.h}{691}{\code {stdlib.h}}
91742 -\entry{stdlib.h}{697}{\code {stdlib.h}}
91743 -\entry{stdlib.h}{699}{\code {stdlib.h}}
91744 -\entry{unistd.h}{699}{\code {unistd.h}}
91745 -\entry{sh}{701}{\code {sh}}
91746 -\entry{stdlib.h}{701}{\code {stdlib.h}}
91747 -\entry{sys/types.h}{702}{\code {sys/types.h}}
91748 -\entry{unistd.h}{702}{\code {unistd.h}}
91749 -\entry{unistd.h}{703}{\code {unistd.h}}
91750 -\entry{unistd.h}{704}{\code {unistd.h}}
91751 -\entry{sys/wait.h}{706}{\code {sys/wait.h}}
91752 -\entry{sys/wait.h}{709}{\code {sys/wait.h}}
91753 -\entry{sys/wait.h}{709}{\code {sys/wait.h}}
91754 -\entry{stdio.h}{728}{\code {stdio.h}}
91755 -\entry{unistd.h}{728}{\code {unistd.h}}
91756 -\entry{sys/types.h}{728}{\code {sys/types.h}}
91757 -\entry{-lbsd-compat}{729}{\code {-lbsd-compat}}
91758 -\entry{bsd-compat}{729}{\code {bsd-compat}}
91759 -\entry{unistd.h}{730}{\code {unistd.h}}
91760 -\entry{sys/types.h}{730}{\code {sys/types.h}}
91761 -\entry{unistd.h}{745}{\code {unistd.h}}
91762 -\entry{sys/types.h}{745}{\code {sys/types.h}}
91763 -\entry{unistd.h}{746}{\code {unistd.h}}
91764 -\entry{sys/types.h}{746}{\code {sys/types.h}}
91765 -\entry{unistd.h}{747}{\code {unistd.h}}
91766 -\entry{sys/types.h}{747}{\code {sys/types.h}}
91767 -\entry{grp.h}{748}{\code {grp.h}}
91768 -\entry{grp.h}{748}{\code {grp.h}}
91769 -\entry{stdio.h}{753}{\code {stdio.h}}
91770 -\entry{unistd.h}{753}{\code {unistd.h}}
91771 -\entry{utmp.h}{754}{\code {utmp.h}}
91772 -\entry{utmpx.h}{758}{\code {utmpx.h}}
91773 -\entry{utmp.h}{760}{\code {utmp.h}}
91774 -\entry{/etc/passwd}{761}{\code {/etc/passwd}}
91775 -\entry{pwd.h}{761}{\code {pwd.h}}
91776 -\entry{/etc/group}{764}{\code {/etc/group}}
91777 -\entry{grp.h}{764}{\code {grp.h}}
91778 -\entry{hostname}{771}{\code {hostname}}
91779 -\entry{hostid}{771}{\code {hostid}}
91780 -\entry{unistd.h}{771}{\code {unistd.h}}
91781 -\entry{sys/param.h}{772}{\code {sys/param.h}}
91782 -\entry{sys/utsname.h}{773}{\code {sys/utsname.h}}
91783 -\entry{limits.h}{787}{\code {limits.h}}
91784 -\entry{unistd.h}{788}{\code {unistd.h}}
91785 -\entry{limits.h}{799}{\code {limits.h}}
91786 -\entry{unistd.h}{800}{\code {unistd.h}}
91787 -\entry{unistd.h}{801}{\code {unistd.h}}
91788 -\entry{execinfo.h}{817}{\code {execinfo.h}}
91789 -\entry{assert.h}{841}{\code {assert.h}}
91790 -\entry{stdarg.h}{844}{\code {stdarg.h}}
91791 -\entry{stdarg.h}{846}{\code {stdarg.h}}
91792 -\entry{varargs.h}{847}{\code {varargs.h}}
91793 -\entry{stddef.h}{849}{\code {stddef.h}}
91794 -\entry{limits.h}{850}{\code {limits.h}}
91795 -\entry{float.h}{853}{\code {float.h}}
91796 diff -u -udbrN glibc-2.3.2/manual/libc.pgs glibc-2.3.2-200304020432/manual/libc.pgs
91797 --- glibc-2.3.2/manual/libc.pgs Tue Feb 25 11:34:58 2003
91798 +++ glibc-2.3.2-200304020432/manual/libc.pgs Thu Jan 1 01:00:00 1970
91799 @@ -1,106 +0,0 @@
91800 -\initial {-}
91801 -\entry {\code {-lbsd-compat}}{8, 729}
91802 -\initial {/}
91803 -\entry {\code {/etc/group}}{764}
91804 -\entry {\code {/etc/hosts}}{413}
91805 -\entry {\code {/etc/localtime}}{576}
91806 -\entry {\code {/etc/networks}}{443}
91807 -\entry {\code {/etc/passwd}}{761}
91808 -\entry {\code {/etc/protocols}}{419}
91809 -\entry {\code {/etc/services}}{417}
91810 -\entry {\code {/share/lib/zoneinfo}}{576}
91811 -\initial {A}
91812 -\entry {\code {argp.h}}{666}
91813 -\entry {\code {argz.h}}{107}
91814 -\entry {\code {arpa/inet.h}}{411}
91815 -\entry {\code {assert.h}}{841}
91816 -\initial {B}
91817 -\entry {\code {bsd-compat}}{8, 729}
91818 -\initial {C}
91819 -\entry {\code {cd}}{351}
91820 -\entry {\code {chgrp}}{377}
91821 -\entry {\code {chown}}{377}
91822 -\entry {\code {complex.h}}{479, 538, 539}
91823 -\entry {\code {ctype.h}}{67, 69}
91824 -\initial {D}
91825 -\entry {\code {dirent.h}}{7, 353, 354, 355, 357}
91826 -\initial {E}
91827 -\entry {\code {envz.h}}{110}
91828 -\entry {\code {errno.h}}{15, 16}
91829 -\entry {\code {execinfo.h}}{817}
91830 -\initial {F}
91831 -\entry {\code {fcntl.h}}{7, 303, 336, 337, 339, 340, 346, 348}
91832 -\entry {\code {float.h}}{853}
91833 -\entry {\code {fnmatch.h}}{205}
91834 -\initial {G}
91835 -\entry {\code {gcc}}{2}
91836 -\entry {\code {gconv.h}}{142}
91837 -\entry {\code {grp.h}}{7, 748, 764}
91838 -\initial {H}
91839 -\entry {\code {hostid}}{771}
91840 -\entry {\code {hostname}}{771}
91841 -\initial {I}
91842 -\entry {\code {iconv.h}}{133, 135}
91843 -\initial {K}
91844 -\entry {\code {kill}}{616}
91845 -\entry {\code {ksh}}{206}
91846 -\initial {L}
91847 -\entry {\code {langinfo.h}}{162}
91848 -\entry {\code {limits.h}}{7, 116, 787, 799, 850}
91849 -\entry {\code {locale}}{155}
91850 -\entry {\code {locale.h}}{155, 158}
91851 -\entry {\code {localtime}}{576}
91852 -\entry {\code {ls}}{370}
91853 -\initial {M}
91854 -\entry {\code {malloc.h}}{39, 41, 43}
91855 -\entry {\code {math.h}}{479, 520, 530, 531, 532}
91856 -\entry {\code {mcheck.h}}{39}
91857 -\entry {\code {mkdir}}{369}
91858 -\initial {N}
91859 -\entry {\code {netdb.h}}{413, 417, 419, 443}
91860 -\entry {\code {netinet/in.h}}{408, 411, 417, 418}
91861 -\initial {O}
91862 -\entry {\code {obstack.h}}{49}
91863 -\initial {P}
91864 -\entry {\code {printf.h}}{266, 267}
91865 -\entry {\code {pwd.h}}{7, 761}
91866 -\initial {S}
91867 -\entry {\code {setjmp.h}}{602, 603}
91868 -\entry {\code {sh}}{701}
91869 -\entry {\code {signal.h}}{7, 613, 622, 624, 627, 639, 640, 644, 645, 647, 654}
91870 -\entry {\code {stdarg.h}}{844, 846}
91871 -\entry {\code {stddef.h}}{849}
91872 -\entry {\code {stdint.h}}{517}
91873 -\entry {\code {stdio.h}}{231, 232, 241, 243, 249, 259, 262, 279, 284, 287, 289, 290, 292, 295, 313, 368, 389, 622, 728, 753}
91874 -\entry {\code {stdlib.h}}{34, 35, 36, 37, 38, 59, 116, 129, 196, 468, 508, 509, 511, 518, 530, 540, 544, 691, 697, 699, 701}
91875 -\entry {\code {string.h}}{77, 79, 89, 92, 96, 100, 105, 621}
91876 -\entry {\code {sys/param.h}}{772}
91877 -\entry {\code {sys/resource.h}}{583, 586, 596}
91878 -\entry {\code {sys/socket.h}}{400, 402, 403, 405, 407, 422, 423, 428, 429, 436, 441}
91879 -\entry {\code {sys/stat.h}}{7, 370, 376, 378, 381, 388, 396}
91880 -\entry {\code {sys/time.h}}{385, 554, 579}
91881 -\entry {\code {sys/times.h}}{7, 552}
91882 -\entry {\code {sys/timex.h}}{559}
91883 -\entry {\code {sys/types.h}}{321, 702, 728, 730, 745, 746, 747}
91884 -\entry {\code {sys/un.h}}{406}
91885 -\entry {\code {sys/utsname.h}}{773}
91886 -\entry {\code {sys/vlimit.h}}{588}
91887 -\entry {\code {sys/vtimes.h}}{584}
91888 -\entry {\code {sys/wait.h}}{706, 709}
91889 -\initial {T}
91890 -\entry {\code {termios.h}}{7, 447}
91891 -\entry {\code {time.h}}{383, 551, 553, 562, 575}
91892 -\initial {U}
91893 -\entry {\code {ulimit.h}}{588}
91894 -\entry {\code {umask}}{381}
91895 -\entry {\code {unistd.h}}{303, 306, 313, 337, 351, 364, 365, 367, 368, 377, 383, 393, 445, 579, 659, 699, 702, 703, 704, 728, 730, 745, 746, 747, 753, 771, 788, 800, 801}
91896 -\entry {\code {utime.h}}{384}
91897 -\entry {\code {utmp.h}}{754, 760}
91898 -\entry {\code {utmpx.h}}{758}
91899 -\initial {V}
91900 -\entry {\code {varargs.h}}{847}
91901 -\initial {W}
91902 -\entry {\code {wchar.h}}{79, 92, 112, 113, 116, 117, 118, 119, 120, 122, 123, 125, 241, 243, 540}
91903 -\entry {\code {wctype.h}}{70, 71, 72, 74}
91904 -\initial {Z}
91905 -\entry {\code {zoneinfo}}{576}
91906 diff -u -udbrN glibc-2.3.2/manual/libc.tp glibc-2.3.2-200304020432/manual/libc.tp
91907 --- glibc-2.3.2/manual/libc.tp Tue Feb 25 11:35:07 2003
91908 +++ glibc-2.3.2-200304020432/manual/libc.tp Thu Jan 1 01:00:00 1970
91909 @@ -1,127 +0,0 @@
91910 -\entry{enum mcheck_status}{40}{\code {enum mcheck_status}}
91911 -\entry{struct mallinfo}{43}{\code {struct mallinfo}}
91912 -\entry{struct obstack}{49}{\code {struct obstack}}
91913 -\entry{wctype_t}{70}{\code {wctype_t}}
91914 -\entry{wctrans_t}{74}{\code {wctrans_t}}
91915 -\entry{wchar_t}{112}{\code {wchar_t}}
91916 -\entry{wint_t}{112}{\code {wint_t}}
91917 -\entry{mbstate_t}{116}{\code {mbstate_t}}
91918 -\entry{iconv_t}{132}{\code {iconv_t}}
91919 -\entry{struct __gconv_step}{142}{\code {struct __gconv_step}}
91920 -\entry{struct __gconv_step_data}{143}{\code {struct __gconv_step_data}}
91921 -\entry{struct lconv}{158}{\code {struct lconv}}
91922 -\entry{comparison_fn_t}{195}{\code {comparison_fn_t}}
91923 -\entry{struct ENTRY}{200}{\code {struct ENTRY}}
91924 -\entry{VISIT}{203}{\code {VISIT}}
91925 -\entry{glob_t}{207}{\code {glob_t}}
91926 -\entry{glob64_t}{208}{\code {glob64_t}}
91927 -\entry{regex_t}{213}{\code {regex_t}}
91928 -\entry{regmatch_t}{216}{\code {regmatch_t}}
91929 -\entry{regoff_t}{217}{\code {regoff_t}}
91930 -\entry{wordexp_t}{219}{\code {wordexp_t}}
91931 -\entry{FILE}{231}{\code {FILE}}
91932 -\entry{struct printf_info}{267}{\code {struct printf_info}}
91933 -\entry{printf_function}{269}{\code {printf_function}}
91934 -\entry{printf_arginfo_function}{269}{\code {printf_arginfo_function}}
91935 -\entry{fpos_t}{287}{\code {fpos_t}}
91936 -\entry{fpos64_t}{287}{\code {fpos64_t}}
91937 -\entry{cookie_io_functions_t}{295}{\code {cookie_io_functions_t}}
91938 -\entry{cookie_read_function}{297}{\code {cookie_read_function}}
91939 -\entry{cookie_write_function}{297}{\code {cookie_write_function}}
91940 -\entry{cookie_seek_function}{297}{\code {cookie_seek_function}}
91941 -\entry{cookie_close_function}{297}{\code {cookie_close_function}}
91942 -\entry{ssize_t}{306}{\code {ssize_t}}
91943 -\entry{off_t}{312}{\code {off_t}}
91944 -\entry{off64_t}{312}{\code {off64_t}}
91945 -\entry{struct iovec}{316}{\code {struct iovec}}
91946 -\entry{fd_set}{321}{\code {fd_set}}
91947 -\entry{struct aiocb}{325}{\code {struct aiocb}}
91948 -\entry{struct aiocb64}{326}{\code {struct aiocb64}}
91949 -\entry{struct aioinit}{335}{\code {struct aioinit}}
91950 -\entry{struct flock}{346}{\code {struct flock}}
91951 -\entry{struct dirent}{353}{\code {struct dirent}}
91952 -\entry{DIR}{354}{\code {DIR}}
91953 -\entry{__ftw_func_t}{360}{\code {__ftw_func_t}}
91954 -\entry{__ftw64_func_t}{361}{\code {__ftw64_func_t}}
91955 -\entry{__nftw_func_t}{361}{\code {__nftw_func_t}}
91956 -\entry{__nftw64_func_t}{361}{\code {__nftw64_func_t}}
91957 -\entry{struct FTW}{361}{\code {struct FTW}}
91958 -\entry{struct stat}{370}{\code {struct stat}}
91959 -\entry{struct stat64}{372}{\code {struct stat64}}
91960 -\entry{mode_t}{373}{\code {mode_t}}
91961 -\entry{ino_t}{373}{\code {ino_t}}
91962 -\entry{ino64_t}{373}{\code {ino64_t}}
91963 -\entry{dev_t}{374}{\code {dev_t}}
91964 -\entry{nlink_t}{374}{\code {nlink_t}}
91965 -\entry{blkcnt_t}{374}{\code {blkcnt_t}}
91966 -\entry{blkcnt64_t}{374}{\code {blkcnt64_t}}
91967 -\entry{struct utimbuf}{384}{\code {struct utimbuf}}
91968 -\entry{struct sockaddr}{402}{\code {struct sockaddr}}
91969 -\entry{struct if_nameindex}{404}{\code {struct if_nameindex}}
91970 -\entry{struct sockaddr_un}{406}{\code {struct sockaddr_un}}
91971 -\entry{struct sockaddr_in}{408}{\code {struct sockaddr_in}}
91972 -\entry{struct sockaddr_in6}{408}{\code {struct sockaddr_in6}}
91973 -\entry{struct in_addr}{411}{\code {struct in_addr}}
91974 -\entry{struct in6_addr}{411}{\code {struct in6_addr}}
91975 -\entry{struct hostent}{413}{\code {struct hostent}}
91976 -\entry{struct servent}{417}{\code {struct servent}}
91977 -\entry{struct protoent}{419}{\code {struct protoent}}
91978 -\entry{struct linger}{442}{\code {struct linger}}
91979 -\entry{struct netent}{443}{\code {struct netent}}
91980 -\entry{struct termios}{447}{\code {struct termios}}
91981 -\entry{tcflag_t}{448}{\code {tcflag_t}}
91982 -\entry{cc_t}{448}{\code {cc_t}}
91983 -\entry{speed_t}{457}{\code {speed_t}}
91984 -\entry{struct sgttyb}{464}{\code {struct sgttyb}}
91985 -\entry{struct random_data}{510}{\code {struct random_data}}
91986 -\entry{div_t}{518}{\code {div_t}}
91987 -\entry{ldiv_t}{519}{\code {ldiv_t}}
91988 -\entry{lldiv_t}{519}{\code {lldiv_t}}
91989 -\entry{imaxdiv_t}{519}{\code {imaxdiv_t}}
91990 -\entry{struct timeval}{550}{\code {struct timeval}}
91991 -\entry{struct timespec}{550}{\code {struct timespec}}
91992 -\entry{clock_t}{552}{\code {clock_t}}
91993 -\entry{struct tms}{552}{\code {struct tms}}
91994 -\entry{time_t}{553}{\code {time_t}}
91995 -\entry{struct timezone}{554}{\code {struct timezone}}
91996 -\entry{struct tm}{556}{\code {struct tm}}
91997 -\entry{struct ntptimeval}{559}{\code {struct ntptimeval}}
91998 -\entry{struct ntptimeval}{559}{\code {struct ntptimeval}}
91999 -\entry{struct timex}{559}{\code {struct timex}}
92000 -\entry{struct timex}{560}{\code {struct timex}}
92001 -\entry{struct itimerval}{579}{\code {struct itimerval}}
92002 -\entry{struct rusage}{583}{\code {struct rusage}}
92003 -\entry{struct vtimes}{585}{\code {struct vtimes}}
92004 -\entry{struct rlimit}{586}{\code {struct rlimit}}
92005 -\entry{struct rlimit64}{587}{\code {struct rlimit64}}
92006 -\entry{struct sched_param}{592}{\code {struct sched_param}}
92007 -\entry{jmp_buf}{602}{\code {jmp_buf}}
92008 -\entry{sigjmp_buf}{603}{\code {sigjmp_buf}}
92009 -\entry{ucontext_t}{604}{\code {ucontext_t}}
92010 -\entry{sighandler_t}{622}{\code {sighandler_t}}
92011 -\entry{struct sigaction}{624}{\code {struct sigaction}}
92012 -\entry{sig_atomic_t}{637}{\code {sig_atomic_t}}
92013 -\entry{sigset_t}{644}{\code {sigset_t}}
92014 -\entry{stack_t}{652}{\code {stack_t}}
92015 -\entry{struct sigstack}{653}{\code {struct sigstack}}
92016 -\entry{struct sigvec}{654}{\code {struct sigvec}}
92017 -\entry{struct option}{662}{\code {struct option}}
92018 -\entry{struct argp}{667}{\code {struct argp}}
92019 -\entry{struct argp_option}{668}{\code {struct argp_option}}
92020 -\entry{struct argp_state}{675}{\code {struct argp_state}}
92021 -\entry{struct argp_child}{676}{\code {struct argp_child}}
92022 -\entry{pid_t}{702}{\code {pid_t}}
92023 -\entry{union wait}{709}{\code {union wait}}
92024 -\entry{uid_t}{745}{\code {uid_t}}
92025 -\entry{gid_t}{745}{\code {gid_t}}
92026 -\entry{struct exit_status}{754}{\code {struct exit_status}}
92027 -\entry{struct utmp}{754}{\code {struct utmp}}
92028 -\entry{struct utmpx}{758}{\code {struct utmpx}}
92029 -\entry{struct passwd}{761}{\code {struct passwd}}
92030 -\entry{struct group}{764}{\code {struct group}}
92031 -\entry{struct utsname}{773}{\code {struct utsname}}
92032 -\entry{struct fstab}{775}{\code {struct fstab}}
92033 -\entry{struct mntent}{777}{\code {struct mntent}}
92034 -\entry{va_list}{846}{\code {va_list}}
92035 -\entry{ptrdiff_t}{849}{\code {ptrdiff_t}}
92036 -\entry{size_t}{849}{\code {size_t}}
92037 diff -u -udbrN glibc-2.3.2/manual/libc.tps glibc-2.3.2-200304020432/manual/libc.tps
92038 --- glibc-2.3.2/manual/libc.tps Tue Feb 25 11:34:58 2003
92039 +++ glibc-2.3.2-200304020432/manual/libc.tps Thu Jan 1 01:00:00 1970
92040 @@ -1,145 +0,0 @@
92041 -\initial {_}
92042 -\entry {\code {__ftw_func_t}}{360}
92043 -\entry {\code {__ftw64_func_t}}{361}
92044 -\entry {\code {__nftw_func_t}}{361}
92045 -\entry {\code {__nftw64_func_t}}{361}
92046 -\initial {B}
92047 -\entry {\code {blkcnt_t}}{374}
92048 -\entry {\code {blkcnt64_t}}{374}
92049 -\initial {C}
92050 -\entry {\code {cc_t}}{448}
92051 -\entry {\code {clock_t}}{552}
92052 -\entry {\code {comparison_fn_t}}{195}
92053 -\entry {\code {cookie_close_function}}{297}
92054 -\entry {\code {cookie_io_functions_t}}{295}
92055 -\entry {\code {cookie_read_function}}{297}
92056 -\entry {\code {cookie_seek_function}}{297}
92057 -\entry {\code {cookie_write_function}}{297}
92058 -\initial {D}
92059 -\entry {\code {dev_t}}{374}
92060 -\entry {\code {DIR}}{354}
92061 -\entry {\code {div_t}}{518}
92062 -\initial {E}
92063 -\entry {\code {enum mcheck_status}}{40}
92064 -\initial {F}
92065 -\entry {\code {fd_set}}{321}
92066 -\entry {\code {FILE}}{231}
92067 -\entry {\code {fpos_t}}{287}
92068 -\entry {\code {fpos64_t}}{287}
92069 -\initial {G}
92070 -\entry {\code {gid_t}}{745}
92071 -\entry {\code {glob_t}}{207}
92072 -\entry {\code {glob64_t}}{208}
92073 -\initial {I}
92074 -\entry {\code {iconv_t}}{132}
92075 -\entry {\code {imaxdiv_t}}{519}
92076 -\entry {\code {ino_t}}{373}
92077 -\entry {\code {ino64_t}}{373}
92078 -\initial {J}
92079 -\entry {\code {jmp_buf}}{602}
92080 -\initial {L}
92081 -\entry {\code {ldiv_t}}{519}
92082 -\entry {\code {lldiv_t}}{519}
92083 -\initial {M}
92084 -\entry {\code {mbstate_t}}{116}
92085 -\entry {\code {mode_t}}{373}
92086 -\initial {N}
92087 -\entry {\code {nlink_t}}{374}
92088 -\initial {O}
92089 -\entry {\code {off_t}}{312}
92090 -\entry {\code {off64_t}}{312}
92091 -\initial {P}
92092 -\entry {\code {pid_t}}{702}
92093 -\entry {\code {printf_arginfo_function}}{269}
92094 -\entry {\code {printf_function}}{269}
92095 -\entry {\code {ptrdiff_t}}{849}
92096 -\initial {R}
92097 -\entry {\code {regex_t}}{213}
92098 -\entry {\code {regmatch_t}}{216}
92099 -\entry {\code {regoff_t}}{217}
92100 -\initial {S}
92101 -\entry {\code {sig_atomic_t}}{637}
92102 -\entry {\code {sighandler_t}}{622}
92103 -\entry {\code {sigjmp_buf}}{603}
92104 -\entry {\code {sigset_t}}{644}
92105 -\entry {\code {size_t}}{849}
92106 -\entry {\code {speed_t}}{457}
92107 -\entry {\code {ssize_t}}{306}
92108 -\entry {\code {stack_t}}{652}
92109 -\entry {\code {struct __gconv_step}}{142}
92110 -\entry {\code {struct __gconv_step_data}}{143}
92111 -\entry {\code {struct aiocb}}{325}
92112 -\entry {\code {struct aiocb64}}{326}
92113 -\entry {\code {struct aioinit}}{335}
92114 -\entry {\code {struct argp}}{667}
92115 -\entry {\code {struct argp_child}}{676}
92116 -\entry {\code {struct argp_option}}{668}
92117 -\entry {\code {struct argp_state}}{675}
92118 -\entry {\code {struct dirent}}{353}
92119 -\entry {\code {struct ENTRY}}{200}
92120 -\entry {\code {struct exit_status}}{754}
92121 -\entry {\code {struct flock}}{346}
92122 -\entry {\code {struct fstab}}{775}
92123 -\entry {\code {struct FTW}}{361}
92124 -\entry {\code {struct group}}{764}
92125 -\entry {\code {struct hostent}}{413}
92126 -\entry {\code {struct if_nameindex}}{404}
92127 -\entry {\code {struct in_addr}}{411}
92128 -\entry {\code {struct in6_addr}}{411}
92129 -\entry {\code {struct iovec}}{316}
92130 -\entry {\code {struct itimerval}}{579}
92131 -\entry {\code {struct lconv}}{158}
92132 -\entry {\code {struct linger}}{442}
92133 -\entry {\code {struct mallinfo}}{43}
92134 -\entry {\code {struct mntent}}{777}
92135 -\entry {\code {struct netent}}{443}
92136 -\entry {\code {struct ntptimeval}}{559}
92137 -\entry {\code {struct obstack}}{49}
92138 -\entry {\code {struct option}}{662}
92139 -\entry {\code {struct passwd}}{761}
92140 -\entry {\code {struct printf_info}}{267}
92141 -\entry {\code {struct protoent}}{419}
92142 -\entry {\code {struct random_data}}{510}
92143 -\entry {\code {struct rlimit}}{586}
92144 -\entry {\code {struct rlimit64}}{587}
92145 -\entry {\code {struct rusage}}{583}
92146 -\entry {\code {struct sched_param}}{592}
92147 -\entry {\code {struct servent}}{417}
92148 -\entry {\code {struct sgttyb}}{464}
92149 -\entry {\code {struct sigaction}}{624}
92150 -\entry {\code {struct sigstack}}{653}
92151 -\entry {\code {struct sigvec}}{654}
92152 -\entry {\code {struct sockaddr}}{402}
92153 -\entry {\code {struct sockaddr_in}}{408}
92154 -\entry {\code {struct sockaddr_in6}}{408}
92155 -\entry {\code {struct sockaddr_un}}{406}
92156 -\entry {\code {struct stat}}{370}
92157 -\entry {\code {struct stat64}}{372}
92158 -\entry {\code {struct termios}}{447}
92159 -\entry {\code {struct timespec}}{550}
92160 -\entry {\code {struct timeval}}{550}
92161 -\entry {\code {struct timex}}{559, 560}
92162 -\entry {\code {struct timezone}}{554}
92163 -\entry {\code {struct tm}}{556}
92164 -\entry {\code {struct tms}}{552}
92165 -\entry {\code {struct utimbuf}}{384}
92166 -\entry {\code {struct utmp}}{754}
92167 -\entry {\code {struct utmpx}}{758}
92168 -\entry {\code {struct utsname}}{773}
92169 -\entry {\code {struct vtimes}}{585}
92170 -\initial {T}
92171 -\entry {\code {tcflag_t}}{448}
92172 -\entry {\code {time_t}}{553}
92173 -\initial {U}
92174 -\entry {\code {ucontext_t}}{604}
92175 -\entry {\code {uid_t}}{745}
92176 -\entry {\code {union wait}}{709}
92177 -\initial {V}
92178 -\entry {\code {va_list}}{846}
92179 -\entry {\code {VISIT}}{203}
92180 -\initial {W}
92181 -\entry {\code {wchar_t}}{112}
92182 -\entry {\code {wctrans_t}}{74}
92183 -\entry {\code {wctype_t}}{70}
92184 -\entry {\code {wint_t}}{112}
92185 -\entry {\code {wordexp_t}}{219}
92186 diff -u -udbrN glibc-2.3.2/manual/libc.vr glibc-2.3.2-200304020432/manual/libc.vr
92187 --- glibc-2.3.2/manual/libc.vr Tue Feb 25 11:35:07 2003
92188 +++ glibc-2.3.2-200304020432/manual/libc.vr Thu Jan 1 01:00:00 1970
92189 @@ -1,1073 +0,0 @@
92190 -\entry{_POSIX_SOURCE}{8}{\code {_POSIX_SOURCE}}
92191 -\entry{_POSIX_C_SOURCE}{8}{\code {_POSIX_C_SOURCE}}
92192 -\entry{_BSD_SOURCE}{8}{\code {_BSD_SOURCE}}
92193 -\entry{_SVID_SOURCE}{8}{\code {_SVID_SOURCE}}
92194 -\entry{_XOPEN_SOURCE}{8}{\code {_XOPEN_SOURCE}}
92195 -\entry{_XOPEN_SOURCE_EXTENDED}{9}{\code {_XOPEN_SOURCE_EXTENDED}}
92196 -\entry{_LARGEFILE_SOURCE}{9}{\code {_LARGEFILE_SOURCE}}
92197 -\entry{_LARGEFILE64_SOURCE}{9}{\code {_LARGEFILE64_SOURCE}}
92198 -\entry{_FILE_OFFSET_BITS}{9}{\code {_FILE_OFFSET_BITS}}
92199 -\entry{_ISOC99_SOURCE}{10}{\code {_ISOC99_SOURCE}}
92200 -\entry{_GNU_SOURCE}{10}{\code {_GNU_SOURCE}}
92201 -\entry{_REENTRANT}{10}{\code {_REENTRANT}}
92202 -\entry{_THREAD_SAFE}{10}{\code {_THREAD_SAFE}}
92203 -\entry{errno}{15}{\code {errno}}
92204 -\entry{EPERM}{16}{\code {EPERM}}
92205 -\entry{ENOENT}{16}{\code {ENOENT}}
92206 -\entry{ESRCH}{16}{\code {ESRCH}}
92207 -\entry{EINTR}{16}{\code {EINTR}}
92208 -\entry{EIO}{16}{\code {EIO}}
92209 -\entry{ENXIO}{17}{\code {ENXIO}}
92210 -\entry{E2BIG}{17}{\code {E2BIG}}
92211 -\entry{ENOEXEC}{17}{\code {ENOEXEC}}
92212 -\entry{EBADF}{17}{\code {EBADF}}
92213 -\entry{ECHILD}{17}{\code {ECHILD}}
92214 -\entry{EDEADLK}{17}{\code {EDEADLK}}
92215 -\entry{ENOMEM}{17}{\code {ENOMEM}}
92216 -\entry{EACCES}{17}{\code {EACCES}}
92217 -\entry{EFAULT}{17}{\code {EFAULT}}
92218 -\entry{ENOTBLK}{17}{\code {ENOTBLK}}
92219 -\entry{EBUSY}{17}{\code {EBUSY}}
92220 -\entry{EEXIST}{17}{\code {EEXIST}}
92221 -\entry{EXDEV}{18}{\code {EXDEV}}
92222 -\entry{ENODEV}{18}{\code {ENODEV}}
92223 -\entry{ENOTDIR}{18}{\code {ENOTDIR}}
92224 -\entry{EISDIR}{18}{\code {EISDIR}}
92225 -\entry{EINVAL}{18}{\code {EINVAL}}
92226 -\entry{EMFILE}{18}{\code {EMFILE}}
92227 -\entry{ENFILE}{18}{\code {ENFILE}}
92228 -\entry{ENOTTY}{18}{\code {ENOTTY}}
92229 -\entry{ETXTBSY}{18}{\code {ETXTBSY}}
92230 -\entry{EFBIG}{18}{\code {EFBIG}}
92231 -\entry{ENOSPC}{18}{\code {ENOSPC}}
92232 -\entry{ESPIPE}{18}{\code {ESPIPE}}
92233 -\entry{EROFS}{19}{\code {EROFS}}
92234 -\entry{EMLINK}{19}{\code {EMLINK}}
92235 -\entry{EPIPE}{19}{\code {EPIPE}}
92236 -\entry{EDOM}{19}{\code {EDOM}}
92237 -\entry{ERANGE}{19}{\code {ERANGE}}
92238 -\entry{EAGAIN}{19}{\code {EAGAIN}}
92239 -\entry{EWOULDBLOCK}{19}{\code {EWOULDBLOCK}}
92240 -\entry{EINPROGRESS}{20}{\code {EINPROGRESS}}
92241 -\entry{EALREADY}{20}{\code {EALREADY}}
92242 -\entry{ENOTSOCK}{20}{\code {ENOTSOCK}}
92243 -\entry{EMSGSIZE}{20}{\code {EMSGSIZE}}
92244 -\entry{EPROTOTYPE}{20}{\code {EPROTOTYPE}}
92245 -\entry{ENOPROTOOPT}{20}{\code {ENOPROTOOPT}}
92246 -\entry{EPROTONOSUPPORT}{20}{\code {EPROTONOSUPPORT}}
92247 -\entry{ESOCKTNOSUPPORT}{20}{\code {ESOCKTNOSUPPORT}}
92248 -\entry{EOPNOTSUPP}{20}{\code {EOPNOTSUPP}}
92249 -\entry{EPFNOSUPPORT}{20}{\code {EPFNOSUPPORT}}
92250 -\entry{EAFNOSUPPORT}{20}{\code {EAFNOSUPPORT}}
92251 -\entry{EADDRINUSE}{20}{\code {EADDRINUSE}}
92252 -\entry{EADDRNOTAVAIL}{21}{\code {EADDRNOTAVAIL}}
92253 -\entry{ENETDOWN}{21}{\code {ENETDOWN}}
92254 -\entry{ENETUNREACH}{21}{\code {ENETUNREACH}}
92255 -\entry{ENETRESET}{21}{\code {ENETRESET}}
92256 -\entry{ECONNABORTED}{21}{\code {ECONNABORTED}}
92257 -\entry{ECONNRESET}{21}{\code {ECONNRESET}}
92258 -\entry{ENOBUFS}{21}{\code {ENOBUFS}}
92259 -\entry{EISCONN}{21}{\code {EISCONN}}
92260 -\entry{ENOTCONN}{21}{\code {ENOTCONN}}
92261 -\entry{EDESTADDRREQ}{21}{\code {EDESTADDRREQ}}
92262 -\entry{ESHUTDOWN}{21}{\code {ESHUTDOWN}}
92263 -\entry{ETOOMANYREFS}{21}{\code {ETOOMANYREFS}}
92264 -\entry{ETIMEDOUT}{21}{\code {ETIMEDOUT}}
92265 -\entry{ECONNREFUSED}{22}{\code {ECONNREFUSED}}
92266 -\entry{ELOOP}{22}{\code {ELOOP}}
92267 -\entry{ENAMETOOLONG}{22}{\code {ENAMETOOLONG}}
92268 -\entry{EHOSTDOWN}{22}{\code {EHOSTDOWN}}
92269 -\entry{EHOSTUNREACH}{22}{\code {EHOSTUNREACH}}
92270 -\entry{ENOTEMPTY}{22}{\code {ENOTEMPTY}}
92271 -\entry{EPROCLIM}{22}{\code {EPROCLIM}}
92272 -\entry{EUSERS}{22}{\code {EUSERS}}
92273 -\entry{EDQUOT}{22}{\code {EDQUOT}}
92274 -\entry{ESTALE}{22}{\code {ESTALE}}
92275 -\entry{EREMOTE}{22}{\code {EREMOTE}}
92276 -\entry{EBADRPC}{22}{\code {EBADRPC}}
92277 -\entry{ERPCMISMATCH}{22}{\code {ERPCMISMATCH}}
92278 -\entry{EPROGUNAVAIL}{22}{\code {EPROGUNAVAIL}}
92279 -\entry{EPROGMISMATCH}{23}{\code {EPROGMISMATCH}}
92280 -\entry{EPROCUNAVAIL}{23}{\code {EPROCUNAVAIL}}
92281 -\entry{ENOLCK}{23}{\code {ENOLCK}}
92282 -\entry{EFTYPE}{23}{\code {EFTYPE}}
92283 -\entry{EAUTH}{23}{\code {EAUTH}}
92284 -\entry{ENEEDAUTH}{23}{\code {ENEEDAUTH}}
92285 -\entry{ENOSYS}{23}{\code {ENOSYS}}
92286 -\entry{ENOTSUP}{23}{\code {ENOTSUP}}
92287 -\entry{EILSEQ}{23}{\code {EILSEQ}}
92288 -\entry{EBACKGROUND}{23}{\code {EBACKGROUND}}
92289 -\entry{EDIED}{24}{\code {EDIED}}
92290 -\entry{ED}{24}{\code {ED}}
92291 -\entry{EGREGIOUS}{24}{\code {EGREGIOUS}}
92292 -\entry{EIEIO}{24}{\code {EIEIO}}
92293 -\entry{EGRATUITOUS}{24}{\code {EGRATUITOUS}}
92294 -\entry{EBADMSG}{24}{\code {EBADMSG}}
92295 -\entry{EIDRM}{24}{\code {EIDRM}}
92296 -\entry{EMULTIHOP}{24}{\code {EMULTIHOP}}
92297 -\entry{ENODATA}{24}{\code {ENODATA}}
92298 -\entry{ENOLINK}{24}{\code {ENOLINK}}
92299 -\entry{ENOMSG}{24}{\code {ENOMSG}}
92300 -\entry{ENOSR}{24}{\code {ENOSR}}
92301 -\entry{ENOSTR}{24}{\code {ENOSTR}}
92302 -\entry{EOVERFLOW}{24}{\code {EOVERFLOW}}
92303 -\entry{EPROTO}{24}{\code {EPROTO}}
92304 -\entry{ETIME}{24}{\code {ETIME}}
92305 -\entry{ECANCELED}{24}{\code {ECANCELED}}
92306 -\entry{ERESTART}{24}{\code {ERESTART}}
92307 -\entry{ECHRNG}{24}{\code {ECHRNG}}
92308 -\entry{EL2NSYNC}{24}{\code {EL2NSYNC}}
92309 -\entry{EL3HLT}{24}{\code {EL3HLT}}
92310 -\entry{EL3RST}{24}{\code {EL3RST}}
92311 -\entry{ELNRNG}{25}{\code {ELNRNG}}
92312 -\entry{EUNATCH}{25}{\code {EUNATCH}}
92313 -\entry{ENOCSI}{25}{\code {ENOCSI}}
92314 -\entry{EL2HLT}{25}{\code {EL2HLT}}
92315 -\entry{EBADE}{25}{\code {EBADE}}
92316 -\entry{EBADR}{25}{\code {EBADR}}
92317 -\entry{EXFULL}{25}{\code {EXFULL}}
92318 -\entry{ENOANO}{25}{\code {ENOANO}}
92319 -\entry{EBADRQC}{25}{\code {EBADRQC}}
92320 -\entry{EBADSLT}{25}{\code {EBADSLT}}
92321 -\entry{EDEADLOCK}{25}{\code {EDEADLOCK}}
92322 -\entry{EBFONT}{25}{\code {EBFONT}}
92323 -\entry{ENONET}{25}{\code {ENONET}}
92324 -\entry{ENOPKG}{25}{\code {ENOPKG}}
92325 -\entry{EADV}{25}{\code {EADV}}
92326 -\entry{ESRMNT}{25}{\code {ESRMNT}}
92327 -\entry{ECOMM}{25}{\code {ECOMM}}
92328 -\entry{EDOTDOT}{25}{\code {EDOTDOT}}
92329 -\entry{ENOTUNIQ}{25}{\code {ENOTUNIQ}}
92330 -\entry{EBADFD}{25}{\code {EBADFD}}
92331 -\entry{EREMCHG}{25}{\code {EREMCHG}}
92332 -\entry{ELIBACC}{25}{\code {ELIBACC}}
92333 -\entry{ELIBBAD}{25}{\code {ELIBBAD}}
92334 -\entry{ELIBSCN}{25}{\code {ELIBSCN}}
92335 -\entry{ELIBMAX}{25}{\code {ELIBMAX}}
92336 -\entry{ELIBEXEC}{25}{\code {ELIBEXEC}}
92337 -\entry{ESTRPIPE}{25}{\code {ESTRPIPE}}
92338 -\entry{EUCLEAN}{25}{\code {EUCLEAN}}
92339 -\entry{ENOTNAM}{25}{\code {ENOTNAM}}
92340 -\entry{ENAVAIL}{25}{\code {ENAVAIL}}
92341 -\entry{EISNAM}{25}{\code {EISNAM}}
92342 -\entry{EREMOTEIO}{25}{\code {EREMOTEIO}}
92343 -\entry{ENOMEDIUM}{25}{\code {ENOMEDIUM}}
92344 -\entry{EMEDIUMTYPE}{25}{\code {EMEDIUMTYPE}}
92345 -\entry{program_invocation_name}{27}{\code {program_invocation_name}}
92346 -\entry{program_invocation_short_name}{27}{\code {program_invocation_short_name}}
92347 -\entry{error_print_progname}{29}{\code {error_print_progname}}
92348 -\entry{error_message_count}{29}{\code {error_message_count}}
92349 -\entry{error_one_per_line}{29}{\code {error_one_per_line}}
92350 -\entry{__malloc_hook}{41}{\code {__malloc_hook}}
92351 -\entry{__realloc_hook}{41}{\code {__realloc_hook}}
92352 -\entry{__free_hook}{41}{\code {__free_hook}}
92353 -\entry{__memalign_hook}{41}{\code {__memalign_hook}}
92354 -\entry{__malloc_initialize_hook}{42}{\code {__malloc_initialize_hook}}
92355 -\entry{obstack_alloc_failed_handler}{51}{\code {obstack_alloc_failed_handler}}
92356 -\entry{WCHAR_MIN}{112}{\code {WCHAR_MIN}}
92357 -\entry{WCHAR_MAX}{112}{\code {WCHAR_MAX}}
92358 -\entry{WEOF}{113}{\code {WEOF}}
92359 -\entry{MB_LEN_MAX}{116}{\code {MB_LEN_MAX}}
92360 -\entry{MB_CUR_MAX}{116}{\code {MB_CUR_MAX}}
92361 -\entry{(*__gconv_init_fct)}{145}{\code {(*__gconv_init_fct)}}
92362 -\entry{(*__gconv_end_fct)}{147}{\code {(*__gconv_end_fct)}}
92363 -\entry{(*__gconv_fct)}{148}{\code {(*__gconv_fct)}}
92364 -\entry{LC_COLLATE}{154}{\code {LC_COLLATE}}
92365 -\entry{LC_CTYPE}{154}{\code {LC_CTYPE}}
92366 -\entry{LC_MONETARY}{154}{\code {LC_MONETARY}}
92367 -\entry{LC_NUMERIC}{154}{\code {LC_NUMERIC}}
92368 -\entry{LC_TIME}{154}{\code {LC_TIME}}
92369 -\entry{LC_MESSAGES}{154}{\code {LC_MESSAGES}}
92370 -\entry{LC_ALL}{155}{\code {LC_ALL}}
92371 -\entry{LANG}{155}{\code {LANG}}
92372 -\entry{LANGUAGE}{155}{\code {LANGUAGE}}
92373 -\entry{CODESET}{162}{\code {CODESET}}
92374 -\entry{ABDAY_1}{162}{\code {ABDAY_1}}
92375 -\entry{ABDAY_2}{162}{\code {ABDAY_2}}
92376 -\entry{ABDAY_3}{162}{\code {ABDAY_3}}
92377 -\entry{ABDAY_4}{162}{\code {ABDAY_4}}
92378 -\entry{ABDAY_5}{162}{\code {ABDAY_5}}
92379 -\entry{ABDAY_6}{162}{\code {ABDAY_6}}
92380 -\entry{ABDAY_7}{162}{\code {ABDAY_7}}
92381 -\entry{DAY_1}{162}{\code {DAY_1}}
92382 -\entry{DAY_2}{162}{\code {DAY_2}}
92383 -\entry{DAY_3}{162}{\code {DAY_3}}
92384 -\entry{DAY_4}{162}{\code {DAY_4}}
92385 -\entry{DAY_5}{162}{\code {DAY_5}}
92386 -\entry{DAY_6}{162}{\code {DAY_6}}
92387 -\entry{DAY_7}{162}{\code {DAY_7}}
92388 -\entry{ABMON_1}{162}{\code {ABMON_1}}
92389 -\entry{ABMON_2}{162}{\code {ABMON_2}}
92390 -\entry{ABMON_3}{162}{\code {ABMON_3}}
92391 -\entry{ABMON_4}{162}{\code {ABMON_4}}
92392 -\entry{ABMON_5}{162}{\code {ABMON_5}}
92393 -\entry{ABMON_6}{162}{\code {ABMON_6}}
92394 -\entry{ABMON_7}{162}{\code {ABMON_7}}
92395 -\entry{ABMON_8}{162}{\code {ABMON_8}}
92396 -\entry{ABMON_9}{162}{\code {ABMON_9}}
92397 -\entry{ABMON_10}{162}{\code {ABMON_10}}
92398 -\entry{ABMON_11}{162}{\code {ABMON_11}}
92399 -\entry{ABMON_12}{162}{\code {ABMON_12}}
92400 -\entry{MON_1}{162}{\code {MON_1}}
92401 -\entry{MON_2}{163}{\code {MON_2}}
92402 -\entry{MON_3}{163}{\code {MON_3}}
92403 -\entry{MON_4}{163}{\code {MON_4}}
92404 -\entry{MON_5}{163}{\code {MON_5}}
92405 -\entry{MON_6}{163}{\code {MON_6}}
92406 -\entry{MON_7}{163}{\code {MON_7}}
92407 -\entry{MON_8}{163}{\code {MON_8}}
92408 -\entry{MON_9}{163}{\code {MON_9}}
92409 -\entry{MON_10}{163}{\code {MON_10}}
92410 -\entry{MON_11}{163}{\code {MON_11}}
92411 -\entry{MON_12}{163}{\code {MON_12}}
92412 -\entry{AM_STR}{163}{\code {AM_STR}}
92413 -\entry{PM_STR}{163}{\code {PM_STR}}
92414 -\entry{D_T_FMT}{163}{\code {D_T_FMT}}
92415 -\entry{D_FMT}{163}{\code {D_FMT}}
92416 -\entry{T_FMT}{163}{\code {T_FMT}}
92417 -\entry{T_FMT_AMPM}{163}{\code {T_FMT_AMPM}}
92418 -\entry{ERA}{163}{\code {ERA}}
92419 -\entry{ERA_YEAR}{163}{\code {ERA_YEAR}}
92420 -\entry{ERA_D_T_FMT}{163}{\code {ERA_D_T_FMT}}
92421 -\entry{ERA_D_FMT}{164}{\code {ERA_D_FMT}}
92422 -\entry{ERA_T_FMT}{164}{\code {ERA_T_FMT}}
92423 -\entry{ALT_DIGITS}{164}{\code {ALT_DIGITS}}
92424 -\entry{INT_CURR_SYMBOL}{164}{\code {INT_CURR_SYMBOL}}
92425 -\entry{CURRENCY_SYMBOL}{164}{\code {CURRENCY_SYMBOL}}
92426 -\entry{CRNCYSTR}{164}{\code {CRNCYSTR}}
92427 -\entry{MON_DECIMAL_POINT}{164}{\code {MON_DECIMAL_POINT}}
92428 -\entry{MON_THOUSANDS_SEP}{164}{\code {MON_THOUSANDS_SEP}}
92429 -\entry{MON_GROUPING}{164}{\code {MON_GROUPING}}
92430 -\entry{POSITIVE_SIGN}{164}{\code {POSITIVE_SIGN}}
92431 -\entry{NEGATIVE_SIGN}{164}{\code {NEGATIVE_SIGN}}
92432 -\entry{INT_FRAC_DIGITS}{164}{\code {INT_FRAC_DIGITS}}
92433 -\entry{FRAC_DIGITS}{164}{\code {FRAC_DIGITS}}
92434 -\entry{P_CS_PRECEDES}{165}{\code {P_CS_PRECEDES}}
92435 -\entry{P_SEP_BY_SPACE}{165}{\code {P_SEP_BY_SPACE}}
92436 -\entry{N_CS_PRECEDES}{165}{\code {N_CS_PRECEDES}}
92437 -\entry{N_SEP_BY_SPACE}{165}{\code {N_SEP_BY_SPACE}}
92438 -\entry{P_SIGN_POSN}{165}{\code {P_SIGN_POSN}}
92439 -\entry{N_SIGN_POSN}{165}{\code {N_SIGN_POSN}}
92440 -\entry{INT_P_CS_PRECEDES}{165}{\code {INT_P_CS_PRECEDES}}
92441 -\entry{INT_P_SEP_BY_SPACE}{165}{\code {INT_P_SEP_BY_SPACE}}
92442 -\entry{INT_N_CS_PRECEDES}{165}{\code {INT_N_CS_PRECEDES}}
92443 -\entry{INT_N_SEP_BY_SPACE}{165}{\code {INT_N_SEP_BY_SPACE}}
92444 -\entry{INT_P_SIGN_POSN}{165}{\code {INT_P_SIGN_POSN}}
92445 -\entry{INT_N_SIGN_POSN}{165}{\code {INT_N_SIGN_POSN}}
92446 -\entry{DECIMAL_POINT}{165}{\code {DECIMAL_POINT}}
92447 -\entry{RADIXCHAR}{165}{\code {RADIXCHAR}}
92448 -\entry{THOUSANDS_SEP}{166}{\code {THOUSANDS_SEP}}
92449 -\entry{THOUSEP}{166}{\code {THOUSEP}}
92450 -\entry{GROUPING}{166}{\code {GROUPING}}
92451 -\entry{YESEXPR}{166}{\code {YESEXPR}}
92452 -\entry{NOEXPR}{166}{\code {NOEXPR}}
92453 -\entry{YESSTR}{166}{\code {YESSTR}}
92454 -\entry{NOSTR}{166}{\code {NOSTR}}
92455 -\entry{GLOB_ABORTED}{209}{\code {GLOB_ABORTED}}
92456 -\entry{GLOB_NOMATCH}{209}{\code {GLOB_NOMATCH}}
92457 -\entry{GLOB_NOSPACE}{209}{\code {GLOB_NOSPACE}}
92458 -\entry{GLOB_APPEND}{210}{\code {GLOB_APPEND}}
92459 -\entry{GLOB_DOOFFS}{210}{\code {GLOB_DOOFFS}}
92460 -\entry{GLOB_ERR}{210}{\code {GLOB_ERR}}
92461 -\entry{GLOB_MARK}{210}{\code {GLOB_MARK}}
92462 -\entry{GLOB_NOCHECK}{211}{\code {GLOB_NOCHECK}}
92463 -\entry{GLOB_NOSORT}{211}{\code {GLOB_NOSORT}}
92464 -\entry{GLOB_NOESCAPE}{211}{\code {GLOB_NOESCAPE}}
92465 -\entry{GLOB_PERIOD}{211}{\code {GLOB_PERIOD}}
92466 -\entry{GLOB_MAGCHAR}{211}{\code {GLOB_MAGCHAR}}
92467 -\entry{GLOB_ALTDIRFUNC}{211}{\code {GLOB_ALTDIRFUNC}}
92468 -\entry{GLOB_BRACE}{211}{\code {GLOB_BRACE}}
92469 -\entry{GLOB_NOMAGIC}{212}{\code {GLOB_NOMAGIC}}
92470 -\entry{GLOB_TILDE}{212}{\code {GLOB_TILDE}}
92471 -\entry{GLOB_TILDE_CHECK}{212}{\code {GLOB_TILDE_CHECK}}
92472 -\entry{GLOB_ONLYDIR}{212}{\code {GLOB_ONLYDIR}}
92473 -\entry{stdin}{231}{\code {stdin}}
92474 -\entry{stdout}{231}{\code {stdout}}
92475 -\entry{stderr}{231}{\code {stderr}}
92476 -\entry{FOPEN_MAX}{234}{\code {FOPEN_MAX}}
92477 -\entry{FSETLOCKING_INTERNAL}{239}{\code {FSETLOCKING_INTERNAL}}
92478 -\entry{FSETLOCKING_BYCALLER}{239}{\code {FSETLOCKING_BYCALLER}}
92479 -\entry{FSETLOCKING_QUERY}{239}{\code {FSETLOCKING_QUERY}}
92480 -\entry{NL_ARGMAX}{251}{\code {NL_ARGMAX}}
92481 -\entry{PA_FLAG_MASK}{264}{\code {PA_FLAG_MASK}}
92482 -\entry{PA_INT}{264}{\code {PA_INT}}
92483 -\entry{PA_CHAR}{264}{\code {PA_CHAR}}
92484 -\entry{PA_STRING}{264}{\code {PA_STRING}}
92485 -\entry{PA_POINTER}{264}{\code {PA_POINTER}}
92486 -\entry{PA_FLOAT}{264}{\code {PA_FLOAT}}
92487 -\entry{PA_DOUBLE}{264}{\code {PA_DOUBLE}}
92488 -\entry{PA_LAST}{264}{\code {PA_LAST}}
92489 -\entry{PA_FLAG_PTR}{264}{\code {PA_FLAG_PTR}}
92490 -\entry{PA_FLAG_SHORT}{265}{\code {PA_FLAG_SHORT}}
92491 -\entry{PA_FLAG_LONG}{265}{\code {PA_FLAG_LONG}}
92492 -\entry{PA_FLAG_LONG_LONG}{265}{\code {PA_FLAG_LONG_LONG}}
92493 -\entry{PA_FLAG_LONG_DOUBLE}{265}{\code {PA_FLAG_LONG_DOUBLE}}
92494 -\entry{EOF}{281}{\code {EOF}}
92495 -\entry{WEOF}{282}{\code {WEOF}}
92496 -\entry{SEEK_SET}{286}{\code {SEEK_SET}}
92497 -\entry{SEEK_CUR}{286}{\code {SEEK_CUR}}
92498 -\entry{SEEK_END}{286}{\code {SEEK_END}}
92499 -\entry{L_SET}{286}{\code {L_SET}}
92500 -\entry{L_INCR}{286}{\code {L_INCR}}
92501 -\entry{L_XTND}{286}{\code {L_XTND}}
92502 -\entry{_IOFBF}{290}{\code {_IOFBF}}
92503 -\entry{_IOLBF}{291}{\code {_IOLBF}}
92504 -\entry{_IONBF}{291}{\code {_IONBF}}
92505 -\entry{BUFSIZ}{291}{\code {BUFSIZ}}
92506 -\entry{MM_PRINT}{297}{\code {MM_PRINT}}
92507 -\entry{MM_CONSOLE}{297}{\code {MM_CONSOLE}}
92508 -\entry{MM_HARD}{297}{\code {MM_HARD}}
92509 -\entry{MM_SOFT}{297}{\code {MM_SOFT}}
92510 -\entry{MM_FIRM}{297}{\code {MM_FIRM}}
92511 -\entry{MM_APPL}{297}{\code {MM_APPL}}
92512 -\entry{MM_UTIL}{297}{\code {MM_UTIL}}
92513 -\entry{MM_OPSYS}{297}{\code {MM_OPSYS}}
92514 -\entry{MM_RECOVER}{298}{\code {MM_RECOVER}}
92515 -\entry{MM_NRECOV}{298}{\code {MM_NRECOV}}
92516 -\entry{MM_NULLLBL}{298}{\code {MM_NULLLBL}}
92517 -\entry{MM_NULLSEV}{298}{\code {MM_NULLSEV}}
92518 -\entry{MM_NULLMC}{298}{\code {MM_NULLMC}}
92519 -\entry{MM_NULLTXT}{298}{\code {MM_NULLTXT}}
92520 -\entry{MM_NULLACT}{298}{\code {MM_NULLACT}}
92521 -\entry{MM_NULLTAG}{298}{\code {MM_NULLTAG}}
92522 -\entry{MM_NOSEV}{298}{\code {MM_NOSEV}}
92523 -\entry{MM_HALT}{298}{\code {MM_HALT}}
92524 -\entry{MM_ERROR}{298}{\code {MM_ERROR}}
92525 -\entry{MM_WARNING}{298}{\code {MM_WARNING}}
92526 -\entry{MM_INFO}{299}{\code {MM_INFO}}
92527 -\entry{STDIN_FILENO}{313}{\code {STDIN_FILENO}}
92528 -\entry{STDOUT_FILENO}{313}{\code {STDOUT_FILENO}}
92529 -\entry{STDERR_FILENO}{313}{\code {STDERR_FILENO}}
92530 -\entry{_SC_PAGESIZE}{317}{\code {_SC_PAGESIZE}}
92531 -\entry{PROT_READ}{317}{\code {PROT_READ}}
92532 -\entry{PROT_WRITE}{317}{\code {PROT_WRITE}}
92533 -\entry{PROT_EXEC}{317}{\code {PROT_EXEC}}
92534 -\entry{MAP_PRIVATE}{317}{\code {MAP_PRIVATE}}
92535 -\entry{MAP_SHARED}{317}{\code {MAP_SHARED}}
92536 -\entry{MAP_FIXED}{318}{\code {MAP_FIXED}}
92537 -\entry{MAP_ANONYMOUS}{318}{\code {MAP_ANONYMOUS}}
92538 -\entry{MAP_ANON}{318}{\code {MAP_ANON}}
92539 -\entry{MS_SYNC}{319}{\code {MS_SYNC}}
92540 -\entry{MS_ASYNC}{319}{\code {MS_ASYNC}}
92541 -\entry{FD_SETSIZE}{321}{\code {FD_SETSIZE}}
92542 -\entry{LIO_READ}{326}{\code {LIO_READ}}
92543 -\entry{LIO_WRITE}{326}{\code {LIO_WRITE}}
92544 -\entry{LIO_NOP}{326}{\code {LIO_NOP}}
92545 -\entry{F_DUPFD}{338}{\code {F_DUPFD}}
92546 -\entry{F_GETFD}{339}{\code {F_GETFD}}
92547 -\entry{F_SETFD}{339}{\code {F_SETFD}}
92548 -\entry{FD_CLOEXEC}{339}{\code {FD_CLOEXEC}}
92549 -\entry{O_RDONLY}{341}{\code {O_RDONLY}}
92550 -\entry{O_WRONLY}{341}{\code {O_WRONLY}}
92551 -\entry{O_RDWR}{341}{\code {O_RDWR}}
92552 -\entry{O_READ}{341}{\code {O_READ}}
92553 -\entry{O_WRITE}{341}{\code {O_WRITE}}
92554 -\entry{O_EXEC}{341}{\code {O_EXEC}}
92555 -\entry{O_ACCMODE}{341}{\code {O_ACCMODE}}
92556 -\entry{O_CREAT}{342}{\code {O_CREAT}}
92557 -\entry{O_EXCL}{342}{\code {O_EXCL}}
92558 -\entry{O_NONBLOCK}{342}{\code {O_NONBLOCK}}
92559 -\entry{O_NOCTTY}{342}{\code {O_NOCTTY}}
92560 -\entry{O_IGNORE_CTTY}{342}{\code {O_IGNORE_CTTY}}
92561 -\entry{O_NOLINK}{342}{\code {O_NOLINK}}
92562 -\entry{O_NOTRANS}{342}{\code {O_NOTRANS}}
92563 -\entry{O_TRUNC}{343}{\code {O_TRUNC}}
92564 -\entry{O_SHLOCK}{343}{\code {O_SHLOCK}}
92565 -\entry{O_EXLOCK}{343}{\code {O_EXLOCK}}
92566 -\entry{O_APPEND}{343}{\code {O_APPEND}}
92567 -\entry{O_NONBLOCK}{343}{\code {O_NONBLOCK}}
92568 -\entry{O_NDELAY}{344}{\code {O_NDELAY}}
92569 -\entry{O_ASYNC}{344}{\code {O_ASYNC}}
92570 -\entry{O_FSYNC}{344}{\code {O_FSYNC}}
92571 -\entry{O_SYNC}{344}{\code {O_SYNC}}
92572 -\entry{O_NOATIME}{344}{\code {O_NOATIME}}
92573 -\entry{F_GETFL}{344}{\code {F_GETFL}}
92574 -\entry{F_SETFL}{344}{\code {F_SETFL}}
92575 -\entry{F_GETLK}{346}{\code {F_GETLK}}
92576 -\entry{F_SETLK}{347}{\code {F_SETLK}}
92577 -\entry{F_SETLKW}{347}{\code {F_SETLKW}}
92578 -\entry{F_RDLCK}{348}{\code {F_RDLCK}}
92579 -\entry{F_WRLCK}{348}{\code {F_WRLCK}}
92580 -\entry{F_UNLCK}{348}{\code {F_UNLCK}}
92581 -\entry{F_GETOWN}{348}{\code {F_GETOWN}}
92582 -\entry{F_SETOWN}{349}{\code {F_SETOWN}}
92583 -\entry{PWD}{352}{\code {PWD}}
92584 -\entry{DT_UNKNOWN}{353}{\code {DT_UNKNOWN}}
92585 -\entry{DT_REG}{353}{\code {DT_REG}}
92586 -\entry{DT_DIR}{354}{\code {DT_DIR}}
92587 -\entry{DT_FIFO}{354}{\code {DT_FIFO}}
92588 -\entry{DT_SOCK}{354}{\code {DT_SOCK}}
92589 -\entry{DT_CHR}{354}{\code {DT_CHR}}
92590 -\entry{DT_BLK}{354}{\code {DT_BLK}}
92591 -\entry{FTW_F}{360}{\code {FTW_F}}
92592 -\entry{FTW_D}{360}{\code {FTW_D}}
92593 -\entry{FTW_NS}{360}{\code {FTW_NS}}
92594 -\entry{FTW_DNR}{360}{\code {FTW_DNR}}
92595 -\entry{FTW_SL}{360}{\code {FTW_SL}}
92596 -\entry{FTW_DP}{361}{\code {FTW_DP}}
92597 -\entry{FTW_SLN}{361}{\code {FTW_SLN}}
92598 -\entry{FTW_PHYS}{363}{\code {FTW_PHYS}}
92599 -\entry{FTW_MOUNT}{363}{\code {FTW_MOUNT}}
92600 -\entry{FTW_CHDIR}{363}{\code {FTW_CHDIR}}
92601 -\entry{FTW_DEPTH}{363}{\code {FTW_DEPTH}}
92602 -\entry{MAXSYMLINKS}{365}{\code {MAXSYMLINKS}}
92603 -\entry{S_IFMT}{376}{\code {S_IFMT}}
92604 -\entry{S_IFDIR}{376}{\code {S_IFDIR}}
92605 -\entry{S_IFCHR}{376}{\code {S_IFCHR}}
92606 -\entry{S_IFBLK}{376}{\code {S_IFBLK}}
92607 -\entry{S_IFREG}{376}{\code {S_IFREG}}
92608 -\entry{S_IFLNK}{376}{\code {S_IFLNK}}
92609 -\entry{S_IFSOCK}{376}{\code {S_IFSOCK}}
92610 -\entry{S_IFIFO}{376}{\code {S_IFIFO}}
92611 -\entry{S_IRUSR}{378}{\code {S_IRUSR}}
92612 -\entry{S_IREAD}{378}{\code {S_IREAD}}
92613 -\entry{S_IWUSR}{379}{\code {S_IWUSR}}
92614 -\entry{S_IWRITE}{379}{\code {S_IWRITE}}
92615 -\entry{S_IXUSR}{379}{\code {S_IXUSR}}
92616 -\entry{S_IEXEC}{379}{\code {S_IEXEC}}
92617 -\entry{S_IRWXU}{379}{\code {S_IRWXU}}
92618 -\entry{S_IRGRP}{379}{\code {S_IRGRP}}
92619 -\entry{S_IWGRP}{379}{\code {S_IWGRP}}
92620 -\entry{S_IXGRP}{379}{\code {S_IXGRP}}
92621 -\entry{S_IRWXG}{379}{\code {S_IRWXG}}
92622 -\entry{S_IROTH}{379}{\code {S_IROTH}}
92623 -\entry{S_IWOTH}{379}{\code {S_IWOTH}}
92624 -\entry{S_IXOTH}{379}{\code {S_IXOTH}}
92625 -\entry{S_IRWXO}{379}{\code {S_IRWXO}}
92626 -\entry{S_ISUID}{379}{\code {S_ISUID}}
92627 -\entry{S_ISGID}{379}{\code {S_ISGID}}
92628 -\entry{S_ISVTX}{379}{\code {S_ISVTX}}
92629 -\entry{R_OK}{383}{\code {R_OK}}
92630 -\entry{W_OK}{383}{\code {W_OK}}
92631 -\entry{X_OK}{383}{\code {X_OK}}
92632 -\entry{F_OK}{383}{\code {F_OK}}
92633 -\entry{L_tmpnam}{389}{\code {L_tmpnam}}
92634 -\entry{TMP_MAX}{390}{\code {TMP_MAX}}
92635 -\entry{P_tmpdir}{390}{\code {P_tmpdir}}
92636 -\entry{SOCK_STREAM}{400}{\code {SOCK_STREAM}}
92637 -\entry{SOCK_DGRAM}{400}{\code {SOCK_DGRAM}}
92638 -\entry{SOCK_RAW}{401}{\code {SOCK_RAW}}
92639 -\entry{AF_LOCAL}{402}{\code {AF_LOCAL}}
92640 -\entry{AF_UNIX}{402}{\code {AF_UNIX}}
92641 -\entry{AF_FILE}{402}{\code {AF_FILE}}
92642 -\entry{AF_INET}{402}{\code {AF_INET}}
92643 -\entry{AF_UNSPEC}{402}{\code {AF_UNSPEC}}
92644 -\entry{IFNAMSIZ}{404}{\code {IFNAMSIZ}}
92645 -\entry{PF_LOCAL}{405}{\code {PF_LOCAL}}
92646 -\entry{PF_UNIX}{406}{\code {PF_UNIX}}
92647 -\entry{PF_FILE}{406}{\code {PF_FILE}}
92648 -\entry{PF_INET}{407}{\code {PF_INET}}
92649 -\entry{PF_INET6}{407}{\code {PF_INET6}}
92650 -\entry{INADDR_LOOPBACK}{411}{\code {INADDR_LOOPBACK}}
92651 -\entry{INADDR_ANY}{411}{\code {INADDR_ANY}}
92652 -\entry{INADDR_BROADCAST}{411}{\code {INADDR_BROADCAST}}
92653 -\entry{INADDR_NONE}{411}{\code {INADDR_NONE}}
92654 -\entry{in6addr_loopback}{411}{\code {in6addr_loopback}}
92655 -\entry{in6addr_any}{411}{\code {in6addr_any}}
92656 -\entry{h_errno}{414}{\code {h_errno}}
92657 -\entry{HOST_NOT_FOUND}{414}{\code {HOST_NOT_FOUND}}
92658 -\entry{TRY_AGAIN}{414}{\code {TRY_AGAIN}}
92659 -\entry{NO_RECOVERY}{414}{\code {NO_RECOVERY}}
92660 -\entry{NO_ADDRESS}{414}{\code {NO_ADDRESS}}
92661 -\entry{IPPORT_RESERVED}{417}{\code {IPPORT_RESERVED}}
92662 -\entry{IPPORT_USERRESERVED}{417}{\code {IPPORT_USERRESERVED}}
92663 -\entry{PF_NS}{421}{\code {PF_NS}}
92664 -\entry{PF_ISO}{421}{\code {PF_ISO}}
92665 -\entry{PF_CCITT}{421}{\code {PF_CCITT}}
92666 -\entry{PF_IMPLINK}{421}{\code {PF_IMPLINK}}
92667 -\entry{PF_ROUTE}{421}{\code {PF_ROUTE}}
92668 -\entry{MSG_OOB}{429}{\code {MSG_OOB}}
92669 -\entry{MSG_PEEK}{429}{\code {MSG_PEEK}}
92670 -\entry{MSG_DONTROUTE}{429}{\code {MSG_DONTROUTE}}
92671 -\entry{SOL_SOCKET}{441}{\code {SOL_SOCKET}}
92672 -\entry{NCCS}{448}{\code {NCCS}}
92673 -\entry{TCSANOW}{448}{\code {TCSANOW}}
92674 -\entry{TCSADRAIN}{448}{\code {TCSADRAIN}}
92675 -\entry{TCSAFLUSH}{448}{\code {TCSAFLUSH}}
92676 -\entry{TCSASOFT}{448}{\code {TCSASOFT}}
92677 -\entry{INPCK}{450}{\code {INPCK}}
92678 -\entry{IGNPAR}{451}{\code {IGNPAR}}
92679 -\entry{PARMRK}{451}{\code {PARMRK}}
92680 -\entry{ISTRIP}{451}{\code {ISTRIP}}
92681 -\entry{IGNBRK}{451}{\code {IGNBRK}}
92682 -\entry{BRKINT}{451}{\code {BRKINT}}
92683 -\entry{IGNCR}{451}{\code {IGNCR}}
92684 -\entry{ICRNL}{451}{\code {ICRNL}}
92685 -\entry{INLCR}{451}{\code {INLCR}}
92686 -\entry{IXOFF}{451}{\code {IXOFF}}
92687 -\entry{IXON}{452}{\code {IXON}}
92688 -\entry{IXANY}{452}{\code {IXANY}}
92689 -\entry{IMAXBEL}{452}{\code {IMAXBEL}}
92690 -\entry{OPOST}{452}{\code {OPOST}}
92691 -\entry{ONLCR}{452}{\code {ONLCR}}
92692 -\entry{OXTABS}{452}{\code {OXTABS}}
92693 -\entry{ONOEOT}{452}{\code {ONOEOT}}
92694 -\entry{CLOCAL}{453}{\code {CLOCAL}}
92695 -\entry{HUPCL}{453}{\code {HUPCL}}
92696 -\entry{CREAD}{453}{\code {CREAD}}
92697 -\entry{CSTOPB}{453}{\code {CSTOPB}}
92698 -\entry{PARENB}{453}{\code {PARENB}}
92699 -\entry{PARODD}{453}{\code {PARODD}}
92700 -\entry{CSIZE}{454}{\code {CSIZE}}
92701 -\entry{CS5}{454}{\code {CS5}}
92702 -\entry{CS6}{454}{\code {CS6}}
92703 -\entry{CS7}{454}{\code {CS7}}
92704 -\entry{CS8}{454}{\code {CS8}}
92705 -\entry{CCTS_OFLOW}{454}{\code {CCTS_OFLOW}}
92706 -\entry{CRTS_IFLOW}{454}{\code {CRTS_IFLOW}}
92707 -\entry{MDMBUF}{454}{\code {MDMBUF}}
92708 -\entry{CIGNORE}{454}{\code {CIGNORE}}
92709 -\entry{ICANON}{454}{\code {ICANON}}
92710 -\entry{ECHO}{455}{\code {ECHO}}
92711 -\entry{ECHOE}{455}{\code {ECHOE}}
92712 -\entry{ECHOPRT}{455}{\code {ECHOPRT}}
92713 -\entry{ECHOK}{455}{\code {ECHOK}}
92714 -\entry{ECHOKE}{455}{\code {ECHOKE}}
92715 -\entry{ECHONL}{455}{\code {ECHONL}}
92716 -\entry{ECHOCTL}{455}{\code {ECHOCTL}}
92717 -\entry{ISIG}{455}{\code {ISIG}}
92718 -\entry{IEXTEN}{456}{\code {IEXTEN}}
92719 -\entry{NOFLSH}{456}{\code {NOFLSH}}
92720 -\entry{TOSTOP}{456}{\code {TOSTOP}}
92721 -\entry{ALTWERASE}{456}{\code {ALTWERASE}}
92722 -\entry{FLUSHO}{456}{\code {FLUSHO}}
92723 -\entry{NOKERNINFO}{456}{\code {NOKERNINFO}}
92724 -\entry{PENDIN}{456}{\code {PENDIN}}
92725 -\entry{B0}{458}{\code {B0}}
92726 -\entry{B50}{458}{\code {B50}}
92727 -\entry{B75}{458}{\code {B75}}
92728 -\entry{B110}{458}{\code {B110}}
92729 -\entry{B134}{458}{\code {B134}}
92730 -\entry{B150}{458}{\code {B150}}
92731 -\entry{B200}{458}{\code {B200}}
92732 -\entry{B300}{458}{\code {B300}}
92733 -\entry{B600}{458}{\code {B600}}
92734 -\entry{B1200}{458}{\code {B1200}}
92735 -\entry{B1800}{458}{\code {B1800}}
92736 -\entry{B2400}{458}{\code {B2400}}
92737 -\entry{B4800}{458}{\code {B4800}}
92738 -\entry{B9600}{458}{\code {B9600}}
92739 -\entry{B19200}{458}{\code {B19200}}
92740 -\entry{B38400}{458}{\code {B38400}}
92741 -\entry{B57600}{458}{\code {B57600}}
92742 -\entry{B115200}{458}{\code {B115200}}
92743 -\entry{B230400}{458}{\code {B230400}}
92744 -\entry{B460800}{458}{\code {B460800}}
92745 -\entry{EXTA}{458}{\code {EXTA}}
92746 -\entry{EXTB}{458}{\code {EXTB}}
92747 -\entry{_POSIX_VDISABLE}{458}{\code {_POSIX_VDISABLE}}
92748 -\entry{VEOF}{458}{\code {VEOF}}
92749 -\entry{VEOL}{459}{\code {VEOL}}
92750 -\entry{VEOL2}{459}{\code {VEOL2}}
92751 -\entry{VERASE}{459}{\code {VERASE}}
92752 -\entry{VWERASE}{459}{\code {VWERASE}}
92753 -\entry{VKILL}{460}{\code {VKILL}}
92754 -\entry{VREPRINT}{460}{\code {VREPRINT}}
92755 -\entry{VINTR}{460}{\code {VINTR}}
92756 -\entry{VQUIT}{460}{\code {VQUIT}}
92757 -\entry{VSUSP}{460}{\code {VSUSP}}
92758 -\entry{VDSUSP}{461}{\code {VDSUSP}}
92759 -\entry{VSTART}{461}{\code {VSTART}}
92760 -\entry{VSTOP}{461}{\code {VSTOP}}
92761 -\entry{VLNEXT}{462}{\code {VLNEXT}}
92762 -\entry{VDISCARD}{462}{\code {VDISCARD}}
92763 -\entry{VSTATUS}{462}{\code {VSTATUS}}
92764 -\entry{VMIN}{463}{\code {VMIN}}
92765 -\entry{VTIME}{463}{\code {VTIME}}
92766 -\entry{TCIFLUSH}{465}{\code {TCIFLUSH}}
92767 -\entry{TCOFLUSH}{465}{\code {TCOFLUSH}}
92768 -\entry{TCIOFLUSH}{465}{\code {TCIOFLUSH}}
92769 -\entry{TCOOFF}{466}{\code {TCOOFF}}
92770 -\entry{TCOON}{466}{\code {TCOON}}
92771 -\entry{TCIOFF}{466}{\code {TCIOFF}}
92772 -\entry{TCION}{466}{\code {TCION}}
92773 -\entry{EBADF}{466}{\code {EBADF}}
92774 -\entry{ENOTTY}{466}{\code {ENOTTY}}
92775 -\entry{EINVAL}{466}{\code {EINVAL}}
92776 -\entry{LOG_USER}{474}{\code {LOG_USER}}
92777 -\entry{LOG_MAIL}{474}{\code {LOG_MAIL}}
92778 -\entry{LOG_DAEMON}{474}{\code {LOG_DAEMON}}
92779 -\entry{LOG_AUTH}{474}{\code {LOG_AUTH}}
92780 -\entry{LOG_SYSLOG}{474}{\code {LOG_SYSLOG}}
92781 -\entry{LOG_LPR}{474}{\code {LOG_LPR}}
92782 -\entry{LOG_NEWS}{474}{\code {LOG_NEWS}}
92783 -\entry{LOG_UUCP}{475}{\code {LOG_UUCP}}
92784 -\entry{LOG_CRON}{475}{\code {LOG_CRON}}
92785 -\entry{LOG_AUTHPRIV}{475}{\code {LOG_AUTHPRIV}}
92786 -\entry{LOG_FTP}{475}{\code {LOG_FTP}}
92787 -\entry{LOG_LOCAL0}{475}{\code {LOG_LOCAL0}}
92788 -\entry{LOG_LOCAL1}{475}{\code {LOG_LOCAL1}}
92789 -\entry{LOG_LOCAL2}{475}{\code {LOG_LOCAL2}}
92790 -\entry{LOG_LOCAL3}{475}{\code {LOG_LOCAL3}}
92791 -\entry{LOG_LOCAL4}{475}{\code {LOG_LOCAL4}}
92792 -\entry{LOG_LOCAL5}{475}{\code {LOG_LOCAL5}}
92793 -\entry{LOG_LOCAL6}{475}{\code {LOG_LOCAL6}}
92794 -\entry{LOG_LOCAL7}{475}{\code {LOG_LOCAL7}}
92795 -\entry{LOG_EMERG}{475}{\code {LOG_EMERG}}
92796 -\entry{LOG_ALERT}{475}{\code {LOG_ALERT}}
92797 -\entry{LOG_CRIT}{475}{\code {LOG_CRIT}}
92798 -\entry{LOG_ERR}{475}{\code {LOG_ERR}}
92799 -\entry{LOG_WARNING}{475}{\code {LOG_WARNING}}
92800 -\entry{LOG_NOTICE}{476}{\code {LOG_NOTICE}}
92801 -\entry{LOG_INFO}{476}{\code {LOG_INFO}}
92802 -\entry{LOG_DEBUG}{476}{\code {LOG_DEBUG}}
92803 -\entry{M_E}{479}{\code {M_E}}
92804 -\entry{M_LOG2E}{479}{\code {M_LOG2E}}
92805 -\entry{M_LOG10E}{479}{\code {M_LOG10E}}
92806 -\entry{M_LN2}{479}{\code {M_LN2}}
92807 -\entry{M_LN10}{479}{\code {M_LN10}}
92808 -\entry{M_PI}{479}{\code {M_PI}}
92809 -\entry{M_PI_2}{479}{\code {M_PI_2}}
92810 -\entry{M_PI_4}{479}{\code {M_PI_4}}
92811 -\entry{M_1_PI}{479}{\code {M_1_PI}}
92812 -\entry{M_2_PI}{479}{\code {M_2_PI}}
92813 -\entry{M_2_SQRTPI}{479}{\code {M_2_SQRTPI}}
92814 -\entry{M_SQRT2}{479}{\code {M_SQRT2}}
92815 -\entry{M_SQRT1_2}{479}{\code {M_SQRT1_2}}
92816 -\entry{PI}{480}{\code {PI}}
92817 -\entry{FP_ILOGB0}{484}{\code {FP_ILOGB0}}
92818 -\entry{FP_ILOGBNAN}{484}{\code {FP_ILOGBNAN}}
92819 -\entry{signgam}{488}{\code {signgam}}
92820 -\entry{RAND_MAX}{508}{\code {RAND_MAX}}
92821 -\entry{FP_NAN}{521}{\code {FP_NAN}}
92822 -\entry{FP_INFINITE}{521}{\code {FP_INFINITE}}
92823 -\entry{FP_ZERO}{521}{\code {FP_ZERO}}
92824 -\entry{FP_SUBNORMAL}{521}{\code {FP_SUBNORMAL}}
92825 -\entry{FP_NORMAL}{521}{\code {FP_NORMAL}}
92826 -\entry{INFINITY}{524}{\code {INFINITY}}
92827 -\entry{NAN}{524}{\code {NAN}}
92828 -\entry{FE_INEXACT}{525}{\code {FE_INEXACT}}
92829 -\entry{FE_DIVBYZERO}{525}{\code {FE_DIVBYZERO}}
92830 -\entry{FE_UNDERFLOW}{525}{\code {FE_UNDERFLOW}}
92831 -\entry{FE_OVERFLOW}{525}{\code {FE_OVERFLOW}}
92832 -\entry{FE_INVALID}{525}{\code {FE_INVALID}}
92833 -\entry{HUGE_VAL}{527}{\code {HUGE_VAL}}
92834 -\entry{HUGE_VALF}{527}{\code {HUGE_VALF}}
92835 -\entry{HUGE_VALL}{527}{\code {HUGE_VALL}}
92836 -\entry{FE_TONEAREST}{528}{\code {FE_TONEAREST}}
92837 -\entry{FE_UPWARD}{528}{\code {FE_UPWARD}}
92838 -\entry{FE_DOWNWARD}{528}{\code {FE_DOWNWARD}}
92839 -\entry{FE_TOWARDZERO}{528}{\code {FE_TOWARDZERO}}
92840 -\entry{FE_DFL_ENV}{529}{\code {FE_DFL_ENV}}
92841 -\entry{FE_NOMASK_ENV}{529}{\code {FE_NOMASK_ENV}}
92842 -\entry{FP_FAST_FMA}{538}{\code {FP_FAST_FMA}}
92843 -\entry{_Complex_I}{538}{\code {_Complex_I}}
92844 -\entry{I}{538}{\code {I}}
92845 -\entry{CLOCKS_PER_SEC}{552}{\code {CLOCKS_PER_SEC}}
92846 -\entry{CLK_TCK}{552}{\code {CLK_TCK}}
92847 -\entry{getdate_err}{572}{\code {getdate_err}}
92848 -\entry{tzname}{576}{\code {tzname}}
92849 -\entry{timezone}{577}{\code {timezone}}
92850 -\entry{daylight}{577}{\code {daylight}}
92851 -\entry{ITIMER_REAL}{579}{\code {ITIMER_REAL}}
92852 -\entry{ITIMER_VIRTUAL}{579}{\code {ITIMER_VIRTUAL}}
92853 -\entry{ITIMER_PROF}{579}{\code {ITIMER_PROF}}
92854 -\entry{RLIMIT_CPU}{587}{\code {RLIMIT_CPU}}
92855 -\entry{RLIMIT_FSIZE}{587}{\code {RLIMIT_FSIZE}}
92856 -\entry{RLIMIT_DATA}{587}{\code {RLIMIT_DATA}}
92857 -\entry{RLIMIT_STACK}{587}{\code {RLIMIT_STACK}}
92858 -\entry{RLIMIT_CORE}{587}{\code {RLIMIT_CORE}}
92859 -\entry{RLIMIT_RSS}{587}{\code {RLIMIT_RSS}}
92860 -\entry{RLIMIT_NOFILE}{588}{\code {RLIMIT_NOFILE}}
92861 -\entry{RLIMIT_OFILE}{588}{\code {RLIMIT_OFILE}}
92862 -\entry{RLIMIT_AS}{588}{\code {RLIMIT_AS}}
92863 -\entry{RLIM_NLIMITS}{588}{\code {RLIM_NLIMITS}}
92864 -\entry{RLIM_INFINITY}{588}{\code {RLIM_INFINITY}}
92865 -\entry{PRIO_MIN}{596}{\code {PRIO_MIN}}
92866 -\entry{PRIO_MAX}{596}{\code {PRIO_MAX}}
92867 -\entry{PRIO_PROCESS}{597}{\code {PRIO_PROCESS}}
92868 -\entry{PRIO_PGRP}{597}{\code {PRIO_PGRP}}
92869 -\entry{PRIO_USER}{597}{\code {PRIO_USER}}
92870 -\entry{_SC_PAGESIZE}{599}{\code {_SC_PAGESIZE}}
92871 -\entry{_SC_PHYS_PAGES}{599}{\code {_SC_PHYS_PAGES}}
92872 -\entry{_SC_AVPHYS_PAGES}{599}{\code {_SC_AVPHYS_PAGES}}
92873 -\entry{_SC_NPROCESSORS_CONF}{600}{\code {_SC_NPROCESSORS_CONF}}
92874 -\entry{_SC_NPROCESSORS_ONLN}{600}{\code {_SC_NPROCESSORS_ONLN}}
92875 -\entry{NSIG}{613}{\code {NSIG}}
92876 -\entry{COREFILE}{614}{\code {COREFILE}}
92877 -\entry{SIGFPE}{614}{\code {SIGFPE}}
92878 -\entry{FPE_INTOVF_TRAP}{614}{\code {FPE_INTOVF_TRAP}}
92879 -\entry{FPE_INTDIV_TRAP}{614}{\code {FPE_INTDIV_TRAP}}
92880 -\entry{FPE_SUBRNG_TRAP}{615}{\code {FPE_SUBRNG_TRAP}}
92881 -\entry{FPE_FLTOVF_TRAP}{615}{\code {FPE_FLTOVF_TRAP}}
92882 -\entry{FPE_FLTDIV_TRAP}{615}{\code {FPE_FLTDIV_TRAP}}
92883 -\entry{FPE_FLTUND_TRAP}{615}{\code {FPE_FLTUND_TRAP}}
92884 -\entry{FPE_DECOVF_TRAP}{615}{\code {FPE_DECOVF_TRAP}}
92885 -\entry{SIGILL}{615}{\code {SIGILL}}
92886 -\entry{SIGSEGV}{615}{\code {SIGSEGV}}
92887 -\entry{SIGBUS}{615}{\code {SIGBUS}}
92888 -\entry{SIGABRT}{616}{\code {SIGABRT}}
92889 -\entry{SIGIOT}{616}{\code {SIGIOT}}
92890 -\entry{SIGTRAP}{616}{\code {SIGTRAP}}
92891 -\entry{SIGEMT}{616}{\code {SIGEMT}}
92892 -\entry{SIGSYS}{616}{\code {SIGSYS}}
92893 -\entry{SIGTERM}{616}{\code {SIGTERM}}
92894 -\entry{SIGINT}{616}{\code {SIGINT}}
92895 -\entry{SIGQUIT}{616}{\code {SIGQUIT}}
92896 -\entry{SIGKILL}{617}{\code {SIGKILL}}
92897 -\entry{SIGHUP}{617}{\code {SIGHUP}}
92898 -\entry{SIGALRM}{617}{\code {SIGALRM}}
92899 -\entry{SIGVTALRM}{617}{\code {SIGVTALRM}}
92900 -\entry{SIGPROF}{618}{\code {SIGPROF}}
92901 -\entry{SIGIO}{618}{\code {SIGIO}}
92902 -\entry{SIGURG}{618}{\code {SIGURG}}
92903 -\entry{SIGPOLL}{618}{\code {SIGPOLL}}
92904 -\entry{SIGCHLD}{618}{\code {SIGCHLD}}
92905 -\entry{SIGCLD}{618}{\code {SIGCLD}}
92906 -\entry{SIGCONT}{619}{\code {SIGCONT}}
92907 -\entry{SIGSTOP}{619}{\code {SIGSTOP}}
92908 -\entry{SIGTSTP}{619}{\code {SIGTSTP}}
92909 -\entry{SIGTTIN}{619}{\code {SIGTTIN}}
92910 -\entry{SIGTTOU}{619}{\code {SIGTTOU}}
92911 -\entry{SIGPIPE}{620}{\code {SIGPIPE}}
92912 -\entry{SIGLOST}{620}{\code {SIGLOST}}
92913 -\entry{SIGXCPU}{620}{\code {SIGXCPU}}
92914 -\entry{SIGXFSZ}{620}{\code {SIGXFSZ}}
92915 -\entry{SIGUSR1}{621}{\code {SIGUSR1}}
92916 -\entry{SIGUSR2}{621}{\code {SIGUSR2}}
92917 -\entry{SIGWINCH}{621}{\code {SIGWINCH}}
92918 -\entry{SIGINFO}{621}{\code {SIGINFO}}
92919 -\entry{sys_siglist}{622}{\code {sys_siglist}}
92920 -\entry{SIG_DFL}{622}{\code {SIG_DFL}}
92921 -\entry{SIG_IGN}{622}{\code {SIG_IGN}}
92922 -\entry{SIG_ERR}{624}{\code {SIG_ERR}}
92923 -\entry{SA_NOCLDSTOP}{627}{\code {SA_NOCLDSTOP}}
92924 -\entry{SA_ONSTACK}{627}{\code {SA_ONSTACK}}
92925 -\entry{SA_RESTART}{627}{\code {SA_RESTART}}
92926 -\entry{SIG_BLOCK}{645}{\code {SIG_BLOCK}}
92927 -\entry{SIG_UNBLOCK}{645}{\code {SIG_UNBLOCK}}
92928 -\entry{SIG_SETMASK}{645}{\code {SIG_SETMASK}}
92929 -\entry{SIGSTKSZ}{652}{\code {SIGSTKSZ}}
92930 -\entry{MINSIGSTKSZ}{652}{\code {MINSIGSTKSZ}}
92931 -\entry{SS_DISABLE}{653}{\code {SS_DISABLE}}
92932 -\entry{SS_ONSTACK}{653}{\code {SS_ONSTACK}}
92933 -\entry{SV_ONSTACK}{655}{\code {SV_ONSTACK}}
92934 -\entry{SV_INTERRUPT}{655}{\code {SV_INTERRUPT}}
92935 -\entry{SV_RESETHAND}{655}{\code {SV_RESETHAND}}
92936 -\entry{opterr}{659}{\code {opterr}}
92937 -\entry{optopt}{659}{\code {optopt}}
92938 -\entry{optind}{659}{\code {optind}}
92939 -\entry{optarg}{659}{\code {optarg}}
92940 -\entry{argp_program_version}{667}{\code {argp_program_version}}
92941 -\entry{argp_program_bug_address}{667}{\code {argp_program_bug_address}}
92942 -\entry{argp_program_version_hook}{667}{\code {argp_program_version_hook}}
92943 -\entry{argp_err_exit_status}{667}{\code {argp_err_exit_status}}
92944 -\entry{OPTION_ARG_OPTIONAL}{670}{\code {OPTION_ARG_OPTIONAL}}
92945 -\entry{OPTION_HIDDEN}{670}{\code {OPTION_HIDDEN}}
92946 -\entry{OPTION_ALIAS}{670}{\code {OPTION_ALIAS}}
92947 -\entry{OPTION_DOC}{670}{\code {OPTION_DOC}}
92948 -\entry{OPTION_NO_USAGE}{670}{\code {OPTION_NO_USAGE}}
92949 -\entry{ARGP_ERR_UNKNOWN}{671}{\code {ARGP_ERR_UNKNOWN}}
92950 -\entry{ARGP_KEY_ARG}{672}{\code {ARGP_KEY_ARG}}
92951 -\entry{ARGP_KEY_ARGS}{672}{\code {ARGP_KEY_ARGS}}
92952 -\entry{ARGP_KEY_END}{672}{\code {ARGP_KEY_END}}
92953 -\entry{ARGP_KEY_NO_ARGS}{672}{\code {ARGP_KEY_NO_ARGS}}
92954 -\entry{ARGP_KEY_INIT}{672}{\code {ARGP_KEY_INIT}}
92955 -\entry{ARGP_KEY_SUCCESS}{673}{\code {ARGP_KEY_SUCCESS}}
92956 -\entry{ARGP_KEY_ERROR}{673}{\code {ARGP_KEY_ERROR}}
92957 -\entry{ARGP_KEY_FINI}{673}{\code {ARGP_KEY_FINI}}
92958 -\entry{ARGP_PARSE_ARGV0}{677}{\code {ARGP_PARSE_ARGV0}}
92959 -\entry{ARGP_NO_ERRS}{677}{\code {ARGP_NO_ERRS}}
92960 -\entry{ARGP_NO_ARGS}{677}{\code {ARGP_NO_ARGS}}
92961 -\entry{ARGP_IN_ORDER}{677}{\code {ARGP_IN_ORDER}}
92962 -\entry{ARGP_NO_HELP}{677}{\code {ARGP_NO_HELP}}
92963 -\entry{ARGP_NO_EXIT}{677}{\code {ARGP_NO_EXIT}}
92964 -\entry{ARGP_LONG_ONLY}{677}{\code {ARGP_LONG_ONLY}}
92965 -\entry{ARGP_SILENT}{677}{\code {ARGP_SILENT}}
92966 -\entry{ARGP_KEY_HELP_PRE_DOC}{678}{\code {ARGP_KEY_HELP_PRE_DOC}}
92967 -\entry{ARGP_KEY_HELP_POST_DOC}{678}{\code {ARGP_KEY_HELP_POST_DOC}}
92968 -\entry{ARGP_KEY_HELP_HEADER}{678}{\code {ARGP_KEY_HELP_HEADER}}
92969 -\entry{ARGP_KEY_HELP_EXTRA}{678}{\code {ARGP_KEY_HELP_EXTRA}}
92970 -\entry{ARGP_KEY_HELP_DUP_ARGS_NOTE}{678}{\code {ARGP_KEY_HELP_DUP_ARGS_NOTE}}
92971 -\entry{ARGP_KEY_HELP_ARGS_DOC}{678}{\code {ARGP_KEY_HELP_ARGS_DOC}}
92972 -\entry{ARGP_HELP_USAGE}{679}{\code {ARGP_HELP_USAGE}}
92973 -\entry{ARGP_HELP_SHORT_USAGE}{679}{\code {ARGP_HELP_SHORT_USAGE}}
92974 -\entry{ARGP_HELP_SEE}{679}{\code {ARGP_HELP_SEE}}
92975 -\entry{ARGP_HELP_LONG}{679}{\code {ARGP_HELP_LONG}}
92976 -\entry{ARGP_HELP_PRE_DOC}{679}{\code {ARGP_HELP_PRE_DOC}}
92977 -\entry{ARGP_HELP_POST_DOC}{679}{\code {ARGP_HELP_POST_DOC}}
92978 -\entry{ARGP_HELP_DOC}{679}{\code {ARGP_HELP_DOC}}
92979 -\entry{ARGP_HELP_BUG_ADDR}{679}{\code {ARGP_HELP_BUG_ADDR}}
92980 -\entry{ARGP_HELP_LONG_ONLY}{680}{\code {ARGP_HELP_LONG_ONLY}}
92981 -\entry{ARGP_HELP_EXIT_ERR}{680}{\code {ARGP_HELP_EXIT_ERR}}
92982 -\entry{ARGP_HELP_EXIT_OK}{680}{\code {ARGP_HELP_EXIT_OK}}
92983 -\entry{ARGP_HELP_STD_ERR}{680}{\code {ARGP_HELP_STD_ERR}}
92984 -\entry{ARGP_HELP_STD_USAGE}{680}{\code {ARGP_HELP_STD_USAGE}}
92985 -\entry{ARGP_HELP_STD_HELP}{680}{\code {ARGP_HELP_STD_HELP}}
92986 -\entry{environ}{693}{\code {environ}}
92987 -\entry{EXIT_SUCCESS}{697}{\code {EXIT_SUCCESS}}
92988 -\entry{EXIT_FAILURE}{698}{\code {EXIT_FAILURE}}
92989 -\entry{L_ctermid}{728}{\code {L_ctermid}}
92990 -\entry{aliases}{733}{\code {aliases}}
92991 -\entry{ethers}{733}{\code {ethers}}
92992 -\entry{group}{733}{\code {group}}
92993 -\entry{hosts}{733}{\code {hosts}}
92994 -\entry{netgroup}{733}{\code {netgroup}}
92995 -\entry{networks}{733}{\code {networks}}
92996 -\entry{protocols}{733}{\code {protocols}}
92997 -\entry{passwd}{733}{\code {passwd}}
92998 -\entry{rpc}{733}{\code {rpc}}
92999 -\entry{services}{733}{\code {services}}
93000 -\entry{shadow}{733}{\code {shadow}}
93001 -\entry{NSS_STATUS_TRYAGAIN}{738}{\code {NSS_STATUS_TRYAGAIN}}
93002 -\entry{NSS_STATUS_UNAVAIL}{738}{\code {NSS_STATUS_UNAVAIL}}
93003 -\entry{NSS_STATUS_NOTFOUND}{738}{\code {NSS_STATUS_NOTFOUND}}
93004 -\entry{NSS_STATUS_SUCCESS}{738}{\code {NSS_STATUS_SUCCESS}}
93005 -\entry{L_cuserid}{753}{\code {L_cuserid}}
93006 -\entry{EMPTY}{755}{\code {EMPTY}}
93007 -\entry{RUN_LVL}{755}{\code {RUN_LVL}}
93008 -\entry{BOOT_TIME}{755}{\code {BOOT_TIME}}
93009 -\entry{OLD_TIME}{755}{\code {OLD_TIME}}
93010 -\entry{NEW_TIME}{755}{\code {NEW_TIME}}
93011 -\entry{INIT_PROCESS}{755}{\code {INIT_PROCESS}}
93012 -\entry{LOGIN_PROCESS}{755}{\code {LOGIN_PROCESS}}
93013 -\entry{USER_PROCESS}{755}{\code {USER_PROCESS}}
93014 -\entry{DEAD_PROCESS}{755}{\code {DEAD_PROCESS}}
93015 -\entry{ACCOUNTING}{755}{\code {ACCOUNTING}}
93016 -\entry{_PATH_UTMP}{758}{\code {_PATH_UTMP}}
93017 -\entry{_PATH_WTMP}{758}{\code {_PATH_WTMP}}
93018 -\entry{EMPTY}{759}{\code {EMPTY}}
93019 -\entry{RUN_LVL}{759}{\code {RUN_LVL}}
93020 -\entry{BOOT_TIME}{759}{\code {BOOT_TIME}}
93021 -\entry{OLD_TIME}{759}{\code {OLD_TIME}}
93022 -\entry{NEW_TIME}{759}{\code {NEW_TIME}}
93023 -\entry{INIT_PROCESS}{759}{\code {INIT_PROCESS}}
93024 -\entry{LOGIN_PROCESS}{759}{\code {LOGIN_PROCESS}}
93025 -\entry{USER_PROCESS}{759}{\code {USER_PROCESS}}
93026 -\entry{DEAD_PROCESS}{759}{\code {DEAD_PROCESS}}
93027 -\entry{_PATH_FSTAB}{775}{\code {_PATH_FSTAB}}
93028 -\entry{_PATH_MNTTAB}{775}{\code {_PATH_MNTTAB}}
93029 -\entry{_PATH_MOUNTED}{775}{\code {_PATH_MOUNTED}}
93030 -\entry{FSTAB}{775}{\code {FSTAB}}
93031 -\entry{MNTTAB}{775}{\code {MNTTAB}}
93032 -\entry{MOUNTED}{775}{\code {MOUNTED}}
93033 -\entry{FSTAB_RW}{776}{\code {FSTAB_RW}}
93034 -\entry{FSTAB_RQ}{776}{\code {FSTAB_RQ}}
93035 -\entry{FSTAB_RO}{776}{\code {FSTAB_RO}}
93036 -\entry{FSTAB_SW}{776}{\code {FSTAB_SW}}
93037 -\entry{FSTAB_XX}{776}{\code {FSTAB_XX}}
93038 -\entry{MNTTYPE_IGNORE}{778}{\code {MNTTYPE_IGNORE}}
93039 -\entry{MNTTYPE_NFS}{778}{\code {MNTTYPE_NFS}}
93040 -\entry{MNTTYPE_SWAP}{778}{\code {MNTTYPE_SWAP}}
93041 -\entry{MNTOPT_DEFAULTS}{778}{\code {MNTOPT_DEFAULTS}}
93042 -\entry{MNTOPT_RO}{778}{\code {MNTOPT_RO}}
93043 -\entry{MNTOPT_RW}{778}{\code {MNTOPT_RW}}
93044 -\entry{MNTOPT_SUID}{778}{\code {MNTOPT_SUID}}
93045 -\entry{MNTOPT_NOSUID}{778}{\code {MNTOPT_NOSUID}}
93046 -\entry{MNTOPT_NOAUTO}{779}{\code {MNTOPT_NOAUTO}}
93047 -\entry{ARG_MAX}{787}{\code {ARG_MAX}}
93048 -\entry{CHILD_MAX}{787}{\code {CHILD_MAX}}
93049 -\entry{OPEN_MAX}{787}{\code {OPEN_MAX}}
93050 -\entry{STREAM_MAX}{787}{\code {STREAM_MAX}}
93051 -\entry{TZNAME_MAX}{787}{\code {TZNAME_MAX}}
93052 -\entry{NGROUPS_MAX}{788}{\code {NGROUPS_MAX}}
93053 -\entry{SSIZE_MAX}{788}{\code {SSIZE_MAX}}
93054 -\entry{RE_DUP_MAX}{788}{\code {RE_DUP_MAX}}
93055 -\entry{_POSIX_JOB_CONTROL}{788}{\code {_POSIX_JOB_CONTROL}}
93056 -\entry{_POSIX_SAVED_IDS}{788}{\code {_POSIX_SAVED_IDS}}
93057 -\entry{_POSIX2_C_DEV}{789}{\code {_POSIX2_C_DEV}}
93058 -\entry{_POSIX2_FORT_DEV}{789}{\code {_POSIX2_FORT_DEV}}
93059 -\entry{_POSIX2_FORT_RUN}{789}{\code {_POSIX2_FORT_RUN}}
93060 -\entry{_POSIX2_LOCALEDEF}{789}{\code {_POSIX2_LOCALEDEF}}
93061 -\entry{_POSIX2_SW_DEV}{789}{\code {_POSIX2_SW_DEV}}
93062 -\entry{_POSIX_VERSION}{789}{\code {_POSIX_VERSION}}
93063 -\entry{_POSIX2_C_VERSION}{790}{\code {_POSIX2_C_VERSION}}
93064 -\entry{_SC_ARG_MAX}{790}{\code {_SC_ARG_MAX}}
93065 -\entry{_SC_CHILD_MAX}{790}{\code {_SC_CHILD_MAX}}
93066 -\entry{_SC_OPEN_MAX}{790}{\code {_SC_OPEN_MAX}}
93067 -\entry{_SC_STREAM_MAX}{790}{\code {_SC_STREAM_MAX}}
93068 -\entry{_SC_TZNAME_MAX}{790}{\code {_SC_TZNAME_MAX}}
93069 -\entry{_SC_NGROUPS_MAX}{790}{\code {_SC_NGROUPS_MAX}}
93070 -\entry{_SC_JOB_CONTROL}{791}{\code {_SC_JOB_CONTROL}}
93071 -\entry{_SC_SAVED_IDS}{791}{\code {_SC_SAVED_IDS}}
93072 -\entry{_SC_VERSION}{791}{\code {_SC_VERSION}}
93073 -\entry{_SC_CLK_TCK}{791}{\code {_SC_CLK_TCK}}
93074 -\entry{_SC_CHARCLASS_NAME_MAX}{791}{\code {_SC_CHARCLASS_NAME_MAX}}
93075 -\entry{_SC_REALTIME_SIGNALS}{791}{\code {_SC_REALTIME_SIGNALS}}
93076 -\entry{_SC_PRIORITY_SCHEDULING}{791}{\code {_SC_PRIORITY_SCHEDULING}}
93077 -\entry{_SC_TIMERS}{791}{\code {_SC_TIMERS}}
93078 -\entry{_SC_ASYNCHRONOUS_IO}{791}{\code {_SC_ASYNCHRONOUS_IO}}
93079 -\entry{_SC_PRIORITIZED_IO}{791}{\code {_SC_PRIORITIZED_IO}}
93080 -\entry{_SC_SYNCHRONIZED_IO}{791}{\code {_SC_SYNCHRONIZED_IO}}
93081 -\entry{_SC_FSYNC}{791}{\code {_SC_FSYNC}}
93082 -\entry{_SC_MAPPED_FILES}{791}{\code {_SC_MAPPED_FILES}}
93083 -\entry{_SC_MEMLOCK}{791}{\code {_SC_MEMLOCK}}
93084 -\entry{_SC_MEMLOCK_RANGE}{791}{\code {_SC_MEMLOCK_RANGE}}
93085 -\entry{_SC_MEMORY_PROTECTION}{791}{\code {_SC_MEMORY_PROTECTION}}
93086 -\entry{_SC_MESSAGE_PASSING}{791}{\code {_SC_MESSAGE_PASSING}}
93087 -\entry{_SC_SEMAPHORES}{791}{\code {_SC_SEMAPHORES}}
93088 -\entry{_SC_SHARED_MEMORY_OBJECTS}{792}{\code {_SC_SHARED_MEMORY_OBJECTS}}
93089 -\entry{_SC_AIO_LISTIO_MAX}{792}{\code {_SC_AIO_LISTIO_MAX}}
93090 -\entry{_SC_AIO_MAX}{792}{\code {_SC_AIO_MAX}}
93091 -\entry{_SC_AIO_PRIO_DELTA_MAX}{792}{\code {_SC_AIO_PRIO_DELTA_MAX}}
93092 -\entry{_SC_DELAYTIMER_MAX}{792}{\code {_SC_DELAYTIMER_MAX}}
93093 -\entry{_SC_MQ_OPEN_MAX}{792}{\code {_SC_MQ_OPEN_MAX}}
93094 -\entry{_SC_MQ_PRIO_MAX}{792}{\code {_SC_MQ_PRIO_MAX}}
93095 -\entry{_SC_RTSIG_MAX}{792}{\code {_SC_RTSIG_MAX}}
93096 -\entry{_SC_SEM_NSEMS_MAX}{792}{\code {_SC_SEM_NSEMS_MAX}}
93097 -\entry{_SC_SEM_VALUE_MAX}{792}{\code {_SC_SEM_VALUE_MAX}}
93098 -\entry{_SC_SIGQUEUE_MAX}{792}{\code {_SC_SIGQUEUE_MAX}}
93099 -\entry{_SC_TIMER_MAX}{792}{\code {_SC_TIMER_MAX}}
93100 -\entry{_SC_PII}{792}{\code {_SC_PII}}
93101 -\entry{_SC_PII_XTI}{792}{\code {_SC_PII_XTI}}
93102 -\entry{_SC_PII_SOCKET}{792}{\code {_SC_PII_SOCKET}}
93103 -\entry{_SC_PII_INTERNET}{792}{\code {_SC_PII_INTERNET}}
93104 -\entry{_SC_PII_OSI}{792}{\code {_SC_PII_OSI}}
93105 -\entry{_SC_SELECT}{792}{\code {_SC_SELECT}}
93106 -\entry{_SC_UIO_MAXIOV}{792}{\code {_SC_UIO_MAXIOV}}
93107 -\entry{_SC_PII_INTERNET_STREAM}{793}{\code {_SC_PII_INTERNET_STREAM}}
93108 -\entry{_SC_PII_INTERNET_DGRAM}{793}{\code {_SC_PII_INTERNET_DGRAM}}
93109 -\entry{_SC_PII_OSI_COTS}{793}{\code {_SC_PII_OSI_COTS}}
93110 -\entry{_SC_PII_OSI_CLTS}{793}{\code {_SC_PII_OSI_CLTS}}
93111 -\entry{_SC_PII_OSI_M}{793}{\code {_SC_PII_OSI_M}}
93112 -\entry{_SC_T_IOV_MAX}{793}{\code {_SC_T_IOV_MAX}}
93113 -\entry{_SC_THREADS}{793}{\code {_SC_THREADS}}
93114 -\entry{_SC_THREAD_SAFE_FUNCTIONS}{793}{\code {_SC_THREAD_SAFE_FUNCTIONS}}
93115 -\entry{_SC_GETGR_R_SIZE_MAX}{793}{\code {_SC_GETGR_R_SIZE_MAX}}
93116 -\entry{_SC_GETPW_R_SIZE_MAX}{793}{\code {_SC_GETPW_R_SIZE_MAX}}
93117 -\entry{_SC_LOGIN_NAME_MAX}{793}{\code {_SC_LOGIN_NAME_MAX}}
93118 -\entry{_SC_TTY_NAME_MAX}{793}{\code {_SC_TTY_NAME_MAX}}
93119 -\entry{_SC_THREAD_DESTRUCTOR_ITERATIONS}{793}{\code {_SC_THREAD_DESTRUCTOR_ITERATIONS}}
93120 -\entry{_SC_THREAD_KEYS_MAX}{793}{\code {_SC_THREAD_KEYS_MAX}}
93121 -\entry{_SC_THREAD_STACK_MIN}{793}{\code {_SC_THREAD_STACK_MIN}}
93122 -\entry{_SC_THREAD_THREADS_MAX}{793}{\code {_SC_THREAD_THREADS_MAX}}
93123 -\entry{_SC_THREAD_ATTR_STACKADDR}{793}{\code {_SC_THREAD_ATTR_STACKADDR}}
93124 -\entry{_SC_THREAD_ATTR_STACKSIZE}{793}{\code {_SC_THREAD_ATTR_STACKSIZE}}
93125 -\entry{_SC_THREAD_PRIORITY_SCHEDULING}{794}{\code {_SC_THREAD_PRIORITY_SCHEDULING}}
93126 -\entry{_SC_THREAD_PRIO_INHERIT}{794}{\code {_SC_THREAD_PRIO_INHERIT}}
93127 -\entry{_SC_THREAD_PRIO_PROTECT}{794}{\code {_SC_THREAD_PRIO_PROTECT}}
93128 -\entry{_SC_THREAD_PROCESS_SHARED}{794}{\code {_SC_THREAD_PROCESS_SHARED}}
93129 -\entry{_SC_2_C_DEV}{794}{\code {_SC_2_C_DEV}}
93130 -\entry{_SC_2_FORT_DEV}{794}{\code {_SC_2_FORT_DEV}}
93131 -\entry{_SC_2_FORT_RUN}{794}{\code {_SC_2_FORT_RUN}}
93132 -\entry{_SC_2_LOCALEDEF}{794}{\code {_SC_2_LOCALEDEF}}
93133 -\entry{_SC_2_SW_DEV}{794}{\code {_SC_2_SW_DEV}}
93134 -\entry{_SC_BC_BASE_MAX}{794}{\code {_SC_BC_BASE_MAX}}
93135 -\entry{_SC_BC_DIM_MAX}{794}{\code {_SC_BC_DIM_MAX}}
93136 -\entry{_SC_BC_SCALE_MAX}{794}{\code {_SC_BC_SCALE_MAX}}
93137 -\entry{_SC_BC_STRING_MAX}{794}{\code {_SC_BC_STRING_MAX}}
93138 -\entry{_SC_COLL_WEIGHTS_MAX}{794}{\code {_SC_COLL_WEIGHTS_MAX}}
93139 -\entry{_SC_EXPR_NEST_MAX}{794}{\code {_SC_EXPR_NEST_MAX}}
93140 -\entry{_SC_LINE_MAX}{794}{\code {_SC_LINE_MAX}}
93141 -\entry{_SC_EQUIV_CLASS_MAX}{795}{\code {_SC_EQUIV_CLASS_MAX}}
93142 -\entry{_SC_VERSION}{795}{\code {_SC_VERSION}}
93143 -\entry{_SC_2_VERSION}{795}{\code {_SC_2_VERSION}}
93144 -\entry{_SC_PAGESIZE}{795}{\code {_SC_PAGESIZE}}
93145 -\entry{_SC_NPROCESSORS_CONF}{795}{\code {_SC_NPROCESSORS_CONF}}
93146 -\entry{_SC_NPROCESSORS_ONLN}{795}{\code {_SC_NPROCESSORS_ONLN}}
93147 -\entry{_SC_PHYS_PAGES}{795}{\code {_SC_PHYS_PAGES}}
93148 -\entry{_SC_AVPHYS_PAGES}{795}{\code {_SC_AVPHYS_PAGES}}
93149 -\entry{_SC_ATEXIT_MAX}{795}{\code {_SC_ATEXIT_MAX}}
93150 -\entry{_SC_XOPEN_VERSION}{795}{\code {_SC_XOPEN_VERSION}}
93151 -\entry{_SC_XOPEN_XCU_VERSION}{795}{\code {_SC_XOPEN_XCU_VERSION}}
93152 -\entry{_SC_XOPEN_UNIX}{795}{\code {_SC_XOPEN_UNIX}}
93153 -\entry{_SC_XOPEN_REALTIME}{795}{\code {_SC_XOPEN_REALTIME}}
93154 -\entry{_SC_XOPEN_REALTIME_THREADS}{795}{\code {_SC_XOPEN_REALTIME_THREADS}}
93155 -\entry{_SC_XOPEN_LEGACY}{795}{\code {_SC_XOPEN_LEGACY}}
93156 -\entry{_SC_XOPEN_CRYPT}{795}{\code {_SC_XOPEN_CRYPT}}
93157 -\entry{_SC_XOPEN_ENH_I18N}{795}{\code {_SC_XOPEN_ENH_I18N}}
93158 -\entry{_SC_XOPEN_SHM}{796}{\code {_SC_XOPEN_SHM}}
93159 -\entry{_SC_XOPEN_XPG2}{796}{\code {_SC_XOPEN_XPG2}}
93160 -\entry{_SC_XOPEN_XPG3}{796}{\code {_SC_XOPEN_XPG3}}
93161 -\entry{_SC_XOPEN_XPG4}{796}{\code {_SC_XOPEN_XPG4}}
93162 -\entry{_SC_CHAR_BIT}{796}{\code {_SC_CHAR_BIT}}
93163 -\entry{_SC_CHAR_MAX}{796}{\code {_SC_CHAR_MAX}}
93164 -\entry{_SC_CHAR_MIN}{796}{\code {_SC_CHAR_MIN}}
93165 -\entry{_SC_INT_MAX}{796}{\code {_SC_INT_MAX}}
93166 -\entry{_SC_INT_MIN}{796}{\code {_SC_INT_MIN}}
93167 -\entry{_SC_LONG_BIT}{796}{\code {_SC_LONG_BIT}}
93168 -\entry{_SC_WORD_BIT}{796}{\code {_SC_WORD_BIT}}
93169 -\entry{_SC_MB_LEN_MAX}{796}{\code {_SC_MB_LEN_MAX}}
93170 -\entry{_SC_NZERO}{796}{\code {_SC_NZERO}}
93171 -\entry{SC_SSIZE_MAX}{796}{\code {SC_SSIZE_MAX}}
93172 -\entry{_SC_SCHAR_MAX}{796}{\code {_SC_SCHAR_MAX}}
93173 -\entry{_SC_SCHAR_MIN}{796}{\code {_SC_SCHAR_MIN}}
93174 -\entry{_SC_SHRT_MAX}{797}{\code {_SC_SHRT_MAX}}
93175 -\entry{_SC_SHRT_MIN}{797}{\code {_SC_SHRT_MIN}}
93176 -\entry{_SC_UCHAR_MAX}{797}{\code {_SC_UCHAR_MAX}}
93177 -\entry{_SC_UINT_MAX}{797}{\code {_SC_UINT_MAX}}
93178 -\entry{_SC_ULONG_MAX}{797}{\code {_SC_ULONG_MAX}}
93179 -\entry{_SC_USHRT_MAX}{797}{\code {_SC_USHRT_MAX}}
93180 -\entry{_SC_NL_ARGMAX}{797}{\code {_SC_NL_ARGMAX}}
93181 -\entry{_SC_NL_LANGMAX}{797}{\code {_SC_NL_LANGMAX}}
93182 -\entry{_SC_NL_MSGMAX}{797}{\code {_SC_NL_MSGMAX}}
93183 -\entry{_SC_NL_NMAX}{797}{\code {_SC_NL_NMAX}}
93184 -\entry{_SC_NL_SETMAX}{797}{\code {_SC_NL_SETMAX}}
93185 -\entry{_SC_NL_TEXTMAX}{797}{\code {_SC_NL_TEXTMAX}}
93186 -\entry{LINK_MAX}{799}{\code {LINK_MAX}}
93187 -\entry{MAX_CANON}{800}{\code {MAX_CANON}}
93188 -\entry{MAX_INPUT}{800}{\code {MAX_INPUT}}
93189 -\entry{NAME_MAX}{800}{\code {NAME_MAX}}
93190 -\entry{PATH_MAX}{800}{\code {PATH_MAX}}
93191 -\entry{PIPE_BUF}{800}{\code {PIPE_BUF}}
93192 -\entry{MAXNAMLEN}{800}{\code {MAXNAMLEN}}
93193 -\entry{FILENAME_MAX}{800}{\code {FILENAME_MAX}}
93194 -\entry{_POSIX_CHOWN_RESTRICTED}{801}{\code {_POSIX_CHOWN_RESTRICTED}}
93195 -\entry{_POSIX_NO_TRUNC}{801}{\code {_POSIX_NO_TRUNC}}
93196 -\entry{_POSIX_VDISABLE}{801}{\code {_POSIX_VDISABLE}}
93197 -\entry{BC_BASE_MAX}{804}{\code {BC_BASE_MAX}}
93198 -\entry{BC_DIM_MAX}{804}{\code {BC_DIM_MAX}}
93199 -\entry{BC_SCALE_MAX}{804}{\code {BC_SCALE_MAX}}
93200 -\entry{BC_STRING_MAX}{804}{\code {BC_STRING_MAX}}
93201 -\entry{COLL_WEIGHTS_MAX}{804}{\code {COLL_WEIGHTS_MAX}}
93202 -\entry{EXPR_NEST_MAX}{804}{\code {EXPR_NEST_MAX}}
93203 -\entry{LINE_MAX}{804}{\code {LINE_MAX}}
93204 -\entry{EQUIV_CLASS_MAX}{804}{\code {EQUIV_CLASS_MAX}}
93205 -\entry{DES_ENCRYPT}{814}{\code {DES_ENCRYPT}}
93206 -\entry{DES_DECRYPT}{814}{\code {DES_DECRYPT}}
93207 -\entry{DES_HW}{814}{\code {DES_HW}}
93208 -\entry{DES_SW}{814}{\code {DES_SW}}
93209 -\entry{DESERR_NONE}{814}{\code {DESERR_NONE}}
93210 -\entry{DESERR_NOHWDEVICE}{814}{\code {DESERR_NOHWDEVICE}}
93211 -\entry{DESERR_HWERROR}{814}{\code {DESERR_HWERROR}}
93212 -\entry{DESERR_BADPARAM}{814}{\code {DESERR_BADPARAM}}
93213 -\entry{SEM_VALUE_MAX}{831}{\code {SEM_VALUE_MAX}}
93214 -\entry{NDEBUG}{841}{\code {NDEBUG}}
93215 -\entry{NULL}{848}{\code {NULL}}
93216 -\entry{SCHAR_MIN}{850}{\code {SCHAR_MIN}}
93217 -\entry{SCHAR_MAX}{850}{\code {SCHAR_MAX}}
93218 -\entry{UCHAR_MAX}{850}{\code {UCHAR_MAX}}
93219 -\entry{CHAR_MIN}{850}{\code {CHAR_MIN}}
93220 -\entry{CHAR_MAX}{850}{\code {CHAR_MAX}}
93221 -\entry{SHRT_MIN}{850}{\code {SHRT_MIN}}
93222 -\entry{SHRT_MAX}{851}{\code {SHRT_MAX}}
93223 -\entry{USHRT_MAX}{851}{\code {USHRT_MAX}}
93224 -\entry{INT_MIN}{851}{\code {INT_MIN}}
93225 -\entry{INT_MAX}{851}{\code {INT_MAX}}
93226 -\entry{UINT_MAX}{851}{\code {UINT_MAX}}
93227 -\entry{LONG_MIN}{851}{\code {LONG_MIN}}
93228 -\entry{LONG_MAX}{851}{\code {LONG_MAX}}
93229 -\entry{ULONG_MAX}{851}{\code {ULONG_MAX}}
93230 -\entry{LONG_LONG_MIN}{851}{\code {LONG_LONG_MIN}}
93231 -\entry{LONG_LONG_MAX}{851}{\code {LONG_LONG_MAX}}
93232 -\entry{ULONG_LONG_MAX}{851}{\code {ULONG_LONG_MAX}}
93233 -\entry{WCHAR_MAX}{851}{\code {WCHAR_MAX}}
93234 -\entry{FLT_ROUNDS}{853}{\code {FLT_ROUNDS}}
93235 -\entry{FLT_RADIX}{854}{\code {FLT_RADIX}}
93236 -\entry{FLT_MANT_DIG}{854}{\code {FLT_MANT_DIG}}
93237 -\entry{DBL_MANT_DIG}{854}{\code {DBL_MANT_DIG}}
93238 -\entry{LDBL_MANT_DIG}{854}{\code {LDBL_MANT_DIG}}
93239 -\entry{FLT_DIG}{854}{\code {FLT_DIG}}
93240 -\entry{DBL_DIG}{854}{\code {DBL_DIG}}
93241 -\entry{LDBL_DIG}{854}{\code {LDBL_DIG}}
93242 -\entry{FLT_MIN_EXP}{854}{\code {FLT_MIN_EXP}}
93243 -\entry{DBL_MIN_EXP}{854}{\code {DBL_MIN_EXP}}
93244 -\entry{LDBL_MIN_EXP}{855}{\code {LDBL_MIN_EXP}}
93245 -\entry{FLT_MIN_10_EXP}{855}{\code {FLT_MIN_10_EXP}}
93246 -\entry{DBL_MIN_10_EXP}{855}{\code {DBL_MIN_10_EXP}}
93247 -\entry{LDBL_MIN_10_EXP}{855}{\code {LDBL_MIN_10_EXP}}
93248 -\entry{FLT_MAX_EXP}{855}{\code {FLT_MAX_EXP}}
93249 -\entry{DBL_MAX_EXP}{855}{\code {DBL_MAX_EXP}}
93250 -\entry{LDBL_MAX_EXP}{855}{\code {LDBL_MAX_EXP}}
93251 -\entry{FLT_MAX_10_EXP}{855}{\code {FLT_MAX_10_EXP}}
93252 -\entry{DBL_MAX_10_EXP}{855}{\code {DBL_MAX_10_EXP}}
93253 -\entry{LDBL_MAX_10_EXP}{855}{\code {LDBL_MAX_10_EXP}}
93254 -\entry{FLT_MAX}{855}{\code {FLT_MAX}}
93255 -\entry{DBL_MAX}{855}{\code {DBL_MAX}}
93256 -\entry{LDBL_MAX}{855}{\code {LDBL_MAX}}
93257 -\entry{FLT_MIN}{855}{\code {FLT_MIN}}
93258 -\entry{DBL_MIN}{855}{\code {DBL_MIN}}
93259 -\entry{LDBL_MIN}{855}{\code {LDBL_MIN}}
93260 -\entry{FLT_EPSILON}{856}{\code {FLT_EPSILON}}
93261 -\entry{DBL_EPSILON}{856}{\code {DBL_EPSILON}}
93262 -\entry{LDBL_EPSILON}{856}{\code {LDBL_EPSILON}}
93263 diff -u -udbrN glibc-2.3.2/manual/libc.vrs glibc-2.3.2-200304020432/manual/libc.vrs
93264 --- glibc-2.3.2/manual/libc.vrs Tue Feb 25 11:34:58 2003
93265 +++ glibc-2.3.2-200304020432/manual/libc.vrs Thu Jan 1 01:00:00 1970
93266 @@ -1,1074 +0,0 @@
93267 -\initial {(}
93268 -\entry {\code {(*__gconv_end_fct)}}{147}
93269 -\entry {\code {(*__gconv_fct)}}{148}
93270 -\entry {\code {(*__gconv_init_fct)}}{145}
93271 -\initial {_}
93272 -\entry {\code {__free_hook}}{41}
93273 -\entry {\code {__malloc_hook}}{41}
93274 -\entry {\code {__malloc_initialize_hook}}{42}
93275 -\entry {\code {__memalign_hook}}{41}
93276 -\entry {\code {__realloc_hook}}{41}
93277 -\entry {\code {_BSD_SOURCE}}{8}
93278 -\entry {\code {_Complex_I}}{538}
93279 -\entry {\code {_FILE_OFFSET_BITS}}{9}
93280 -\entry {\code {_GNU_SOURCE}}{10}
93281 -\entry {\code {_IOFBF}}{290}
93282 -\entry {\code {_IOLBF}}{291}
93283 -\entry {\code {_IONBF}}{291}
93284 -\entry {\code {_ISOC99_SOURCE}}{10}
93285 -\entry {\code {_LARGEFILE_SOURCE}}{9}
93286 -\entry {\code {_LARGEFILE64_SOURCE}}{9}
93287 -\entry {\code {_PATH_FSTAB}}{775}
93288 -\entry {\code {_PATH_MNTTAB}}{775}
93289 -\entry {\code {_PATH_MOUNTED}}{775}
93290 -\entry {\code {_PATH_UTMP}}{758}
93291 -\entry {\code {_PATH_WTMP}}{758}
93292 -\entry {\code {_POSIX_C_SOURCE}}{8}
93293 -\entry {\code {_POSIX_CHOWN_RESTRICTED}}{801}
93294 -\entry {\code {_POSIX_JOB_CONTROL}}{788}
93295 -\entry {\code {_POSIX_NO_TRUNC}}{801}
93296 -\entry {\code {_POSIX_SAVED_IDS}}{788}
93297 -\entry {\code {_POSIX_SOURCE}}{8}
93298 -\entry {\code {_POSIX_VDISABLE}}{458, 801}
93299 -\entry {\code {_POSIX_VERSION}}{789}
93300 -\entry {\code {_POSIX2_C_DEV}}{789}
93301 -\entry {\code {_POSIX2_C_VERSION}}{790}
93302 -\entry {\code {_POSIX2_FORT_DEV}}{789}
93303 -\entry {\code {_POSIX2_FORT_RUN}}{789}
93304 -\entry {\code {_POSIX2_LOCALEDEF}}{789}
93305 -\entry {\code {_POSIX2_SW_DEV}}{789}
93306 -\entry {\code {_REENTRANT}}{10}
93307 -\entry {\code {_SC_2_C_DEV}}{794}
93308 -\entry {\code {_SC_2_FORT_DEV}}{794}
93309 -\entry {\code {_SC_2_FORT_RUN}}{794}
93310 -\entry {\code {_SC_2_LOCALEDEF}}{794}
93311 -\entry {\code {_SC_2_SW_DEV}}{794}
93312 -\entry {\code {_SC_2_VERSION}}{795}
93313 -\entry {\code {_SC_AIO_LISTIO_MAX}}{792}
93314 -\entry {\code {_SC_AIO_MAX}}{792}
93315 -\entry {\code {_SC_AIO_PRIO_DELTA_MAX}}{792}
93316 -\entry {\code {_SC_ARG_MAX}}{790}
93317 -\entry {\code {_SC_ASYNCHRONOUS_IO}}{791}
93318 -\entry {\code {_SC_ATEXIT_MAX}}{795}
93319 -\entry {\code {_SC_AVPHYS_PAGES}}{599, 795}
93320 -\entry {\code {_SC_BC_BASE_MAX}}{794}
93321 -\entry {\code {_SC_BC_DIM_MAX}}{794}
93322 -\entry {\code {_SC_BC_SCALE_MAX}}{794}
93323 -\entry {\code {_SC_BC_STRING_MAX}}{794}
93324 -\entry {\code {_SC_CHAR_BIT}}{796}
93325 -\entry {\code {_SC_CHAR_MAX}}{796}
93326 -\entry {\code {_SC_CHAR_MIN}}{796}
93327 -\entry {\code {_SC_CHARCLASS_NAME_MAX}}{791}
93328 -\entry {\code {_SC_CHILD_MAX}}{790}
93329 -\entry {\code {_SC_CLK_TCK}}{791}
93330 -\entry {\code {_SC_COLL_WEIGHTS_MAX}}{794}
93331 -\entry {\code {_SC_DELAYTIMER_MAX}}{792}
93332 -\entry {\code {_SC_EQUIV_CLASS_MAX}}{795}
93333 -\entry {\code {_SC_EXPR_NEST_MAX}}{794}
93334 -\entry {\code {_SC_FSYNC}}{791}
93335 -\entry {\code {_SC_GETGR_R_SIZE_MAX}}{793}
93336 -\entry {\code {_SC_GETPW_R_SIZE_MAX}}{793}
93337 -\entry {\code {_SC_INT_MAX}}{796}
93338 -\entry {\code {_SC_INT_MIN}}{796}
93339 -\entry {\code {_SC_JOB_CONTROL}}{791}
93340 -\entry {\code {_SC_LINE_MAX}}{794}
93341 -\entry {\code {_SC_LOGIN_NAME_MAX}}{793}
93342 -\entry {\code {_SC_LONG_BIT}}{796}
93343 -\entry {\code {_SC_MAPPED_FILES}}{791}
93344 -\entry {\code {_SC_MB_LEN_MAX}}{796}
93345 -\entry {\code {_SC_MEMLOCK}}{791}
93346 -\entry {\code {_SC_MEMLOCK_RANGE}}{791}
93347 -\entry {\code {_SC_MEMORY_PROTECTION}}{791}
93348 -\entry {\code {_SC_MESSAGE_PASSING}}{791}
93349 -\entry {\code {_SC_MQ_OPEN_MAX}}{792}
93350 -\entry {\code {_SC_MQ_PRIO_MAX}}{792}
93351 -\entry {\code {_SC_NGROUPS_MAX}}{790}
93352 -\entry {\code {_SC_NL_ARGMAX}}{797}
93353 -\entry {\code {_SC_NL_LANGMAX}}{797}
93354 -\entry {\code {_SC_NL_MSGMAX}}{797}
93355 -\entry {\code {_SC_NL_NMAX}}{797}
93356 -\entry {\code {_SC_NL_SETMAX}}{797}
93357 -\entry {\code {_SC_NL_TEXTMAX}}{797}
93358 -\entry {\code {_SC_NPROCESSORS_CONF}}{600, 795}
93359 -\entry {\code {_SC_NPROCESSORS_ONLN}}{600, 795}
93360 -\entry {\code {_SC_NZERO}}{796}
93361 -\entry {\code {_SC_OPEN_MAX}}{790}
93362 -\entry {\code {_SC_PAGESIZE}}{317, 599, 795}
93363 -\entry {\code {_SC_PHYS_PAGES}}{599, 795}
93364 -\entry {\code {_SC_PII}}{792}
93365 -\entry {\code {_SC_PII_INTERNET}}{792}
93366 -\entry {\code {_SC_PII_INTERNET_DGRAM}}{793}
93367 -\entry {\code {_SC_PII_INTERNET_STREAM}}{793}
93368 -\entry {\code {_SC_PII_OSI}}{792}
93369 -\entry {\code {_SC_PII_OSI_CLTS}}{793}
93370 -\entry {\code {_SC_PII_OSI_COTS}}{793}
93371 -\entry {\code {_SC_PII_OSI_M}}{793}
93372 -\entry {\code {_SC_PII_SOCKET}}{792}
93373 -\entry {\code {_SC_PII_XTI}}{792}
93374 -\entry {\code {_SC_PRIORITIZED_IO}}{791}
93375 -\entry {\code {_SC_PRIORITY_SCHEDULING}}{791}
93376 -\entry {\code {_SC_REALTIME_SIGNALS}}{791}
93377 -\entry {\code {_SC_RTSIG_MAX}}{792}
93378 -\entry {\code {_SC_SAVED_IDS}}{791}
93379 -\entry {\code {_SC_SCHAR_MAX}}{796}
93380 -\entry {\code {_SC_SCHAR_MIN}}{796}
93381 -\entry {\code {_SC_SELECT}}{792}
93382 -\entry {\code {_SC_SEM_NSEMS_MAX}}{792}
93383 -\entry {\code {_SC_SEM_VALUE_MAX}}{792}
93384 -\entry {\code {_SC_SEMAPHORES}}{791}
93385 -\entry {\code {_SC_SHARED_MEMORY_OBJECTS}}{792}
93386 -\entry {\code {_SC_SHRT_MAX}}{797}
93387 -\entry {\code {_SC_SHRT_MIN}}{797}
93388 -\entry {\code {_SC_SIGQUEUE_MAX}}{792}
93389 -\entry {\code {_SC_STREAM_MAX}}{790}
93390 -\entry {\code {_SC_SYNCHRONIZED_IO}}{791}
93391 -\entry {\code {_SC_T_IOV_MAX}}{793}
93392 -\entry {\code {_SC_THREAD_ATTR_STACKADDR}}{793}
93393 -\entry {\code {_SC_THREAD_ATTR_STACKSIZE}}{793}
93394 -\entry {\code {_SC_THREAD_DESTRUCTOR_ITERATIONS}}{793}
93395 -\entry {\code {_SC_THREAD_KEYS_MAX}}{793}
93396 -\entry {\code {_SC_THREAD_PRIO_INHERIT}}{794}
93397 -\entry {\code {_SC_THREAD_PRIO_PROTECT}}{794}
93398 -\entry {\code {_SC_THREAD_PRIORITY_SCHEDULING}}{794}
93399 -\entry {\code {_SC_THREAD_PROCESS_SHARED}}{794}
93400 -\entry {\code {_SC_THREAD_SAFE_FUNCTIONS}}{793}
93401 -\entry {\code {_SC_THREAD_STACK_MIN}}{793}
93402 -\entry {\code {_SC_THREAD_THREADS_MAX}}{793}
93403 -\entry {\code {_SC_THREADS}}{793}
93404 -\entry {\code {_SC_TIMER_MAX}}{792}
93405 -\entry {\code {_SC_TIMERS}}{791}
93406 -\entry {\code {_SC_TTY_NAME_MAX}}{793}
93407 -\entry {\code {_SC_TZNAME_MAX}}{790}
93408 -\entry {\code {_SC_UCHAR_MAX}}{797}
93409 -\entry {\code {_SC_UINT_MAX}}{797}
93410 -\entry {\code {_SC_UIO_MAXIOV}}{792}
93411 -\entry {\code {_SC_ULONG_MAX}}{797}
93412 -\entry {\code {_SC_USHRT_MAX}}{797}
93413 -\entry {\code {_SC_VERSION}}{791, 795}
93414 -\entry {\code {_SC_WORD_BIT}}{796}
93415 -\entry {\code {_SC_XOPEN_CRYPT}}{795}
93416 -\entry {\code {_SC_XOPEN_ENH_I18N}}{795}
93417 -\entry {\code {_SC_XOPEN_LEGACY}}{795}
93418 -\entry {\code {_SC_XOPEN_REALTIME}}{795}
93419 -\entry {\code {_SC_XOPEN_REALTIME_THREADS}}{795}
93420 -\entry {\code {_SC_XOPEN_SHM}}{796}
93421 -\entry {\code {_SC_XOPEN_UNIX}}{795}
93422 -\entry {\code {_SC_XOPEN_VERSION}}{795}
93423 -\entry {\code {_SC_XOPEN_XCU_VERSION}}{795}
93424 -\entry {\code {_SC_XOPEN_XPG2}}{796}
93425 -\entry {\code {_SC_XOPEN_XPG3}}{796}
93426 -\entry {\code {_SC_XOPEN_XPG4}}{796}
93427 -\entry {\code {_SVID_SOURCE}}{8}
93428 -\entry {\code {_THREAD_SAFE}}{10}
93429 -\entry {\code {_XOPEN_SOURCE}}{8}
93430 -\entry {\code {_XOPEN_SOURCE_EXTENDED}}{9}
93431 -\initial {A}
93432 -\entry {\code {ABDAY_1}}{162}
93433 -\entry {\code {ABDAY_2}}{162}
93434 -\entry {\code {ABDAY_3}}{162}
93435 -\entry {\code {ABDAY_4}}{162}
93436 -\entry {\code {ABDAY_5}}{162}
93437 -\entry {\code {ABDAY_6}}{162}
93438 -\entry {\code {ABDAY_7}}{162}
93439 -\entry {\code {ABMON_1}}{162}
93440 -\entry {\code {ABMON_10}}{162}
93441 -\entry {\code {ABMON_11}}{162}
93442 -\entry {\code {ABMON_12}}{162}
93443 -\entry {\code {ABMON_2}}{162}
93444 -\entry {\code {ABMON_3}}{162}
93445 -\entry {\code {ABMON_4}}{162}
93446 -\entry {\code {ABMON_5}}{162}
93447 -\entry {\code {ABMON_6}}{162}
93448 -\entry {\code {ABMON_7}}{162}
93449 -\entry {\code {ABMON_8}}{162}
93450 -\entry {\code {ABMON_9}}{162}
93451 -\entry {\code {ACCOUNTING}}{755}
93452 -\entry {\code {AF_FILE}}{402}
93453 -\entry {\code {AF_INET}}{402}
93454 -\entry {\code {AF_LOCAL}}{402}
93455 -\entry {\code {AF_UNIX}}{402}
93456 -\entry {\code {AF_UNSPEC}}{402}
93457 -\entry {\code {aliases}}{733}
93458 -\entry {\code {ALT_DIGITS}}{164}
93459 -\entry {\code {ALTWERASE}}{456}
93460 -\entry {\code {AM_STR}}{163}
93461 -\entry {\code {ARG_MAX}}{787}
93462 -\entry {\code {argp_err_exit_status}}{667}
93463 -\entry {\code {ARGP_ERR_UNKNOWN}}{671}
93464 -\entry {\code {ARGP_HELP_BUG_ADDR}}{679}
93465 -\entry {\code {ARGP_HELP_DOC}}{679}
93466 -\entry {\code {ARGP_HELP_EXIT_ERR}}{680}
93467 -\entry {\code {ARGP_HELP_EXIT_OK}}{680}
93468 -\entry {\code {ARGP_HELP_LONG}}{679}
93469 -\entry {\code {ARGP_HELP_LONG_ONLY}}{680}
93470 -\entry {\code {ARGP_HELP_POST_DOC}}{679}
93471 -\entry {\code {ARGP_HELP_PRE_DOC}}{679}
93472 -\entry {\code {ARGP_HELP_SEE}}{679}
93473 -\entry {\code {ARGP_HELP_SHORT_USAGE}}{679}
93474 -\entry {\code {ARGP_HELP_STD_ERR}}{680}
93475 -\entry {\code {ARGP_HELP_STD_HELP}}{680}
93476 -\entry {\code {ARGP_HELP_STD_USAGE}}{680}
93477 -\entry {\code {ARGP_HELP_USAGE}}{679}
93478 -\entry {\code {ARGP_IN_ORDER}}{677}
93479 -\entry {\code {ARGP_KEY_ARG}}{672}
93480 -\entry {\code {ARGP_KEY_ARGS}}{672}
93481 -\entry {\code {ARGP_KEY_END}}{672}
93482 -\entry {\code {ARGP_KEY_ERROR}}{673}
93483 -\entry {\code {ARGP_KEY_FINI}}{673}
93484 -\entry {\code {ARGP_KEY_HELP_ARGS_DOC}}{678}
93485 -\entry {\code {ARGP_KEY_HELP_DUP_ARGS_NOTE}}{678}
93486 -\entry {\code {ARGP_KEY_HELP_EXTRA}}{678}
93487 -\entry {\code {ARGP_KEY_HELP_HEADER}}{678}
93488 -\entry {\code {ARGP_KEY_HELP_POST_DOC}}{678}
93489 -\entry {\code {ARGP_KEY_HELP_PRE_DOC}}{678}
93490 -\entry {\code {ARGP_KEY_INIT}}{672}
93491 -\entry {\code {ARGP_KEY_NO_ARGS}}{672}
93492 -\entry {\code {ARGP_KEY_SUCCESS}}{673}
93493 -\entry {\code {ARGP_LONG_ONLY}}{677}
93494 -\entry {\code {ARGP_NO_ARGS}}{677}
93495 -\entry {\code {ARGP_NO_ERRS}}{677}
93496 -\entry {\code {ARGP_NO_EXIT}}{677}
93497 -\entry {\code {ARGP_NO_HELP}}{677}
93498 -\entry {\code {ARGP_PARSE_ARGV0}}{677}
93499 -\entry {\code {argp_program_bug_address}}{667}
93500 -\entry {\code {argp_program_version}}{667}
93501 -\entry {\code {argp_program_version_hook}}{667}
93502 -\entry {\code {ARGP_SILENT}}{677}
93503 -\initial {B}
93504 -\entry {\code {B0}}{458}
93505 -\entry {\code {B110}}{458}
93506 -\entry {\code {B115200}}{458}
93507 -\entry {\code {B1200}}{458}
93508 -\entry {\code {B134}}{458}
93509 -\entry {\code {B150}}{458}
93510 -\entry {\code {B1800}}{458}
93511 -\entry {\code {B19200}}{458}
93512 -\entry {\code {B200}}{458}
93513 -\entry {\code {B230400}}{458}
93514 -\entry {\code {B2400}}{458}
93515 -\entry {\code {B300}}{458}
93516 -\entry {\code {B38400}}{458}
93517 -\entry {\code {B460800}}{458}
93518 -\entry {\code {B4800}}{458}
93519 -\entry {\code {B50}}{458}
93520 -\entry {\code {B57600}}{458}
93521 -\entry {\code {B600}}{458}
93522 -\entry {\code {B75}}{458}
93523 -\entry {\code {B9600}}{458}
93524 -\entry {\code {BC_BASE_MAX}}{804}
93525 -\entry {\code {BC_DIM_MAX}}{804}
93526 -\entry {\code {BC_SCALE_MAX}}{804}
93527 -\entry {\code {BC_STRING_MAX}}{804}
93528 -\entry {\code {BOOT_TIME}}{755, 759}
93529 -\entry {\code {BRKINT}}{451}
93530 -\entry {\code {BUFSIZ}}{291}
93531 -\initial {C}
93532 -\entry {\code {CCTS_OFLOW}}{454}
93533 -\entry {\code {CHAR_MAX}}{850}
93534 -\entry {\code {CHAR_MIN}}{850}
93535 -\entry {\code {CHILD_MAX}}{787}
93536 -\entry {\code {CIGNORE}}{454}
93537 -\entry {\code {CLK_TCK}}{552}
93538 -\entry {\code {CLOCAL}}{453}
93539 -\entry {\code {CLOCKS_PER_SEC}}{552}
93540 -\entry {\code {CODESET}}{162}
93541 -\entry {\code {COLL_WEIGHTS_MAX}}{804}
93542 -\entry {\code {COREFILE}}{614}
93543 -\entry {\code {CREAD}}{453}
93544 -\entry {\code {CRNCYSTR}}{164}
93545 -\entry {\code {CRTS_IFLOW}}{454}
93546 -\entry {\code {CS5}}{454}
93547 -\entry {\code {CS6}}{454}
93548 -\entry {\code {CS7}}{454}
93549 -\entry {\code {CS8}}{454}
93550 -\entry {\code {CSIZE}}{454}
93551 -\entry {\code {CSTOPB}}{453}
93552 -\entry {\code {CURRENCY_SYMBOL}}{164}
93553 -\initial {D}
93554 -\entry {\code {D_FMT}}{163}
93555 -\entry {\code {D_T_FMT}}{163}
93556 -\entry {\code {DAY_1}}{162}
93557 -\entry {\code {DAY_2}}{162}
93558 -\entry {\code {DAY_3}}{162}
93559 -\entry {\code {DAY_4}}{162}
93560 -\entry {\code {DAY_5}}{162}
93561 -\entry {\code {DAY_6}}{162}
93562 -\entry {\code {DAY_7}}{162}
93563 -\entry {\code {daylight}}{577}
93564 -\entry {\code {DBL_DIG}}{854}
93565 -\entry {\code {DBL_EPSILON}}{856}
93566 -\entry {\code {DBL_MANT_DIG}}{854}
93567 -\entry {\code {DBL_MAX}}{855}
93568 -\entry {\code {DBL_MAX_10_EXP}}{855}
93569 -\entry {\code {DBL_MAX_EXP}}{855}
93570 -\entry {\code {DBL_MIN}}{855}
93571 -\entry {\code {DBL_MIN_10_EXP}}{855}
93572 -\entry {\code {DBL_MIN_EXP}}{854}
93573 -\entry {\code {DEAD_PROCESS}}{755, 759}
93574 -\entry {\code {DECIMAL_POINT}}{165}
93575 -\entry {\code {DES_DECRYPT}}{814}
93576 -\entry {\code {DES_ENCRYPT}}{814}
93577 -\entry {\code {DES_HW}}{814}
93578 -\entry {\code {DES_SW}}{814}
93579 -\entry {\code {DESERR_BADPARAM}}{814}
93580 -\entry {\code {DESERR_HWERROR}}{814}
93581 -\entry {\code {DESERR_NOHWDEVICE}}{814}
93582 -\entry {\code {DESERR_NONE}}{814}
93583 -\entry {\code {DT_BLK}}{354}
93584 -\entry {\code {DT_CHR}}{354}
93585 -\entry {\code {DT_DIR}}{354}
93586 -\entry {\code {DT_FIFO}}{354}
93587 -\entry {\code {DT_REG}}{353}
93588 -\entry {\code {DT_SOCK}}{354}
93589 -\entry {\code {DT_UNKNOWN}}{353}
93590 -\initial {E}
93591 -\entry {\code {E2BIG}}{17}
93592 -\entry {\code {EACCES}}{17}
93593 -\entry {\code {EADDRINUSE}}{20}
93594 -\entry {\code {EADDRNOTAVAIL}}{21}
93595 -\entry {\code {EADV}}{25}
93596 -\entry {\code {EAFNOSUPPORT}}{20}
93597 -\entry {\code {EAGAIN}}{19}
93598 -\entry {\code {EALREADY}}{20}
93599 -\entry {\code {EAUTH}}{23}
93600 -\entry {\code {EBACKGROUND}}{23}
93601 -\entry {\code {EBADE}}{25}
93602 -\entry {\code {EBADF}}{17, 466}
93603 -\entry {\code {EBADFD}}{25}
93604 -\entry {\code {EBADMSG}}{24}
93605 -\entry {\code {EBADR}}{25}
93606 -\entry {\code {EBADRPC}}{22}
93607 -\entry {\code {EBADRQC}}{25}
93608 -\entry {\code {EBADSLT}}{25}
93609 -\entry {\code {EBFONT}}{25}
93610 -\entry {\code {EBUSY}}{17}
93611 -\entry {\code {ECANCELED}}{24}
93612 -\entry {\code {ECHILD}}{17}
93613 -\entry {\code {ECHO}}{455}
93614 -\entry {\code {ECHOCTL}}{455}
93615 -\entry {\code {ECHOE}}{455}
93616 -\entry {\code {ECHOK}}{455}
93617 -\entry {\code {ECHOKE}}{455}
93618 -\entry {\code {ECHONL}}{455}
93619 -\entry {\code {ECHOPRT}}{455}
93620 -\entry {\code {ECHRNG}}{24}
93621 -\entry {\code {ECOMM}}{25}
93622 -\entry {\code {ECONNABORTED}}{21}
93623 -\entry {\code {ECONNREFUSED}}{22}
93624 -\entry {\code {ECONNRESET}}{21}
93625 -\entry {\code {ED}}{24}
93626 -\entry {\code {EDEADLK}}{17}
93627 -\entry {\code {EDEADLOCK}}{25}
93628 -\entry {\code {EDESTADDRREQ}}{21}
93629 -\entry {\code {EDIED}}{24}
93630 -\entry {\code {EDOM}}{19}
93631 -\entry {\code {EDOTDOT}}{25}
93632 -\entry {\code {EDQUOT}}{22}
93633 -\entry {\code {EEXIST}}{17}
93634 -\entry {\code {EFAULT}}{17}
93635 -\entry {\code {EFBIG}}{18}
93636 -\entry {\code {EFTYPE}}{23}
93637 -\entry {\code {EGRATUITOUS}}{24}
93638 -\entry {\code {EGREGIOUS}}{24}
93639 -\entry {\code {EHOSTDOWN}}{22}
93640 -\entry {\code {EHOSTUNREACH}}{22}
93641 -\entry {\code {EIDRM}}{24}
93642 -\entry {\code {EIEIO}}{24}
93643 -\entry {\code {EILSEQ}}{23}
93644 -\entry {\code {EINPROGRESS}}{20}
93645 -\entry {\code {EINTR}}{16}
93646 -\entry {\code {EINVAL}}{18, 466}
93647 -\entry {\code {EIO}}{16}
93648 -\entry {\code {EISCONN}}{21}
93649 -\entry {\code {EISDIR}}{18}
93650 -\entry {\code {EISNAM}}{25}
93651 -\entry {\code {EL2HLT}}{25}
93652 -\entry {\code {EL2NSYNC}}{24}
93653 -\entry {\code {EL3HLT}}{24}
93654 -\entry {\code {EL3RST}}{24}
93655 -\entry {\code {ELIBACC}}{25}
93656 -\entry {\code {ELIBBAD}}{25}
93657 -\entry {\code {ELIBEXEC}}{25}
93658 -\entry {\code {ELIBMAX}}{25}
93659 -\entry {\code {ELIBSCN}}{25}
93660 -\entry {\code {ELNRNG}}{25}
93661 -\entry {\code {ELOOP}}{22}
93662 -\entry {\code {EMEDIUMTYPE}}{25}
93663 -\entry {\code {EMFILE}}{18}
93664 -\entry {\code {EMLINK}}{19}
93665 -\entry {\code {EMPTY}}{755, 759}
93666 -\entry {\code {EMSGSIZE}}{20}
93667 -\entry {\code {EMULTIHOP}}{24}
93668 -\entry {\code {ENAMETOOLONG}}{22}
93669 -\entry {\code {ENAVAIL}}{25}
93670 -\entry {\code {ENEEDAUTH}}{23}
93671 -\entry {\code {ENETDOWN}}{21}
93672 -\entry {\code {ENETRESET}}{21}
93673 -\entry {\code {ENETUNREACH}}{21}
93674 -\entry {\code {ENFILE}}{18}
93675 -\entry {\code {ENOANO}}{25}
93676 -\entry {\code {ENOBUFS}}{21}
93677 -\entry {\code {ENOCSI}}{25}
93678 -\entry {\code {ENODATA}}{24}
93679 -\entry {\code {ENODEV}}{18}
93680 -\entry {\code {ENOENT}}{16}
93681 -\entry {\code {ENOEXEC}}{17}
93682 -\entry {\code {ENOLCK}}{23}
93683 -\entry {\code {ENOLINK}}{24}
93684 -\entry {\code {ENOMEDIUM}}{25}
93685 -\entry {\code {ENOMEM}}{17}
93686 -\entry {\code {ENOMSG}}{24}
93687 -\entry {\code {ENONET}}{25}
93688 -\entry {\code {ENOPKG}}{25}
93689 -\entry {\code {ENOPROTOOPT}}{20}
93690 -\entry {\code {ENOSPC}}{18}
93691 -\entry {\code {ENOSR}}{24}
93692 -\entry {\code {ENOSTR}}{24}
93693 -\entry {\code {ENOSYS}}{23}
93694 -\entry {\code {ENOTBLK}}{17}
93695 -\entry {\code {ENOTCONN}}{21}
93696 -\entry {\code {ENOTDIR}}{18}
93697 -\entry {\code {ENOTEMPTY}}{22}
93698 -\entry {\code {ENOTNAM}}{25}
93699 -\entry {\code {ENOTSOCK}}{20}
93700 -\entry {\code {ENOTSUP}}{23}
93701 -\entry {\code {ENOTTY}}{18, 466}
93702 -\entry {\code {ENOTUNIQ}}{25}
93703 -\entry {\code {environ}}{693}
93704 -\entry {\code {ENXIO}}{17}
93705 -\entry {\code {EOF}}{281}
93706 -\entry {\code {EOPNOTSUPP}}{20}
93707 -\entry {\code {EOVERFLOW}}{24}
93708 -\entry {\code {EPERM}}{16}
93709 -\entry {\code {EPFNOSUPPORT}}{20}
93710 -\entry {\code {EPIPE}}{19}
93711 -\entry {\code {EPROCLIM}}{22}
93712 -\entry {\code {EPROCUNAVAIL}}{23}
93713 -\entry {\code {EPROGMISMATCH}}{23}
93714 -\entry {\code {EPROGUNAVAIL}}{22}
93715 -\entry {\code {EPROTO}}{24}
93716 -\entry {\code {EPROTONOSUPPORT}}{20}
93717 -\entry {\code {EPROTOTYPE}}{20}
93718 -\entry {\code {EQUIV_CLASS_MAX}}{804}
93719 -\entry {\code {ERA}}{163}
93720 -\entry {\code {ERA_D_FMT}}{164}
93721 -\entry {\code {ERA_D_T_FMT}}{163}
93722 -\entry {\code {ERA_T_FMT}}{164}
93723 -\entry {\code {ERA_YEAR}}{163}
93724 -\entry {\code {ERANGE}}{19}
93725 -\entry {\code {EREMCHG}}{25}
93726 -\entry {\code {EREMOTE}}{22}
93727 -\entry {\code {EREMOTEIO}}{25}
93728 -\entry {\code {ERESTART}}{24}
93729 -\entry {\code {EROFS}}{19}
93730 -\entry {\code {ERPCMISMATCH}}{22}
93731 -\entry {\code {errno}}{15}
93732 -\entry {\code {error_message_count}}{29}
93733 -\entry {\code {error_one_per_line}}{29}
93734 -\entry {\code {error_print_progname}}{29}
93735 -\entry {\code {ESHUTDOWN}}{21}
93736 -\entry {\code {ESOCKTNOSUPPORT}}{20}
93737 -\entry {\code {ESPIPE}}{18}
93738 -\entry {\code {ESRCH}}{16}
93739 -\entry {\code {ESRMNT}}{25}
93740 -\entry {\code {ESTALE}}{22}
93741 -\entry {\code {ESTRPIPE}}{25}
93742 -\entry {\code {ethers}}{733}
93743 -\entry {\code {ETIME}}{24}
93744 -\entry {\code {ETIMEDOUT}}{21}
93745 -\entry {\code {ETOOMANYREFS}}{21}
93746 -\entry {\code {ETXTBSY}}{18}
93747 -\entry {\code {EUCLEAN}}{25}
93748 -\entry {\code {EUNATCH}}{25}
93749 -\entry {\code {EUSERS}}{22}
93750 -\entry {\code {EWOULDBLOCK}}{19}
93751 -\entry {\code {EXDEV}}{18}
93752 -\entry {\code {EXFULL}}{25}
93753 -\entry {\code {EXIT_FAILURE}}{698}
93754 -\entry {\code {EXIT_SUCCESS}}{697}
93755 -\entry {\code {EXPR_NEST_MAX}}{804}
93756 -\entry {\code {EXTA}}{458}
93757 -\entry {\code {EXTB}}{458}
93758 -\initial {F}
93759 -\entry {\code {F_DUPFD}}{338}
93760 -\entry {\code {F_GETFD}}{339}
93761 -\entry {\code {F_GETFL}}{344}
93762 -\entry {\code {F_GETLK}}{346}
93763 -\entry {\code {F_GETOWN}}{348}
93764 -\entry {\code {F_OK}}{383}
93765 -\entry {\code {F_RDLCK}}{348}
93766 -\entry {\code {F_SETFD}}{339}
93767 -\entry {\code {F_SETFL}}{344}
93768 -\entry {\code {F_SETLK}}{347}
93769 -\entry {\code {F_SETLKW}}{347}
93770 -\entry {\code {F_SETOWN}}{349}
93771 -\entry {\code {F_UNLCK}}{348}
93772 -\entry {\code {F_WRLCK}}{348}
93773 -\entry {\code {FD_CLOEXEC}}{339}
93774 -\entry {\code {FD_SETSIZE}}{321}
93775 -\entry {\code {FE_DFL_ENV}}{529}
93776 -\entry {\code {FE_DIVBYZERO}}{525}
93777 -\entry {\code {FE_DOWNWARD}}{528}
93778 -\entry {\code {FE_INEXACT}}{525}
93779 -\entry {\code {FE_INVALID}}{525}
93780 -\entry {\code {FE_NOMASK_ENV}}{529}
93781 -\entry {\code {FE_OVERFLOW}}{525}
93782 -\entry {\code {FE_TONEAREST}}{528}
93783 -\entry {\code {FE_TOWARDZERO}}{528}
93784 -\entry {\code {FE_UNDERFLOW}}{525}
93785 -\entry {\code {FE_UPWARD}}{528}
93786 -\entry {\code {FILENAME_MAX}}{800}
93787 -\entry {\code {FLT_DIG}}{854}
93788 -\entry {\code {FLT_EPSILON}}{856}
93789 -\entry {\code {FLT_MANT_DIG}}{854}
93790 -\entry {\code {FLT_MAX}}{855}
93791 -\entry {\code {FLT_MAX_10_EXP}}{855}
93792 -\entry {\code {FLT_MAX_EXP}}{855}
93793 -\entry {\code {FLT_MIN}}{855}
93794 -\entry {\code {FLT_MIN_10_EXP}}{855}
93795 -\entry {\code {FLT_MIN_EXP}}{854}
93796 -\entry {\code {FLT_RADIX}}{854}
93797 -\entry {\code {FLT_ROUNDS}}{853}
93798 -\entry {\code {FLUSHO}}{456}
93799 -\entry {\code {FOPEN_MAX}}{234}
93800 -\entry {\code {FP_FAST_FMA}}{538}
93801 -\entry {\code {FP_ILOGB0}}{484}
93802 -\entry {\code {FP_ILOGBNAN}}{484}
93803 -\entry {\code {FP_INFINITE}}{521}
93804 -\entry {\code {FP_NAN}}{521}
93805 -\entry {\code {FP_NORMAL}}{521}
93806 -\entry {\code {FP_SUBNORMAL}}{521}
93807 -\entry {\code {FP_ZERO}}{521}
93808 -\entry {\code {FPE_DECOVF_TRAP}}{615}
93809 -\entry {\code {FPE_FLTDIV_TRAP}}{615}
93810 -\entry {\code {FPE_FLTOVF_TRAP}}{615}
93811 -\entry {\code {FPE_FLTUND_TRAP}}{615}
93812 -\entry {\code {FPE_INTDIV_TRAP}}{614}
93813 -\entry {\code {FPE_INTOVF_TRAP}}{614}
93814 -\entry {\code {FPE_SUBRNG_TRAP}}{615}
93815 -\entry {\code {FRAC_DIGITS}}{164}
93816 -\entry {\code {FSETLOCKING_BYCALLER}}{239}
93817 -\entry {\code {FSETLOCKING_INTERNAL}}{239}
93818 -\entry {\code {FSETLOCKING_QUERY}}{239}
93819 -\entry {\code {FSTAB}}{775}
93820 -\entry {\code {FSTAB_RO}}{776}
93821 -\entry {\code {FSTAB_RQ}}{776}
93822 -\entry {\code {FSTAB_RW}}{776}
93823 -\entry {\code {FSTAB_SW}}{776}
93824 -\entry {\code {FSTAB_XX}}{776}
93825 -\entry {\code {FTW_CHDIR}}{363}
93826 -\entry {\code {FTW_D}}{360}
93827 -\entry {\code {FTW_DEPTH}}{363}
93828 -\entry {\code {FTW_DNR}}{360}
93829 -\entry {\code {FTW_DP}}{361}
93830 -\entry {\code {FTW_F}}{360}
93831 -\entry {\code {FTW_MOUNT}}{363}
93832 -\entry {\code {FTW_NS}}{360}
93833 -\entry {\code {FTW_PHYS}}{363}
93834 -\entry {\code {FTW_SL}}{360}
93835 -\entry {\code {FTW_SLN}}{361}
93836 -\initial {G}
93837 -\entry {\code {getdate_err}}{572}
93838 -\entry {\code {GLOB_ABORTED}}{209}
93839 -\entry {\code {GLOB_ALTDIRFUNC}}{211}
93840 -\entry {\code {GLOB_APPEND}}{210}
93841 -\entry {\code {GLOB_BRACE}}{211}
93842 -\entry {\code {GLOB_DOOFFS}}{210}
93843 -\entry {\code {GLOB_ERR}}{210}
93844 -\entry {\code {GLOB_MAGCHAR}}{211}
93845 -\entry {\code {GLOB_MARK}}{210}
93846 -\entry {\code {GLOB_NOCHECK}}{211}
93847 -\entry {\code {GLOB_NOESCAPE}}{211}
93848 -\entry {\code {GLOB_NOMAGIC}}{212}
93849 -\entry {\code {GLOB_NOMATCH}}{209}
93850 -\entry {\code {GLOB_NOSORT}}{211}
93851 -\entry {\code {GLOB_NOSPACE}}{209}
93852 -\entry {\code {GLOB_ONLYDIR}}{212}
93853 -\entry {\code {GLOB_PERIOD}}{211}
93854 -\entry {\code {GLOB_TILDE}}{212}
93855 -\entry {\code {GLOB_TILDE_CHECK}}{212}
93856 -\entry {\code {group}}{733}
93857 -\entry {\code {GROUPING}}{166}
93858 -\initial {H}
93859 -\entry {\code {h_errno}}{414}
93860 -\entry {\code {HOST_NOT_FOUND}}{414}
93861 -\entry {\code {hosts}}{733}
93862 -\entry {\code {HUGE_VAL}}{527}
93863 -\entry {\code {HUGE_VALF}}{527}
93864 -\entry {\code {HUGE_VALL}}{527}
93865 -\entry {\code {HUPCL}}{453}
93866 -\initial {I}
93867 -\entry {\code {I}}{538}
93868 -\entry {\code {ICANON}}{454}
93869 -\entry {\code {ICRNL}}{451}
93870 -\entry {\code {IEXTEN}}{456}
93871 -\entry {\code {IFNAMSIZ}}{404}
93872 -\entry {\code {IGNBRK}}{451}
93873 -\entry {\code {IGNCR}}{451}
93874 -\entry {\code {IGNPAR}}{451}
93875 -\entry {\code {IMAXBEL}}{452}
93876 -\entry {\code {in6addr_any}}{411}
93877 -\entry {\code {in6addr_loopback}}{411}
93878 -\entry {\code {INADDR_ANY}}{411}
93879 -\entry {\code {INADDR_BROADCAST}}{411}
93880 -\entry {\code {INADDR_LOOPBACK}}{411}
93881 -\entry {\code {INADDR_NONE}}{411}
93882 -\entry {\code {INFINITY}}{524}
93883 -\entry {\code {INIT_PROCESS}}{755, 759}
93884 -\entry {\code {INLCR}}{451}
93885 -\entry {\code {INPCK}}{450}
93886 -\entry {\code {INT_CURR_SYMBOL}}{164}
93887 -\entry {\code {INT_FRAC_DIGITS}}{164}
93888 -\entry {\code {INT_MAX}}{851}
93889 -\entry {\code {INT_MIN}}{851}
93890 -\entry {\code {INT_N_CS_PRECEDES}}{165}
93891 -\entry {\code {INT_N_SEP_BY_SPACE}}{165}
93892 -\entry {\code {INT_N_SIGN_POSN}}{165}
93893 -\entry {\code {INT_P_CS_PRECEDES}}{165}
93894 -\entry {\code {INT_P_SEP_BY_SPACE}}{165}
93895 -\entry {\code {INT_P_SIGN_POSN}}{165}
93896 -\entry {\code {IPPORT_RESERVED}}{417}
93897 -\entry {\code {IPPORT_USERRESERVED}}{417}
93898 -\entry {\code {ISIG}}{455}
93899 -\entry {\code {ISTRIP}}{451}
93900 -\entry {\code {ITIMER_PROF}}{579}
93901 -\entry {\code {ITIMER_REAL}}{579}
93902 -\entry {\code {ITIMER_VIRTUAL}}{579}
93903 -\entry {\code {IXANY}}{452}
93904 -\entry {\code {IXOFF}}{451}
93905 -\entry {\code {IXON}}{452}
93906 -\initial {L}
93907 -\entry {\code {L_ctermid}}{728}
93908 -\entry {\code {L_cuserid}}{753}
93909 -\entry {\code {L_INCR}}{286}
93910 -\entry {\code {L_SET}}{286}
93911 -\entry {\code {L_tmpnam}}{389}
93912 -\entry {\code {L_XTND}}{286}
93913 -\entry {\code {LANG}}{155}
93914 -\entry {\code {LANGUAGE}}{155}
93915 -\entry {\code {LC_ALL}}{155}
93916 -\entry {\code {LC_COLLATE}}{154}
93917 -\entry {\code {LC_CTYPE}}{154}
93918 -\entry {\code {LC_MESSAGES}}{154}
93919 -\entry {\code {LC_MONETARY}}{154}
93920 -\entry {\code {LC_NUMERIC}}{154}
93921 -\entry {\code {LC_TIME}}{154}
93922 -\entry {\code {LDBL_DIG}}{854}
93923 -\entry {\code {LDBL_EPSILON}}{856}
93924 -\entry {\code {LDBL_MANT_DIG}}{854}
93925 -\entry {\code {LDBL_MAX}}{855}
93926 -\entry {\code {LDBL_MAX_10_EXP}}{855}
93927 -\entry {\code {LDBL_MAX_EXP}}{855}
93928 -\entry {\code {LDBL_MIN}}{855}
93929 -\entry {\code {LDBL_MIN_10_EXP}}{855}
93930 -\entry {\code {LDBL_MIN_EXP}}{855}
93931 -\entry {\code {LINE_MAX}}{804}
93932 -\entry {\code {LINK_MAX}}{799}
93933 -\entry {\code {LIO_NOP}}{326}
93934 -\entry {\code {LIO_READ}}{326}
93935 -\entry {\code {LIO_WRITE}}{326}
93936 -\entry {\code {LOG_ALERT}}{475}
93937 -\entry {\code {LOG_AUTH}}{474}
93938 -\entry {\code {LOG_AUTHPRIV}}{475}
93939 -\entry {\code {LOG_CRIT}}{475}
93940 -\entry {\code {LOG_CRON}}{475}
93941 -\entry {\code {LOG_DAEMON}}{474}
93942 -\entry {\code {LOG_DEBUG}}{476}
93943 -\entry {\code {LOG_EMERG}}{475}
93944 -\entry {\code {LOG_ERR}}{475}
93945 -\entry {\code {LOG_FTP}}{475}
93946 -\entry {\code {LOG_INFO}}{476}
93947 -\entry {\code {LOG_LOCAL0}}{475}
93948 -\entry {\code {LOG_LOCAL1}}{475}
93949 -\entry {\code {LOG_LOCAL2}}{475}
93950 -\entry {\code {LOG_LOCAL3}}{475}
93951 -\entry {\code {LOG_LOCAL4}}{475}
93952 -\entry {\code {LOG_LOCAL5}}{475}
93953 -\entry {\code {LOG_LOCAL6}}{475}
93954 -\entry {\code {LOG_LOCAL7}}{475}
93955 -\entry {\code {LOG_LPR}}{474}
93956 -\entry {\code {LOG_MAIL}}{474}
93957 -\entry {\code {LOG_NEWS}}{474}
93958 -\entry {\code {LOG_NOTICE}}{476}
93959 -\entry {\code {LOG_SYSLOG}}{474}
93960 -\entry {\code {LOG_USER}}{474}
93961 -\entry {\code {LOG_UUCP}}{475}
93962 -\entry {\code {LOG_WARNING}}{475}
93963 -\entry {\code {LOGIN_PROCESS}}{755, 759}
93964 -\entry {\code {LONG_LONG_MAX}}{851}
93965 -\entry {\code {LONG_LONG_MIN}}{851}
93966 -\entry {\code {LONG_MAX}}{851}
93967 -\entry {\code {LONG_MIN}}{851}
93968 -\initial {M}
93969 -\entry {\code {M_1_PI}}{479}
93970 -\entry {\code {M_2_PI}}{479}
93971 -\entry {\code {M_2_SQRTPI}}{479}
93972 -\entry {\code {M_E}}{479}
93973 -\entry {\code {M_LN10}}{479}
93974 -\entry {\code {M_LN2}}{479}
93975 -\entry {\code {M_LOG10E}}{479}
93976 -\entry {\code {M_LOG2E}}{479}
93977 -\entry {\code {M_PI}}{479}
93978 -\entry {\code {M_PI_2}}{479}
93979 -\entry {\code {M_PI_4}}{479}
93980 -\entry {\code {M_SQRT1_2}}{479}
93981 -\entry {\code {M_SQRT2}}{479}
93982 -\entry {\code {MAP_ANON}}{318}
93983 -\entry {\code {MAP_ANONYMOUS}}{318}
93984 -\entry {\code {MAP_FIXED}}{318}
93985 -\entry {\code {MAP_PRIVATE}}{317}
93986 -\entry {\code {MAP_SHARED}}{317}
93987 -\entry {\code {MAX_CANON}}{800}
93988 -\entry {\code {MAX_INPUT}}{800}
93989 -\entry {\code {MAXNAMLEN}}{800}
93990 -\entry {\code {MAXSYMLINKS}}{365}
93991 -\entry {\code {MB_CUR_MAX}}{116}
93992 -\entry {\code {MB_LEN_MAX}}{116}
93993 -\entry {\code {MDMBUF}}{454}
93994 -\entry {\code {MINSIGSTKSZ}}{652}
93995 -\entry {\code {MM_APPL}}{297}
93996 -\entry {\code {MM_CONSOLE}}{297}
93997 -\entry {\code {MM_ERROR}}{298}
93998 -\entry {\code {MM_FIRM}}{297}
93999 -\entry {\code {MM_HALT}}{298}
94000 -\entry {\code {MM_HARD}}{297}
94001 -\entry {\code {MM_INFO}}{299}
94002 -\entry {\code {MM_NOSEV}}{298}
94003 -\entry {\code {MM_NRECOV}}{298}
94004 -\entry {\code {MM_NULLACT}}{298}
94005 -\entry {\code {MM_NULLLBL}}{298}
94006 -\entry {\code {MM_NULLMC}}{298}
94007 -\entry {\code {MM_NULLSEV}}{298}
94008 -\entry {\code {MM_NULLTAG}}{298}
94009 -\entry {\code {MM_NULLTXT}}{298}
94010 -\entry {\code {MM_OPSYS}}{297}
94011 -\entry {\code {MM_PRINT}}{297}
94012 -\entry {\code {MM_RECOVER}}{298}
94013 -\entry {\code {MM_SOFT}}{297}
94014 -\entry {\code {MM_UTIL}}{297}
94015 -\entry {\code {MM_WARNING}}{298}
94016 -\entry {\code {MNTOPT_DEFAULTS}}{778}
94017 -\entry {\code {MNTOPT_NOAUTO}}{779}
94018 -\entry {\code {MNTOPT_NOSUID}}{778}
94019 -\entry {\code {MNTOPT_RO}}{778}
94020 -\entry {\code {MNTOPT_RW}}{778}
94021 -\entry {\code {MNTOPT_SUID}}{778}
94022 -\entry {\code {MNTTAB}}{775}
94023 -\entry {\code {MNTTYPE_IGNORE}}{778}
94024 -\entry {\code {MNTTYPE_NFS}}{778}
94025 -\entry {\code {MNTTYPE_SWAP}}{778}
94026 -\entry {\code {MON_1}}{162}
94027 -\entry {\code {MON_10}}{163}
94028 -\entry {\code {MON_11}}{163}
94029 -\entry {\code {MON_12}}{163}
94030 -\entry {\code {MON_2}}{163}
94031 -\entry {\code {MON_3}}{163}
94032 -\entry {\code {MON_4}}{163}
94033 -\entry {\code {MON_5}}{163}
94034 -\entry {\code {MON_6}}{163}
94035 -\entry {\code {MON_7}}{163}
94036 -\entry {\code {MON_8}}{163}
94037 -\entry {\code {MON_9}}{163}
94038 -\entry {\code {MON_DECIMAL_POINT}}{164}
94039 -\entry {\code {MON_GROUPING}}{164}
94040 -\entry {\code {MON_THOUSANDS_SEP}}{164}
94041 -\entry {\code {MOUNTED}}{775}
94042 -\entry {\code {MS_ASYNC}}{319}
94043 -\entry {\code {MS_SYNC}}{319}
94044 -\entry {\code {MSG_DONTROUTE}}{429}
94045 -\entry {\code {MSG_OOB}}{429}
94046 -\entry {\code {MSG_PEEK}}{429}
94047 -\initial {N}
94048 -\entry {\code {N_CS_PRECEDES}}{165}
94049 -\entry {\code {N_SEP_BY_SPACE}}{165}
94050 -\entry {\code {N_SIGN_POSN}}{165}
94051 -\entry {\code {NAME_MAX}}{800}
94052 -\entry {\code {NAN}}{524}
94053 -\entry {\code {NCCS}}{448}
94054 -\entry {\code {NDEBUG}}{841}
94055 -\entry {\code {NEGATIVE_SIGN}}{164}
94056 -\entry {\code {netgroup}}{733}
94057 -\entry {\code {networks}}{733}
94058 -\entry {\code {NEW_TIME}}{755, 759}
94059 -\entry {\code {NGROUPS_MAX}}{788}
94060 -\entry {\code {NL_ARGMAX}}{251}
94061 -\entry {\code {NO_ADDRESS}}{414}
94062 -\entry {\code {NO_RECOVERY}}{414}
94063 -\entry {\code {NOEXPR}}{166}
94064 -\entry {\code {NOFLSH}}{456}
94065 -\entry {\code {NOKERNINFO}}{456}
94066 -\entry {\code {NOSTR}}{166}
94067 -\entry {\code {NSIG}}{613}
94068 -\entry {\code {NSS_STATUS_NOTFOUND}}{738}
94069 -\entry {\code {NSS_STATUS_SUCCESS}}{738}
94070 -\entry {\code {NSS_STATUS_TRYAGAIN}}{738}
94071 -\entry {\code {NSS_STATUS_UNAVAIL}}{738}
94072 -\entry {\code {NULL}}{848}
94073 -\initial {O}
94074 -\entry {\code {O_ACCMODE}}{341}
94075 -\entry {\code {O_APPEND}}{343}
94076 -\entry {\code {O_ASYNC}}{344}
94077 -\entry {\code {O_CREAT}}{342}
94078 -\entry {\code {O_EXCL}}{342}
94079 -\entry {\code {O_EXEC}}{341}
94080 -\entry {\code {O_EXLOCK}}{343}
94081 -\entry {\code {O_FSYNC}}{344}
94082 -\entry {\code {O_IGNORE_CTTY}}{342}
94083 -\entry {\code {O_NDELAY}}{344}
94084 -\entry {\code {O_NOATIME}}{344}
94085 -\entry {\code {O_NOCTTY}}{342}
94086 -\entry {\code {O_NOLINK}}{342}
94087 -\entry {\code {O_NONBLOCK}}{342, 343}
94088 -\entry {\code {O_NOTRANS}}{342}
94089 -\entry {\code {O_RDONLY}}{341}
94090 -\entry {\code {O_RDWR}}{341}
94091 -\entry {\code {O_READ}}{341}
94092 -\entry {\code {O_SHLOCK}}{343}
94093 -\entry {\code {O_SYNC}}{344}
94094 -\entry {\code {O_TRUNC}}{343}
94095 -\entry {\code {O_WRITE}}{341}
94096 -\entry {\code {O_WRONLY}}{341}
94097 -\entry {\code {obstack_alloc_failed_handler}}{51}
94098 -\entry {\code {OLD_TIME}}{755, 759}
94099 -\entry {\code {ONLCR}}{452}
94100 -\entry {\code {ONOEOT}}{452}
94101 -\entry {\code {OPEN_MAX}}{787}
94102 -\entry {\code {OPOST}}{452}
94103 -\entry {\code {optarg}}{659}
94104 -\entry {\code {opterr}}{659}
94105 -\entry {\code {optind}}{659}
94106 -\entry {\code {OPTION_ALIAS}}{670}
94107 -\entry {\code {OPTION_ARG_OPTIONAL}}{670}
94108 -\entry {\code {OPTION_DOC}}{670}
94109 -\entry {\code {OPTION_HIDDEN}}{670}
94110 -\entry {\code {OPTION_NO_USAGE}}{670}
94111 -\entry {\code {optopt}}{659}
94112 -\entry {\code {OXTABS}}{452}
94113 -\initial {P}
94114 -\entry {\code {P_CS_PRECEDES}}{165}
94115 -\entry {\code {P_SEP_BY_SPACE}}{165}
94116 -\entry {\code {P_SIGN_POSN}}{165}
94117 -\entry {\code {P_tmpdir}}{390}
94118 -\entry {\code {PA_CHAR}}{264}
94119 -\entry {\code {PA_DOUBLE}}{264}
94120 -\entry {\code {PA_FLAG_LONG}}{265}
94121 -\entry {\code {PA_FLAG_LONG_DOUBLE}}{265}
94122 -\entry {\code {PA_FLAG_LONG_LONG}}{265}
94123 -\entry {\code {PA_FLAG_MASK}}{264}
94124 -\entry {\code {PA_FLAG_PTR}}{264}
94125 -\entry {\code {PA_FLAG_SHORT}}{265}
94126 -\entry {\code {PA_FLOAT}}{264}
94127 -\entry {\code {PA_INT}}{264}
94128 -\entry {\code {PA_LAST}}{264}
94129 -\entry {\code {PA_POINTER}}{264}
94130 -\entry {\code {PA_STRING}}{264}
94131 -\entry {\code {PARENB}}{453}
94132 -\entry {\code {PARMRK}}{451}
94133 -\entry {\code {PARODD}}{453}
94134 -\entry {\code {passwd}}{733}
94135 -\entry {\code {PATH_MAX}}{800}
94136 -\entry {\code {PENDIN}}{456}
94137 -\entry {\code {PF_CCITT}}{421}
94138 -\entry {\code {PF_FILE}}{406}
94139 -\entry {\code {PF_IMPLINK}}{421}
94140 -\entry {\code {PF_INET}}{407}
94141 -\entry {\code {PF_INET6}}{407}
94142 -\entry {\code {PF_ISO}}{421}
94143 -\entry {\code {PF_LOCAL}}{405}
94144 -\entry {\code {PF_NS}}{421}
94145 -\entry {\code {PF_ROUTE}}{421}
94146 -\entry {\code {PF_UNIX}}{406}
94147 -\entry {\code {PI}}{480}
94148 -\entry {\code {PIPE_BUF}}{800}
94149 -\entry {\code {PM_STR}}{163}
94150 -\entry {\code {POSITIVE_SIGN}}{164}
94151 -\entry {\code {PRIO_MAX}}{596}
94152 -\entry {\code {PRIO_MIN}}{596}
94153 -\entry {\code {PRIO_PGRP}}{597}
94154 -\entry {\code {PRIO_PROCESS}}{597}
94155 -\entry {\code {PRIO_USER}}{597}
94156 -\entry {\code {program_invocation_name}}{27}
94157 -\entry {\code {program_invocation_short_name}}{27}
94158 -\entry {\code {PROT_EXEC}}{317}
94159 -\entry {\code {PROT_READ}}{317}
94160 -\entry {\code {PROT_WRITE}}{317}
94161 -\entry {\code {protocols}}{733}
94162 -\entry {\code {PWD}}{352}
94163 -\initial {R}
94164 -\entry {\code {R_OK}}{383}
94165 -\entry {\code {RADIXCHAR}}{165}
94166 -\entry {\code {RAND_MAX}}{508}
94167 -\entry {\code {RE_DUP_MAX}}{788}
94168 -\entry {\code {RLIM_INFINITY}}{588}
94169 -\entry {\code {RLIM_NLIMITS}}{588}
94170 -\entry {\code {RLIMIT_AS}}{588}
94171 -\entry {\code {RLIMIT_CORE}}{587}
94172 -\entry {\code {RLIMIT_CPU}}{587}
94173 -\entry {\code {RLIMIT_DATA}}{587}
94174 -\entry {\code {RLIMIT_FSIZE}}{587}
94175 -\entry {\code {RLIMIT_NOFILE}}{588}
94176 -\entry {\code {RLIMIT_OFILE}}{588}
94177 -\entry {\code {RLIMIT_RSS}}{587}
94178 -\entry {\code {RLIMIT_STACK}}{587}
94179 -\entry {\code {rpc}}{733}
94180 -\entry {\code {RUN_LVL}}{755, 759}
94181 -\initial {S}
94182 -\entry {\code {S_IEXEC}}{379}
94183 -\entry {\code {S_IFBLK}}{376}
94184 -\entry {\code {S_IFCHR}}{376}
94185 -\entry {\code {S_IFDIR}}{376}
94186 -\entry {\code {S_IFIFO}}{376}
94187 -\entry {\code {S_IFLNK}}{376}
94188 -\entry {\code {S_IFMT}}{376}
94189 -\entry {\code {S_IFREG}}{376}
94190 -\entry {\code {S_IFSOCK}}{376}
94191 -\entry {\code {S_IREAD}}{378}
94192 -\entry {\code {S_IRGRP}}{379}
94193 -\entry {\code {S_IROTH}}{379}
94194 -\entry {\code {S_IRUSR}}{378}
94195 -\entry {\code {S_IRWXG}}{379}
94196 -\entry {\code {S_IRWXO}}{379}
94197 -\entry {\code {S_IRWXU}}{379}
94198 -\entry {\code {S_ISGID}}{379}
94199 -\entry {\code {S_ISUID}}{379}
94200 -\entry {\code {S_ISVTX}}{379}
94201 -\entry {\code {S_IWGRP}}{379}
94202 -\entry {\code {S_IWOTH}}{379}
94203 -\entry {\code {S_IWRITE}}{379}
94204 -\entry {\code {S_IWUSR}}{379}
94205 -\entry {\code {S_IXGRP}}{379}
94206 -\entry {\code {S_IXOTH}}{379}
94207 -\entry {\code {S_IXUSR}}{379}
94208 -\entry {\code {SA_NOCLDSTOP}}{627}
94209 -\entry {\code {SA_ONSTACK}}{627}
94210 -\entry {\code {SA_RESTART}}{627}
94211 -\entry {\code {SC_SSIZE_MAX}}{796}
94212 -\entry {\code {SCHAR_MAX}}{850}
94213 -\entry {\code {SCHAR_MIN}}{850}
94214 -\entry {\code {SEEK_CUR}}{286}
94215 -\entry {\code {SEEK_END}}{286}
94216 -\entry {\code {SEEK_SET}}{286}
94217 -\entry {\code {SEM_VALUE_MAX}}{831}
94218 -\entry {\code {services}}{733}
94219 -\entry {\code {shadow}}{733}
94220 -\entry {\code {SHRT_MAX}}{851}
94221 -\entry {\code {SHRT_MIN}}{850}
94222 -\entry {\code {SIG_BLOCK}}{645}
94223 -\entry {\code {SIG_DFL}}{622}
94224 -\entry {\code {SIG_ERR}}{624}
94225 -\entry {\code {SIG_IGN}}{622}
94226 -\entry {\code {SIG_SETMASK}}{645}
94227 -\entry {\code {SIG_UNBLOCK}}{645}
94228 -\entry {\code {SIGABRT}}{616}
94229 -\entry {\code {SIGALRM}}{617}
94230 -\entry {\code {SIGBUS}}{615}
94231 -\entry {\code {SIGCHLD}}{618}
94232 -\entry {\code {SIGCLD}}{618}
94233 -\entry {\code {SIGCONT}}{619}
94234 -\entry {\code {SIGEMT}}{616}
94235 -\entry {\code {SIGFPE}}{614}
94236 -\entry {\code {SIGHUP}}{617}
94237 -\entry {\code {SIGILL}}{615}
94238 -\entry {\code {SIGINFO}}{621}
94239 -\entry {\code {SIGINT}}{616}
94240 -\entry {\code {SIGIO}}{618}
94241 -\entry {\code {SIGIOT}}{616}
94242 -\entry {\code {SIGKILL}}{617}
94243 -\entry {\code {SIGLOST}}{620}
94244 -\entry {\code {signgam}}{488}
94245 -\entry {\code {SIGPIPE}}{620}
94246 -\entry {\code {SIGPOLL}}{618}
94247 -\entry {\code {SIGPROF}}{618}
94248 -\entry {\code {SIGQUIT}}{616}
94249 -\entry {\code {SIGSEGV}}{615}
94250 -\entry {\code {SIGSTKSZ}}{652}
94251 -\entry {\code {SIGSTOP}}{619}
94252 -\entry {\code {SIGSYS}}{616}
94253 -\entry {\code {SIGTERM}}{616}
94254 -\entry {\code {SIGTRAP}}{616}
94255 -\entry {\code {SIGTSTP}}{619}
94256 -\entry {\code {SIGTTIN}}{619}
94257 -\entry {\code {SIGTTOU}}{619}
94258 -\entry {\code {SIGURG}}{618}
94259 -\entry {\code {SIGUSR1}}{621}
94260 -\entry {\code {SIGUSR2}}{621}
94261 -\entry {\code {SIGVTALRM}}{617}
94262 -\entry {\code {SIGWINCH}}{621}
94263 -\entry {\code {SIGXCPU}}{620}
94264 -\entry {\code {SIGXFSZ}}{620}
94265 -\entry {\code {SOCK_DGRAM}}{400}
94266 -\entry {\code {SOCK_RAW}}{401}
94267 -\entry {\code {SOCK_STREAM}}{400}
94268 -\entry {\code {SOL_SOCKET}}{441}
94269 -\entry {\code {SS_DISABLE}}{653}
94270 -\entry {\code {SS_ONSTACK}}{653}
94271 -\entry {\code {SSIZE_MAX}}{788}
94272 -\entry {\code {stderr}}{231}
94273 -\entry {\code {STDERR_FILENO}}{313}
94274 -\entry {\code {stdin}}{231}
94275 -\entry {\code {STDIN_FILENO}}{313}
94276 -\entry {\code {stdout}}{231}
94277 -\entry {\code {STDOUT_FILENO}}{313}
94278 -\entry {\code {STREAM_MAX}}{787}
94279 -\entry {\code {SV_INTERRUPT}}{655}
94280 -\entry {\code {SV_ONSTACK}}{655}
94281 -\entry {\code {SV_RESETHAND}}{655}
94282 -\entry {\code {sys_siglist}}{622}
94283 -\initial {T}
94284 -\entry {\code {T_FMT}}{163}
94285 -\entry {\code {T_FMT_AMPM}}{163}
94286 -\entry {\code {TCIFLUSH}}{465}
94287 -\entry {\code {TCIOFF}}{466}
94288 -\entry {\code {TCIOFLUSH}}{465}
94289 -\entry {\code {TCION}}{466}
94290 -\entry {\code {TCOFLUSH}}{465}
94291 -\entry {\code {TCOOFF}}{466}
94292 -\entry {\code {TCOON}}{466}
94293 -\entry {\code {TCSADRAIN}}{448}
94294 -\entry {\code {TCSAFLUSH}}{448}
94295 -\entry {\code {TCSANOW}}{448}
94296 -\entry {\code {TCSASOFT}}{448}
94297 -\entry {\code {THOUSANDS_SEP}}{166}
94298 -\entry {\code {THOUSEP}}{166}
94299 -\entry {\code {timezone}}{577}
94300 -\entry {\code {TMP_MAX}}{390}
94301 -\entry {\code {TOSTOP}}{456}
94302 -\entry {\code {TRY_AGAIN}}{414}
94303 -\entry {\code {tzname}}{576}
94304 -\entry {\code {TZNAME_MAX}}{787}
94305 -\initial {U}
94306 -\entry {\code {UCHAR_MAX}}{850}
94307 -\entry {\code {UINT_MAX}}{851}
94308 -\entry {\code {ULONG_LONG_MAX}}{851}
94309 -\entry {\code {ULONG_MAX}}{851}
94310 -\entry {\code {USER_PROCESS}}{755, 759}
94311 -\entry {\code {USHRT_MAX}}{851}
94312 -\initial {V}
94313 -\entry {\code {VDISCARD}}{462}
94314 -\entry {\code {VDSUSP}}{461}
94315 -\entry {\code {VEOF}}{458}
94316 -\entry {\code {VEOL}}{459}
94317 -\entry {\code {VEOL2}}{459}
94318 -\entry {\code {VERASE}}{459}
94319 -\entry {\code {VINTR}}{460}
94320 -\entry {\code {VKILL}}{460}
94321 -\entry {\code {VLNEXT}}{462}
94322 -\entry {\code {VMIN}}{463}
94323 -\entry {\code {VQUIT}}{460}
94324 -\entry {\code {VREPRINT}}{460}
94325 -\entry {\code {VSTART}}{461}
94326 -\entry {\code {VSTATUS}}{462}
94327 -\entry {\code {VSTOP}}{461}
94328 -\entry {\code {VSUSP}}{460}
94329 -\entry {\code {VTIME}}{463}
94330 -\entry {\code {VWERASE}}{459}
94331 -\initial {W}
94332 -\entry {\code {W_OK}}{383}
94333 -\entry {\code {WCHAR_MAX}}{112, 851}
94334 -\entry {\code {WCHAR_MIN}}{112}
94335 -\entry {\code {WEOF}}{113, 282}
94336 -\initial {X}
94337 -\entry {\code {X_OK}}{383}
94338 -\initial {Y}
94339 -\entry {\code {YESEXPR}}{166}
94340 -\entry {\code {YESSTR}}{166}
94341 diff -u -udbrN glibc-2.3.2/manual/libcbook.texi glibc-2.3.2-200304020432/manual/libcbook.texi
94342 --- glibc-2.3.2/manual/libcbook.texi Thu Jan 1 01:00:00 1970
94343 +++ glibc-2.3.2-200304020432/manual/libcbook.texi Sat Feb 18 02:12:54 1995
94344 @@ -0,0 +1,3 @@
94345 +\input texinfo
94346 +@finalout
94347 +@include libc.texinfo
94348 diff -u -udbrN glibc-2.3.2/manual/libm-err.texi glibc-2.3.2-200304020432/manual/libm-err.texi
94349 --- glibc-2.3.2/manual/libm-err.texi Mon Nov 5 21:54:48 2001
94350 +++ glibc-2.3.2-200304020432/manual/libm-err.texi Thu Jan 1 01:00:00 1970
94351 @@ -1,801 +0,0 @@
94352 -@multitable {nexttowardf} {1000 + i 1000} {1000 + i 1000} {1000 + i 1000} {1000 + i 1000} {1000 + i 1000}
94353 -@item Function @tab Alpha @tab ARM @tab Generic @tab ix86 @tab IA64
94354 -@item acosf @tab - @tab - @tab - @tab - @tab -
94355 -@item acos @tab - @tab - @tab - @tab - @tab -
94356 -@item acosl @tab - @tab - @tab - @tab 1150 @tab -
94357 -@item acoshf @tab - @tab - @tab - @tab - @tab -
94358 -@item acosh @tab - @tab - @tab - @tab - @tab -
94359 -@item acoshl @tab - @tab - @tab - @tab 1 @tab -
94360 -@item asinf @tab 2 @tab 2 @tab - @tab - @tab -
94361 -@item asin @tab 1 @tab 1 @tab - @tab 1 @tab 1
94362 -@item asinl @tab - @tab - @tab - @tab 1 @tab -
94363 -@item asinhf @tab - @tab - @tab - @tab - @tab -
94364 -@item asinh @tab - @tab - @tab - @tab - @tab -
94365 -@item asinhl @tab - @tab - @tab - @tab 656 @tab 14
94366 -@item atanf @tab - @tab - @tab - @tab - @tab -
94367 -@item atan @tab - @tab - @tab - @tab - @tab -
94368 -@item atanl @tab - @tab - @tab - @tab 549 @tab -
94369 -@item atanhf @tab - @tab - @tab - @tab - @tab -
94370 -@item atanh @tab 1 @tab 1 @tab - @tab 1 @tab -
94371 -@item atanhl @tab - @tab - @tab - @tab 1605 @tab -
94372 -@item atan2f @tab 4 @tab - @tab - @tab - @tab -
94373 -@item atan2 @tab - @tab - @tab - @tab - @tab -
94374 -@item atan2l @tab - @tab - @tab - @tab 549 @tab -
94375 -@item cabsf @tab 1 @tab 1 @tab - @tab 1 @tab 1
94376 -@item cabs @tab 1 @tab 1 @tab - @tab 1 @tab 1
94377 -@item cabsl @tab - @tab - @tab - @tab 560 @tab 1
94378 -@item cacosf @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 1 + i 2 @tab 1 + i 2
94379 -@item cacos @tab 1 + i 0 @tab 1 + i 0 @tab - @tab 1 + i 0 @tab 1 + i 0
94380 -@item cacosl @tab - @tab - @tab - @tab 151 + i 329 @tab 1 + i 1
94381 -@item cacoshf @tab 7 + i 3 @tab 7 + i 3 @tab - @tab 4 + i 4 @tab 7 + i 0
94382 -@item cacosh @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94383 -@item cacoshl @tab - @tab - @tab - @tab 328 + i 151 @tab 7 + i 1
94384 -@item cargf @tab - @tab - @tab - @tab - @tab -
94385 -@item carg @tab - @tab - @tab - @tab - @tab -
94386 -@item cargl @tab - @tab - @tab - @tab - @tab -
94387 -@item casinf @tab 2 + i 1 @tab 2 + i 1 @tab - @tab 2 + i 2 @tab 2 + i 2
94388 -@item casin @tab 3 + i 0 @tab 3 + i 0 @tab - @tab 3 + i 0 @tab 3 + i 0
94389 -@item casinl @tab - @tab - @tab - @tab 603 + i 329 @tab 0 + i 1
94390 -@item casinhf @tab 1 + i 6 @tab 1 + i 6 @tab - @tab 1 + i 6 @tab 1 + i 6
94391 -@item casinh @tab 5 + i 3 @tab 5 + i 3 @tab - @tab 5 + i 3 @tab 5 + i 3
94392 -@item casinhl @tab - @tab - @tab - @tab 892 + i 12 @tab 5 + i 5
94393 -@item catanf @tab 4 + i 1 @tab 4 + i 1 @tab - @tab 0 + i 1 @tab 0 + i 1
94394 -@item catan @tab 0 + i 1 @tab 0 + i 1 @tab - @tab 0 + i 1 @tab 0 + i 1
94395 -@item catanl @tab - @tab - @tab - @tab 251 + i 474 @tab 1 + i 0
94396 -@item catanhf @tab 1 + i 6 @tab 1 + i 6 @tab - @tab 1 + i 0 @tab -
94397 -@item catanh @tab 4 + i 1 @tab 4 + i 1 @tab - @tab 2 + i 0 @tab 4 + i 0
94398 -@item catanhl @tab - @tab - @tab - @tab 66 + i 447 @tab 1 + i 0
94399 -@item cbrtf @tab - @tab - @tab - @tab - @tab -
94400 -@item cbrt @tab 1 @tab 1 @tab - @tab 1 @tab 1
94401 -@item cbrtl @tab - @tab - @tab - @tab 716 @tab -
94402 -@item ccosf @tab 0 + i 1 @tab 0 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94403 -@item ccos @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94404 -@item ccosl @tab - @tab - @tab - @tab 5 + i 1901 @tab 0 + i 1
94405 -@item ccoshf @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94406 -@item ccosh @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94407 -@item ccoshl @tab - @tab - @tab - @tab 1467 + i 1183 @tab 1 + i 1
94408 -@item ceilf @tab - @tab - @tab - @tab - @tab -
94409 -@item ceil @tab - @tab - @tab - @tab - @tab -
94410 -@item ceill @tab - @tab - @tab - @tab - @tab -
94411 -@item cexpf @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 1 + i 0 @tab 1 + i 1
94412 -@item cexp @tab 1 + i 0 @tab 1 + i 0 @tab - @tab - @tab 1 + i 0
94413 -@item cexpl @tab - @tab - @tab - @tab 940 + i 1067 @tab 2 + i 0
94414 -@item cimagf @tab - @tab - @tab - @tab - @tab -
94415 -@item cimag @tab - @tab - @tab - @tab - @tab -
94416 -@item cimagl @tab - @tab - @tab - @tab - @tab -
94417 -@item clogf @tab 0 + i 3 @tab 0 + i 3 @tab - @tab - @tab -
94418 -@item clog @tab 0 + i 1 @tab 0 + i 1 @tab - @tab - @tab -
94419 -@item clogl @tab - @tab - @tab - @tab 0 + i 1 @tab -
94420 -@item clog10f @tab 1 + i 5 @tab 1 + i 5 @tab - @tab 1 + i 1 @tab 1 + i 1
94421 -@item clog10 @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 2 + i 1 @tab 2 + i 1
94422 -@item clog10l @tab - @tab - @tab - @tab 1403 + i 186 @tab 1 + i 2
94423 -@item conjf @tab - @tab - @tab - @tab - @tab -
94424 -@item conj @tab - @tab - @tab - @tab - @tab -
94425 -@item conjl @tab - @tab - @tab - @tab - @tab -
94426 -@item copysignf @tab - @tab - @tab - @tab - @tab -
94427 -@item copysign @tab - @tab - @tab - @tab - @tab -
94428 -@item copysignl @tab - @tab - @tab - @tab - @tab -
94429 -@item cosf @tab 1 @tab 1 @tab - @tab 1 @tab 1
94430 -@item cos @tab 2 @tab 2 @tab - @tab 2 @tab 2
94431 -@item cosl @tab - @tab - @tab - @tab 529 @tab 0.5
94432 -@item coshf @tab - @tab - @tab - @tab - @tab -
94433 -@item cosh @tab - @tab - @tab - @tab - @tab -
94434 -@item coshl @tab - @tab - @tab - @tab 309 @tab 2
94435 -@item cpowf @tab 4 + i 2 @tab 4 + i 2 @tab - @tab 4 + i 2.5333 @tab 5 + i 2.5333
94436 -@item cpow @tab 1 + i 1.1031 @tab 1 + i 1.1031 @tab - @tab 1 + i 1.104 @tab 1 + i 1.1031
94437 -@item cpowl @tab - @tab - @tab - @tab 2 + i 9 @tab 1 + i 4
94438 -@item cprojf @tab - @tab - @tab - @tab - @tab -
94439 -@item cproj @tab - @tab - @tab - @tab - @tab -
94440 -@item cprojl @tab - @tab - @tab - @tab - @tab -
94441 -@item crealf @tab - @tab - @tab - @tab - @tab -
94442 -@item creal @tab - @tab - @tab - @tab - @tab -
94443 -@item creall @tab - @tab - @tab - @tab - @tab -
94444 -@item csinf @tab 0 + i 1 @tab 0 + i 1 @tab - @tab - @tab -
94445 -@item csin @tab - @tab - @tab - @tab - @tab -
94446 -@item csinl @tab - @tab - @tab - @tab 966 + i 168 @tab 0 + i 1
94447 -@item csinhf @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94448 -@item csinh @tab 0 + i 1 @tab 0 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94449 -@item csinhl @tab - @tab - @tab - @tab 413 + i 477 @tab 2 + i 2
94450 -@item csqrtf @tab 1 + i 1 @tab 1 + i 1 @tab - @tab - @tab 1 + i 1
94451 -@item csqrt @tab 1 + i 0 @tab 1 + i 0 @tab - @tab 1 + i 0 @tab 1 + i 0
94452 -@item csqrtl @tab - @tab - @tab - @tab 237 + i 128 @tab -
94453 -@item ctanf @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94454 -@item ctan @tab 1 + i 1 @tab 1 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94455 -@item ctanl @tab - @tab - @tab - @tab 690 + i 367 @tab 436 + i 1
94456 -@item ctanhf @tab 2 + i 1 @tab 2 + i 1 @tab - @tab 1 + i 1 @tab 1 + i 1
94457 -@item ctanh @tab 2 + i 2 @tab 2 + i 2 @tab - @tab 0 + i 1 @tab 0 + i 1
94458 -@item ctanhl @tab - @tab - @tab - @tab 286 + i 3074 @tab 1 + i 24
94459 -@item erff @tab - @tab - @tab - @tab - @tab -
94460 -@item erf @tab - @tab - @tab - @tab - @tab -
94461 -@item erfl @tab - @tab - @tab - @tab - @tab -
94462 -@item erfcf @tab 12 @tab 12 @tab - @tab 12 @tab 12
94463 -@item erfc @tab 24 @tab 24 @tab - @tab 24 @tab 24
94464 -@item erfcl @tab - @tab - @tab - @tab 36 @tab 12
94465 -@item expf @tab - @tab - @tab - @tab - @tab -
94466 -@item exp @tab - @tab - @tab - @tab - @tab -
94467 -@item expl @tab - @tab - @tab - @tab 754 @tab -
94468 -@item exp10f @tab 2 @tab 2 @tab - @tab - @tab 2
94469 -@item exp10 @tab 6 @tab 6 @tab - @tab 1 @tab 6
94470 -@item exp10l @tab - @tab - @tab - @tab 1182 @tab 3
94471 -@item exp2f @tab - @tab - @tab - @tab - @tab -
94472 -@item exp2 @tab - @tab - @tab - @tab - @tab -
94473 -@item exp2l @tab - @tab - @tab - @tab 462 @tab -
94474 -@item expm1f @tab 1 @tab 1 @tab - @tab - @tab -
94475 -@item expm1 @tab - @tab - @tab - @tab - @tab -
94476 -@item expm1l @tab - @tab - @tab - @tab 825 @tab 1
94477 -@item fabsf @tab - @tab - @tab - @tab - @tab -
94478 -@item fabs @tab - @tab - @tab - @tab - @tab -
94479 -@item fabsl @tab - @tab - @tab - @tab - @tab -
94480 -@item fdimf @tab - @tab - @tab - @tab - @tab -
94481 -@item fdim @tab - @tab - @tab - @tab - @tab -
94482 -@item fdiml @tab - @tab - @tab - @tab - @tab -
94483 -@item floorf @tab - @tab - @tab - @tab - @tab -
94484 -@item floor @tab - @tab - @tab - @tab - @tab -
94485 -@item floorl @tab - @tab - @tab - @tab - @tab -
94486 -@item fmaf @tab - @tab - @tab - @tab - @tab -
94487 -@item fma @tab - @tab - @tab - @tab - @tab -
94488 -@item fmal @tab - @tab - @tab - @tab - @tab -
94489 -@item fmaxf @tab - @tab - @tab - @tab - @tab -
94490 -@item fmax @tab - @tab - @tab - @tab - @tab -
94491 -@item fmaxl @tab - @tab - @tab - @tab - @tab -
94492 -@item fminf @tab - @tab - @tab - @tab - @tab -
94493 -@item fmin @tab - @tab - @tab - @tab - @tab -
94494 -@item fminl @tab - @tab - @tab - @tab - @tab -
94495 -@item fmodf @tab 1 @tab 1 @tab - @tab 1 @tab 1
94496 -@item fmod @tab 2 @tab 2 @tab - @tab 2 @tab 2
94497 -@item fmodl @tab - @tab - @tab - @tab 4096 @tab 1
94498 -@item frexpf @tab - @tab - @tab - @tab - @tab -
94499 -@item frexp @tab - @tab - @tab - @tab - @tab -
94500 -@item frexpl @tab - @tab - @tab - @tab - @tab -
94501 -@item gammaf @tab - @tab - @tab - @tab - @tab -
94502 -@item gamma @tab - @tab - @tab - @tab 1 @tab -
94503 -@item gammal @tab - @tab - @tab - @tab 1 @tab 1
94504 -@item hypotf @tab 1 @tab 1 @tab - @tab 1 @tab 1
94505 -@item hypot @tab 1 @tab 1 @tab - @tab 1 @tab 1
94506 -@item hypotl @tab - @tab - @tab - @tab 560 @tab 1
94507 -@item ilogbf @tab - @tab - @tab - @tab - @tab -
94508 -@item ilogb @tab - @tab - @tab - @tab - @tab -
94509 -@item ilogbl @tab - @tab - @tab - @tab - @tab -
94510 -@item j0f @tab 2 @tab 2 @tab - @tab 1 @tab 1
94511 -@item j0 @tab 2 @tab 2 @tab - @tab 2 @tab 2
94512 -@item j0l @tab - @tab - @tab - @tab 1 @tab 2
94513 -@item j1f @tab 2 @tab 2 @tab - @tab 1 @tab 2
94514 -@item j1 @tab 1 @tab 1 @tab - @tab 2 @tab 1
94515 -@item j1l @tab - @tab - @tab - @tab 2 @tab -
94516 -@item jnf @tab 4 @tab 4 @tab - @tab 2 @tab 4
94517 -@item jn @tab 6 @tab 6 @tab - @tab 5 @tab 6
94518 -@item jnl @tab - @tab - @tab - @tab 2 @tab 2
94519 -@item lgammaf @tab 2 @tab 2 @tab - @tab 2 @tab 2
94520 -@item lgamma @tab 1 @tab 1 @tab - @tab 1 @tab 1
94521 -@item lgammal @tab - @tab - @tab - @tab 1 @tab 1
94522 -@item lrintf @tab - @tab - @tab - @tab - @tab -
94523 -@item lrint @tab - @tab - @tab - @tab - @tab -
94524 -@item lrintl @tab - @tab - @tab - @tab - @tab -
94525 -@item llrintf @tab - @tab - @tab - @tab - @tab -
94526 -@item llrint @tab - @tab - @tab - @tab - @tab -
94527 -@item llrintl @tab - @tab - @tab - @tab - @tab -
94528 -@item logf @tab 1 @tab 1 @tab - @tab 1 @tab 1
94529 -@item log @tab 1 @tab 1 @tab - @tab 1 @tab 1
94530 -@item logl @tab - @tab - @tab - @tab 2341 @tab 1
94531 -@item log10f @tab 1 @tab 1 @tab - @tab 1 @tab 1
94532 -@item log10 @tab 1 @tab 1 @tab - @tab 1 @tab 1
94533 -@item log10l @tab - @tab - @tab - @tab 2033 @tab 1
94534 -@item log1pf @tab 1 @tab 1 @tab - @tab 1 @tab 1
94535 -@item log1p @tab 1 @tab 1 @tab - @tab 1 @tab 1
94536 -@item log1pl @tab - @tab - @tab - @tab 585 @tab 1
94537 -@item log2f @tab 1 @tab 1 @tab - @tab 1 @tab 1
94538 -@item log2 @tab 1 @tab 1 @tab - @tab 1 @tab 1
94539 -@item log2l @tab - @tab - @tab - @tab 1688 @tab -
94540 -@item logbf @tab - @tab - @tab - @tab - @tab -
94541 -@item logb @tab - @tab - @tab - @tab - @tab -
94542 -@item logbl @tab - @tab - @tab - @tab - @tab -
94543 -@item lroundf @tab - @tab - @tab - @tab - @tab -
94544 -@item lround @tab - @tab - @tab - @tab - @tab -
94545 -@item lroundl @tab - @tab - @tab - @tab - @tab -
94546 -@item llroundf @tab - @tab - @tab - @tab - @tab -
94547 -@item llround @tab - @tab - @tab - @tab - @tab -
94548 -@item llroundl @tab - @tab - @tab - @tab - @tab -
94549 -@item modff @tab - @tab - @tab - @tab - @tab -
94550 -@item modf @tab - @tab - @tab - @tab - @tab -
94551 -@item modfl @tab - @tab - @tab - @tab - @tab -
94552 -@item nearbyintf @tab - @tab - @tab - @tab - @tab -
94553 -@item nearbyint @tab - @tab - @tab - @tab - @tab -
94554 -@item nearbyintl @tab - @tab - @tab - @tab - @tab -
94555 -@item nextafterf @tab - @tab - @tab - @tab - @tab -
94556 -@item nextafter @tab - @tab - @tab - @tab - @tab -
94557 -@item nextafterl @tab - @tab - @tab - @tab - @tab -
94558 -@item nexttowardf @tab - @tab - @tab - @tab - @tab -
94559 -@item nexttoward @tab - @tab - @tab - @tab - @tab -
94560 -@item nexttowardl @tab - @tab - @tab - @tab - @tab -
94561 -@item powf @tab - @tab - @tab - @tab - @tab -
94562 -@item pow @tab - @tab - @tab - @tab - @tab -
94563 -@item powl @tab - @tab - @tab - @tab 725 @tab 1
94564 -@item remainderf @tab - @tab - @tab - @tab - @tab -
94565 -@item remainder @tab - @tab - @tab - @tab - @tab -
94566 -@item remainderl @tab - @tab - @tab - @tab - @tab -
94567 -@item remquof @tab - @tab - @tab - @tab - @tab -
94568 -@item remquo @tab - @tab - @tab - @tab - @tab -
94569 -@item remquol @tab - @tab - @tab - @tab - @tab -
94570 -@item rintf @tab - @tab - @tab - @tab - @tab -
94571 -@item rint @tab - @tab - @tab - @tab - @tab -
94572 -@item rintl @tab - @tab - @tab - @tab - @tab -
94573 -@item roundf @tab - @tab - @tab - @tab - @tab -
94574 -@item round @tab - @tab - @tab - @tab - @tab -
94575 -@item roundl @tab - @tab - @tab - @tab - @tab -
94576 -@item scalbf @tab - @tab - @tab - @tab - @tab -
94577 -@item scalb @tab - @tab - @tab - @tab - @tab -
94578 -@item scalbl @tab - @tab - @tab - @tab - @tab -
94579 -@item scalbnf @tab - @tab - @tab - @tab - @tab -
94580 -@item scalbn @tab - @tab - @tab - @tab - @tab -
94581 -@item scalbnl @tab - @tab - @tab - @tab - @tab -
94582 -@item scalblnf @tab - @tab - @tab - @tab - @tab -
94583 -@item scalbln @tab - @tab - @tab - @tab - @tab -
94584 -@item scalblnl @tab - @tab - @tab - @tab - @tab -
94585 -@item sinf @tab - @tab - @tab - @tab - @tab -
94586 -@item sin @tab - @tab - @tab - @tab - @tab -
94587 -@item sinl @tab - @tab - @tab - @tab 627 @tab 1
94588 -@item sincosf @tab 1 @tab 1 @tab - @tab 1 @tab 1
94589 -@item sincos @tab 1 @tab 1 @tab - @tab 1 @tab 1
94590 -@item sincosl @tab - @tab - @tab - @tab 627 @tab 1
94591 -@item sinhf @tab 1 @tab 1 @tab - @tab 1 @tab 1
94592 -@item sinh @tab 1 @tab 1 @tab - @tab - @tab -
94593 -@item sinhl @tab - @tab - @tab - @tab 1029 @tab 1
94594 -@item sqrtf @tab - @tab - @tab - @tab - @tab -
94595 -@item sqrt @tab - @tab - @tab - @tab - @tab -
94596 -@item sqrtl @tab - @tab - @tab - @tab 489 @tab -
94597 -@item tanf @tab - @tab - @tab - @tab - @tab -
94598 -@item tan @tab 0.5 @tab 0.5 @tab - @tab 0.5 @tab 0.5
94599 -@item tanl @tab - @tab - @tab - @tab 1401 @tab 1
94600 -@item tanhf @tab 1 @tab 1 @tab - @tab - @tab 1
94601 -@item tanh @tab 1 @tab 1 @tab - @tab - @tab 1
94602 -@item tanhl @tab - @tab - @tab - @tab 521 @tab 1
94603 -@item tgammaf @tab 1 @tab 1 @tab - @tab 1 @tab 1
94604 -@item tgamma @tab 1 @tab 1 @tab - @tab 2 @tab 1
94605 -@item tgammal @tab - @tab - @tab - @tab 2 @tab 1
94606 -@item truncf @tab - @tab - @tab - @tab - @tab -
94607 -@item trunc @tab - @tab - @tab - @tab - @tab -
94608 -@item truncl @tab - @tab - @tab - @tab - @tab -
94609 -@item y0f @tab 1 @tab 1 @tab - @tab 1 @tab 1
94610 -@item y0 @tab 2 @tab 2 @tab - @tab 3 @tab 2
94611 -@item y0l @tab - @tab - @tab - @tab 2 @tab 2
94612 -@item y1f @tab 2 @tab 2 @tab - @tab 2 @tab 2
94613 -@item y1 @tab 3 @tab 3 @tab - @tab 3 @tab 3
94614 -@item y1l @tab - @tab - @tab - @tab 2 @tab 1
94615 -@item ynf @tab 2 @tab 2 @tab - @tab 3 @tab 2
94616 -@item yn @tab 3 @tab 3 @tab - @tab 6 @tab 3
94617 -@item ynl @tab - @tab - @tab - @tab 7 @tab 7
94618 -@end multitable
94619 -@multitable {nexttowardf} {1000 + i 1000} {1000 + i 1000} {1000 + i 1000} {1000 + i 1000} {1000 + i 1000}
94620 -@item Function @tab M68k @tab MIPS @tab PowerPC @tab S/390 @tab SH4
94621 -@item acosf @tab - @tab - @tab - @tab - @tab -
94622 -@item acos @tab - @tab - @tab - @tab - @tab -
94623 -@item acosl @tab 1 @tab - @tab - @tab - @tab -
94624 -@item acoshf @tab - @tab - @tab - @tab - @tab -
94625 -@item acosh @tab - @tab - @tab - @tab - @tab -
94626 -@item acoshl @tab 1 @tab - @tab - @tab - @tab -
94627 -@item asinf @tab - @tab 2 @tab 2 @tab 2 @tab 2
94628 -@item asin @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94629 -@item asinl @tab 1 @tab - @tab - @tab - @tab -
94630 -@item asinhf @tab - @tab - @tab - @tab - @tab -
94631 -@item asinh @tab - @tab - @tab - @tab - @tab -
94632 -@item asinhl @tab 14 @tab - @tab - @tab - @tab -
94633 -@item atanf @tab - @tab - @tab - @tab - @tab -
94634 -@item atan @tab - @tab - @tab - @tab - @tab -
94635 -@item atanl @tab - @tab - @tab - @tab - @tab -
94636 -@item atanhf @tab - @tab - @tab - @tab - @tab -
94637 -@item atanh @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94638 -@item atanhl @tab - @tab - @tab - @tab - @tab -
94639 -@item atan2f @tab - @tab 4 @tab 4 @tab 4 @tab 4
94640 -@item atan2 @tab - @tab - @tab - @tab - @tab -
94641 -@item atan2l @tab - @tab - @tab - @tab - @tab -
94642 -@item cabsf @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94643 -@item cabs @tab - @tab 1 @tab 1 @tab 1 @tab 1
94644 -@item cabsl @tab 1 @tab - @tab - @tab - @tab -
94645 -@item cacosf @tab 1 + i 2 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94646 -@item cacos @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0
94647 -@item cacosl @tab 1 + i 1 @tab - @tab - @tab - @tab -
94648 -@item cacoshf @tab 7 + i 0 @tab 7 + i 3 @tab 7 + i 3 @tab 7 + i 3 @tab 7 + i 3
94649 -@item cacosh @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94650 -@item cacoshl @tab 6 + i 2 @tab - @tab - @tab - @tab -
94651 -@item cargf @tab - @tab - @tab - @tab - @tab -
94652 -@item carg @tab - @tab - @tab - @tab - @tab -
94653 -@item cargl @tab - @tab - @tab - @tab - @tab -
94654 -@item casinf @tab 2 + i 2 @tab 2 + i 1 @tab 2 + i 1 @tab 2 + i 1 @tab 2 + i 1
94655 -@item casin @tab 3 + i 0 @tab 3 + i 0 @tab 3 + i 0 @tab 3 + i 0 @tab 3 + i 0
94656 -@item casinl @tab 0 + i 1 @tab - @tab - @tab - @tab -
94657 -@item casinhf @tab 19 + i 2 @tab 1 + i 6 @tab 1 + i 6 @tab 1 + i 6 @tab 1 + i 6
94658 -@item casinh @tab 6 + i 13 @tab 5 + i 3 @tab 5 + i 3 @tab 5 + i 3 @tab 5 + i 3
94659 -@item casinhl @tab 5 + i 6 @tab - @tab - @tab - @tab -
94660 -@item catanf @tab 0 + i 1 @tab 4 + i 1 @tab 4 + i 1 @tab 4 + i 1 @tab 4 + i 1
94661 -@item catan @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1
94662 -@item catanl @tab 1 + i 0 @tab - @tab - @tab - @tab -
94663 -@item catanhf @tab - @tab 1 + i 6 @tab 0 + i 6 @tab 1 + i 6 @tab 1 + i 6
94664 -@item catanh @tab - @tab 4 + i 1 @tab 4 + i 1 @tab 4 + i 1 @tab 4 + i 1
94665 -@item catanhl @tab 1 + i 0 @tab - @tab - @tab - @tab -
94666 -@item cbrtf @tab - @tab - @tab - @tab - @tab -
94667 -@item cbrt @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94668 -@item cbrtl @tab 1 @tab - @tab - @tab - @tab -
94669 -@item ccosf @tab 1 + i 1 @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1
94670 -@item ccos @tab 0 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94671 -@item ccosl @tab 0 + i 1 @tab - @tab - @tab - @tab -
94672 -@item ccoshf @tab 3 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94673 -@item ccosh @tab 1 + i 0 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94674 -@item ccoshl @tab 1 + i 2 @tab - @tab - @tab - @tab -
94675 -@item ceilf @tab - @tab - @tab - @tab - @tab -
94676 -@item ceil @tab - @tab - @tab - @tab - @tab -
94677 -@item ceill @tab - @tab - @tab - @tab - @tab -
94678 -@item cexpf @tab 3 + i 2 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94679 -@item cexp @tab - @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0
94680 -@item cexpl @tab 2 + i 0 @tab - @tab - @tab - @tab -
94681 -@item cimagf @tab - @tab - @tab - @tab - @tab -
94682 -@item cimag @tab - @tab - @tab - @tab - @tab -
94683 -@item cimagl @tab - @tab - @tab - @tab - @tab -
94684 -@item clogf @tab - @tab 0 + i 3 @tab 0 + i 3 @tab 0 + i 3 @tab 0 + i 3
94685 -@item clog @tab - @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1
94686 -@item clogl @tab - @tab - @tab - @tab - @tab -
94687 -@item clog10f @tab 1 + i 1 @tab 1 + i 5 @tab 1 + i 5 @tab 1 + i 5 @tab 1 + i 5
94688 -@item clog10 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94689 -@item clog10l @tab 1 + i 3 @tab - @tab - @tab - @tab -
94690 -@item conjf @tab - @tab - @tab - @tab - @tab -
94691 -@item conj @tab - @tab - @tab - @tab - @tab -
94692 -@item conjl @tab - @tab - @tab - @tab - @tab -
94693 -@item copysignf @tab - @tab - @tab - @tab - @tab -
94694 -@item copysign @tab - @tab - @tab - @tab - @tab -
94695 -@item copysignl @tab - @tab - @tab - @tab - @tab -
94696 -@item cosf @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94697 -@item cos @tab 2 @tab 2 @tab 2 @tab 2 @tab 2
94698 -@item cosl @tab 1 @tab - @tab - @tab - @tab -
94699 -@item coshf @tab - @tab - @tab - @tab - @tab -
94700 -@item cosh @tab - @tab - @tab - @tab - @tab -
94701 -@item coshl @tab 2 @tab - @tab - @tab - @tab -
94702 -@item cpowf @tab 1 + i 6 @tab 4 + i 2 @tab 4 + i 2 @tab 4 + i 2 @tab 4 + i 2
94703 -@item cpow @tab 1 + i 2 @tab 1 + i 1.1031 @tab 1 + i 2 @tab 1 + i 1.1031 @tab 1 + i 1.1031
94704 -@item cpowl @tab 5 + i 2 @tab - @tab - @tab - @tab -
94705 -@item cprojf @tab - @tab - @tab - @tab - @tab -
94706 -@item cproj @tab - @tab - @tab - @tab - @tab -
94707 -@item cprojl @tab - @tab - @tab - @tab - @tab -
94708 -@item crealf @tab - @tab - @tab - @tab - @tab -
94709 -@item creal @tab - @tab - @tab - @tab - @tab -
94710 -@item creall @tab - @tab - @tab - @tab - @tab -
94711 -@item csinf @tab 1 + i 1 @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1
94712 -@item csin @tab - @tab - @tab - @tab - @tab -
94713 -@item csinl @tab - @tab - @tab - @tab - @tab -
94714 -@item csinhf @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94715 -@item csinh @tab - @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1
94716 -@item csinhl @tab 1 + i 2 @tab - @tab - @tab - @tab -
94717 -@item csqrtf @tab 1 + i 0 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94718 -@item csqrt @tab - @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0
94719 -@item csqrtl @tab - @tab - @tab - @tab - @tab -
94720 -@item ctanf @tab 1 + i 0 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94721 -@item ctan @tab 1 + i 0 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94722 -@item ctanl @tab 439 + i 2 @tab - @tab - @tab - @tab -
94723 -@item ctanhf @tab 1 + i 0 @tab 2 + i 1 @tab 2 + i 1 @tab 2 + i 1 @tab 2 + i 1
94724 -@item ctanh @tab 0 + i 1 @tab 2 + i 2 @tab 2 + i 2 @tab 2 + i 2 @tab 2 + i 2
94725 -@item ctanhl @tab 2 + i 25 @tab - @tab - @tab - @tab -
94726 -@item erff @tab - @tab - @tab - @tab - @tab -
94727 -@item erf @tab - @tab - @tab - @tab - @tab -
94728 -@item erfl @tab - @tab - @tab - @tab - @tab -
94729 -@item erfcf @tab 11 @tab 12 @tab 12 @tab 12 @tab 12
94730 -@item erfc @tab 24 @tab 24 @tab 24 @tab 24 @tab 24
94731 -@item erfcl @tab 12 @tab - @tab - @tab - @tab -
94732 -@item expf @tab - @tab - @tab - @tab - @tab -
94733 -@item exp @tab - @tab - @tab - @tab - @tab -
94734 -@item expl @tab - @tab - @tab - @tab - @tab -
94735 -@item exp10f @tab - @tab 2 @tab 2 @tab 2 @tab 2
94736 -@item exp10 @tab 1 @tab 6 @tab 6 @tab 6 @tab 6
94737 -@item exp10l @tab 1 @tab - @tab - @tab - @tab -
94738 -@item exp2f @tab - @tab - @tab - @tab - @tab -
94739 -@item exp2 @tab - @tab - @tab - @tab - @tab -
94740 -@item exp2l @tab - @tab - @tab - @tab - @tab -
94741 -@item expm1f @tab - @tab 1 @tab 1 @tab 1 @tab 1
94742 -@item expm1 @tab - @tab - @tab - @tab - @tab -
94743 -@item expm1l @tab 1 @tab - @tab - @tab - @tab -
94744 -@item fabsf @tab - @tab - @tab - @tab - @tab -
94745 -@item fabs @tab - @tab - @tab - @tab - @tab -
94746 -@item fabsl @tab - @tab - @tab - @tab - @tab -
94747 -@item fdimf @tab - @tab - @tab - @tab - @tab -
94748 -@item fdim @tab - @tab - @tab - @tab - @tab -
94749 -@item fdiml @tab - @tab - @tab - @tab - @tab -
94750 -@item floorf @tab - @tab - @tab - @tab - @tab -
94751 -@item floor @tab - @tab - @tab - @tab - @tab -
94752 -@item floorl @tab - @tab - @tab - @tab - @tab -
94753 -@item fmaf @tab - @tab - @tab - @tab - @tab -
94754 -@item fma @tab - @tab - @tab - @tab - @tab -
94755 -@item fmal @tab - @tab - @tab - @tab - @tab -
94756 -@item fmaxf @tab - @tab - @tab - @tab - @tab -
94757 -@item fmax @tab - @tab - @tab - @tab - @tab -
94758 -@item fmaxl @tab - @tab - @tab - @tab - @tab -
94759 -@item fminf @tab - @tab - @tab - @tab - @tab -
94760 -@item fmin @tab - @tab - @tab - @tab - @tab -
94761 -@item fminl @tab - @tab - @tab - @tab - @tab -
94762 -@item fmodf @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94763 -@item fmod @tab 2 @tab 2 @tab 2 @tab 2 @tab 2
94764 -@item fmodl @tab 1 @tab - @tab - @tab - @tab -
94765 -@item frexpf @tab - @tab - @tab - @tab - @tab -
94766 -@item frexp @tab - @tab - @tab - @tab - @tab -
94767 -@item frexpl @tab - @tab - @tab - @tab - @tab -
94768 -@item gammaf @tab - @tab - @tab - @tab - @tab -
94769 -@item gamma @tab - @tab - @tab - @tab - @tab -
94770 -@item gammal @tab 1 @tab - @tab - @tab - @tab -
94771 -@item hypotf @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94772 -@item hypot @tab - @tab 1 @tab 1 @tab 1 @tab 1
94773 -@item hypotl @tab 1 @tab - @tab - @tab - @tab -
94774 -@item ilogbf @tab - @tab - @tab - @tab - @tab -
94775 -@item ilogb @tab - @tab - @tab - @tab - @tab -
94776 -@item ilogbl @tab - @tab - @tab - @tab - @tab -
94777 -@item j0f @tab 1 @tab 2 @tab 1 @tab 2 @tab 2
94778 -@item j0 @tab 1 @tab 2 @tab 2 @tab 2 @tab 2
94779 -@item j0l @tab 1 @tab - @tab - @tab - @tab -
94780 -@item j1f @tab 2 @tab 2 @tab 2 @tab 2 @tab 2
94781 -@item j1 @tab - @tab 1 @tab 1 @tab 1 @tab 1
94782 -@item j1l @tab 2 @tab - @tab - @tab - @tab -
94783 -@item jnf @tab 11 @tab 4 @tab 4 @tab 4 @tab 4
94784 -@item jn @tab 4 @tab 6 @tab 6 @tab 6 @tab 6
94785 -@item jnl @tab 2 @tab - @tab - @tab - @tab -
94786 -@item lgammaf @tab 2 @tab 2 @tab 2 @tab 2 @tab 2
94787 -@item lgamma @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94788 -@item lgammal @tab 1 @tab - @tab - @tab - @tab -
94789 -@item lrintf @tab - @tab - @tab - @tab - @tab -
94790 -@item lrint @tab - @tab - @tab - @tab - @tab -
94791 -@item lrintl @tab - @tab - @tab - @tab - @tab -
94792 -@item llrintf @tab - @tab - @tab - @tab - @tab -
94793 -@item llrint @tab - @tab - @tab - @tab - @tab -
94794 -@item llrintl @tab - @tab - @tab - @tab - @tab -
94795 -@item logf @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94796 -@item log @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94797 -@item logl @tab 2 @tab - @tab - @tab - @tab -
94798 -@item log10f @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94799 -@item log10 @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94800 -@item log10l @tab 1 @tab - @tab - @tab - @tab -
94801 -@item log1pf @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94802 -@item log1p @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94803 -@item log1pl @tab 2 @tab - @tab - @tab - @tab -
94804 -@item log2f @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94805 -@item log2 @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94806 -@item log2l @tab 1 @tab - @tab - @tab - @tab -
94807 -@item logbf @tab - @tab - @tab - @tab - @tab -
94808 -@item logb @tab - @tab - @tab - @tab - @tab -
94809 -@item logbl @tab - @tab - @tab - @tab - @tab -
94810 -@item lroundf @tab - @tab - @tab - @tab - @tab -
94811 -@item lround @tab - @tab - @tab - @tab - @tab -
94812 -@item lroundl @tab - @tab - @tab - @tab - @tab -
94813 -@item llroundf @tab - @tab - @tab - @tab - @tab -
94814 -@item llround @tab - @tab - @tab - @tab - @tab -
94815 -@item llroundl @tab - @tab - @tab - @tab - @tab -
94816 -@item modff @tab - @tab - @tab - @tab - @tab -
94817 -@item modf @tab - @tab - @tab - @tab - @tab -
94818 -@item modfl @tab - @tab - @tab - @tab - @tab -
94819 -@item nearbyintf @tab - @tab - @tab - @tab - @tab -
94820 -@item nearbyint @tab - @tab - @tab - @tab - @tab -
94821 -@item nearbyintl @tab - @tab - @tab - @tab - @tab -
94822 -@item nextafterf @tab - @tab - @tab - @tab - @tab -
94823 -@item nextafter @tab - @tab - @tab - @tab - @tab -
94824 -@item nextafterl @tab - @tab - @tab - @tab - @tab -
94825 -@item nexttowardf @tab - @tab - @tab - @tab - @tab -
94826 -@item nexttoward @tab - @tab - @tab - @tab - @tab -
94827 -@item nexttowardl @tab - @tab - @tab - @tab - @tab -
94828 -@item powf @tab - @tab - @tab - @tab - @tab -
94829 -@item pow @tab - @tab - @tab - @tab - @tab -
94830 -@item powl @tab 1 @tab - @tab - @tab - @tab -
94831 -@item remainderf @tab - @tab - @tab - @tab - @tab -
94832 -@item remainder @tab - @tab - @tab - @tab - @tab -
94833 -@item remainderl @tab - @tab - @tab - @tab - @tab -
94834 -@item remquof @tab - @tab - @tab - @tab - @tab -
94835 -@item remquo @tab - @tab - @tab - @tab - @tab -
94836 -@item remquol @tab - @tab - @tab - @tab - @tab -
94837 -@item rintf @tab - @tab - @tab - @tab - @tab -
94838 -@item rint @tab - @tab - @tab - @tab - @tab -
94839 -@item rintl @tab - @tab - @tab - @tab - @tab -
94840 -@item roundf @tab - @tab - @tab - @tab - @tab -
94841 -@item round @tab - @tab - @tab - @tab - @tab -
94842 -@item roundl @tab - @tab - @tab - @tab - @tab -
94843 -@item scalbf @tab - @tab - @tab - @tab - @tab -
94844 -@item scalb @tab - @tab - @tab - @tab - @tab -
94845 -@item scalbl @tab - @tab - @tab - @tab - @tab -
94846 -@item scalbnf @tab - @tab - @tab - @tab - @tab -
94847 -@item scalbn @tab - @tab - @tab - @tab - @tab -
94848 -@item scalbnl @tab - @tab - @tab - @tab - @tab -
94849 -@item scalblnf @tab - @tab - @tab - @tab - @tab -
94850 -@item scalbln @tab - @tab - @tab - @tab - @tab -
94851 -@item scalblnl @tab - @tab - @tab - @tab - @tab -
94852 -@item sinf @tab - @tab - @tab - @tab - @tab -
94853 -@item sin @tab - @tab - @tab - @tab - @tab -
94854 -@item sinl @tab 1 @tab - @tab - @tab - @tab -
94855 -@item sincosf @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94856 -@item sincos @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94857 -@item sincosl @tab 1 @tab - @tab - @tab - @tab -
94858 -@item sinhf @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94859 -@item sinh @tab - @tab 1 @tab 1 @tab 1 @tab 1
94860 -@item sinhl @tab - @tab - @tab - @tab - @tab -
94861 -@item sqrtf @tab - @tab - @tab - @tab - @tab -
94862 -@item sqrt @tab - @tab - @tab - @tab - @tab -
94863 -@item sqrtl @tab - @tab - @tab - @tab - @tab -
94864 -@item tanf @tab - @tab - @tab - @tab - @tab -
94865 -@item tan @tab 1 @tab 0.5 @tab 1 @tab 0.5 @tab 0.5
94866 -@item tanl @tab 1 @tab - @tab - @tab - @tab -
94867 -@item tanhf @tab - @tab 1 @tab 1 @tab 1 @tab 1
94868 -@item tanh @tab - @tab 1 @tab 1 @tab 1 @tab 1
94869 -@item tanhl @tab - @tab - @tab - @tab - @tab -
94870 -@item tgammaf @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94871 -@item tgamma @tab 1 @tab 1 @tab 1 @tab 1 @tab 1
94872 -@item tgammal @tab 1 @tab - @tab - @tab - @tab -
94873 -@item truncf @tab - @tab - @tab - @tab - @tab -
94874 -@item trunc @tab - @tab - @tab - @tab - @tab -
94875 -@item truncl @tab - @tab - @tab - @tab - @tab -
94876 -@item y0f @tab 2 @tab 1 @tab 1 @tab 1 @tab 1
94877 -@item y0 @tab 2 @tab 2 @tab 2 @tab 2 @tab 2
94878 -@item y0l @tab 2 @tab - @tab - @tab - @tab -
94879 -@item y1f @tab 2 @tab 2 @tab 2 @tab 2 @tab 2
94880 -@item y1 @tab 1 @tab 3 @tab 3 @tab 3 @tab 3
94881 -@item y1l @tab 2 @tab - @tab - @tab - @tab -
94882 -@item ynf @tab 2 @tab 2 @tab 2 @tab 2 @tab 2
94883 -@item yn @tab 6 @tab 3 @tab 3 @tab 3 @tab 3
94884 -@item ynl @tab 7 @tab - @tab - @tab - @tab -
94885 -@end multitable
94886 -@multitable {nexttowardf} {1000 + i 1000} {1000 + i 1000} {1000 + i 1000}
94887 -@item Function @tab Sparc 32-bit @tab Sparc 64-bit @tab x86_64/fpu
94888 -@item acosf @tab - @tab - @tab -
94889 -@item acos @tab - @tab - @tab -
94890 -@item acosl @tab - @tab 1 @tab -
94891 -@item acoshf @tab - @tab - @tab -
94892 -@item acosh @tab - @tab - @tab -
94893 -@item acoshl @tab - @tab - @tab -
94894 -@item asinf @tab 2 @tab 2 @tab -
94895 -@item asin @tab 1 @tab 1 @tab 1
94896 -@item asinl @tab - @tab - @tab 1
94897 -@item asinhf @tab - @tab - @tab -
94898 -@item asinh @tab - @tab - @tab -
94899 -@item asinhl @tab - @tab - @tab 15
94900 -@item atanf @tab - @tab - @tab -
94901 -@item atan @tab - @tab - @tab -
94902 -@item atanl @tab - @tab 1 @tab -
94903 -@item atanhf @tab - @tab - @tab -
94904 -@item atanh @tab 1 @tab 1 @tab 1
94905 -@item atanhl @tab - @tab - @tab 1
94906 -@item atan2f @tab 4.0000 @tab 4 @tab 4
94907 -@item atan2 @tab - @tab - @tab -
94908 -@item atan2l @tab - @tab 1 @tab -
94909 -@item cabsf @tab 1 @tab 1 @tab 1
94910 -@item cabs @tab 1 @tab 1 @tab 1
94911 -@item cabsl @tab - @tab - @tab 1
94912 -@item cacosf @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94913 -@item cacos @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0
94914 -@item cacosl @tab - @tab 0 + i 3 @tab 1 + i 1
94915 -@item cacoshf @tab 7 + i 3 @tab 7 + i 3 @tab 7 + i 3
94916 -@item cacosh @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94917 -@item cacoshl @tab - @tab 5 + i 1 @tab 6 + i 1
94918 -@item cargf @tab - @tab - @tab -
94919 -@item carg @tab - @tab - @tab -
94920 -@item cargl @tab - @tab - @tab -
94921 -@item casinf @tab 2 + i 1 @tab 2 + i 1 @tab 2 + i 1
94922 -@item casin @tab 3 + i 0 @tab 3 + i 0 @tab 3 + i 0
94923 -@item casinl @tab - @tab 1 + i 3 @tab 0 + i 1
94924 -@item casinhf @tab 1 + i 6 @tab 1 + i 6 @tab 1 + i 6
94925 -@item casinh @tab 5 + i 3 @tab 5 + i 3 @tab 5 + i 3
94926 -@item casinhl @tab - @tab 4 + i 2 @tab 5 + i 5
94927 -@item catanf @tab 4 + i 1 @tab 4 + i 1 @tab 4 + i 1
94928 -@item catan @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1
94929 -@item catanl @tab - @tab 0 + i 1 @tab 1 + i 0
94930 -@item catanhf @tab 1 + i 6 @tab 1 + i 6 @tab 1 + i 6
94931 -@item catanh @tab 4 + i 1 @tab 4 + i 1 @tab 4 + i 0
94932 -@item catanhl @tab - @tab - @tab 1 + i 0
94933 -@item cbrtf @tab - @tab - @tab -
94934 -@item cbrt @tab 1 @tab 1 @tab 1
94935 -@item cbrtl @tab - @tab - @tab 948
94936 -@item ccosf @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1
94937 -@item ccos @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94938 -@item ccosl @tab - @tab - @tab 0 + i 1
94939 -@item ccoshf @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94940 -@item ccosh @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94941 -@item ccoshl @tab - @tab - @tab 1 + i 1
94942 -@item ceilf @tab - @tab - @tab -
94943 -@item ceil @tab - @tab - @tab -
94944 -@item ceill @tab - @tab - @tab -
94945 -@item cexpf @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94946 -@item cexp @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0
94947 -@item cexpl @tab - @tab 1 + i 1 @tab 2 + i 1
94948 -@item cimagf @tab - @tab - @tab -
94949 -@item cimag @tab - @tab - @tab -
94950 -@item cimagl @tab - @tab - @tab -
94951 -@item clogf @tab 0 + i 3 @tab 0 + i 3 @tab 0 + i 3
94952 -@item clog @tab 0 + i 1 @tab 0 + i 1 @tab -
94953 -@item clogl @tab - @tab - @tab -
94954 -@item clog10f @tab 1 + i 5 @tab 1 + i 5 @tab 1 + i 5
94955 -@item clog10 @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94956 -@item clog10l @tab - @tab - @tab 1 + i 3
94957 -@item conjf @tab - @tab - @tab -
94958 -@item conj @tab - @tab - @tab -
94959 -@item conjl @tab - @tab - @tab -
94960 -@item copysignf @tab - @tab - @tab -
94961 -@item copysign @tab - @tab - @tab -
94962 -@item copysignl @tab - @tab - @tab -
94963 -@item cosf @tab 1 @tab 1 @tab 1
94964 -@item cos @tab 2 @tab 2 @tab 2
94965 -@item cosl @tab - @tab 1 @tab 0.5
94966 -@item coshf @tab - @tab - @tab -
94967 -@item cosh @tab - @tab - @tab -
94968 -@item coshl @tab - @tab - @tab 2
94969 -@item cpowf @tab 4 + i 2 @tab 4 + i 2 @tab 4 + i 2
94970 -@item cpow @tab 1 + i 1.1031 @tab 1 + i 1.1031 @tab 1 + i 1.1031
94971 -@item cpowl @tab - @tab 3 + i 0.9006 @tab 1 + i 2
94972 -@item cprojf @tab - @tab - @tab -
94973 -@item cproj @tab - @tab - @tab -
94974 -@item cprojl @tab - @tab - @tab -
94975 -@item crealf @tab - @tab - @tab -
94976 -@item creal @tab - @tab - @tab -
94977 -@item creall @tab - @tab - @tab -
94978 -@item csinf @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1
94979 -@item csin @tab - @tab - @tab -
94980 -@item csinl @tab - @tab - @tab 0 + i 2
94981 -@item csinhf @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94982 -@item csinh @tab 0 + i 1 @tab 0 + i 1 @tab 0 + i 1
94983 -@item csinhl @tab - @tab - @tab 2 + i 2
94984 -@item csqrtf @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94985 -@item csqrt @tab 1 + i 0 @tab 1 + i 0 @tab 1 + i 0
94986 -@item csqrtl @tab - @tab 1 + i 1 @tab -
94987 -@item ctanf @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94988 -@item ctan @tab 1 + i 1 @tab 1 + i 1 @tab 1 + i 1
94989 -@item ctanl @tab - @tab - @tab 439 + i 2
94990 -@item ctanhf @tab 2 + i 1 @tab 2 + i 1 @tab 2 + i 1
94991 -@item ctanh @tab 2 + i 2 @tab 2 + i 2 @tab 2 + i 2
94992 -@item ctanhl @tab - @tab - @tab 5 + i 25
94993 -@item erff @tab - @tab - @tab -
94994 -@item erf @tab - @tab - @tab -
94995 -@item erfl @tab - @tab - @tab -
94996 -@item erfcf @tab 12 @tab 12 @tab 12
94997 -@item erfc @tab 24 @tab 24 @tab 24
94998 -@item erfcl @tab - @tab - @tab 36
94999 -@item expf @tab - @tab - @tab -
95000 -@item exp @tab - @tab - @tab -
95001 -@item expl @tab - @tab - @tab -
95002 -@item exp10f @tab 2 @tab 2 @tab 2
95003 -@item exp10 @tab 6 @tab 6 @tab 6
95004 -@item exp10l @tab - @tab 1 @tab 3
95005 -@item exp2f @tab - @tab - @tab -
95006 -@item exp2 @tab - @tab - @tab -
95007 -@item exp2l @tab - @tab - @tab -
95008 -@item expm1f @tab 1 @tab 1 @tab 1
95009 -@item expm1 @tab - @tab 1 @tab 1
95010 -@item expm1l @tab - @tab - @tab 1
95011 -@item fabsf @tab - @tab - @tab -
95012 -@item fabs @tab - @tab - @tab -
95013 -@item fabsl @tab - @tab - @tab -
95014 -@item fdimf @tab - @tab - @tab -
95015 -@item fdim @tab - @tab - @tab -
95016 -@item fdiml @tab - @tab - @tab -
95017 -@item floorf @tab - @tab - @tab -
95018 -@item floor @tab - @tab - @tab -
95019 -@item floorl @tab - @tab - @tab -
95020 -@item fmaf @tab - @tab - @tab -
95021 -@item fma @tab - @tab - @tab -
95022 -@item fmal @tab - @tab - @tab -
95023 -@item fmaxf @tab - @tab - @tab -
95024 -@item fmax @tab - @tab - @tab -
95025 -@item fmaxl @tab - @tab - @tab -
95026 -@item fminf @tab - @tab - @tab -
95027 -@item fmin @tab - @tab - @tab -
95028 -@item fminl @tab - @tab - @tab -
95029 -@item fmodf @tab 1 @tab 1 @tab 1
95030 -@item fmod @tab 2 @tab 2 @tab 2
95031 -@item fmodl @tab - @tab 2 @tab 1
95032 -@item frexpf @tab - @tab - @tab -
95033 -@item frexp @tab - @tab - @tab -
95034 -@item frexpl @tab - @tab - @tab -
95035 -@item gammaf @tab - @tab - @tab -
95036 -@item gamma @tab - @tab - @tab -
95037 -@item gammal @tab - @tab - @tab 1
95038 -@item hypotf @tab 1 @tab 1 @tab 1
95039 -@item hypot @tab 1 @tab 1 @tab 1
95040 -@item hypotl @tab - @tab - @tab 1
95041 -@item ilogbf @tab - @tab - @tab -
95042 -@item ilogb @tab - @tab - @tab -
95043 -@item ilogbl @tab - @tab - @tab -
95044 -@item j0f @tab 2 @tab 2 @tab 2
95045 -@item j0 @tab 2 @tab 2 @tab 2
95046 -@item j0l @tab - @tab - @tab -
95047 -@item j1f @tab 2 @tab 2 @tab 2
95048 -@item j1 @tab 1 @tab 1 @tab 1
95049 -@item j1l @tab - @tab - @tab 2
95050 -@item jnf @tab 4 @tab 4 @tab 4
95051 -@item jn @tab 6 @tab 6 @tab 6
95052 -@item jnl @tab - @tab - @tab 2
95053 -@item lgammaf @tab 2 @tab 2 @tab 2
95054 -@item lgamma @tab 1 @tab 1 @tab 1
95055 -@item lgammal @tab - @tab - @tab 1
95056 -@item lrintf @tab - @tab - @tab -
95057 -@item lrint @tab - @tab - @tab -
95058 -@item lrintl @tab - @tab - @tab -
95059 -@item llrintf @tab - @tab - @tab -
95060 -@item llrint @tab - @tab - @tab -
95061 -@item llrintl @tab - @tab - @tab -
95062 -@item logf @tab 1 @tab 1 @tab 1
95063 -@item log @tab 1 @tab 1 @tab 1
95064 -@item logl @tab - @tab 1 @tab 1
95065 -@item log10f @tab 1 @tab 1 @tab 1
95066 -@item log10 @tab 1 @tab 1 @tab 1
95067 -@item log10l @tab - @tab - @tab 1
95068 -@item log1pf @tab 1 @tab 1 @tab 1
95069 -@item log1p @tab 1 @tab 1 @tab 1
95070 -@item log1pl @tab - @tab 1 @tab 1
95071 -@item log2f @tab 1 @tab 1 @tab 1
95072 -@item log2 @tab 1 @tab 1 @tab 1
95073 -@item log2l @tab - @tab - @tab -
95074 -@item logbf @tab - @tab - @tab -
95075 -@item logb @tab - @tab - @tab -
95076 -@item logbl @tab - @tab - @tab -
95077 -@item lroundf @tab - @tab - @tab -
95078 -@item lround @tab - @tab - @tab -
95079 -@item lroundl @tab - @tab - @tab -
95080 -@item llroundf @tab - @tab - @tab -
95081 -@item llround @tab - @tab - @tab -
95082 -@item llroundl @tab - @tab - @tab -
95083 -@item modff @tab - @tab - @tab -
95084 -@item modf @tab - @tab - @tab -
95085 -@item modfl @tab - @tab - @tab -
95086 -@item nearbyintf @tab - @tab - @tab -
95087 -@item nearbyint @tab - @tab - @tab -
95088 -@item nearbyintl @tab - @tab - @tab -
95089 -@item nextafterf @tab - @tab - @tab -
95090 -@item nextafter @tab - @tab - @tab -
95091 -@item nextafterl @tab - @tab - @tab -
95092 -@item nexttowardf @tab - @tab - @tab -
95093 -@item nexttoward @tab - @tab - @tab -
95094 -@item nexttowardl @tab - @tab - @tab -
95095 -@item powf @tab - @tab - @tab -
95096 -@item pow @tab - @tab - @tab -
95097 -@item powl @tab - @tab - @tab -
95098 -@item remainderf @tab - @tab - @tab -
95099 -@item remainder @tab - @tab - @tab -
95100 -@item remainderl @tab - @tab - @tab -
95101 -@item remquof @tab - @tab - @tab -
95102 -@item remquo @tab - @tab - @tab -
95103 -@item remquol @tab - @tab - @tab -
95104 -@item rintf @tab - @tab - @tab -
95105 -@item rint @tab - @tab - @tab -
95106 -@item rintl @tab - @tab - @tab -
95107 -@item roundf @tab - @tab - @tab -
95108 -@item round @tab - @tab - @tab -
95109 -@item roundl @tab - @tab - @tab -
95110 -@item scalbf @tab - @tab - @tab -
95111 -@item scalb @tab - @tab - @tab -
95112 -@item scalbl @tab - @tab - @tab -
95113 -@item scalbnf @tab - @tab - @tab -
95114 -@item scalbn @tab - @tab - @tab -
95115 -@item scalbnl @tab - @tab - @tab -
95116 -@item scalblnf @tab - @tab - @tab -
95117 -@item scalbln @tab - @tab - @tab -
95118 -@item scalblnl @tab - @tab - @tab -
95119 -@item sinf @tab - @tab - @tab -
95120 -@item sin @tab - @tab - @tab -
95121 -@item sinl @tab - @tab - @tab 1
95122 -@item sincosf @tab 1 @tab 1 @tab 1
95123 -@item sincos @tab 1 @tab 1 @tab 1
95124 -@item sincosl @tab - @tab 1 @tab 1
95125 -@item sinhf @tab 1 @tab 1 @tab 1
95126 -@item sinh @tab 1 @tab 1 @tab 1
95127 -@item sinhl @tab - @tab - @tab 1
95128 -@item sqrtf @tab - @tab - @tab -
95129 -@item sqrt @tab - @tab - @tab -
95130 -@item sqrtl @tab - @tab 1 @tab -
95131 -@item tanf @tab - @tab - @tab -
95132 -@item tan @tab 0.5 @tab 0.5 @tab 0.5
95133 -@item tanl @tab - @tab 1 @tab 1
95134 -@item tanhf @tab 1 @tab 1 @tab 1
95135 -@item tanh @tab 1 @tab 1 @tab 1
95136 -@item tanhl @tab - @tab - @tab 1
95137 -@item tgammaf @tab 1 @tab 1 @tab 1
95138 -@item tgamma @tab 1 @tab 1 @tab 1
95139 -@item tgammal @tab - @tab - @tab 2
95140 -@item truncf @tab - @tab - @tab -
95141 -@item trunc @tab - @tab - @tab -
95142 -@item truncl @tab - @tab - @tab -
95143 -@item y0f @tab 1 @tab 1 @tab 1
95144 -@item y0 @tab 2 @tab 2 @tab 2
95145 -@item y0l @tab - @tab - @tab 2
95146 -@item y1f @tab 2 @tab 2 @tab 2
95147 -@item y1 @tab 3 @tab 3 @tab 3
95148 -@item y1l @tab - @tab - @tab 2
95149 -@item ynf @tab 2 @tab 2 @tab 2
95150 -@item yn @tab 3 @tab 3 @tab 3
95151 -@item ynl @tab - @tab - @tab 7
95152 -@end multitable
95153 diff -u -udbrN glibc-2.3.2/manual/longopt.c.texi glibc-2.3.2-200304020432/manual/longopt.c.texi
95154 --- glibc-2.3.2/manual/longopt.c.texi Sat Aug 4 17:06:06 2001
95155 +++ glibc-2.3.2-200304020432/manual/longopt.c.texi Thu Jan 1 01:00:00 1970
95156 @@ -1,98 +0,0 @@
95157 -#include <stdio.h>
95158 -#include <stdlib.h>
95159 -#include <getopt.h>
95161 -/* @r{Flag set by @samp{--verbose}.} */
95162 -static int verbose_flag;
95164 -int
95165 -main (argc, argv)
95166 - int argc;
95167 - char **argv;
95169 - int c;
95171 - while (1)
95172 - @{
95173 - static struct option long_options[] =
95174 - @{
95175 - /* @r{These options set a flag.} */
95176 - @{"verbose", no_argument, &verbose_flag, 1@},
95177 - @{"brief", no_argument, &verbose_flag, 0@},
95178 - /* @r{These options don't set a flag.
95179 - We distinguish them by their indices.} */
95180 - @{"add", no_argument, 0, 'a'@},
95181 - @{"append", no_argument, 0, 'b'@},
95182 - @{"delete", required_argument, 0, 'd'@},
95183 - @{"create", required_argument, 0, 'c'@},
95184 - @{"file", required_argument, 0, 'f'@},
95185 - @{0, 0, 0, 0@}
95186 - @};
95187 - /* @r{@code{getopt_long} stores the option index here.} */
95188 - int option_index = 0;
95190 - c = getopt_long (argc, argv, "abc:d:f:",
95191 - long_options, &option_index);
95193 - /* @r{Detect the end of the options.} */
95194 - if (c == -1)
95195 - break;
95197 - switch (c)
95198 - @{
95199 - case 0:
95200 - /* @r{If this option set a flag, do nothing else now.} */
95201 - if (long_options[option_index].flag != 0)
95202 - break;
95203 - printf ("option %s", long_options[option_index].name);
95204 - if (optarg)
95205 - printf (" with arg %s", optarg);
95206 - printf ("\n");
95207 - break;
95209 - case 'a':
95210 - puts ("option -a\n");
95211 - break;
95213 - case 'b':
95214 - puts ("option -b\n");
95215 - break;
95217 - case 'c':
95218 - printf ("option -c with value `%s'\n", optarg);
95219 - break;
95221 - case 'd':
95222 - printf ("option -d with value `%s'\n", optarg);
95223 - break;
95225 - case 'f':
95226 - printf ("option -f with value `%s'\n", optarg);
95227 - break;
95229 - case '?':
95230 - /* @r{@code{getopt_long} already printed an error message.} */
95231 - break;
95233 - default:
95234 - abort ();
95235 - @}
95236 - @}
95238 - /* @r{Instead of reporting @samp{--verbose}
95239 - and @samp{--brief} as they are encountered,
95240 - we report the final status resulting from them.} */
95241 - if (verbose_flag)
95242 - puts ("verbose flag is set");
95244 - /* @r{Print any remaining command line arguments (not options).} */
95245 - if (optind < argc)
95246 - @{
95247 - printf ("non-option ARGV-elements: ");
95248 - while (optind < argc)
95249 - printf ("%s ", argv[optind++]);
95250 - putchar ('\n');
95251 - @}
95253 - exit (0);
95255 diff -u -udbrN glibc-2.3.2/manual/memopen.c.texi glibc-2.3.2-200304020432/manual/memopen.c.texi
95256 --- glibc-2.3.2/manual/memopen.c.texi Wed Dec 9 23:51:53 1998
95257 +++ glibc-2.3.2-200304020432/manual/memopen.c.texi Thu Jan 1 01:00:00 1970
95258 @@ -1,17 +0,0 @@
95259 -#include <stdio.h>
95261 -static char buffer[] = "foobar";
95263 -int
95264 -main (void)
95266 - int ch;
95267 - FILE *stream;
95269 - stream = fmemopen (buffer, strlen (buffer), "r");
95270 - while ((ch = fgetc (stream)) != EOF)
95271 - printf ("Got %c\n", ch);
95272 - fclose (stream);
95274 - return 0;
95276 diff -u -udbrN glibc-2.3.2/manual/memstrm.c.texi glibc-2.3.2-200304020432/manual/memstrm.c.texi
95277 --- glibc-2.3.2/manual/memstrm.c.texi Wed Dec 9 23:51:53 1998
95278 +++ glibc-2.3.2-200304020432/manual/memstrm.c.texi Thu Jan 1 01:00:00 1970
95279 @@ -1,19 +0,0 @@
95280 -#include <stdio.h>
95282 -int
95283 -main (void)
95285 - char *bp;
95286 - size_t size;
95287 - FILE *stream;
95289 - stream = open_memstream (&bp, &size);
95290 - fprintf (stream, "hello");
95291 - fflush (stream);
95292 - printf ("buf = `%s', size = %d\n", bp, size);
95293 - fprintf (stream, ", world");
95294 - fclose (stream);
95295 - printf ("buf = `%s', size = %d\n", bp, size);
95297 - return 0;
95299 diff -u -udbrN glibc-2.3.2/manual/mkfsock.c.texi glibc-2.3.2-200304020432/manual/mkfsock.c.texi
95300 --- glibc-2.3.2/manual/mkfsock.c.texi Mon Apr 22 21:30:58 2002
95301 +++ glibc-2.3.2-200304020432/manual/mkfsock.c.texi Thu Jan 1 01:00:00 1970
95302 @@ -1,46 +0,0 @@
95303 -#include <stddef.h>
95304 -#include <stdio.h>
95305 -#include <errno.h>
95306 -#include <stdlib.h>
95307 -#include <string.h>
95308 -#include <sys/socket.h>
95309 -#include <sys/un.h>
95311 -int
95312 -make_named_socket (const char *filename)
95314 - struct sockaddr_un name;
95315 - int sock;
95316 - size_t size;
95318 - /* @r{Create the socket.} */
95319 - sock = socket (PF_LOCAL, SOCK_DGRAM, 0);
95320 - if (sock < 0)
95321 - @{
95322 - perror ("socket");
95323 - exit (EXIT_FAILURE);
95324 - @}
95326 - /* @r{Bind a name to the socket.} */
95327 - name.sun_family = AF_LOCAL;
95328 - strncpy (name.sun_path, filename, sizeof (name.sun_path));
95329 - name.sun_path[sizeof (name.sun_path) - 1] = '\0';
95331 - /* @r{The size of the address is
95332 - the offset of the start of the filename,
95333 - plus its length,
95334 - plus one for the terminating null byte.
95335 - Alternatively you can just do:
95336 - size = SUN_LEN (&name);
95337 -} */
95338 - size = (offsetof (struct sockaddr_un, sun_path)
95339 - + strlen (name.sun_path) + 1);
95341 - if (bind (sock, (struct sockaddr *) &name, size) < 0)
95342 - @{
95343 - perror ("bind");
95344 - exit (EXIT_FAILURE);
95345 - @}
95347 - return sock;
95349 diff -u -udbrN glibc-2.3.2/manual/mkisock.c.texi glibc-2.3.2-200304020432/manual/mkisock.c.texi
95350 --- glibc-2.3.2/manual/mkisock.c.texi Wed Dec 9 23:51:53 1998
95351 +++ glibc-2.3.2-200304020432/manual/mkisock.c.texi Thu Jan 1 01:00:00 1970
95352 @@ -1,31 +0,0 @@
95353 -#include <stdio.h>
95354 -#include <stdlib.h>
95355 -#include <sys/socket.h>
95356 -#include <netinet/in.h>
95358 -int
95359 -make_socket (uint16_t port)
95361 - int sock;
95362 - struct sockaddr_in name;
95364 - /* @r{Create the socket.} */
95365 - sock = socket (PF_INET, SOCK_STREAM, 0);
95366 - if (sock < 0)
95367 - @{
95368 - perror ("socket");
95369 - exit (EXIT_FAILURE);
95370 - @}
95372 - /* @r{Give the socket a name.} */
95373 - name.sin_family = AF_INET;
95374 - name.sin_port = htons (port);
95375 - name.sin_addr.s_addr = htonl (INADDR_ANY);
95376 - if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
95377 - @{
95378 - perror ("bind");
95379 - exit (EXIT_FAILURE);
95380 - @}
95382 - return sock;
95384 diff -u -udbrN glibc-2.3.2/manual/mygetpass.c.texi glibc-2.3.2-200304020432/manual/mygetpass.c.texi
95385 --- glibc-2.3.2/manual/mygetpass.c.texi Tue Apr 18 06:13:59 2000
95386 +++ glibc-2.3.2-200304020432/manual/mygetpass.c.texi Thu Jan 1 01:00:00 1970
95387 @@ -1,25 +0,0 @@
95388 -#include <termios.h>
95389 -#include <stdio.h>
95391 -ssize_t
95392 -my_getpass (char **lineptr, size_t *n, FILE *stream)
95394 - struct termios old, new;
95395 - int nread;
95397 - /* @r{Turn echoing off and fail if we can't.} */
95398 - if (tcgetattr (fileno (stream), &old) != 0)
95399 - return -1;
95400 - new = old;
95401 - new.c_lflag &= ~ECHO;
95402 - if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
95403 - return -1;
95405 - /* @r{Read the password.} */
95406 - nread = getline (lineptr, n, stream);
95408 - /* @r{Restore terminal.} */
95409 - (void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
95411 - return nread;
95413 diff -u -udbrN glibc-2.3.2/manual/pipe.c.texi glibc-2.3.2-200304020432/manual/pipe.c.texi
95414 --- glibc-2.3.2/manual/pipe.c.texi Sat Oct 30 08:39:31 1999
95415 +++ glibc-2.3.2-200304020432/manual/pipe.c.texi Thu Jan 1 01:00:00 1970
95416 @@ -1,70 +0,0 @@
95417 -#include <sys/types.h>
95418 -#include <unistd.h>
95419 -#include <stdio.h>
95420 -#include <stdlib.h>
95422 -/* @r{Read characters from the pipe and echo them to @code{stdout}.} */
95424 -void
95425 -read_from_pipe (int file)
95427 - FILE *stream;
95428 - int c;
95429 - stream = fdopen (file, "r");
95430 - while ((c = fgetc (stream)) != EOF)
95431 - putchar (c);
95432 - fclose (stream);
95435 -/* @r{Write some random text to the pipe.} */
95437 -void
95438 -write_to_pipe (int file)
95440 - FILE *stream;
95441 - stream = fdopen (file, "w");
95442 - fprintf (stream, "hello, world!\n");
95443 - fprintf (stream, "goodbye, world!\n");
95444 - fclose (stream);
95447 -int
95448 -main (void)
95450 - pid_t pid;
95451 - int mypipe[2];
95453 -@group
95454 - /* @r{Create the pipe.} */
95455 - if (pipe (mypipe))
95456 - @{
95457 - fprintf (stderr, "Pipe failed.\n");
95458 - return EXIT_FAILURE;
95459 - @}
95460 -@end group
95462 - /* @r{Create the child process.} */
95463 - pid = fork ();
95464 - if (pid == (pid_t) 0)
95465 - @{
95466 - /* @r{This is the child process.
95467 - Close other end first.} */
95468 - close (mypipe[1]);
95469 - read_from_pipe (mypipe[0]);
95470 - return EXIT_SUCCESS;
95471 - @}
95472 - else if (pid < (pid_t) 0)
95473 - @{
95474 - /* @r{The fork failed.} */
95475 - fprintf (stderr, "Fork failed.\n");
95476 - return EXIT_FAILURE;
95477 - @}
95478 - else
95479 - @{
95480 - /* @r{This is the parent process.
95481 - Close other end first.} */
95482 - close (mypipe[0]);
95483 - write_to_pipe (mypipe[1]);
95484 - return EXIT_SUCCESS;
95485 - @}
95487 diff -u -udbrN glibc-2.3.2/manual/popen.c.texi glibc-2.3.2-200304020432/manual/popen.c.texi
95488 --- glibc-2.3.2/manual/popen.c.texi Wed Aug 2 21:25:17 2000
95489 +++ glibc-2.3.2-200304020432/manual/popen.c.texi Thu Jan 1 01:00:00 1970
95490 @@ -1,38 +0,0 @@
95491 -#include <stdio.h>
95492 -#include <stdlib.h>
95494 -void
95495 -write_data (FILE * stream)
95497 - int i;
95498 - for (i = 0; i < 100; i++)
95499 - fprintf (stream, "%d\n", i);
95500 - if (ferror (stream))
95501 - @{
95502 - fprintf (stderr, "Output to stream failed.\n");
95503 - exit (EXIT_FAILURE);
95504 - @}
95507 -@group
95508 -int
95509 -main (void)
95511 - FILE *output;
95513 - output = popen ("more", "w");
95514 - if (!output)
95515 - @{
95516 - fprintf (stderr,
95517 - "incorrect parameters or too many files.\n");
95518 - return EXIT_FAILURE;
95519 - @}
95520 - write_data (output);
95521 - if (pclose (output) != 0)
95522 - @{
95523 - fprintf (stderr,
95524 - "Could not run more or other error.\n");
95525 - @}
95526 - return EXIT_SUCCESS;
95528 -@end group
95529 diff -u -udbrN glibc-2.3.2/manual/rprintf.c.texi glibc-2.3.2-200304020432/manual/rprintf.c.texi
95530 --- glibc-2.3.2/manual/rprintf.c.texi Mon Jan 11 19:57:12 1999
95531 +++ glibc-2.3.2-200304020432/manual/rprintf.c.texi Thu Jan 1 01:00:00 1970
95532 @@ -1,67 +0,0 @@
95533 -#include <stdio.h>
95534 -#include <stdlib.h>
95535 -#include <printf.h>
95537 -@group
95538 -typedef struct
95540 - char *name;
95542 -Widget;
95543 -@end group
95545 -int
95546 -print_widget (FILE *stream,
95547 - const struct printf_info *info,
95548 - const void *const *args)
95550 - const Widget *w;
95551 - char *buffer;
95552 - int len;
95554 - /* @r{Format the output into a string.} */
95555 - w = *((const Widget **) (args[0]));
95556 - len = asprintf (&buffer, "<Widget %p: %s>", w, w->name);
95557 - if (len == -1)
95558 - return -1;
95560 - /* @r{Pad to the minimum field width and print to the stream.} */
95561 - len = fprintf (stream, "%*s",
95562 - (info->left ? -info->width : info->width),
95563 - buffer);
95565 - /* @r{Clean up and return.} */
95566 - free (buffer);
95567 - return len;
95571 -int
95572 -print_widget_arginfo (const struct printf_info *info, size_t n,
95573 - int *argtypes)
95575 - /* @r{We always take exactly one argument and this is a pointer to the
95576 - structure..} */
95577 - if (n > 0)
95578 - argtypes[0] = PA_POINTER;
95579 - return 1;
95583 -int
95584 -main (void)
95586 - /* @r{Make a widget to print.} */
95587 - Widget mywidget;
95588 - mywidget.name = "mywidget";
95590 - /* @r{Register the print function for widgets.} */
95591 - register_printf_function ('W', print_widget, print_widget_arginfo);
95593 - /* @r{Now print the widget.} */
95594 - printf ("|%W|\n", &mywidget);
95595 - printf ("|%35W|\n", &mywidget);
95596 - printf ("|%-35W|\n", &mywidget);
95598 - return 0;
95600 diff -u -udbrN glibc-2.3.2/manual/search.c.texi glibc-2.3.2-200304020432/manual/search.c.texi
95601 --- glibc-2.3.2/manual/search.c.texi Wed Dec 9 23:51:53 1998
95602 +++ glibc-2.3.2-200304020432/manual/search.c.texi Thu Jan 1 01:00:00 1970
95603 @@ -1,93 +0,0 @@
95604 -#include <stdlib.h>
95605 -#include <stdio.h>
95606 -#include <string.h>
95608 -/* @r{Define an array of critters to sort.} */
95610 -struct critter
95611 - @{
95612 - const char *name;
95613 - const char *species;
95614 - @};
95616 -struct critter muppets[] =
95617 - @{
95618 - @{"Kermit", "frog"@},
95619 - @{"Piggy", "pig"@},
95620 - @{"Gonzo", "whatever"@},
95621 - @{"Fozzie", "bear"@},
95622 - @{"Sam", "eagle"@},
95623 - @{"Robin", "frog"@},
95624 - @{"Animal", "animal"@},
95625 - @{"Camilla", "chicken"@},
95626 - @{"Sweetums", "monster"@},
95627 - @{"Dr. Strangepork", "pig"@},
95628 - @{"Link Hogthrob", "pig"@},
95629 - @{"Zoot", "human"@},
95630 - @{"Dr. Bunsen Honeydew", "human"@},
95631 - @{"Beaker", "human"@},
95632 - @{"Swedish Chef", "human"@}
95633 - @};
95635 -int count = sizeof (muppets) / sizeof (struct critter);
95639 -/* @r{This is the comparison function used for sorting and searching.} */
95641 -int
95642 -critter_cmp (const struct critter *c1, const struct critter *c2)
95644 - return strcmp (c1->name, c2->name);
95648 -/* @r{Print information about a critter.} */
95650 -void
95651 -print_critter (const struct critter *c)
95653 - printf ("%s, the %s\n", c->name, c->species);
95657 -@group
95658 -/* @r{Do the lookup into the sorted array.} */
95660 -void
95661 -find_critter (const char *name)
95663 - struct critter target, *result;
95664 - target.name = name;
95665 - result = bsearch (&target, muppets, count, sizeof (struct critter),
95666 - critter_cmp);
95667 - if (result)
95668 - print_critter (result);
95669 - else
95670 - printf ("Couldn't find %s.\n", name);
95672 -@end group
95674 -/* @r{Main program.} */
95676 -int
95677 -main (void)
95679 - int i;
95681 - for (i = 0; i < count; i++)
95682 - print_critter (&muppets[i]);
95683 - printf ("\n");
95685 - qsort (muppets, count, sizeof (struct critter), critter_cmp);
95687 - for (i = 0; i < count; i++)
95688 - print_critter (&muppets[i]);
95689 - printf ("\n");
95691 - find_critter ("Kermit");
95692 - find_critter ("Gonzo");
95693 - find_critter ("Janice");
95695 - return 0;
95697 diff -u -udbrN glibc-2.3.2/manual/select.c.texi glibc-2.3.2-200304020432/manual/select.c.texi
95698 --- glibc-2.3.2/manual/select.c.texi Mon Nov 18 20:37:19 2002
95699 +++ glibc-2.3.2-200304020432/manual/select.c.texi Thu Jan 1 01:00:00 1970
95700 @@ -1,41 +0,0 @@
95701 -@group
95702 -#include <errno.h>
95703 -#include <stdio.h>
95704 -#include <unistd.h>
95705 -#include <sys/types.h>
95706 -#include <sys/time.h>
95707 -@end group
95709 -@group
95710 -int
95711 -input_timeout (int filedes, unsigned int seconds)
95713 - fd_set set;
95714 - struct timeval timeout;
95715 -@end group
95717 - /* @r{Initialize the file descriptor set.} */
95718 - FD_ZERO (&set);
95719 - FD_SET (filedes, &set);
95721 - /* @r{Initialize the timeout data structure.} */
95722 - timeout.tv_sec = seconds;
95723 - timeout.tv_usec = 0;
95725 -@group
95726 - /* @r{@code{select} returns 0 if timeout, 1 if input available, -1 if error.} */
95727 - return TEMP_FAILURE_RETRY (select (FD_SETSIZE,
95728 - &set, NULL, NULL,
95729 - &timeout));
95731 -@end group
95733 -@group
95734 -int
95735 -main (void)
95737 - fprintf (stderr, "select returned %d.\n",
95738 - input_timeout (STDIN_FILENO, 5));
95739 - return 0;
95741 -@end group
95742 diff -u -udbrN glibc-2.3.2/manual/setjmp.c.texi glibc-2.3.2-200304020432/manual/setjmp.c.texi
95743 --- glibc-2.3.2/manual/setjmp.c.texi Wed Dec 9 23:51:53 1998
95744 +++ glibc-2.3.2-200304020432/manual/setjmp.c.texi Thu Jan 1 01:00:00 1970
95745 @@ -1,32 +0,0 @@
95746 -#include <setjmp.h>
95747 -#include <stdlib.h>
95748 -#include <stdio.h>
95750 -jmp_buf main_loop;
95752 -void
95753 -abort_to_main_loop (int status)
95755 - longjmp (main_loop, status);
95758 -int
95759 -main (void)
95761 - while (1)
95762 - if (setjmp (main_loop))
95763 - puts ("Back at main loop....");
95764 - else
95765 - do_command ();
95769 -void
95770 -do_command (void)
95772 - char buffer[128];
95773 - if (fgets (buffer, 128, stdin) == NULL)
95774 - abort_to_main_loop (-1);
95775 - else
95776 - exit (EXIT_SUCCESS);
95778 diff -u -udbrN glibc-2.3.2/manual/sigh1.c.texi glibc-2.3.2-200304020432/manual/sigh1.c.texi
95779 --- glibc-2.3.2/manual/sigh1.c.texi Wed Dec 9 23:51:53 1998
95780 +++ glibc-2.3.2-200304020432/manual/sigh1.c.texi Thu Jan 1 01:00:00 1970
95781 @@ -1,36 +0,0 @@
95782 -#include <signal.h>
95783 -#include <stdio.h>
95784 -#include <stdlib.h>
95786 -/* @r{This flag controls termination of the main loop.} */
95787 -volatile sig_atomic_t keep_going = 1;
95789 -/* @r{The signal handler just clears the flag and re-enables itself.} */
95790 -void
95791 -catch_alarm (int sig)
95793 - keep_going = 0;
95794 - signal (sig, catch_alarm);
95797 -void
95798 -do_stuff (void)
95800 - puts ("Doing stuff while waiting for alarm....");
95803 -int
95804 -main (void)
95806 - /* @r{Establish a handler for SIGALRM signals.} */
95807 - signal (SIGALRM, catch_alarm);
95809 - /* @r{Set an alarm to go off in a little while.} */
95810 - alarm (2);
95812 - /* @r{Check the flag once in a while to see when to quit.} */
95813 - while (keep_going)
95814 - do_stuff ();
95816 - return EXIT_SUCCESS;
95818 diff -u -udbrN glibc-2.3.2/manual/sigusr.c.texi glibc-2.3.2-200304020432/manual/sigusr.c.texi
95819 --- glibc-2.3.2/manual/sigusr.c.texi Wed Dec 9 23:51:53 1998
95820 +++ glibc-2.3.2-200304020432/manual/sigusr.c.texi Thu Jan 1 01:00:00 1970
95821 @@ -1,61 +0,0 @@
95822 -@group
95823 -#include <signal.h>
95824 -#include <stdio.h>
95825 -#include <sys/types.h>
95826 -#include <unistd.h>
95827 -@end group
95829 -/* @r{When a @code{SIGUSR1} signal arrives, set this variable.} */
95830 -volatile sig_atomic_t usr_interrupt = 0;
95832 -void
95833 -synch_signal (int sig)
95835 - usr_interrupt = 1;
95838 -/* @r{The child process executes this function.} */
95839 -void
95840 -child_function (void)
95842 - /* @r{Perform initialization.} */
95843 - printf ("I'm here!!! My pid is %d.\n", (int) getpid ());
95845 - /* @r{Let parent know you're done.} */
95846 - kill (getppid (), SIGUSR1);
95848 - /* @r{Continue with execution.} */
95849 - puts ("Bye, now....");
95850 - exit (0);
95853 -int
95854 -main (void)
95856 - struct sigaction usr_action;
95857 - sigset_t block_mask;
95858 - pid_t child_id;
95860 - /* @r{Establish the signal handler.} */
95861 - sigfillset (&block_mask);
95862 - usr_action.sa_handler = synch_signal;
95863 - usr_action.sa_mask = block_mask;
95864 - usr_action.sa_flags = 0;
95865 - sigaction (SIGUSR1, &usr_action, NULL);
95867 - /* @r{Create the child process.} */
95868 - child_id = fork ();
95869 - if (child_id == 0)
95870 - child_function (); /* @r{Does not return.} */
95872 -@group
95873 - /* @r{Busy wait for the child to send a signal.} */
95874 - while (!usr_interrupt)
95876 -@end group
95878 - /* @r{Now continue execution.} */
95879 - puts ("That's all, folks!");
95881 - return 0;
95883 diff -u -udbrN glibc-2.3.2/manual/stpcpy.c.texi glibc-2.3.2-200304020432/manual/stpcpy.c.texi
95884 --- glibc-2.3.2/manual/stpcpy.c.texi Wed Dec 9 23:51:53 1998
95885 +++ glibc-2.3.2-200304020432/manual/stpcpy.c.texi Thu Jan 1 01:00:00 1970
95886 @@ -1,13 +0,0 @@
95887 -#include <string.h>
95888 -#include <stdio.h>
95890 -int
95891 -main (void)
95893 - char buffer[10];
95894 - char *to = buffer;
95895 - to = stpcpy (to, "foo");
95896 - to = stpcpy (to, "bar");
95897 - puts (buffer);
95898 - return 0;
95900 diff -u -udbrN glibc-2.3.2/manual/strdupa.c.texi glibc-2.3.2-200304020432/manual/strdupa.c.texi
95901 --- glibc-2.3.2/manual/strdupa.c.texi Wed Dec 9 23:51:53 1998
95902 +++ glibc-2.3.2-200304020432/manual/strdupa.c.texi Thu Jan 1 01:00:00 1970
95903 @@ -1,19 +0,0 @@
95904 -#include <paths.h>
95905 -#include <string.h>
95906 -#include <stdio.h>
95908 -const char path[] = _PATH_STDPATH;
95910 -int
95911 -main (void)
95913 - char *wr_path = strdupa (path);
95914 - char *cp = strtok (wr_path, ":");
95916 - while (cp != NULL)
95917 - @{
95918 - puts (cp);
95919 - cp = strtok (NULL, ":");
95920 - @}
95921 - return 0;
95923 diff -u -udbrN glibc-2.3.2/manual/strftim.c.texi glibc-2.3.2-200304020432/manual/strftim.c.texi
95924 --- glibc-2.3.2/manual/strftim.c.texi Wed Dec 9 23:51:53 1998
95925 +++ glibc-2.3.2-200304020432/manual/strftim.c.texi Thu Jan 1 01:00:00 1970
95926 @@ -1,31 +0,0 @@
95927 -#include <time.h>
95928 -#include <stdio.h>
95930 -#define SIZE 256
95932 -int
95933 -main (void)
95935 - char buffer[SIZE];
95936 - time_t curtime;
95937 - struct tm *loctime;
95939 - /* @r{Get the current time.} */
95940 - curtime = time (NULL);
95942 - /* @r{Convert it to local time representation.} */
95943 - loctime = localtime (&curtime);
95945 - /* @r{Print out the date and time in the standard format.} */
95946 - fputs (asctime (loctime), stdout);
95948 -@group
95949 - /* @r{Print it out in a nice format.} */
95950 - strftime (buffer, SIZE, "Today is %A, %B %d.\n", loctime);
95951 - fputs (buffer, stdout);
95952 - strftime (buffer, SIZE, "The time is %I:%M %p.\n", loctime);
95953 - fputs (buffer, stdout);
95955 - return 0;
95957 -@end group
95958 diff -u -udbrN glibc-2.3.2/manual/strncat.c.texi glibc-2.3.2-200304020432/manual/strncat.c.texi
95959 --- glibc-2.3.2/manual/strncat.c.texi Wed Dec 9 23:51:53 1998
95960 +++ glibc-2.3.2-200304020432/manual/strncat.c.texi Thu Jan 1 01:00:00 1970
95961 @@ -1,14 +0,0 @@
95962 -#include <string.h>
95963 -#include <stdio.h>
95965 -#define SIZE 10
95967 -static char buffer[SIZE];
95969 -main ()
95971 - strncpy (buffer, "hello", SIZE);
95972 - puts (buffer);
95973 - strncat (buffer, ", world", SIZE - strlen (buffer) - 1);
95974 - puts (buffer);
95976 diff -u -udbrN glibc-2.3.2/manual/subopt.c.texi glibc-2.3.2-200304020432/manual/subopt.c.texi
95977 --- glibc-2.3.2/manual/subopt.c.texi Sat Apr 22 09:29:06 2000
95978 +++ glibc-2.3.2-200304020432/manual/subopt.c.texi Thu Jan 1 01:00:00 1970
95979 @@ -1,78 +0,0 @@
95980 -#include <stdio.h>
95981 -#include <stdlib.h>
95982 -#include <unistd.h>
95984 -int do_all;
95985 -const char *type;
95986 -int read_size;
95987 -int write_size;
95988 -int read_only;
95990 -enum
95992 - RO_OPTION = 0,
95993 - RW_OPTION,
95994 - READ_SIZE_OPTION,
95995 - WRITE_SIZE_OPTION,
95996 - THE_END
95997 -@};
95999 -const char *mount_opts[] =
96001 - [RO_OPTION] = "ro",
96002 - [RW_OPTION] = "rw",
96003 - [READ_SIZE_OPTION] = "rsize",
96004 - [WRITE_SIZE_OPTION] = "wsize",
96005 - [THE_END] = NULL
96006 -@};
96008 -int
96009 -main (int argc, char *argv[])
96011 - char *subopts, *value;
96012 - int opt;
96014 - while ((opt = getopt (argc, argv, "at:o:")) != -1)
96015 - switch (opt)
96016 - @{
96017 - case 'a':
96018 - do_all = 1;
96019 - break;
96020 - case 't':
96021 - type = optarg;
96022 - break;
96023 - case 'o':
96024 - subopts = optarg;
96025 - while (*subopts != '\0')
96026 - switch (getsubopt (&subopts, mount_opts, &value))
96027 - @{
96028 - case RO_OPTION:
96029 - read_only = 1;
96030 - break;
96031 - case RW_OPTION:
96032 - read_only = 0;
96033 - break;
96034 - case READ_SIZE_OPTION:
96035 - if (value == NULL)
96036 - abort ();
96037 - read_size = atoi (value);
96038 - break;
96039 - case WRITE_SIZE_OPTION:
96040 - if (value == NULL)
96041 - abort ();
96042 - write_size = atoi (value);
96043 - break;
96044 - default:
96045 - /* @r{Unknown suboption.} */
96046 - printf ("Unknown suboption `%s'\n", value);
96047 - break;
96048 - @}
96049 - break;
96050 - default:
96051 - abort ();
96052 - @}
96054 - /* @r{Do the real work.} */
96056 - return 0;
96058 diff -u -udbrN glibc-2.3.2/manual/swapcontext.c.texi glibc-2.3.2-200304020432/manual/swapcontext.c.texi
96059 --- glibc-2.3.2/manual/swapcontext.c.texi Mon Apr 9 00:26:17 2001
96060 +++ glibc-2.3.2-200304020432/manual/swapcontext.c.texi Thu Jan 1 01:00:00 1970
96061 @@ -1,99 +0,0 @@
96062 -#include <signal.h>
96063 -#include <stdio.h>
96064 -#include <stdlib.h>
96065 -#include <ucontext.h>
96066 -#include <sys/time.h>
96068 -/* @r{Set by the signal handler.} */
96069 -static volatile int expired;
96071 -/* @r{The contexts.} */
96072 -static ucontext_t uc[3];
96074 -/* @r{We do only a certain number of switches.} */
96075 -static int switches;
96078 -/* @r{This is the function doing the work. It is just a
96079 - skeleton, real code has to be filled in.} */
96080 -static void
96081 -f (int n)
96083 - int m = 0;
96084 - while (1)
96085 - @{
96086 - /* @r{This is where the work would be done.} */
96087 - if (++m % 100 == 0)
96088 - @{
96089 - putchar ('.');
96090 - fflush (stdout);
96091 - @}
96093 - /* @r{Regularly the @var{expire} variable must be checked.} */
96094 - if (expired)
96095 - @{
96096 - /* @r{We do not want the program to run forever.} */
96097 - if (++switches == 20)
96098 - return;
96100 - printf ("\nswitching from %d to %d\n", n, 3 - n);
96101 - expired = 0;
96102 - /* @r{Switch to the other context, saving the current one.} */
96103 - swapcontext (&uc[n], &uc[3 - n]);
96104 - @}
96105 - @}
96108 -/* @r{This is the signal handler which simply set the variable.} */
96109 -void
96110 -handler (int signal)
96112 - expired = 1;
96116 -int
96117 -main (void)
96119 - struct sigaction sa;
96120 - struct itimerval it;
96121 - char st1[8192];
96122 - char st2[8192];
96124 - /* @r{Initialize the data structures for the interval timer.} */
96125 - sa.sa_flags = SA_RESTART;
96126 - sigfillset (&sa.sa_mask);
96127 - sa.sa_handler = handler;
96128 - it.it_interval.tv_sec = 0;
96129 - it.it_interval.tv_usec = 1;
96130 - it.it_value = it.it_interval;
96132 - /* @r{Install the timer and get the context we can manipulate.} */
96133 - if (sigaction (SIGPROF, &sa, NULL) < 0
96134 - || setitimer (ITIMER_PROF, &it, NULL) < 0
96135 - || getcontext (&uc[1]) == -1
96136 - || getcontext (&uc[2]) == -1)
96137 - abort ();
96139 - /* @r{Create a context with a separate stack which causes the
96140 - function @code{f} to be call with the parameter @code{1}.
96141 - Note that the @code{uc_link} points to the main context
96142 - which will cause the program to terminate once the function
96143 - return.} */
96144 - uc[1].uc_link = &uc[0];
96145 - uc[1].uc_stack.ss_sp = st1;
96146 - uc[1].uc_stack.ss_size = sizeof st1;
96147 - makecontext (&uc[1], (void (*) (void)) f, 1, 1);
96149 - /* @r{Similarly, but @code{2} is passed as the parameter to @code{f}.} */
96150 - uc[2].uc_link = &uc[0];
96151 - uc[2].uc_stack.ss_sp = st2;
96152 - uc[2].uc_stack.ss_size = sizeof st2;
96153 - makecontext (&uc[2], (void (*) (void)) f, 1, 2);
96155 - /* @r{Start running.} */
96156 - swapcontext (&uc[0], &uc[1]);
96157 - putchar ('\n');
96159 - return 0;
96161 diff -u -udbrN glibc-2.3.2/manual/termios.c.texi glibc-2.3.2-200304020432/manual/termios.c.texi
96162 --- glibc-2.3.2/manual/termios.c.texi Wed Dec 9 23:51:53 1998
96163 +++ glibc-2.3.2-200304020432/manual/termios.c.texi Thu Jan 1 01:00:00 1970
96164 @@ -1,60 +0,0 @@
96165 -#include <unistd.h>
96166 -#include <stdio.h>
96167 -#include <stdlib.h>
96168 -#include <termios.h>
96170 -/* @r{Use this variable to remember original terminal attributes.} */
96172 -struct termios saved_attributes;
96174 -void
96175 -reset_input_mode (void)
96177 - tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
96180 -void
96181 -set_input_mode (void)
96183 - struct termios tattr;
96184 - char *name;
96186 - /* @r{Make sure stdin is a terminal.} */
96187 - if (!isatty (STDIN_FILENO))
96188 - @{
96189 - fprintf (stderr, "Not a terminal.\n");
96190 - exit (EXIT_FAILURE);
96191 - @}
96193 - /* @r{Save the terminal attributes so we can restore them later.} */
96194 - tcgetattr (STDIN_FILENO, &saved_attributes);
96195 - atexit (reset_input_mode);
96197 -@group
96198 - /* @r{Set the funny terminal modes.} */
96199 - tcgetattr (STDIN_FILENO, &tattr);
96200 - tattr.c_lflag &= ~(ICANON|ECHO); /* @r{Clear ICANON and ECHO.} */
96201 - tattr.c_cc[VMIN] = 1;
96202 - tattr.c_cc[VTIME] = 0;
96203 - tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr);
96205 -@end group
96207 -int
96208 -main (void)
96210 - char c;
96212 - set_input_mode ();
96214 - while (1)
96215 - @{
96216 - read (STDIN_FILENO, &c, 1);
96217 - if (c == '\004') /* @r{@kbd{C-d}} */
96218 - break;
96219 - else
96220 - putchar (c);
96221 - @}
96223 - return EXIT_SUCCESS;
96225 diff -u -udbrN glibc-2.3.2/manual/testopt.c.texi glibc-2.3.2-200304020432/manual/testopt.c.texi
96226 --- glibc-2.3.2/manual/testopt.c.texi Wed Dec 9 23:51:53 1998
96227 +++ glibc-2.3.2-200304020432/manual/testopt.c.texi Thu Jan 1 01:00:00 1970
96228 @@ -1,51 +0,0 @@
96229 -@group
96230 -#include <unistd.h>
96231 -#include <stdio.h>
96233 -int
96234 -main (int argc, char **argv)
96236 - int aflag = 0;
96237 - int bflag = 0;
96238 - char *cvalue = NULL;
96239 - int index;
96240 - int c;
96242 - opterr = 0;
96243 -@end group
96245 -@group
96246 - while ((c = getopt (argc, argv, "abc:")) != -1)
96247 - switch (c)
96248 - @{
96249 - case 'a':
96250 - aflag = 1;
96251 - break;
96252 - case 'b':
96253 - bflag = 1;
96254 - break;
96255 - case 'c':
96256 - cvalue = optarg;
96257 - break;
96258 - case '?':
96259 - if (isprint (optopt))
96260 - fprintf (stderr, "Unknown option `-%c'.\n", optopt);
96261 - else
96262 - fprintf (stderr,
96263 - "Unknown option character `\\x%x'.\n",
96264 - optopt);
96265 - return 1;
96266 - default:
96267 - abort ();
96268 - @}
96269 -@end group
96271 -@group
96272 - printf ("aflag = %d, bflag = %d, cvalue = %s\n",
96273 - aflag, bflag, cvalue);
96275 - for (index = optind; index < argc; index++)
96276 - printf ("Non-option argument %s\n", argv[index]);
96277 - return 0;
96279 -@end group
96280 diff -u -udbrN glibc-2.3.2/manual/testpass.c.texi glibc-2.3.2-200304020432/manual/testpass.c.texi
96281 --- glibc-2.3.2/manual/testpass.c.texi Tue Apr 18 06:13:59 2000
96282 +++ glibc-2.3.2-200304020432/manual/testpass.c.texi Thu Jan 1 01:00:00 1970
96283 @@ -1,26 +0,0 @@
96284 -#include <stdio.h>
96285 -#include <string.h>
96286 -#include <unistd.h>
96287 -#include <crypt.h>
96289 -int
96290 -main(void)
96292 - /* @r{Hashed form of "GNU libc manual".} */
96293 - const char *const pass = "$1$/iSaq7rB$EoUw5jJPPvAPECNaaWzMK/";
96295 - char *result;
96296 - int ok;
96298 -@group
96299 - /* @r{Read in the user's password and encrypt it,
96300 - passing the expected password in as the salt.} */
96301 - result = crypt(getpass("Password:"), pass);
96302 -@end group
96304 - /* @r{Test the result.} */
96305 - ok = strcmp (result, pass) == 0;
96307 - puts(ok ? "Access granted." : "Access denied.");
96308 - return ok ? 0 : 1;
96310 diff -u -udbrN glibc-2.3.2/math/libm-test.inc glibc-2.3.2-200304020432/math/libm-test.inc
96311 --- glibc-2.3.2/math/libm-test.inc Sat Feb 15 07:55:23 2003
96312 +++ glibc-2.3.2-200304020432/math/libm-test.inc Sat Mar 22 07:13:35 2003
96313 @@ -1537,7 +1537,7 @@
96314 TEST_c_c (ccos, nan_value, nan_value, nan_value, nan_value);
96316 TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
96317 - TEST_c_c (ccos, -2, -3, -4.1896256909688072301L, -9.1092278937553365979L);
96318 + TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
96320 END (ccos, complex);
96322 @@ -1606,7 +1606,7 @@
96324 TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
96326 - TEST_c_c (ccosh, -2, -3, -3.7245455049153225654L, 0.5118225699873846088L);
96327 + TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
96329 END (ccosh, complex);
96331 @@ -1836,7 +1836,7 @@
96332 TEST_c_c (clog10, nan_value, nan_value, nan_value, nan_value);
96334 TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
96335 - TEST_c_c (clog10, -2, -3, 0.5569716761534183846L, -0.9375544629863747085L);
96336 + TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
96338 END (clog10, complex);
96340 @@ -2072,7 +2072,7 @@
96341 TEST_c_c (csin, nan_value, nan_value, nan_value, nan_value);
96343 TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
96344 - TEST_c_c (csin, -2, -3, -9.1544991469114295734L, 4.1689069599665643507L);
96345 + TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
96347 END (csin, complex);
96349 @@ -2140,7 +2140,7 @@
96350 TEST_c_c (csinh, nan_value, nan_value, nan_value, nan_value);
96352 TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
96353 - TEST_c_c (csinh, -2, -3, 3.5905645899857799520L, -0.5309210862485198052L);
96354 + TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
96356 END (csinh, complex);
96358 @@ -2264,7 +2264,7 @@
96359 TEST_c_c (ctan, nan_value, nan_value, nan_value, nan_value);
96361 TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
96362 - TEST_c_c (ctan, -2, -3, 0.0037640256415042482L, -1.0032386273536098014L);
96363 + TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
96365 END (ctan, complex);
96367 @@ -2323,7 +2323,7 @@
96368 TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
96370 TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
96371 - TEST_c_c (ctanh, -2, -3, -0.9653858790221331242L, 0.0098843750383224937L);
96372 + TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
96374 END (ctanh, complex);
96376 @@ -3067,8 +3067,8 @@
96378 TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
96379 TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
96380 - TEST_f_f1 (lgamma, 0.7L, 0.26086724653166651439L, 1);
96381 - TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197e-1L, 1);
96382 + TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
96383 + TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
96385 END (lgamma);
96387 @@ -4078,8 +4078,8 @@
96388 TEST_f_f (tgamma, 1, 1);
96389 TEST_f_f (tgamma, 4, 6);
96391 - TEST_f_f (tgamma, 0.7L, 1.29805533264755778568L);
96392 - TEST_f_f (tgamma, 1.2L, 0.91816874239976061064L);
96393 + TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
96394 + TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
96396 END (tgamma);
96398 diff -u -udbrN glibc-2.3.2/math/tgmath.h glibc-2.3.2-200304020432/math/tgmath.h
96399 --- glibc-2.3.2/math/tgmath.h Sat Jul 7 21:21:06 2001
96400 +++ glibc-2.3.2-200304020432/math/tgmath.h Mon Mar 3 20:39:31 2003
96401 @@ -1,4 +1,4 @@
96402 -/* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
96403 +/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
96404 This file is part of the GNU C Library.
96406 The GNU C Library is free software; you can redistribute it and/or
96407 @@ -74,6 +74,17 @@
96408 __tgmres = __tgml(Fct) (Val); \
96409 __tgmres; }))
96411 +# define __TGMATH_UNARY_REAL_RET_ONLY(Val, RetType, Fct) \
96412 + (__extension__ ({ RetType __tgmres; \
96413 + if (sizeof (Val) == sizeof (double) \
96414 + || __builtin_classify_type (Val) != 8) \
96415 + __tgmres = Fct (Val); \
96416 + else if (sizeof (Val) == sizeof (float)) \
96417 + __tgmres = Fct##f (Val); \
96418 + else \
96419 + __tgmres = __tgml(Fct) (Val); \
96420 + __tgmres; }))
96422 # define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \
96423 (__extension__ ({ __tgmath_real_type (Val1) __tgmres; \
96424 if (sizeof (Val1) == sizeof (double) \
96425 @@ -345,13 +356,13 @@
96427 /* Round X to nearest integral value according to current rounding
96428 direction. */
96429 -#define lrint(Val) __TGMATH_UNARY_REAL_ONLY (Val, lrint)
96430 -#define llrint(Val) __TGMATH_UNARY_REAL_ONLY (Val, llrint)
96431 +#define lrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long int, lrint)
96432 +#define llrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long long int, llrint)
96434 /* Round X to nearest integral value, rounding halfway cases away from
96435 zero. */
96436 -#define lround(Val) __TGMATH_UNARY_REAL_ONLY (Val, lround)
96437 -#define llround(Val) __TGMATH_UNARY_REAL_ONLY (Val, llround)
96438 +#define lround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long int, lround)
96439 +#define llround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long long int, llround)
96442 /* Return X with its signed changed to Y's. */
96443 diff -u -udbrN glibc-2.3.2/misc/Makefile glibc-2.3.2-200304020432/misc/Makefile
96444 --- glibc-2.3.2/misc/Makefile Tue Aug 27 06:52:37 2002
96445 +++ glibc-2.3.2-200304020432/misc/Makefile Mon Mar 3 20:32:52 2003
96446 @@ -1,4 +1,4 @@
96447 -# Copyright (C) 1991-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
96448 +# Copyright (C) 1991-2002, 2003 Free Software Foundation, Inc.
96449 # This file is part of the GNU C Library.
96451 # The GNU C Library is free software; you can redistribute it and/or
96452 @@ -52,7 +52,7 @@
96453 chflags fchflags \
96454 insremque getttyent getusershell getpass ttyslot \
96455 syslog syscall daemon \
96456 - mmap mmap64 munmap mprotect msync madvise mincore \
96457 + mmap mmap64 munmap mprotect msync madvise mincore remap_file_pages\
96458 mlock munlock mlockall munlockall \
96459 efgcvt efgcvt_r qefgcvt qefgcvt_r \
96460 hsearch hsearch_r tsearch lsearch \
96461 diff -u -udbrN glibc-2.3.2/misc/Versions glibc-2.3.2-200304020432/misc/Versions
96462 --- glibc-2.3.2/misc/Versions Wed Dec 18 23:49:52 2002
96463 +++ glibc-2.3.2-200304020432/misc/Versions Mon Mar 3 10:47:42 2003
96464 @@ -127,6 +127,9 @@
96465 # s*
96466 setxattr;
96468 + GLIBC_2.3.3 {
96469 + remap_file_pages;
96471 GLIBC_PRIVATE {
96472 # functions which have an additional interface since they are
96473 # cancelable.
96474 diff -u -udbrN glibc-2.3.2/misc/sys/mman.h glibc-2.3.2-200304020432/misc/sys/mman.h
96475 --- glibc-2.3.2/misc/sys/mman.h Sat Jul 7 21:21:06 2001
96476 +++ glibc-2.3.2-200304020432/misc/sys/mman.h Mon Mar 3 10:45:34 2003
96477 @@ -1,5 +1,5 @@
96478 /* Definitions for BSD-style memory management.
96479 - Copyright (C) 1994-1999, 2000 Free Software Foundation, Inc.
96480 + Copyright (C) 1994-1999, 2000, 2003 Free Software Foundation, Inc.
96481 This file is part of the GNU C Library.
96483 The GNU C Library is free software; you can redistribute it and/or
96484 @@ -124,7 +124,13 @@
96485 The status is returned in a vector of bytes. The least significant
96486 bit of each byte is 1 if the referenced page is in memory, otherwise
96487 it is zero. */
96488 -extern int mincore (void *__start, size_t __len, unsigned char *__vec);
96489 +extern int mincore (void *__start, size_t __len, unsigned char *__vec)
96490 + __THROW;
96492 +/* Remap arbitrary pages of a shared backing store within an existing
96493 + VMA. */
96494 +extern int remap_file_pages (void *__start, size_t __size, int __prot,
96495 + size_t __pgoff, int __flags) __THROW;
96496 #endif
96499 diff -u -udbrN glibc-2.3.2/nis/nis_table.c glibc-2.3.2-200304020432/nis/nis_table.c
96500 --- glibc-2.3.2/nis/nis_table.c Sat Jul 7 21:21:06 2001
96501 +++ glibc-2.3.2-200304020432/nis/nis_table.c Sun Mar 16 04:36:21 2003
96502 @@ -1,4 +1,4 @@
96503 -/* Copyright (c) 1997, 1998, 1999 Free Software Foundation, Inc.
96504 +/* Copyright (c) 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
96505 This file is part of the GNU C Library.
96506 Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
96508 @@ -30,7 +30,7 @@
96509 struct ib_request *ibreq = calloc (1, sizeof (ib_request));
96510 char buf[strlen (name) + 1];
96511 nis_attr *search_val = NULL;
96512 - int search_len = 0;
96513 + size_t search_len = 0;
96514 char *cptr;
96515 size_t size = 0;
96517 diff -u -udbrN glibc-2.3.2/nis/nss_nis/nis-alias.c glibc-2.3.2-200304020432/nis/nss_nis/nis-alias.c
96518 --- glibc-2.3.2/nis/nss_nis/nis-alias.c Sat Jan 18 11:21:02 2003
96519 +++ glibc-2.3.2-200304020432/nis/nss_nis/nis-alias.c Sun Mar 16 04:36:21 2003
96520 @@ -214,7 +214,7 @@
96521 char *p;
96522 size_t namlen = strlen (name);
96523 char name2[namlen + 1];
96524 - int i;
96525 + size_t i;
96527 if (name == NULL)
96529 diff -u -udbrN glibc-2.3.2/nis/nss_nis/nis-hosts.c glibc-2.3.2-200304020432/nis/nss_nis/nis-hosts.c
96530 --- glibc-2.3.2/nis/nss_nis/nis-hosts.c Sat Jan 18 11:40:11 2003
96531 +++ glibc-2.3.2-200304020432/nis/nss_nis/nis-hosts.c Sun Mar 16 04:36:21 2003
96532 @@ -261,7 +261,7 @@
96533 /* Convert name to lowercase. */
96534 size_t namlen = strlen (name);
96535 char name2[namlen + 1];
96536 - int i;
96537 + size_t i;
96539 for (i = 0; i < namlen; ++i)
96540 name2[i] = tolower (name[i]);
96541 diff -u -udbrN glibc-2.3.2/nis/nss_nis/nis-network.c glibc-2.3.2-200304020432/nis/nss_nis/nis-network.c
96542 --- glibc-2.3.2/nis/nss_nis/nis-network.c Sun Jan 19 20:06:27 2003
96543 +++ glibc-2.3.2-200304020432/nis/nss_nis/nis-network.c Sun Mar 16 04:36:21 2003
96544 @@ -181,7 +181,7 @@
96545 /* Convert name to lowercase. */
96546 size_t namlen = strlen (name);
96547 char name2[namlen + 1];
96548 - int i;
96549 + size_t i;
96551 for (i = 0; i < namlen; ++i)
96552 name2[i] = _tolower (name[i]);
96553 diff -u -udbrN glibc-2.3.2/nscd/cache.c glibc-2.3.2-200304020432/nscd/cache.c
96554 --- glibc-2.3.2/nscd/cache.c Sat Jul 7 21:21:07 2001
96555 +++ glibc-2.3.2-200304020432/nscd/cache.c Fri Mar 21 08:45:55 2003
96556 @@ -1,4 +1,4 @@
96557 -/* Copyright (c) 1998, 1999 Free Software Foundation, Inc.
96558 +/* Copyright (c) 1998, 1999, 2003 Free Software Foundation, Inc.
96559 This file is part of the GNU C Library.
96560 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
96562 @@ -17,7 +17,7 @@
96563 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
96564 02111-1307 USA. */
96566 -#include <atomicity.h>
96567 +#include <atomic.h>
96568 #include <errno.h>
96569 #include <error.h>
96570 #include <limits.h>
96571 @@ -39,7 +39,7 @@
96573 This function must be called with the read-lock held. */
96574 struct hashentry *
96575 -cache_search (int type, void *key, size_t len, struct database *table,
96576 +cache_search (request_type type, void *key, size_t len, struct database *table,
96577 uid_t owner)
96579 unsigned long int hash = __nis_hash (key, len) % table->module;
96580 @@ -101,8 +101,8 @@
96581 /* Put the new entry in the first position. */
96583 newp->next = table->array[hash];
96584 - while (! compare_and_swap ((volatile long int *) &table->array[hash],
96585 - (long int) newp->next, (long int) newp));
96586 + while (atomic_compare_and_exchange_bool_acq (&table->array[hash], newp,
96587 + newp->next));
96589 /* Update the statistics. */
96590 if (data == (void *) -1)
96591 diff -u -udbrN glibc-2.3.2/nscd/nscd.h glibc-2.3.2-200304020432/nscd/nscd.h
96592 --- glibc-2.3.2/nscd/nscd.h Sat Jul 7 21:21:07 2001
96593 +++ glibc-2.3.2-200304020432/nscd/nscd.h Sun Mar 16 02:03:43 2003
96594 @@ -1,4 +1,4 @@
96595 -/* Copyright (c) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
96596 +/* Copyright (c) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
96597 This file is part of the GNU C Library.
96598 Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
96600 @@ -118,7 +118,7 @@
96601 extern int receive_print_stats (void) __attribute__ ((__noreturn__));
96603 /* cache.c */
96604 -extern struct hashentry *cache_search (int type, void *key, size_t len,
96605 +extern struct hashentry *cache_search (request_type, void *key, size_t len,
96606 struct database *table, uid_t owner);
96607 extern void cache_add (int type, void *key, size_t len,
96608 const void *packet, size_t iovtotal, void *data,
96609 diff -u -udbrN glibc-2.3.2/nscd/nscd_getgr_r.c glibc-2.3.2-200304020432/nscd/nscd_getgr_r.c
96610 --- glibc-2.3.2/nscd/nscd_getgr_r.c Wed Jan 15 11:42:36 2003
96611 +++ glibc-2.3.2-200304020432/nscd/nscd_getgr_r.c Sun Mar 16 04:22:23 2003
96612 @@ -114,8 +114,8 @@
96613 vec[1].iov_base = (void *) key;
96614 vec[1].iov_len = keylen;
96616 - nbytes = (size_t) TEMP_FAILURE_RETRY (__writev (sock, vec, 2));
96617 - if (nbytes != sizeof (request_header) + keylen)
96618 + nbytes = TEMP_FAILURE_RETRY (__writev (sock, vec, 2));
96619 + if (nbytes != (ssize_t) (sizeof (request_header) + keylen))
96621 __close (sock);
96622 return -1;
96623 @@ -123,7 +123,7 @@
96625 nbytes = TEMP_FAILURE_RETRY (__read (sock, &gr_resp,
96626 sizeof (gr_response_header)));
96627 - if (nbytes != sizeof (gr_response_header))
96628 + if (nbytes != (ssize_t) sizeof (gr_response_header))
96630 __close (sock);
96631 return -1;
96632 @@ -143,7 +143,7 @@
96633 char *p = buffer;
96634 size_t total_len;
96635 uintptr_t align;
96636 - size_t cnt;
96637 + nscd_ssize_t cnt;
96639 /* Now allocate the buffer the array for the group members. We must
96640 align the pointer. */
96641 diff -u -udbrN glibc-2.3.2/nscd/nscd_getpw_r.c glibc-2.3.2-200304020432/nscd/nscd_getpw_r.c
96642 --- glibc-2.3.2/nscd/nscd_getpw_r.c Wed Jan 15 11:44:16 2003
96643 +++ glibc-2.3.2-200304020432/nscd/nscd_getpw_r.c Sun Mar 16 04:22:23 2003
96644 @@ -113,8 +113,8 @@
96645 vec[1].iov_base = (void *) key;
96646 vec[1].iov_len = keylen;
96648 - nbytes = (size_t) TEMP_FAILURE_RETRY (__writev (sock, vec, 2));
96649 - if (nbytes != sizeof (request_header) + keylen)
96650 + nbytes = TEMP_FAILURE_RETRY (__writev (sock, vec, 2));
96651 + if (nbytes != (ssize_t) (sizeof (request_header) + keylen))
96653 __close (sock);
96654 return -1;
96655 @@ -122,7 +122,7 @@
96657 nbytes = TEMP_FAILURE_RETRY (__read (sock, &pw_resp,
96658 sizeof (pw_response_header)));
96659 - if (nbytes != sizeof (pw_response_header))
96660 + if (nbytes != (ssize_t) sizeof (pw_response_header))
96662 __close (sock);
96663 return -1;
96664 @@ -173,7 +173,7 @@
96666 __close (sock);
96668 - return nbytes == total ? 0 : -1;
96669 + return nbytes == (ssize_t) total ? 0 : -1;
96671 else
96673 diff -u -udbrN glibc-2.3.2/nss/db-Makefile glibc-2.3.2-200304020432/nss/db-Makefile
96674 --- glibc-2.3.2/nss/db-Makefile Thu Jan 1 01:00:00 1970
96675 +++ glibc-2.3.2-200304020432/nss/db-Makefile Fri Jul 6 06:55:37 2001
96676 @@ -0,0 +1,139 @@
96677 +# Makefile to (re-)generate db versions of system database files.
96678 +# Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
96679 +# This file is part of the GNU C Library.
96680 +# Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
96683 +# The GNU C Library is free software; you can redistribute it and/or
96684 +# modify it under the terms of the GNU Lesser General Public
96685 +# License as published by the Free Software Foundation; either
96686 +# version 2.1 of the License, or (at your option) any later version.
96688 +# The GNU C Library is distributed in the hope that it will be useful,
96689 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
96690 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
96691 +# Lesser General Public License for more details.
96693 +# You should have received a copy of the GNU Lesser General Public
96694 +# License along with the GNU C Library; if not, write to the Free
96695 +# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
96696 +# 02111-1307 USA.
96698 +DATABASES = $(wildcard /etc/passwd /etc/group /etc/ethers /etc/protocols \
96699 + /etc/rpc /etc/services /etc/shadow /etc/netgroup)
96701 +VAR_DB = /var/db
96703 +AWK = awk
96704 +MAKEDB = makedb --quiet
96706 +all: $(patsubst %,$(VAR_DB)/%.db,$(notdir $(DATABASES)))
96709 +$(VAR_DB)/passwd.db: /etc/passwd
96710 + @echo -n "$(patsubst %.db,%,$(@F))... "
96711 + @$(AWK) 'BEGIN { FS=":"; OFS=":"; cnt=0 } \
96712 + /^[ \t]*$$/ { next } \
96713 + /^[ \t]*#/ { next } \
96714 + { printf "0%u ", cnt++; print } \
96715 + /^[^#]/ { printf ".%s ", $$1; print; \
96716 + printf "=%s ", $$3; print }' $^ | \
96717 + $(MAKEDB) -o $@ -
96718 + @echo "done."
96720 +$(VAR_DB)/group.db: /etc/group
96721 + @echo -n "$(patsubst %.db,%,$(@F))... "
96722 + @$(AWK) 'BEGIN { FS=":"; OFS=":"; cnt=0 } \
96723 + /^[ \t]*$$/ { next } \
96724 + /^[ \t]*#/ { next } \
96725 + { printf "0%u ", cnt++; print } \
96726 + /^[^#]/ { printf ".%s ", $$1; print; \
96727 + printf "=%s ", $$3; print }' $^ | \
96728 + $(MAKEDB) -o $@ -
96729 + @echo "done."
96731 +$(VAR_DB)/ethers.db: /etc/ethers
96732 + @echo -n "$(patsubst %.db,%,$(@F))... "
96733 + @$(AWK) 'BEGIN { cnt=0 } \
96734 + /^[ \t]*$$/ { next } \
96735 + /^[ \t]*#/ { next } \
96736 + { printf "0%u ", cnt++; print } \
96737 + /^[^#]/ { printf ".%s ", $$1; print; \
96738 + printf "=%s ", $$2; print }' $^ | \
96739 + $(MAKEDB) -o $@ -
96740 + @echo "done."
96742 +$(VAR_DB)/protocols.db: /etc/protocols
96743 + @echo -n "$(patsubst %.db,%,$(@F))... "
96744 + @$(AWK) 'BEGIN { cnt=0 } \
96745 + /^[ \t]*$$/ { next } \
96746 + /^[ \t]*#/ { next } \
96747 + { printf "0%u ", cnt++; print } \
96748 + /^[^#]/ { printf ".%s ", $$1; print; \
96749 + printf "=%s ", $$2; print; \
96750 + for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \
96751 + { printf ".%s ", $$i; print } }' $^ | \
96752 + $(MAKEDB) -o $@ -
96753 + @echo "done."
96755 +$(VAR_DB)/rpc.db: /etc/rpc
96756 + @echo -n "$(patsubst %.db,%,$(@F))... "
96757 + @$(AWK) 'BEGIN { cnt=0 } \
96758 + /^[ \t]*$$/ { next } \
96759 + /^[ \t]*#/ { next } \
96760 + { printf "0%u ", cnt++; print } \
96761 + /^[^#]/ { printf ".%s ", $$1; print; \
96762 + printf "=%s ", $$2; print; \
96763 + for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \
96764 + { printf ".%s ", $$i; print } }' $^ | \
96765 + $(MAKEDB) -o $@ -
96766 + @echo "done."
96768 +$(VAR_DB)/services.db: /etc/services
96769 + @echo -n "$(patsubst %.db,%,$(@F))... "
96770 + @$(AWK) 'BEGIN { FS="[ \t/]+"; cnt=0 } \
96771 + /^[ \t]*$$/ { next } \
96772 + /^[ \t]*#/ { next } \
96773 + { printf "0%u ", cnt++; print } \
96774 + /^[^#]/ { printf ".%s/%s ", $$1, $$3; print; \
96775 + printf ".%s/ ", $$1; print; \
96776 + printf "=%s/%s ", $$2, $$3; print; \
96777 + printf "=%s/ ", $$2; print; \
96778 + for (i = 4; i <= NF && !($$i ~ /^#/); ++i) \
96779 + { printf ".%s/%s ", $$i, $$3; print; \
96780 + printf ".%s/ ", $$i; print } }' $^ | \
96781 + $(MAKEDB) -o $@ -
96782 + @echo "done."
96784 +$(VAR_DB)/shadow.db: /etc/shadow
96785 + @echo -n "$(patsubst %.db,%,$(@F))... "
96786 + @$(AWK) 'BEGIN { FS=":"; OFS=":"; cnt=0 } \
96787 + /^[ \t]*$$/ { next } \
96788 + /^[ \t]*#/ { next } \
96789 + { printf "0%u ", cnt++; print } \
96790 + /^[^#]/ { printf ".%s ", $$1; print }' $^ | \
96791 + (umask 077 && $(MAKEDB) -o $@ -)
96792 + @echo "done."
96793 + @if chgrp shadow $@ 2>/dev/null; then \
96794 + chmod g+r $@; \
96795 + else \
96796 + chown 0 $@; chgrp 0 $@; chmod 600 $@; \
96797 + echo; \
96798 + echo "Warning: The shadow password database $@"; \
96799 + echo "has been set to be readable only by root. You may want"; \
96800 + echo "to make it readable by the \`shadow' group depending"; \
96801 + echo "on your configuration."; \
96802 + echo; \
96803 + fi
96805 +$(VAR_DB)/netgroup.db: /etc/netgroup
96806 + @echo -n "$(patsubst %.db,%,$(@F))... "
96807 + @$(AWK) 'BEGIN { cnt=0 } \
96808 + /^[ \t]*$$/ { next } \
96809 + /^[ \t]*#/ { next } \
96810 + { printf "0%u ", cnt++; print } \
96811 + /^[^#]/ { end=sub(/\\/, " "); \
96812 + gsub(/[ \t]+/, " "); \
96813 + if(end == 1) printf "%s", $$0; else print }' $^ | \
96814 + $(MAKEDB) -o $@ -
96815 + @echo "done."
96816 diff -u -udbrN glibc-2.3.2/nss/makedb.c glibc-2.3.2-200304020432/nss/makedb.c
96817 --- glibc-2.3.2/nss/makedb.c Thu Jan 1 01:00:00 1970
96818 +++ glibc-2.3.2-200304020432/nss/makedb.c Fri Jul 6 06:55:37 2001
96819 @@ -0,0 +1,389 @@
96820 +/* Create simple DB database from textual input.
96821 + Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
96822 + This file is part of the GNU C Library.
96823 + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
96825 + The GNU C Library is free software; you can redistribute it and/or
96826 + modify it under the terms of the GNU Lesser General Public
96827 + License as published by the Free Software Foundation; either
96828 + version 2.1 of the License, or (at your option) any later version.
96830 + The GNU C Library is distributed in the hope that it will be useful,
96831 + but WITHOUT ANY WARRANTY; without even the implied warranty of
96832 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
96833 + Lesser General Public License for more details.
96835 + You should have received a copy of the GNU Lesser General Public
96836 + License along with the GNU C Library; if not, write to the Free
96837 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
96838 + 02111-1307 USA. */
96840 +#include <argp.h>
96841 +#include <ctype.h>
96842 +#include <dlfcn.h>
96843 +#include <errno.h>
96844 +#include <error.h>
96845 +#include <fcntl.h>
96846 +#include <libintl.h>
96847 +#include <locale.h>
96848 +#include <stdio.h>
96849 +#include <stdint.h>
96850 +#include <stdlib.h>
96851 +#include <string.h>
96852 +#include <sys/stat.h>
96853 +#include "nss_db/dummy-db.h"
96855 +/* Get libc version number. */
96856 +#include "../version.h"
96858 +#define PACKAGE _libc_intl_domainname
96860 +/* If non-zero convert key to lower case. */
96861 +static int to_lowercase;
96863 +/* If non-zero print content of input file, one entry per line. */
96864 +static int do_undo;
96866 +/* If non-zero do not print informational messages. */
96867 +static int be_quiet;
96869 +/* Name of output file. */
96870 +static const char *output_name;
96872 +/* Name and version of program. */
96873 +static void print_version (FILE *stream, struct argp_state *state);
96874 +void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
96876 +/* Definitions of arguments for argp functions. */
96877 +static const struct argp_option options[] =
96879 + { "fold-case", 'f', NULL, 0, N_("Convert key to lower case") },
96880 + { "output", 'o', N_("NAME"), 0, N_("Write output to file NAME") },
96881 + { "quiet", 'q', NULL, 0,
96882 + N_("Do not print messages while building database") },
96883 + { "undo", 'u', NULL, 0,
96884 + N_("Print content of database file, one entry a line") },
96885 + { NULL, 0, NULL, 0, NULL }
96888 +/* Short description of program. */
96889 +static const char doc[] = N_("Create simple DB database from textual input.");
96891 +/* Strings for arguments in help texts. */
96892 +static const char args_doc[] = N_("\
96893 +INPUT-FILE OUTPUT-FILE\n-o OUTPUT-FILE INPUT-FILE\n-u INPUT-FILE");
96895 +/* Prototype for option handler. */
96896 +static error_t parse_opt (int key, char *arg, struct argp_state *state);
96898 +/* Function to print some extra text in the help message. */
96899 +static char *more_help (int key, const char *text, void *input);
96901 +/* Data structure to communicate with argp functions. */
96902 +static struct argp argp =
96904 + options, parse_opt, args_doc, doc, NULL, more_help
96908 +/* Prototypes for local functions. */
96909 +static int process_input (FILE *input, const char *inname, NSS_DB *output,
96910 + int to_lowercase, int be_quiet);
96911 +static int print_database (NSS_DB *db);
96914 +int
96915 +main (int argc, char *argv[])
96917 + const char *input_name;
96918 + FILE *input_file;
96919 + NSS_DB *db_file;
96920 + int status;
96921 + int remaining;
96922 + int mode = 0666;
96924 + /* Set locale via LC_ALL. */
96925 + setlocale (LC_ALL, "");
96927 + /* Set the text message domain. */
96928 + textdomain (_libc_intl_domainname);
96930 + /* Initialize local variables. */
96931 + input_name = NULL;
96933 + /* Parse and process arguments. */
96934 + argp_parse (&argp, argc, argv, 0, &remaining, NULL);
96936 + /* Determine file names. */
96937 + if (do_undo || output_name != NULL)
96939 + if (remaining + 1 != argc)
96941 + wrong_arguments:
96942 + error (0, 0, gettext ("wrong number of arguments"));
96943 + argp_help (&argp, stdout, ARGP_HELP_SEE,
96944 + program_invocation_short_name);
96945 + exit (1);
96947 + input_name = argv[remaining];
96949 + else
96951 + if (remaining + 2 != argc)
96952 + goto wrong_arguments;
96954 + input_name = argv[remaining++];
96955 + output_name = argv[remaining];
96958 + /* First load the shared object to initialize version dependend
96959 + variables. */
96960 + if (load_db () != NSS_STATUS_SUCCESS)
96961 + error (EXIT_FAILURE, 0, gettext ("No usable database library found."));
96963 + /* Special handling if we are asked to print the database. */
96964 + if (do_undo)
96966 + dbopen (input_name, db_rdonly, 0666, &db_file);
96967 + if (db_file == NULL)
96968 + error (EXIT_FAILURE, 0, gettext ("cannot open database file `%s': %s"),
96969 + input_name,
96970 + (errno == EINVAL ? gettext ("incorrectly formatted file")
96971 + : strerror (errno)));
96973 + status = print_database (db_file);
96975 + db_file->close (db_file->db, 0);
96977 + return status;
96980 + /* Open input file. */
96981 + if (strcmp (input_name, "-") == 0 || strcmp (input_name, "/dev/stdin") == 0)
96982 + input_file = stdin;
96983 + else
96985 + struct stat st;
96987 + input_file = fopen (input_name, "r");
96988 + if (input_file == NULL)
96989 + error (EXIT_FAILURE, errno, gettext ("cannot open input file `%s'"),
96990 + input_name);
96992 + /* Get the access rights from the source file. The output file should
96993 + have the same. */
96994 + if (fstat (fileno (input_file), &st) >= 0)
96995 + mode = st.st_mode & ACCESSPERMS;
96998 + /* Open output file. This must not be standard output so we don't
96999 + handle "-" and "/dev/stdout" special. */
97000 + dbopen (output_name, DB_CREATE | db_truncate, mode, &db_file);
97001 + if (db_file == NULL)
97002 + error (EXIT_FAILURE, errno, gettext ("cannot open output file `%s'"),
97003 + output_name);
97005 + /* Start the real work. */
97006 + status = process_input (input_file, input_name, db_file, to_lowercase,
97007 + be_quiet);
97009 + /* Close files. */
97010 + if (input_file != stdin)
97011 + fclose (input_file);
97012 + db_file->close (db_file->db, 0);
97014 + return status;
97018 +/* Handle program arguments. */
97019 +static error_t
97020 +parse_opt (int key, char *arg, struct argp_state *state)
97022 + switch (key)
97024 + case 'f':
97025 + to_lowercase = 1;
97026 + break;
97027 + case 'o':
97028 + output_name = arg;
97029 + break;
97030 + case 'q':
97031 + be_quiet = 1;
97032 + break;
97033 + case 'u':
97034 + do_undo = 1;
97035 + break;
97036 + default:
97037 + return ARGP_ERR_UNKNOWN;
97039 + return 0;
97043 +static char *
97044 +more_help (int key, const char *text, void *input)
97046 + switch (key)
97048 + case ARGP_KEY_HELP_EXTRA:
97049 + /* We print some extra information. */
97050 + return strdup (gettext ("\
97051 +Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"));
97052 + default:
97053 + break;
97055 + return (char *) text;
97058 +/* Print the version information. */
97059 +static void
97060 +print_version (FILE *stream, struct argp_state *state)
97062 + fprintf (stream, "makedb (GNU %s) %s\n", PACKAGE, VERSION);
97063 + fprintf (stream, gettext ("\
97064 +Copyright (C) %s Free Software Foundation, Inc.\n\
97065 +This is free software; see the source for copying conditions. There is NO\n\
97066 +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
97067 +"), "2000");
97068 + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
97072 +static int
97073 +process_input (input, inname, output, to_lowercase, be_quiet)
97074 + FILE *input;
97075 + const char *inname;
97076 + NSS_DB *output;
97077 + int to_lowercase;
97078 + int be_quiet;
97080 + char *line;
97081 + size_t linelen;
97082 + int status;
97083 + size_t linenr;
97085 + line = NULL;
97086 + linelen = 0;
97087 + status = EXIT_SUCCESS;
97088 + linenr = 0;
97090 + while (!feof (input))
97092 + DBT key;
97093 + DBT val;
97094 + char *cp;
97095 + int n;
97097 + n = getline (&line, &linelen, input);
97098 + if (n < 0)
97099 + /* This means end of file or some bug. */
97100 + break;
97101 + if (n == 0)
97102 + /* Short read. Probably interrupted system call. */
97103 + continue;
97105 + ++linenr;
97107 + if (line[n - 1] == '\n')
97108 + /* Remove trailing newline. */
97109 + line[--n] = '\0';
97111 + cp = line;
97112 + while (isspace (*cp))
97113 + ++cp;
97115 + if (*cp == '#')
97116 + /* First non-space character in line '#': it's a comment. */
97117 + continue;
97119 + key.data = cp;
97120 + while (*cp != '\0' && !isspace (*cp))
97122 + if (to_lowercase)
97123 + *cp = tolower (*cp);
97124 + ++cp;
97127 + if (key.data == cp)
97128 + /* It's an empty line. */
97129 + continue;
97131 + key.size = cp - (char *) key.data;
97132 + key.flags = 0;
97134 + while (isspace (*cp))
97135 + ++cp;
97137 + val.data = cp;
97138 + val.size = (&line[n] - cp) + 1;
97139 + val.flags = 0;
97141 + /* Store the value. */
97142 + status = output->put (output->db, NULL, &key, &val, db_nooverwrite);
97143 + if (status != 0)
97145 + if (status == db_keyexist)
97147 + if (!be_quiet)
97148 + error_at_line (0, 0, inname, linenr,
97149 + gettext ("duplicate key"));
97150 + /* This is no real error. Just give a warning. */
97151 + status = 0;
97152 + continue;
97154 + else
97155 + error (0, status, gettext ("while writing database file"));
97157 + status = EXIT_FAILURE;
97159 + clearerr (input);
97160 + break;
97164 + if (ferror (input))
97166 + error (0, 0, gettext ("problems while reading `%s'"), inname);
97167 + status = EXIT_FAILURE;
97170 + return status;
97174 +static int
97175 +print_database (db)
97176 + NSS_DB *db;
97178 + DBT key;
97179 + DBT val;
97180 + NSS_DBC *cursor;
97181 + int status;
97183 + status = db->cursor (db->db, NULL, &cursor);
97184 + if (status != 0)
97186 + error (0, status, gettext ("while reading database"));
97187 + return EXIT_FAILURE;
97190 + key.flags = 0;
97191 + val.flags = 0;
97192 + status = cursor->c_get (cursor->cursor, &key, &val, db_first);
97193 + while (status == 0)
97195 + printf ("%.*s %s\n", (int) key.size, (char *) key.data,
97196 + (char *) val.data);
97198 + status = cursor->c_get (cursor->cursor, &key, &val, db_next);
97201 + if (status != db_notfound)
97203 + error (0, status, gettext ("while reading database"));
97204 + return EXIT_FAILURE;
97207 + return EXIT_SUCCESS;
97209 diff -u -udbrN glibc-2.3.2/nss/nss_db/db-XXX.c glibc-2.3.2-200304020432/nss/nss_db/db-XXX.c
97210 --- glibc-2.3.2/nss/nss_db/db-XXX.c Thu Jan 1 01:00:00 1970
97211 +++ glibc-2.3.2-200304020432/nss/nss_db/db-XXX.c Fri Jul 6 06:55:38 2001
97212 @@ -0,0 +1,261 @@
97213 +/* Common code for DB-based databases in nss_db module.
97214 + Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
97215 + This file is part of the GNU C Library.
97217 + The GNU C Library is free software; you can redistribute it and/or
97218 + modify it under the terms of the GNU Lesser General Public
97219 + License as published by the Free Software Foundation; either
97220 + version 2.1 of the License, or (at your option) any later version.
97222 + The GNU C Library is distributed in the hope that it will be useful,
97223 + but WITHOUT ANY WARRANTY; without even the implied warranty of
97224 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
97225 + Lesser General Public License for more details.
97227 + You should have received a copy of the GNU Lesser General Public
97228 + License along with the GNU C Library; if not, write to the Free
97229 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
97230 + 02111-1307 USA. */
97232 +#include <dlfcn.h>
97233 +#include <fcntl.h>
97234 +#include <bits/libc-lock.h>
97235 +#include "nsswitch.h"
97236 +#include "nss_db.h"
97238 +/* These symbols are defined by the including source file:
97240 + ENTNAME -- database name of the structure and functions (hostent, pwent).
97241 + STRUCTURE -- struct name, define only if not ENTNAME (passwd, group).
97242 + DATABASE -- database file name, ("hosts", "passwd")
97244 + NEED_H_ERRNO - defined iff an arg `int *herrnop' is used.
97247 +#define ENTNAME_r CONCAT(ENTNAME,_r)
97249 +#include <paths.h>
97250 +#define DBFILE _PATH_VARDB DATABASE ".db"
97252 +#ifdef NEED_H_ERRNO
97253 +#define H_ERRNO_PROTO , int *herrnop
97254 +#define H_ERRNO_ARG , herrnop
97255 +#define H_ERRNO_SET(val) (*herrnop = (val))
97256 +#else
97257 +#define H_ERRNO_PROTO
97258 +#define H_ERRNO_ARG
97259 +#define H_ERRNO_SET(val) ((void) 0)
97260 +#endif
97262 +/* Locks the static variables in this file. */
97263 +__libc_lock_define_initialized (static, lock)
97265 +/* Maintenance of the shared handle open on the database. */
97267 +static NSS_DB *db;
97268 +static int keep_db;
97269 +static int entidx;
97272 +/* Open the database. */
97273 +enum nss_status
97274 +CONCAT(_nss_db_set,ENTNAME) (int stayopen)
97276 + enum nss_status status;
97278 + __libc_lock_lock (lock);
97280 + status = internal_setent (DBFILE, &db);
97282 + /* Remember STAYOPEN flag. */
97283 + if (db != NULL)
97284 + keep_db |= stayopen;
97285 + /* Reset the sequential index. */
97286 + entidx = 0;
97288 + __libc_lock_unlock (lock);
97290 + return status;
97294 +/* Close it again. */
97295 +enum nss_status
97296 +CONCAT(_nss_db_end,ENTNAME) (void)
97298 + __libc_lock_lock (lock);
97300 + internal_endent (&db);
97302 + /* Reset STAYOPEN flag. */
97303 + keep_db = 0;
97305 + __libc_lock_unlock (lock);
97307 + return NSS_STATUS_SUCCESS;
97310 +/* Do a database lookup for KEY. */
97311 +static enum nss_status
97312 +lookup (DBT *key, struct STRUCTURE *result,
97313 + void *buffer, size_t buflen, int *errnop H_ERRNO_PROTO EXTRA_ARGS_DECL)
97315 + char *p;
97316 + enum nss_status status;
97317 + int err;
97318 + DBT value;
97320 + /* Open the database. */
97321 + if (db == NULL)
97323 + status = internal_setent (DBFILE, &db);
97324 + if (status != NSS_STATUS_SUCCESS)
97326 + *errnop = errno;
97327 + H_ERRNO_SET (NETDB_INTERNAL);
97328 + return status;
97332 + /* Succeed iff it matches a value that parses correctly. */
97333 + value.flags = 0;
97334 + err = DL_CALL_FCT (db->get, (db->db, NULL, key, &value, 0));
97335 + if (err != 0)
97337 + if (err == db_notfound)
97339 + H_ERRNO_SET (HOST_NOT_FOUND);
97340 + status = NSS_STATUS_NOTFOUND;
97342 + else
97344 + *errnop = err;
97345 + H_ERRNO_SET (NETDB_INTERNAL);
97346 + status = NSS_STATUS_UNAVAIL;
97349 + else if (buflen < value.size)
97351 + /* No room to copy the data to. */
97352 + *errnop = ERANGE;
97353 + H_ERRNO_SET (NETDB_INTERNAL);
97354 + status = NSS_STATUS_TRYAGAIN;
97356 + else
97358 + /* Copy the result to a safe place. */
97359 + p = (char *) memcpy (buffer, value.data, value.size);
97361 + /* Skip leading blanks. */
97362 + while (isspace (*p))
97363 + ++p;
97365 + err = parse_line (p, result, buffer, buflen, errnop EXTRA_ARGS);
97367 + if (err == 0)
97369 + /* If the key begins with '0' we are trying to get the next
97370 + entry. We want to ignore unparsable lines in this case. */
97371 + if (((char *) key->data)[0] == '0')
97373 + /* Super magical return value. We need to tell our caller
97374 + that it should continue looping. This value cannot
97375 + happen in other cases. */
97376 + status = NSS_STATUS_RETURN;
97378 + else
97380 + H_ERRNO_SET (HOST_NOT_FOUND);
97381 + status = NSS_STATUS_NOTFOUND;
97384 + else if (err < 0)
97386 + H_ERRNO_SET (NETDB_INTERNAL);
97387 + status = NSS_STATUS_TRYAGAIN;
97389 + else
97390 + status = NSS_STATUS_SUCCESS;
97393 + if (! keep_db)
97394 + internal_endent (&db);
97396 + return status;
97400 +/* Macro for defining lookup functions for this DB-based database.
97402 + NAME is the name of the lookup; e.g. `pwnam'.
97404 + KEYPATTERN gives `printf' args to construct a key string;
97405 + e.g. `(".%s", name)'.
97407 + KEYSIZE gives the allocation size of a buffer to construct it in;
97408 + e.g. `1 + strlen (name)'.
97410 + PROTO describes the arguments for the lookup key;
97411 + e.g. `const char *name'.
97413 + BREAK_IF_MATCH is ignored, but used by ../nss_files/files-XXX.c. */
97415 +#define DB_LOOKUP(name, keysize, keypattern, break_if_match, proto...) \
97416 +enum nss_status \
97417 +_nss_db_get##name##_r (proto, \
97418 + struct STRUCTURE *result, \
97419 + char *buffer, size_t buflen, int *errnop H_ERRNO_PROTO)\
97420 +{ \
97421 + DBT key; \
97422 + enum nss_status status; \
97423 + const size_t size = (keysize) + 1; \
97424 + key.data = __alloca (size); \
97425 + key.size = KEYPRINTF keypattern; \
97426 + key.flags = 0; \
97427 + __libc_lock_lock (lock); \
97428 + status = lookup (&key, result, buffer, buflen, errnop H_ERRNO_ARG \
97429 + EXTRA_ARGS_VALUE); \
97430 + __libc_lock_unlock (lock); \
97431 + return status; \
97434 +#define KEYPRINTF(pattern, args...) snprintf (key.data, size, pattern ,##args)
97439 +/* Return the next entry from the database file, doing locking. */
97440 +enum nss_status
97441 +CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer,
97442 + size_t buflen, int *errnop H_ERRNO_PROTO)
97444 + /* Return next entry in host file. */
97445 + enum nss_status status;
97446 + char buf[20];
97447 + DBT key;
97449 + __libc_lock_lock (lock);
97451 + /* Loop until we find a valid entry or hit EOF. See above for the
97452 + special meaning of the status value. */
97453 + do
97455 + key.size = snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
97456 + key.flags = 0;
97457 + status = lookup (&key, result, buffer, buflen, errnop H_ERRNO_ARG
97458 + EXTRA_ARGS_VALUE);
97459 + if (status == NSS_STATUS_TRYAGAIN
97460 +#ifdef NEED_H_ERRNO
97461 + && *herrnop == NETDB_INTERNAL
97462 +#endif
97463 + && *errnop == ERANGE)
97464 + /* Give the user a chance to get the same entry with a larger
97465 + buffer. */
97466 + --entidx;
97468 + while (status == NSS_STATUS_RETURN);
97470 + __libc_lock_unlock (lock);
97472 + return status;
97474 diff -u -udbrN glibc-2.3.2/nss/nss_db/db-alias.c glibc-2.3.2-200304020432/nss/nss_db/db-alias.c
97475 --- glibc-2.3.2/nss/nss_db/db-alias.c Thu Jan 1 01:00:00 1970
97476 +++ glibc-2.3.2-200304020432/nss/nss_db/db-alias.c Fri Jul 6 06:55:38 2001
97477 @@ -0,0 +1,215 @@
97478 +/* Mail alias file parser in nss_db module.
97479 + Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
97480 + This file is part of the GNU C Library.
97481 + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
97483 + The GNU C Library is free software; you can redistribute it and/or
97484 + modify it under the terms of the GNU Lesser General Public
97485 + License as published by the Free Software Foundation; either
97486 + version 2.1 of the License, or (at your option) any later version.
97488 + The GNU C Library is distributed in the hope that it will be useful,
97489 + but WITHOUT ANY WARRANTY; without even the implied warranty of
97490 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
97491 + Lesser General Public License for more details.
97493 + You should have received a copy of the GNU Lesser General Public
97494 + License along with the GNU C Library; if not, write to the Free
97495 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
97496 + 02111-1307 USA. */
97498 +#include <aliases.h>
97499 +#include <alloca.h>
97500 +#include <ctype.h>
97501 +#include <dlfcn.h>
97502 +#include <errno.h>
97503 +#include <bits/libc-lock.h>
97504 +#include <paths.h>
97505 +#include <string.h>
97507 +#include "nsswitch.h"
97508 +#include "nss_db.h"
97510 +/* Locks the static variables in this file. */
97511 +__libc_lock_define_initialized (static, lock)
97513 +/* Maintenance of the shared handle open on the database. */
97515 +static NSS_DB *db;
97516 +static int keep_db;
97517 +static unsigned int entidx; /* Index for `getaliasent_r'. */
97520 +/* Open database. */
97521 +enum nss_status
97522 +_nss_db_setaliasent (int stayopen)
97524 + enum nss_status status;
97526 + __libc_lock_lock (lock);
97528 + status = internal_setent (_PATH_VARDB "aliases.db", &db);
97530 + /* Remember STAYOPEN flag. */
97531 + if (db != NULL)
97532 + keep_db |= stayopen;
97534 + /* Reset the sequential index. */
97535 + entidx = 0;
97537 + __libc_lock_unlock (lock);
97539 + return status;
97543 +/* Close it again. */
97544 +enum nss_status
97545 +_nss_db_endaliasent (void)
97547 + __libc_lock_lock (lock);
97549 + internal_endent (&db);
97551 + /* Reset STAYOPEN flag. */
97552 + keep_db = 0;
97554 + __libc_lock_unlock (lock);
97556 + return NSS_STATUS_SUCCESS;
97559 +/* We provide the parse function here. The parser in libnss_files
97560 + cannot be used. The generation of the db file already resolved all
97561 + :include: statements so we simply have to parse the list and store
97562 + the result. */
97563 +static enum nss_status
97564 +lookup (DBT *key, struct aliasent *result, char *buffer,
97565 + size_t buflen, int *errnop)
97567 + enum nss_status status;
97568 + DBT value;
97570 + /* Open the database. */
97571 + if (db == NULL)
97573 + status = internal_setent (_PATH_VARDB "aliases.db", &db);
97574 + if (status != NSS_STATUS_SUCCESS)
97576 + *errnop = errno;
97577 + return status;
97581 + value.flags = 0;
97582 + if (DL_CALL_FCT (db->get, (db->db, NULL, key, &value, 0)) == 0)
97584 + const char *src = value.data;
97585 + char *cp;
97586 + size_t cnt;
97588 + result->alias_members_len = 0;
97590 + /* We now have to fill the BUFFER with all the information. */
97591 + if (buflen < key->size + 1)
97593 + no_more_room:
97594 + *errnop = ERANGE;
97595 + return NSS_STATUS_TRYAGAIN;
97598 + buffer = stpncpy (buffer, key->data, key->size) + 1;
97599 + buflen -= key->size + 1;
97601 + while (*src != '\0')
97603 + const char *end, *upto;
97604 + while (isspace (*src))
97605 + ++src;
97607 + end = strchr (src, ',');
97608 + if (end == NULL)
97609 + end = strchr (src, '\0');
97610 + for (upto = end; upto > src && isspace (upto[-1]); --upto);
97612 + if (upto != src)
97614 + if ((upto - src) + __alignof__ (char *) > buflen)
97615 + goto no_more_room;
97616 + buffer = stpncpy (buffer, src, upto - src) + 1;
97617 + buflen -= (upto - src) + __alignof (char *);
97618 + ++result->alias_members_len;
97620 + src = end + (*end != '\0');
97623 + /* Now prepare the return. Provide string pointers for the
97624 + currently selected aliases. */
97626 + /* Adjust the pointer so it is aligned for storing pointers. */
97627 + buffer += __alignof__ (char *) - 1;
97628 + buffer -= ((buffer - (char *) 0) % __alignof__ (char *));
97629 + result->alias_members = (char **) buffer;
97631 + /* Compute addresses of alias entry strings. */
97632 + cp = result->alias_name;
97633 + for (cnt = 0; cnt < result->alias_members_len; ++cnt)
97635 + cp = strchr (cp, '\0') + 1;
97636 + result->alias_members[cnt] = cp;
97639 + status = (result->alias_members_len == 0
97640 + ? NSS_STATUS_RETURN : NSS_STATUS_SUCCESS);
97642 + else
97643 + status = NSS_STATUS_NOTFOUND;
97645 + if (! keep_db)
97646 + internal_endent (&db);
97648 + return status;
97651 +enum nss_status
97652 +_nss_db_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen,
97653 + int *errnop)
97655 + /* Return next entry in alias file. */
97656 + enum nss_status status;
97657 + char buf[20];
97658 + DBT key;
97660 + __libc_lock_lock (lock);
97661 + key.size = snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
97662 + key.flags = 0;
97663 + status = lookup (&key, result, buffer, buflen, errnop);
97664 + if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
97665 + /* Give the user a chance to get the same entry with a larger buffer. */
97666 + --entidx;
97667 + __libc_lock_unlock (lock);
97669 + return status;
97673 +enum nss_status
97674 +_nss_db_getaliasbyname_r (const char *name, struct aliasent *result,
97675 + char *buffer, size_t buflen, int *errnop)
97677 + DBT key;
97678 + enum nss_status status;
97680 + key.size = 1 + strlen (name);
97682 + key.data = __alloca (key.size);
97683 + ((char *) key.data)[0] = '.';
97684 + memcpy (&((char *) key.data)[1], name, key.size - 1);
97685 + key.flags = 0;
97687 + __libc_lock_lock (lock);
97688 + status = lookup (&key, result, buffer, buflen, errnop);
97689 + __libc_lock_unlock (lock);
97691 + return status;
97693 diff -u -udbrN glibc-2.3.2/nss/nss_db/db-netgrp.c glibc-2.3.2-200304020432/nss/nss_db/db-netgrp.c
97694 --- glibc-2.3.2/nss/nss_db/db-netgrp.c Thu Jan 1 01:00:00 1970
97695 +++ glibc-2.3.2-200304020432/nss/nss_db/db-netgrp.c Fri Jul 6 06:55:38 2001
97696 @@ -0,0 +1,103 @@
97697 +/* Netgroup file parser in nss_db modules.
97698 + Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
97699 + This file is part of the GNU C Library.
97700 + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
97702 + The GNU C Library is free software; you can redistribute it and/or
97703 + modify it under the terms of the GNU Lesser General Public
97704 + License as published by the Free Software Foundation; either
97705 + version 2.1 of the License, or (at your option) any later version.
97707 + The GNU C Library is distributed in the hope that it will be useful,
97708 + but WITHOUT ANY WARRANTY; without even the implied warranty of
97709 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
97710 + Lesser General Public License for more details.
97712 + You should have received a copy of the GNU Lesser General Public
97713 + License along with the GNU C Library; if not, write to the Free
97714 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
97715 + 02111-1307 USA. */
97717 +#include <dlfcn.h>
97718 +#include <errno.h>
97719 +#include <fcntl.h>
97720 +#include <netgroup.h>
97721 +#include <string.h>
97722 +#include <bits/libc-lock.h>
97723 +#include <paths.h>
97725 +#include "nsswitch.h"
97726 +#include "nss_db.h"
97729 +#define DBFILE _PATH_VARDB "netgroup.db"
97732 +/* Locks the static variables in this file. */
97733 +__libc_lock_define_initialized (static, lock)
97735 +/* Maintenance of the shared handle open on the database. */
97736 +static NSS_DB *db;
97737 +static char *entry;
97738 +static char *cursor;
97740 +enum nss_status
97741 +_nss_db_setnetgrent (const char *group)
97743 + enum nss_status status;
97745 + __libc_lock_lock (lock);
97747 + status = internal_setent (DBFILE, &db);
97749 + if (status == NSS_STATUS_SUCCESS)
97751 + DBT key = { data: (void *) group, size: strlen (group), flags: 0 };
97752 + DBT value;
97754 + value.flags = 0;
97755 + if (DL_CALL_FCT (db->get, (db->db, NULL, &key, &value, 0)) != 0)
97756 + status = NSS_STATUS_NOTFOUND;
97757 + else
97758 + cursor = entry = value.data;
97761 + __libc_lock_unlock (lock);
97763 + return status;
97768 +enum nss_status
97769 +_nss_db_endnetgrent (void)
97771 + __libc_lock_lock (lock);
97773 + internal_endent (&db);
97775 + __libc_lock_unlock (lock);
97777 + return NSS_STATUS_SUCCESS;
97781 +extern enum nss_status _nss_netgroup_parseline (char **cursor,
97782 + struct __netgrent *result,
97783 + char *buffer, size_t buflen,
97784 + int *errnop);
97786 +enum nss_status
97787 +_nss_db_getnetgrent_r (struct __netgrent *result, char *buffer, size_t buflen,
97788 + int *errnop)
97790 + int status;
97792 + __libc_lock_lock (lock);
97794 + status = _nss_netgroup_parseline (&cursor, result, buffer, buflen, errnop);
97796 + __libc_lock_unlock (lock);
97798 + return status;
97800 diff -u -udbrN glibc-2.3.2/nss/nss_db/db-open.c glibc-2.3.2-200304020432/nss/nss_db/db-open.c
97801 --- glibc-2.3.2/nss/nss_db/db-open.c Thu Jan 1 01:00:00 1970
97802 +++ glibc-2.3.2-200304020432/nss/nss_db/db-open.c Fri Jul 6 06:55:38 2001
97803 @@ -0,0 +1,389 @@
97804 +/* Common database routines for nss_db.
97805 + Copyright (C) 2000 Free Software Foundation, Inc.
97806 + This file is part of the GNU C Library.
97808 + The GNU C Library is free software; you can redistribute it and/or
97809 + modify it under the terms of the GNU Lesser General Public
97810 + License as published by the Free Software Foundation; either
97811 + version 2.1 of the License, or (at your option) any later version.
97813 + The GNU C Library is distributed in the hope that it will be useful,
97814 + but WITHOUT ANY WARRANTY; without even the implied warranty of
97815 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
97816 + Lesser General Public License for more details.
97818 + You should have received a copy of the GNU Lesser General Public
97819 + License along with the GNU C Library; if not, write to the Free
97820 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
97821 + 02111-1307 USA. */
97823 +#include <errno.h>
97824 +#include <fcntl.h>
97825 +#include <dlfcn.h>
97826 +#include <stdlib.h>
97827 +#include <string.h>
97828 +#include <bits/libc-lock.h>
97830 +#include "dummy-db.h"
97831 +#include "nss_db.h"
97833 +/* This file contains the functions used to open and close the databases
97834 + read by the rest of libnss_db. Not all of them are thread safe;
97835 + make sure the caller does the appropriate locking.
97837 + We dynamically load the database library, so that it does not have
97838 + to be present when glibc is compiled. Once loaded, the database
97839 + library is never never unloaded again until the libnss_db module is
97840 + unloaded (from the free_mem routine in nsswitch.c) -- we catch the
97841 + unload by providing a shlib destructor. (XXX Does that actually
97842 + work?) */
97844 +/* Handle for the shared Berkeley DB library. If non-null, the
97845 + database library is completely loaded and ready to be used by
97846 + multithreaded code. */
97847 +static void *libdb_handle;
97849 +/* The version of the Berkeley DB library we are using. */
97850 +enum {
97851 + nodb,
97852 + db24,
97853 + db27,
97854 + db30
97855 +} libdb_version;
97857 +/* Pointer to the db_open function. For use with DB 2.x. */
97858 +static int (*libdb_db_open) (const char *, int,
97859 + uint32_t, int, void *, void *, void **);
97861 +/* Pointer to the db_create function. For use with DB 3.x. */
97862 +static int (*libdb_db_create) (void *, void *, uint32_t);
97864 +/* Constants which vary from version to version are actually variables
97865 + here. */
97866 +int db_first;
97867 +int db_next;
97868 +int db_nooverwrite;
97869 +int db_truncate;
97870 +int db_rdonly;
97871 +/* Variables which keep track of the error values. */
97872 +int db_keyexist;
97873 +int db_notfound;
97875 +/* Locks the static variables in this file. */
97876 +__libc_lock_define_initialized (static, lock)
97878 +/* Dynamically load the database library. Return zero if successful,
97879 + non-zero if no suitable version of the library could be loaded.
97880 + Must be called with the above lock held if it might run in a
97881 + multithreaded context.
97883 + We try currently:
97884 + - libdb.so.3: the name used by glibc 2.1
97885 + - libdb-3.0.so: the name used by db-3.0.x
97886 + and maybe others in the future. */
97888 +enum nss_status
97889 +load_db (void)
97891 + static const char *libnames[] = { "libdb.so.3", "libdb-3.0.so" };
97892 + int x;
97894 + for (x = 0; x < sizeof (libnames) / sizeof (libnames[0]); ++x)
97896 + libdb_handle = dlopen (libnames[x], RTLD_LAZY);
97897 + if (libdb_handle == NULL)
97898 + continue;
97900 + /* DB 3.0 has db_create instead of db_open. */
97901 + libdb_db_create = dlsym (libdb_handle, "db_create");
97903 + if (libdb_db_create == NULL)
97904 + /* DB 2.x uses db_open. */
97905 + libdb_db_open = dlsym (libdb_handle, "db_open");
97907 + if (libdb_db_open != NULL || libdb_db_create != NULL)
97909 + /* Alright, we got a library. Now find out which version it is. */
97910 + const char *(*db_version) (int *, int *, int *);
97912 + db_version = dlsym (libdb_handle, "db_version");
97913 + if (db_version != NULL)
97915 + /* Call the function and get the information. */
97916 + int major, minor, subminor;
97918 + DL_CALL_FCT (db_version, (&major, &minor, &subminor));
97919 + switch (major)
97921 + case 2:
97922 + /* Sanity check: Do we have db_open? */
97923 + if (libdb_db_open != NULL)
97925 + if (minor < 6 || (minor == 6 && subminor < 4))
97927 + libdb_version = db24;
97928 + db_first = DB24_FIRST;
97929 + db_next = DB24_NEXT;
97930 + db_nooverwrite = DB24_NOOVERWRITE;
97931 + db_truncate = DB24_TRUNCATE;
97933 + else
97935 + libdb_version = db27;
97936 + db_first = DB27_FIRST;
97937 + db_next = DB27_NEXT;
97938 + db_nooverwrite = DB27_NOOVERWRITE;
97939 + db_truncate = DB27_TRUNCATE;
97941 + db_keyexist = DB2x_KEYEXIST;
97942 + db_notfound = DB2x_NOTFOUND;
97943 + db_rdonly = DB2x_RDONLY;
97945 + break;
97947 + case 3:
97948 + /* Sanity check: Do we have db_create? */
97949 + if (libdb_db_create != NULL)
97951 + libdb_version = db30;
97952 + db_first = DB30_FIRST;
97953 + db_next = DB30_NEXT;
97954 + db_keyexist = DB30_KEYEXIST;
97955 + db_notfound = DB30_NOTFOUND;
97956 + db_rdonly = DB30_RDONLY;
97958 + break;
97960 + default:
97961 + break;
97965 + if (libdb_version != nodb)
97966 + return NSS_STATUS_SUCCESS;
97968 + /* Clear variables. */
97969 + libdb_db_open = NULL;
97970 + libdb_db_create = NULL;
97973 + dlclose (libdb_handle);
97976 + (void) dlerror ();
97977 + return NSS_STATUS_UNAVAIL;
97980 +/* Set the `FD_CLOEXEC' flag of FD. Return 0 on success, or -1 on
97981 + error with `errno' set. */
97982 +static int
97983 +set_cloexec_flag (int fd)
97985 + int oldflags = fcntl (fd, F_GETFD, 0);
97987 + if (oldflags < 0)
97988 + return oldflags;
97990 + oldflags |= FD_CLOEXEC;
97992 + return fcntl (fd, F_SETFD, oldflags);
97995 +/* Make sure we don't use the library anymore once we are shutting down. */
97996 +static void __attribute__ ((destructor))
97997 +unload_db (void)
97999 + if (libdb_handle != NULL)
98001 + libdb_db_open = NULL;
98002 + libdb_db_create = NULL;
98003 + libdb_version = nodb;
98004 + dlclose (libdb_handle);
98008 +/* Open the database stored in FILE. If succesful, store the database
98009 + handle in *DBP and return NSS_STATUS_SUCCESS. On failure, return
98010 + the appropriate lookup status. */
98011 +enum nss_status
98012 +internal_setent (const char *file, NSS_DB **dbp)
98014 + enum nss_status status = NSS_STATUS_SUCCESS;
98016 + if (*dbp == NULL)
98018 + if (libdb_db_open == NULL && libdb_db_create == NULL)
98020 + __libc_lock_lock (lock);
98022 + if (libdb_db_open == NULL && libdb_db_create == NULL)
98023 + status = load_db ();
98025 + __libc_lock_unlock (lock);
98028 + if (status == NSS_STATUS_SUCCESS)
98029 + status = dbopen (file, db_rdonly, 0, dbp);
98032 + return status;
98036 +/* Close the database *DBP. */
98037 +void
98038 +internal_endent (NSS_DB **dbp)
98040 + NSS_DB *db = *dbp;
98042 + if (db != NULL)
98044 + DL_CALL_FCT (db->close, (db->db, 0));
98045 + *dbp = NULL;
98049 +/* Allocate a cursor for database DB and transaction TXN. On success,
98050 + store the cursor in *DBCP and return zero. Otherwise return an
98051 + error value. */
98052 +int
98053 +db_cursor (void *db, void *txn, NSS_DBC **dbcp)
98055 + NSS_DBC *dbc;
98056 + int ret;
98058 + dbc = (NSS_DBC *) malloc (sizeof (NSS_DBC));
98059 + if (dbc == NULL)
98060 + return ENOMEM;
98062 + switch (libdb_version)
98064 + case db24:
98065 + ret = ((struct db24 *) db)->cursor (db, txn, &dbc->cursor);
98067 + if (ret == 0)
98068 + dbc->c_get = ((struct dbc24 *) dbc->cursor)->c_get;
98069 + break;
98071 + case db27:
98072 + ret = ((struct db27 *) db)->cursor (db, txn, &dbc->cursor, 0);
98074 + if (ret == 0)
98075 + dbc->c_get = ((struct dbc27 *) dbc->cursor)->c_get;
98076 + break;
98078 + case db30:
98079 + ret = ((struct db30 *) db)->cursor (db, txn, &dbc->cursor, 0);
98081 + if (ret == 0)
98082 + dbc->c_get = ((struct dbc30 *) dbc->cursor)->c_get;
98083 + break;
98085 + default:
98086 + abort ();
98089 + if (ret != 0)
98091 + free (dbc);
98092 + return ret;
98095 + *dbcp = dbc;
98097 + return 0;
98101 +/* Open the database in FNAME, for access specified by FLAGS. If
98102 + opening the database causes the file FNAME to be created, it is
98103 + created with MODE. If succesful, store the database handle in *DBP
98104 + and return NSS_STATUS_SUCCESS. On failure, return the appropriate
98105 + lookup status. */
98106 +int
98107 +dbopen (const char *fname, int oper, int mode, NSS_DB **dbp)
98109 + int err;
98110 + int fd;
98111 + NSS_DB *db;
98113 + /* Construct the object we pass up. */
98114 + db = (NSS_DB *) calloc (1, sizeof (NSS_DB));
98115 + if (db == NULL)
98116 + return NSS_STATUS_UNAVAIL;
98118 + /* Initialize the object. */
98119 + db->cursor = db_cursor;
98121 + /* Actually open the database. */
98122 + switch (libdb_version)
98124 + case db24:
98125 + case db27:
98126 + err = DL_CALL_FCT (libdb_db_open,
98127 + (fname, DB_BTREE, oper, mode, NULL, NULL, &db->db));
98128 + if (err != 0)
98129 + goto fail;
98131 + if (libdb_version)
98133 + db->close = ((struct db24 *) db->db)->close;
98134 + db->fd = ((struct db24 *) db->db)->fd;
98135 + db->get = ((struct db24 *) db->db)->get;
98136 + db->put = ((struct db24 *) db->db)->put;
98138 + else
98140 + db->close = ((struct db27 *) db->db)->close;
98141 + db->fd = ((struct db27 *) db->db)->fd;
98142 + db->get = ((struct db27 *) db->db)->get;
98143 + db->put = ((struct db27 *) db->db)->put;
98145 + break;
98147 + case db30:
98148 + err = DL_CALL_FCT (libdb_db_create, (db->db, NULL, 0));
98149 + if (err != 0)
98150 + goto fail;
98152 + db->close = ((struct db30 *) db->db)->close;
98153 + db->fd = ((struct db30 *) db->db)->fd;
98154 + db->get = ((struct db30 *) db->db)->get;
98155 + db->put = ((struct db30 *) db->db)->put;
98157 + err = ((struct db30 *) db->db)->open (db->db, fname, NULL, DB_BTREE,
98158 + oper, mode);
98159 + if (err != 0)
98160 + goto fail;
98161 + break;
98163 + default:
98164 + abort ();
98167 + /* We have to make sure the file is `closed on exec'. */
98168 + err = DL_CALL_FCT (db->fd, (db->db, &fd));
98169 + if (err != 0)
98170 + goto fail;
98171 + if (set_cloexec_flag (fd) < 0)
98172 + goto fail;
98174 + *dbp = db;
98176 + return NSS_STATUS_UNAVAIL;
98178 + fail:
98179 + /* Something went wrong. Close the database if necessary. */
98180 + if (db)
98182 + if (db->db && db->close)
98183 + DL_CALL_FCT (db->close, (db->db, 0));
98184 + free (db);
98187 + /* Make sure `errno' is set. */
98188 + if (err)
98189 + __set_errno (err);
98191 + return err == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
98193 diff -u -udbrN glibc-2.3.2/nss/nss_db/dummy-db.h glibc-2.3.2-200304020432/nss/nss_db/dummy-db.h
98194 --- glibc-2.3.2/nss/nss_db/dummy-db.h Thu Jan 1 01:00:00 1970
98195 +++ glibc-2.3.2-200304020432/nss/nss_db/dummy-db.h Fri Jul 6 06:55:38 2001
98196 @@ -0,0 +1,333 @@
98197 +/* Constants and structures from the various Berkeley DB releases.
98198 + Copyright (C) 1999, 2000 Free Software Foundation, Inc.
98199 + This file is part of the GNU C Library.
98201 + The GNU C Library is free software; you can redistribute it and/or
98202 + modify it under the terms of the GNU Lesser General Public
98203 + License as published by the Free Software Foundation; either
98204 + version 2.1 of the License, or (at your option) any later version.
98206 + The GNU C Library is distributed in the hope that it will be useful,
98207 + but WITHOUT ANY WARRANTY; without even the implied warranty of
98208 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
98209 + Lesser General Public License for more details.
98211 + You should have received a copy of the GNU Lesser General Public
98212 + License along with the GNU C Library; if not, write to the Free
98213 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
98214 + 02111-1307 USA. */
98216 +#include <stdint.h>
98218 +#include "nss_db.h"
98220 +/* This file contains dummy definitions for various constants and
98221 + structures from the Berkeley release. We only provide those
98222 + definitions that are actually needed. In case of the structures,
98223 + we're only interested in the function pointers, since that's the
98224 + interface to the database. Unfortunately the structures have been
98225 + changed several times. */
98227 +/* The value for the btree database type has not been changed (yet?). */
98228 +#define DB_BTREE (1)
98230 +/* Permission flags for all 2.x releases. */
98231 +#define DB2x_RDONLY 0x010000
98233 +/* The error values for all 2.x releases. */
98234 +#define DB2x_KEYEXIST ( -3)
98235 +#define DB2x_NOTFOUND ( -7)
98237 +/* For all 2.x releases up to 2.6.3 we can use the same definitions.
98238 + We'll refer to them as 2.4 since that's the version distributed
98239 + with glibc 2.1. */
98241 +/* Access methods from version 2.4. */
98242 +#define DB24_FIRST 0x000020
98243 +#define DB24_NEXT 0x000800
98244 +#define DB24_NOOVERWRITE 0x001000
98246 +/* Permission flags from version 2.4. */
98247 +#define DB24_TRUNCATE 0x080000
98249 +/* The DB structure from version 2.4. */
98250 +struct db24
98252 + void *mutexp;
98253 + enum { dummy24 } type;
98254 + void *dbenv;
98255 + void *mp_dbenv;
98256 + void *master;
98257 + void *internal;
98258 + void *mp;
98259 + void *mpf;
98260 + struct
98262 + void *tqh_first;
98263 + void **tqh_last;
98264 + } curs_queue;
98265 + struct {
98266 + void *lh_first;
98267 + } handleq;
98268 + struct {
98269 + void *le_next;
98270 + void **le_prev;
98271 + } links;
98272 + uint32_t log_fileid;
98273 + void *txn;
98274 + uint32_t locker;
98275 + struct db24_dbt {
98276 + void *data;
98277 + uint32_t size;
98278 + uint32_t ulen;
98279 + uint32_t dlen;
98280 + uint32_t doff;
98281 + uint32_t flags;
98282 + } lock_dbt;
98283 + struct{
98284 + uint32_t pgno;
98285 + uint8_t fileid[20];
98286 + } lock;
98287 + size_t pgsize;
98288 + void *db_malloc;
98289 + /* Functions. */
98290 + int (*close) (void *, uint32_t);
98291 + int (*cursor) (void *, void *, void **);
98292 + int (*del) (void *, void *, DBT *, uint32_t);
98293 + int (*fd) (void *, int *);
98294 + int (*get) (void *, void *, DBT *, DBT *, uint32_t);
98295 + int (*put) (void *, void *, DBT *, DBT *, uint32_t);
98296 + int (*stat) (void *, void *, void *(*)(size_t), uint32_t);
98297 + int (*sync) (void *, uint32_t);
98298 + uint32_t flags;
98301 +/* The DBC structure for the 2.4 release. */
98302 +struct dbc24
98304 + void *dbp;
98305 + void *txn;
98306 + struct
98308 + void *tqe_next;
98309 + void **tqe_prev;
98310 + } links;
98311 + void *internal;
98312 + void *c_close;
98313 + void *c_del;
98314 + int (*c_get) (void *, DBT *, DBT *, uint32_t);
98315 + void *c_put;
98318 +/* The 2.7 release is slighty different. */
98320 +/* Access methods from version 2.7. */
98321 +#define DB27_FIRST 7
98322 +#define DB27_NEXT 15
98323 +#define DB27_NOOVERWRITE 17
98325 +/* Permission flags from version 2.7. */
98326 +#define DB27_TRUNCATE 0x020000
98328 +/* The DB structure from version 2.7. */
98329 +struct db27
98331 + void *mutexp;
98332 + enum { dummy27 } type;
98333 + int byteswapped;
98334 + int saved_open_fd;
98335 + void *dbenv;
98336 + void *mp_dbenv;
98337 + void *internal;
98338 + void *mp;
98339 + void *mpf;
98340 + struct
98342 + void *tqh_first;
98343 + void **tqh_last;
98344 + } free_queue;
98345 + struct
98347 + void *tqh_first;
98348 + void **tqh_last;
98349 + } active_queue;
98350 + uint8_t fileid[20];
98351 + uint32_t log_fileid;
98352 + size_t pgsize;
98353 + void *db_malloc;
98354 + void *dup_compare;
98355 + void *h_hash;
98356 + /* Functions. */
98357 + int (*am_close) (void *);
98358 + int (*close) (void *, uint32_t);
98359 + int (*cursor) (void *, void *, void **, uint32_t);
98360 + int (*del) (void *, void *, DBT *, uint32_t);
98361 + int (*fd) (void *, int *);
98362 + int (*get) (void *, void *, DBT *, DBT *, uint32_t);
98363 + int (*join) (void *, void **, uint32_t, void **);
98364 + int (*put) (void *, void *, DBT *, DBT *, uint32_t);
98365 + int (*stat) (void *, void *, void *(*)(size_t), uint32_t);
98366 + int (*sync) (void *, uint32_t);
98367 + uint32_t flags;
98370 +/* The DBC structure for version 2.7. */
98371 +struct dbc27
98373 + void *dbp;
98374 + void *txn;
98375 + struct
98377 + void *tqe_next;
98378 + void **tqe_prev;
98379 + } links;
98380 + uint32_t lid;
98381 + uint32_t locker;
98382 + DBT lock_dbt;
98383 + struct{
98384 + uint32_t pgno;
98385 + uint8_t fileid[20];
98386 + } lock;
98387 + size_t mylock;
98388 + DBT rkey;
98389 + DBT rdata;
98390 + void *c_am_close;
98391 + void *c_am_destroy;
98392 + void *c_close;
98393 + void *c_del;
98394 + int (*c_get) (void *, DBT *, DBT *, uint32_t);
98395 + void *c_put;
98396 + void *internal;
98397 + uint32_t flags;
98400 +/* Version 3.0 is mostly incompatible with 2.x. */
98402 +/* Access methods from version 3.0. */
98403 +#define DB30_FIRST 9
98404 +#define DB30_NEXT 17
98405 +#define DB30_NOOVERWRITE 20
98407 +/* Error values from version 3.0. */
98408 +#define DB30_KEYEXIST (-30997)
98409 +#define DB30_NOTFOUND (-30994)
98411 +/* Permission flags from version 3.0. */
98412 +#define DB30_RDONLY 0x000010
98413 +#define DB30_TRUNCATE 0x020000
98415 +/* The DB structure from version 3.0. */
98416 +struct db30
98418 + size_t pgsize;
98419 + void (*db_feedback) (void *, int, int);
98420 + void *(*db_malloc) (size_t);
98421 + void *(*db_realloc) (void *, size_t);
98422 + int (*dup_compare) (const DBT *, const DBT *);
98423 + void *dbenv;
98424 + enum { dummy30 } type;
98425 + void *mpf;
98426 + void *mutexp;
98427 + u_int8_t fileid[20];
98428 + int32_t log_fileid;
98429 + void *open_txn;
98430 + void *saved_open_fhp;
98431 + struct
98433 + void *tqh_first;
98434 + void **tqh_last;
98435 + } free_queue;
98436 + struct
98438 + void *tqh_first;
98439 + void **tqh_last;
98440 + } active_queue;
98441 + void *bt_internal;
98442 + void *cj_internal;
98443 + void *h_internal;
98444 + void *q_internal;
98445 + void *xa_internal;
98446 + /* Functions. */
98447 + int (*close) (void *, uint32_t);
98448 + int (*cursor) (void *, void *, void **, uint32_t);
98449 + int (*del) (void *, void *, DBT *, uint32_t);
98450 + void (*err) (void *, int, const char *, ...);
98451 + void (*errx) (void *, const char *, ...);
98452 + int (*fd) (void *, int *);
98453 + int (*get) (void *, void *, DBT *, DBT *, uint32_t);
98454 + int (*get_byteswapped) (void *);
98455 + int (*get_type) (void *);
98456 + int (*join) (void *, void **, void **, uint32_t);
98457 + int (*open) (void *, const char *, const char *, int, uint32_t, int);
98458 + int (*put) (void *, void *, DBT *, DBT *, uint32_t);
98459 + int (*remove) (void *, const char *, const char *, uint32_t);
98460 + int (*set_cachesize) (void *, uint32_t, uint32_t, int);
98461 + int (*set_dup_compare) (void *, int (*)(const DBT *, const DBT *));
98462 + void (*set_errcall) (void *, void (*)(const char *, char *));
98463 + void (*set_errfile) (void *, void *);
98464 + void (*set_errpfx) (void *, const char *);
98465 + void (*set_feedback) (void *, void (*)(void *, int, int));
98466 + int (*set_flags) (void *, uint32_t);
98467 + int (*set_lorder) (void *, int);
98468 + int (*set_malloc) (void *, void *(*)(size_t));
98469 + int (*set_pagesize) (void *, uint32_t);
98470 + void (*set_paniccall) (void *, void (*)(void *, int));
98471 + int (*set_realloc) (void *, void *(*)(void *, size_t));
98472 + int (*stat) (void *, void *, void *(*)(size_t), uint32_t);
98473 + int (*sync) (void *, uint32_t);
98474 + int (*upgrade) (void *, const char *, uint32_t);
98476 + int (*set_bt_compare) (void *, int (*)(const DBT *, const DBT *));
98477 + int (*set_bt_maxkey) (void *, uint32_t);
98478 + int (*set_bt_minkey) (void *, uint32_t);
98479 + int (*set_bt_prefix) (void *, size_t (*)(const DBT *, const DBT *));
98481 + int (*set_h_ffactor) (void *, uint32_t);
98482 + int (*set_h_hash) (void *, uint32_t (*)(const void *, uint32_t));
98483 + int (*set_h_nelem) (void *, uint32_t);
98485 + int (*set_re_delim) (void *, int);
98486 + int (*set_re_len) (void *, uint32_t);
98487 + int (*set_re_pad) (void *, int);
98488 + int (*set_re_source) (void *, const char *);
98490 + uint32_t am_ok;
98491 + uint32_t flags;
98494 +/* The DBC structure from version 3.0. */
98495 +struct dbc30
98497 + void *dbp;
98498 + void *txn;
98499 + struct
98501 + void *tqe_next;
98502 + void **tqe_prev;
98503 + } links;
98504 + uint32_t lid; /* Default process' locker id. */
98505 + uint32_t locker; /* Locker for this operation. */
98506 + DBT lock_dbt; /* DBT referencing lock. */
98507 + struct
98509 + uint32_t pgno;
98510 + uint8_t fileid[20];
98511 + } lock;
98512 + struct
98514 + size_t off;
98515 + uint32_t ndx;
98516 + uint32_t gen;
98517 + } mylock;
98518 + DBT rkey;
98519 + DBT rdata;
98520 + int (*c_close) (void *);
98521 + int (*c_del) (void *, uint32_t);
98522 + int (*c_dup) (void *, void **, uint32_t);
98523 + int (*c_get) (void *, DBT *, DBT *, uint32_t);
98524 + int (*c_put) (void *, DBT *, DBT *, uint32_t);
98525 + int (*c_am_close) (void *);
98526 + int (*c_am_destroy) (void *);
98527 + void *internal;
98528 + uint32_t flags;
98530 diff -u -udbrN glibc-2.3.2/nss/nss_db/nss_db.h glibc-2.3.2-200304020432/nss/nss_db/nss_db.h
98531 --- glibc-2.3.2/nss/nss_db/nss_db.h Thu Jan 1 01:00:00 1970
98532 +++ glibc-2.3.2-200304020432/nss/nss_db/nss_db.h Fri Jul 6 06:55:38 2001
98533 @@ -0,0 +1,94 @@
98534 +/* Common database open/close routines for nss_db.
98535 + Copyright (C) 1999, 2000 Free Software Foundation, Inc.
98536 + This file is part of the GNU C Library.
98538 + The GNU C Library is free software; you can redistribute it and/or
98539 + modify it under the terms of the GNU Lesser General Public
98540 + License as published by the Free Software Foundation; either
98541 + version 2.1 of the License, or (at your option) any later version.
98543 + The GNU C Library is distributed in the hope that it will be useful,
98544 + but WITHOUT ANY WARRANTY; without even the implied warranty of
98545 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
98546 + Lesser General Public License for more details.
98548 + You should have received a copy of the GNU Lesser General Public
98549 + License along with the GNU C Library; if not, write to the Free
98550 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
98551 + 02111-1307 USA. */
98553 +#ifndef _NSS_DB_H
98554 +#define _NSS_DB_H 1
98556 +#include <nss.h>
98557 +#include <stdint.h>
98559 +/* Variables which keep track of the error values. */
98560 +extern int db_keyexist;
98561 +extern int db_notfound;
98563 +/* This flag is the same for all versions of the Berkeley DB library. */
98564 +#define DB_CREATE 0x000001
98566 +/* But constants which vary from version to version are actually
98567 + variables here. */
98568 +extern int db_first;
98569 +extern int db_next;
98570 +extern int db_nooverwrite;
98571 +extern int db_truncate;
98572 +extern int db_rdonly;
98574 +/* The `DBT' type is the same in all versions we support. */
98575 +typedef struct
98577 + void *data;
98578 + uint32_t size;
98579 + uint32_t ulen;
98580 + uint32_t dlen;
98581 + uint32_t doff;
98582 + uint32_t flags;
98583 +} DBT;
98585 +/* But the cursor object is very different from version to version. */
98586 +typedef struct
98588 + void *cursor;
98589 + int (*c_get) (void *, DBT *, DBT *, uint32_t);
98590 +} NSS_DBC;
98592 +/* We need a helper function for it. */
98593 +extern int db_cursor (void *db, void *txn, NSS_DBC **dbcp);
98595 +/* This is the wrapper we put around the `DB' structures to provide a
98596 + uniform interface to the higher-level functions. */
98597 +typedef struct
98599 + void *db;
98600 + int (*close) (void *, uint32_t);
98601 + int (*cursor) (void *, void *, NSS_DBC **);
98602 + int (*fd) (void *, int *);
98603 + int (*get) (void *, void *, DBT *, DBT *, uint32_t);
98604 + int (*put) (void *, void *, DBT *, DBT *, uint32_t);
98605 +} NSS_DB;
98607 +/* Open the database stored in FILE. If succesful, store the database
98608 + handle in *DBP and return NSS_STATUS_SUCCESS. On failure, return
98609 + the appropriate lookup status. */
98610 +extern enum nss_status internal_setent (const char *file, NSS_DB **dbp);
98612 +/* Close the database *DBP. */
98613 +extern void internal_endent (NSS_DB **dbp);
98615 +/* Dynamically load the Berkeley DB library. Return zero if
98616 + successful, non-zero if no suitable version of the library could be
98617 + loaded. */
98618 +extern enum nss_status load_db (void);
98620 +/* Open the database in FNAME, for access specified by FLAGS. If
98621 + opening the database causes the file FNAME to be created, it is
98622 + created with MODE. If succesful, store the database handle in *DBP
98623 + and return NSS_STATUS_SUCCESS. On failure, return the appropriate
98624 + lookup status. */
98625 +extern int dbopen (const char *fname, int oper, int mode, NSS_DB **dbp);
98627 +#endif /* nss_db.h */
98628 diff -u -udbrN glibc-2.3.2/nss/nss_files/files-hosts.c glibc-2.3.2-200304020432/nss/nss_files/files-hosts.c
98629 --- glibc-2.3.2/nss/nss_files/files-hosts.c Wed Feb 12 08:37:22 2003
98630 +++ glibc-2.3.2-200304020432/nss/nss_files/files-hosts.c Sun Mar 16 04:31:40 2003
98631 @@ -280,7 +280,7 @@
98633 DB_LOOKUP (hostbyaddr, ,,
98635 - if (result->h_length == len
98636 + if (result->h_length == (int) len
98637 && ! memcmp (addr, result->h_addr_list[0], len))
98638 break;
98639 }, const void *addr, socklen_t len, int af)
98640 Binary files glibc-2.3.2/po/be.mo and glibc-2.3.2-200304020432/po/be.mo differ
98641 Binary files glibc-2.3.2/po/ca.mo and glibc-2.3.2-200304020432/po/ca.mo differ
98642 diff -u -udbrN glibc-2.3.2/po/ca.po glibc-2.3.2-200304020432/po/ca.po
98643 --- glibc-2.3.2/po/ca.po Mon Nov 4 07:56:29 2002
98644 +++ glibc-2.3.2-200304020432/po/ca.po Sun Mar 9 23:51:17 2003
98645 @@ -1,12 +1,12 @@
98646 # Catalan messages for GNU libc.
98647 # Copyright (C) 2002 Free Software Foundation, Inc.
98648 -# Ivan Vilata i Balaguer <ivan@selidor.net>, 1998, 1999, 2000, 2001, 2002.
98649 +# Ivan Vilata i Balaguer <ivan@selidor.net>, 1998, 1999, 2000, 2001, 2002, 2003.
98651 msgid ""
98652 msgstr ""
98653 -"Project-Id-Version: libc 2.3.1\n"
98654 -"POT-Creation-Date: 2002-10-02 17:22-0700\n"
98655 -"PO-Revision-Date: 2002-10-29 18:59+0100\n"
98656 +"Project-Id-Version: libc 2.3.2\n"
98657 +"POT-Creation-Date: 2003-02-22 15:34-0800\n"
98658 +"PO-Revision-Date: 2003-03-09 23:39+0100\n"
98659 "Last-Translator: Ivan Vilata i Balaguer <ivan@selidor.net>\n"
98660 "Language-Team: Catalan <ca@dodds.net>\n"
98661 "MIME-Version: 1.0\n"
98662 @@ -267,8 +267,8 @@
98664 #: iconv/iconv_prog.c:241
98665 #, c-format
98666 -msgid "conversions from `%s' and to `%s' are not supported"
98667 -msgstr "les conversions des de «%s» i cap a «%s» no són suportades"
98668 +msgid "conversion from `%s' and to `%s' are not supported"
98669 +msgstr "la conversió des de «%s» cap a «%s» no és suportada"
98671 #: iconv/iconv_prog.c:246
98672 #, c-format
98673 @@ -293,15 +293,15 @@
98674 msgid "error while closing output file"
98675 msgstr "error en tancar el fitxer d'eixida"
98677 -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:355 locale/programs/locale.c:268
98678 +#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274
98679 #: locale/programs/localedef.c:372 catgets/gencat.c:233
98680 #: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
98681 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
98682 msgstr "Informeu dels errors amb el guió «glibcbug» a <bugs@gnu.org>.\n"
98684 -#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:369 locale/programs/locale.c:281
98685 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:904
98686 -#: nss/getent.c:74 nscd/nscd.c:279 nscd/nscd_nischeck.c:90 elf/ldconfig.c:259
98687 +#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287
98688 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910
98689 +#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271
98690 #: elf/sprof.c:349
98691 #, c-format
98692 msgid ""
98693 @@ -314,9 +314,9 @@
98694 "de còpia. No hi ha CAP garantia; ni tan sols de COMERCIABILITAT o\n"
98695 "ADEQUACIÓ A UN PROPÒSIT PARTICULAR.\n"
98697 -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:374 locale/programs/locale.c:286
98698 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:909
98699 -#: nss/getent.c:79 nscd/nscd.c:284 nscd/nscd_nischeck.c:95 elf/ldconfig.c:264
98700 +#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292
98701 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915
98702 +#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276
98703 #: elf/sprof.c:355
98704 #, c-format
98705 msgid "Written by %s.\n"
98706 @@ -370,15 +370,15 @@
98707 msgid "Prefix used for all file accesses"
98708 msgstr "Prefix a usar en tots els accessos a fitxer"
98710 -#: iconv/iconvconfig.c:325 locale/programs/localedef.c:292
98711 +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
98712 msgid "no output file produced because warning were issued"
98713 msgstr "no hi ha fitxer d'eixida perquè s'han produït avisos"
98715 -#: iconv/iconvconfig.c:403
98716 +#: iconv/iconvconfig.c:405
98717 msgid "while inserting in search tree"
98718 msgstr "en inserir en l'arbre de recerca"
98720 -#: iconv/iconvconfig.c:1202
98721 +#: iconv/iconvconfig.c:1204
98722 msgid "cannot generate output file"
98723 msgstr "no s'ha pogut generar el fitxer d'eixida"
98725 @@ -1295,7 +1295,7 @@
98726 msgid "unterminated symbolic name"
98727 msgstr "el nom simbòlic no és terminat"
98729 -#: locale/programs/linereader.c:537 catgets/gencat.c:1166
98730 +#: locale/programs/linereader.c:537 catgets/gencat.c:1195
98731 msgid "invalid escape sequence"
98732 msgstr "la seqüència d'escapada no és vàlida"
98734 @@ -1325,41 +1325,41 @@
98735 msgid "trailing garbage at end of line"
98736 msgstr "fem al final de la línia"
98738 -#: locale/programs/locale.c:73
98739 +#: locale/programs/locale.c:75
98740 msgid "System information:"
98741 msgstr "Informació del sistema:"
98743 -#: locale/programs/locale.c:75
98744 +#: locale/programs/locale.c:77
98745 msgid "Write names of available locales"
98746 msgstr "Mostra els noms dels locales disponibles"
98748 -#: locale/programs/locale.c:77
98749 +#: locale/programs/locale.c:79
98750 msgid "Write names of available charmaps"
98751 msgstr "Mostra els noms dels mapes de caràcters disponibles"
98753 # ivb (2001/10/30)
98754 # ivb Aquesta línia dóna pas a un conjunt d'opcions que modif. l'eixida.
98755 -#: locale/programs/locale.c:78
98756 +#: locale/programs/locale.c:80
98757 msgid "Modify output format:"
98758 msgstr "Modificadors del format de l'eixida:"
98760 -#: locale/programs/locale.c:79
98761 +#: locale/programs/locale.c:81
98762 msgid "Write names of selected categories"
98763 msgstr "Mostra els noms de les categories seleccionades"
98765 -#: locale/programs/locale.c:80
98766 +#: locale/programs/locale.c:82
98767 msgid "Write names of selected keywords"
98768 msgstr "Mostra els noms de les paraules clau seleccionades"
98770 -#: locale/programs/locale.c:81
98771 +#: locale/programs/locale.c:83
98772 msgid "Print more information"
98773 msgstr "Mostra més informació"
98775 -#: locale/programs/locale.c:86
98776 +#: locale/programs/locale.c:88
98777 msgid "Get locale-specific information."
98778 msgstr "Obté la informació específica d'un locale."
98780 -#: locale/programs/locale.c:89
98781 +#: locale/programs/locale.c:91
98782 msgid ""
98783 "NAME\n"
98784 "[-a|-m]"
98785 @@ -1367,7 +1367,7 @@
98786 "NOM\n"
98787 "[-a|-m]"
98789 -#: locale/programs/locale.c:488
98790 +#: locale/programs/locale.c:512
98791 msgid "while preparing output"
98792 msgstr "en preparar l'eixida"
98794 @@ -1504,16 +1504,16 @@
98795 msgid "cannot create temporary file"
98796 msgstr "no s'ha pogut crear un fitxer temporal"
98798 -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:302
98799 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
98800 msgid "cannot initialize archive file"
98801 msgstr "no s'ha pogut iniciar el fitxer arxiu"
98803 -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:309
98804 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
98805 msgid "cannot resize archive file"
98806 msgstr "no s'ha pogut redimensionar el fitxer arxiu"
98808 -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:318
98809 -#: locale/programs/locarchive.c:508
98810 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
98811 +#: locale/programs/locarchive.c:511
98812 msgid "cannot map archive header"
98813 msgstr "no s'ha pogut mapar la capçalera de l'arxiu"
98815 @@ -1531,92 +1531,92 @@
98816 msgid "cannot map locale archive file"
98817 msgstr "no s'ha pogut mapar el fitxer arxiu de locales"
98819 -#: locale/programs/locarchive.c:326
98820 +#: locale/programs/locarchive.c:329
98821 msgid "cannot lock new archive"
98822 msgstr "no s'ha pogut blocar el nou arxiu"
98824 -#: locale/programs/locarchive.c:377
98825 +#: locale/programs/locarchive.c:380
98826 msgid "cannot extend locale archive file"
98827 msgstr "no s'ha pogut estendre el fitxer arxiu de locales"
98829 -#: locale/programs/locarchive.c:386
98830 +#: locale/programs/locarchive.c:389
98831 msgid "cannot change mode of resized locale archive"
98832 msgstr "no s'ha pogut canviar el mode de l'arxiu de locales redimensionat"
98834 -#: locale/programs/locarchive.c:394
98835 +#: locale/programs/locarchive.c:397
98836 msgid "cannot rename new archive"
98837 msgstr "no s'ha pogut reanomenar el nou arxiu"
98839 -#: locale/programs/locarchive.c:447
98840 +#: locale/programs/locarchive.c:450
98841 #, c-format
98842 msgid "cannot open locale archive \"%s\""
98843 msgstr "no s'ha pogut obrir l'arxiu «%s» de locales"
98845 -#: locale/programs/locarchive.c:452
98846 +#: locale/programs/locarchive.c:455
98847 #, c-format
98848 msgid "cannot stat locale archive \"%s\""
98849 msgstr "ha fallat stat() sobre l'arxiu «%s» de locales"
98851 -#: locale/programs/locarchive.c:471
98852 +#: locale/programs/locarchive.c:474
98853 #, c-format
98854 msgid "cannot lock locale archive \"%s\""
98855 msgstr "no s'ha pogut blocar l'arxiu «%s» de locales"
98857 -#: locale/programs/locarchive.c:494
98858 +#: locale/programs/locarchive.c:497
98859 msgid "cannot read archive header"
98860 msgstr "no s'ha pogut llegir la capçalera de l'arxiu"
98862 -#: locale/programs/locarchive.c:554
98863 +#: locale/programs/locarchive.c:557
98864 #, c-format
98865 msgid "locale '%s' already exists"
98866 msgstr "el locale «%s» ja existeix"
98868 -#: locale/programs/locarchive.c:784 locale/programs/locarchive.c:799
98869 -#: locale/programs/locarchive.c:811 locale/programs/locarchive.c:823
98870 +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
98871 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
98872 #: locale/programs/locfile.c:343
98873 msgid "cannot add to locale archive"
98874 msgstr "no s'ha pogut afegir a l'arxiu de locales"
98876 # ivb (2002/10/21)
98877 # ivb El fitxer conté àlies de diversos locales (locale.alias).
98878 -#: locale/programs/locarchive.c:976
98879 +#: locale/programs/locarchive.c:982
98880 #, c-format
98881 msgid "locale alias file `%s' not found"
98882 msgstr "no s'ha trobat el fitxer «%s» d'àlies de locales"
98884 # ivb (2002/10/21)
98885 # ivb És un missatge, no un error.
98886 -#: locale/programs/locarchive.c:1118
98887 +#: locale/programs/locarchive.c:1126
98888 #, c-format
98889 msgid "Adding %s\n"
98890 msgstr "S'està afegint «%s»\n"
98892 -#: locale/programs/locarchive.c:1124
98893 +#: locale/programs/locarchive.c:1132
98894 #, c-format
98895 msgid "stat of \"%s\" failed: %s: ignored"
98896 msgstr "ha fallat stat() sobre «%s»: %s: es descarta"
98898 -#: locale/programs/locarchive.c:1130
98899 +#: locale/programs/locarchive.c:1138
98900 #, c-format
98901 msgid "\"%s\" is no directory; ignored"
98902 msgstr "«%s» no és un directori: es descarta"
98904 -#: locale/programs/locarchive.c:1137
98905 +#: locale/programs/locarchive.c:1145
98906 #, c-format
98907 msgid "cannot open directory \"%s\": %s: ignored"
98908 msgstr "no s'ha pogut obrir el directori «%s»: %s: es descarta"
98910 -#: locale/programs/locarchive.c:1209
98911 +#: locale/programs/locarchive.c:1217
98912 #, c-format
98913 msgid "incomplete set of locale files in \"%s\""
98914 msgstr "el joc de fitxers de locale en «%s» no és complet"
98916 -#: locale/programs/locarchive.c:1273
98917 +#: locale/programs/locarchive.c:1281
98918 #, c-format
98919 msgid "cannot read all files in \"%s\": ignored"
98920 msgstr "no s'han pogut llegir tots els fitxers de «%s»: es descarta"
98922 -#: locale/programs/locarchive.c:1343
98923 +#: locale/programs/locarchive.c:1351
98924 #, c-format
98925 msgid "locale \"%s\" not in archive"
98926 msgstr "el locale «%s» no es troba en l'arxiu"
98927 @@ -1687,8 +1687,8 @@
98928 msgid "upper limit in range is not smaller then lower limit"
98929 msgstr "el límit superior del rang no és menor que l'inferior"
98931 -#: locale/programs/xmalloc.c:70 malloc/obstack.c:500 malloc/obstack.c:503
98932 -#: posix/getconf.c:996
98933 +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
98934 +#: posix/getconf.c:1002
98935 msgid "memory exhausted"
98936 msgstr "la memòria s'ha exhaurit"
98938 @@ -1714,7 +1714,7 @@
98939 msgid "Another string for testing."
98940 msgstr "Altra cadena de prova."
98942 -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:79
98943 +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84
98944 msgid "NAME"
98945 msgstr "NOM"
98947 @@ -1758,7 +1758,7 @@
98948 msgid "duplicate set definition"
98949 msgstr "la definició del joc de missatges és duplicada"
98951 -#: catgets/gencat.c:446 catgets/gencat.c:619 catgets/gencat.c:648
98952 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
98953 msgid "this is the first definition"
98954 msgstr "aquesta és la primera definició"
98956 @@ -1776,44 +1776,44 @@
98957 msgid "unknown directive `%s': line ignored"
98958 msgstr "la directiva «%s» no és coneguda: es descarta la línia"
98960 -#: catgets/gencat.c:617
98961 +#: catgets/gencat.c:621
98962 msgid "duplicated message number"
98963 msgstr "el número de missatge és duplicat"
98965 -#: catgets/gencat.c:645
98966 +#: catgets/gencat.c:674
98967 msgid "duplicated message identifier"
98968 msgstr "l'identificador de missatge és duplicat"
98970 -#: catgets/gencat.c:702
98971 +#: catgets/gencat.c:731
98972 msgid "invalid character: message ignored"
98973 msgstr "el caràcter no és vàlid: es descarta el missatge"
98975 -#: catgets/gencat.c:745
98976 +#: catgets/gencat.c:774
98977 msgid "invalid line"
98978 msgstr "la línia no és vàlida"
98980 -#: catgets/gencat.c:799
98981 +#: catgets/gencat.c:828
98982 msgid "malformed line ignored"
98983 msgstr "es descarta la línia malmesa"
98985 -#: catgets/gencat.c:963 catgets/gencat.c:1004
98986 +#: catgets/gencat.c:992 catgets/gencat.c:1033
98987 #, c-format
98988 msgid "cannot open output file `%s'"
98989 msgstr "no s'ha pogut obrir el fitxer d'eixida «%s»"
98991 -#: catgets/gencat.c:1188
98992 +#: catgets/gencat.c:1217
98993 msgid "unterminated message"
98994 msgstr "el missatge no és terminat"
98996 -#: catgets/gencat.c:1212
98997 +#: catgets/gencat.c:1241
98998 msgid "while opening old catalog file"
98999 msgstr "en obrir el fitxer antic de catàleg"
99001 -#: catgets/gencat.c:1303
99002 +#: catgets/gencat.c:1332
99003 msgid "conversion modules not available"
99004 msgstr "els mòduls de conversió no es troben disponibles"
99006 -#: catgets/gencat.c:1329
99007 +#: catgets/gencat.c:1358
99008 msgid "cannot determine escape character"
99009 msgstr "no s'ha pogut determinar el caràcter d'escapada"
99011 @@ -1821,7 +1821,7 @@
99012 msgid "makecontext: does not know how to handle more than 8 arguments\n"
99013 msgstr "makecontext: no es poden tractar més de 8 arguments\n"
99015 -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:178
99016 +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133
99017 #: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861
99018 msgid "Success"
99019 msgstr "Èxit"
99020 @@ -3024,23 +3024,23 @@
99021 msgid "%s%sUnknown signal %d\n"
99022 msgstr "%s%sSenyal desconegut %d\n"
99024 -#: malloc/mcheck.c:296
99025 +#: malloc/mcheck.c:346
99026 msgid "memory is consistent, library is buggy\n"
99027 msgstr "la memòria és consistent; la biblioteca té errors\n"
99029 -#: malloc/mcheck.c:299
99030 +#: malloc/mcheck.c:349
99031 msgid "memory clobbered before allocated block\n"
99032 msgstr "s'ha sobreescrit la memòria d'abans del bloc reservat\n"
99034 -#: malloc/mcheck.c:302
99035 +#: malloc/mcheck.c:352
99036 msgid "memory clobbered past end of allocated block\n"
99037 msgstr "s'ha sobreescrit la memòria de després del bloc reservat\n"
99039 -#: malloc/mcheck.c:305
99040 +#: malloc/mcheck.c:355
99041 msgid "block freed twice\n"
99042 msgstr "s'ha alliberat el bloc dues voltes\n"
99044 -#: malloc/mcheck.c:308
99045 +#: malloc/mcheck.c:358
99046 msgid "bogus mcheck_status, library is buggy\n"
99047 msgstr "el valor d'«mcheck_status» és estrany; la biblioteca té errors\n"
99049 @@ -3076,6 +3076,10 @@
99050 msgid "DATAFILE [OUTFILE]"
99051 msgstr "FITXERDADES [FITXEREIXIDA]"
99053 +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
99054 +msgid "Unknown error"
99055 +msgstr "Error desconegut"
99057 #: string/strsignal.c:69
99058 #, c-format
99059 msgid "Real-time signal %d"
99060 @@ -3102,7 +3106,7 @@
99061 msgid "%s: Memory exhausted: %s\n"
99062 msgstr "%s: La memòria s'ha exhaurit: %s\n"
99064 -#: timezone/zic.c:390 misc/error.c:120
99065 +#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155
99066 msgid "Unknown system error"
99067 msgstr "Error desconegut del sistema"
99069 @@ -3507,27 +3511,23 @@
99070 msgid "Interrupted by a signal"
99071 msgstr "Interromput per un senyal"
99073 -#: posix/../sysdeps/posix/gai_strerror.c:57
99074 -msgid "Unknown error"
99075 -msgstr "Error desconegut"
99077 -#: posix/getconf.c:883
99078 +#: posix/getconf.c:889
99079 #, c-format
99080 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
99081 msgstr "Forma d'ús: %s [-v especificació] nom_de_la_variable [camí]\n"
99083 -#: posix/getconf.c:941
99084 +#: posix/getconf.c:947
99085 #, c-format
99086 msgid "unknown specification \"%s\""
99087 msgstr "l'especificació «%s» no és coneguda"
99089 # ivb (2001/11/01)
99090 # ivb Es refereix a variables de configuració -> femení.
99091 -#: posix/getconf.c:968 posix/getconf.c:984
99092 +#: posix/getconf.c:974 posix/getconf.c:990
99093 msgid "undefined"
99094 msgstr "indefinida"
99096 -#: posix/getconf.c:1006
99097 +#: posix/getconf.c:1012
99098 #, c-format
99099 msgid "Unrecognized variable `%s'"
99100 msgstr "La variable «%s» no és reconeguda"
99101 @@ -3589,71 +3589,71 @@
99102 msgid "%s: option `-W %s' doesn't allow an argument\n"
99103 msgstr "%s: l'opció «-W %s» no admet arguments\n"
99105 -#: posix/regcomp.c:181
99106 +#: posix/regcomp.c:136
99107 msgid "No match"
99108 msgstr "No hi ha cap coincidència"
99110 -#: posix/regcomp.c:184
99111 +#: posix/regcomp.c:139
99112 msgid "Invalid regular expression"
99113 msgstr "L'expressió regular no és vàlida"
99115 -#: posix/regcomp.c:187
99116 +#: posix/regcomp.c:142
99117 msgid "Invalid collation character"
99118 msgstr "El caràcter d'ordenació no és vàlid"
99120 -#: posix/regcomp.c:190
99121 +#: posix/regcomp.c:145
99122 msgid "Invalid character class name"
99123 msgstr "El nom de la classe de caràcters no és vàlid"
99125 -#: posix/regcomp.c:193
99126 +#: posix/regcomp.c:148
99127 msgid "Trailing backslash"
99128 msgstr "Hi ha una barra invertida sobrant al final"
99130 -#: posix/regcomp.c:196
99131 +#: posix/regcomp.c:151
99132 msgid "Invalid back reference"
99133 msgstr "La referència cap enrere no és vàlida"
99135 -#: posix/regcomp.c:199
99136 +#: posix/regcomp.c:154
99137 msgid "Unmatched [ or [^"
99138 msgstr "[ o [^ desaparellat"
99140 -#: posix/regcomp.c:202
99141 +#: posix/regcomp.c:157
99142 msgid "Unmatched ( or \\("
99143 msgstr "( o \\( desaparellat"
99145 -#: posix/regcomp.c:205
99146 +#: posix/regcomp.c:160
99147 msgid "Unmatched \\{"
99148 msgstr "\\{ desaparellat"
99150 -#: posix/regcomp.c:208
99151 +#: posix/regcomp.c:163
99152 msgid "Invalid content of \\{\\}"
99153 msgstr "El contingut de \\{\\} no és vàlid"
99155 -#: posix/regcomp.c:211
99156 +#: posix/regcomp.c:166
99157 msgid "Invalid range end"
99158 msgstr "El final del rang no és vàlid"
99160 -#: posix/regcomp.c:214
99161 +#: posix/regcomp.c:169
99162 msgid "Memory exhausted"
99163 msgstr "La memòria s'ha exhaurit"
99165 -#: posix/regcomp.c:217
99166 +#: posix/regcomp.c:172
99167 msgid "Invalid preceding regular expression"
99168 msgstr "L'expressió regular precedent és incorrecta"
99170 -#: posix/regcomp.c:220
99171 +#: posix/regcomp.c:175
99172 msgid "Premature end of regular expression"
99173 msgstr "Fí prematur de l'expressió regular"
99175 -#: posix/regcomp.c:223
99176 +#: posix/regcomp.c:178
99177 msgid "Regular expression too big"
99178 msgstr "L'expressió regular és massa llarga"
99180 -#: posix/regcomp.c:226
99181 +#: posix/regcomp.c:181
99182 msgid "Unmatched ) or \\)"
99183 msgstr ") o \\) desaparellat"
99185 -#: posix/regcomp.c:673
99186 +#: posix/regcomp.c:615
99187 msgid "No previous regular expression"
99188 msgstr "No hi ha expressió regular prèvia"
99190 @@ -3812,24 +3812,24 @@
99191 msgid "Service configuration to be used"
99192 msgstr "Configuració a usar del servei"
99194 -#: nss/getent.c:136 nss/getent.c:305
99195 +#: nss/getent.c:136 nss/getent.c:308
99196 #, c-format
99197 msgid "Enumeration not supported on %s\n"
99198 msgstr "No es suporta l'enumeració sobre «%s»\n"
99200 -#: nss/getent.c:729
99201 +#: nss/getent.c:732
99202 msgid "getent - get entries from administrative database."
99203 msgstr "getent - obté les entrades de les bases de dades d'administració."
99205 -#: nss/getent.c:730
99206 +#: nss/getent.c:733
99207 msgid "Supported databases:"
99208 msgstr "Bases de dades suportades:"
99210 -#: nss/getent.c:787 nscd/nscd.c:119 nscd/nscd_nischeck.c:64
99211 +#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64
99212 msgid "wrong number of arguments"
99213 msgstr "el nombre d'arguments és incorrecte"
99215 -#: nss/getent.c:797
99216 +#: nss/getent.c:800
99217 #, c-format
99218 msgid "Unknown database: %s\n"
99219 msgstr "La base de dades no és coneguda: %s\n"
99220 @@ -3866,70 +3866,74 @@
99221 msgid "invalid pointer size"
99222 msgstr "el tamany del punter no és vàlid"
99224 -#: inet/rcmd.c:174 inet/rcmd.c:177
99225 +#: inet/rcmd.c:163 inet/rcmd.c:166
99226 +msgid "rcmd: Cannot allocate memory\n"
99227 +msgstr "rcmd: No s'ha pogut reservar memòria\n"
99229 +#: inet/rcmd.c:185 inet/rcmd.c:188
99230 msgid "rcmd: socket: All ports in use\n"
99231 msgstr "rcmd: socket: Tots els ports estan sent usats\n"
99233 -#: inet/rcmd.c:211
99234 +#: inet/rcmd.c:222
99235 #, c-format
99236 msgid "connect to address %s: "
99237 msgstr "connexió amb l'adreça «%s»: "
99239 -#: inet/rcmd.c:229
99240 +#: inet/rcmd.c:240
99241 #, c-format
99242 msgid "Trying %s...\n"
99243 msgstr "S'està provant amb «%s»...\n"
99245 -#: inet/rcmd.c:278
99246 +#: inet/rcmd.c:289
99247 #, c-format
99248 msgid "rcmd: write (setting up stderr): %m\n"
99249 msgstr "rcmd: write (en preparar l'eixida estàndard d'errors): %m\n"
99251 -#: inet/rcmd.c:299
99252 +#: inet/rcmd.c:310
99253 #, c-format
99254 msgid "rcmd: poll (setting up stderr): %m\n"
99255 msgstr "rcmd: poll (en preparar l'exida estàndard d'errors): %m\n"
99257 -#: inet/rcmd.c:302
99258 +#: inet/rcmd.c:313
99259 msgid "poll: protocol failure in circuit setup\n"
99260 msgstr "poll: fallada del protocol en configurar el circuit\n"
99262 -#: inet/rcmd.c:346
99263 +#: inet/rcmd.c:358
99264 msgid "socket: protocol failure in circuit setup\n"
99265 msgstr "socket: fallada del protocol en configurar el circuit\n"
99267 -#: inet/rcmd.c:368
99268 +#: inet/rcmd.c:387
99269 #, c-format
99270 msgid "rcmd: %s: short read"
99271 msgstr "rcmd: %s: lectura incompleta"
99273 -#: inet/rcmd.c:524
99274 +#: inet/rcmd.c:549
99275 msgid "lstat failed"
99276 msgstr "ha fallat lstat()"
99278 # ivb (2001/10/31)
99279 # ivb Cal tenir en compte que «ordinary» a l'anglés és cosa pler diferent ;)
99280 -#: inet/rcmd.c:526
99281 +#: inet/rcmd.c:551
99282 msgid "not regular file"
99283 msgstr "no és un fitxer ordinari"
99285 -#: inet/rcmd.c:531
99286 +#: inet/rcmd.c:556
99287 msgid "cannot open"
99288 msgstr "no s'ha pogut obrir"
99290 -#: inet/rcmd.c:533
99291 +#: inet/rcmd.c:558
99292 msgid "fstat failed"
99293 msgstr "ha fallat fstat()"
99295 -#: inet/rcmd.c:535
99296 +#: inet/rcmd.c:560
99297 msgid "bad owner"
99298 msgstr "el propietari no és vàlid"
99300 -#: inet/rcmd.c:537
99301 +#: inet/rcmd.c:562
99302 msgid "writeable by other than owner"
99303 msgstr "és modificable per altres que no en són el propietari"
99305 -#: inet/rcmd.c:539
99306 +#: inet/rcmd.c:564
99307 msgid "hard linked somewhere"
99308 msgstr "té un enllaç fort en altre lloc"
99310 @@ -4146,109 +4150,109 @@
99311 msgid "Cannot receive reply to broadcast"
99312 msgstr "No s'ha pogut rebre una resposta a la difusió"
99314 -#: sunrpc/rpc_main.c:289
99315 +#: sunrpc/rpc_main.c:288
99316 #, c-format
99317 msgid "%s: output would overwrite %s\n"
99318 msgstr "%s: l'eixida sobreescriuria «%s»\n"
99320 -#: sunrpc/rpc_main.c:296
99321 +#: sunrpc/rpc_main.c:295
99322 #, c-format
99323 msgid "%s: unable to open %s: %m\n"
99324 msgstr "%s: no s'ha pogut obrir «%s»: %m\n"
99326 -#: sunrpc/rpc_main.c:308
99327 +#: sunrpc/rpc_main.c:307
99328 #, c-format
99329 msgid "%s: while writing output %s: %m"
99330 msgstr "%s: en escriure en l'eixida «%s»: %m"
99332 -#: sunrpc/rpc_main.c:343
99333 +#: sunrpc/rpc_main.c:342
99334 #, c-format
99335 msgid "cannot find C preprocessor: %s \n"
99336 msgstr "no s'ha pogut trobar el preprocessador de C: %s\n"
99338 -#: sunrpc/rpc_main.c:351
99339 +#: sunrpc/rpc_main.c:350
99340 msgid "cannot find any C preprocessor (cpp)\n"
99341 msgstr "no s'ha pogut trobar cap preprocessador de C (cpp)\n"
99343 -#: sunrpc/rpc_main.c:420
99344 +#: sunrpc/rpc_main.c:419
99345 #, c-format
99346 msgid "%s: C preprocessor failed with signal %d\n"
99347 msgstr "%s: el preprocessador de C ha fallat amb el senyal %d\n"
99349 -#: sunrpc/rpc_main.c:423
99350 +#: sunrpc/rpc_main.c:422
99351 #, c-format
99352 msgid "%s: C preprocessor failed with exit code %d\n"
99353 msgstr "%s: el preprocessador de C ha fallat amb el codi d'eixida %d\n"
99355 -#: sunrpc/rpc_main.c:463
99356 +#: sunrpc/rpc_main.c:462
99357 #, c-format
99358 msgid "illegal nettype :`%s'\n"
99359 msgstr "el tipus de xarxa no és permés: «%s»\n"
99361 -#: sunrpc/rpc_main.c:1105
99362 +#: sunrpc/rpc_main.c:1104
99363 msgid "rpcgen: too many defines\n"
99364 msgstr "rpcgen: hi ha massa definicions\n"
99366 -#: sunrpc/rpc_main.c:1117
99367 +#: sunrpc/rpc_main.c:1116
99368 msgid "rpcgen: arglist coding error\n"
99369 msgstr "rpcgen: error en codificar els arguments\n"
99371 #. TRANS: the file will not be removed; this is an
99372 #. TRANS: informative message.
99373 -#: sunrpc/rpc_main.c:1150
99374 +#: sunrpc/rpc_main.c:1149
99375 #, c-format
99376 msgid "file `%s' already exists and may be overwritten\n"
99377 msgstr "el fitxer «%s» ja existeix i podria ser sobreescrit\n"
99379 -#: sunrpc/rpc_main.c:1195
99380 +#: sunrpc/rpc_main.c:1194
99381 msgid "Cannot specify more than one input file!\n"
99382 msgstr "No es pot especificar més d'un fitxer d'entrada!\n"
99384 -#: sunrpc/rpc_main.c:1365
99385 +#: sunrpc/rpc_main.c:1364
99386 msgid "This implementation doesn't support newstyle or MT-safe code!\n"
99387 msgstr "Aquesta implementació no suporta l'estil nou ni el codi compatible amb MT!\n"
99389 -#: sunrpc/rpc_main.c:1374
99390 +#: sunrpc/rpc_main.c:1373
99391 msgid "Cannot use netid flag with inetd flag!\n"
99392 msgstr "No es pot usar l'opció idxarxa (-n) amb l'opció inetd (-I)!\n"
99394 -#: sunrpc/rpc_main.c:1386
99395 +#: sunrpc/rpc_main.c:1385
99396 msgid "Cannot use netid flag without TIRPC!\n"
99397 msgstr "No es pot usar l'opció idxarxa (-n) sense TIRPC!\n"
99399 -#: sunrpc/rpc_main.c:1393
99400 +#: sunrpc/rpc_main.c:1392
99401 msgid "Cannot use table flags with newstyle!\n"
99402 msgstr "No es pot usar opcions de taula amb l'estil nou (-N)!\n"
99404 -#: sunrpc/rpc_main.c:1412
99405 +#: sunrpc/rpc_main.c:1411
99406 msgid "\"infile\" is required for template generation flags.\n"
99407 msgstr "cal «fitxerentrada» pels senyaladors de generació de plantilles.\n"
99409 -#: sunrpc/rpc_main.c:1417
99410 +#: sunrpc/rpc_main.c:1416
99411 msgid "Cannot have more than one file generation flag!\n"
99412 msgstr "No es pot tenir més d'un senyalador de generació de fitxers!\n"
99414 -#: sunrpc/rpc_main.c:1426
99415 +#: sunrpc/rpc_main.c:1425
99416 #, c-format
99417 msgid "usage: %s infile\n"
99418 msgstr "Forma d'ús: %s fitxerentrada\n"
99420 -#: sunrpc/rpc_main.c:1427
99421 +#: sunrpc/rpc_main.c:1426
99422 #, c-format
99423 msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
99424 msgstr "\t%s [-abkCLNTM][-Dnom[=valor]] [-i tamany] [-I [-K segons]] [-Y camí] fitxerentrada\n"
99426 -#: sunrpc/rpc_main.c:1429
99427 +#: sunrpc/rpc_main.c:1428
99428 #, c-format
99429 msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
99430 msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o fitxereixida] [fitxerentrada]\n"
99432 -#: sunrpc/rpc_main.c:1431
99433 +#: sunrpc/rpc_main.c:1430
99434 #, c-format
99435 msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
99436 msgstr "\t%s [-s tipusdexarxa]* [-o fitxereixida] [fitxerentrada]\n"
99438 -#: sunrpc/rpc_main.c:1432
99439 +#: sunrpc/rpc_main.c:1431
99440 #, c-format
99441 msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
99442 msgstr "\t%s [-n idxarxa]* [-o fitxereixida] [fitxerentrada]\n"
99443 @@ -5126,7 +5130,7 @@
99444 msgid "while allocating hash table entry"
99445 msgstr "en reservar una entrada en la taula de dispersió"
99447 -#: nscd/cache.c:150 nscd/connections.c:185
99448 +#: nscd/cache.c:150 nscd/connections.c:187
99449 #, c-format
99450 msgid "cannot stat() file `%s': %s"
99451 msgstr "ha fallat stat() sobre el fitxer «%s»: %s"
99452 @@ -5139,27 +5143,32 @@
99453 msgid "Cannot run nscd in secure mode as unprivileged user"
99454 msgstr "no es pot executar «nscd» en mode segur com a usuari sense privilegis"
99456 -#: nscd/connections.c:199
99457 +#: nscd/connections.c:175
99458 +#, c-format
99459 +msgid "while allocating cache: %s"
99460 +msgstr "en reservar la memòria cau: %s"
99462 +#: nscd/connections.c:200
99463 #, c-format
99464 msgid "cannot open socket: %s"
99465 msgstr "no s'ha pogut obrir el connector: %s"
99467 -#: nscd/connections.c:217
99468 +#: nscd/connections.c:218
99469 #, c-format
99470 msgid "cannot enable socket to accept connections: %s"
99471 msgstr "no s'ha pogut habilitar el connector per acceptar connexions: %s"
99473 -#: nscd/connections.c:259
99474 +#: nscd/connections.c:260
99475 #, c-format
99476 msgid "handle_request: request received (Version = %d)"
99477 msgstr "handle_request: s'ha rebut una petició (Versió = %d)"
99479 -#: nscd/connections.c:265
99480 +#: nscd/connections.c:266
99481 #, c-format
99482 msgid "cannot handle old request version %d; current version is %d"
99483 msgstr "no s'ha pogut atendre la petició amb versió antiga %d; la versió actual és %d"
99485 -#: nscd/connections.c:303 nscd/connections.c:325
99486 +#: nscd/connections.c:304 nscd/connections.c:326
99487 #, c-format
99488 msgid "cannot write result: %s"
99489 msgstr "no s'ha pogut escriure el resultat: %s"
99490 @@ -5169,130 +5178,130 @@
99491 # ivb dimoni «nscd» per consultar la memòria cau o invalidar-la. Per
99492 # ivb això faig servir «programa de control» (com «ndc» amb «named» o
99493 # ivb «chronyc» amb «chronyd»).
99494 -#: nscd/connections.c:404 nscd/connections.c:498
99495 +#: nscd/connections.c:405 nscd/connections.c:499
99496 #, c-format
99497 msgid "error getting callers id: %s"
99498 msgstr "error en obtenir l'identificador del programa de control: %s"
99500 -#: nscd/connections.c:470
99501 +#: nscd/connections.c:471
99502 #, c-format
99503 msgid "while accepting connection: %s"
99504 msgstr "en acceptar la connexió: %s"
99506 -#: nscd/connections.c:481
99507 +#: nscd/connections.c:482
99508 #, c-format
99509 msgid "short read while reading request: %s"
99510 msgstr "lectura incompleta en llegir la petició: %s"
99512 -#: nscd/connections.c:517
99513 +#: nscd/connections.c:518
99514 #, c-format
99515 msgid "key length in request too long: %d"
99516 msgstr "la longitud de la clau de la petició és massa gran: %d"
99518 -#: nscd/connections.c:531
99519 +#: nscd/connections.c:532
99520 #, c-format
99521 msgid "short read while reading request key: %s"
99522 msgstr "lectura incompleta en llegir la clau de la petició: %s"
99524 -#: nscd/connections.c:590 nscd/connections.c:591 nscd/connections.c:610
99525 -#: nscd/connections.c:623 nscd/connections.c:629 nscd/connections.c:636
99526 +#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611
99527 +#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637
99528 #, c-format
99529 msgid "Failed to run nscd as user '%s'"
99530 msgstr "No s'ha pogut executar «nscd» com a l'usuari «%s»"
99532 -#: nscd/connections.c:611
99533 +#: nscd/connections.c:612
99534 msgid "getgrouplist failed"
99535 msgstr "ha fallat getgrouplist()"
99537 -#: nscd/connections.c:624
99538 +#: nscd/connections.c:625
99539 msgid "setgroups failed"
99540 msgstr "ha fallat setgroups()"
99542 -#: nscd/grpcache.c:102 nscd/hstcache.c:110 nscd/pwdcache.c:108
99543 +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
99544 msgid "while allocating key copy"
99545 msgstr "en reservar una còpia de la clau"
99547 -#: nscd/grpcache.c:152 nscd/hstcache.c:167 nscd/pwdcache.c:145
99548 +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
99549 msgid "while allocating cache entry"
99550 msgstr "en reservar una entrada en la memòria cau"
99552 -#: nscd/grpcache.c:195 nscd/hstcache.c:281 nscd/pwdcache.c:191
99553 +#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192
99554 #, c-format
99555 msgid "short write in %s: %s"
99556 msgstr "escriptura incompleta en «%s»: %s"
99558 -#: nscd/grpcache.c:217
99559 +#: nscd/grpcache.c:218
99560 #, c-format
99561 msgid "Haven't found \"%s\" in group cache!"
99562 msgstr "No s'ha trobat «%s» en la memòria cau de grups!"
99564 -#: nscd/grpcache.c:292
99565 +#: nscd/grpcache.c:284
99566 #, c-format
99567 msgid "Invalid numeric gid \"%s\"!"
99568 msgstr "«%s» no és un gid numèric vàlid!"
99570 -#: nscd/grpcache.c:299
99571 +#: nscd/grpcache.c:291
99572 #, c-format
99573 msgid "Haven't found \"%d\" in group cache!"
99574 msgstr "No s'ha trobat «%d» en la memòria cau de grups!"
99576 -#: nscd/hstcache.c:303 nscd/hstcache.c:378 nscd/hstcache.c:456
99577 -#: nscd/hstcache.c:533
99578 +#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435
99579 +#: nscd/hstcache.c:500
99580 #, c-format
99581 msgid "Haven't found \"%s\" in hosts cache!"
99582 msgstr "No s'ha trobat «%s» en la memòria cau d'estacions!"
99584 -#: nscd/nscd.c:80
99585 +#: nscd/nscd.c:85
99586 msgid "Read configuration data from NAME"
99587 msgstr "Llig les dades de configuració de NOM"
99589 -#: nscd/nscd.c:82
99590 +#: nscd/nscd.c:87
99591 msgid "Do not fork and display messages on the current tty"
99592 msgstr "No fa fork() i mostra els missatges en el terminal actual"
99594 # ivb (2001/10/30)
99595 # ivb Es refereix al _nombre_ de fils a llançar.
99596 -#: nscd/nscd.c:83
99597 +#: nscd/nscd.c:88
99598 msgid "NUMBER"
99599 msgstr "NOMBRE"
99601 -#: nscd/nscd.c:83
99602 +#: nscd/nscd.c:88
99603 msgid "Start NUMBER threads"
99604 msgstr "Llança NOMBRE fils d'exeució"
99606 -#: nscd/nscd.c:84
99607 +#: nscd/nscd.c:89
99608 msgid "Shut the server down"
99609 msgstr "Termina el servidor"
99611 -#: nscd/nscd.c:85
99612 +#: nscd/nscd.c:90
99613 msgid "Print current configuration statistic"
99614 msgstr "Mostra estadístiques de la configuració actual"
99616 -#: nscd/nscd.c:86
99617 +#: nscd/nscd.c:91
99618 msgid "TABLE"
99619 msgstr "TAULA"
99621 -#: nscd/nscd.c:87
99622 +#: nscd/nscd.c:92
99623 msgid "Invalidate the specified cache"
99624 msgstr "Invalida la memòria cau especificada"
99626 -#: nscd/nscd.c:88
99627 +#: nscd/nscd.c:93
99628 msgid "TABLE,yes"
99629 msgstr "TAULA,yes"
99631 -#: nscd/nscd.c:88
99632 +#: nscd/nscd.c:93
99633 msgid "Use separate cache for each user"
99634 msgstr "Usa una memòria cau diferent per cada usuari"
99636 -#: nscd/nscd.c:93
99637 +#: nscd/nscd.c:98
99638 msgid "Name Service Cache Daemon."
99639 msgstr "Dimoni de memòria cau del servei de noms."
99641 -#: nscd/nscd.c:126
99642 +#: nscd/nscd.c:131
99643 msgid "already running"
99644 msgstr "ja es troba en marxa"
99646 -#: nscd/nscd.c:192 nscd/nscd.c:212 nscd/nscd.c:218
99647 +#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269
99648 msgid "Only root is allowed to use this option!"
99649 msgstr "Només root pot usar aquesta opció!"
99651 @@ -5382,22 +5391,22 @@
99652 "%15ld%% ràtio d'encerts de memòria cau\n"
99653 "%15s comprovar /etc/%s per si hi ha hagut canvis?\n"
99655 -#: nscd/pwdcache.c:213
99656 +#: nscd/pwdcache.c:214
99657 #, c-format
99658 msgid "Haven't found \"%s\" in password cache!"
99659 msgstr "No s'ha trobat «%s» en la memòria cau d'usuaris!"
99661 -#: nscd/pwdcache.c:288
99662 +#: nscd/pwdcache.c:280
99663 #, c-format
99664 msgid "Invalid numeric uid \"%s\"!"
99665 msgstr "«%s» no és un uid numèric vàlid!"
99667 -#: nscd/pwdcache.c:295
99668 +#: nscd/pwdcache.c:287
99669 #, c-format
99670 msgid "Haven't found \"%d\" in password cache!"
99671 msgstr "No s'ha trobat «%d» en la memòria cau d'usuaris!"
99673 -#: elf/../sysdeps/generic/dl-sysdep.c:297
99674 +#: elf/../sysdeps/generic/dl-sysdep.c:357
99675 msgid "cannot create capability list"
99676 msgstr "no s'ha pogut crear la llista de capacitats"
99678 @@ -5454,7 +5463,7 @@
99679 msgid ", OS ABI: %s %d.%d.%d"
99680 msgstr ", ABI del SO: %s %d.%d.%d"
99682 -#: elf/cache.c:136 elf/ldconfig.c:1033
99683 +#: elf/cache.c:136 elf/ldconfig.c:1045
99684 #, c-format
99685 msgid "Can't open cache file %s\n"
99686 msgstr "No s'ha pogut obrir el fitxer «%s» de memòria cau\n"
99687 @@ -5500,19 +5509,19 @@
99688 msgid "Renaming of %s to %s failed"
99689 msgstr "No s'ha pogut reanomenar «%s» a «%s»"
99691 -#: elf/dl-close.c:113
99692 +#: elf/dl-close.c:128
99693 msgid "shared object not open"
99694 msgstr "l'objecte compartit no és obert"
99696 # ivb (2002/10/29)
99697 # ivb TLS = Thread Local Storage
99698 -#: elf/dl-close.c:357 elf/dl-open.c:436
99699 +#: elf/dl-close.c:486 elf/dl-open.c:444
99700 msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
99701 msgstr "El comptador de generació de TLS s'ha esgotat! Per favor, envieu un informe amb el guió «glibcbug»."
99703 # ivb (2001/11/05)
99704 # ivb DST = Dynamic String Token (component cadena dinàmica)
99705 -#: elf/dl-deps.c:111 elf/dl-open.c:177
99706 +#: elf/dl-deps.c:111 elf/dl-open.c:183
99707 msgid "DST not allowed in SUID/SGID programs"
99708 msgstr "no es permeten components cadena dinàmica (DST) en programes SUID/SGID"
99710 @@ -5531,183 +5540,195 @@
99711 msgid "cannot allocate dependency list"
99712 msgstr "no s'ha pogut reservar la llista de dependències"
99714 -#: elf/dl-deps.c:492 elf/dl-deps.c:547
99715 +#: elf/dl-deps.c:494 elf/dl-deps.c:549
99716 msgid "cannot allocate symbol search list"
99717 msgstr "no s'ha pogut reservar la llista de recerca de símbols"
99719 # ivb (2002/10/21)
99720 # ivb LD_TRACE_PRELINKING és una variable d'entorn, no és part del filtre.
99721 -#: elf/dl-deps.c:532
99722 +#: elf/dl-deps.c:534
99723 msgid "Filters not supported with LD_TRACE_PRELINKING"
99724 msgstr "Amb LD_TRACE_PRELINKING no es suporten els filtres"
99726 -#: elf/dl-error.c:73
99727 +#: elf/dl-error.c:75
99728 msgid "DYNAMIC LINKER BUG!!!"
99729 msgstr "ERROR EN L'ENLLAÇADOR DINÀMIC!!!"
99731 -#: elf/dl-error.c:106
99732 +#: elf/dl-error.c:108
99733 msgid "error while loading shared libraries"
99734 msgstr "error en carregar les biblioteques dinàmiques"
99736 -#: elf/dl-load.c:338
99737 +#: elf/dl-load.c:339
99738 msgid "cannot allocate name record"
99739 msgstr "no s'ha pogut reservar el registre de nom"
99741 -#: elf/dl-load.c:440 elf/dl-load.c:520 elf/dl-load.c:614 elf/dl-load.c:709
99742 +#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707
99743 msgid "cannot create cache for search path"
99744 msgstr "no s'ha pogut crear la memòria cau dels camins de recerca"
99746 -#: elf/dl-load.c:545
99747 +#: elf/dl-load.c:543
99748 msgid "cannot create RUNPATH/RPATH copy"
99749 msgstr "no s'ha pogut crear una còpia de RUNPATH/RPATH"
99751 -#: elf/dl-load.c:600
99752 +#: elf/dl-load.c:598
99753 msgid "cannot create search path array"
99754 msgstr "no s'ha pogut crear el vector de camins de recerca"
99756 -#: elf/dl-load.c:796
99757 +#: elf/dl-load.c:794
99758 msgid "cannot stat shared object"
99759 msgstr "ha fallat stat() sobre l'objecte compartit"
99761 # ivb (2001/10/28)
99762 # ivb Es refereix a /dev/zero .
99763 -#: elf/dl-load.c:840
99764 +#: elf/dl-load.c:838
99765 msgid "cannot open zero fill device"
99766 msgstr "no s'ha pogut obrir el dispositiu de zeros"
99768 -#: elf/dl-load.c:849 elf/dl-load.c:1855
99769 +#: elf/dl-load.c:847 elf/dl-load.c:1902
99770 msgid "cannot create shared object descriptor"
99771 msgstr "no s'ha pogut crear el descriptor d'objecte compartit"
99773 -#: elf/dl-load.c:868 elf/dl-load.c:1351 elf/dl-load.c:1434
99774 +#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481
99775 msgid "cannot read file data"
99776 msgstr "no s'han pogut llegir les dades del fitxer"
99778 -#: elf/dl-load.c:908
99779 +#: elf/dl-load.c:906
99780 msgid "ELF load command alignment not page-aligned"
99781 msgstr "L'alineament de l'ordre ELF de càrrega no està alineada amb la pàgina"
99783 -#: elf/dl-load.c:915
99784 +#: elf/dl-load.c:913
99785 msgid "ELF load command address/offset not properly aligned"
99786 msgstr "L'adreça/desplaçament de l'ordre ELF de càrrega no està correctament alineada"
99788 -#: elf/dl-load.c:996
99789 +#: elf/dl-load.c:988
99790 +msgid "cannot allocate TLS data structures for initial thread"
99791 +msgstr "no s'han pogut reservar les estructures de dades TLS pel fil inicial"
99793 +#: elf/dl-load.c:1012
99794 +msgid "cannot handle TLS data"
99795 +msgstr "no es pot tractar amb dades TLS"
99797 +#: elf/dl-load.c:1047
99798 msgid "failed to map segment from shared object"
99799 msgstr "no s'ha pogut mapar un segment de l'objecte compartit"
99801 -#: elf/dl-load.c:1020
99802 +#: elf/dl-load.c:1071
99803 msgid "cannot dynamically load executable"
99804 msgstr "no s'ha pogut carregar dinàmicament l'executable"
99806 -#: elf/dl-load.c:1081
99807 +#: elf/dl-load.c:1132
99808 msgid "cannot change memory protections"
99809 msgstr "no s'han pogut canviar les proteccions de memòria"
99811 -#: elf/dl-load.c:1100
99812 +#: elf/dl-load.c:1151
99813 msgid "cannot map zero-fill pages"
99814 msgstr "no s'han pogut mapar les pàgines plenes de zeros"
99816 -#: elf/dl-load.c:1118
99817 +#: elf/dl-load.c:1169
99818 msgid "cannot allocate memory for program header"
99819 msgstr "no s'ha pogut reservar memòria per la capçalera del programa"
99821 -#: elf/dl-load.c:1149
99822 +#: elf/dl-load.c:1200
99823 msgid "object file has no dynamic section"
99824 msgstr "el fitxer objecte no té secció dinàmica"
99826 -#: elf/dl-load.c:1193
99827 +#: elf/dl-load.c:1240
99828 msgid "shared object cannot be dlopen()ed"
99829 msgstr "ha fallat dlopen() sobre l'objecte compartit"
99831 -#: elf/dl-load.c:1216
99832 +#: elf/dl-load.c:1263
99833 msgid "cannot create searchlist"
99834 msgstr "no s'ha pogut crear la llista de recerca"
99836 -#: elf/dl-load.c:1351
99837 +#: elf/dl-load.c:1398
99838 msgid "file too short"
99839 msgstr "el fitxer és massa curt"
99841 -#: elf/dl-load.c:1374
99842 +#: elf/dl-load.c:1421
99843 msgid "invalid ELF header"
99844 msgstr "la capçalera ELF no és vàlida"
99846 -#: elf/dl-load.c:1383
99847 +#: elf/dl-load.c:1430
99848 msgid "ELF file data encoding not big-endian"
99849 msgstr "La codificació de les dades del fitxer ELF no és big-endian"
99851 -#: elf/dl-load.c:1385
99852 +#: elf/dl-load.c:1432
99853 msgid "ELF file data encoding not little-endian"
99854 msgstr "La codificació de les dades del fitxer ELF no és little-endian"
99856 -#: elf/dl-load.c:1389
99857 +#: elf/dl-load.c:1436
99858 msgid "ELF file version ident does not match current one"
99859 msgstr "La identificació de la versió del fitxer ELF no concorda amb l'actual"
99861 # ivb (2001/11(06)
99862 # ivb ABI = Application Binary Interface (interfície binària d'aplicació)
99863 -#: elf/dl-load.c:1393
99864 +#: elf/dl-load.c:1440
99865 msgid "ELF file OS ABI invalid"
99866 msgstr "L'ABI de sistema operatiu del fitxer ELF no és vàlida"
99868 -#: elf/dl-load.c:1395
99869 +#: elf/dl-load.c:1442
99870 msgid "ELF file ABI version invalid"
99871 msgstr "La versió de l'ABI del fitxer ELF no és vàlida"
99873 -#: elf/dl-load.c:1398
99874 +#: elf/dl-load.c:1445
99875 msgid "internal error"
99876 msgstr "error intern"
99878 -#: elf/dl-load.c:1405
99879 +#: elf/dl-load.c:1452
99880 msgid "ELF file version does not match current one"
99881 msgstr "La versió del fitxer ELF no concorda amb l'actual"
99883 # ivb (2001/11/01)
99884 # ivb La traducció completa de «phentsize» vindria a ser: tamany d'entrada
99885 # ivb de taula de la capçalera de programa.
99886 -#: elf/dl-load.c:1413
99887 +#: elf/dl-load.c:1460
99888 msgid "ELF file's phentsize not the expected size"
99889 msgstr "El valor de «phentsize» del fitxer ELF no és l'esperat"
99891 -#: elf/dl-load.c:1419
99892 +#: elf/dl-load.c:1466
99893 msgid "only ET_DYN and ET_EXEC can be loaded"
99894 msgstr "només es poden carregar els tipus ET_DYN i ET_EXEC"
99896 -#: elf/dl-load.c:1870
99897 +#: elf/dl-load.c:1917
99898 msgid "cannot open shared object file"
99899 msgstr "no s'ha pogut obrir el fitxer objecte compartit"
99901 -#: elf/dl-lookup.c:248 elf/dl-lookup.c:413
99902 +#: elf/dl-lookup.c:265 elf/dl-lookup.c:430
99903 msgid "relocation error"
99904 msgstr "error de reubicació"
99906 -#: elf/dl-open.c:105
99907 +#: elf/dl-open.c:111
99908 msgid "cannot extend global scope"
99909 msgstr "no s'ha pogut estendre l'àmbit global"
99911 -#: elf/dl-open.c:208
99912 +#: elf/dl-open.c:214
99913 msgid "empty dynamic string token substitution"
99914 msgstr "la substitució del component cadena dinàmica és buida"
99916 -#: elf/dl-open.c:345 elf/dl-open.c:356
99917 +#: elf/dl-open.c:351 elf/dl-open.c:362
99918 msgid "cannot create scope list"
99919 msgstr "no s'ha pogut crear la llista d'àmbits"
99921 -#: elf/dl-open.c:416
99922 +#: elf/dl-open.c:424
99923 msgid "cannot create TLS data structures"
99924 msgstr "no s'han pogut crear les estructures de dades TLS"
99926 -#: elf/dl-open.c:478
99927 +#: elf/dl-open.c:486
99928 msgid "invalid mode for dlopen()"
99929 msgstr "el mode de dlopen() no és vàlid"
99931 -#: elf/dl-reloc.c:88
99932 +#: elf/dl-reloc.c:58
99933 +msgid "shared object cannot be dlopen()ed: static TLS memory too small"
99934 +msgstr "ha fallat dlopen() sobre l'objecte compartit: la memòria TLS estàtica és massa menuda"
99936 +#: elf/dl-reloc.c:118
99937 msgid "cannot make segment writable for relocation"
99938 msgstr "no s'ha pogut fer escrivible el segment per reubicar-lo"
99940 # ivb (2002/10/21)
99941 # ivb PLT = Procedure Linkage Table, Taula d'Enllaçat de Procediments
99942 # ivb PLTREL = tipus de reubicació usada per la PLT
99943 -#: elf/dl-reloc.c:174
99944 +#: elf/dl-reloc.c:219
99945 #, c-format
99946 msgid "%s: profiler found no PLTREL in object %s\n"
99947 msgstr "%s: el perfilador no ha trobat el PLTREL de l'objecte «%s»\n"
99948 @@ -5715,12 +5736,12 @@
99949 # ivb (2002/10/29)
99950 # ivb Açò és un cacau, però pense que ací hauria de posar PLT i no PLTREL.
99951 # ivb Total, qui ho va a llegir?
99952 -#: elf/dl-reloc.c:186
99953 +#: elf/dl-reloc.c:231
99954 #, c-format
99955 msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
99956 msgstr "%s: el perfilador ha exhaurit la memòria en calcular el PLTREL de «%s»\n"
99958 -#: elf/dl-reloc.c:201
99959 +#: elf/dl-reloc.c:246
99960 msgid "cannot restore segment prot after reloc"
99961 msgstr "no s'ha pogut restaurar la protecció del segment després de reubicar-lo"
99963 @@ -5776,123 +5797,123 @@
99964 msgid "Configure Dynamic Linker Run Time Bindings."
99965 msgstr "Configura els vincles en temps d'execució de l'enllaçador dinàmic."
99967 -#: elf/ldconfig.c:282
99968 +#: elf/ldconfig.c:294
99969 #, c-format
99970 msgid "Path `%s' given more than once"
99971 msgstr "S'ha especificat el camí «%s» més d'una volta"
99973 -#: elf/ldconfig.c:326
99974 +#: elf/ldconfig.c:338
99975 #, c-format
99976 msgid "%s is not a known library type"
99977 msgstr "«%s» no és un tipus conegut de biblioteca"
99979 -#: elf/ldconfig.c:344
99980 +#: elf/ldconfig.c:356
99981 #, c-format
99982 msgid "Can't stat %s"
99983 msgstr "Ha fallat stat() sobre «%s»"
99985 -#: elf/ldconfig.c:414
99986 +#: elf/ldconfig.c:426
99987 #, c-format
99988 msgid "Can't stat %s\n"
99989 msgstr "Ha fallat stat() sobre «%s»\n"
99991 -#: elf/ldconfig.c:424
99992 +#: elf/ldconfig.c:436
99993 #, c-format
99994 msgid "%s is not a symbolic link\n"
99995 msgstr "«%s» no és un enllaç simbòlic\n"
99997 -#: elf/ldconfig.c:443
99998 +#: elf/ldconfig.c:455
99999 #, c-format
100000 msgid "Can't unlink %s"
100001 msgstr "No s'ha pogut desenllaçar «%s»"
100003 -#: elf/ldconfig.c:449
100004 +#: elf/ldconfig.c:461
100005 #, c-format
100006 msgid "Can't link %s to %s"
100007 msgstr "No s'ha pogut crear un enllaç des de «%s» cap a «%s»"
100009 # ivb (2001/10/28)
100010 # ivb Es refereix a un enllaç -> masculí.
100011 -#: elf/ldconfig.c:455
100012 +#: elf/ldconfig.c:467
100013 msgid " (changed)\n"
100014 msgstr " (canviat)\n"
100016 # ivb (2001/10/28)
100017 # ivb Es refereix a fer o no l'enllaç, no importa el gènere.
100018 -#: elf/ldconfig.c:457
100019 +#: elf/ldconfig.c:469
100020 msgid " (SKIPPED)\n"
100021 msgstr " (SALTAT)\n"
100023 -#: elf/ldconfig.c:512
100024 +#: elf/ldconfig.c:524
100025 #, c-format
100026 msgid "Can't find %s"
100027 msgstr "No s'ha pogut trobar «%s»"
100029 -#: elf/ldconfig.c:528
100030 +#: elf/ldconfig.c:540
100031 #, c-format
100032 msgid "Can't lstat %s"
100033 msgstr "Ha fallat lstat() sobre «%s»"
100035 -#: elf/ldconfig.c:535
100036 +#: elf/ldconfig.c:547
100037 #, c-format
100038 msgid "Ignored file %s since it is not a regular file."
100039 msgstr "Es descarta el fitxer «%s» que no és un fitxer ordinari."
100041 -#: elf/ldconfig.c:543
100042 +#: elf/ldconfig.c:555
100043 #, c-format
100044 msgid "No link created since soname could not be found for %s"
100045 msgstr "No s'ha creat l'enllaç perquè no s'ha trobat el nom d'objecte compartit de «%s»"
100047 -#: elf/ldconfig.c:634
100048 +#: elf/ldconfig.c:646
100049 #, c-format
100050 msgid "Can't open directory %s"
100051 msgstr "No s'ha pogut obrir el directori «%s»"
100053 -#: elf/ldconfig.c:689 elf/ldconfig.c:736
100054 +#: elf/ldconfig.c:701 elf/ldconfig.c:748
100055 #, c-format
100056 msgid "Cannot lstat %s"
100057 msgstr "Ha fallat lstat() sobre «%s»"
100059 -#: elf/ldconfig.c:701
100060 +#: elf/ldconfig.c:713
100061 #, c-format
100062 msgid "Cannot stat %s"
100063 msgstr "Ha fallat stat() sobre «%s»"
100065 -#: elf/ldconfig.c:758 elf/readlib.c:93
100066 +#: elf/ldconfig.c:770 elf/readlib.c:93
100067 #, c-format
100068 msgid "Input file %s not found.\n"
100069 msgstr "No s'ha trobat el fitxer d'entrada «%s».\n"
100071 -#: elf/ldconfig.c:792
100072 +#: elf/ldconfig.c:804
100073 #, c-format
100074 msgid "libc5 library %s in wrong directory"
100075 msgstr "la bibliotexa «%s» per libc5 es troba en un directori incorrecte"
100077 -#: elf/ldconfig.c:795
100078 +#: elf/ldconfig.c:807
100079 #, c-format
100080 msgid "libc6 library %s in wrong directory"
100081 msgstr "la biblioteca «%s» per libc6 es troba en un directori incorrecte"
100083 -#: elf/ldconfig.c:798
100084 +#: elf/ldconfig.c:810
100085 #, c-format
100086 msgid "libc4 library %s in wrong directory"
100087 msgstr "la biblioteca «%s» per libc4 es troba en un directori incorrecte"
100089 -#: elf/ldconfig.c:825
100090 +#: elf/ldconfig.c:837
100091 #, c-format
100092 msgid "libraries %s and %s in directory %s have same soname but different type."
100093 msgstr "les biblioteques «%s» i «%s» del directori «%s» tenen el mateix nom d'objecte compartit però diferent tipus."
100095 -#: elf/ldconfig.c:928
100096 +#: elf/ldconfig.c:940
100097 #, c-format
100098 msgid "Can't open configuration file %s"
100099 msgstr "No s'ha pogut obrir el fitxer «%s» de configuració"
100101 -#: elf/ldconfig.c:1012
100102 +#: elf/ldconfig.c:1024
100103 msgid "Can't chdir to /"
100104 msgstr "No s'ha pogut canviar al directori /"
100106 -#: elf/ldconfig.c:1054
100107 +#: elf/ldconfig.c:1066
100108 #, c-format
100109 msgid "Can't open cache file directory %s\n"
100110 msgstr "No s'ha pogut obrir el directori «%s» de fitxers de memòria cau\n"
100111 @@ -6005,12 +6026,3 @@
100112 #: elf/sprof.c:936 elf/sprof.c:988
100113 msgid "cannot allocate symbol data"
100114 msgstr "no s'han pogut reservar les dades de símbols"
100116 -#~ msgid "\t\t\t\t\t\t\t %s: value for field `%s' must be in range %d...%d"
100117 -#~ msgstr "\t\t\t\t\t\t\t %s: el valor del camp «%s» ha d'estar en el rang %d...%d"
100119 -#~ msgid "Failed to look up user '%s' to run server as"
100120 -#~ msgstr "Ha fallat la recerca de l'usuari «%s», com a qui executar el servidor"
100122 -#~ msgid "no filename for profiling data given and shared object `%s' has no soname"
100123 -#~ msgstr "no s'ha especificat un fitxer de dades de perfilat i «%s» no té nom d'objecte compartit"
100124 Binary files glibc-2.3.2/po/cs.mo and glibc-2.3.2-200304020432/po/cs.mo differ
100125 Binary files glibc-2.3.2/po/da.mo and glibc-2.3.2-200304020432/po/da.mo differ
100126 diff -u -udbrN glibc-2.3.2/po/da.po glibc-2.3.2-200304020432/po/da.po
100127 --- glibc-2.3.2/po/da.po Mon Nov 11 00:14:07 2002
100128 +++ glibc-2.3.2-200304020432/po/da.po Mon Mar 10 00:17:53 2003
100129 @@ -4,9 +4,9 @@
100131 msgid ""
100132 msgstr ""
100133 -"Project-Id-Version: libc 2.3.1\n"
100134 -"POT-Creation-Date: 2002-10-02 17:22-0700\n"
100135 -"PO-Revision-Date: 2002-11-09 20:18+01:00\n"
100136 +"Project-Id-Version: libc 2.3.2\n"
100137 +"POT-Creation-Date: 2003-02-22 15:34-0800\n"
100138 +"PO-Revision-Date: 2003-03-08 20:18+01:00\n"
100139 "Last-Translator: Keld Simonsen <keld@dkuug.dk>\n"
100140 "Language-Team: Danish <dansk@klid.dk>\n"
100141 "MIME-Version: 1.0\n"
100142 @@ -259,8 +259,8 @@
100144 #: iconv/iconv_prog.c:241
100145 #, c-format
100146 -msgid "conversions from `%s' and to `%s' are not supported"
100147 -msgstr "konverteringer fra '%s' og til '%s' er ikke understøttet"
100148 +msgid "conversion from `%s' and to `%s' are not supported"
100149 +msgstr "konvertering fra '%s' og til '%s' er ikke understøttet"
100151 #: iconv/iconv_prog.c:246
100152 #, c-format
100153 @@ -285,15 +285,15 @@
100154 msgid "error while closing output file"
100155 msgstr "fejl ved lukning af udfil"
100157 -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:355 locale/programs/locale.c:268
100158 +#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274
100159 #: locale/programs/localedef.c:372 catgets/gencat.c:233
100160 #: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
100161 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
100162 msgstr "Rapportér fejl ved at bruge skriptet 'glibcbug' til <bugs@gnu.org>.\n"
100164 -#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:369 locale/programs/locale.c:281
100165 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:904
100166 -#: nss/getent.c:74 nscd/nscd.c:279 nscd/nscd_nischeck.c:90 elf/ldconfig.c:259
100167 +#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287
100168 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910
100169 +#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271
100170 #: elf/sprof.c:349
100171 #, c-format
100172 msgid ""
100173 @@ -306,9 +306,9 @@
100174 "Programmellet har ingen garanti, ikke en gang for SALGBARHED eller EGNETHED\n"
100175 "TIL NOGEN SPECIEL OPGAVE.\n"
100177 -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:374 locale/programs/locale.c:286
100178 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:909
100179 -#: nss/getent.c:79 nscd/nscd.c:284 nscd/nscd_nischeck.c:95 elf/ldconfig.c:264
100180 +#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292
100181 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915
100182 +#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276
100183 #: elf/sprof.c:355
100184 #, c-format
100185 msgid "Written by %s.\n"
100186 @@ -360,15 +360,15 @@
100187 msgid "Prefix used for all file accesses"
100188 msgstr "Præfiks brugt for alle filadgange"
100190 -#: iconv/iconvconfig.c:325 locale/programs/localedef.c:292
100191 +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
100192 msgid "no output file produced because warning were issued"
100193 msgstr "på grund af advarsler blev ingen udfil oprettet"
100195 -#: iconv/iconvconfig.c:403
100196 +#: iconv/iconvconfig.c:405
100197 msgid "while inserting in search tree"
100198 msgstr "fejl ved indsætning i søgetræ"
100200 -#: iconv/iconvconfig.c:1202
100201 +#: iconv/iconvconfig.c:1204
100202 msgid "cannot generate output file"
100203 msgstr "kan ikke generere udfil"
100205 @@ -1280,7 +1280,7 @@
100206 msgid "unterminated symbolic name"
100207 msgstr "uafsluttet symbolsk navn"
100209 -#: locale/programs/linereader.c:537 catgets/gencat.c:1166
100210 +#: locale/programs/linereader.c:537 catgets/gencat.c:1195
100211 msgid "invalid escape sequence"
100212 msgstr "ugyldig undtagelsessekvens"
100214 @@ -1310,39 +1310,39 @@
100215 msgid "trailing garbage at end of line"
100216 msgstr "efterfølgende snavs på slutningen af linien"
100218 -#: locale/programs/locale.c:73
100219 +#: locale/programs/locale.c:75
100220 msgid "System information:"
100221 msgstr "Systeminformation:"
100223 -#: locale/programs/locale.c:75
100224 +#: locale/programs/locale.c:77
100225 msgid "Write names of available locales"
100226 msgstr "Skriv navnene til tilgængelige lokaler"
100228 -#: locale/programs/locale.c:77
100229 +#: locale/programs/locale.c:79
100230 msgid "Write names of available charmaps"
100231 msgstr "Skriv navnene til tilgængelige tegntabel"
100233 -#: locale/programs/locale.c:78
100234 +#: locale/programs/locale.c:80
100235 msgid "Modify output format:"
100236 msgstr "Ændre format for uddata:"
100238 -#: locale/programs/locale.c:79
100239 +#: locale/programs/locale.c:81
100240 msgid "Write names of selected categories"
100241 msgstr "Skriv navnene til valgte kategorier"
100243 -#: locale/programs/locale.c:80
100244 +#: locale/programs/locale.c:82
100245 msgid "Write names of selected keywords"
100246 msgstr "Skriv navnene til valgte nøgleord"
100248 -#: locale/programs/locale.c:81
100249 +#: locale/programs/locale.c:83
100250 msgid "Print more information"
100251 msgstr "Skriv mere information"
100253 -#: locale/programs/locale.c:86
100254 +#: locale/programs/locale.c:88
100255 msgid "Get locale-specific information."
100256 msgstr "Hent information specifik for lokalet."
100258 -#: locale/programs/locale.c:89
100259 +#: locale/programs/locale.c:91
100260 msgid ""
100261 "NAME\n"
100262 "[-a|-m]"
100263 @@ -1350,7 +1350,7 @@
100264 "NAVN\n"
100265 "[-a|-m]"
100267 -#: locale/programs/locale.c:488
100268 +#: locale/programs/locale.c:512
100269 msgid "while preparing output"
100270 msgstr "da uddata blev forberedt"
100272 @@ -1481,16 +1481,16 @@
100273 msgid "cannot create temporary file"
100274 msgstr "Kan ikke oprette midlertidig fil"
100276 -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:302
100277 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
100278 msgid "cannot initialize archive file"
100279 msgstr "kan ikke initiere arkivfil"
100281 -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:309
100282 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
100283 msgid "cannot resize archive file"
100284 msgstr "kan ikke skifte størrelse på arkivfil"
100286 -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:318
100287 -#: locale/programs/locarchive.c:508
100288 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
100289 +#: locale/programs/locarchive.c:511
100290 msgid "cannot map archive header"
100291 msgstr "kan ikke læse arkivhoved med mmap"
100293 @@ -1506,88 +1506,88 @@
100294 msgid "cannot map locale archive file"
100295 msgstr "kan ikke åbne lokalearkivfil med mmap"
100297 -#: locale/programs/locarchive.c:326
100298 +#: locale/programs/locarchive.c:329
100299 msgid "cannot lock new archive"
100300 msgstr "kan ikke låse nyt arkiv"
100302 -#: locale/programs/locarchive.c:377
100303 +#: locale/programs/locarchive.c:380
100304 msgid "cannot extend locale archive file"
100305 msgstr "kan ikke udvide lokalearkivfil"
100307 -#: locale/programs/locarchive.c:386
100308 +#: locale/programs/locarchive.c:389
100309 msgid "cannot change mode of resized locale archive"
100310 msgstr "kan ikke ændre adgangtilstand på størrelsesændret lokalearkiv"
100312 -#: locale/programs/locarchive.c:394
100313 +#: locale/programs/locarchive.c:397
100314 msgid "cannot rename new archive"
100315 msgstr "kan ikke omdøbe nyt arkiv"
100317 -#: locale/programs/locarchive.c:447
100318 +#: locale/programs/locarchive.c:450
100319 #, c-format
100320 msgid "cannot open locale archive \"%s\""
100321 msgstr "kan ikke åbne lokalearkiv \"%s\""
100323 -#: locale/programs/locarchive.c:452
100324 +#: locale/programs/locarchive.c:455
100325 #, c-format
100326 msgid "cannot stat locale archive \"%s\""
100327 msgstr "kan ikke udføre 'stat' på lokalearkiv '%s'"
100329 -#: locale/programs/locarchive.c:471
100330 +#: locale/programs/locarchive.c:474
100331 #, c-format
100332 msgid "cannot lock locale archive \"%s\""
100333 msgstr "kan ikke låse lokalearkiv '%s'"
100335 -#: locale/programs/locarchive.c:494
100336 +#: locale/programs/locarchive.c:497
100337 msgid "cannot read archive header"
100338 msgstr "kan ikke læse arkivhoved"
100340 -#: locale/programs/locarchive.c:554
100341 +#: locale/programs/locarchive.c:557
100342 #, c-format
100343 msgid "locale '%s' already exists"
100344 msgstr "lokale '%s' eksisterer allerede"
100346 -#: locale/programs/locarchive.c:784 locale/programs/locarchive.c:799
100347 -#: locale/programs/locarchive.c:811 locale/programs/locarchive.c:823
100348 +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
100349 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
100350 #: locale/programs/locfile.c:343
100351 msgid "cannot add to locale archive"
100352 msgstr "kan ikke tilføje til lokalearkiv"
100354 -#: locale/programs/locarchive.c:976
100355 +#: locale/programs/locarchive.c:982
100356 #, c-format
100357 msgid "locale alias file `%s' not found"
100358 msgstr "fil \"%s\" for lokalealias findes ikke"
100360 -#: locale/programs/locarchive.c:1118
100361 +#: locale/programs/locarchive.c:1126
100362 #, c-format
100363 msgid "Adding %s\n"
100364 msgstr "Tilføjer %s\n"
100366 -#: locale/programs/locarchive.c:1124
100367 +#: locale/programs/locarchive.c:1132
100368 #, c-format
100369 msgid "stat of \"%s\" failed: %s: ignored"
100370 msgstr "status på \"%s\" mislykkedes: %s: ignoreret"
100372 -#: locale/programs/locarchive.c:1130
100373 +#: locale/programs/locarchive.c:1138
100374 #, c-format
100375 msgid "\"%s\" is no directory; ignored"
100376 msgstr "\"%s\" er ikke et katalog, ignoreret"
100378 -#: locale/programs/locarchive.c:1137
100379 +#: locale/programs/locarchive.c:1145
100380 #, c-format
100381 msgid "cannot open directory \"%s\": %s: ignored"
100382 msgstr "kan ikke åbne katalog \"%s\": %s: ignoreret"
100384 -#: locale/programs/locarchive.c:1209
100385 +#: locale/programs/locarchive.c:1217
100386 #, c-format
100387 msgid "incomplete set of locale files in \"%s\""
100388 msgstr "ufuldstændig opsætning af lokalefiler i \"%s\""
100390 -#: locale/programs/locarchive.c:1273
100391 +#: locale/programs/locarchive.c:1281
100392 #, c-format
100393 msgid "cannot read all files in \"%s\": ignored"
100394 msgstr "kan ikke læse alle filer i \"%s\": ignoreret"
100396 -#: locale/programs/locarchive.c:1343
100397 +#: locale/programs/locarchive.c:1351
100398 #, c-format
100399 msgid "locale \"%s\" not in archive"
100400 msgstr "lokale \"%s\" findes ikke i arkivet"
100401 @@ -1656,8 +1656,8 @@
100402 msgid "upper limit in range is not smaller then lower limit"
100403 msgstr "øvre grænse i område er ikke mindre end nedre grænse"
100405 -#: locale/programs/xmalloc.c:70 malloc/obstack.c:500 malloc/obstack.c:503
100406 -#: posix/getconf.c:996
100407 +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
100408 +#: posix/getconf.c:1002
100409 msgid "memory exhausted"
100410 msgstr "lageret opbrugt"
100412 @@ -1683,7 +1683,7 @@
100413 msgid "Another string for testing."
100414 msgstr "En ny streng til afprøvning."
100416 -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:79
100417 +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84
100418 msgid "NAME"
100419 msgstr "NAVN"
100421 @@ -1727,7 +1727,7 @@
100422 msgid "duplicate set definition"
100423 msgstr "duplikeret definition af sæt"
100425 -#: catgets/gencat.c:446 catgets/gencat.c:619 catgets/gencat.c:648
100426 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
100427 msgid "this is the first definition"
100428 msgstr "dette er den første definition"
100430 @@ -1745,44 +1745,44 @@
100431 msgid "unknown directive `%s': line ignored"
100432 msgstr "ukendt nøgleord '%s': linie ignoreret"
100434 -#: catgets/gencat.c:617
100435 +#: catgets/gencat.c:621
100436 msgid "duplicated message number"
100437 msgstr "duplikeret meddelelsesnummer"
100439 -#: catgets/gencat.c:645
100440 +#: catgets/gencat.c:674
100441 msgid "duplicated message identifier"
100442 msgstr "duplikeret meddelelsesidentifikator"
100444 -#: catgets/gencat.c:702
100445 +#: catgets/gencat.c:731
100446 msgid "invalid character: message ignored"
100447 msgstr "Ugyldigt tegn: besked ignoreret"
100449 -#: catgets/gencat.c:745
100450 +#: catgets/gencat.c:774
100451 msgid "invalid line"
100452 msgstr "ugyldig linje"
100454 -#: catgets/gencat.c:799
100455 +#: catgets/gencat.c:828
100456 msgid "malformed line ignored"
100457 msgstr "fejlagtig linie ignoreret"
100459 -#: catgets/gencat.c:963 catgets/gencat.c:1004
100460 +#: catgets/gencat.c:992 catgets/gencat.c:1033
100461 #, c-format
100462 msgid "cannot open output file `%s'"
100463 msgstr "kan ikke åbne udfil '%s'"
100465 -#: catgets/gencat.c:1188
100466 +#: catgets/gencat.c:1217
100467 msgid "unterminated message"
100468 msgstr "uafsluttet meddelelse"
100470 -#: catgets/gencat.c:1212
100471 +#: catgets/gencat.c:1241
100472 msgid "while opening old catalog file"
100473 msgstr "da den gamle katalogfil blev åbnet"
100475 -#: catgets/gencat.c:1303
100476 +#: catgets/gencat.c:1332
100477 msgid "conversion modules not available"
100478 msgstr "konverteringsmoduler ikke tilgængelige"
100480 -#: catgets/gencat.c:1329
100481 +#: catgets/gencat.c:1358
100482 msgid "cannot determine escape character"
100483 msgstr "kan ikke bestemme undvigetegn"
100485 @@ -1790,7 +1790,7 @@
100486 msgid "makecontext: does not know how to handle more than 8 arguments\n"
100487 msgstr "makecontext: véd ikke hvordan mere end 8 argumenter skal behandles\n"
100489 -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:178
100490 +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133
100491 #: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861
100492 msgid "Success"
100493 msgstr "Succes"
100494 @@ -2979,23 +2979,23 @@
100495 msgid "%s%sUnknown signal %d\n"
100496 msgstr "%s%sUkendt signal %d\n"
100498 -#: malloc/mcheck.c:296
100499 +#: malloc/mcheck.c:346
100500 msgid "memory is consistent, library is buggy\n"
100501 msgstr "lageret er konsistent, biblioteket er fejlbehæftet\n"
100503 -#: malloc/mcheck.c:299
100504 +#: malloc/mcheck.c:349
100505 msgid "memory clobbered before allocated block\n"
100506 msgstr "området foran tildelt lagerblok snavset til\n"
100508 -#: malloc/mcheck.c:302
100509 +#: malloc/mcheck.c:352
100510 msgid "memory clobbered past end of allocated block\n"
100511 msgstr "området efter tildelt lagerblok snavset til\n"
100513 -#: malloc/mcheck.c:305
100514 +#: malloc/mcheck.c:355
100515 msgid "block freed twice\n"
100516 msgstr "blok frigjort to gange\n"
100518 -#: malloc/mcheck.c:308
100519 +#: malloc/mcheck.c:358
100520 msgid "bogus mcheck_status, library is buggy\n"
100521 msgstr "fejlagtig mcheck_status, biblioteket er fejlbehæftet\n"
100523 @@ -3031,6 +3031,10 @@
100524 msgid "DATAFILE [OUTFILE]"
100525 msgstr "DATAFIL [UDFIL]"
100527 +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
100528 +msgid "Unknown error"
100529 +msgstr "Ukendt fejl"
100531 #: string/strsignal.c:69
100532 #, c-format
100533 msgid "Real-time signal %d"
100534 @@ -3055,7 +3059,7 @@
100535 msgid "%s: Memory exhausted: %s\n"
100536 msgstr "%s: Lageret opbrugt: %s\n"
100538 -#: timezone/zic.c:390 misc/error.c:120
100539 +#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155
100540 msgid "Unknown system error"
100541 msgstr "Ukendt systemfejl"
100543 @@ -3448,25 +3452,21 @@
100544 msgid "Interrupted by a signal"
100545 msgstr "Afbrudt af et signal"
100547 -#: posix/../sysdeps/posix/gai_strerror.c:57
100548 -msgid "Unknown error"
100549 -msgstr "Ukendt fejl"
100551 -#: posix/getconf.c:883
100552 +#: posix/getconf.c:889
100553 #, c-format
100554 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
100555 msgstr "Brug: %s [-v specifikation] variabelnavn [søgesti]\n"
100557 -#: posix/getconf.c:941
100558 +#: posix/getconf.c:947
100559 #, c-format
100560 msgid "unknown specification \"%s\""
100561 msgstr "ukendt specifikation '%s'"
100563 -#: posix/getconf.c:968 posix/getconf.c:984
100564 +#: posix/getconf.c:974 posix/getconf.c:990
100565 msgid "undefined"
100566 msgstr "udefineret"
100568 -#: posix/getconf.c:1006
100569 +#: posix/getconf.c:1012
100570 #, c-format
100571 msgid "Unrecognized variable `%s'"
100572 msgstr "Ukendt variabel '%s'"
100573 @@ -3528,71 +3528,71 @@
100574 msgid "%s: option `-W %s' doesn't allow an argument\n"
100575 msgstr "%s: flaget '-W %s' tager ikke argumenter\n"
100577 -#: posix/regcomp.c:181
100578 +#: posix/regcomp.c:136
100579 msgid "No match"
100580 msgstr "Ingen træf"
100582 -#: posix/regcomp.c:184
100583 +#: posix/regcomp.c:139
100584 msgid "Invalid regular expression"
100585 msgstr "Ugyldigt regulært udtryk"
100587 -#: posix/regcomp.c:187
100588 +#: posix/regcomp.c:142
100589 msgid "Invalid collation character"
100590 msgstr "Ugyldigt sammenligningstegn"
100592 -#: posix/regcomp.c:190
100593 +#: posix/regcomp.c:145
100594 msgid "Invalid character class name"
100595 msgstr "Ugyldigt tegnklassenavn"
100597 -#: posix/regcomp.c:193
100598 +#: posix/regcomp.c:148
100599 msgid "Trailing backslash"
100600 msgstr "Efterfølgende backslash"
100602 -#: posix/regcomp.c:196
100603 +#: posix/regcomp.c:151
100604 msgid "Invalid back reference"
100605 msgstr "Ugyldig tilbage-reference"
100607 -#: posix/regcomp.c:199
100608 +#: posix/regcomp.c:154
100609 msgid "Unmatched [ or [^"
100610 msgstr "Ubalanceret [ eller [^"
100612 -#: posix/regcomp.c:202
100613 +#: posix/regcomp.c:157
100614 msgid "Unmatched ( or \\("
100615 msgstr "Ubalanceret ( eller \\("
100617 -#: posix/regcomp.c:205
100618 +#: posix/regcomp.c:160
100619 msgid "Unmatched \\{"
100620 msgstr "Ubalanceret \\{"
100622 -#: posix/regcomp.c:208
100623 +#: posix/regcomp.c:163
100624 msgid "Invalid content of \\{\\}"
100625 msgstr "Ugyldig brug af \\{\\}"
100627 -#: posix/regcomp.c:211
100628 +#: posix/regcomp.c:166
100629 msgid "Invalid range end"
100630 msgstr "Ugyldigt intervalslut"
100632 -#: posix/regcomp.c:214
100633 +#: posix/regcomp.c:169
100634 msgid "Memory exhausted"
100635 msgstr "Lageret opbrugt"
100637 -#: posix/regcomp.c:217
100638 +#: posix/regcomp.c:172
100639 msgid "Invalid preceding regular expression"
100640 msgstr "Ugyldigt foregående regulært udtryk"
100642 -#: posix/regcomp.c:220
100643 +#: posix/regcomp.c:175
100644 msgid "Premature end of regular expression"
100645 msgstr "For tidlig afslutning på regulært udtryk"
100647 -#: posix/regcomp.c:223
100648 +#: posix/regcomp.c:178
100649 msgid "Regular expression too big"
100650 msgstr "Regulært udtryk for stort"
100652 -#: posix/regcomp.c:226
100653 +#: posix/regcomp.c:181
100654 msgid "Unmatched ) or \\)"
100655 msgstr "Ubalanceret ) eller \\)"
100657 -#: posix/regcomp.c:673
100658 +#: posix/regcomp.c:615
100659 msgid "No previous regular expression"
100660 msgstr "Intet foregående regulært udtryk"
100662 @@ -3746,24 +3746,24 @@
100663 msgid "Service configuration to be used"
100664 msgstr "Tjenestekonfiguration som skal bruges"
100666 -#: nss/getent.c:136 nss/getent.c:305
100667 +#: nss/getent.c:136 nss/getent.c:308
100668 #, c-format
100669 msgid "Enumeration not supported on %s\n"
100670 msgstr "Enumeration er ikke understøttet på %s\n"
100672 -#: nss/getent.c:729
100673 +#: nss/getent.c:732
100674 msgid "getent - get entries from administrative database."
100675 msgstr "getent - hent indtastninger fra administrativ database."
100677 -#: nss/getent.c:730
100678 +#: nss/getent.c:733
100679 msgid "Supported databases:"
100680 msgstr "Understøttede databaser:"
100682 -#: nss/getent.c:787 nscd/nscd.c:119 nscd/nscd_nischeck.c:64
100683 +#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64
100684 msgid "wrong number of arguments"
100685 msgstr "galt antal argumenter"
100687 -#: nss/getent.c:797
100688 +#: nss/getent.c:800
100689 #, c-format
100690 msgid "Unknown database: %s\n"
100691 msgstr "Ukendt database: %s\n"
100692 @@ -3792,68 +3792,72 @@
100693 msgid "invalid pointer size"
100694 msgstr "ugyldig størrelse for pegere"
100696 -#: inet/rcmd.c:174 inet/rcmd.c:177
100697 +#: inet/rcmd.c:163 inet/rcmd.c:166
100698 +msgid "rcmd: Cannot allocate memory\n"
100699 +msgstr "rcmd: Kan ikke tildele lager\n"
100701 +#: inet/rcmd.c:185 inet/rcmd.c:188
100702 msgid "rcmd: socket: All ports in use\n"
100703 msgstr "rcmd: sokkel: Alle porte i brug\n"
100705 -#: inet/rcmd.c:211
100706 +#: inet/rcmd.c:222
100707 #, c-format
100708 msgid "connect to address %s: "
100709 msgstr "koble til adresse %s: "
100711 -#: inet/rcmd.c:229
100712 +#: inet/rcmd.c:240
100713 #, c-format
100714 msgid "Trying %s...\n"
100715 msgstr "Prøver %s...\n"
100717 -#: inet/rcmd.c:278
100718 +#: inet/rcmd.c:289
100719 #, c-format
100720 msgid "rcmd: write (setting up stderr): %m\n"
100721 msgstr "rcmd: write: (opsætter standard error): %m\n"
100723 -#: inet/rcmd.c:299
100724 +#: inet/rcmd.c:310
100725 #, c-format
100726 msgid "rcmd: poll (setting up stderr): %m\n"
100727 msgstr "rcmd: poll (opsætter stderr): %m\n"
100729 -#: inet/rcmd.c:302
100730 +#: inet/rcmd.c:313
100731 msgid "poll: protocol failure in circuit setup\n"
100732 msgstr "poll: protokolfejl i opsætning af forbindelse\n"
100734 -#: inet/rcmd.c:346
100735 +#: inet/rcmd.c:358
100736 msgid "socket: protocol failure in circuit setup\n"
100737 msgstr "sokkel: protokolfejl i opsætning af forbindelse\n"
100739 -#: inet/rcmd.c:368
100740 +#: inet/rcmd.c:387
100741 #, c-format
100742 msgid "rcmd: %s: short read"
100743 msgstr "rcmd: %s: kort indlæsning"
100745 -#: inet/rcmd.c:524
100746 +#: inet/rcmd.c:549
100747 msgid "lstat failed"
100748 msgstr "lstat fejlede"
100750 -#: inet/rcmd.c:526
100751 +#: inet/rcmd.c:551
100752 msgid "not regular file"
100753 msgstr "ikke en almindelig fil"
100755 -#: inet/rcmd.c:531
100756 +#: inet/rcmd.c:556
100757 msgid "cannot open"
100758 msgstr "kan ikke åbne"
100760 -#: inet/rcmd.c:533
100761 +#: inet/rcmd.c:558
100762 msgid "fstat failed"
100763 msgstr "fstat fejlede"
100765 -#: inet/rcmd.c:535
100766 +#: inet/rcmd.c:560
100767 msgid "bad owner"
100768 msgstr "forkert ejer"
100770 -#: inet/rcmd.c:537
100771 +#: inet/rcmd.c:562
100772 msgid "writeable by other than owner"
100773 msgstr "skrivbar af andre end ejer"
100775 -#: inet/rcmd.c:539
100776 +#: inet/rcmd.c:564
100777 msgid "hard linked somewhere"
100778 msgstr "hårdlænket et eller andet sted"
100780 @@ -4064,109 +4068,109 @@
100781 msgid "Cannot receive reply to broadcast"
100782 msgstr "Kan ikke tage imod svar på rundsending"
100784 -#: sunrpc/rpc_main.c:289
100785 +#: sunrpc/rpc_main.c:288
100786 #, c-format
100787 msgid "%s: output would overwrite %s\n"
100788 msgstr "%s: udskrift ville overskrive %s\n"
100790 -#: sunrpc/rpc_main.c:296
100791 +#: sunrpc/rpc_main.c:295
100792 #, c-format
100793 msgid "%s: unable to open %s: %m\n"
100794 msgstr "%s: kan ikke åbne %s: %m\n"
100796 -#: sunrpc/rpc_main.c:308
100797 +#: sunrpc/rpc_main.c:307
100798 #, c-format
100799 msgid "%s: while writing output %s: %m"
100800 msgstr "%s: under skrivning af uddata %s: %m"
100802 -#: sunrpc/rpc_main.c:343
100803 +#: sunrpc/rpc_main.c:342
100804 #, c-format
100805 msgid "cannot find C preprocessor: %s \n"
100806 msgstr "kan ikke finde C-præprocessor: %s \n"
100808 -#: sunrpc/rpc_main.c:351
100809 +#: sunrpc/rpc_main.c:350
100810 msgid "cannot find any C preprocessor (cpp)\n"
100811 msgstr "kan ikke finde nogen C-præprocessor (cpp)\n"
100813 -#: sunrpc/rpc_main.c:420
100814 +#: sunrpc/rpc_main.c:419
100815 #, c-format
100816 msgid "%s: C preprocessor failed with signal %d\n"
100817 msgstr "%s: C-præprocessoren fejlede med signal %d\n"
100819 -#: sunrpc/rpc_main.c:423
100820 +#: sunrpc/rpc_main.c:422
100821 #, c-format
100822 msgid "%s: C preprocessor failed with exit code %d\n"
100823 msgstr "%s: C-præprocessoren fejlede med slutkode %d\n"
100825 -#: sunrpc/rpc_main.c:463
100826 +#: sunrpc/rpc_main.c:462
100827 #, c-format
100828 msgid "illegal nettype :`%s'\n"
100829 msgstr "ulovlig nettype: '%s'\n"
100831 -#: sunrpc/rpc_main.c:1105
100832 +#: sunrpc/rpc_main.c:1104
100833 msgid "rpcgen: too many defines\n"
100834 msgstr "rpcgen: for mange definitioner\n"
100836 -#: sunrpc/rpc_main.c:1117
100837 +#: sunrpc/rpc_main.c:1116
100838 msgid "rpcgen: arglist coding error\n"
100839 msgstr "rpcgen: arglist kode-fejl\n"
100841 #. TRANS: the file will not be removed; this is an
100842 #. TRANS: informative message.
100843 -#: sunrpc/rpc_main.c:1150
100844 +#: sunrpc/rpc_main.c:1149
100845 #, c-format
100846 msgid "file `%s' already exists and may be overwritten\n"
100847 msgstr "filen '%s' eksisterer allerede og kan blive overskrevet\n"
100849 -#: sunrpc/rpc_main.c:1195
100850 +#: sunrpc/rpc_main.c:1194
100851 msgid "Cannot specify more than one input file!\n"
100852 msgstr "Kan ikke specificere mere end én indfil!\n"
100854 -#: sunrpc/rpc_main.c:1365
100855 +#: sunrpc/rpc_main.c:1364
100856 msgid "This implementation doesn't support newstyle or MT-safe code!\n"
100857 msgstr "Denne implementation understøtter ikke nystil eller MT-sikker kode!\n"
100859 -#: sunrpc/rpc_main.c:1374
100860 +#: sunrpc/rpc_main.c:1373
100861 msgid "Cannot use netid flag with inetd flag!\n"
100862 msgstr "Kan ikke bruge netid-flag med inetd-flag!\n"
100864 -#: sunrpc/rpc_main.c:1386
100865 +#: sunrpc/rpc_main.c:1385
100866 msgid "Cannot use netid flag without TIRPC!\n"
100867 msgstr "Kan ikke bruge netid-flag uden TIRPC!\n"
100869 -#: sunrpc/rpc_main.c:1393
100870 +#: sunrpc/rpc_main.c:1392
100871 msgid "Cannot use table flags with newstyle!\n"
100872 msgstr "Kan ikke bruge tabelflag med ny stil!\n"
100874 -#: sunrpc/rpc_main.c:1412
100875 +#: sunrpc/rpc_main.c:1411
100876 msgid "\"infile\" is required for template generation flags.\n"
100877 msgstr "'indfil' er nødvendig for flag til at generere skabelon.\n"
100879 -#: sunrpc/rpc_main.c:1417
100880 +#: sunrpc/rpc_main.c:1416
100881 msgid "Cannot have more than one file generation flag!\n"
100882 msgstr "Kan ikke have mere end et fil-genereringsflag!\n"
100884 -#: sunrpc/rpc_main.c:1426
100885 +#: sunrpc/rpc_main.c:1425
100886 #, c-format
100887 msgid "usage: %s infile\n"
100888 msgstr "brug: %s indfil\n"
100890 -#: sunrpc/rpc_main.c:1427
100891 +#: sunrpc/rpc_main.c:1426
100892 #, c-format
100893 msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
100894 msgstr "\t%s [-abkCLNTM] [-Dnavn[=værdi]] [-i størrelse] [-I [-K sekunder]] [-Y søgesti] indfil\n"
100896 -#: sunrpc/rpc_main.c:1429
100897 +#: sunrpc/rpc_main.c:1428
100898 #, c-format
100899 msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
100900 msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o udfil] [indfil]\n"
100902 -#: sunrpc/rpc_main.c:1431
100903 +#: sunrpc/rpc_main.c:1430
100904 #, c-format
100905 msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
100906 msgstr "\t%s [-s nettype]* [-o udfil] [indfil]\n"
100908 -#: sunrpc/rpc_main.c:1432
100909 +#: sunrpc/rpc_main.c:1431
100910 #, c-format
100911 msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
100912 msgstr "\t%s [-n netid]* [-o udfil] [indfil]\n"
100913 @@ -5024,7 +5028,7 @@
100914 msgid "while allocating hash table entry"
100915 msgstr "under allokering af hashtabel-indtastninger"
100917 -#: nscd/cache.c:150 nscd/connections.c:185
100918 +#: nscd/cache.c:150 nscd/connections.c:187
100919 #, c-format
100920 msgid "cannot stat() file `%s': %s"
100921 msgstr "kan ikke udføre stat() på fil '%s': %s"
100922 @@ -5037,153 +5041,158 @@
100923 msgid "Cannot run nscd in secure mode as unprivileged user"
100924 msgstr "Kan ikke køre nscd i sikker tilstand som upriviligieret bruger"
100926 -#: nscd/connections.c:199
100927 +#: nscd/connections.c:175
100928 +#, c-format
100929 +msgid "while allocating cache: %s"
100930 +msgstr "under allokering af buffer: %s"
100932 +#: nscd/connections.c:200
100933 #, c-format
100934 msgid "cannot open socket: %s"
100935 msgstr "kan ikke åbne sokkel: %s"
100937 -#: nscd/connections.c:217
100938 +#: nscd/connections.c:218
100939 #, c-format
100940 msgid "cannot enable socket to accept connections: %s"
100941 msgstr "kan ikke få sokkel til at acceptere forbindelser: %s"
100943 -#: nscd/connections.c:259
100944 +#: nscd/connections.c:260
100945 #, c-format
100946 msgid "handle_request: request received (Version = %d)"
100947 msgstr "handle_request: forespørgsel modtaget (version = %d)"
100949 -#: nscd/connections.c:265
100950 +#: nscd/connections.c:266
100951 #, c-format
100952 msgid "cannot handle old request version %d; current version is %d"
100953 msgstr "kan ikke håndtere gammel forespørgsel af version %d. Nuværende version er %d"
100955 -#: nscd/connections.c:303 nscd/connections.c:325
100956 +#: nscd/connections.c:304 nscd/connections.c:326
100957 #, c-format
100958 msgid "cannot write result: %s"
100959 msgstr "kan ikke udskrive resultat: '%s'"
100961 -#: nscd/connections.c:404 nscd/connections.c:498
100962 +#: nscd/connections.c:405 nscd/connections.c:499
100963 #, c-format
100964 msgid "error getting callers id: %s"
100965 msgstr "fejl ved forespørgsel på opkaldets id: %s"
100967 -#: nscd/connections.c:470
100968 +#: nscd/connections.c:471
100969 #, c-format
100970 msgid "while accepting connection: %s"
100971 msgstr "under accept af forbindelse: %s"
100973 -#: nscd/connections.c:481
100974 +#: nscd/connections.c:482
100975 #, c-format
100976 msgid "short read while reading request: %s"
100977 msgstr "afkortet læsning ved læsning af forespørgsel: %s"
100979 -#: nscd/connections.c:517
100980 +#: nscd/connections.c:518
100981 #, c-format
100982 msgid "key length in request too long: %d"
100983 msgstr "nøglelængde i forespørgsel for lang: %d"
100985 -#: nscd/connections.c:531
100986 +#: nscd/connections.c:532
100987 #, c-format
100988 msgid "short read while reading request key: %s"
100989 msgstr "afkortet læsning ved læsning af forespørgsels-nøgle: %s"
100991 -#: nscd/connections.c:590 nscd/connections.c:591 nscd/connections.c:610
100992 -#: nscd/connections.c:623 nscd/connections.c:629 nscd/connections.c:636
100993 +#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611
100994 +#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637
100995 #, c-format
100996 msgid "Failed to run nscd as user '%s'"
100997 msgstr "Kunne ikke køre nscd som bruger \"%s\""
100999 -#: nscd/connections.c:611
101000 +#: nscd/connections.c:612
101001 msgid "getgrouplist failed"
101002 msgstr "getgrouplist mislykkedes"
101004 -#: nscd/connections.c:624
101005 +#: nscd/connections.c:625
101006 msgid "setgroups failed"
101007 msgstr "setgroups mislykkedes"
101009 -#: nscd/grpcache.c:102 nscd/hstcache.c:110 nscd/pwdcache.c:108
101010 +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
101011 msgid "while allocating key copy"
101012 msgstr "under allokering af nøglekopi"
101014 -#: nscd/grpcache.c:152 nscd/hstcache.c:167 nscd/pwdcache.c:145
101015 +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
101016 msgid "while allocating cache entry"
101017 msgstr "under allokering af nærbuffer-indtastninger"
101019 -#: nscd/grpcache.c:195 nscd/hstcache.c:281 nscd/pwdcache.c:191
101020 +#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192
101021 #, c-format
101022 msgid "short write in %s: %s"
101023 msgstr "afkortet skrivning i %s: %s"
101025 -#: nscd/grpcache.c:217
101026 +#: nscd/grpcache.c:218
101027 #, c-format
101028 msgid "Haven't found \"%s\" in group cache!"
101029 msgstr "Har ikke fundet '%s' i gruppe-nærbuffer!"
101031 -#: nscd/grpcache.c:292
101032 +#: nscd/grpcache.c:284
101033 #, c-format
101034 msgid "Invalid numeric gid \"%s\"!"
101035 msgstr "Ugyldigt numerisk gruppe-id (gid) \"%s\"!"
101037 -#: nscd/grpcache.c:299
101038 +#: nscd/grpcache.c:291
101039 #, c-format
101040 msgid "Haven't found \"%d\" in group cache!"
101041 msgstr "Har ikke fundet '%d' i gruppe-nærbuffer!"
101043 -#: nscd/hstcache.c:303 nscd/hstcache.c:378 nscd/hstcache.c:456
101044 -#: nscd/hstcache.c:533
101045 +#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435
101046 +#: nscd/hstcache.c:500
101047 #, c-format
101048 msgid "Haven't found \"%s\" in hosts cache!"
101049 msgstr "Har ikke fundet '%s' i værts-nærbuffer!"
101051 -#: nscd/nscd.c:80
101052 +#: nscd/nscd.c:85
101053 msgid "Read configuration data from NAME"
101054 msgstr "Læs konfigurationsdata fra NAVN"
101056 -#: nscd/nscd.c:82
101057 +#: nscd/nscd.c:87
101058 msgid "Do not fork and display messages on the current tty"
101059 msgstr "Udspalt ikke ny proces og vis meddelelser på nuværende tty"
101061 -#: nscd/nscd.c:83
101062 +#: nscd/nscd.c:88
101063 msgid "NUMBER"
101064 msgstr "NUMMER"
101066 -#: nscd/nscd.c:83
101067 +#: nscd/nscd.c:88
101068 msgid "Start NUMBER threads"
101069 msgstr "Start ANTAL tråde"
101071 -#: nscd/nscd.c:84
101072 +#: nscd/nscd.c:89
101073 msgid "Shut the server down"
101074 msgstr "Afbryd tjeneren"
101076 -#: nscd/nscd.c:85
101077 +#: nscd/nscd.c:90
101078 msgid "Print current configuration statistic"
101079 msgstr "Skriv nuværende konfigurationsstatistik ud"
101081 -#: nscd/nscd.c:86
101082 +#: nscd/nscd.c:91
101083 msgid "TABLE"
101084 msgstr "TABEL"
101086 -#: nscd/nscd.c:87
101087 +#: nscd/nscd.c:92
101088 msgid "Invalidate the specified cache"
101089 msgstr "Ugyldiggør den opgivne hurtigbuffer"
101091 -#: nscd/nscd.c:88
101092 +#: nscd/nscd.c:93
101093 msgid "TABLE,yes"
101094 msgstr "TABEL,ja"
101096 -#: nscd/nscd.c:88
101097 +#: nscd/nscd.c:93
101098 msgid "Use separate cache for each user"
101099 msgstr "Brug separat buffer for hver bruger"
101101 -#: nscd/nscd.c:93
101102 +#: nscd/nscd.c:98
101103 msgid "Name Service Cache Daemon."
101104 msgstr "Dæmon for bufring af navnetjeneste"
101106 -#: nscd/nscd.c:126
101107 +#: nscd/nscd.c:131
101108 msgid "already running"
101109 msgstr "kører allerede"
101111 -#: nscd/nscd.c:192 nscd/nscd.c:212 nscd/nscd.c:218
101112 +#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269
101113 msgid "Only root is allowed to use this option!"
101114 msgstr "Kun 'root' har lov til at bruge dette flag!"
101116 @@ -5273,22 +5282,22 @@
101117 "%15ld%% træfrate for hurtigbuffer\n"
101118 "%15s tjek /etc/%s for ændringer\n"
101120 -#: nscd/pwdcache.c:213
101121 +#: nscd/pwdcache.c:214
101122 #, c-format
101123 msgid "Haven't found \"%s\" in password cache!"
101124 msgstr "Har ikke fundet '%s' i adgangskode-nærbuffer!"
101126 -#: nscd/pwdcache.c:288
101127 +#: nscd/pwdcache.c:280
101128 #, c-format
101129 msgid "Invalid numeric uid \"%s\"!"
101130 msgstr "Ugyldig numerisk bruger-id (uid) \"%s\"!"
101132 -#: nscd/pwdcache.c:295
101133 +#: nscd/pwdcache.c:287
101134 #, c-format
101135 msgid "Haven't found \"%d\" in password cache!"
101136 msgstr "Har ikke fundet '%d' i adgangskode-nærbuffer!"
101138 -#: elf/../sysdeps/generic/dl-sysdep.c:297
101139 +#: elf/../sysdeps/generic/dl-sysdep.c:357
101140 msgid "cannot create capability list"
101141 msgstr "kan ikke oprette egenskabsliste"
101143 @@ -5339,7 +5348,7 @@
101144 msgid ", OS ABI: %s %d.%d.%d"
101145 msgstr ", OS ABI: %s %d.%d.%d"
101147 -#: elf/cache.c:136 elf/ldconfig.c:1033
101148 +#: elf/cache.c:136 elf/ldconfig.c:1045
101149 #, c-format
101150 msgid "Can't open cache file %s\n"
101151 msgstr "Kan ikke åbne hurtigbufferfil %s\n"
101152 @@ -5385,17 +5394,17 @@
101153 msgid "Renaming of %s to %s failed"
101154 msgstr "Omdøbning af %s til %s fejlede"
101156 -#: elf/dl-close.c:113
101157 +#: elf/dl-close.c:128
101158 msgid "shared object not open"
101159 msgstr "delt objekt er ikke åbent"
101161 -#: elf/dl-close.c:357 elf/dl-open.c:436
101162 +#: elf/dl-close.c:486 elf/dl-open.c:444
101163 msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
101164 msgstr ""
101165 "Generationstæller for TLS tilbagestillet! Vær sød at indsende fejlrapport med\n"
101166 "\"glibcbug\"-skriptet"
101168 -#: elf/dl-deps.c:111 elf/dl-open.c:177
101169 +#: elf/dl-deps.c:111 elf/dl-open.c:183
101170 msgid "DST not allowed in SUID/SGID programs"
101171 msgstr "DST er ikke tilladt i SUIT/SGID-programmer"
101173 @@ -5414,181 +5423,193 @@
101174 msgid "cannot allocate dependency list"
101175 msgstr "kan ikke allokere afhængighedsliste"
101177 -#: elf/dl-deps.c:492 elf/dl-deps.c:547
101178 +#: elf/dl-deps.c:494 elf/dl-deps.c:549
101179 msgid "cannot allocate symbol search list"
101180 msgstr "kan ikke allokere symbolsøgningsliste"
101182 -#: elf/dl-deps.c:532
101183 +#: elf/dl-deps.c:534
101184 msgid "Filters not supported with LD_TRACE_PRELINKING"
101185 msgstr "Filter understøttes ej med LD_TRACE_PRELINKING"
101187 -#: elf/dl-error.c:73
101188 +#: elf/dl-error.c:75
101189 msgid "DYNAMIC LINKER BUG!!!"
101190 msgstr "FEJL I DYNAMISK LÆNKER!!!"
101192 -#: elf/dl-error.c:106
101193 +#: elf/dl-error.c:108
101194 msgid "error while loading shared libraries"
101195 msgstr "fejl da delte biblioteker indlæstes"
101197 -#: elf/dl-load.c:338
101198 +#: elf/dl-load.c:339
101199 msgid "cannot allocate name record"
101200 msgstr "Kan ikke allokere navnepost"
101202 -#: elf/dl-load.c:440 elf/dl-load.c:520 elf/dl-load.c:614 elf/dl-load.c:709
101203 +#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707
101204 msgid "cannot create cache for search path"
101205 msgstr "Kan ikke oprette buffer for søgesti"
101207 -#: elf/dl-load.c:545
101208 +#: elf/dl-load.c:543
101209 msgid "cannot create RUNPATH/RPATH copy"
101210 msgstr "kan ikke oprette RUNPATH/RPATH kopi"
101212 -#: elf/dl-load.c:600
101213 +#: elf/dl-load.c:598
101214 msgid "cannot create search path array"
101215 msgstr "kan ikke oprette tabel over søgestier"
101217 -#: elf/dl-load.c:796
101218 +#: elf/dl-load.c:794
101219 msgid "cannot stat shared object"
101220 msgstr "kan ikke tage status på delt objekt"
101222 -#: elf/dl-load.c:840
101223 +#: elf/dl-load.c:838
101224 msgid "cannot open zero fill device"
101225 msgstr "kan ikke åbne nulstil-enhed"
101227 -#: elf/dl-load.c:849 elf/dl-load.c:1855
101228 +#: elf/dl-load.c:847 elf/dl-load.c:1902
101229 msgid "cannot create shared object descriptor"
101230 msgstr "kan ikke oprette delt objektbeskriver"
101232 -#: elf/dl-load.c:868 elf/dl-load.c:1351 elf/dl-load.c:1434
101233 +#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481
101234 msgid "cannot read file data"
101235 msgstr "kan ikke indlæse fildata"
101237 -#: elf/dl-load.c:908
101238 +#: elf/dl-load.c:906
101239 msgid "ELF load command alignment not page-aligned"
101240 msgstr "ELF-indlæsningskommandos tilpasning er ikke tilpasset siden"
101242 -#: elf/dl-load.c:915
101243 +#: elf/dl-load.c:913
101244 msgid "ELF load command address/offset not properly aligned"
101245 msgstr "ELF-indlæsningskommandos adresse/tillæg er ikke tilpasset ordentligt"
101247 -#: elf/dl-load.c:996
101248 +#: elf/dl-load.c:988
101249 +msgid "cannot allocate TLS data structures for initial thread"
101250 +msgstr "kan ikke oprette TLS-datastrukturer for første tråd"
101252 +#: elf/dl-load.c:1012
101253 +msgid "cannot handle TLS data"
101254 +msgstr "kan ikke behandle TLS-data"
101256 +#: elf/dl-load.c:1047
101257 msgid "failed to map segment from shared object"
101258 msgstr "klarede ikke at afbilde fra delt objekt'"
101260 -#: elf/dl-load.c:1020
101261 +#: elf/dl-load.c:1071
101262 msgid "cannot dynamically load executable"
101263 msgstr "kan ikke indlæse udførbare dynamisk"
101265 -#: elf/dl-load.c:1081
101266 +#: elf/dl-load.c:1132
101267 msgid "cannot change memory protections"
101268 msgstr "kan ikke ændre lagerbeskyttelser"
101270 -#: elf/dl-load.c:1100
101271 +#: elf/dl-load.c:1151
101272 msgid "cannot map zero-fill pages"
101273 msgstr "kan ikke mappe nulstil-sider"
101275 -#: elf/dl-load.c:1118
101276 +#: elf/dl-load.c:1169
101277 msgid "cannot allocate memory for program header"
101278 msgstr "Kan ikke allokere lager til programhoved"
101280 -#: elf/dl-load.c:1149
101281 +#: elf/dl-load.c:1200
101282 msgid "object file has no dynamic section"
101283 msgstr "objektfil har ingen dynamisk sektion"
101285 -#: elf/dl-load.c:1193
101286 +#: elf/dl-load.c:1240
101287 msgid "shared object cannot be dlopen()ed"
101288 msgstr "delt objekt kan ikke åbnes med dlopen()"
101290 -#: elf/dl-load.c:1216
101291 +#: elf/dl-load.c:1263
101292 msgid "cannot create searchlist"
101293 msgstr "kan ikke læse søgningsliste"
101295 -#: elf/dl-load.c:1351
101296 +#: elf/dl-load.c:1398
101297 msgid "file too short"
101298 msgstr "For kort fil"
101300 -#: elf/dl-load.c:1374
101301 +#: elf/dl-load.c:1421
101302 msgid "invalid ELF header"
101303 msgstr "ugyldigt ELF-hoved"
101305 -#: elf/dl-load.c:1383
101306 +#: elf/dl-load.c:1430
101307 msgid "ELF file data encoding not big-endian"
101308 msgstr "Kodning for ELF-fildata er ikke \"big-endian\""
101310 -#: elf/dl-load.c:1385
101311 +#: elf/dl-load.c:1432
101312 msgid "ELF file data encoding not little-endian"
101313 msgstr "Kodning for ELF-fildata er ikke \"little-endian\""
101315 -#: elf/dl-load.c:1389
101316 +#: elf/dl-load.c:1436
101317 msgid "ELF file version ident does not match current one"
101318 msgstr "ELF-filens version-identitet passer ikke med den aktuelle"
101320 -#: elf/dl-load.c:1393
101321 +#: elf/dl-load.c:1440
101322 msgid "ELF file OS ABI invalid"
101323 msgstr "ELF-filens OS ABI er ugyldig"
101325 -#: elf/dl-load.c:1395
101326 +#: elf/dl-load.c:1442
101327 msgid "ELF file ABI version invalid"
101328 msgstr "ELF-filens ABI-version er ugyldig"
101330 -#: elf/dl-load.c:1398
101331 +#: elf/dl-load.c:1445
101332 msgid "internal error"
101333 msgstr "Intern fejl"
101335 -#: elf/dl-load.c:1405
101336 +#: elf/dl-load.c:1452
101337 msgid "ELF file version does not match current one"
101338 msgstr "ELF-filens version passer ikke med den aktuelle"
101340 -#: elf/dl-load.c:1413
101341 +#: elf/dl-load.c:1460
101342 msgid "ELF file's phentsize not the expected size"
101343 msgstr "ELF-filens 'phentsize' er ikke den forventede størrelse"
101345 -#: elf/dl-load.c:1419
101346 +#: elf/dl-load.c:1466
101347 msgid "only ET_DYN and ET_EXEC can be loaded"
101348 msgstr "kun ET_DYN og ET_EXEC kan indlæses"
101350 -#: elf/dl-load.c:1870
101351 +#: elf/dl-load.c:1917
101352 msgid "cannot open shared object file"
101353 msgstr "kan ikke åbne delt objektfil"
101355 -#: elf/dl-lookup.c:248 elf/dl-lookup.c:413
101356 +#: elf/dl-lookup.c:265 elf/dl-lookup.c:430
101357 msgid "relocation error"
101358 msgstr "fejl ved relokering"
101360 -#: elf/dl-open.c:105
101361 +#: elf/dl-open.c:111
101362 msgid "cannot extend global scope"
101363 msgstr "Kan ikke udvide globalt defineringområde"
101365 -#: elf/dl-open.c:208
101366 +#: elf/dl-open.c:214
101367 msgid "empty dynamic string token substitution"
101368 msgstr "tom dynamisk strengelement-erstatning"
101370 -#: elf/dl-open.c:345 elf/dl-open.c:356
101371 +#: elf/dl-open.c:351 elf/dl-open.c:362
101372 msgid "cannot create scope list"
101373 msgstr "kan ikke oprette omfangsliste"
101375 -#: elf/dl-open.c:416
101376 +#: elf/dl-open.c:424
101377 msgid "cannot create TLS data structures"
101378 msgstr "kan ikke oprette datastrukturer for TLS"
101380 -#: elf/dl-open.c:478
101381 +#: elf/dl-open.c:486
101382 msgid "invalid mode for dlopen()"
101383 msgstr "ugyldig modus for dlopen()"
101385 -#: elf/dl-reloc.c:88
101386 +#: elf/dl-reloc.c:58
101387 +msgid "shared object cannot be dlopen()ed: static TLS memory too small"
101388 +msgstr "delt objekt kan ikke åbnes med dlopen(): statisk TLS-hukommelse for lille"
101390 +#: elf/dl-reloc.c:118
101391 msgid "cannot make segment writable for relocation"
101392 msgstr "Kan ikke gøre segment skrivbart for omflytning"
101394 -#: elf/dl-reloc.c:174
101395 +#: elf/dl-reloc.c:219
101396 #, c-format
101397 msgid "%s: profiler found no PLTREL in object %s\n"
101398 msgstr "%s: profilereren fandt ingen PLTREL i objekt %s\n"
101400 -#: elf/dl-reloc.c:186
101401 +#: elf/dl-reloc.c:231
101402 #, c-format
101403 msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
101404 msgstr "%s: profilereren fik slut på hukommelse for kopiering af PLTREL i %s\n"
101406 -#: elf/dl-reloc.c:201
101407 +#: elf/dl-reloc.c:246
101408 msgid "cannot restore segment prot after reloc"
101409 msgstr "kan ikke genskabe segmentbeskyttelse efter omflytning"
101411 @@ -5644,119 +5665,119 @@
101412 msgid "Configure Dynamic Linker Run Time Bindings."
101413 msgstr "Konfigurerer værdier til Dynamisk Lænker"
101415 -#: elf/ldconfig.c:282
101416 +#: elf/ldconfig.c:294
101417 #, c-format
101418 msgid "Path `%s' given more than once"
101419 msgstr "Stien '%s' givet mere end én gang"
101421 -#: elf/ldconfig.c:326
101422 +#: elf/ldconfig.c:338
101423 #, c-format
101424 msgid "%s is not a known library type"
101425 msgstr "%s er ikke en kendt bibliotekstype"
101427 -#: elf/ldconfig.c:344
101428 +#: elf/ldconfig.c:356
101429 #, c-format
101430 msgid "Can't stat %s"
101431 msgstr "Kan ikke stat() %s"
101433 -#: elf/ldconfig.c:414
101434 +#: elf/ldconfig.c:426
101435 #, c-format
101436 msgid "Can't stat %s\n"
101437 msgstr "Kan ikke stat() %s\n"
101439 -#: elf/ldconfig.c:424
101440 +#: elf/ldconfig.c:436
101441 #, c-format
101442 msgid "%s is not a symbolic link\n"
101443 msgstr "%s er ikke en symbolsk lænke\n"
101445 -#: elf/ldconfig.c:443
101446 +#: elf/ldconfig.c:455
101447 #, c-format
101448 msgid "Can't unlink %s"
101449 msgstr "Kan ikke aflænke %s"
101451 -#: elf/ldconfig.c:449
101452 +#: elf/ldconfig.c:461
101453 #, c-format
101454 msgid "Can't link %s to %s"
101455 msgstr "Kan ikke lænke %s til %s"
101457 -#: elf/ldconfig.c:455
101458 +#: elf/ldconfig.c:467
101459 msgid " (changed)\n"
101460 msgstr " (ændret)\n"
101462 -#: elf/ldconfig.c:457
101463 +#: elf/ldconfig.c:469
101464 msgid " (SKIPPED)\n"
101465 msgstr " (UDELADT)\n"
101467 -#: elf/ldconfig.c:512
101468 +#: elf/ldconfig.c:524
101469 #, c-format
101470 msgid "Can't find %s"
101471 msgstr "Kan ikke finde %s"
101473 -#: elf/ldconfig.c:528
101474 +#: elf/ldconfig.c:540
101475 #, c-format
101476 msgid "Can't lstat %s"
101477 msgstr "Kan ikke lstat %s"
101479 -#: elf/ldconfig.c:535
101480 +#: elf/ldconfig.c:547
101481 #, c-format
101482 msgid "Ignored file %s since it is not a regular file."
101483 msgstr "Ignorerede filen %s da den ikke er en almindelig fil."
101485 -#: elf/ldconfig.c:543
101486 +#: elf/ldconfig.c:555
101487 #, c-format
101488 msgid "No link created since soname could not be found for %s"
101489 msgstr "Ingen lænke oprettet da .so-navn ikke kunne findes for %s"
101491 -#: elf/ldconfig.c:634
101492 +#: elf/ldconfig.c:646
101493 #, c-format
101494 msgid "Can't open directory %s"
101495 msgstr "Kan ikke åbne katalog %s"
101497 -#: elf/ldconfig.c:689 elf/ldconfig.c:736
101498 +#: elf/ldconfig.c:701 elf/ldconfig.c:748
101499 #, c-format
101500 msgid "Cannot lstat %s"
101501 msgstr "Kan ikke lstat %s"
101503 -#: elf/ldconfig.c:701
101504 +#: elf/ldconfig.c:713
101505 #, c-format
101506 msgid "Cannot stat %s"
101507 msgstr "Kan ikke stat() %s"
101509 -#: elf/ldconfig.c:758 elf/readlib.c:93
101510 +#: elf/ldconfig.c:770 elf/readlib.c:93
101511 #, c-format
101512 msgid "Input file %s not found.\n"
101513 msgstr "Indputfilen %s ikke fundet\n"
101515 -#: elf/ldconfig.c:792
101516 +#: elf/ldconfig.c:804
101517 #, c-format
101518 msgid "libc5 library %s in wrong directory"
101519 msgstr "libc5-bibliotek %s i forkert katalog"
101521 -#: elf/ldconfig.c:795
101522 +#: elf/ldconfig.c:807
101523 #, c-format
101524 msgid "libc6 library %s in wrong directory"
101525 msgstr "libc6-bibliotek %s i forkert katalog"
101527 -#: elf/ldconfig.c:798
101528 +#: elf/ldconfig.c:810
101529 #, c-format
101530 msgid "libc4 library %s in wrong directory"
101531 msgstr "libc4-bibliotek %s i forkert katalog"
101533 -#: elf/ldconfig.c:825
101534 +#: elf/ldconfig.c:837
101535 #, c-format
101536 msgid "libraries %s and %s in directory %s have same soname but different type."
101537 msgstr "bibliotekerne %s og %s i kataloget %s har samme .so-navn, men forskellig type"
101539 -#: elf/ldconfig.c:928
101540 +#: elf/ldconfig.c:940
101541 #, c-format
101542 msgid "Can't open configuration file %s"
101543 msgstr "Kan ikke åbne konfigurationsfil %s"
101545 -#: elf/ldconfig.c:1012
101546 +#: elf/ldconfig.c:1024
101547 msgid "Can't chdir to /"
101548 msgstr "Kan ikke chdir til /"
101550 -#: elf/ldconfig.c:1054
101551 +#: elf/ldconfig.c:1066
101552 #, c-format
101553 msgid "Can't open cache file directory %s\n"
101554 msgstr "Kan ikke åbne hurtigbufferkatalog %s\n"
101555 Binary files glibc-2.3.2/po/de.mo and glibc-2.3.2-200304020432/po/de.mo differ
101556 Binary files glibc-2.3.2/po/el.mo and glibc-2.3.2-200304020432/po/el.mo differ
101557 Binary files glibc-2.3.2/po/en_GB.mo and glibc-2.3.2-200304020432/po/en_GB.mo differ
101558 Binary files glibc-2.3.2/po/es.mo and glibc-2.3.2-200304020432/po/es.mo differ
101559 diff -u -udbrN glibc-2.3.2/po/es.po glibc-2.3.2-200304020432/po/es.po
101560 --- glibc-2.3.2/po/es.po Mon Nov 4 07:56:19 2002
101561 +++ glibc-2.3.2-200304020432/po/es.po Mon Mar 3 19:12:33 2003
101562 @@ -1,13 +1,13 @@
101563 # Mensajes en español para GNU libc.
101564 -# Copyright (C) 1996, 1997, 1998, 2001, 2002 Free Software Foundation, Inc.
101565 +# Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003 Free Software Foundation, Inc.
101566 # Enrique Melero Gómez <melero@eurolands.com>, 1996, 1997.
101567 -# Santiago Vila Doncel <sanvila@unex.es>, 1997, 1998, 2001, 2002.
101568 +# Santiago Vila Doncel <sanvila@unex.es>, 1997, 1998, 2001, 2002, 2003.
101570 msgid ""
101571 msgstr ""
101572 -"Project-Id-Version: GNU libc 2.3.1\n"
101573 -"POT-Creation-Date: 2002-10-02 17:22-0700\n"
101574 -"PO-Revision-Date: 2002-11-02 16:52+0100\n"
101575 +"Project-Id-Version: GNU libc 2.3.2\n"
101576 +"POT-Creation-Date: 2003-02-22 15:34-0800\n"
101577 +"PO-Revision-Date: 2003-03-03 17:20+0100\n"
101578 "Last-Translator: Santiago Vila Doncel <sanvila@unex.es>\n"
101579 "Language-Team: Spanish <es@li.org>\n"
101580 "MIME-Version: 1.0\n"
101581 @@ -301,8 +301,8 @@
101583 #: iconv/iconv_prog.c:241
101584 #, c-format
101585 -msgid "conversions from `%s' and to `%s' are not supported"
101586 -msgstr "no se admiten conversiones de `%s' a `%s'"
101587 +msgid "conversion from `%s' and to `%s' are not supported"
101588 +msgstr "no se admite la conversión de `%s' a `%s'"
101590 #: iconv/iconv_prog.c:246
101591 #, c-format
101592 @@ -327,15 +327,15 @@
101593 msgid "error while closing output file"
101594 msgstr "error al cerrar el fichero de salida"
101596 -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:355 locale/programs/locale.c:268
101597 +#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274
101598 #: locale/programs/localedef.c:372 catgets/gencat.c:233
101599 #: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
101600 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
101601 msgstr "Comunicar bichos usando el programa `glibcbug' a <bugs@gnu.org>.\n"
101603 -#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:369 locale/programs/locale.c:281
101604 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:904
101605 -#: nss/getent.c:74 nscd/nscd.c:279 nscd/nscd_nischeck.c:90 elf/ldconfig.c:259
101606 +#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287
101607 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910
101608 +#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271
101609 #: elf/sprof.c:349
101610 #, c-format
101611 msgid ""
101612 @@ -348,9 +348,9 @@
101613 "No hay NINGUNA garantía; ni siquiera de COMERCIABILIDAD o IDONEIDAD PARA UN\n"
101614 "FIN DETERMINADO.\n"
101616 -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:374 locale/programs/locale.c:286
101617 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:909
101618 -#: nss/getent.c:79 nscd/nscd.c:284 nscd/nscd_nischeck.c:95 elf/ldconfig.c:264
101619 +#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292
101620 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915
101621 +#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276
101622 #: elf/sprof.c:355
101623 #, c-format
101624 msgid "Written by %s.\n"
101625 @@ -409,15 +409,15 @@
101626 msgid "Prefix used for all file accesses"
101627 msgstr "Prefijo utilizado para todos los accesos a ficheros"
101629 -#: iconv/iconvconfig.c:325 locale/programs/localedef.c:292
101630 +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
101631 msgid "no output file produced because warning were issued"
101632 msgstr "no se ha producido ningún fichero de salida debido a la existencia de avisos"
101634 -#: iconv/iconvconfig.c:403
101635 +#: iconv/iconvconfig.c:405
101636 msgid "while inserting in search tree"
101637 msgstr "al insertar en el árbol de búsqueda"
101639 -#: iconv/iconvconfig.c:1202
101640 +#: iconv/iconvconfig.c:1204
101641 msgid "cannot generate output file"
101642 msgstr "no se puede generar el fichero de salida"
101644 @@ -1368,7 +1368,7 @@
101645 msgid "unterminated symbolic name"
101646 msgstr "nombre simbólico sin terminar"
101648 -#: locale/programs/linereader.c:537 catgets/gencat.c:1166
101649 +#: locale/programs/linereader.c:537 catgets/gencat.c:1195
101650 msgid "invalid escape sequence"
101651 msgstr "secuencia de escape inválida"
101653 @@ -1398,39 +1398,39 @@
101654 msgid "trailing garbage at end of line"
101655 msgstr "hay inconsistencias al final de la línea"
101657 -#: locale/programs/locale.c:73
101658 +#: locale/programs/locale.c:75
101659 msgid "System information:"
101660 msgstr "Información del sistema:"
101662 -#: locale/programs/locale.c:75
101663 +#: locale/programs/locale.c:77
101664 msgid "Write names of available locales"
101665 msgstr "Escribe los nombres de los locales disponibles"
101667 -#: locale/programs/locale.c:77
101668 +#: locale/programs/locale.c:79
101669 msgid "Write names of available charmaps"
101670 msgstr "Escribe los nombres de las asignaciones de caracteres disponibles"
101672 -#: locale/programs/locale.c:78
101673 +#: locale/programs/locale.c:80
101674 msgid "Modify output format:"
101675 msgstr "Modifica el formato de salida:"
101677 -#: locale/programs/locale.c:79
101678 +#: locale/programs/locale.c:81
101679 msgid "Write names of selected categories"
101680 msgstr "Escribe los nombres de las categorías seleccionadas"
101682 -#: locale/programs/locale.c:80
101683 +#: locale/programs/locale.c:82
101684 msgid "Write names of selected keywords"
101685 msgstr "Escribe los nombres de las palabras clave seleccionadas"
101687 -#: locale/programs/locale.c:81
101688 +#: locale/programs/locale.c:83
101689 msgid "Print more information"
101690 msgstr "Muestra más información"
101692 -#: locale/programs/locale.c:86
101693 +#: locale/programs/locale.c:88
101694 msgid "Get locale-specific information."
101695 msgstr "Obtiene la información específica del locale."
101697 -#: locale/programs/locale.c:89
101698 +#: locale/programs/locale.c:91
101699 msgid ""
101700 "NAME\n"
101701 "[-a|-m]"
101702 @@ -1438,7 +1438,7 @@
101703 "NOMBRE\n"
101704 "[-a|-m]"
101706 -#: locale/programs/locale.c:488
101707 +#: locale/programs/locale.c:512
101708 msgid "while preparing output"
101709 msgstr "al preparar la salida"
101711 @@ -1571,16 +1571,16 @@
101712 msgid "cannot create temporary file"
101713 msgstr "no se puede crear un fichero temporal"
101715 -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:302
101716 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
101717 msgid "cannot initialize archive file"
101718 msgstr "no se puede inicializar el archivo"
101720 -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:309
101721 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
101722 msgid "cannot resize archive file"
101723 msgstr "no se puede cambiar el tamaño del archivo"
101725 -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:318
101726 -#: locale/programs/locarchive.c:508
101727 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
101728 +#: locale/programs/locarchive.c:511
101729 msgid "cannot map archive header"
101730 msgstr "no se puede leer la cabecera del archivo"
101732 @@ -1596,88 +1596,88 @@
101733 msgid "cannot map locale archive file"
101734 msgstr "no se puede leer el fichero de locales"
101736 -#: locale/programs/locarchive.c:326
101737 +#: locale/programs/locarchive.c:329
101738 msgid "cannot lock new archive"
101739 msgstr "no se puede bloquear el archivo nuevo"
101741 -#: locale/programs/locarchive.c:377
101742 +#: locale/programs/locarchive.c:380
101743 msgid "cannot extend locale archive file"
101744 msgstr "no se puede extender el archivo de locales"
101746 -#: locale/programs/locarchive.c:386
101747 +#: locale/programs/locarchive.c:389
101748 msgid "cannot change mode of resized locale archive"
101749 msgstr "no se puede cambiar el modo de un archivo de locales redimensionado"
101751 -#: locale/programs/locarchive.c:394
101752 +#: locale/programs/locarchive.c:397
101753 msgid "cannot rename new archive"
101754 msgstr "no se puede renombrar el nuevo archivo"
101756 -#: locale/programs/locarchive.c:447
101757 +#: locale/programs/locarchive.c:450
101758 #, c-format
101759 msgid "cannot open locale archive \"%s\""
101760 msgstr "no se puede abrir el archivo de locales \"%s\""
101762 -#: locale/programs/locarchive.c:452
101763 +#: locale/programs/locarchive.c:455
101764 #, c-format
101765 msgid "cannot stat locale archive \"%s\""
101766 msgstr "no se puede efectuar `stat' sobre el archivo de locales \"%s\""
101768 -#: locale/programs/locarchive.c:471
101769 +#: locale/programs/locarchive.c:474
101770 #, c-format
101771 msgid "cannot lock locale archive \"%s\""
101772 msgstr "no se puede bloquear el archivo de locales \"%s\""
101774 -#: locale/programs/locarchive.c:494
101775 +#: locale/programs/locarchive.c:497
101776 msgid "cannot read archive header"
101777 msgstr "no se puede leer la cabecera del archivo"
101779 -#: locale/programs/locarchive.c:554
101780 +#: locale/programs/locarchive.c:557
101781 #, c-format
101782 msgid "locale '%s' already exists"
101783 msgstr "el local `%s' ya existe"
101785 -#: locale/programs/locarchive.c:784 locale/programs/locarchive.c:799
101786 -#: locale/programs/locarchive.c:811 locale/programs/locarchive.c:823
101787 +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
101788 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
101789 #: locale/programs/locfile.c:343
101790 msgid "cannot add to locale archive"
101791 msgstr "no se puede añadir al archivo de locales"
101793 -#: locale/programs/locarchive.c:976
101794 +#: locale/programs/locarchive.c:982
101795 #, c-format
101796 msgid "locale alias file `%s' not found"
101797 msgstr "no se encontró el fichero de alias de locales `%s'"
101799 -#: locale/programs/locarchive.c:1118
101800 +#: locale/programs/locarchive.c:1126
101801 #, c-format
101802 msgid "Adding %s\n"
101803 msgstr "Añadiendo %s\n"
101805 -#: locale/programs/locarchive.c:1124
101806 +#: locale/programs/locarchive.c:1132
101807 #, c-format
101808 msgid "stat of \"%s\" failed: %s: ignored"
101809 msgstr "falló la llamada a `stat' sobre \"%s\": %s: descartado"
101811 -#: locale/programs/locarchive.c:1130
101812 +#: locale/programs/locarchive.c:1138
101813 #, c-format
101814 msgid "\"%s\" is no directory; ignored"
101815 msgstr "\"%s\" no es un directorio; descarrtado"
101817 -#: locale/programs/locarchive.c:1137
101818 +#: locale/programs/locarchive.c:1145
101819 #, c-format
101820 msgid "cannot open directory \"%s\": %s: ignored"
101821 msgstr "no se puede abrir el directorio \"%s\": %s: descartado"
101823 -#: locale/programs/locarchive.c:1209
101824 +#: locale/programs/locarchive.c:1217
101825 #, c-format
101826 msgid "incomplete set of locale files in \"%s\""
101827 msgstr "conjunto incompleto de ficheros de locales en \"%s\""
101829 -#: locale/programs/locarchive.c:1273
101830 +#: locale/programs/locarchive.c:1281
101831 #, c-format
101832 msgid "cannot read all files in \"%s\": ignored"
101833 msgstr "no se pueden leer todos los ficheros de \"%s\": descartado"
101835 -#: locale/programs/locarchive.c:1343
101836 +#: locale/programs/locarchive.c:1351
101837 #, c-format
101838 msgid "locale \"%s\" not in archive"
101839 msgstr "el local \"%s\" no está en el archivo"
101840 @@ -1749,8 +1749,8 @@
101841 msgid "upper limit in range is not smaller then lower limit"
101842 msgstr "el límite superior del rango no es menor que el límite inferior"
101844 -#: locale/programs/xmalloc.c:70 malloc/obstack.c:500 malloc/obstack.c:503
101845 -#: posix/getconf.c:996
101846 +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
101847 +#: posix/getconf.c:1002
101848 msgid "memory exhausted"
101849 msgstr "memoria agotada"
101851 @@ -1793,7 +1793,7 @@
101852 msgid "Another string for testing."
101853 msgstr "Otra cadena para hacer pruebas."
101855 -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:79
101856 +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84
101857 msgid "NAME"
101858 msgstr "NOMBRE"
101860 @@ -1839,7 +1839,7 @@
101861 msgid "duplicate set definition"
101862 msgstr "definición de conjunto duplicada"
101864 -#: catgets/gencat.c:446 catgets/gencat.c:619 catgets/gencat.c:648
101865 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
101866 msgid "this is the first definition"
101867 msgstr "esta es la primera vez que aparece la definición"
101869 @@ -1860,44 +1860,44 @@
101870 msgid "unknown directive `%s': line ignored"
101871 msgstr "directiva desconocida `%s': línea pasada por alto"
101873 -#: catgets/gencat.c:617
101874 +#: catgets/gencat.c:621
101875 msgid "duplicated message number"
101876 msgstr "número de mensaje duplicado"
101878 -#: catgets/gencat.c:645
101879 +#: catgets/gencat.c:674
101880 msgid "duplicated message identifier"
101881 msgstr "identificador de mensaje duplicado"
101883 -#: catgets/gencat.c:702
101884 +#: catgets/gencat.c:731
101885 msgid "invalid character: message ignored"
101886 msgstr "carácter inválido: mensaje descartado"
101888 -#: catgets/gencat.c:745
101889 +#: catgets/gencat.c:774
101890 msgid "invalid line"
101891 msgstr "línea inválida"
101893 -#: catgets/gencat.c:799
101894 +#: catgets/gencat.c:828
101895 msgid "malformed line ignored"
101896 msgstr "una línea incorrecta no se tendrá en cuenta"
101898 -#: catgets/gencat.c:963 catgets/gencat.c:1004
101899 +#: catgets/gencat.c:992 catgets/gencat.c:1033
101900 #, c-format
101901 msgid "cannot open output file `%s'"
101902 msgstr "no se puede abrir el fichero de salida `%s'"
101904 -#: catgets/gencat.c:1188
101905 +#: catgets/gencat.c:1217
101906 msgid "unterminated message"
101907 msgstr "mensaje sin terminar"
101909 -#: catgets/gencat.c:1212
101910 +#: catgets/gencat.c:1241
101911 msgid "while opening old catalog file"
101912 msgstr "al abrir el fichero de catálogo antiguo"
101914 -#: catgets/gencat.c:1303
101915 +#: catgets/gencat.c:1332
101916 msgid "conversion modules not available"
101917 msgstr "no están disponibles los módulos de conversión"
101919 -#: catgets/gencat.c:1329
101920 +#: catgets/gencat.c:1358
101921 msgid "cannot determine escape character"
101922 msgstr "no se puede determinar el carácter de escape"
101924 @@ -1909,7 +1909,7 @@
101925 # me gustaría que hubiera otra palabra mejor. SV
101926 # Siempre me han gustado F&C ;-)
101927 # A mí también :-) sv
101928 -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:178
101929 +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133
101930 #: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861
101931 msgid "Success"
101932 msgstr "Conseguido"
101933 @@ -3316,24 +3316,24 @@
101934 msgid "%s%sUnknown signal %d\n"
101935 msgstr "%s%sSeñal desconocida %d\n"
101937 -#: malloc/mcheck.c:296
101938 +#: malloc/mcheck.c:346
101939 msgid "memory is consistent, library is buggy\n"
101940 msgstr "la memoria es consistente, la biblioteca tiene un bicho\n"
101942 -#: malloc/mcheck.c:299
101943 +#: malloc/mcheck.c:349
101944 msgid "memory clobbered before allocated block\n"
101945 msgstr "memoria alterada antes del bloque de memoria asignado\n"
101947 -#: malloc/mcheck.c:302
101948 +#: malloc/mcheck.c:352
101949 msgid "memory clobbered past end of allocated block\n"
101950 msgstr "memoria alterada pasado el final del bloque de memoria asignado\n"
101952 -#: malloc/mcheck.c:305
101953 +#: malloc/mcheck.c:355
101954 msgid "block freed twice\n"
101955 msgstr "bloque liberado dos veces\n"
101957 # Revisar lo de bogus. creo que es eso.
101958 -#: malloc/mcheck.c:308
101959 +#: malloc/mcheck.c:358
101960 msgid "bogus mcheck_status, library is buggy\n"
101961 msgstr "valor de mcheck_status incorrecto, la biblioteca tiene un bicho\n"
101963 @@ -3372,6 +3372,10 @@
101964 msgid "DATAFILE [OUTFILE]"
101965 msgstr "FICHERODEDATOS [FICHERODESALIDA]"
101967 +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
101968 +msgid "Unknown error"
101969 +msgstr "Error desconocido"
101971 #: string/strsignal.c:69
101972 #, c-format
101973 msgid "Real-time signal %d"
101974 @@ -3396,7 +3400,7 @@
101975 msgid "%s: Memory exhausted: %s\n"
101976 msgstr "%s: Memoria agotada: %s\n"
101978 -#: timezone/zic.c:390 misc/error.c:120
101979 +#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155
101980 msgid "Unknown system error"
101981 msgstr "Error del sistema desconocido"
101983 @@ -3855,25 +3859,21 @@
101984 msgid "Interrupted by a signal"
101985 msgstr "Interrumpido por una señal"
101987 -#: posix/../sysdeps/posix/gai_strerror.c:57
101988 -msgid "Unknown error"
101989 -msgstr "Error desconocido"
101991 -#: posix/getconf.c:883
101992 +#: posix/getconf.c:889
101993 #, c-format
101994 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
101995 msgstr "Modo de empleo: %s [-v especificación] nombre_de_variable [ruta]\n"
101997 -#: posix/getconf.c:941
101998 +#: posix/getconf.c:947
101999 #, c-format
102000 msgid "unknown specification \"%s\""
102001 msgstr "especificación \"%s\" desconocida"
102003 -#: posix/getconf.c:968 posix/getconf.c:984
102004 +#: posix/getconf.c:974 posix/getconf.c:990
102005 msgid "undefined"
102006 msgstr "sin definir"
102008 -#: posix/getconf.c:1006
102009 +#: posix/getconf.c:1012
102010 #, c-format
102011 msgid "Unrecognized variable `%s'"
102012 msgstr "Variable no reconocida `%s'"
102013 @@ -3949,71 +3949,71 @@
102014 msgid "%s: option `-W %s' doesn't allow an argument\n"
102015 msgstr "%s: la opción `-W %s' no admite ningún argumento\n"
102017 -#: posix/regcomp.c:181
102018 +#: posix/regcomp.c:136
102019 msgid "No match"
102020 msgstr "No hay ninguna coincidencia"
102022 -#: posix/regcomp.c:184
102023 +#: posix/regcomp.c:139
102024 msgid "Invalid regular expression"
102025 msgstr "La expresión regular es errónea"
102027 -#: posix/regcomp.c:187
102028 +#: posix/regcomp.c:142
102029 msgid "Invalid collation character"
102030 msgstr "Carácter de unión inválido"
102032 -#: posix/regcomp.c:190
102033 +#: posix/regcomp.c:145
102034 msgid "Invalid character class name"
102035 msgstr "Nombre de clase de carácter inválido"
102037 -#: posix/regcomp.c:193
102038 +#: posix/regcomp.c:148
102039 msgid "Trailing backslash"
102040 msgstr "Barra invertida extra al final `\\'"
102042 -#: posix/regcomp.c:196
102043 +#: posix/regcomp.c:151
102044 msgid "Invalid back reference"
102045 msgstr "Referencia hacia atrás inválida"
102047 -#: posix/regcomp.c:199
102048 +#: posix/regcomp.c:154
102049 msgid "Unmatched [ or [^"
102050 msgstr "[ ó ^[ desemparejados"
102052 -#: posix/regcomp.c:202
102053 +#: posix/regcomp.c:157
102054 msgid "Unmatched ( or \\("
102055 msgstr "( ó \\( desemparejados"
102057 -#: posix/regcomp.c:205
102058 +#: posix/regcomp.c:160
102059 msgid "Unmatched \\{"
102060 msgstr "\\{ desemparejado"
102062 -#: posix/regcomp.c:208
102063 +#: posix/regcomp.c:163
102064 msgid "Invalid content of \\{\\}"
102065 msgstr "Contenido de \\{\\} inválido"
102067 -#: posix/regcomp.c:211
102068 +#: posix/regcomp.c:166
102069 msgid "Invalid range end"
102070 msgstr "Final de rango inválido"
102072 -#: posix/regcomp.c:214
102073 +#: posix/regcomp.c:169
102074 msgid "Memory exhausted"
102075 msgstr "Memoria agotada"
102077 -#: posix/regcomp.c:217
102078 +#: posix/regcomp.c:172
102079 msgid "Invalid preceding regular expression"
102080 msgstr "La expresión regular precedente es inválida"
102082 -#: posix/regcomp.c:220
102083 +#: posix/regcomp.c:175
102084 msgid "Premature end of regular expression"
102085 msgstr "Fin no esperado de la expresión regular"
102087 -#: posix/regcomp.c:223
102088 +#: posix/regcomp.c:178
102089 msgid "Regular expression too big"
102090 msgstr "La expresión regular es demasiado grande"
102092 -#: posix/regcomp.c:226
102093 +#: posix/regcomp.c:181
102094 msgid "Unmatched ) or \\)"
102095 msgstr ") ó \\) desemparejados"
102097 -#: posix/regcomp.c:673
102098 +#: posix/regcomp.c:615
102099 msgid "No previous regular expression"
102100 msgstr "No existe ninguna expresión regular anterior"
102102 @@ -4174,24 +4174,24 @@
102103 msgid "Service configuration to be used"
102104 msgstr "Configuración del servicio"
102106 -#: nss/getent.c:136 nss/getent.c:305
102107 +#: nss/getent.c:136 nss/getent.c:308
102108 #, c-format
102109 msgid "Enumeration not supported on %s\n"
102110 msgstr "La enumeración no está soportada sobre %s\n"
102112 -#: nss/getent.c:729
102113 +#: nss/getent.c:732
102114 msgid "getent - get entries from administrative database."
102115 msgstr "getent - obtiene entradas de la base de datos administrativa."
102117 -#: nss/getent.c:730
102118 +#: nss/getent.c:733
102119 msgid "Supported databases:"
102120 msgstr "Bases de datos admitidas:"
102122 -#: nss/getent.c:787 nscd/nscd.c:119 nscd/nscd_nischeck.c:64
102123 +#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64
102124 msgid "wrong number of arguments"
102125 msgstr "número incorrecto de argumentos"
102127 -#: nss/getent.c:797
102128 +#: nss/getent.c:800
102129 #, c-format
102130 msgid "Unknown database: %s\n"
102131 msgstr "Base de datos desconocida: %s\n"
102132 @@ -4221,77 +4221,81 @@
102133 msgid "invalid pointer size"
102134 msgstr "tamaño de puntero inválido"
102136 -#: inet/rcmd.c:174 inet/rcmd.c:177
102137 +#: inet/rcmd.c:163 inet/rcmd.c:166
102138 +msgid "rcmd: Cannot allocate memory\n"
102139 +msgstr "rcmd: No se puede asignar memoria\n"
102141 +#: inet/rcmd.c:185 inet/rcmd.c:188
102142 msgid "rcmd: socket: All ports in use\n"
102143 msgstr "rcmd: socket: Se están usando todos los puertos\n"
102145 -#: inet/rcmd.c:211
102146 +#: inet/rcmd.c:222
102147 #, c-format
102148 msgid "connect to address %s: "
102149 msgstr "conexión a la dirección %s: "
102151 -#: inet/rcmd.c:229
102152 +#: inet/rcmd.c:240
102153 #, c-format
102154 msgid "Trying %s...\n"
102155 msgstr "Intentando %s...\n"
102157 -#: inet/rcmd.c:278
102158 +#: inet/rcmd.c:289
102159 #, c-format
102160 msgid "rcmd: write (setting up stderr): %m\n"
102161 msgstr "rcmd: write (activando la salida de error estándar): %m\n"
102163 -#: inet/rcmd.c:299
102164 +#: inet/rcmd.c:310
102165 #, c-format
102166 msgid "rcmd: poll (setting up stderr): %m\n"
102167 msgstr "rcmd: poll (activando la salida de error estándar): %m\n"
102169 # ¿en la configuración del servicio?, ¿del circuito?, ¿o dejarlo así?
102170 # Es de locos, estuve viendo las/los fuentes, preferí dejarlo así. em
102171 -#: inet/rcmd.c:302
102172 +#: inet/rcmd.c:313
102173 msgid "poll: protocol failure in circuit setup\n"
102174 msgstr "poll: fallo de protocolo al configurar el circuito\n"
102176 # ??? lo mismo que arriba
102177 -#: inet/rcmd.c:346
102178 +#: inet/rcmd.c:358
102179 msgid "socket: protocol failure in circuit setup\n"
102180 msgstr "socket: fallo de protocolo al configurar el circuito\n"
102182 -#: inet/rcmd.c:368
102183 +#: inet/rcmd.c:387
102184 #, c-format
102185 msgid "rcmd: %s: short read"
102186 msgstr "rcmd: %s: lectura insuficiente"
102188 # ## Lo mismo con lstat. sv
102189 # Antes decía: No se pudo obtener información (lstat) del fichero .rhosts
102190 -#: inet/rcmd.c:524
102191 +#: inet/rcmd.c:549
102192 msgid "lstat failed"
102193 msgstr "lstat ha fallado"
102195 # Antes decía: .rhosts no es un fichero regular
102196 -#: inet/rcmd.c:526
102197 +#: inet/rcmd.c:551
102198 msgid "not regular file"
102199 msgstr "no es un fichero regular"
102201 -#: inet/rcmd.c:531
102202 +#: inet/rcmd.c:556
102203 msgid "cannot open"
102204 msgstr "no se puede abrir"
102206 # ## Sugerencia: Añadir (fstat) después de información. sv
102207 # Antes decía: No se pudo obtener información (fstat) del fichero .rhosts
102208 -#: inet/rcmd.c:533
102209 +#: inet/rcmd.c:558
102210 msgid "fstat failed"
102211 msgstr "fstat ha fallado"
102213 # Antes decía: El propietario del fichero .rhosts no es válido
102214 -#: inet/rcmd.c:535
102215 +#: inet/rcmd.c:560
102216 msgid "bad owner"
102217 msgstr "propietario incorrecto"
102219 -#: inet/rcmd.c:537
102220 +#: inet/rcmd.c:562
102221 msgid "writeable by other than owner"
102222 msgstr "puede ser modificado por otros además del propietario"
102224 -#: inet/rcmd.c:539
102225 +#: inet/rcmd.c:564
102226 msgid "hard linked somewhere"
102227 msgstr "hay un enlace duro en alguna parte"
102229 @@ -4539,115 +4543,115 @@
102230 msgid "Cannot receive reply to broadcast"
102231 msgstr "No se puede recibir la respuesta al `broadcast'"
102233 -#: sunrpc/rpc_main.c:289
102234 +#: sunrpc/rpc_main.c:288
102235 #, c-format
102236 msgid "%s: output would overwrite %s\n"
102237 msgstr "%s: la salida sobreescribiría %s\n"
102239 -#: sunrpc/rpc_main.c:296
102240 +#: sunrpc/rpc_main.c:295
102241 #, c-format
102242 msgid "%s: unable to open %s: %m\n"
102243 msgstr "%s: no se pudo abrir %s: %m\n"
102245 -#: sunrpc/rpc_main.c:308
102246 +#: sunrpc/rpc_main.c:307
102247 #, c-format
102248 msgid "%s: while writing output %s: %m"
102249 msgstr "%s: al escribir el resultado %s: %m:"
102251 # FIXME: El espacio final.
102252 -#: sunrpc/rpc_main.c:343
102253 +#: sunrpc/rpc_main.c:342
102254 #, c-format
102255 msgid "cannot find C preprocessor: %s \n"
102256 msgstr "no se puede encontrar el preprocesador de C: %s \n"
102258 -#: sunrpc/rpc_main.c:351
102259 +#: sunrpc/rpc_main.c:350
102260 msgid "cannot find any C preprocessor (cpp)\n"
102261 msgstr "no se puede encontrar ningún preprocesador de C (cpp)\n"
102263 -#: sunrpc/rpc_main.c:420
102264 +#: sunrpc/rpc_main.c:419
102265 #, c-format
102266 msgid "%s: C preprocessor failed with signal %d\n"
102267 msgstr "%s: El preprocesador de C falló con la señal %d\n"
102269 -#: sunrpc/rpc_main.c:423
102270 +#: sunrpc/rpc_main.c:422
102271 #, c-format
102272 msgid "%s: C preprocessor failed with exit code %d\n"
102273 msgstr "%s: El preprocesador de C falló con un código de retorno %d\n"
102275 -#: sunrpc/rpc_main.c:463
102276 +#: sunrpc/rpc_main.c:462
102277 #, c-format
102278 msgid "illegal nettype :`%s'\n"
102279 msgstr "tipodered ilegal :`%s'\n"
102281 -#: sunrpc/rpc_main.c:1105
102282 +#: sunrpc/rpc_main.c:1104
102283 msgid "rpcgen: too many defines\n"
102284 msgstr "rpcgen: demasiados defines\n"
102286 -#: sunrpc/rpc_main.c:1117
102287 +#: sunrpc/rpc_main.c:1116
102288 msgid "rpcgen: arglist coding error\n"
102289 msgstr "rpcgen: error de codificación de la lista de argumentos\n"
102291 #. TRANS: the file will not be removed; this is an
102292 #. TRANS: informative message.
102293 -#: sunrpc/rpc_main.c:1150
102294 +#: sunrpc/rpc_main.c:1149
102295 #, c-format
102296 msgid "file `%s' already exists and may be overwritten\n"
102297 msgstr "el fichero `%s' ya existe y podría ser sobreescrito\n"
102299 -#: sunrpc/rpc_main.c:1195
102300 +#: sunrpc/rpc_main.c:1194
102301 msgid "Cannot specify more than one input file!\n"
102302 msgstr "No se puede especificar más de un fichero de entrada\n"
102304 # Se admiten sugerencias para MT-safe. sv
102305 -#: sunrpc/rpc_main.c:1365
102306 +#: sunrpc/rpc_main.c:1364
102307 msgid "This implementation doesn't support newstyle or MT-safe code!\n"
102308 msgstr "¡Esta implementación no admite código de nuevo estilo o `MT-safe'!\n"
102310 -#: sunrpc/rpc_main.c:1374
102311 +#: sunrpc/rpc_main.c:1373
102312 msgid "Cannot use netid flag with inetd flag!\n"
102313 msgstr "No se puede usar la opción netid con la opción inetd\n"
102315 -#: sunrpc/rpc_main.c:1386
102316 +#: sunrpc/rpc_main.c:1385
102317 msgid "Cannot use netid flag without TIRPC!\n"
102318 msgstr "No se puede usar la opción netid sin TIRPC\n"
102320 -#: sunrpc/rpc_main.c:1393
102321 +#: sunrpc/rpc_main.c:1392
102322 msgid "Cannot use table flags with newstyle!\n"
102323 msgstr "No se pueden usar las opciones de la tabla con el nuevo estilo\n"
102325 -#: sunrpc/rpc_main.c:1412
102326 +#: sunrpc/rpc_main.c:1411
102327 msgid "\"infile\" is required for template generation flags.\n"
102328 msgstr ""
102329 "se necesita un \"fichero_de_entrada\" para las opciones de generación\n"
102330 "de plantillas\n"
102332 -#: sunrpc/rpc_main.c:1417
102333 +#: sunrpc/rpc_main.c:1416
102334 msgid "Cannot have more than one file generation flag!\n"
102335 msgstr "No se puede tener más de una opción de generación de fichero\n"
102337 -#: sunrpc/rpc_main.c:1426
102338 +#: sunrpc/rpc_main.c:1425
102339 #, c-format
102340 msgid "usage: %s infile\n"
102341 msgstr "modo de empleo: %s fichero_de_entrada\n"
102343 # Este mensaje tal vez habría que cortarlo por algún lado. sv
102344 -#: sunrpc/rpc_main.c:1427
102345 +#: sunrpc/rpc_main.c:1426
102346 #, c-format
102347 msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
102348 msgstr "\t%s [-abkCLNTM][-Dnombre[=valor]] [-i tamaño] [-I [-K segundos]] [-Y camino] fichero_de_entrada\n"
102350 # Y este también. sv
102351 -#: sunrpc/rpc_main.c:1429
102352 +#: sunrpc/rpc_main.c:1428
102353 #, c-format
102354 msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
102355 msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o fichero_de_salida] [fichero_de_entrada]\n"
102357 -#: sunrpc/rpc_main.c:1431
102358 +#: sunrpc/rpc_main.c:1430
102359 #, c-format
102360 msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
102361 msgstr "\t%s [-s tipored]* [-o fichero_de_salida] [fichero_de_entrada]\n"
102363 -#: sunrpc/rpc_main.c:1432
102364 +#: sunrpc/rpc_main.c:1431
102365 #, c-format
102366 msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
102367 msgstr "\t%s [-n netid]* [-o fichero_de_salida] [fichero_de_entrada]\n"
102368 @@ -5549,7 +5553,7 @@
102369 msgid "while allocating hash table entry"
102370 msgstr "al asignar espacio para la entrada en la tabla `hash'"
102372 -#: nscd/cache.c:150 nscd/connections.c:185
102373 +#: nscd/cache.c:150 nscd/connections.c:187
102374 #, c-format
102375 msgid "cannot stat() file `%s': %s"
102376 msgstr "no se puede ejecutar stat() sobre el fichero `%s': %s"
102377 @@ -5562,155 +5566,160 @@
102378 msgid "Cannot run nscd in secure mode as unprivileged user"
102379 msgstr "No se puede ejecutar nscd en modo seguro como usuario no privilegiado"
102381 -#: nscd/connections.c:199
102382 +#: nscd/connections.c:175
102383 +#, c-format
102384 +msgid "while allocating cache: %s"
102385 +msgstr "al asignar espacio para el caché: %s"
102387 +#: nscd/connections.c:200
102388 #, c-format
102389 msgid "cannot open socket: %s"
102390 msgstr "no se puede abrir el `socket': %s"
102392 -#: nscd/connections.c:217
102393 +#: nscd/connections.c:218
102394 #, c-format
102395 msgid "cannot enable socket to accept connections: %s"
102396 msgstr "no se puede activar el `socket' para aceptar conexiones: %s"
102398 -#: nscd/connections.c:259
102399 +#: nscd/connections.c:260
102400 #, c-format
102401 msgid "handle_request: request received (Version = %d)"
102402 msgstr "handle_request: petición recibida (Versión = %d)"
102404 -#: nscd/connections.c:265
102405 +#: nscd/connections.c:266
102406 #, c-format
102407 msgid "cannot handle old request version %d; current version is %d"
102408 msgstr ""
102409 "no se pueden manejar peticiones de la versión %d, la versión\n"
102410 "actual es %d"
102412 -#: nscd/connections.c:303 nscd/connections.c:325
102413 +#: nscd/connections.c:304 nscd/connections.c:326
102414 #, c-format
102415 msgid "cannot write result: %s"
102416 msgstr "no se puede escribir el resultado: %s"
102418 -#: nscd/connections.c:404 nscd/connections.c:498
102419 +#: nscd/connections.c:405 nscd/connections.c:499
102420 #, c-format
102421 msgid "error getting callers id: %s"
102422 msgstr "error al obtener el id de los llamantes: %s"
102424 -#: nscd/connections.c:470
102425 +#: nscd/connections.c:471
102426 #, c-format
102427 msgid "while accepting connection: %s"
102428 msgstr "al aceptar la conexión: %s"
102430 -#: nscd/connections.c:481
102431 +#: nscd/connections.c:482
102432 #, c-format
102433 msgid "short read while reading request: %s"
102434 msgstr "lectura insuficiente mientras se leía la petición: %s"
102436 -#: nscd/connections.c:517
102437 +#: nscd/connections.c:518
102438 #, c-format
102439 msgid "key length in request too long: %d"
102440 msgstr "la longitud de la clave en la petición es demasiado larga: %d"
102442 -#: nscd/connections.c:531
102443 +#: nscd/connections.c:532
102444 #, c-format
102445 msgid "short read while reading request key: %s"
102446 msgstr "se acabaron los datos mientras se leía la clave de petición: %s"
102448 -#: nscd/connections.c:590 nscd/connections.c:591 nscd/connections.c:610
102449 -#: nscd/connections.c:623 nscd/connections.c:629 nscd/connections.c:636
102450 +#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611
102451 +#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637
102452 #, c-format
102453 msgid "Failed to run nscd as user '%s'"
102454 msgstr "Fallo al ejecutar nscd como usuario `%s'"
102456 -#: nscd/connections.c:611
102457 +#: nscd/connections.c:612
102458 msgid "getgrouplist failed"
102459 msgstr "falló `getgrouplist'"
102461 -#: nscd/connections.c:624
102462 +#: nscd/connections.c:625
102463 msgid "setgroups failed"
102464 msgstr "falló `setgroups'"
102466 -#: nscd/grpcache.c:102 nscd/hstcache.c:110 nscd/pwdcache.c:108
102467 +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
102468 msgid "while allocating key copy"
102469 msgstr "al asignar espacio para la copia de la clave"
102471 -#: nscd/grpcache.c:152 nscd/hstcache.c:167 nscd/pwdcache.c:145
102472 +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
102473 msgid "while allocating cache entry"
102474 msgstr "al asignar espacio para la entrada en el caché"
102476 -#: nscd/grpcache.c:195 nscd/hstcache.c:281 nscd/pwdcache.c:191
102477 +#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192
102478 #, c-format
102479 msgid "short write in %s: %s"
102480 msgstr "escritura insuficiente en %s: %s"
102482 -#: nscd/grpcache.c:217
102483 +#: nscd/grpcache.c:218
102484 #, c-format
102485 msgid "Haven't found \"%s\" in group cache!"
102486 msgstr "No se ha encontrado \"%s\" en el caché de grupos"
102488 -#: nscd/grpcache.c:292
102489 +#: nscd/grpcache.c:284
102490 #, c-format
102491 msgid "Invalid numeric gid \"%s\"!"
102492 msgstr "¡gid numérico inválido \"%s\"!"
102494 -#: nscd/grpcache.c:299
102495 +#: nscd/grpcache.c:291
102496 #, c-format
102497 msgid "Haven't found \"%d\" in group cache!"
102498 msgstr "No se ha encontrado \"%d\" en el caché de grupo"
102500 -#: nscd/hstcache.c:303 nscd/hstcache.c:378 nscd/hstcache.c:456
102501 -#: nscd/hstcache.c:533
102502 +#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435
102503 +#: nscd/hstcache.c:500
102504 #, c-format
102505 msgid "Haven't found \"%s\" in hosts cache!"
102506 msgstr "No se ha encontrado \"%s\" en el caché de `hosts'"
102508 -#: nscd/nscd.c:80
102509 +#: nscd/nscd.c:85
102510 msgid "Read configuration data from NAME"
102511 msgstr "Lee datos de configuración de NOMBRE"
102513 -#: nscd/nscd.c:82
102514 +#: nscd/nscd.c:87
102515 msgid "Do not fork and display messages on the current tty"
102516 msgstr "No se divide y muestra los mensajes en la terminal actual"
102518 -#: nscd/nscd.c:83
102519 +#: nscd/nscd.c:88
102520 msgid "NUMBER"
102521 msgstr "NÚMERO"
102523 -#: nscd/nscd.c:83
102524 +#: nscd/nscd.c:88
102525 msgid "Start NUMBER threads"
102526 msgstr "Comienza NÚMERO hilos"
102528 -#: nscd/nscd.c:84
102529 +#: nscd/nscd.c:89
102530 msgid "Shut the server down"
102531 msgstr "Apagar el servidor"
102533 -#: nscd/nscd.c:85
102534 +#: nscd/nscd.c:90
102535 msgid "Print current configuration statistic"
102536 msgstr "Muestra una estadística sobre la configuración actual"
102538 -#: nscd/nscd.c:86
102539 +#: nscd/nscd.c:91
102540 msgid "TABLE"
102541 msgstr "TABLA"
102543 -#: nscd/nscd.c:87
102544 +#: nscd/nscd.c:92
102545 msgid "Invalidate the specified cache"
102546 msgstr "Invalida la caché especificada"
102548 -#: nscd/nscd.c:88
102549 +#: nscd/nscd.c:93
102550 msgid "TABLE,yes"
102551 msgstr "TABLA,sí"
102553 -#: nscd/nscd.c:88
102554 +#: nscd/nscd.c:93
102555 msgid "Use separate cache for each user"
102556 msgstr "Utiliza una caché separada para cada usuario"
102558 -#: nscd/nscd.c:93
102559 +#: nscd/nscd.c:98
102560 msgid "Name Service Cache Daemon."
102561 msgstr "Daemon de Caché del Servicio de Nombres."
102563 -#: nscd/nscd.c:126
102564 +#: nscd/nscd.c:131
102565 msgid "already running"
102566 msgstr "ya está funcionando"
102568 -#: nscd/nscd.c:192 nscd/nscd.c:212 nscd/nscd.c:218
102569 +#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269
102570 msgid "Only root is allowed to use this option!"
102571 msgstr "Solamente root puede usar esta opción"
102573 @@ -5800,22 +5809,22 @@
102574 "%15ld%% tasa de aciertos de caché\n"
102575 "%15s compruebe /etc/%s para cambios\n"
102577 -#: nscd/pwdcache.c:213
102578 +#: nscd/pwdcache.c:214
102579 #, c-format
102580 msgid "Haven't found \"%s\" in password cache!"
102581 msgstr "No se ha encontrado \"%s\" en el caché de contraseñas"
102583 -#: nscd/pwdcache.c:288
102584 +#: nscd/pwdcache.c:280
102585 #, c-format
102586 msgid "Invalid numeric uid \"%s\"!"
102587 msgstr "¡uid numérico inválido \"%s\"!"
102589 -#: nscd/pwdcache.c:295
102590 +#: nscd/pwdcache.c:287
102591 #, c-format
102592 msgid "Haven't found \"%d\" in password cache!"
102593 msgstr "No se ha encontrado \"%d\" en el caché de contraseñas"
102595 -#: elf/../sysdeps/generic/dl-sysdep.c:297
102596 +#: elf/../sysdeps/generic/dl-sysdep.c:357
102597 msgid "cannot create capability list"
102598 msgstr "no se puede crear la lista de capacidades"
102600 @@ -5867,7 +5876,7 @@
102601 msgid ", OS ABI: %s %d.%d.%d"
102602 msgstr ", ABI del SO: %s %d.%d.%d"
102604 -#: elf/cache.c:136 elf/ldconfig.c:1033
102605 +#: elf/cache.c:136 elf/ldconfig.c:1045
102606 #, c-format
102607 msgid "Can't open cache file %s\n"
102608 msgstr "No se puede abrir el fichero de caché %s\n"
102609 @@ -5914,17 +5923,17 @@
102610 msgid "Renaming of %s to %s failed"
102611 msgstr "Falló el renombramiento de %s a %s"
102613 -#: elf/dl-close.c:113
102614 +#: elf/dl-close.c:128
102615 msgid "shared object not open"
102616 msgstr "el objeto compartido no está abierto"
102618 -#: elf/dl-close.c:357 elf/dl-open.c:436
102619 +#: elf/dl-close.c:486 elf/dl-open.c:444
102620 msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
102621 msgstr ""
102622 "¡El contador de generaciones TLS ha vuelto a cero! Por favor envíe un informe\n"
102623 "con el script 'glibcbug'"
102625 -#: elf/dl-deps.c:111 elf/dl-open.c:177
102626 +#: elf/dl-deps.c:111 elf/dl-open.c:183
102627 msgid "DST not allowed in SUID/SGID programs"
102628 msgstr "No se permite DST en programas SUID/SGID"
102630 @@ -5946,185 +5955,199 @@
102631 msgid "cannot allocate dependency list"
102632 msgstr "no se pudo asignar espacio para la lista de dependencias"
102634 -#: elf/dl-deps.c:492 elf/dl-deps.c:547
102635 +#: elf/dl-deps.c:494 elf/dl-deps.c:549
102636 msgid "cannot allocate symbol search list"
102637 msgstr "no se puede asignar espacio para la lista de búsqueda de los símbolos"
102639 -#: elf/dl-deps.c:532
102640 +#: elf/dl-deps.c:534
102641 msgid "Filters not supported with LD_TRACE_PRELINKING"
102642 msgstr "No se admiten filtros con LD_TRACE_PRELINKING"
102644 # Véase "A bug's life".
102645 -#: elf/dl-error.c:73
102646 +#: elf/dl-error.c:75
102647 msgid "DYNAMIC LINKER BUG!!!"
102648 msgstr "¡¡¡HAY UN BICHO EN EL ENLAZADOR DINÁMICO!!!"
102650 -#: elf/dl-error.c:106
102651 +#: elf/dl-error.c:108
102652 msgid "error while loading shared libraries"
102653 msgstr "error al cargar las bibliotecas compartidas"
102655 -#: elf/dl-load.c:338
102656 +#: elf/dl-load.c:339
102657 msgid "cannot allocate name record"
102658 msgstr "no se puede asignar el registro del nombre"
102660 # He intentado mejorarlo un poco ...
102662 -#: elf/dl-load.c:440 elf/dl-load.c:520 elf/dl-load.c:614 elf/dl-load.c:709
102663 +#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707
102664 msgid "cannot create cache for search path"
102665 msgstr "no se puede crear un caché para la ruta de búsqueda"
102667 -#: elf/dl-load.c:545
102668 +#: elf/dl-load.c:543
102669 msgid "cannot create RUNPATH/RPATH copy"
102670 msgstr "no se puede crear una copia RUNPATH/RPATH"
102672 -#: elf/dl-load.c:600
102673 +#: elf/dl-load.c:598
102674 msgid "cannot create search path array"
102675 msgstr "no se puede crear la matriz de la ruta de búsqueda"
102677 -#: elf/dl-load.c:796
102678 +#: elf/dl-load.c:794
102679 msgid "cannot stat shared object"
102680 msgstr "no se puede efectuar `stat' sobre el objeto compartido"
102682 -#: elf/dl-load.c:840
102683 +#: elf/dl-load.c:838
102684 msgid "cannot open zero fill device"
102685 msgstr "no se puede abrir el dispositivo de `zero fill'"
102687 -#: elf/dl-load.c:849 elf/dl-load.c:1855
102688 +#: elf/dl-load.c:847 elf/dl-load.c:1902
102689 msgid "cannot create shared object descriptor"
102690 msgstr "no se puede crear el descriptor del objeto compartido"
102692 -#: elf/dl-load.c:868 elf/dl-load.c:1351 elf/dl-load.c:1434
102693 +#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481
102694 msgid "cannot read file data"
102695 msgstr "no se pueden leer los datos del fichero"
102697 -#: elf/dl-load.c:908
102698 +#: elf/dl-load.c:906
102699 msgid "ELF load command alignment not page-aligned"
102700 msgstr "El alineamiento de la orden de carga ELF no está alineada a la página"
102702 -#: elf/dl-load.c:915
102703 +#: elf/dl-load.c:913
102704 msgid "ELF load command address/offset not properly aligned"
102705 msgstr "La dirección/desplazamiento de la orden de carga ELF no está bien alineada"
102707 -#: elf/dl-load.c:996
102708 +#: elf/dl-load.c:988
102709 +msgid "cannot allocate TLS data structures for initial thread"
102710 +msgstr "no se pueden crear las estructuras de datos TLS para el hilo inicial"
102712 +#: elf/dl-load.c:1012
102713 +msgid "cannot handle TLS data"
102714 +msgstr "no se pueden manejar los datos de TLS"
102716 +#: elf/dl-load.c:1047
102717 msgid "failed to map segment from shared object"
102718 msgstr "fallo al asignar un segmento del objeto compartido"
102720 -#: elf/dl-load.c:1020
102721 +#: elf/dl-load.c:1071
102722 msgid "cannot dynamically load executable"
102723 msgstr "no se puede cargar el ejecutable dinámicamente"
102725 -#: elf/dl-load.c:1081
102726 +#: elf/dl-load.c:1132
102727 msgid "cannot change memory protections"
102728 msgstr "no se pueden cambiar las protecciones de memoria"
102730 -#: elf/dl-load.c:1100
102731 +#: elf/dl-load.c:1151
102732 msgid "cannot map zero-fill pages"
102733 msgstr "no se pueden asignar páginas de tipo `zero-fill'"
102735 -#: elf/dl-load.c:1118
102736 +#: elf/dl-load.c:1169
102737 msgid "cannot allocate memory for program header"
102738 msgstr "no se puede asignar memoria para la cabecera del programa"
102740 -#: elf/dl-load.c:1149
102741 +#: elf/dl-load.c:1200
102742 msgid "object file has no dynamic section"
102743 msgstr "el fichero objeto no tiene sección dinámica"
102745 -#: elf/dl-load.c:1193
102746 +#: elf/dl-load.c:1240
102747 msgid "shared object cannot be dlopen()ed"
102748 msgstr "no se puede efectuar dlopen() sobre el objeto compartido"
102750 -#: elf/dl-load.c:1216
102751 +#: elf/dl-load.c:1263
102752 msgid "cannot create searchlist"
102753 msgstr "no se puede crear la lista de búsqueda"
102755 -#: elf/dl-load.c:1351
102756 +#: elf/dl-load.c:1398
102757 msgid "file too short"
102758 msgstr "fichero demasiado corto"
102760 -#: elf/dl-load.c:1374
102761 +#: elf/dl-load.c:1421
102762 msgid "invalid ELF header"
102763 msgstr "cabecera ELF inválida"
102765 -#: elf/dl-load.c:1383
102766 +#: elf/dl-load.c:1430
102767 msgid "ELF file data encoding not big-endian"
102768 msgstr "La codificación de los datos del fichero ELF no es `big-endian'"
102770 -#: elf/dl-load.c:1385
102771 +#: elf/dl-load.c:1432
102772 msgid "ELF file data encoding not little-endian"
102773 msgstr "La codificación de los datos del fichero ELF no es `little-endian'"
102775 -#: elf/dl-load.c:1389
102776 +#: elf/dl-load.c:1436
102777 msgid "ELF file version ident does not match current one"
102778 msgstr "La identificación de versión del fichero ELF no encaja con la actual"
102780 -#: elf/dl-load.c:1393
102781 +#: elf/dl-load.c:1440
102782 msgid "ELF file OS ABI invalid"
102783 msgstr "ABI del OS del fichero ELF inválida"
102785 -#: elf/dl-load.c:1395
102786 +#: elf/dl-load.c:1442
102787 msgid "ELF file ABI version invalid"
102788 msgstr "Versión de ABI del fichero ELF inválida"
102790 -#: elf/dl-load.c:1398
102791 +#: elf/dl-load.c:1445
102792 msgid "internal error"
102793 msgstr "error interno"
102795 -#: elf/dl-load.c:1405
102796 +#: elf/dl-load.c:1452
102797 msgid "ELF file version does not match current one"
102798 msgstr "La versión del fichero ELF no coincide con la actual"
102800 -#: elf/dl-load.c:1413
102801 +#: elf/dl-load.c:1460
102802 msgid "ELF file's phentsize not the expected size"
102803 msgstr "El `phentsize' del fichero ELF no es el tamaño esperado"
102805 -#: elf/dl-load.c:1419
102806 +#: elf/dl-load.c:1466
102807 msgid "only ET_DYN and ET_EXEC can be loaded"
102808 msgstr "solamente pueden cargarse ET_DYN y ET_EXEC"
102810 -#: elf/dl-load.c:1870
102811 +#: elf/dl-load.c:1917
102812 msgid "cannot open shared object file"
102813 msgstr "no se puede abrir el fichero del objeto compartido"
102815 -#: elf/dl-lookup.c:248 elf/dl-lookup.c:413
102816 +#: elf/dl-lookup.c:265 elf/dl-lookup.c:430
102817 msgid "relocation error"
102818 msgstr "error de relocalización"
102820 -#: elf/dl-open.c:105
102821 +#: elf/dl-open.c:111
102822 msgid "cannot extend global scope"
102823 msgstr "no se puede extender el ámbito global"
102825 -#: elf/dl-open.c:208
102826 +#: elf/dl-open.c:214
102827 msgid "empty dynamic string token substitution"
102828 msgstr "sustitución dinámica de un elemento por una cadena vacía"
102830 -#: elf/dl-open.c:345 elf/dl-open.c:356
102831 +#: elf/dl-open.c:351 elf/dl-open.c:362
102832 msgid "cannot create scope list"
102833 msgstr "no se puede crear la lista de ámbito"
102835 -#: elf/dl-open.c:416
102836 +#: elf/dl-open.c:424
102837 msgid "cannot create TLS data structures"
102838 msgstr "no se pueden crear las estructuras de datos TLS"
102840 -#: elf/dl-open.c:478
102841 +#: elf/dl-open.c:486
102842 msgid "invalid mode for dlopen()"
102843 msgstr "modo inválido para dlopen()"
102845 -#: elf/dl-reloc.c:88
102846 +#: elf/dl-reloc.c:58
102847 +msgid "shared object cannot be dlopen()ed: static TLS memory too small"
102848 +msgstr ""
102849 +"no se puede efectuar dlopen() sobre el objeto compartido: memoria estática TLS\n"
102850 +"demasiado pequeña"
102852 +#: elf/dl-reloc.c:118
102853 msgid "cannot make segment writable for relocation"
102854 msgstr "no se puede hacer el segmento escribible para su relocalización"
102856 -#: elf/dl-reloc.c:174
102857 +#: elf/dl-reloc.c:219
102858 #, c-format
102859 msgid "%s: profiler found no PLTREL in object %s\n"
102860 msgstr "%s el `profiler' no encontró ningún PLTREL en el objeto %s\n"
102862 -#: elf/dl-reloc.c:186
102863 +#: elf/dl-reloc.c:231
102864 #, c-format
102865 msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
102866 msgstr "%s: el `profiler' se quedó sin memoria al ocultar el PLTREL de %s\n"
102868 # Se admiten sugerencias. sv
102869 -#: elf/dl-reloc.c:201
102870 +#: elf/dl-reloc.c:246
102871 msgid "cannot restore segment prot after reloc"
102872 msgstr "no se puede restaurar el `prot' del segmento después de la relocalización"
102874 @@ -6183,119 +6206,119 @@
102875 msgid "Configure Dynamic Linker Run Time Bindings."
102876 msgstr "Configura las asociaciones de tiempo de ejecución del enlazador dinámico"
102878 -#: elf/ldconfig.c:282
102879 +#: elf/ldconfig.c:294
102880 #, c-format
102881 msgid "Path `%s' given more than once"
102882 msgstr "Se ha dado la ruta `%s' más de una vez"
102884 -#: elf/ldconfig.c:326
102885 +#: elf/ldconfig.c:338
102886 #, c-format
102887 msgid "%s is not a known library type"
102888 msgstr "%s no es un tipo de biblioteca conocido"
102890 -#: elf/ldconfig.c:344
102891 +#: elf/ldconfig.c:356
102892 #, c-format
102893 msgid "Can't stat %s"
102894 msgstr "No se puede efectuar `stat' sobre %s"
102896 -#: elf/ldconfig.c:414
102897 +#: elf/ldconfig.c:426
102898 #, c-format
102899 msgid "Can't stat %s\n"
102900 msgstr "No se puede efectuar `stat' sobre %s\n"
102902 -#: elf/ldconfig.c:424
102903 +#: elf/ldconfig.c:436
102904 #, c-format
102905 msgid "%s is not a symbolic link\n"
102906 msgstr "%s no es un enlace simbólico\n"
102908 -#: elf/ldconfig.c:443
102909 +#: elf/ldconfig.c:455
102910 #, c-format
102911 msgid "Can't unlink %s"
102912 msgstr "No se puede efectuar `unlink' sobre %s"
102914 -#: elf/ldconfig.c:449
102915 +#: elf/ldconfig.c:461
102916 #, c-format
102917 msgid "Can't link %s to %s"
102918 msgstr "No se puede crear un enlace de %s a %s"
102920 -#: elf/ldconfig.c:455
102921 +#: elf/ldconfig.c:467
102922 msgid " (changed)\n"
102923 msgstr " (cambiado)\n"
102925 -#: elf/ldconfig.c:457
102926 +#: elf/ldconfig.c:469
102927 msgid " (SKIPPED)\n"
102928 msgstr " (SALTADO)\n"
102930 -#: elf/ldconfig.c:512
102931 +#: elf/ldconfig.c:524
102932 #, c-format
102933 msgid "Can't find %s"
102934 msgstr "No se encuentra %s"
102936 -#: elf/ldconfig.c:528
102937 +#: elf/ldconfig.c:540
102938 #, c-format
102939 msgid "Can't lstat %s"
102940 msgstr "No se puede efectuar `lstat' sobre %s"
102942 -#: elf/ldconfig.c:535
102943 +#: elf/ldconfig.c:547
102944 #, c-format
102945 msgid "Ignored file %s since it is not a regular file."
102946 msgstr "Descartado el fichero %s dado que no es un fichero regular."
102948 -#: elf/ldconfig.c:543
102949 +#: elf/ldconfig.c:555
102950 #, c-format
102951 msgid "No link created since soname could not be found for %s"
102952 msgstr "No se creó el enlace ya que no se encontró el soname para %s"
102954 -#: elf/ldconfig.c:634
102955 +#: elf/ldconfig.c:646
102956 #, c-format
102957 msgid "Can't open directory %s"
102958 msgstr "No se puede abrir el directorio %s"
102960 -#: elf/ldconfig.c:689 elf/ldconfig.c:736
102961 +#: elf/ldconfig.c:701 elf/ldconfig.c:748
102962 #, c-format
102963 msgid "Cannot lstat %s"
102964 msgstr "No se puede efectuar `lstat' sobre %s"
102966 -#: elf/ldconfig.c:701
102967 +#: elf/ldconfig.c:713
102968 #, c-format
102969 msgid "Cannot stat %s"
102970 msgstr "No se puede efectuar `stat' sobre %s"
102972 -#: elf/ldconfig.c:758 elf/readlib.c:93
102973 +#: elf/ldconfig.c:770 elf/readlib.c:93
102974 #, c-format
102975 msgid "Input file %s not found.\n"
102976 msgstr "No se encontró el fichero de entrada %s.\n"
102978 -#: elf/ldconfig.c:792
102979 +#: elf/ldconfig.c:804
102980 #, c-format
102981 msgid "libc5 library %s in wrong directory"
102982 msgstr "biblioteca libc5 %s en un directorio equivocado"
102984 -#: elf/ldconfig.c:795
102985 +#: elf/ldconfig.c:807
102986 #, c-format
102987 msgid "libc6 library %s in wrong directory"
102988 msgstr "biblioteca libc6 %s en un directorio equivocado"
102990 -#: elf/ldconfig.c:798
102991 +#: elf/ldconfig.c:810
102992 #, c-format
102993 msgid "libc4 library %s in wrong directory"
102994 msgstr "biblioteca libc4 %s en un directorio equivocado"
102996 -#: elf/ldconfig.c:825
102997 +#: elf/ldconfig.c:837
102998 #, c-format
102999 msgid "libraries %s and %s in directory %s have same soname but different type."
103000 msgstr "las bibliotecas %s y %s en el directorio %s tienen el mismo soname pero distinto tipo."
103002 -#: elf/ldconfig.c:928
103003 +#: elf/ldconfig.c:940
103004 #, c-format
103005 msgid "Can't open configuration file %s"
103006 msgstr "No se puede abrir el fichero de configuración `%s'"
103008 -#: elf/ldconfig.c:1012
103009 +#: elf/ldconfig.c:1024
103010 msgid "Can't chdir to /"
103011 msgstr "No se puede cambiar al directorio /"
103013 -#: elf/ldconfig.c:1054
103014 +#: elf/ldconfig.c:1066
103015 #, c-format
103016 msgid "Can't open cache file directory %s\n"
103017 msgstr "No se puede leer el directorio de ficheros de caché %s\n"
103018 Binary files glibc-2.3.2/po/fi.mo and glibc-2.3.2-200304020432/po/fi.mo differ
103019 diff -u -udbrN glibc-2.3.2/po/fi.po glibc-2.3.2-200304020432/po/fi.po
103020 --- glibc-2.3.2/po/fi.po Mon Dec 2 19:11:53 2002
103021 +++ glibc-2.3.2-200304020432/po/fi.po Sun Mar 9 18:47:01 2003
103022 @@ -1,11 +1,16 @@
103023 # Finnish messages for GNU libc.
103024 -# Copyright © 2002 Free Software Foundation, Inc.
103025 -# Lauri Nurmi <lanurmi@iki.fi>, 2002.
103026 +# Copyright © 2003 Free Software Foundation, Inc.
103027 +# Lauri Nurmi <lanurmi@iki.fi>, 2002, 2003.
103028 # Thanks to:
103029 # * Timo Laine <tila at surfeu.fi> for suggestions
103031 # "locale" on suomennettu uudella sanalla "maa-asetusto".
103033 +# Pitäisikö signaalien nimien olla aktiivissa vai passiivissa?
103034 +# esim. Terminated = Päättynyt vai Päätetty?
103035 +# Aborted = Keskeytynyt vai Keskeytetty?
103038 # (parempia) suomennosehdotuksia kaivataan sanoille:
103039 # exchange -- vaihto? (mitä ihmettä?)
103040 # ellipsis -- sanankatkaisu? ATK-sanakirja sanoo näin.
103041 @@ -13,9 +18,9 @@
103043 msgid ""
103044 msgstr ""
103045 -"Project-Id-Version: libc 2.3.1\n"
103046 -"POT-Creation-Date: 2002-10-02 17:22-0700\n"
103047 -"PO-Revision-Date: 2002-12-02 05:20+0300\n"
103048 +"Project-Id-Version: libc 2.3.2\n"
103049 +"POT-Creation-Date: 2003-02-22 15:34-0800\n"
103050 +"PO-Revision-Date: 2003-03-08 21:53+0200\n"
103051 "Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\n"
103052 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
103053 "MIME-Version: 1.0\n"
103054 @@ -79,7 +84,7 @@
103056 #: sysdeps/generic/siglist.h:41 stdio-common/../sysdeps/unix/siglist.c:41
103057 msgid "Terminated"
103058 -msgstr "Päättynyt"
103059 +msgstr "Päätetty"
103061 #: sysdeps/generic/siglist.h:42 stdio-common/../sysdeps/unix/siglist.c:42
103062 msgid "Urgent I/O condition"
103063 @@ -87,11 +92,11 @@
103065 #: sysdeps/generic/siglist.h:43 stdio-common/../sysdeps/unix/siglist.c:43
103066 msgid "Stopped (signal)"
103067 -msgstr "Pysähtynyt (signaali)"
103068 +msgstr "Pysäytetty (signaali)"
103070 #: sysdeps/generic/siglist.h:44 stdio-common/../sysdeps/unix/siglist.c:44
103071 msgid "Stopped"
103072 -msgstr "Pysähtynyt"
103073 +msgstr "Pysäytetty"
103075 #: sysdeps/generic/siglist.h:45 stdio-common/../sysdeps/unix/siglist.c:45
103076 msgid "Continued"
103077 @@ -103,11 +108,11 @@
103079 #: sysdeps/generic/siglist.h:47 stdio-common/../sysdeps/unix/siglist.c:47
103080 msgid "Stopped (tty input)"
103081 -msgstr "Pysähtynyt (päätteen syöte)"
103082 +msgstr "Pysäytetty (päätteen syöte)"
103084 #: sysdeps/generic/siglist.h:48 stdio-common/../sysdeps/unix/siglist.c:48
103085 msgid "Stopped (tty output)"
103086 -msgstr "Pysähtynyt (päätteen tuloste)"
103087 +msgstr "Pysäytetty (päätteen tuloste)"
103089 #: sysdeps/generic/siglist.h:49 stdio-common/../sysdeps/unix/siglist.c:49
103090 msgid "I/O possible"
103091 @@ -268,7 +273,7 @@
103093 #: iconv/iconv_prog.c:241
103094 #, c-format
103095 -msgid "conversions from `%s' and to `%s' are not supported"
103096 +msgid "conversion from `%s' and to `%s' are not supported"
103097 msgstr "muunnos \"%s\" <-> \"%s\" ei ole tuettu"
103099 #: iconv/iconv_prog.c:246
103100 @@ -294,7 +299,7 @@
103101 msgid "error while closing output file"
103102 msgstr "virhe suljettaessa tulostiedostoa"
103104 -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:355 locale/programs/locale.c:268
103105 +#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274
103106 #: locale/programs/localedef.c:372 catgets/gencat.c:233
103107 #: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
103108 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
103109 @@ -302,9 +307,9 @@
103110 "Ilmoita ohjelmistovirheistä \"glibcbug\"-skriptillä (englanniksi) osoitteeseen <bugs@gnu.org>.\n"
103111 "Suomennoksen virheistä voit ilmoittaa listalle <translation-team-fi@lists.sourceforge.net>.\n"
103113 -#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:369 locale/programs/locale.c:281
103114 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:904
103115 -#: nss/getent.c:74 nscd/nscd.c:279 nscd/nscd_nischeck.c:90 elf/ldconfig.c:259
103116 +#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287
103117 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910
103118 +#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271
103119 #: elf/sprof.c:349
103120 #, c-format
103121 msgid ""
103122 @@ -316,9 +321,9 @@
103123 "Tämä on vapaa ohjelmisto; katso kopiointiehdot lähdekoodista. Takuuta EI\n"
103124 "ole, ei edes KAUPALLISESTI HYVÄKSYTTÄVÄSTÄ LAADUSTA tai SOPIVUUDESTA TIETTYYN TARKOITUKSEEN.\n"
103126 -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:374 locale/programs/locale.c:286
103127 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:909
103128 -#: nss/getent.c:79 nscd/nscd.c:284 nscd/nscd_nischeck.c:95 elf/ldconfig.c:264
103129 +#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292
103130 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915
103131 +#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276
103132 #: elf/sprof.c:355
103133 #, c-format
103134 msgid "Written by %s.\n"
103135 @@ -370,15 +375,15 @@
103136 msgid "Prefix used for all file accesses"
103137 msgstr "Jokaisen tiedoston käsittelyssä käytettävä etuliite"
103139 -#: iconv/iconvconfig.c:325 locale/programs/localedef.c:292
103140 +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
103141 msgid "no output file produced because warning were issued"
103142 msgstr "tulostiedostoa ei tuotettu varoituksen takia"
103144 -#: iconv/iconvconfig.c:403
103145 +#: iconv/iconvconfig.c:405
103146 msgid "while inserting in search tree"
103147 msgstr "lisättäessä hakupuuhun"
103149 -#: iconv/iconvconfig.c:1202
103150 +#: iconv/iconvconfig.c:1204
103151 msgid "cannot generate output file"
103152 msgstr "tulostiedostoa ei voi luoda"
103154 @@ -1288,7 +1293,7 @@
103155 msgid "unterminated symbolic name"
103156 msgstr "päättämätön symbolinen nimi"
103158 -#: locale/programs/linereader.c:537 catgets/gencat.c:1166
103159 +#: locale/programs/linereader.c:537 catgets/gencat.c:1195
103160 msgid "invalid escape sequence"
103161 msgstr "virheellinen ohjaussarja"
103163 @@ -1318,39 +1323,39 @@
103164 msgid "trailing garbage at end of line"
103165 msgstr "roskaa rivin lopussa"
103167 -#: locale/programs/locale.c:73
103168 +#: locale/programs/locale.c:75
103169 msgid "System information:"
103170 msgstr "Tietoa järjestelmästä:"
103172 -#: locale/programs/locale.c:75
103173 +#: locale/programs/locale.c:77
103174 msgid "Write names of available locales"
103175 msgstr "Näytä käytettävissä olevien maa-asetustojen nimet"
103177 -#: locale/programs/locale.c:77
103178 +#: locale/programs/locale.c:79
103179 msgid "Write names of available charmaps"
103180 msgstr "Näytä käytettävissä olevien merkistökarttojen nimet"
103182 -#: locale/programs/locale.c:78
103183 +#: locale/programs/locale.c:80
103184 msgid "Modify output format:"
103185 msgstr "Muuta tulostemuotoa:"
103187 -#: locale/programs/locale.c:79
103188 +#: locale/programs/locale.c:81
103189 msgid "Write names of selected categories"
103190 msgstr "Näytä valittujen kategorioiden nimet"
103192 -#: locale/programs/locale.c:80
103193 +#: locale/programs/locale.c:82
103194 msgid "Write names of selected keywords"
103195 msgstr "Näytä valittujen avainsanojen nimet"
103197 -#: locale/programs/locale.c:81
103198 +#: locale/programs/locale.c:83
103199 msgid "Print more information"
103200 msgstr "Näytä lisää tietoa"
103202 -#: locale/programs/locale.c:86
103203 +#: locale/programs/locale.c:88
103204 msgid "Get locale-specific information."
103205 msgstr "Hae maa-asetustokohtaiset tiedot."
103207 -#: locale/programs/locale.c:89
103208 +#: locale/programs/locale.c:91
103209 msgid ""
103210 "NAME\n"
103211 "[-a|-m]"
103212 @@ -1358,7 +1363,7 @@
103213 "NIMI\n"
103214 "[-a|-m]"
103216 -#: locale/programs/locale.c:488
103217 +#: locale/programs/locale.c:512
103218 msgid "while preparing output"
103219 msgstr "valmisteltaessa tulostetta"
103221 @@ -1489,16 +1494,16 @@
103222 msgid "cannot create temporary file"
103223 msgstr "tilapäistä tiedostoa ei voi luoda"
103225 -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:302
103226 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
103227 msgid "cannot initialize archive file"
103228 msgstr "arkistotiedostoa ei voi alustaa"
103230 -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:309
103231 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
103232 msgid "cannot resize archive file"
103233 msgstr "arkistotiedoston kokoa ei voi muuttaa"
103235 -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:318
103236 -#: locale/programs/locarchive.c:508
103237 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
103238 +#: locale/programs/locarchive.c:511
103239 msgid "cannot map archive header"
103240 msgstr "arkiston otsaketta ei voi kartoittaa"
103242 @@ -1514,88 +1519,88 @@
103243 msgid "cannot map locale archive file"
103244 msgstr "maa-asetustoarkistoa \"%s\" ei voi kartoittaa"
103246 -#: locale/programs/locarchive.c:326
103247 +#: locale/programs/locarchive.c:329
103248 msgid "cannot lock new archive"
103249 msgstr "uutta arkistoa ei voi lukita"
103251 -#: locale/programs/locarchive.c:377
103252 +#: locale/programs/locarchive.c:380
103253 msgid "cannot extend locale archive file"
103254 msgstr "maa-asetustoarkistoa ei voi laajentaa"
103256 -#: locale/programs/locarchive.c:386
103257 +#: locale/programs/locarchive.c:389
103258 msgid "cannot change mode of resized locale archive"
103259 msgstr "maa-asetustoarkiston tilaa ei voi muuttaa"
103261 -#: locale/programs/locarchive.c:394
103262 +#: locale/programs/locarchive.c:397
103263 msgid "cannot rename new archive"
103264 msgstr "uutta arkistoa ei voi nimetä uudelleen"
103266 -#: locale/programs/locarchive.c:447
103267 +#: locale/programs/locarchive.c:450
103268 #, c-format
103269 msgid "cannot open locale archive \"%s\""
103270 msgstr "maa-asetustoarkistoa \"%s\" ei voi avata"
103272 -#: locale/programs/locarchive.c:452
103273 +#: locale/programs/locarchive.c:455
103274 #, c-format
103275 msgid "cannot stat locale archive \"%s\""
103276 msgstr "maa-asetustoarkiston \"%s\" tilaa ei voi lukea"
103278 -#: locale/programs/locarchive.c:471
103279 +#: locale/programs/locarchive.c:474
103280 #, c-format
103281 msgid "cannot lock locale archive \"%s\""
103282 msgstr "maa-asetustoarkistoa \"%s\" ei voi lukita"
103284 -#: locale/programs/locarchive.c:494
103285 +#: locale/programs/locarchive.c:497
103286 msgid "cannot read archive header"
103287 msgstr "arkiston otsaketta ei voi lukea"
103289 -#: locale/programs/locarchive.c:554
103290 +#: locale/programs/locarchive.c:557
103291 #, c-format
103292 msgid "locale '%s' already exists"
103293 msgstr "maa-asetusto \"%s\" on jo olemassa"
103295 -#: locale/programs/locarchive.c:784 locale/programs/locarchive.c:799
103296 -#: locale/programs/locarchive.c:811 locale/programs/locarchive.c:823
103297 +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
103298 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
103299 #: locale/programs/locfile.c:343
103300 msgid "cannot add to locale archive"
103301 msgstr "ei voi lisätä maa-asetustoarkistoon"
103303 -#: locale/programs/locarchive.c:976
103304 +#: locale/programs/locarchive.c:982
103305 #, c-format
103306 msgid "locale alias file `%s' not found"
103307 msgstr "maa-asetustojen aliastiedostoa \"%s\" ei löydy"
103309 -#: locale/programs/locarchive.c:1118
103310 +#: locale/programs/locarchive.c:1126
103311 #, c-format
103312 msgid "Adding %s\n"
103313 msgstr "Listätään %s\n"
103315 -#: locale/programs/locarchive.c:1124
103316 +#: locale/programs/locarchive.c:1132
103317 #, c-format
103318 msgid "stat of \"%s\" failed: %s: ignored"
103319 msgstr "tiedoston \"%s\" tilan lukeminen epäonnistui: %s: ei huomioida"
103321 -#: locale/programs/locarchive.c:1130
103322 +#: locale/programs/locarchive.c:1138
103323 #, c-format
103324 msgid "\"%s\" is no directory; ignored"
103325 msgstr "\"%s\" ei ole hakemisto: ei huomioida"
103327 -#: locale/programs/locarchive.c:1137
103328 +#: locale/programs/locarchive.c:1145
103329 #, c-format
103330 msgid "cannot open directory \"%s\": %s: ignored"
103331 msgstr "hakemistoa \"%s\" ei voi avata: %s: ei huomioida"
103333 -#: locale/programs/locarchive.c:1209
103334 +#: locale/programs/locarchive.c:1217
103335 #, c-format
103336 msgid "incomplete set of locale files in \"%s\""
103337 msgstr "epätäydellinen valikoima maa-asetustotiedostoja hakemistossa \"%s\""
103339 -#: locale/programs/locarchive.c:1273
103340 +#: locale/programs/locarchive.c:1281
103341 #, c-format
103342 msgid "cannot read all files in \"%s\": ignored"
103343 msgstr "kaikkia tiedostoja hakemistossa \"%s\" ei voi lukea: ei huomioida"
103345 -#: locale/programs/locarchive.c:1343
103346 +#: locale/programs/locarchive.c:1351
103347 #, c-format
103348 msgid "locale \"%s\" not in archive"
103349 msgstr "maa-asetusto \"%s\" ei ole arkistossa"
103350 @@ -1664,8 +1669,8 @@
103351 msgid "upper limit in range is not smaller then lower limit"
103352 msgstr "välin yläraja ei ole pienempi kuin alaraja"
103354 -#: locale/programs/xmalloc.c:70 malloc/obstack.c:500 malloc/obstack.c:503
103355 -#: posix/getconf.c:996
103356 +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
103357 +#: posix/getconf.c:1002
103358 msgid "memory exhausted"
103359 msgstr "muisti lopussa"
103361 @@ -1692,7 +1697,7 @@
103362 msgid "Another string for testing."
103363 msgstr "Toinen merkkijono testausta varten"
103365 -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:79
103366 +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84
103367 msgid "NAME"
103368 msgstr "NIMI"
103370 @@ -1736,7 +1741,7 @@
103371 msgid "duplicate set definition"
103372 msgstr "kaksinkertainen joukon määrittely"
103374 -#: catgets/gencat.c:446 catgets/gencat.c:619 catgets/gencat.c:648
103375 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
103376 msgid "this is the first definition"
103377 msgstr "tämä on ensimmäinen määrittely"
103379 @@ -1754,44 +1759,44 @@
103380 msgid "unknown directive `%s': line ignored"
103381 msgstr "tuntematon direktiivi \"%s\": riviä ei huomioida"
103383 -#: catgets/gencat.c:617
103384 +#: catgets/gencat.c:621
103385 msgid "duplicated message number"
103386 msgstr "kaksinkertainen viestinumero"
103388 -#: catgets/gencat.c:645
103389 +#: catgets/gencat.c:674
103390 msgid "duplicated message identifier"
103391 msgstr "kaksinkertainen viestitunniste"
103393 -#: catgets/gencat.c:702
103394 +#: catgets/gencat.c:731
103395 msgid "invalid character: message ignored"
103396 msgstr "virheellinen merkki: viestiä ei huomioida"
103398 -#: catgets/gencat.c:745
103399 +#: catgets/gencat.c:774
103400 msgid "invalid line"
103401 msgstr "virheellinen rivi"
103403 -#: catgets/gencat.c:799
103404 +#: catgets/gencat.c:828
103405 msgid "malformed line ignored"
103406 msgstr "väärän muotoinen rivi jätetty huomioimatta"
103408 -#: catgets/gencat.c:963 catgets/gencat.c:1004
103409 +#: catgets/gencat.c:992 catgets/gencat.c:1033
103410 #, c-format
103411 msgid "cannot open output file `%s'"
103412 msgstr "tulostiedostoa \"%s\" ei voi avata"
103414 -#: catgets/gencat.c:1188
103415 +#: catgets/gencat.c:1217
103416 msgid "unterminated message"
103417 msgstr "päättämätön viesti"
103419 -#: catgets/gencat.c:1212
103420 +#: catgets/gencat.c:1241
103421 msgid "while opening old catalog file"
103422 msgstr "avattaessa vanhaa katalogitiedostoa"
103424 -#: catgets/gencat.c:1303
103425 +#: catgets/gencat.c:1332
103426 msgid "conversion modules not available"
103427 msgstr "muunnosmoduulit eivät ole käytettävissä"
103429 -#: catgets/gencat.c:1329
103430 +#: catgets/gencat.c:1358
103431 msgid "cannot determine escape character"
103432 msgstr "ohjausmerkkiä ei voi määrittää"
103434 @@ -1799,7 +1804,7 @@
103435 msgid "makecontext: does not know how to handle more than 8 arguments\n"
103436 msgstr "makecontext: ei osaa käsitellä yli kahdeksaa argumenttia\n"
103438 -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:178
103439 +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133
103440 #: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861
103441 msgid "Success"
103442 msgstr "Onnistui"
103443 @@ -2988,23 +2993,23 @@
103444 msgid "%s%sUnknown signal %d\n"
103445 msgstr "%s%sTuntematon signaali %d\n"
103447 -#: malloc/mcheck.c:296
103448 +#: malloc/mcheck.c:346
103449 msgid "memory is consistent, library is buggy\n"
103450 msgstr "muisti on yhtenäinen, kirjastossa on ohjelmistovirheitä\n"
103452 -#: malloc/mcheck.c:299
103453 +#: malloc/mcheck.c:349
103454 msgid "memory clobbered before allocated block\n"
103455 msgstr "muisti kärsinyt ennen varattuja lohkoja\n"
103457 -#: malloc/mcheck.c:302
103458 +#: malloc/mcheck.c:352
103459 msgid "memory clobbered past end of allocated block\n"
103460 msgstr "muisti kärsinyt varattujen lohkojen jälkeen\n"
103462 -#: malloc/mcheck.c:305
103463 +#: malloc/mcheck.c:355
103464 msgid "block freed twice\n"
103465 msgstr "lohko vapautettu kahdesti\n"
103467 -#: malloc/mcheck.c:308
103468 +#: malloc/mcheck.c:358
103469 msgid "bogus mcheck_status, library is buggy\n"
103470 msgstr "väärä mcheck_status, kirjastossa on ohjelmavirhe\n"
103472 @@ -3040,6 +3045,10 @@
103473 msgid "DATAFILE [OUTFILE]"
103474 msgstr "DATATIEDOSTO [TULOSTIEDOSTO]"
103476 +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
103477 +msgid "Unknown error"
103478 +msgstr "Tuntematon virhe"
103480 #: string/strsignal.c:69
103481 #, c-format
103482 msgid "Real-time signal %d"
103483 @@ -3064,7 +3073,7 @@
103484 msgid "%s: Memory exhausted: %s\n"
103485 msgstr "%s: Muisti lopussa: %s\n"
103487 -#: timezone/zic.c:390 misc/error.c:120
103488 +#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155
103489 msgid "Unknown system error"
103490 msgstr "Tuntematon järjestelmävirhe"
103492 @@ -3457,25 +3466,21 @@
103493 msgid "Interrupted by a signal"
103494 msgstr "Signaalin keskeyttämä"
103496 -#: posix/../sysdeps/posix/gai_strerror.c:57
103497 -msgid "Unknown error"
103498 -msgstr "Tuntematon virhe"
103500 -#: posix/getconf.c:883
103501 +#: posix/getconf.c:889
103502 #, c-format
103503 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
103504 msgstr "Käyttö: %s [-v määrittely] muuttujanimi [polku]\n"
103506 -#: posix/getconf.c:941
103507 +#: posix/getconf.c:947
103508 #, c-format
103509 msgid "unknown specification \"%s\""
103510 msgstr "tuntematon määrittely \"%s\""
103512 -#: posix/getconf.c:968 posix/getconf.c:984
103513 +#: posix/getconf.c:974 posix/getconf.c:990
103514 msgid "undefined"
103515 msgstr "määrittelemätön"
103517 -#: posix/getconf.c:1006
103518 +#: posix/getconf.c:1012
103519 #, c-format
103520 msgid "Unrecognized variable `%s'"
103521 msgstr "Tunnistamaton muuttuja \"%s\""
103522 @@ -3537,71 +3542,71 @@
103523 msgid "%s: option `-W %s' doesn't allow an argument\n"
103524 msgstr "%s: valitsin \"-W %s\" ei salli argumenttia\n"
103526 -#: posix/regcomp.c:181
103527 +#: posix/regcomp.c:136
103528 msgid "No match"
103529 msgstr "Ei vastaavuutta"
103531 -#: posix/regcomp.c:184
103532 +#: posix/regcomp.c:139
103533 msgid "Invalid regular expression"
103534 msgstr "Virheellinen säännöllinen ilmaus"
103536 -#: posix/regcomp.c:187
103537 +#: posix/regcomp.c:142
103538 msgid "Invalid collation character"
103539 msgstr "Virheellinen vertailumerkki"
103541 -#: posix/regcomp.c:190
103542 +#: posix/regcomp.c:145
103543 msgid "Invalid character class name"
103544 msgstr "Virheellinen merkkiluokan nimi"
103546 -#: posix/regcomp.c:193
103547 +#: posix/regcomp.c:148
103548 msgid "Trailing backslash"
103549 msgstr "Kenoviiva lopussa"
103551 -#: posix/regcomp.c:196
103552 +#: posix/regcomp.c:151
103553 msgid "Invalid back reference"
103554 msgstr "Virheellinen takaisinviittaus"
103556 -#: posix/regcomp.c:199
103557 +#: posix/regcomp.c:154
103558 msgid "Unmatched [ or [^"
103559 msgstr "Pariton [ tai [^"
103561 -#: posix/regcomp.c:202
103562 +#: posix/regcomp.c:157
103563 msgid "Unmatched ( or \\("
103564 msgstr "Pariton ( tai \\("
103566 -#: posix/regcomp.c:205
103567 +#: posix/regcomp.c:160
103568 msgid "Unmatched \\{"
103569 msgstr "Pariton \\{"
103571 -#: posix/regcomp.c:208
103572 +#: posix/regcomp.c:163
103573 msgid "Invalid content of \\{\\}"
103574 msgstr "Virheellinen \\{\\}:n sisältö"
103576 -#: posix/regcomp.c:211
103577 +#: posix/regcomp.c:166
103578 msgid "Invalid range end"
103579 msgstr "Virheellinen välin loppu"
103581 -#: posix/regcomp.c:214
103582 +#: posix/regcomp.c:169
103583 msgid "Memory exhausted"
103584 msgstr "Muisti lopussa"
103586 -#: posix/regcomp.c:217
103587 +#: posix/regcomp.c:172
103588 msgid "Invalid preceding regular expression"
103589 msgstr "Virheellinen edeltävä säännöllinen ilmaus"
103591 -#: posix/regcomp.c:220
103592 +#: posix/regcomp.c:175
103593 msgid "Premature end of regular expression"
103594 msgstr "Ennenaikainen säännöllisen ilmauksen loppu"
103596 -#: posix/regcomp.c:223
103597 +#: posix/regcomp.c:178
103598 msgid "Regular expression too big"
103599 msgstr "Liian suuri säännöllinen ilmaus"
103601 -#: posix/regcomp.c:226
103602 +#: posix/regcomp.c:181
103603 msgid "Unmatched ) or \\)"
103604 msgstr "Pariton ) tai \\)"
103606 -#: posix/regcomp.c:673
103607 +#: posix/regcomp.c:615
103608 msgid "No previous regular expression"
103609 msgstr "Ei edeltävää säännöllistä lauseketta"
103611 @@ -3622,7 +3627,7 @@
103613 #: argp/argp-help.c:1189
103614 msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."
103615 -msgstr "Pakolliset tai valinnaiset argumentit pitkille optioille ovat pakollisia tai valinnaisia kaikille vastaaville lyhyille optioille."
103616 +msgstr "Pakolliset tai valinnaiset argumentit pitkille valitsimille ovat pakollisia tai valinnaisia kaikille vastaaville lyhyille valitsimille."
103618 #: argp/argp-help.c:1572
103619 msgid "Usage:"
103620 @@ -3755,24 +3760,24 @@
103621 msgid "Service configuration to be used"
103622 msgstr "Käytettävät palveluasetukset"
103624 -#: nss/getent.c:136 nss/getent.c:305
103625 +#: nss/getent.c:136 nss/getent.c:308
103626 #, c-format
103627 msgid "Enumeration not supported on %s\n"
103628 msgstr "%s ei tue luettelemista\n"
103630 -#: nss/getent.c:729
103631 +#: nss/getent.c:732
103632 msgid "getent - get entries from administrative database."
103633 msgstr "getent - hae merkintöjä hallinnollisesta tietokannasta."
103635 -#: nss/getent.c:730
103636 +#: nss/getent.c:733
103637 msgid "Supported databases:"
103638 msgstr "Tuetut tietokannat:"
103640 -#: nss/getent.c:787 nscd/nscd.c:119 nscd/nscd_nischeck.c:64
103641 +#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64
103642 msgid "wrong number of arguments"
103643 msgstr "väärä määrä argumentteja"
103645 -#: nss/getent.c:797
103646 +#: nss/getent.c:800
103647 #, c-format
103648 msgid "Unknown database: %s\n"
103649 msgstr "Tuntematon tietokanta: %s\n"
103650 @@ -3801,68 +3806,72 @@
103651 msgid "invalid pointer size"
103652 msgstr "virheellinen osoittimen koko"
103654 -#: inet/rcmd.c:174 inet/rcmd.c:177
103655 +#: inet/rcmd.c:163 inet/rcmd.c:166
103656 +msgid "rcmd: Cannot allocate memory\n"
103657 +msgstr "rcmd: Muistin varaaminen ei onnistu\n"
103659 +#: inet/rcmd.c:185 inet/rcmd.c:188
103660 msgid "rcmd: socket: All ports in use\n"
103661 msgstr "rcmd: socket: Kaikki portit käytössä\n"
103663 -#: inet/rcmd.c:211
103664 +#: inet/rcmd.c:222
103665 #, c-format
103666 msgid "connect to address %s: "
103667 msgstr "yhdistä osoitteeseen %s: "
103669 -#: inet/rcmd.c:229
103670 +#: inet/rcmd.c:240
103671 #, c-format
103672 msgid "Trying %s...\n"
103673 msgstr "Yritetään %s...\n"
103675 -#: inet/rcmd.c:278
103676 +#: inet/rcmd.c:289
103677 #, c-format
103678 msgid "rcmd: write (setting up stderr): %m\n"
103679 msgstr "rcmd: write (alustetaan vakiovirhetuloste): %m\n"
103681 -#: inet/rcmd.c:299
103682 +#: inet/rcmd.c:310
103683 #, c-format
103684 msgid "rcmd: poll (setting up stderr): %m\n"
103685 msgstr "rcmd: poll (alustetaan vakiovirhetuloste): %m\n"
103687 -#: inet/rcmd.c:302
103688 +#: inet/rcmd.c:313
103689 msgid "poll: protocol failure in circuit setup\n"
103690 msgstr "poll: protokollavirhe piiriasetuksissa\n"
103692 -#: inet/rcmd.c:346
103693 +#: inet/rcmd.c:358
103694 msgid "socket: protocol failure in circuit setup\n"
103695 msgstr "socket: protokollavirhe piiriasetuksissa\n"
103697 -#: inet/rcmd.c:368
103698 +#: inet/rcmd.c:387
103699 #, c-format
103700 msgid "rcmd: %s: short read"
103701 msgstr "rcmd: %s: vajaa luku"
103703 -#: inet/rcmd.c:524
103704 +#: inet/rcmd.c:549
103705 msgid "lstat failed"
103706 msgstr "tiedoston tilan luku epäonnistui"
103708 -#: inet/rcmd.c:526
103709 +#: inet/rcmd.c:551
103710 msgid "not regular file"
103711 msgstr "ei ole tavallinen tiedosto"
103713 -#: inet/rcmd.c:531
103714 +#: inet/rcmd.c:556
103715 msgid "cannot open"
103716 msgstr "ei voi avata"
103718 -#: inet/rcmd.c:533
103719 +#: inet/rcmd.c:558
103720 msgid "fstat failed"
103721 msgstr "tiedoston tilan luku epäonnistui"
103723 -#: inet/rcmd.c:535
103724 +#: inet/rcmd.c:560
103725 msgid "bad owner"
103726 msgstr "virheellinen omistaja"
103728 -#: inet/rcmd.c:537
103729 +#: inet/rcmd.c:562
103730 msgid "writeable by other than owner"
103731 msgstr "kirjoitusoikeus muulla kuin omistajalla"
103733 -#: inet/rcmd.c:539
103734 +#: inet/rcmd.c:564
103735 msgid "hard linked somewhere"
103736 msgstr "kovalinkitetty johonkin"
103738 @@ -4035,7 +4044,7 @@
103740 #: sunrpc/pm_getmaps.c:74
103741 msgid "pmap_getmaps rpc problem"
103742 -msgstr "pmap_getmaps rpc-ongelma"
103743 +msgstr "pmap_getmaps-rpc-ongelma"
103745 #: sunrpc/pmap_clnt.c:72
103746 msgid "__get_myaddress: ioctl (get interface configuration)"
103747 @@ -4073,109 +4082,109 @@
103748 msgid "Cannot receive reply to broadcast"
103749 msgstr "Vastausta yleislähetykseen ei pystytä vastaanottamaan"
103751 -#: sunrpc/rpc_main.c:289
103752 +#: sunrpc/rpc_main.c:288
103753 #, c-format
103754 msgid "%s: output would overwrite %s\n"
103755 msgstr "%s: tuloste ylikirjoittaisi tiedoston %s\n"
103757 -#: sunrpc/rpc_main.c:296
103758 +#: sunrpc/rpc_main.c:295
103759 #, c-format
103760 msgid "%s: unable to open %s: %m\n"
103761 msgstr "%s: tiedostoa %s ei voi avata: %m\n"
103763 -#: sunrpc/rpc_main.c:308
103764 +#: sunrpc/rpc_main.c:307
103765 #, c-format
103766 msgid "%s: while writing output %s: %m"
103767 msgstr "%s: kirjoitettaessa tulostetta %s: %m"
103769 -#: sunrpc/rpc_main.c:343
103770 +#: sunrpc/rpc_main.c:342
103771 #, c-format
103772 msgid "cannot find C preprocessor: %s \n"
103773 msgstr "C-esikääntäjää ei löydy: %s \n"
103775 -#: sunrpc/rpc_main.c:351
103776 +#: sunrpc/rpc_main.c:350
103777 msgid "cannot find any C preprocessor (cpp)\n"
103778 msgstr "mitään C-esikääntäjää (cpp) ei löydy\n"
103780 -#: sunrpc/rpc_main.c:420
103781 +#: sunrpc/rpc_main.c:419
103782 #, c-format
103783 msgid "%s: C preprocessor failed with signal %d\n"
103784 msgstr "%s: C-esikääntäjä epäonnistui signaalilla %d\n"
103786 -#: sunrpc/rpc_main.c:423
103787 +#: sunrpc/rpc_main.c:422
103788 #, c-format
103789 msgid "%s: C preprocessor failed with exit code %d\n"
103790 msgstr "%s: C-esikääntäjä epäonnistui paluuarvolla %d\n"
103792 -#: sunrpc/rpc_main.c:463
103793 +#: sunrpc/rpc_main.c:462
103794 #, c-format
103795 msgid "illegal nettype :`%s'\n"
103796 msgstr "virheellinen verkkotyyppi :\"%s\"\n"
103798 -#: sunrpc/rpc_main.c:1105
103799 +#: sunrpc/rpc_main.c:1104
103800 msgid "rpcgen: too many defines\n"
103801 msgstr "rpcgen: liian monta määrittelyä\n"
103803 -#: sunrpc/rpc_main.c:1117
103804 +#: sunrpc/rpc_main.c:1116
103805 msgid "rpcgen: arglist coding error\n"
103806 msgstr "rpcgen: argumenttillistan koodausvirhe\n"
103808 #. TRANS: the file will not be removed; this is an
103809 #. TRANS: informative message.
103810 -#: sunrpc/rpc_main.c:1150
103811 +#: sunrpc/rpc_main.c:1149
103812 #, c-format
103813 msgid "file `%s' already exists and may be overwritten\n"
103814 msgstr "tiedosto \"%s\" on olemassa ja saatetaan ylikirjoittaa\n"
103816 -#: sunrpc/rpc_main.c:1195
103817 +#: sunrpc/rpc_main.c:1194
103818 msgid "Cannot specify more than one input file!\n"
103819 msgstr "Voidaan antaa vain yksi syötetiedosto!\n"
103821 -#: sunrpc/rpc_main.c:1365
103822 +#: sunrpc/rpc_main.c:1364
103823 msgid "This implementation doesn't support newstyle or MT-safe code!\n"
103824 msgstr "Tämä toteutus ei tue uudentyyppistä MT-turvallista koodia!\n"
103826 -#: sunrpc/rpc_main.c:1374
103827 +#: sunrpc/rpc_main.c:1373
103828 msgid "Cannot use netid flag with inetd flag!\n"
103829 msgstr "Netid-lippua ei voi käyttää inetd-lipun kanssa!\n"
103831 -#: sunrpc/rpc_main.c:1386
103832 +#: sunrpc/rpc_main.c:1385
103833 msgid "Cannot use netid flag without TIRPC!\n"
103834 msgstr "Lippua netid ei voi käyttää ilman TIRPC:tä!\n"
103836 -#: sunrpc/rpc_main.c:1393
103837 +#: sunrpc/rpc_main.c:1392
103838 msgid "Cannot use table flags with newstyle!\n"
103839 msgstr "Table-lippuja ei voi käyttää \"newstyle\":n kanssa!\n"
103841 -#: sunrpc/rpc_main.c:1412
103842 +#: sunrpc/rpc_main.c:1411
103843 msgid "\"infile\" is required for template generation flags.\n"
103844 msgstr "\"syötetiedosto\" vaaditaan mallin luontilippuja varten.\n"
103846 -#: sunrpc/rpc_main.c:1417
103847 +#: sunrpc/rpc_main.c:1416
103848 msgid "Cannot have more than one file generation flag!\n"
103849 msgstr "Tiedostonluontilippuja voi olla vain yksi!\n"
103851 -#: sunrpc/rpc_main.c:1426
103852 +#: sunrpc/rpc_main.c:1425
103853 #, c-format
103854 msgid "usage: %s infile\n"
103855 msgstr "käyttö: %s syötetiedosto\n"
103857 -#: sunrpc/rpc_main.c:1427
103858 +#: sunrpc/rpc_main.c:1426
103859 #, c-format
103860 msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
103861 msgstr "\t%s [-abkCLNTM][-Dnimi[=arvo]] [-i koko] [-I [-K sekuntit]] [-Y polku] syötetiedosto\n"
103863 -#: sunrpc/rpc_main.c:1429
103864 +#: sunrpc/rpc_main.c:1428
103865 #, c-format
103866 msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
103867 msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o tulostiedosto] [syötetiedosto]\n"
103869 -#: sunrpc/rpc_main.c:1431
103870 +#: sunrpc/rpc_main.c:1430
103871 #, c-format
103872 msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
103873 msgstr "\t%s [-s verkkotyyppi]* [-o tulostiedosto] [syötetiedosto]\n"
103875 -#: sunrpc/rpc_main.c:1432
103876 +#: sunrpc/rpc_main.c:1431
103877 #, c-format
103878 msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
103879 msgstr "\t%s [-n verkkoid]* [-o tulostiedosto] [syötetiedosto]\n"
103880 @@ -5032,7 +5041,7 @@
103881 msgid "while allocating hash table entry"
103882 msgstr "varattaessa tilaa tiivistetaulukkomerkinnälle"
103884 -#: nscd/cache.c:150 nscd/connections.c:185
103885 +#: nscd/cache.c:150 nscd/connections.c:187
103886 #, c-format
103887 msgid "cannot stat() file `%s': %s"
103888 msgstr "tiedoston \"%s\" tilaa ei voi lukea: %s"
103889 @@ -5045,153 +5054,158 @@
103890 msgid "Cannot run nscd in secure mode as unprivileged user"
103891 msgstr "Ohjelmaa nscd ei voi ajaa turvallisessa tilassa normaalin käyttäjän oikeuksilla"
103893 -#: nscd/connections.c:199
103894 +#: nscd/connections.c:175
103895 +#, c-format
103896 +msgid "while allocating cache: %s"
103897 +msgstr "varattaessa välimuistia: %s"
103899 +#: nscd/connections.c:200
103900 #, c-format
103901 msgid "cannot open socket: %s"
103902 msgstr "pistoketta ei voi avata: %s"
103904 -#: nscd/connections.c:217
103905 +#: nscd/connections.c:218
103906 #, c-format
103907 msgid "cannot enable socket to accept connections: %s"
103908 msgstr "pistoketta ei voi asettaa vastaanottamaan yhteyksiä: %s"
103910 -#: nscd/connections.c:259
103911 +#: nscd/connections.c:260
103912 #, c-format
103913 msgid "handle_request: request received (Version = %d)"
103914 msgstr "handle_request: pyyntö vastaanotettu (Versio = %d)"
103916 -#: nscd/connections.c:265
103917 +#: nscd/connections.c:266
103918 #, c-format
103919 msgid "cannot handle old request version %d; current version is %d"
103920 msgstr "vanhaa pyyntöversiota %d ei voi käsitellä; nykyinen versio on %d"
103922 -#: nscd/connections.c:303 nscd/connections.c:325
103923 +#: nscd/connections.c:304 nscd/connections.c:326
103924 #, c-format
103925 msgid "cannot write result: %s"
103926 msgstr "tulosta ei voi kirjoittaa: %s"
103928 -#: nscd/connections.c:404 nscd/connections.c:498
103929 +#: nscd/connections.c:405 nscd/connections.c:499
103930 #, c-format
103931 msgid "error getting callers id: %s"
103932 msgstr "virhe kutsujan tunnisteen hakemisessa: %s"
103934 -#: nscd/connections.c:470
103935 +#: nscd/connections.c:471
103936 #, c-format
103937 msgid "while accepting connection: %s"
103938 msgstr "hyväksyttäessä yhteyksiä: %s"
103940 -#: nscd/connections.c:481
103941 +#: nscd/connections.c:482
103942 #, c-format
103943 msgid "short read while reading request: %s"
103944 msgstr "vajaa luku luettaessa pyyntöä: %s"
103946 -#: nscd/connections.c:517
103947 +#: nscd/connections.c:518
103948 #, c-format
103949 msgid "key length in request too long: %d"
103950 msgstr "avaimen pituus pyynnössä liian pitkä: %d"
103952 -#: nscd/connections.c:531
103953 +#: nscd/connections.c:532
103954 #, c-format
103955 msgid "short read while reading request key: %s"
103956 msgstr "vajaa luku luettaessa pyyntöavainta: %s"
103958 -#: nscd/connections.c:590 nscd/connections.c:591 nscd/connections.c:610
103959 -#: nscd/connections.c:623 nscd/connections.c:629 nscd/connections.c:636
103960 +#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611
103961 +#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637
103962 #, c-format
103963 msgid "Failed to run nscd as user '%s'"
103964 msgstr "Ohjelman nscd ajaminen käyttäjän \"%s\" oikeuksilla epäonnistui"
103966 -#: nscd/connections.c:611
103967 +#: nscd/connections.c:612
103968 msgid "getgrouplist failed"
103969 msgstr "getgrouplist epäonnistui"
103971 -#: nscd/connections.c:624
103972 +#: nscd/connections.c:625
103973 msgid "setgroups failed"
103974 msgstr "setgroups epäonnistui"
103976 -#: nscd/grpcache.c:102 nscd/hstcache.c:110 nscd/pwdcache.c:108
103977 +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
103978 msgid "while allocating key copy"
103979 msgstr "varattaessa tilaa avainkopiolle"
103981 -#: nscd/grpcache.c:152 nscd/hstcache.c:167 nscd/pwdcache.c:145
103982 +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
103983 msgid "while allocating cache entry"
103984 msgstr "varattaessa tilaa välimuistimerkinnälle"
103986 -#: nscd/grpcache.c:195 nscd/hstcache.c:281 nscd/pwdcache.c:191
103987 +#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192
103988 #, c-format
103989 msgid "short write in %s: %s"
103990 msgstr "vajaa kirjoitus tiedostossa %s: %s"
103992 -#: nscd/grpcache.c:217
103993 +#: nscd/grpcache.c:218
103994 #, c-format
103995 msgid "Haven't found \"%s\" in group cache!"
103996 msgstr "\"%s\" ei löytynyt ryhmävälimuistista!"
103998 -#: nscd/grpcache.c:292
103999 +#: nscd/grpcache.c:284
104000 #, c-format
104001 msgid "Invalid numeric gid \"%s\"!"
104002 msgstr "Virheellinen numeerinen gid \"%s\"!"
104004 -#: nscd/grpcache.c:299
104005 +#: nscd/grpcache.c:291
104006 #, c-format
104007 msgid "Haven't found \"%d\" in group cache!"
104008 msgstr "\"%d\" ei löytynyt ryhmävälimuistista!"
104010 -#: nscd/hstcache.c:303 nscd/hstcache.c:378 nscd/hstcache.c:456
104011 -#: nscd/hstcache.c:533
104012 +#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435
104013 +#: nscd/hstcache.c:500
104014 #, c-format
104015 msgid "Haven't found \"%s\" in hosts cache!"
104016 msgstr "\"%s\" ei löytynyt isäntävälimuistista!"
104018 -#: nscd/nscd.c:80
104019 +#: nscd/nscd.c:85
104020 msgid "Read configuration data from NAME"
104021 msgstr "Lue asetukset tiedostosta NIMI"
104023 -#: nscd/nscd.c:82
104024 +#: nscd/nscd.c:87
104025 msgid "Do not fork and display messages on the current tty"
104026 msgstr "Älä haaraudu ja näytä viestit nykyisessä tty:ssä"
104028 -#: nscd/nscd.c:83
104029 +#: nscd/nscd.c:88
104030 msgid "NUMBER"
104031 msgstr "MÄÄRÄ"
104033 -#: nscd/nscd.c:83
104034 +#: nscd/nscd.c:88
104035 msgid "Start NUMBER threads"
104036 msgstr "Käynnistä MÄÄRÄ säiettä"
104038 -#: nscd/nscd.c:84
104039 +#: nscd/nscd.c:89
104040 msgid "Shut the server down"
104041 msgstr "Sammuta palvelin"
104043 -#: nscd/nscd.c:85
104044 +#: nscd/nscd.c:90
104045 msgid "Print current configuration statistic"
104046 msgstr "Näytä nykyiset asetustilastot"
104048 -#: nscd/nscd.c:86
104049 +#: nscd/nscd.c:91
104050 msgid "TABLE"
104051 msgstr "TAULUKKO"
104053 -#: nscd/nscd.c:87
104054 +#: nscd/nscd.c:92
104055 msgid "Invalidate the specified cache"
104056 msgstr "Poista käytöstä määritelty välimuisti"
104058 -#: nscd/nscd.c:88
104059 +#: nscd/nscd.c:93
104060 msgid "TABLE,yes"
104061 msgstr "TAULUKKO,kyllä"
104063 -#: nscd/nscd.c:88
104064 +#: nscd/nscd.c:93
104065 msgid "Use separate cache for each user"
104066 msgstr "Käytä erillistä välimuistia jokaiselle käyttäjälle"
104068 -#: nscd/nscd.c:93
104069 +#: nscd/nscd.c:98
104070 msgid "Name Service Cache Daemon."
104071 msgstr "Nimipalvelun välimuistidemoni."
104073 -#: nscd/nscd.c:126
104074 +#: nscd/nscd.c:131
104075 msgid "already running"
104076 msgstr "on jo käynnissä"
104078 -#: nscd/nscd.c:192 nscd/nscd.c:212 nscd/nscd.c:218
104079 +#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269
104080 msgid "Only root is allowed to use this option!"
104081 msgstr "Vain root voi käyttää tätä valitsinta!"
104083 @@ -5281,22 +5295,22 @@
104084 "%15ld%% välimuistiosuma-aste\n"
104085 "%15s tarkista muutokset tiedostosta /etc/%s\n"
104087 -#: nscd/pwdcache.c:213
104088 +#: nscd/pwdcache.c:214
104089 #, c-format
104090 msgid "Haven't found \"%s\" in password cache!"
104091 msgstr "\"%s\" ei löytynyt salasanavälimuistista!"
104093 -#: nscd/pwdcache.c:288
104094 +#: nscd/pwdcache.c:280
104095 #, c-format
104096 msgid "Invalid numeric uid \"%s\"!"
104097 msgstr "Virheellinen numeerinen uid \"%s\"!"
104099 -#: nscd/pwdcache.c:295
104100 +#: nscd/pwdcache.c:287
104101 #, c-format
104102 msgid "Haven't found \"%d\" in password cache!"
104103 msgstr "\"%d\" ei löytynyt salasanavälimuistista!"
104105 -#: elf/../sysdeps/generic/dl-sysdep.c:297
104106 +#: elf/../sysdeps/generic/dl-sysdep.c:357
104107 msgid "cannot create capability list"
104108 msgstr "kykylistaa ei voi luoda"
104110 @@ -5347,7 +5361,7 @@
104111 msgid ", OS ABI: %s %d.%d.%d"
104112 msgstr ", OS ABI: %s %d.%d.%d"
104114 -#: elf/cache.c:136 elf/ldconfig.c:1033
104115 +#: elf/cache.c:136 elf/ldconfig.c:1045
104116 #, c-format
104117 msgid "Can't open cache file %s\n"
104118 msgstr "Välimuistitiedostoa %s ei voi avata\n"
104119 @@ -5393,15 +5407,15 @@
104120 msgid "Renaming of %s to %s failed"
104121 msgstr "Uudelleennimeäminen %s -> %s epäonnistui"
104123 -#: elf/dl-close.c:113
104124 +#: elf/dl-close.c:128
104125 msgid "shared object not open"
104126 msgstr "jaettu objekti ei ole avoin"
104128 -#: elf/dl-close.c:357 elf/dl-open.c:436
104129 +#: elf/dl-close.c:486 elf/dl-open.c:444
104130 msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
104131 msgstr "TLS-luontilaskurin ylivuoto! Lähetä raportti \"glibcbug\"-skriptillä."
104133 -#: elf/dl-deps.c:111 elf/dl-open.c:177
104134 +#: elf/dl-deps.c:111 elf/dl-open.c:183
104135 msgid "DST not allowed in SUID/SGID programs"
104136 msgstr "DST ei ole sallittu SUID/SGID-ohjelmissa"
104138 @@ -5418,181 +5432,193 @@
104139 msgid "cannot allocate dependency list"
104140 msgstr "riippuvuuslistalle ei voi varata muistia"
104142 -#: elf/dl-deps.c:492 elf/dl-deps.c:547
104143 +#: elf/dl-deps.c:494 elf/dl-deps.c:549
104144 msgid "cannot allocate symbol search list"
104145 msgstr "symbolihakulistalle ei voi varata muistia"
104147 -#: elf/dl-deps.c:532
104148 +#: elf/dl-deps.c:534
104149 msgid "Filters not supported with LD_TRACE_PRELINKING"
104150 msgstr "Suodattimet eivät ole tuettuja LD_TRACE_RPELINKING:in kanssa"
104152 -#: elf/dl-error.c:73
104153 +#: elf/dl-error.c:75
104154 msgid "DYNAMIC LINKER BUG!!!"
104155 msgstr "DYNAAMISEN LINKITTÄJÄN OHJELMISTOVIRHE!!!"
104157 -#: elf/dl-error.c:106
104158 +#: elf/dl-error.c:108
104159 msgid "error while loading shared libraries"
104160 msgstr "virhe ladattaessa jaettuja kirjastoja"
104162 -#: elf/dl-load.c:338
104163 +#: elf/dl-load.c:339
104164 msgid "cannot allocate name record"
104165 msgstr "nimitietueelle ei voi varata muistia"
104167 -#: elf/dl-load.c:440 elf/dl-load.c:520 elf/dl-load.c:614 elf/dl-load.c:709
104168 +#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707
104169 msgid "cannot create cache for search path"
104170 msgstr "hakupolulle ei voi luoda välimuistia"
104172 -#: elf/dl-load.c:545
104173 +#: elf/dl-load.c:543
104174 msgid "cannot create RUNPATH/RPATH copy"
104175 msgstr "RUNPATH/RPATH-kopiota ei voi luoda"
104177 -#: elf/dl-load.c:600
104178 +#: elf/dl-load.c:598
104179 msgid "cannot create search path array"
104180 msgstr "hakupolkutaulukkoa ei voi luoda"
104182 -#: elf/dl-load.c:796
104183 +#: elf/dl-load.c:794
104184 msgid "cannot stat shared object"
104185 msgstr "jaetun objektin tilaa ei voi lukea"
104187 -#: elf/dl-load.c:840
104188 +#: elf/dl-load.c:838
104189 msgid "cannot open zero fill device"
104190 msgstr "nollatäyttölaitetta ei voi avata"
104192 -#: elf/dl-load.c:849 elf/dl-load.c:1855
104193 +#: elf/dl-load.c:847 elf/dl-load.c:1902
104194 msgid "cannot create shared object descriptor"
104195 msgstr "jaettua objektikahvaa ei voi luoda"
104197 -#: elf/dl-load.c:868 elf/dl-load.c:1351 elf/dl-load.c:1434
104198 +#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481
104199 msgid "cannot read file data"
104200 msgstr "tiedoston dataa ei voi lukea"
104202 -#: elf/dl-load.c:908
104203 +#: elf/dl-load.c:906
104204 msgid "ELF load command alignment not page-aligned"
104205 msgstr "ELF-latauskomennon tasaus ei ole sivutasattu"
104207 -#: elf/dl-load.c:915
104208 +#: elf/dl-load.c:913
104209 msgid "ELF load command address/offset not properly aligned"
104210 msgstr "ELF-latauskomennon osoite/siirtymä ei ole tasattu oikein"
104212 -#: elf/dl-load.c:996
104213 +#: elf/dl-load.c:988
104214 +msgid "cannot allocate TLS data structures for initial thread"
104215 +msgstr "alkusäikeelle ei voi varata TLS-tietorakenteita"
104217 +#: elf/dl-load.c:1012
104218 +msgid "cannot handle TLS data"
104219 +msgstr "TLS-dataa ei voi käsitellä"
104221 +#: elf/dl-load.c:1047
104222 msgid "failed to map segment from shared object"
104223 msgstr "segmentin kartoitus jaetusta objektista epäonnistui"
104225 -#: elf/dl-load.c:1020
104226 +#: elf/dl-load.c:1071
104227 msgid "cannot dynamically load executable"
104228 msgstr "käynnistettävää tiedostoa ei voi ladata dynaamisesti"
104230 -#: elf/dl-load.c:1081
104231 +#: elf/dl-load.c:1132
104232 msgid "cannot change memory protections"
104233 msgstr "muistin suojausta ei voi muuttaa"
104235 -#: elf/dl-load.c:1100
104236 +#: elf/dl-load.c:1151
104237 msgid "cannot map zero-fill pages"
104238 msgstr "nollatäytteisiä sivuja ei voi kartoittaa"
104240 -#: elf/dl-load.c:1118
104241 +#: elf/dl-load.c:1169
104242 msgid "cannot allocate memory for program header"
104243 msgstr "ohjelman otsakkeelle ei voi varata muistia"
104245 -#: elf/dl-load.c:1149
104246 +#: elf/dl-load.c:1200
104247 msgid "object file has no dynamic section"
104248 msgstr "objektitiedostossa ei ole dynaamista osaa"
104250 -#: elf/dl-load.c:1193
104251 +#: elf/dl-load.c:1240
104252 msgid "shared object cannot be dlopen()ed"
104253 msgstr "jaettua objektia ei voi avata funktiolla dlopen()"
104255 -#: elf/dl-load.c:1216
104256 +#: elf/dl-load.c:1263
104257 msgid "cannot create searchlist"
104258 msgstr "hakulistaa ei voi luoda"
104260 -#: elf/dl-load.c:1351
104261 +#: elf/dl-load.c:1398
104262 msgid "file too short"
104263 msgstr "tiedosto on liian lyhyt"
104265 -#: elf/dl-load.c:1374
104266 +#: elf/dl-load.c:1421
104267 msgid "invalid ELF header"
104268 msgstr "virheellinen ELF-otsikko"
104270 -#: elf/dl-load.c:1383
104271 +#: elf/dl-load.c:1430
104272 msgid "ELF file data encoding not big-endian"
104273 msgstr "ELF-tiedoston tavujärjestys ei ole \"big-endian\""
104275 -#: elf/dl-load.c:1385
104276 +#: elf/dl-load.c:1432
104277 msgid "ELF file data encoding not little-endian"
104278 msgstr "ELF-tiedoston tavujärjestys ei ole \"little-endian\""
104280 -#: elf/dl-load.c:1389
104281 +#: elf/dl-load.c:1436
104282 msgid "ELF file version ident does not match current one"
104283 msgstr "ELF-tiedoston versiotunnus ei vastaa nykyistä"
104285 -#: elf/dl-load.c:1393
104286 +#: elf/dl-load.c:1440
104287 msgid "ELF file OS ABI invalid"
104288 msgstr "ELF-tiedoston OS ABI on virheellinen"
104290 -#: elf/dl-load.c:1395
104291 +#: elf/dl-load.c:1442
104292 msgid "ELF file ABI version invalid"
104293 msgstr "ELF-tiedoston ABI-versio virheellinen"
104295 -#: elf/dl-load.c:1398
104296 +#: elf/dl-load.c:1445
104297 msgid "internal error"
104298 msgstr "sisäinen virhe"
104300 -#: elf/dl-load.c:1405
104301 +#: elf/dl-load.c:1452
104302 msgid "ELF file version does not match current one"
104303 msgstr "ELF-tiedoston versio ei vastaa nykyistä"
104305 -#: elf/dl-load.c:1413
104306 +#: elf/dl-load.c:1460
104307 msgid "ELF file's phentsize not the expected size"
104308 msgstr "ELF-tiedoston phent-koko ei ole odotetun kokoinen"
104310 -#: elf/dl-load.c:1419
104311 +#: elf/dl-load.c:1466
104312 msgid "only ET_DYN and ET_EXEC can be loaded"
104313 msgstr "vain ET_DYN ja ET_EXEC voidaan ladata"
104315 -#: elf/dl-load.c:1870
104316 +#: elf/dl-load.c:1917
104317 msgid "cannot open shared object file"
104318 msgstr "jaettua objektitiedostoa ei voi avata"
104320 -#: elf/dl-lookup.c:248 elf/dl-lookup.c:413
104321 +#: elf/dl-lookup.c:265 elf/dl-lookup.c:430
104322 msgid "relocation error"
104323 msgstr "uudelleensijoitusvirhe"
104325 -#: elf/dl-open.c:105
104326 +#: elf/dl-open.c:111
104327 msgid "cannot extend global scope"
104328 msgstr "globaalia aluetta ei voi laajentaa"
104330 -#: elf/dl-open.c:208
104331 +#: elf/dl-open.c:214
104332 msgid "empty dynamic string token substitution"
104333 msgstr "tyhjän dynaamisen merkkijonon osan korvaus"
104335 -#: elf/dl-open.c:345 elf/dl-open.c:356
104336 +#: elf/dl-open.c:351 elf/dl-open.c:362
104337 msgid "cannot create scope list"
104338 msgstr "aluelistaa ei voi luoda"
104340 -#: elf/dl-open.c:416
104341 +#: elf/dl-open.c:424
104342 msgid "cannot create TLS data structures"
104343 msgstr "TLS-tietorakenteita ei voi luoda"
104345 -#: elf/dl-open.c:478
104346 +#: elf/dl-open.c:486
104347 msgid "invalid mode for dlopen()"
104348 msgstr "virheellinen tila funktiolle dlopen()"
104350 -#: elf/dl-reloc.c:88
104351 +#: elf/dl-reloc.c:58
104352 +msgid "shared object cannot be dlopen()ed: static TLS memory too small"
104353 +msgstr "jaettua objektia ei voi avata funktiolla dlopen(): staattinen TLS-muisti on liian pieni"
104355 +#: elf/dl-reloc.c:118
104356 msgid "cannot make segment writable for relocation"
104357 msgstr "segmenttiä ei voi muuttaa kirjoitettavaksi uudelleensijoitusta varten"
104359 -#: elf/dl-reloc.c:174
104360 +#: elf/dl-reloc.c:219
104361 #, c-format
104362 msgid "%s: profiler found no PLTREL in object %s\n"
104363 msgstr "%s: profiloija ei löytänyt PLTREL-kenttää objektista %s\n"
104365 -#: elf/dl-reloc.c:186
104366 +#: elf/dl-reloc.c:231
104367 #, c-format
104368 msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
104369 msgstr "%s: profiloijan muisti loppui varjostettaessa objektin %s PLTREL-kenttää\n"
104371 -#: elf/dl-reloc.c:201
104372 +#: elf/dl-reloc.c:246
104373 msgid "cannot restore segment prot after reloc"
104374 msgstr "segmentin suojausta ei voi palauttaa uudelleensijoituksen jälkeen"
104376 @@ -5648,119 +5674,119 @@
104377 msgid "Configure Dynamic Linker Run Time Bindings."
104378 msgstr "Säädä dynaamisen linkittäjän ajonaikaiset sidonnat."
104380 -#: elf/ldconfig.c:282
104381 +#: elf/ldconfig.c:294
104382 #, c-format
104383 msgid "Path `%s' given more than once"
104384 msgstr "Polku \"%s\" on annettu useammin kuin kerran"
104386 -#: elf/ldconfig.c:326
104387 +#: elf/ldconfig.c:338
104388 #, c-format
104389 msgid "%s is not a known library type"
104390 msgstr "%s ei ole tunnettu kirjastotyyppi"
104392 -#: elf/ldconfig.c:344
104393 +#: elf/ldconfig.c:356
104394 #, c-format
104395 msgid "Can't stat %s"
104396 msgstr "Tiedoston %s tilaa ei voi lukea"
104398 -#: elf/ldconfig.c:414
104399 +#: elf/ldconfig.c:426
104400 #, c-format
104401 msgid "Can't stat %s\n"
104402 msgstr "Tiedoston %s tilaa ei voi lukea\n"
104404 -#: elf/ldconfig.c:424
104405 +#: elf/ldconfig.c:436
104406 #, c-format
104407 msgid "%s is not a symbolic link\n"
104408 msgstr "%s ei ole symbolinen linkki\n"
104410 -#: elf/ldconfig.c:443
104411 +#: elf/ldconfig.c:455
104412 #, c-format
104413 msgid "Can't unlink %s"
104414 msgstr "Tiedoston %s linkitystä ei voi poistaa"
104416 -#: elf/ldconfig.c:449
104417 +#: elf/ldconfig.c:461
104418 #, c-format
104419 msgid "Can't link %s to %s"
104420 msgstr "Linkitys %s -> %s ei onnistu"
104422 -#: elf/ldconfig.c:455
104423 +#: elf/ldconfig.c:467
104424 msgid " (changed)\n"
104425 msgstr " (muutettu)\n"
104427 -#: elf/ldconfig.c:457
104428 +#: elf/ldconfig.c:469
104429 msgid " (SKIPPED)\n"
104430 msgstr " (OHITETTU)\n"
104432 -#: elf/ldconfig.c:512
104433 +#: elf/ldconfig.c:524
104434 #, c-format
104435 msgid "Can't find %s"
104436 msgstr "%s ei löydy"
104438 -#: elf/ldconfig.c:528
104439 +#: elf/ldconfig.c:540
104440 #, c-format
104441 msgid "Can't lstat %s"
104442 msgstr "Tiedoston %s tilaa ei voi lukea"
104444 -#: elf/ldconfig.c:535
104445 +#: elf/ldconfig.c:547
104446 #, c-format
104447 msgid "Ignored file %s since it is not a regular file."
104448 msgstr "Tiedostoa %s ei huomioitu, koska se ei ole tavallinen tiedosto."
104450 -#: elf/ldconfig.c:543
104451 +#: elf/ldconfig.c:555
104452 #, c-format
104453 msgid "No link created since soname could not be found for %s"
104454 msgstr "Linkkiä ei luotu, koska tiedostolle %s ei löytynyt so-nimeä"
104456 -#: elf/ldconfig.c:634
104457 +#: elf/ldconfig.c:646
104458 #, c-format
104459 msgid "Can't open directory %s"
104460 msgstr "Hakemistoa %s ei voi avata"
104462 -#: elf/ldconfig.c:689 elf/ldconfig.c:736
104463 +#: elf/ldconfig.c:701 elf/ldconfig.c:748
104464 #, c-format
104465 msgid "Cannot lstat %s"
104466 msgstr "Tiedoston %s tilaa ei voi lukea"
104468 -#: elf/ldconfig.c:701
104469 +#: elf/ldconfig.c:713
104470 #, c-format
104471 msgid "Cannot stat %s"
104472 msgstr "Tiedoston %s tilaa ei voi lukea"
104474 -#: elf/ldconfig.c:758 elf/readlib.c:93
104475 +#: elf/ldconfig.c:770 elf/readlib.c:93
104476 #, c-format
104477 msgid "Input file %s not found.\n"
104478 msgstr "Syötetiedostoa %s ei löydy.\n"
104480 -#: elf/ldconfig.c:792
104481 +#: elf/ldconfig.c:804
104482 #, c-format
104483 msgid "libc5 library %s in wrong directory"
104484 msgstr "libc5-kirjasto %s on väärässä hakemistossa"
104486 -#: elf/ldconfig.c:795
104487 +#: elf/ldconfig.c:807
104488 #, c-format
104489 msgid "libc6 library %s in wrong directory"
104490 msgstr "libc6-kirjasto %s on väärässä hakemistossa"
104492 -#: elf/ldconfig.c:798
104493 +#: elf/ldconfig.c:810
104494 #, c-format
104495 msgid "libc4 library %s in wrong directory"
104496 msgstr "libc4-kirjasto %s on väärässä hakemistossa"
104498 -#: elf/ldconfig.c:825
104499 +#: elf/ldconfig.c:837
104500 #, c-format
104501 msgid "libraries %s and %s in directory %s have same soname but different type."
104502 msgstr "kirjastoilla %s ja %s hakemistossa %s on sama so-nimi, mutta eri tyypit."
104504 -#: elf/ldconfig.c:928
104505 +#: elf/ldconfig.c:940
104506 #, c-format
104507 msgid "Can't open configuration file %s"
104508 msgstr "Asetustiedostoa %s ei voi avata"
104510 -#: elf/ldconfig.c:1012
104511 +#: elf/ldconfig.c:1024
104512 msgid "Can't chdir to /"
104513 msgstr "Juurihakemistoon / siirtyminen ei onnistu"
104515 -#: elf/ldconfig.c:1054
104516 +#: elf/ldconfig.c:1066
104517 #, c-format
104518 msgid "Can't open cache file directory %s\n"
104519 msgstr "Välimuistihakemistoa %s ei voi avata\n"
104520 Binary files glibc-2.3.2/po/fr.mo and glibc-2.3.2-200304020432/po/fr.mo differ
104521 diff -u -udbrN glibc-2.3.2/po/fr.po glibc-2.3.2-200304020432/po/fr.po
104522 --- glibc-2.3.2/po/fr.po Sun Oct 13 04:01:44 2002
104523 +++ glibc-2.3.2-200304020432/po/fr.po Mon Mar 3 19:12:33 2003
104524 @@ -4,9 +4,9 @@
104526 msgid ""
104527 msgstr ""
104528 -"Project-Id-Version: GNU libc 2.3.1\n"
104529 -"POT-Creation-Date: 2002-10-02 17:22-0700\n"
104530 -"PO-Revision-Date: 2002-10-12 12:00-0500\n"
104531 +"Project-Id-Version: GNU libc 2.3.2\n"
104532 +"POT-Creation-Date: 2003-02-22 15:34-0800\n"
104533 +"PO-Revision-Date: 2003-03-03 08:00-0500\n"
104534 "Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
104535 "Language-Team: French <traduc@traduc.org>\n"
104536 "MIME-Version: 1.0\n"
104537 @@ -259,8 +259,8 @@
104539 #: iconv/iconv_prog.c:241
104540 #, c-format
104541 -msgid "conversions from `%s' and to `%s' are not supported"
104542 -msgstr "conversions de « %s » vers « %s » ne sont pas supportées"
104543 +msgid "conversion from `%s' and to `%s' are not supported"
104544 +msgstr "conversions de « %s » et de , vers « %s » ne sont pas supportées"
104546 #: iconv/iconv_prog.c:246
104547 #, c-format
104548 @@ -285,15 +285,15 @@
104549 msgid "error while closing output file"
104550 msgstr "Erreur lors de la fermeture du fichier de sortie"
104552 -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:355 locale/programs/locale.c:268
104553 +#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274
104554 #: locale/programs/localedef.c:372 catgets/gencat.c:233
104555 #: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
104556 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
104557 msgstr "Rapporter toutes anomalies via le script « glibcbug » à <bugs@gnu.org>.\n"
104559 -#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:369 locale/programs/locale.c:281
104560 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:904
104561 -#: nss/getent.c:74 nscd/nscd.c:279 nscd/nscd_nischeck.c:90 elf/ldconfig.c:259
104562 +#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287
104563 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910
104564 +#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271
104565 #: elf/sprof.c:349
104566 #, c-format
104567 msgid ""
104568 @@ -306,9 +306,9 @@
104569 "reproduction. AUCUNE garantie n'est donnée; tant pour des raisons\n"
104570 "COMMERCIALES que pour RÉPONDRE À UN BESOIN PARTICULIER.\n"
104572 -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:374 locale/programs/locale.c:286
104573 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:909
104574 -#: nss/getent.c:79 nscd/nscd.c:284 nscd/nscd_nischeck.c:95 elf/ldconfig.c:264
104575 +#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292
104576 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915
104577 +#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276
104578 #: elf/sprof.c:355
104579 #, c-format
104580 msgid "Written by %s.\n"
104581 @@ -360,15 +360,15 @@
104582 msgid "Prefix used for all file accesses"
104583 msgstr "Préfixe utilisé pour tous les accès fichiers"
104585 -#: iconv/iconvconfig.c:325 locale/programs/localedef.c:292
104586 +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
104587 msgid "no output file produced because warning were issued"
104588 msgstr "Aucun fichier de sortie généré en raison d'un avertissement déjà émis"
104590 -#: iconv/iconvconfig.c:403
104591 +#: iconv/iconvconfig.c:405
104592 msgid "while inserting in search tree"
104593 msgstr "lors d'une insertion dans un arbre de recherche"
104595 -#: iconv/iconvconfig.c:1202
104596 +#: iconv/iconvconfig.c:1204
104597 msgid "cannot generate output file"
104598 msgstr "Ne peut générer le fichier de sortie"
104600 @@ -1288,7 +1288,7 @@
104601 msgid "unterminated symbolic name"
104602 msgstr "Nom symbolique incomplet"
104604 -#: locale/programs/linereader.c:537 catgets/gencat.c:1166
104605 +#: locale/programs/linereader.c:537 catgets/gencat.c:1195
104606 msgid "invalid escape sequence"
104607 msgstr "Séquence d'échappement invalide"
104609 @@ -1318,39 +1318,39 @@
104610 msgid "trailing garbage at end of line"
104611 msgstr "rebut en suffixe à la fin de la ligne"
104613 -#: locale/programs/locale.c:73
104614 +#: locale/programs/locale.c:75
104615 msgid "System information:"
104616 msgstr "Information système:"
104618 -#: locale/programs/locale.c:75
104619 +#: locale/programs/locale.c:77
104620 msgid "Write names of available locales"
104621 msgstr "Écriture des noms disponibles des localisations"
104623 -#: locale/programs/locale.c:77
104624 +#: locale/programs/locale.c:79
104625 msgid "Write names of available charmaps"
104626 msgstr "Écriture des noms disponibles des tables de caractères"
104628 -#: locale/programs/locale.c:78
104629 +#: locale/programs/locale.c:80
104630 msgid "Modify output format:"
104631 msgstr "Format de sortie de modification:"
104633 -#: locale/programs/locale.c:79
104634 +#: locale/programs/locale.c:81
104635 msgid "Write names of selected categories"
104636 msgstr "Écriture des noms sélectionnés des catégories"
104638 -#: locale/programs/locale.c:80
104639 +#: locale/programs/locale.c:82
104640 msgid "Write names of selected keywords"
104641 msgstr "Écriture des noms sélectionnés des mots clés"
104643 -#: locale/programs/locale.c:81
104644 +#: locale/programs/locale.c:83
104645 msgid "Print more information"
104646 msgstr "Afficher plus informations"
104648 -#: locale/programs/locale.c:86
104649 +#: locale/programs/locale.c:88
104650 msgid "Get locale-specific information."
104651 msgstr "Trouver l'information locale spécifique"
104653 -#: locale/programs/locale.c:89
104654 +#: locale/programs/locale.c:91
104655 msgid ""
104656 "NAME\n"
104657 "[-a|-m]"
104658 @@ -1358,7 +1358,7 @@
104659 "NOM\n"
104660 "[-a|-m]"
104662 -#: locale/programs/locale.c:488
104663 +#: locale/programs/locale.c:512
104664 msgid "while preparing output"
104665 msgstr "lors de la préparation de la sortie"
104667 @@ -1489,16 +1489,16 @@
104668 msgid "cannot create temporary file"
104669 msgstr "ne peut créer un fichier temporaire"
104671 -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:302
104672 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
104673 msgid "cannot initialize archive file"
104674 msgstr "ne peut initialiser le fichier d'archive"
104676 -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:309
104677 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
104678 msgid "cannot resize archive file"
104679 msgstr "ne peut modifier la taille du fichier d'archive"
104681 -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:318
104682 -#: locale/programs/locarchive.c:508
104683 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
104684 +#: locale/programs/locarchive.c:511
104685 msgid "cannot map archive header"
104686 msgstr "ne peut mapper l'en-tête de l'archive"
104688 @@ -1514,88 +1514,88 @@
104689 msgid "cannot map locale archive file"
104690 msgstr "ne peut mapper l'archive de localisation"
104692 -#: locale/programs/locarchive.c:326
104693 +#: locale/programs/locarchive.c:329
104694 msgid "cannot lock new archive"
104695 msgstr "ne peut verrouiller la nouvelle archive"
104697 -#: locale/programs/locarchive.c:377
104698 +#: locale/programs/locarchive.c:380
104699 msgid "cannot extend locale archive file"
104700 msgstr "ne peut augmenter la taille du fichier de l'archive de localisation"
104702 -#: locale/programs/locarchive.c:386
104703 +#: locale/programs/locarchive.c:389
104704 msgid "cannot change mode of resized locale archive"
104705 msgstr "ne peut modifier les protections de l'archive des localisations dont la taille a changé"
104707 -#: locale/programs/locarchive.c:394
104708 +#: locale/programs/locarchive.c:397
104709 msgid "cannot rename new archive"
104710 msgstr "ne peut changer le nom de la nouvelle archive"
104712 -#: locale/programs/locarchive.c:447
104713 +#: locale/programs/locarchive.c:450
104714 #, c-format
104715 msgid "cannot open locale archive \"%s\""
104716 msgstr "ne peut ouvrir l'archive des localisations « %s »"
104718 -#: locale/programs/locarchive.c:452
104719 +#: locale/programs/locarchive.c:455
104720 #, c-format
104721 msgid "cannot stat locale archive \"%s\""
104722 msgstr "ne peut évaluer par `stat' l'archive des localisations « %s »"
104724 -#: locale/programs/locarchive.c:471
104725 +#: locale/programs/locarchive.c:474
104726 #, c-format
104727 msgid "cannot lock locale archive \"%s\""
104728 msgstr "ne peut verrouiller l'archive des localisations « %s »"
104730 -#: locale/programs/locarchive.c:494
104731 +#: locale/programs/locarchive.c:497
104732 msgid "cannot read archive header"
104733 msgstr "ne peut lire l'en-tête de l'archive"
104735 -#: locale/programs/locarchive.c:554
104736 +#: locale/programs/locarchive.c:557
104737 #, c-format
104738 msgid "locale '%s' already exists"
104739 msgstr "localisation « %s » existe déjà"
104741 -#: locale/programs/locarchive.c:784 locale/programs/locarchive.c:799
104742 -#: locale/programs/locarchive.c:811 locale/programs/locarchive.c:823
104743 +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
104744 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
104745 #: locale/programs/locfile.c:343
104746 msgid "cannot add to locale archive"
104747 msgstr "ne peut l'ajouter à l'archive des localisations"
104749 -#: locale/programs/locarchive.c:976
104750 +#: locale/programs/locarchive.c:982
104751 #, c-format
104752 msgid "locale alias file `%s' not found"
104753 msgstr "alias du fichier des localisations « %s » non trouvé"
104755 -#: locale/programs/locarchive.c:1118
104756 +#: locale/programs/locarchive.c:1126
104757 #, c-format
104758 msgid "Adding %s\n"
104759 msgstr "Ajout de %s\n"
104761 -#: locale/programs/locarchive.c:1124
104762 +#: locale/programs/locarchive.c:1132
104763 #, c-format
104764 msgid "stat of \"%s\" failed: %s: ignored"
104765 msgstr "échec d'évaluation par stat() de « %s »: %s: ignoré"
104767 -#: locale/programs/locarchive.c:1130
104768 +#: locale/programs/locarchive.c:1138
104769 #, c-format
104770 msgid "\"%s\" is no directory; ignored"
104771 msgstr "« %s » n'est pas un répertoire; ignoré"
104773 -#: locale/programs/locarchive.c:1137
104774 +#: locale/programs/locarchive.c:1145
104775 #, c-format
104776 msgid "cannot open directory \"%s\": %s: ignored"
104777 msgstr "ne peut ouvrir le répertoire « %s »: %s: ignoré"
104779 -#: locale/programs/locarchive.c:1209
104780 +#: locale/programs/locarchive.c:1217
104781 #, c-format
104782 msgid "incomplete set of locale files in \"%s\""
104783 msgstr "jeu incomplet de fichiers dea localisations dans « %s »"
104785 -#: locale/programs/locarchive.c:1273
104786 +#: locale/programs/locarchive.c:1281
104787 #, c-format
104788 msgid "cannot read all files in \"%s\": ignored"
104789 msgstr "ne peut lire tous les fichiers dans « %s »: ignoré"
104791 -#: locale/programs/locarchive.c:1343
104792 +#: locale/programs/locarchive.c:1351
104793 #, c-format
104794 msgid "locale \"%s\" not in archive"
104795 msgstr "localisation « %s » n'est pas dans l'archive"
104796 @@ -1666,8 +1666,8 @@
104797 "La limite supérieure de l'intervalle n'est pas plus petite\n"
104798 "que la limite inférieure."
104800 -#: locale/programs/xmalloc.c:70 malloc/obstack.c:500 malloc/obstack.c:503
104801 -#: posix/getconf.c:996
104802 +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
104803 +#: posix/getconf.c:1002
104804 msgid "memory exhausted"
104805 msgstr "Mémoire épuisée"
104807 @@ -1693,7 +1693,7 @@
104808 msgid "Another string for testing."
104809 msgstr "Une autre chaîne pour fins de test."
104811 -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:79
104812 +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84
104813 msgid "NAME"
104814 msgstr "NOM"
104816 @@ -1737,7 +1737,7 @@
104817 msgid "duplicate set definition"
104818 msgstr "Double définitions de jeux"
104820 -#: catgets/gencat.c:446 catgets/gencat.c:619 catgets/gencat.c:648
104821 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
104822 msgid "this is the first definition"
104823 msgstr "Ceci est la première définition."
104825 @@ -1755,44 +1755,44 @@
104826 msgid "unknown directive `%s': line ignored"
104827 msgstr "Directive inconnue « %s »: ligne ignorée"
104829 -#: catgets/gencat.c:617
104830 +#: catgets/gencat.c:621
104831 msgid "duplicated message number"
104832 msgstr "Double messages du numéro"
104834 -#: catgets/gencat.c:645
104835 +#: catgets/gencat.c:674
104836 msgid "duplicated message identifier"
104837 msgstr "Double identificateurs de message"
104839 -#: catgets/gencat.c:702
104840 +#: catgets/gencat.c:731
104841 msgid "invalid character: message ignored"
104842 msgstr "Caractères invalide: message ignoré"
104844 -#: catgets/gencat.c:745
104845 +#: catgets/gencat.c:774
104846 msgid "invalid line"
104847 msgstr "Ligne invalide"
104849 -#: catgets/gencat.c:799
104850 +#: catgets/gencat.c:828
104851 msgid "malformed line ignored"
104852 msgstr "Ligne incorrecte ignorée"
104854 -#: catgets/gencat.c:963 catgets/gencat.c:1004
104855 +#: catgets/gencat.c:992 catgets/gencat.c:1033
104856 #, c-format
104857 msgid "cannot open output file `%s'"
104858 msgstr "Ne peut ouvrir le fichier de sortie « %s »"
104860 -#: catgets/gencat.c:1188
104861 +#: catgets/gencat.c:1217
104862 msgid "unterminated message"
104863 msgstr "Message incomplet"
104865 -#: catgets/gencat.c:1212
104866 +#: catgets/gencat.c:1241
104867 msgid "while opening old catalog file"
104868 msgstr "lors de l'ouverture du vieux fichier du catalogue"
104870 -#: catgets/gencat.c:1303
104871 +#: catgets/gencat.c:1332
104872 msgid "conversion modules not available"
104873 msgstr "Module de conversion 'est pas disponible"
104875 -#: catgets/gencat.c:1329
104876 +#: catgets/gencat.c:1358
104877 msgid "cannot determine escape character"
104878 msgstr "Ne peut déterminer une séquence de caractère"
104880 @@ -1800,7 +1800,7 @@
104881 msgid "makecontext: does not know how to handle more than 8 arguments\n"
104882 msgstr "makecontext: ne sait pas comment traiter plus de 8 arguments\n"
104884 -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:178
104885 +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133
104886 #: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861
104887 msgid "Success"
104888 msgstr "Succès"
104889 @@ -2989,23 +2989,23 @@
104890 msgid "%s%sUnknown signal %d\n"
104891 msgstr "%s%ssignal inconnu %d.\n"
104893 -#: malloc/mcheck.c:296
104894 +#: malloc/mcheck.c:346
104895 msgid "memory is consistent, library is buggy\n"
104896 msgstr "La mémoire est consistente, la librairie est fautive.\n"
104898 -#: malloc/mcheck.c:299
104899 +#: malloc/mcheck.c:349
104900 msgid "memory clobbered before allocated block\n"
104901 msgstr "Mémoire écrasée avant le bloc alloué\n"
104903 -#: malloc/mcheck.c:302
104904 +#: malloc/mcheck.c:352
104905 msgid "memory clobbered past end of allocated block\n"
104906 msgstr "Mémoire écrasée après la fin du bloc alloué\n"
104908 -#: malloc/mcheck.c:305
104909 +#: malloc/mcheck.c:355
104910 msgid "block freed twice\n"
104911 msgstr "Bloc libéré deux fois\n"
104913 -#: malloc/mcheck.c:308
104914 +#: malloc/mcheck.c:358
104915 msgid "bogus mcheck_status, library is buggy\n"
104916 msgstr "Statut de « mcheck_status » erroné, la librarie est erronée.\n"
104918 @@ -3041,6 +3041,10 @@
104919 msgid "DATAFILE [OUTFILE]"
104920 msgstr "DATAFILE [FICHIER_DE_SORTIE]"
104922 +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
104923 +msgid "Unknown error"
104924 +msgstr "Erreur inconnue"
104926 #: string/strsignal.c:69
104927 #, c-format
104928 msgid "Real-time signal %d"
104929 @@ -3065,7 +3069,7 @@
104930 msgid "%s: Memory exhausted: %s\n"
104931 msgstr "%s: mémoire épuisée: %s\n"
104933 -#: timezone/zic.c:390 misc/error.c:120
104934 +#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155
104935 msgid "Unknown system error"
104936 msgstr "Erreur système inconnue"
104938 @@ -3465,25 +3469,21 @@
104939 msgid "Interrupted by a signal"
104940 msgstr "Interrompu par un signal"
104942 -#: posix/../sysdeps/posix/gai_strerror.c:57
104943 -msgid "Unknown error"
104944 -msgstr "Erreur inconnue"
104946 -#: posix/getconf.c:883
104947 +#: posix/getconf.c:889
104948 #, c-format
104949 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
104950 msgstr "Usage: %s [-v spécification] nom_de_variable [chemin_d_accès]\n"
104952 -#: posix/getconf.c:941
104953 +#: posix/getconf.c:947
104954 #, c-format
104955 msgid "unknown specification \"%s\""
104956 msgstr "spécification inconnu « %s »"
104958 -#: posix/getconf.c:968 posix/getconf.c:984
104959 +#: posix/getconf.c:974 posix/getconf.c:990
104960 msgid "undefined"
104961 msgstr "indéfini"
104963 -#: posix/getconf.c:1006
104964 +#: posix/getconf.c:1012
104965 #, c-format
104966 msgid "Unrecognized variable `%s'"
104967 msgstr "Variable non reconnue « %s »"
104968 @@ -3545,71 +3545,71 @@
104969 msgid "%s: option `-W %s' doesn't allow an argument\n"
104970 msgstr "%s: l'option « -W %s » ne permet pas d'argument\n"
104972 -#: posix/regcomp.c:181
104973 +#: posix/regcomp.c:136
104974 msgid "No match"
104975 msgstr "Pas de concordance"
104977 -#: posix/regcomp.c:184
104978 +#: posix/regcomp.c:139
104979 msgid "Invalid regular expression"
104980 msgstr "Expression régulière invalide"
104982 -#: posix/regcomp.c:187
104983 +#: posix/regcomp.c:142
104984 msgid "Invalid collation character"
104985 msgstr "Caractère de fusionnement invalide"
104987 -#: posix/regcomp.c:190
104988 +#: posix/regcomp.c:145
104989 msgid "Invalid character class name"
104990 msgstr "Nom de classe de caractères invalide"
104992 -#: posix/regcomp.c:193
104993 +#: posix/regcomp.c:148
104994 msgid "Trailing backslash"
104995 msgstr "Barre oblique inverse en suffixe"
104997 -#: posix/regcomp.c:196
104998 +#: posix/regcomp.c:151
104999 msgid "Invalid back reference"
105000 msgstr "Référence arrière invalide"
105002 -#: posix/regcomp.c:199
105003 +#: posix/regcomp.c:154
105004 msgid "Unmatched [ or [^"
105005 msgstr "Échec du pairage de [ ou de [^"
105007 -#: posix/regcomp.c:202
105008 +#: posix/regcomp.c:157
105009 msgid "Unmatched ( or \\("
105010 msgstr "Échec du pairage de ( ou de \\("
105012 -#: posix/regcomp.c:205
105013 +#: posix/regcomp.c:160
105014 msgid "Unmatched \\{"
105015 msgstr "Échec du pairage de \\{"
105017 -#: posix/regcomp.c:208
105018 +#: posix/regcomp.c:163
105019 msgid "Invalid content of \\{\\}"
105020 msgstr "Contenu invalide de \\{\\}"
105022 -#: posix/regcomp.c:211
105023 +#: posix/regcomp.c:166
105024 msgid "Invalid range end"
105025 msgstr "Fin d'intervalle invalide"
105027 -#: posix/regcomp.c:214
105028 +#: posix/regcomp.c:169
105029 msgid "Memory exhausted"
105030 msgstr "Mémoire épuisée"
105032 -#: posix/regcomp.c:217
105033 +#: posix/regcomp.c:172
105034 msgid "Invalid preceding regular expression"
105035 msgstr "Expression régulière précédente invalide"
105037 -#: posix/regcomp.c:220
105038 +#: posix/regcomp.c:175
105039 msgid "Premature end of regular expression"
105040 msgstr "Fin prématurée de l'expression régulière"
105042 -#: posix/regcomp.c:223
105043 +#: posix/regcomp.c:178
105044 msgid "Regular expression too big"
105045 msgstr "Expression régulière trop grosse"
105047 -#: posix/regcomp.c:226
105048 +#: posix/regcomp.c:181
105049 msgid "Unmatched ) or \\)"
105050 msgstr "Échec du pairage de ) ou de \\)"
105052 -#: posix/regcomp.c:673
105053 +#: posix/regcomp.c:615
105054 msgid "No previous regular expression"
105055 msgstr "Aucune expression régulière précédente"
105057 @@ -3765,24 +3765,24 @@
105058 msgid "Service configuration to be used"
105059 msgstr "Configuration de service à être utilisée"
105061 -#: nss/getent.c:136 nss/getent.c:305
105062 +#: nss/getent.c:136 nss/getent.c:308
105063 #, c-format
105064 msgid "Enumeration not supported on %s\n"
105065 msgstr "Énumération non supportée sur %s\n"
105067 -#: nss/getent.c:729
105068 +#: nss/getent.c:732
105069 msgid "getent - get entries from administrative database."
105070 msgstr "getent() - obtenir les entrées de la base de données administratives"
105072 -#: nss/getent.c:730
105073 +#: nss/getent.c:733
105074 msgid "Supported databases:"
105075 msgstr "Base de données supportées:"
105077 -#: nss/getent.c:787 nscd/nscd.c:119 nscd/nscd_nischeck.c:64
105078 +#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64
105079 msgid "wrong number of arguments"
105080 msgstr "Mauvais nombre d'arguments"
105082 -#: nss/getent.c:797
105083 +#: nss/getent.c:800
105084 #, c-format
105085 msgid "Unknown database: %s\n"
105086 msgstr "Base de données inconnue: « %s »\n"
105087 @@ -3811,68 +3811,72 @@
105088 msgid "invalid pointer size"
105089 msgstr "Taille de pointeur invalide"
105091 -#: inet/rcmd.c:174 inet/rcmd.c:177
105092 +#: inet/rcmd.c:163 inet/rcmd.c:166
105093 +msgid "rcmd: Cannot allocate memory\n"
105094 +msgstr "rcmd: ne peut allouer de la mémoire\n"
105096 +#: inet/rcmd.c:185 inet/rcmd.c:188
105097 msgid "rcmd: socket: All ports in use\n"
105098 msgstr "rcmd: socket: tous les ports sont occupés\n"
105100 -#: inet/rcmd.c:211
105101 +#: inet/rcmd.c:222
105102 #, c-format
105103 msgid "connect to address %s: "
105104 msgstr "Connexion établie à l'adresse %s: "
105106 -#: inet/rcmd.c:229
105107 +#: inet/rcmd.c:240
105108 #, c-format
105109 msgid "Trying %s...\n"
105110 msgstr "On tente %s...\n"
105112 -#: inet/rcmd.c:278
105113 +#: inet/rcmd.c:289
105114 #, c-format
105115 msgid "rcmd: write (setting up stderr): %m\n"
105116 msgstr "rcmd: écriture (configuration de stderr): %m\n"
105118 -#: inet/rcmd.c:299
105119 +#: inet/rcmd.c:310
105120 #, c-format
105121 msgid "rcmd: poll (setting up stderr): %m\n"
105122 msgstr "rcmd: poll (configuration de stderr): %m\n"
105124 -#: inet/rcmd.c:302
105125 +#: inet/rcmd.c:313
105126 msgid "poll: protocol failure in circuit setup\n"
105127 msgstr "poll: échec du protocole dans la configuration du circuit\n"
105129 -#: inet/rcmd.c:346
105130 +#: inet/rcmd.c:358
105131 msgid "socket: protocol failure in circuit setup\n"
105132 msgstr "socket: échec de protocole dans la configuration du circuit.\n"
105134 -#: inet/rcmd.c:368
105135 +#: inet/rcmd.c:387
105136 #, c-format
105137 msgid "rcmd: %s: short read"
105138 msgstr "rcmd: %s: lecture écourtée"
105140 -#: inet/rcmd.c:524
105141 +#: inet/rcmd.c:549
105142 msgid "lstat failed"
105143 msgstr "Échec d'évaluation lstat()"
105145 -#: inet/rcmd.c:526
105146 +#: inet/rcmd.c:551
105147 msgid "not regular file"
105148 msgstr "N'est pas un fichier régulier"
105150 -#: inet/rcmd.c:531
105151 +#: inet/rcmd.c:556
105152 msgid "cannot open"
105153 msgstr "Ne peut ouvrir"
105155 -#: inet/rcmd.c:533
105156 +#: inet/rcmd.c:558
105157 msgid "fstat failed"
105158 msgstr "Échec d'évaluation fstat()"
105160 -#: inet/rcmd.c:535
105161 +#: inet/rcmd.c:560
105162 msgid "bad owner"
105163 msgstr "Mauvais propriétaire"
105165 -#: inet/rcmd.c:537
105166 +#: inet/rcmd.c:562
105167 msgid "writeable by other than owner"
105168 msgstr "accessible en écriture par d'autres que le propriétaire"
105170 -#: inet/rcmd.c:539
105171 +#: inet/rcmd.c:564
105172 msgid "hard linked somewhere"
105173 msgstr "lien direct rencontré"
105175 @@ -4083,109 +4087,109 @@
105176 msgid "Cannot receive reply to broadcast"
105177 msgstr "Ne peut recevoir l'accusé réception à la requête faite par diffusion"
105179 -#: sunrpc/rpc_main.c:289
105180 +#: sunrpc/rpc_main.c:288
105181 #, c-format
105182 msgid "%s: output would overwrite %s\n"
105183 msgstr "%s: la sortie écraserait %s\n"
105185 -#: sunrpc/rpc_main.c:296
105186 +#: sunrpc/rpc_main.c:295
105187 #, c-format
105188 msgid "%s: unable to open %s: %m\n"
105189 msgstr "%s: incapable d'ouvrir %s: %m\n"
105191 -#: sunrpc/rpc_main.c:308
105192 +#: sunrpc/rpc_main.c:307
105193 #, c-format
105194 msgid "%s: while writing output %s: %m"
105195 msgstr "%s: lors de l'écriture sur la sortie %s: %m"
105197 -#: sunrpc/rpc_main.c:343
105198 +#: sunrpc/rpc_main.c:342
105199 #, c-format
105200 msgid "cannot find C preprocessor: %s \n"
105201 msgstr "Ne peut trouver le préprocesseur C: %s\n"
105203 -#: sunrpc/rpc_main.c:351
105204 +#: sunrpc/rpc_main.c:350
105205 msgid "cannot find any C preprocessor (cpp)\n"
105206 msgstr "Ne peut trouver un préprocesseur C (cpp)\n"
105208 -#: sunrpc/rpc_main.c:420
105209 +#: sunrpc/rpc_main.c:419
105210 #, c-format
105211 msgid "%s: C preprocessor failed with signal %d\n"
105212 msgstr "%s: échec du préprocesseur C -- code de terminaison: %d\n"
105214 -#: sunrpc/rpc_main.c:423
105215 +#: sunrpc/rpc_main.c:422
105216 #, c-format
105217 msgid "%s: C preprocessor failed with exit code %d\n"
105218 msgstr "%s: échec du préprocesseur C -- code de terminaison: %d\n"
105220 -#: sunrpc/rpc_main.c:463
105221 +#: sunrpc/rpc_main.c:462
105222 #, c-format
105223 msgid "illegal nettype :`%s'\n"
105224 msgstr "« nettype » illégal :« %s »\n"
105226 -#: sunrpc/rpc_main.c:1105
105227 +#: sunrpc/rpc_main.c:1104
105228 msgid "rpcgen: too many defines\n"
105229 msgstr "rpcgen: trop de définitions\n"
105231 -#: sunrpc/rpc_main.c:1117
105232 +#: sunrpc/rpc_main.c:1116
105233 msgid "rpcgen: arglist coding error\n"
105234 msgstr "rpcgen: erreur dans la liste d'arguments de codage\n"
105236 #. TRANS: the file will not be removed; this is an
105237 #. TRANS: informative message.
105238 -#: sunrpc/rpc_main.c:1150
105239 +#: sunrpc/rpc_main.c:1149
105240 #, c-format
105241 msgid "file `%s' already exists and may be overwritten\n"
105242 msgstr "Le fichier « %s » existe déjà et peut avoir été écrasé.\n"
105244 -#: sunrpc/rpc_main.c:1195
105245 +#: sunrpc/rpc_main.c:1194
105246 msgid "Cannot specify more than one input file!\n"
105247 msgstr "Ne peut spécifier plus d'un fichier d'entrée!\n"
105249 -#: sunrpc/rpc_main.c:1365
105250 +#: sunrpc/rpc_main.c:1364
105251 msgid "This implementation doesn't support newstyle or MT-safe code!\n"
105252 msgstr "Cette implantation ne supporte pas le nouveau style ou le code MT-safe!\n"
105254 -#: sunrpc/rpc_main.c:1374
105255 +#: sunrpc/rpc_main.c:1373
105256 msgid "Cannot use netid flag with inetd flag!\n"
105257 msgstr "Ne utiliser le sémaphore « netid » avec le sémaphore « inetd »!\n"
105259 -#: sunrpc/rpc_main.c:1386
105260 +#: sunrpc/rpc_main.c:1385
105261 msgid "Cannot use netid flag without TIRPC!\n"
105262 msgstr "Ne peut utiliser le sémaphore « netid » sans « TIRPC »!\n"
105264 -#: sunrpc/rpc_main.c:1393
105265 +#: sunrpc/rpc_main.c:1392
105266 msgid "Cannot use table flags with newstyle!\n"
105267 msgstr "Ne peut utiliser la table des sémaphores avec « newstyle »!\n"
105269 -#: sunrpc/rpc_main.c:1412
105270 +#: sunrpc/rpc_main.c:1411
105271 msgid "\"infile\" is required for template generation flags.\n"
105272 msgstr "\"fichier_d_entrée\" est requis pour la génération du gabarit des indicateurs.\n"
105274 -#: sunrpc/rpc_main.c:1417
105275 +#: sunrpc/rpc_main.c:1416
105276 msgid "Cannot have more than one file generation flag!\n"
105277 msgstr "Ne peut avoir plus d'un fichier de génération de sémaphores!\n"
105279 -#: sunrpc/rpc_main.c:1426
105280 +#: sunrpc/rpc_main.c:1425
105281 #, c-format
105282 msgid "usage: %s infile\n"
105283 msgstr "usage: %s fichier_d_entrée\n"
105285 -#: sunrpc/rpc_main.c:1427
105286 +#: sunrpc/rpc_main.c:1426
105287 #, c-format
105288 msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
105289 msgstr "\t%s [-abkCLNTM][-Dname[=valeur]] [-i taille] [-I [-K secondes]] [-Y chemin] fichier\n"
105291 -#: sunrpc/rpc_main.c:1429
105292 +#: sunrpc/rpc_main.c:1428
105293 #, c-format
105294 msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
105295 msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o fichier_de_sortie] [fichier_d_entrée]\n"
105297 -#: sunrpc/rpc_main.c:1431
105298 +#: sunrpc/rpc_main.c:1430
105299 #, c-format
105300 msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
105301 msgstr "\t%s [-s type_réseau]* [-o fichier_de_sortie] [fichier_d_entrée]\n"
105303 -#: sunrpc/rpc_main.c:1432
105304 +#: sunrpc/rpc_main.c:1431
105305 #, c-format
105306 msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
105307 msgstr "\t%s [-n id_réseau]* [-o fichier_de_sortie] [fichier_d_entrée]\n"
105308 @@ -5042,7 +5046,7 @@
105309 msgid "while allocating hash table entry"
105310 msgstr "lors de l'allocation d'entrées dans la table de hachage"
105312 -#: nscd/cache.c:150 nscd/connections.c:185
105313 +#: nscd/cache.c:150 nscd/connections.c:187
105314 #, c-format
105315 msgid "cannot stat() file `%s': %s"
105316 msgstr "Ne peut évaluer par stat() le fichier « %s »: %s"
105317 @@ -5055,153 +5059,158 @@
105318 msgid "Cannot run nscd in secure mode as unprivileged user"
105319 msgstr "Ne peut exécuter nscd en mode sécuritaire en tant qu'usager sans privilège"
105321 -#: nscd/connections.c:199
105322 +#: nscd/connections.c:175
105323 +#, c-format
105324 +msgid "while allocating cache: %s"
105325 +msgstr "lors de l'allocation de la cache: %s"
105327 +#: nscd/connections.c:200
105328 #, c-format
105329 msgid "cannot open socket: %s"
105330 msgstr "Ne peut ouvrir le socket: « %s »"
105332 -#: nscd/connections.c:217
105333 +#: nscd/connections.c:218
105334 #, c-format
105335 msgid "cannot enable socket to accept connections: %s"
105336 msgstr "Ne peut activer le socket pour accepter des connexions: %s"
105338 -#: nscd/connections.c:259
105339 +#: nscd/connections.c:260
105340 #, c-format
105341 msgid "handle_request: request received (Version = %d)"
105342 msgstr "handle_request: requête reçue (Version = %d)"
105344 -#: nscd/connections.c:265
105345 +#: nscd/connections.c:266
105346 #, c-format
105347 msgid "cannot handle old request version %d; current version is %d"
105348 msgstr "Ne peut traiter une requête d'une vieille version %d; la version courante est %d"
105350 -#: nscd/connections.c:303 nscd/connections.c:325
105351 +#: nscd/connections.c:304 nscd/connections.c:326
105352 #, c-format
105353 msgid "cannot write result: %s"
105354 msgstr "Ne peut écrire les résultats: « %s »"
105356 -#: nscd/connections.c:404 nscd/connections.c:498
105357 +#: nscd/connections.c:405 nscd/connections.c:499
105358 #, c-format
105359 msgid "error getting callers id: %s"
105360 msgstr "erreur lors de la recherche de l'identificateur de l'appelant: %s"
105362 -#: nscd/connections.c:470
105363 +#: nscd/connections.c:471
105364 #, c-format
105365 msgid "while accepting connection: %s"
105366 msgstr "lors de l'acceptation de connexion: %s"
105368 -#: nscd/connections.c:481
105369 +#: nscd/connections.c:482
105370 #, c-format
105371 msgid "short read while reading request: %s"
105372 msgstr "Lecture écourtée lors de la lecture de la requête: « %s »"
105374 -#: nscd/connections.c:517
105375 +#: nscd/connections.c:518
105376 #, c-format
105377 msgid "key length in request too long: %d"
105378 msgstr "La longueur de la clé de la requête est trop longue: %d"
105380 -#: nscd/connections.c:531
105381 +#: nscd/connections.c:532
105382 #, c-format
105383 msgid "short read while reading request key: %s"
105384 msgstr "Lecture écourtée lors de la lecture de la clé de requête: %s"
105386 -#: nscd/connections.c:590 nscd/connections.c:591 nscd/connections.c:610
105387 -#: nscd/connections.c:623 nscd/connections.c:629 nscd/connections.c:636
105388 +#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611
105389 +#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637
105390 #, c-format
105391 msgid "Failed to run nscd as user '%s'"
105392 msgstr "Échec d'exécution de nscd en tant qu'usager « %s »"
105394 -#: nscd/connections.c:611
105395 +#: nscd/connections.c:612
105396 msgid "getgrouplist failed"
105397 msgstr "échec de getgrouplist"
105399 -#: nscd/connections.c:624
105400 +#: nscd/connections.c:625
105401 msgid "setgroups failed"
105402 msgstr "échec de setgroups"
105404 -#: nscd/grpcache.c:102 nscd/hstcache.c:110 nscd/pwdcache.c:108
105405 +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
105406 msgid "while allocating key copy"
105407 msgstr "lors de l'allocation d'une copie de clé"
105409 -#: nscd/grpcache.c:152 nscd/hstcache.c:167 nscd/pwdcache.c:145
105410 +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
105411 msgid "while allocating cache entry"
105412 msgstr "lors de l'allocation d'entrée dans la cache"
105414 -#: nscd/grpcache.c:195 nscd/hstcache.c:281 nscd/pwdcache.c:191
105415 +#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192
105416 #, c-format
105417 msgid "short write in %s: %s"
105418 msgstr "Écriture écourtée dans %s: %s"
105420 -#: nscd/grpcache.c:217
105421 +#: nscd/grpcache.c:218
105422 #, c-format
105423 msgid "Haven't found \"%s\" in group cache!"
105424 msgstr "N'a pas trouvé « %s » dans la cache du groupe!"
105426 -#: nscd/grpcache.c:292
105427 +#: nscd/grpcache.c:284
105428 #, c-format
105429 msgid "Invalid numeric gid \"%s\"!"
105430 msgstr "gid numérique invalide « %s »!"
105432 -#: nscd/grpcache.c:299
105433 +#: nscd/grpcache.c:291
105434 #, c-format
105435 msgid "Haven't found \"%d\" in group cache!"
105436 msgstr "N'a pas trouvé « %d » dans la cache du groupe!"
105438 -#: nscd/hstcache.c:303 nscd/hstcache.c:378 nscd/hstcache.c:456
105439 -#: nscd/hstcache.c:533
105440 +#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435
105441 +#: nscd/hstcache.c:500
105442 #, c-format
105443 msgid "Haven't found \"%s\" in hosts cache!"
105444 msgstr "N'a pas trouvé « %s » dans la cache de la liste des hôtes!"
105446 -#: nscd/nscd.c:80
105447 +#: nscd/nscd.c:85
105448 msgid "Read configuration data from NAME"
105449 msgstr "Lire les données de configuration du NOM"
105451 -#: nscd/nscd.c:82
105452 +#: nscd/nscd.c:87
105453 msgid "Do not fork and display messages on the current tty"
105454 msgstr "Ne pas cloner le processus par fork() et ne pas afficher de message sur le tty courant"
105456 -#: nscd/nscd.c:83
105457 +#: nscd/nscd.c:88
105458 msgid "NUMBER"
105459 msgstr "NUMÉRO"
105461 -#: nscd/nscd.c:83
105462 +#: nscd/nscd.c:88
105463 msgid "Start NUMBER threads"
105464 msgstr "Démarrage du NOMBRE de « threads »"
105466 -#: nscd/nscd.c:84
105467 +#: nscd/nscd.c:89
105468 msgid "Shut the server down"
105469 msgstr "Arrêter le serveur"
105471 -#: nscd/nscd.c:85
105472 +#: nscd/nscd.c:90
105473 msgid "Print current configuration statistic"
105474 msgstr "Afficher les statistiques de la configuration courante"
105476 -#: nscd/nscd.c:86
105477 +#: nscd/nscd.c:91
105478 msgid "TABLE"
105479 msgstr "TABLE"
105481 -#: nscd/nscd.c:87
105482 +#: nscd/nscd.c:92
105483 msgid "Invalidate the specified cache"
105484 msgstr "Invalide la cache spécifiée"
105486 -#: nscd/nscd.c:88
105487 +#: nscd/nscd.c:93
105488 msgid "TABLE,yes"
105489 msgstr "TABLE,oui"
105491 -#: nscd/nscd.c:88
105492 +#: nscd/nscd.c:93
105493 msgid "Use separate cache for each user"
105494 msgstr "Utiliser une cache séparée pour chaque usager"
105496 -#: nscd/nscd.c:93
105497 +#: nscd/nscd.c:98
105498 msgid "Name Service Cache Daemon."
105499 msgstr "« Daemon » de la cache du service de noms"
105501 -#: nscd/nscd.c:126
105502 +#: nscd/nscd.c:131
105503 msgid "already running"
105504 msgstr "déjà en exécution"
105506 -#: nscd/nscd.c:192 nscd/nscd.c:212 nscd/nscd.c:218
105507 +#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269
105508 msgid "Only root is allowed to use this option!"
105509 msgstr "Seul ROOT est autorisé à utiliser cette option!"
105511 @@ -5291,22 +5300,22 @@
105512 "%15ld%% taux de repérage\n"
105513 "%15s vérifier /etc/%s pour les changements\n"
105515 -#: nscd/pwdcache.c:213
105516 +#: nscd/pwdcache.c:214
105517 #, c-format
105518 msgid "Haven't found \"%s\" in password cache!"
105519 msgstr "N'a pas trouvé « %s » dans la cache des mots de passe!"
105521 -#: nscd/pwdcache.c:288
105522 +#: nscd/pwdcache.c:280
105523 #, c-format
105524 msgid "Invalid numeric uid \"%s\"!"
105525 msgstr "uid numérique invalide « %s »!"
105527 -#: nscd/pwdcache.c:295
105528 +#: nscd/pwdcache.c:287
105529 #, c-format
105530 msgid "Haven't found \"%d\" in password cache!"
105531 msgstr "N'a pas trouvé « %d » dans la cache des mots de passe!"
105533 -#: elf/../sysdeps/generic/dl-sysdep.c:297
105534 +#: elf/../sysdeps/generic/dl-sysdep.c:357
105535 msgid "cannot create capability list"
105536 msgstr "Ne peut créer une liste des possibilités"
105538 @@ -5357,7 +5366,7 @@
105539 msgid ", OS ABI: %s %d.%d.%d"
105540 msgstr ", ABI Système d'exploitation: %s %d.%d.%d"
105542 -#: elf/cache.c:136 elf/ldconfig.c:1033
105543 +#: elf/cache.c:136 elf/ldconfig.c:1045
105544 #, c-format
105545 msgid "Can't open cache file %s\n"
105546 msgstr "Ne peut ouvrir le fichier de la cache %s\n"
105547 @@ -5403,15 +5412,15 @@
105548 msgid "Renaming of %s to %s failed"
105549 msgstr "ÉCHEC du changement de nom de %s vers %s"
105551 -#: elf/dl-close.c:113
105552 +#: elf/dl-close.c:128
105553 msgid "shared object not open"
105554 msgstr "Objet partagé non ouvert"
105556 -#: elf/dl-close.c:357 elf/dl-open.c:436
105557 +#: elf/dl-close.c:486 elf/dl-open.c:444
105558 msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
105559 msgstr "Compteut de génération TLS a bouclé! SVP expédier un rapport avec le script 'glibcbug'"
105561 -#: elf/dl-deps.c:111 elf/dl-open.c:177
105562 +#: elf/dl-deps.c:111 elf/dl-open.c:183
105563 msgid "DST not allowed in SUID/SGID programs"
105564 msgstr "DST non permis dans un programme SUID/SGID"
105566 @@ -5428,181 +5437,193 @@
105567 msgid "cannot allocate dependency list"
105568 msgstr "Ne peut allouer une liste de dépendances"
105570 -#: elf/dl-deps.c:492 elf/dl-deps.c:547
105571 +#: elf/dl-deps.c:494 elf/dl-deps.c:549
105572 msgid "cannot allocate symbol search list"
105573 msgstr "Ne peut allouer la liste des symboles recherchées"
105575 -#: elf/dl-deps.c:532
105576 +#: elf/dl-deps.c:534
105577 msgid "Filters not supported with LD_TRACE_PRELINKING"
105578 msgstr "Filtres non supportés avec LD_TRACE_PRELINKING"
105580 -#: elf/dl-error.c:73
105581 +#: elf/dl-error.c:75
105582 msgid "DYNAMIC LINKER BUG!!!"
105583 msgstr "PROBLÈME DANS LE CHARGEUR DE LIENS DYNAMIQUES"
105585 -#: elf/dl-error.c:106
105586 +#: elf/dl-error.c:108
105587 msgid "error while loading shared libraries"
105588 msgstr "erreur lors du chargement des librairies partagées"
105590 -#: elf/dl-load.c:338
105591 +#: elf/dl-load.c:339
105592 msgid "cannot allocate name record"
105593 msgstr "Ne peut allouer une nom d'enregistrement"
105595 -#: elf/dl-load.c:440 elf/dl-load.c:520 elf/dl-load.c:614 elf/dl-load.c:709
105596 +#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707
105597 msgid "cannot create cache for search path"
105598 msgstr "Ne peut créer une cache pour le chemin de recherche"
105600 -#: elf/dl-load.c:545
105601 +#: elf/dl-load.c:543
105602 msgid "cannot create RUNPATH/RPATH copy"
105603 msgstr "Ne peut créer une copie RUNPATH/RPATH"
105605 -#: elf/dl-load.c:600
105606 +#: elf/dl-load.c:598
105607 msgid "cannot create search path array"
105608 msgstr "Ne peut créer un tableau des chemins de recherche"
105610 -#: elf/dl-load.c:796
105611 +#: elf/dl-load.c:794
105612 msgid "cannot stat shared object"
105613 msgstr "Échec évaluer par stat() l'objet partagé"
105615 -#: elf/dl-load.c:840
105616 +#: elf/dl-load.c:838
105617 msgid "cannot open zero fill device"
105618 msgstr "Ne peut ouvrir le fichier de périphérique rempli de zéros"
105620 -#: elf/dl-load.c:849 elf/dl-load.c:1855
105621 +#: elf/dl-load.c:847 elf/dl-load.c:1902
105622 msgid "cannot create shared object descriptor"
105623 msgstr "Ne peut créer un objet descripteur partagé"
105625 -#: elf/dl-load.c:868 elf/dl-load.c:1351 elf/dl-load.c:1434
105626 +#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481
105627 msgid "cannot read file data"
105628 msgstr "Ne peut lire le fichier de données"
105630 -#: elf/dl-load.c:908
105631 +#: elf/dl-load.c:906
105632 msgid "ELF load command alignment not page-aligned"
105633 msgstr "Commande de chargement sur une page ELF qui n'est pas alignée"
105635 -#: elf/dl-load.c:915
105636 +#: elf/dl-load.c:913
105637 msgid "ELF load command address/offset not properly aligned"
105638 msgstr "Commande de chargement sur une adresse ELF incorrectement alignée"
105640 -#: elf/dl-load.c:996
105641 +#: elf/dl-load.c:988
105642 +msgid "cannot allocate TLS data structures for initial thread"
105643 +msgstr "ne peut allouer une structure de données TLS pour un thread initial"
105645 +#: elf/dl-load.c:1012
105646 +msgid "cannot handle TLS data"
105647 +msgstr "ne peut traiter les données TLS"
105649 +#: elf/dl-load.c:1047
105650 msgid "failed to map segment from shared object"
105651 msgstr "Échec d'adressage (mapping) du segement de l'objet partagé"
105653 -#: elf/dl-load.c:1020
105654 +#: elf/dl-load.c:1071
105655 msgid "cannot dynamically load executable"
105656 msgstr "Ne peut dynamiquement charger un exécutable"
105658 -#: elf/dl-load.c:1081
105659 +#: elf/dl-load.c:1132
105660 msgid "cannot change memory protections"
105661 msgstr "Ne peut modifier les protections de mémoire"
105663 -#: elf/dl-load.c:1100
105664 +#: elf/dl-load.c:1151
105665 msgid "cannot map zero-fill pages"
105666 msgstr "Ne peut adresser des pages rempliez de zéros"
105668 -#: elf/dl-load.c:1118
105669 +#: elf/dl-load.c:1169
105670 msgid "cannot allocate memory for program header"
105671 msgstr "Ne peut allouer de la mémoire pour une en-tête de programme"
105673 -#: elf/dl-load.c:1149
105674 +#: elf/dl-load.c:1200
105675 msgid "object file has no dynamic section"
105676 msgstr "Le fichier objet n'a pas de section dynamique"
105678 -#: elf/dl-load.c:1193
105679 +#: elf/dl-load.c:1240
105680 msgid "shared object cannot be dlopen()ed"
105681 msgstr "L'objet partagé ne peut pas être ouvert via dlopen()"
105683 -#: elf/dl-load.c:1216
105684 +#: elf/dl-load.c:1263
105685 msgid "cannot create searchlist"
105686 msgstr "Ne peut créer une liste de recherche"
105688 -#: elf/dl-load.c:1351
105689 +#: elf/dl-load.c:1398
105690 msgid "file too short"
105691 msgstr "Fichier trop court"
105693 -#: elf/dl-load.c:1374
105694 +#: elf/dl-load.c:1421
105695 msgid "invalid ELF header"
105696 msgstr "En-tête ELF invalide"
105698 -#: elf/dl-load.c:1383
105699 +#: elf/dl-load.c:1430
105700 msgid "ELF file data encoding not big-endian"
105701 msgstr "Données d'encodage du fichier ELF n'est pas big-endian"
105703 -#: elf/dl-load.c:1385
105704 +#: elf/dl-load.c:1432
105705 msgid "ELF file data encoding not little-endian"
105706 msgstr "Données d'encodage du fichier ELF n'est pas little-endian"
105708 -#: elf/dl-load.c:1389
105709 +#: elf/dl-load.c:1436
105710 msgid "ELF file version ident does not match current one"
105711 msgstr "Identificateur de version du fichier ELF ne concorde pas avec la version courante"
105713 -#: elf/dl-load.c:1393
105714 +#: elf/dl-load.c:1440
105715 msgid "ELF file OS ABI invalid"
105716 msgstr "Système d'exploitation du fichier ELF ABI invalide"
105718 -#: elf/dl-load.c:1395
105719 +#: elf/dl-load.c:1442
105720 msgid "ELF file ABI version invalid"
105721 msgstr "Version du fichier ELF ABI invalide"
105723 -#: elf/dl-load.c:1398
105724 +#: elf/dl-load.c:1445
105725 msgid "internal error"
105726 msgstr "Erreur interne"
105728 -#: elf/dl-load.c:1405
105729 +#: elf/dl-load.c:1452
105730 msgid "ELF file version does not match current one"
105731 msgstr "Version du fichier ELF ne concorde pas avec la version courante"
105733 -#: elf/dl-load.c:1413
105734 +#: elf/dl-load.c:1460
105735 msgid "ELF file's phentsize not the expected size"
105736 msgstr "« Phentize » du fichier ELF ne concorde pas avec la taille prévue"
105738 -#: elf/dl-load.c:1419
105739 +#: elf/dl-load.c:1466
105740 msgid "only ET_DYN and ET_EXEC can be loaded"
105741 msgstr "Seuls ET_DYN et ET_EXEC peuvent être chargés"
105743 -#: elf/dl-load.c:1870
105744 +#: elf/dl-load.c:1917
105745 msgid "cannot open shared object file"
105746 msgstr "Ne peut ouvrir le fichier d'objet partagé"
105748 -#: elf/dl-lookup.c:248 elf/dl-lookup.c:413
105749 +#: elf/dl-lookup.c:265 elf/dl-lookup.c:430
105750 msgid "relocation error"
105751 msgstr "erreur de relocalisation"
105753 -#: elf/dl-open.c:105
105754 +#: elf/dl-open.c:111
105755 msgid "cannot extend global scope"
105756 msgstr "Ne peut augmenter l'étendue de la plage"
105758 -#: elf/dl-open.c:208
105759 +#: elf/dl-open.c:214
105760 msgid "empty dynamic string token substitution"
105761 msgstr "La chaîne dynamique d'un jeton de substition est vide."
105763 -#: elf/dl-open.c:345 elf/dl-open.c:356
105764 +#: elf/dl-open.c:351 elf/dl-open.c:362
105765 msgid "cannot create scope list"
105766 msgstr "ne peut créer une liste d'étendue"
105768 -#: elf/dl-open.c:416
105769 +#: elf/dl-open.c:424
105770 msgid "cannot create TLS data structures"
105771 msgstr "ne peut créer les structures de données TLS"
105773 -#: elf/dl-open.c:478
105774 +#: elf/dl-open.c:486
105775 msgid "invalid mode for dlopen()"
105776 msgstr "mode invalide pour dlopen()"
105778 -#: elf/dl-reloc.c:88
105779 +#: elf/dl-reloc.c:58
105780 +msgid "shared object cannot be dlopen()ed: static TLS memory too small"
105781 +msgstr "l'objet partagé ne peut pas être ouvert via dlopen(): mémoire statiques TLS trop petite"
105783 +#: elf/dl-reloc.c:118
105784 msgid "cannot make segment writable for relocation"
105785 msgstr "Ne peut rendre le segment inscritible lors d'une relocalisation"
105787 -#: elf/dl-reloc.c:174
105788 +#: elf/dl-reloc.c:219
105789 #, c-format
105790 msgid "%s: profiler found no PLTREL in object %s\n"
105791 msgstr "%s: profileur n'a repéré aucun PLTREL dans l'objet %s\n"
105793 -#: elf/dl-reloc.c:186
105794 +#: elf/dl-reloc.c:231
105795 #, c-format
105796 msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
105797 msgstr "%s: profileur mémoire épuisée par l'ombrage PLTREL de %s\n"
105799 -#: elf/dl-reloc.c:201
105800 +#: elf/dl-reloc.c:246
105801 msgid "cannot restore segment prot after reloc"
105802 msgstr "ne peut restaurer le segment prot après reloc"
105804 @@ -5658,119 +5679,119 @@
105805 msgid "Configure Dynamic Linker Run Time Bindings."
105806 msgstr "Configuration dynamique des éditions de liens lors de l'exécution"
105808 -#: elf/ldconfig.c:282
105809 +#: elf/ldconfig.c:294
105810 #, c-format
105811 msgid "Path `%s' given more than once"
105812 msgstr "Chemin « %s » donné plus d'une fois"
105814 -#: elf/ldconfig.c:326
105815 +#: elf/ldconfig.c:338
105816 #, c-format
105817 msgid "%s is not a known library type"
105818 msgstr "%s n'est pas un type de librairie connue"
105820 -#: elf/ldconfig.c:344
105821 +#: elf/ldconfig.c:356
105822 #, c-format
105823 msgid "Can't stat %s"
105824 msgstr "Ne peut évaluer par stat %s"
105826 -#: elf/ldconfig.c:414
105827 +#: elf/ldconfig.c:426
105828 #, c-format
105829 msgid "Can't stat %s\n"
105830 msgstr "Ne peut évaluer par stat %s\n"
105832 -#: elf/ldconfig.c:424
105833 +#: elf/ldconfig.c:436
105834 #, c-format
105835 msgid "%s is not a symbolic link\n"
105836 msgstr "%s n,est pas un lien symbolique\n"
105838 -#: elf/ldconfig.c:443
105839 +#: elf/ldconfig.c:455
105840 #, c-format
105841 msgid "Can't unlink %s"
105842 msgstr "Ne peut enlever le lien (unlink) %s"
105844 -#: elf/ldconfig.c:449
105845 +#: elf/ldconfig.c:461
105846 #, c-format
105847 msgid "Can't link %s to %s"
105848 msgstr "Ne peut établir un lien entre %s et %s"
105850 -#: elf/ldconfig.c:455
105851 +#: elf/ldconfig.c:467
105852 msgid " (changed)\n"
105853 msgstr " (a été modifié)\n"
105855 -#: elf/ldconfig.c:457
105856 +#: elf/ldconfig.c:469
105857 msgid " (SKIPPED)\n"
105858 msgstr " (ESCAMOTÉ)\n"
105860 -#: elf/ldconfig.c:512
105861 +#: elf/ldconfig.c:524
105862 #, c-format
105863 msgid "Can't find %s"
105864 msgstr "Ne peut repérer %s"
105866 -#: elf/ldconfig.c:528
105867 +#: elf/ldconfig.c:540
105868 #, c-format
105869 msgid "Can't lstat %s"
105870 msgstr "Ne peut évaluer par lstat %s"
105872 -#: elf/ldconfig.c:535
105873 +#: elf/ldconfig.c:547
105874 #, c-format
105875 msgid "Ignored file %s since it is not a regular file."
105876 msgstr "Ignorer le fichier %s étant donné que ce n'est pas un fichier régulier"
105878 -#: elf/ldconfig.c:543
105879 +#: elf/ldconfig.c:555
105880 #, c-format
105881 msgid "No link created since soname could not be found for %s"
105882 msgstr "Aucun lien créé étant donné qu'il n'a pas été repéré pour %s"
105884 -#: elf/ldconfig.c:634
105885 +#: elf/ldconfig.c:646
105886 #, c-format
105887 msgid "Can't open directory %s"
105888 msgstr "Ne peut ouvrir le répertoire %s"
105890 -#: elf/ldconfig.c:689 elf/ldconfig.c:736
105891 +#: elf/ldconfig.c:701 elf/ldconfig.c:748
105892 #, c-format
105893 msgid "Cannot lstat %s"
105894 msgstr "Ne peut évaluer par lstat %s"
105896 -#: elf/ldconfig.c:701
105897 +#: elf/ldconfig.c:713
105898 #, c-format
105899 msgid "Cannot stat %s"
105900 msgstr "Ne peut évaluer par stat %s"
105902 -#: elf/ldconfig.c:758 elf/readlib.c:93
105903 +#: elf/ldconfig.c:770 elf/readlib.c:93
105904 #, c-format
105905 msgid "Input file %s not found.\n"
105906 msgstr "Fichier d'entrée %s non repéré\n"
105908 -#: elf/ldconfig.c:792
105909 +#: elf/ldconfig.c:804
105910 #, c-format
105911 msgid "libc5 library %s in wrong directory"
105912 msgstr "librairie libc5 %s est dans le mauvais répertoire"
105914 -#: elf/ldconfig.c:795
105915 +#: elf/ldconfig.c:807
105916 #, c-format
105917 msgid "libc6 library %s in wrong directory"
105918 msgstr "librairie libc6 %s est dans el mauvais répertoire"
105920 -#: elf/ldconfig.c:798
105921 +#: elf/ldconfig.c:810
105922 #, c-format
105923 msgid "libc4 library %s in wrong directory"
105924 msgstr "librairie libc4 %s est dans le mauvais répertoire"
105926 -#: elf/ldconfig.c:825
105927 +#: elf/ldconfig.c:837
105928 #, c-format
105929 msgid "libraries %s and %s in directory %s have same soname but different type."
105930 msgstr "Les librairies %s et %s du répertoire %s ont le même nom mais sont de types différents"
105932 -#: elf/ldconfig.c:928
105933 +#: elf/ldconfig.c:940
105934 #, c-format
105935 msgid "Can't open configuration file %s"
105936 msgstr "Ne peut ouvrir le fichier de configuration %s"
105938 -#: elf/ldconfig.c:1012
105939 +#: elf/ldconfig.c:1024
105940 msgid "Can't chdir to /"
105941 msgstr "Ne peut se positionner (chdir) dans /"
105943 -#: elf/ldconfig.c:1054
105944 +#: elf/ldconfig.c:1066
105945 #, c-format
105946 msgid "Can't open cache file directory %s\n"
105947 msgstr "Ne peut ouvrir le fichier de la cache des répertoires %s\n"
105948 Binary files glibc-2.3.2/po/gl.mo and glibc-2.3.2-200304020432/po/gl.mo differ
105949 diff -u -udbrN glibc-2.3.2/po/gl.po glibc-2.3.2-200304020432/po/gl.po
105950 --- glibc-2.3.2/po/gl.po Sat Oct 5 20:15:44 2002
105951 +++ glibc-2.3.2-200304020432/po/gl.po Mon Mar 3 20:35:16 2003
105952 @@ -4,9 +4,9 @@
105954 msgid ""
105955 msgstr ""
105956 -"Project-Id-Version: libc 2.3\n"
105957 -"POT-Creation-Date: 2002-10-02 17:22-0700\n"
105958 -"PO-Revision-Date: 2002-10-05 15:13+0200\n"
105959 +"Project-Id-Version: libc 2.3.2\n"
105960 +"POT-Creation-Date: 2003-02-22 15:34-0800\n"
105961 +"PO-Revision-Date: 2003-03-03 20:13+0100\n"
105962 "Last-Translator: Jacobo Tarrio <jtarrio@trasno.net>\n"
105963 "Language-Team: Galician <gpul-traduccion@ceu.fi.udc.es>\n"
105964 "MIME-Version: 1.0\n"
105965 @@ -259,8 +259,8 @@
105967 #: iconv/iconv_prog.c:241
105968 #, c-format
105969 -msgid "conversions from `%s' and to `%s' are not supported"
105970 -msgstr "as conversións de `%s' a `%s' non están soportadas"
105971 +msgid "conversion from `%s' and to `%s' are not supported"
105972 +msgstr "as conversións de `%s' e a `%s' non están soportadas"
105974 #: iconv/iconv_prog.c:246
105975 #, c-format
105976 @@ -285,15 +285,15 @@
105977 msgid "error while closing output file"
105978 msgstr "erro ao pecha-lo ficheiro de saída"
105980 -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:355 locale/programs/locale.c:268
105981 +#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274
105982 #: locale/programs/localedef.c:372 catgets/gencat.c:233
105983 #: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
105984 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
105985 msgstr "Informe dos erros usando o script `glibcbug' a <bugs@gnu.org>.\n"
105987 -#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:369 locale/programs/locale.c:281
105988 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:904
105989 -#: nss/getent.c:74 nscd/nscd.c:279 nscd/nscd_nischeck.c:90 elf/ldconfig.c:259
105990 +#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287
105991 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910
105992 +#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271
105993 #: elf/sprof.c:349
105994 #, c-format
105995 msgid ""
105996 @@ -305,9 +305,9 @@
105997 "Isto é software libre; vexa o código fonte polas condicións de copia. NON hai\n"
105998 "garantía; nin sequera de COMERCIABILIDADE ou APTITUDE PARA UN FIN DETERMINADO.\n"
106000 -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:374 locale/programs/locale.c:286
106001 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:909
106002 -#: nss/getent.c:79 nscd/nscd.c:284 nscd/nscd_nischeck.c:95 elf/ldconfig.c:264
106003 +#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292
106004 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915
106005 +#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276
106006 #: elf/sprof.c:355
106007 #, c-format
106008 msgid "Written by %s.\n"
106009 @@ -359,15 +359,15 @@
106010 msgid "Prefix used for all file accesses"
106011 msgstr "Prefixo a empregar para tódolos accesos a ficheiro"
106013 -#: iconv/iconvconfig.c:325 locale/programs/localedef.c:292
106014 +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
106015 msgid "no output file produced because warning were issued"
106016 msgstr "non se producíu un ficheiro de saída porque se deron avisos"
106018 -#: iconv/iconvconfig.c:403
106019 +#: iconv/iconvconfig.c:405
106020 msgid "while inserting in search tree"
106021 msgstr "ao inserir na árbore de busca"
106023 -#: iconv/iconvconfig.c:1202
106024 +#: iconv/iconvconfig.c:1204
106025 msgid "cannot generate output file"
106026 msgstr "non se pode xera-lo ficheiro de saída"
106028 @@ -1277,7 +1277,7 @@
106029 msgid "unterminated symbolic name"
106030 msgstr "nome simbólico non rematado"
106032 -#: locale/programs/linereader.c:537 catgets/gencat.c:1166
106033 +#: locale/programs/linereader.c:537 catgets/gencat.c:1195
106034 msgid "invalid escape sequence"
106035 msgstr "secuencia de escape non válida"
106037 @@ -1307,39 +1307,39 @@
106038 msgid "trailing garbage at end of line"
106039 msgstr "lixo na fin da liña"
106041 -#: locale/programs/locale.c:73
106042 +#: locale/programs/locale.c:75
106043 msgid "System information:"
106044 msgstr "Información do sistema:"
106046 -#: locale/programs/locale.c:75
106047 +#: locale/programs/locale.c:77
106048 msgid "Write names of available locales"
106049 msgstr "Escribi-los nomes dos `locales' dispoñibles"
106051 -#: locale/programs/locale.c:77
106052 +#: locale/programs/locale.c:79
106053 msgid "Write names of available charmaps"
106054 msgstr "Escribi-los nomes dos mapas de caracteres dispoñibles"
106056 -#: locale/programs/locale.c:78
106057 +#: locale/programs/locale.c:80
106058 msgid "Modify output format:"
106059 msgstr "Modifica-lo formato de saída:"
106061 -#: locale/programs/locale.c:79
106062 +#: locale/programs/locale.c:81
106063 msgid "Write names of selected categories"
106064 msgstr "Escribi-los nomes das categorías seleccionadas"
106066 -#: locale/programs/locale.c:80
106067 +#: locale/programs/locale.c:82
106068 msgid "Write names of selected keywords"
106069 msgstr "Escribi-los nomes das claves seleccionadas"
106071 -#: locale/programs/locale.c:81
106072 +#: locale/programs/locale.c:83
106073 msgid "Print more information"
106074 msgstr "Amosar máis información"
106076 -#: locale/programs/locale.c:86
106077 +#: locale/programs/locale.c:88
106078 msgid "Get locale-specific information."
106079 msgstr "Obter información específica do `locale'."
106081 -#: locale/programs/locale.c:89
106082 +#: locale/programs/locale.c:91
106083 msgid ""
106084 "NAME\n"
106085 "[-a|-m]"
106086 @@ -1347,7 +1347,7 @@
106087 "NOME\n"
106088 "[-a|-m]"
106090 -#: locale/programs/locale.c:488
106091 +#: locale/programs/locale.c:512
106092 msgid "while preparing output"
106093 msgstr "ao prepara-la saída"
106095 @@ -1478,16 +1478,16 @@
106096 msgid "cannot create temporary file"
106097 msgstr "non se pode crea-lo ficheiro temporal"
106099 -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:302
106100 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
106101 msgid "cannot initialize archive file"
106102 msgstr "non se pode inicializa-lo ficheiro de arquivo"
106104 -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:309
106105 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
106106 msgid "cannot resize archive file"
106107 msgstr "non se pode cambia-lo tamaño do ficheiro de arquivo"
106109 -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:318
106110 -#: locale/programs/locarchive.c:508
106111 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
106112 +#: locale/programs/locarchive.c:511
106113 msgid "cannot map archive header"
106114 msgstr "non se pode mapea-la cabeceira do arquivo"
106116 @@ -1503,88 +1503,88 @@
106117 msgid "cannot map locale archive file"
106118 msgstr "non se pode mapea-lo ficheiro de arquivo de locales"
106120 -#: locale/programs/locarchive.c:326
106121 +#: locale/programs/locarchive.c:329
106122 msgid "cannot lock new archive"
106123 msgstr "non se pode bloquea-lo novo arquivo"
106125 -#: locale/programs/locarchive.c:377
106126 +#: locale/programs/locarchive.c:380
106127 msgid "cannot extend locale archive file"
106128 msgstr "non se pode extende-lo ficheiro de arquivo de locales"
106130 -#: locale/programs/locarchive.c:386
106131 +#: locale/programs/locarchive.c:389
106132 msgid "cannot change mode of resized locale archive"
106133 msgstr "non se pode cambia-lo modo do arquivo de locales co novo tamaño"
106135 -#: locale/programs/locarchive.c:394
106136 +#: locale/programs/locarchive.c:397
106137 msgid "cannot rename new archive"
106138 msgstr "non se pode renomea-lo novo arquivo"
106140 -#: locale/programs/locarchive.c:447
106141 +#: locale/programs/locarchive.c:450
106142 #, c-format
106143 msgid "cannot open locale archive \"%s\""
106144 msgstr "non se pode abri-lo arquivo de locales \"%s\""
106146 -#: locale/programs/locarchive.c:452
106147 +#: locale/programs/locarchive.c:455
106148 #, c-format
106149 msgid "cannot stat locale archive \"%s\""
106150 msgstr "non se pode facer stat do arquivo de locales \"%s\""
106152 -#: locale/programs/locarchive.c:471
106153 +#: locale/programs/locarchive.c:474
106154 #, c-format
106155 msgid "cannot lock locale archive \"%s\""
106156 msgstr "non se pode bloquea-lo arquivo de locales \"%s\""
106158 -#: locale/programs/locarchive.c:494
106159 +#: locale/programs/locarchive.c:497
106160 msgid "cannot read archive header"
106161 msgstr "non se pode le-la cabeceira do arquivo"
106163 -#: locale/programs/locarchive.c:554
106164 +#: locale/programs/locarchive.c:557
106165 #, c-format
106166 msgid "locale '%s' already exists"
106167 msgstr "o locale '%s' xa existe"
106169 -#: locale/programs/locarchive.c:784 locale/programs/locarchive.c:799
106170 -#: locale/programs/locarchive.c:811 locale/programs/locarchive.c:823
106171 +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
106172 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
106173 #: locale/programs/locfile.c:343
106174 msgid "cannot add to locale archive"
106175 msgstr "non se pode engadir no arquivo de locales"
106177 -#: locale/programs/locarchive.c:976
106178 +#: locale/programs/locarchive.c:982
106179 #, c-format
106180 msgid "locale alias file `%s' not found"
106181 msgstr "non se atopou o ficheiro de alias de locales `%s'"
106183 -#: locale/programs/locarchive.c:1118
106184 +#: locale/programs/locarchive.c:1126
106185 #, c-format
106186 msgid "Adding %s\n"
106187 msgstr "Engadindo %s\n"
106189 -#: locale/programs/locarchive.c:1124
106190 +#: locale/programs/locarchive.c:1132
106191 #, c-format
106192 msgid "stat of \"%s\" failed: %s: ignored"
106193 msgstr "a chamada a stat de \"%s\" fallou: %s: ignórase"
106195 -#: locale/programs/locarchive.c:1130
106196 +#: locale/programs/locarchive.c:1138
106197 #, c-format
106198 msgid "\"%s\" is no directory; ignored"
106199 msgstr "\"%s\" non é un directorio; ignórase"
106201 -#: locale/programs/locarchive.c:1137
106202 +#: locale/programs/locarchive.c:1145
106203 #, c-format
106204 msgid "cannot open directory \"%s\": %s: ignored"
106205 msgstr "non se pode abr-lo directorio \"%s\": %s: ignorado"
106207 -#: locale/programs/locarchive.c:1209
106208 +#: locale/programs/locarchive.c:1217
106209 #, c-format
106210 msgid "incomplete set of locale files in \"%s\""
106211 msgstr "conxunto de ficheiros de locale incompleto en \"%s\""
106213 -#: locale/programs/locarchive.c:1273
106214 +#: locale/programs/locarchive.c:1281
106215 #, c-format
106216 msgid "cannot read all files in \"%s\": ignored"
106217 msgstr "non se poden ler tódolos ficheiros de \"%s\": ignorado"
106219 -#: locale/programs/locarchive.c:1343
106220 +#: locale/programs/locarchive.c:1351
106221 #, c-format
106222 msgid "locale \"%s\" not in archive"
106223 msgstr "o locale \"%s\" non está no arquivo"
106224 @@ -1653,8 +1653,8 @@
106225 msgid "upper limit in range is not smaller then lower limit"
106226 msgstr "o límite superior do rango non é menor có límite inferior"
106228 -#: locale/programs/xmalloc.c:70 malloc/obstack.c:500 malloc/obstack.c:503
106229 -#: posix/getconf.c:996
106230 +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
106231 +#: posix/getconf.c:1002
106232 msgid "memory exhausted"
106233 msgstr "memoria esgotada"
106235 @@ -1680,7 +1680,7 @@
106236 msgid "Another string for testing."
106237 msgstr "Outra cadea para facer probas."
106239 -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:79
106240 +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84
106241 msgid "NAME"
106242 msgstr "NOME"
106244 @@ -1725,7 +1725,7 @@
106245 msgid "duplicate set definition"
106246 msgstr "definición de conxunto duplicada"
106248 -#: catgets/gencat.c:446 catgets/gencat.c:619 catgets/gencat.c:648
106249 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
106250 msgid "this is the first definition"
106251 msgstr "esta é a primeira definición"
106253 @@ -1743,44 +1743,44 @@
106254 msgid "unknown directive `%s': line ignored"
106255 msgstr "directiva `%s' descoñecida: liña ignorada"
106257 -#: catgets/gencat.c:617
106258 +#: catgets/gencat.c:621
106259 msgid "duplicated message number"
106260 msgstr "número de mensaxe duplicado"
106262 -#: catgets/gencat.c:645
106263 +#: catgets/gencat.c:674
106264 msgid "duplicated message identifier"
106265 msgstr "identificador de mensaxes duplicado"
106267 -#: catgets/gencat.c:702
106268 +#: catgets/gencat.c:731
106269 msgid "invalid character: message ignored"
106270 msgstr "carácter non válido: mensaxe ignorada"
106272 -#: catgets/gencat.c:745
106273 +#: catgets/gencat.c:774
106274 msgid "invalid line"
106275 msgstr "liña non válida"
106277 -#: catgets/gencat.c:799
106278 +#: catgets/gencat.c:828
106279 msgid "malformed line ignored"
106280 msgstr "ignórase unha liña mal formada"
106282 -#: catgets/gencat.c:963 catgets/gencat.c:1004
106283 +#: catgets/gencat.c:992 catgets/gencat.c:1033
106284 #, c-format
106285 msgid "cannot open output file `%s'"
106286 msgstr "non se pode abri-lo ficheiro de saída `%s'"
106288 -#: catgets/gencat.c:1188
106289 +#: catgets/gencat.c:1217
106290 msgid "unterminated message"
106291 msgstr "mensaxe non rematada"
106293 -#: catgets/gencat.c:1212
106294 +#: catgets/gencat.c:1241
106295 msgid "while opening old catalog file"
106296 msgstr "ao abrir un antigo ficheiro de catálogo"
106298 -#: catgets/gencat.c:1303
106299 +#: catgets/gencat.c:1332
106300 msgid "conversion modules not available"
106301 msgstr "os módulos de conversión non están dispoñibles"
106303 -#: catgets/gencat.c:1329
106304 +#: catgets/gencat.c:1358
106305 msgid "cannot determine escape character"
106306 msgstr "non se pode determina-lo carácter de escape"
106308 @@ -1788,7 +1788,7 @@
106309 msgid "makecontext: does not know how to handle more than 8 arguments\n"
106310 msgstr "makecontext: non se sabe como manexar máis de 8 argumentos\n"
106312 -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:178
106313 +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133
106314 #: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861
106315 msgid "Success"
106316 msgstr "Éxito"
106317 @@ -2977,23 +2977,23 @@
106318 msgid "%s%sUnknown signal %d\n"
106319 msgstr "%s%sSinal descoñecido %d\n"
106321 -#: malloc/mcheck.c:296
106322 +#: malloc/mcheck.c:346
106323 msgid "memory is consistent, library is buggy\n"
106324 msgstr "a memoria é consistente, a biblioteca ten erros\n"
106326 -#: malloc/mcheck.c:299
106327 +#: malloc/mcheck.c:349
106328 msgid "memory clobbered before allocated block\n"
106329 msgstr "memoria alterada antes do bloque reservado\n"
106331 -#: malloc/mcheck.c:302
106332 +#: malloc/mcheck.c:352
106333 msgid "memory clobbered past end of allocated block\n"
106334 msgstr "memoria alterada despois do bloque reservado\n"
106336 -#: malloc/mcheck.c:305
106337 +#: malloc/mcheck.c:355
106338 msgid "block freed twice\n"
106339 msgstr "bloque liberado dúas veces\n"
106341 -#: malloc/mcheck.c:308
106342 +#: malloc/mcheck.c:358
106343 msgid "bogus mcheck_status, library is buggy\n"
106344 msgstr "mcheck_status falso, a biblioteca ten erros\n"
106346 @@ -3029,6 +3029,10 @@
106347 msgid "DATAFILE [OUTFILE]"
106348 msgstr "FICHEIRO_DATOS [FICHEIRO_SAÍDA]"
106350 +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
106351 +msgid "Unknown error"
106352 +msgstr "Erro descoñecido"
106354 #: string/strsignal.c:69
106355 #, c-format
106356 msgid "Real-time signal %d"
106357 @@ -3053,7 +3057,7 @@
106358 msgid "%s: Memory exhausted: %s\n"
106359 msgstr "%s: Memoria esgotada: %s\n"
106361 -#: timezone/zic.c:390 misc/error.c:120
106362 +#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155
106363 msgid "Unknown system error"
106364 msgstr "Erro de sistema descoñecido"
106366 @@ -3446,25 +3450,21 @@
106367 msgid "Interrupted by a signal"
106368 msgstr "Interrompido por un sinal"
106370 -#: posix/../sysdeps/posix/gai_strerror.c:57
106371 -msgid "Unknown error"
106372 -msgstr "Erro descoñecido"
106374 -#: posix/getconf.c:883
106375 +#: posix/getconf.c:889
106376 #, c-format
106377 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
106378 msgstr "Uso: %s [-v especificación] nome_variable [nome]\n"
106380 -#: posix/getconf.c:941
106381 +#: posix/getconf.c:947
106382 #, c-format
106383 msgid "unknown specification \"%s\""
106384 msgstr "especificación `%s' descoñecida"
106386 -#: posix/getconf.c:968 posix/getconf.c:984
106387 +#: posix/getconf.c:974 posix/getconf.c:990
106388 msgid "undefined"
106389 msgstr "non definido"
106391 -#: posix/getconf.c:1006
106392 +#: posix/getconf.c:1012
106393 #, c-format
106394 msgid "Unrecognized variable `%s'"
106395 msgstr "Variable `%s' non recoñecida"
106396 @@ -3526,71 +3526,71 @@
106397 msgid "%s: option `-W %s' doesn't allow an argument\n"
106398 msgstr "%s: a opción `-W %s' non acepta parámetros\n"
106400 -#: posix/regcomp.c:181
106401 +#: posix/regcomp.c:136
106402 msgid "No match"
106403 msgstr "Nada coincide"
106405 -#: posix/regcomp.c:184
106406 +#: posix/regcomp.c:139
106407 msgid "Invalid regular expression"
106408 msgstr "Expresión regular incorrecta"
106410 -#: posix/regcomp.c:187
106411 +#: posix/regcomp.c:142
106412 msgid "Invalid collation character"
106413 msgstr "Carácter de ordenación incorrecto"
106415 -#: posix/regcomp.c:190
106416 +#: posix/regcomp.c:145
106417 msgid "Invalid character class name"
106418 msgstr "Nome da clase de caracteres incorrecto"
106420 -#: posix/regcomp.c:193
106421 +#: posix/regcomp.c:148
106422 msgid "Trailing backslash"
106423 msgstr "Barra invertida extra ó final"
106425 -#: posix/regcomp.c:196
106426 +#: posix/regcomp.c:151
106427 msgid "Invalid back reference"
106428 msgstr "Referencia cara a atrás incorrecta"
106430 -#: posix/regcomp.c:199
106431 +#: posix/regcomp.c:154
106432 msgid "Unmatched [ or [^"
106433 msgstr "[ ou [^ sen parella"
106435 -#: posix/regcomp.c:202
106436 +#: posix/regcomp.c:157
106437 msgid "Unmatched ( or \\("
106438 msgstr "( ou \\( sen parella"
106440 -#: posix/regcomp.c:205
106441 +#: posix/regcomp.c:160
106442 msgid "Unmatched \\{"
106443 msgstr "\\{ sen parella"
106445 -#: posix/regcomp.c:208
106446 +#: posix/regcomp.c:163
106447 msgid "Invalid content of \\{\\}"
106448 msgstr "Contido de \\{\\} incorrecto"
106450 -#: posix/regcomp.c:211
106451 +#: posix/regcomp.c:166
106452 msgid "Invalid range end"
106453 msgstr "Final do rango incorrecto"
106455 -#: posix/regcomp.c:214
106456 +#: posix/regcomp.c:169
106457 msgid "Memory exhausted"
106458 msgstr "Memoria esgotada"
106460 -#: posix/regcomp.c:217
106461 +#: posix/regcomp.c:172
106462 msgid "Invalid preceding regular expression"
106463 msgstr "Expresión regular precedente incorrecta"
106465 -#: posix/regcomp.c:220
106466 +#: posix/regcomp.c:175
106467 msgid "Premature end of regular expression"
106468 msgstr "Final prematura da expresión regular"
106470 -#: posix/regcomp.c:223
106471 +#: posix/regcomp.c:178
106472 msgid "Regular expression too big"
106473 msgstr "Expresión regular demasiado grande"
106475 -#: posix/regcomp.c:226
106476 +#: posix/regcomp.c:181
106477 msgid "Unmatched ) or \\)"
106478 msgstr ") ou \\) sen parella"
106480 -#: posix/regcomp.c:673
106481 +#: posix/regcomp.c:615
106482 msgid "No previous regular expression"
106483 msgstr "Non hai unha expresión regular precedente"
106485 @@ -3744,24 +3744,24 @@
106486 msgid "Service configuration to be used"
106487 msgstr "Configuración do servicio a empregar"
106489 -#: nss/getent.c:136 nss/getent.c:305
106490 +#: nss/getent.c:136 nss/getent.c:308
106491 #, c-format
106492 msgid "Enumeration not supported on %s\n"
106493 msgstr "A enumeración non está soportada en %s\n"
106495 -#: nss/getent.c:729
106496 +#: nss/getent.c:732
106497 msgid "getent - get entries from administrative database."
106498 msgstr "getent - obte-las entradas da base de datos administrativa."
106500 -#: nss/getent.c:730
106501 +#: nss/getent.c:733
106502 msgid "Supported databases:"
106503 msgstr "Bases de datos soportadas:"
106505 -#: nss/getent.c:787 nscd/nscd.c:119 nscd/nscd_nischeck.c:64
106506 +#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64
106507 msgid "wrong number of arguments"
106508 msgstr "número de parámetros incorrecto"
106510 -#: nss/getent.c:797
106511 +#: nss/getent.c:800
106512 #, c-format
106513 msgid "Unknown database: %s\n"
106514 msgstr "Base de datos descoñecida: %s\n"
106515 @@ -3790,68 +3790,72 @@
106516 msgid "invalid pointer size"
106517 msgstr "tamaño de punteiro non válido"
106519 -#: inet/rcmd.c:174 inet/rcmd.c:177
106520 +#: inet/rcmd.c:163 inet/rcmd.c:166
106521 +msgid "rcmd: Cannot allocate memory\n"
106522 +msgstr "rcmd: Non se pode reservar memoria\n"
106524 +#: inet/rcmd.c:185 inet/rcmd.c:188
106525 msgid "rcmd: socket: All ports in use\n"
106526 msgstr "rcmp: socket: Tódolos portos están sendo utilizados\n"
106528 -#: inet/rcmd.c:211
106529 +#: inet/rcmd.c:222
106530 #, c-format
106531 msgid "connect to address %s: "
106532 msgstr "conectarse ao enderezo %s: "
106534 -#: inet/rcmd.c:229
106535 +#: inet/rcmd.c:240
106536 #, c-format
106537 msgid "Trying %s...\n"
106538 msgstr "Probando %s...\n"
106540 -#: inet/rcmd.c:278
106541 +#: inet/rcmd.c:289
106542 #, c-format
106543 msgid "rcmd: write (setting up stderr): %m\n"
106544 msgstr "rcmd: write (configurando stderr): %m\n"
106546 -#: inet/rcmd.c:299
106547 +#: inet/rcmd.c:310
106548 #, c-format
106549 msgid "rcmd: poll (setting up stderr): %m\n"
106550 msgstr "rcmd: poll (configurando stderr): %m\n"
106552 -#: inet/rcmd.c:302
106553 +#: inet/rcmd.c:313
106554 msgid "poll: protocol failure in circuit setup\n"
106555 msgstr "poll: fallo de protocolo no establecemento do circuito\n"
106557 -#: inet/rcmd.c:346
106558 +#: inet/rcmd.c:358
106559 msgid "socket: protocol failure in circuit setup\n"
106560 msgstr "socket: fallo do protocolo no establecemento do circuito\n"
106562 -#: inet/rcmd.c:368
106563 +#: inet/rcmd.c:387
106564 #, c-format
106565 msgid "rcmd: %s: short read"
106566 msgstr "rcmd: %s: lectura curta"
106568 -#: inet/rcmd.c:524
106569 +#: inet/rcmd.c:549
106570 msgid "lstat failed"
106571 msgstr "fallou a chamada a lstat"
106573 -#: inet/rcmd.c:526
106574 +#: inet/rcmd.c:551
106575 msgid "not regular file"
106576 msgstr "non é un ficheiro normal"
106578 -#: inet/rcmd.c:531
106579 +#: inet/rcmd.c:556
106580 msgid "cannot open"
106581 msgstr "non se pode abrir"
106583 -#: inet/rcmd.c:533
106584 +#: inet/rcmd.c:558
106585 msgid "fstat failed"
106586 msgstr "fallou a chamada a fstat"
106588 -#: inet/rcmd.c:535
106589 +#: inet/rcmd.c:560
106590 msgid "bad owner"
106591 msgstr "propietario incorrecto"
106593 -#: inet/rcmd.c:537
106594 +#: inet/rcmd.c:562
106595 msgid "writeable by other than owner"
106596 msgstr "escribible por alguén distinto do propietario"
106598 -#: inet/rcmd.c:539
106599 +#: inet/rcmd.c:564
106600 msgid "hard linked somewhere"
106601 msgstr "ten un enlace duro nalgún sitio"
106603 @@ -4062,109 +4066,109 @@
106604 msgid "Cannot receive reply to broadcast"
106605 msgstr "Non se pode recibi-la resposta á multidifusión"
106607 -#: sunrpc/rpc_main.c:289
106608 +#: sunrpc/rpc_main.c:288
106609 #, c-format
106610 msgid "%s: output would overwrite %s\n"
106611 msgstr "%s: a saída sobreescribiría %s\n"
106613 -#: sunrpc/rpc_main.c:296
106614 +#: sunrpc/rpc_main.c:295
106615 #, c-format
106616 msgid "%s: unable to open %s: %m\n"
106617 msgstr "%s: non se pode abrir %s: %m\n"
106619 -#: sunrpc/rpc_main.c:308
106620 +#: sunrpc/rpc_main.c:307
106621 #, c-format
106622 msgid "%s: while writing output %s: %m"
106623 msgstr "%s: ao escribir á saída %s: %m"
106625 -#: sunrpc/rpc_main.c:343
106626 +#: sunrpc/rpc_main.c:342
106627 #, c-format
106628 msgid "cannot find C preprocessor: %s \n"
106629 msgstr "non podo atopa-lo preprocesador de C: %s \n"
106631 -#: sunrpc/rpc_main.c:351
106632 +#: sunrpc/rpc_main.c:350
106633 msgid "cannot find any C preprocessor (cpp)\n"
106634 msgstr "non podo atopar un preprocesador de C (cpp)\n"
106636 -#: sunrpc/rpc_main.c:420
106637 +#: sunrpc/rpc_main.c:419
106638 #, c-format
106639 msgid "%s: C preprocessor failed with signal %d\n"
106640 msgstr "%s: O preprocesador de C fallou co sinal %d\n"
106642 -#: sunrpc/rpc_main.c:423
106643 +#: sunrpc/rpc_main.c:422
106644 #, c-format
106645 msgid "%s: C preprocessor failed with exit code %d\n"
106646 msgstr "%s: O preprocesador de C fallou co código de saída %d\n"
106648 -#: sunrpc/rpc_main.c:463
106649 +#: sunrpc/rpc_main.c:462
106650 #, c-format
106651 msgid "illegal nettype :`%s'\n"
106652 msgstr "tipo de rede ilegal :`%s'\n"
106654 -#: sunrpc/rpc_main.c:1105
106655 +#: sunrpc/rpc_main.c:1104
106656 msgid "rpcgen: too many defines\n"
106657 msgstr "rpcgen: demasiadas definicións\n"
106659 -#: sunrpc/rpc_main.c:1117
106660 +#: sunrpc/rpc_main.c:1116
106661 msgid "rpcgen: arglist coding error\n"
106662 msgstr "rpcgen: erro de codificación da lista de parámetros\n"
106664 #. TRANS: the file will not be removed; this is an
106665 #. TRANS: informative message.
106666 -#: sunrpc/rpc_main.c:1150
106667 +#: sunrpc/rpc_main.c:1149
106668 #, c-format
106669 msgid "file `%s' already exists and may be overwritten\n"
106670 msgstr "o ficheiro `%s' xa existe e pode ser sobreescrito\n"
106672 -#: sunrpc/rpc_main.c:1195
106673 +#: sunrpc/rpc_main.c:1194
106674 msgid "Cannot specify more than one input file!\n"
106675 msgstr "¡Non se pode indicar máis dun ficheiro de entrada!\n"
106677 -#: sunrpc/rpc_main.c:1365
106678 +#: sunrpc/rpc_main.c:1364
106679 msgid "This implementation doesn't support newstyle or MT-safe code!\n"
106680 msgstr "¡Esta implementación non soporta código de novo estilo ou seguro para MT!\n"
106682 -#: sunrpc/rpc_main.c:1374
106683 +#: sunrpc/rpc_main.c:1373
106684 msgid "Cannot use netid flag with inetd flag!\n"
106685 msgstr "¡Non se pode utiliza-la opción netid coa opción inetd!\n"
106687 -#: sunrpc/rpc_main.c:1386
106688 +#: sunrpc/rpc_main.c:1385
106689 msgid "Cannot use netid flag without TIRPC!\n"
106690 msgstr "¡Non se pode utiliza-la opción netid sen TIRPC!\n"
106692 -#: sunrpc/rpc_main.c:1393
106693 +#: sunrpc/rpc_main.c:1392
106694 msgid "Cannot use table flags with newstyle!\n"
106695 msgstr "¡Non se poden utiliza-las opcións de táboa con newstyle!\n"
106697 -#: sunrpc/rpc_main.c:1412
106698 +#: sunrpc/rpc_main.c:1411
106699 msgid "\"infile\" is required for template generation flags.\n"
106700 msgstr "Precísase dun ficheiro de \"entrada\" para as opcións de xeración de patróns.\n"
106702 -#: sunrpc/rpc_main.c:1417
106703 +#: sunrpc/rpc_main.c:1416
106704 msgid "Cannot have more than one file generation flag!\n"
106705 msgstr "Non se pode ter máis dunha opción de xeración de ficheiros\n"
106707 -#: sunrpc/rpc_main.c:1426
106708 +#: sunrpc/rpc_main.c:1425
106709 #, c-format
106710 msgid "usage: %s infile\n"
106711 msgstr "uso: %s ficheiro-de-entrada\n"
106713 -#: sunrpc/rpc_main.c:1427
106714 +#: sunrpc/rpc_main.c:1426
106715 #, c-format
106716 msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
106717 msgstr "\t%s [-abkCLNTM][-Dnome[=valor]] [-i tamaño] [-I [-K segundos]] [-Y rota] entrada\n"
106719 -#: sunrpc/rpc_main.c:1429
106720 +#: sunrpc/rpc_main.c:1428
106721 #, c-format
106722 msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
106723 msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o saída] [entrada]\n"
106725 -#: sunrpc/rpc_main.c:1431
106726 +#: sunrpc/rpc_main.c:1430
106727 #, c-format
106728 msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
106729 msgstr "\t%s [-s tiporede]* [-o saída] [entrada]\n"
106731 -#: sunrpc/rpc_main.c:1432
106732 +#: sunrpc/rpc_main.c:1431
106733 #, c-format
106734 msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
106735 msgstr "\t%s [-n idrede]* [-o saída] [entrada]\n"
106736 @@ -5021,7 +5025,7 @@
106737 msgid "while allocating hash table entry"
106738 msgstr "ao reservar espacio para a entrada da táboa hash"
106740 -#: nscd/cache.c:150 nscd/connections.c:185
106741 +#: nscd/cache.c:150 nscd/connections.c:187
106742 #, c-format
106743 msgid "cannot stat() file `%s': %s"
106744 msgstr "non se pode facer stat() sobre o ficheiro `%s': %s"
106745 @@ -5034,153 +5038,158 @@
106746 msgid "Cannot run nscd in secure mode as unprivileged user"
106747 msgstr "Non se pode executar nscd en modo seguro coma usuario non privilexiado"
106749 -#: nscd/connections.c:199
106750 +#: nscd/connections.c:175
106751 +#, c-format
106752 +msgid "while allocating cache: %s"
106753 +msgstr "ao reservar espacio para a caché: %s"
106755 +#: nscd/connections.c:200
106756 #, c-format
106757 msgid "cannot open socket: %s"
106758 msgstr "non se pode abrir un socket: %s"
106760 -#: nscd/connections.c:217
106761 +#: nscd/connections.c:218
106762 #, c-format
106763 msgid "cannot enable socket to accept connections: %s"
106764 msgstr "non se pode facer que o socket acepte conexións: %s"
106766 -#: nscd/connections.c:259
106767 +#: nscd/connections.c:260
106768 #, c-format
106769 msgid "handle_request: request received (Version = %d)"
106770 msgstr "handle_request: petición recibida (Version = %d)"
106772 -#: nscd/connections.c:265
106773 +#: nscd/connections.c:266
106774 #, c-format
106775 msgid "cannot handle old request version %d; current version is %d"
106776 msgstr "non se pode manexa-la antiga petición versión %d; a versión actual é %d"
106778 -#: nscd/connections.c:303 nscd/connections.c:325
106779 +#: nscd/connections.c:304 nscd/connections.c:326
106780 #, c-format
106781 msgid "cannot write result: %s"
106782 msgstr "non se pode escribi-lo resultado: %s"
106784 -#: nscd/connections.c:404 nscd/connections.c:498
106785 +#: nscd/connections.c:405 nscd/connections.c:499
106786 #, c-format
106787 msgid "error getting callers id: %s"
106788 msgstr "erro ao obte-lo identificador do chamante: %s"
106790 -#: nscd/connections.c:470
106791 +#: nscd/connections.c:471
106792 #, c-format
106793 msgid "while accepting connection: %s"
106794 msgstr "ao aceptar unha conexión: %s"
106796 -#: nscd/connections.c:481
106797 +#: nscd/connections.c:482
106798 #, c-format
106799 msgid "short read while reading request: %s"
106800 msgstr "lectura demasiado curta ao le-la petición: %s"
106802 -#: nscd/connections.c:517
106803 +#: nscd/connections.c:518
106804 #, c-format
106805 msgid "key length in request too long: %d"
106806 msgstr "lonxitude da clave da petición demasiado grande: %d"
106808 -#: nscd/connections.c:531
106809 +#: nscd/connections.c:532
106810 #, c-format
106811 msgid "short read while reading request key: %s"
106812 msgstr "lectura demasiado curta ao le-la clave de petición: %s"
106814 -#: nscd/connections.c:590 nscd/connections.c:591 nscd/connections.c:610
106815 -#: nscd/connections.c:623 nscd/connections.c:629 nscd/connections.c:636
106816 +#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611
106817 +#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637
106818 #, c-format
106819 msgid "Failed to run nscd as user '%s'"
106820 msgstr "Non se puido executar nscd coma o usuario '%s'"
106822 -#: nscd/connections.c:611
106823 +#: nscd/connections.c:612
106824 msgid "getgrouplist failed"
106825 msgstr "fallou a chamada a getgrouplist"
106827 -#: nscd/connections.c:624
106828 +#: nscd/connections.c:625
106829 msgid "setgroups failed"
106830 msgstr "fallou a chamada a setgroups"
106832 -#: nscd/grpcache.c:102 nscd/hstcache.c:110 nscd/pwdcache.c:108
106833 +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
106834 msgid "while allocating key copy"
106835 msgstr "ao reservar espacio para a copia da clave"
106837 -#: nscd/grpcache.c:152 nscd/hstcache.c:167 nscd/pwdcache.c:145
106838 +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
106839 msgid "while allocating cache entry"
106840 msgstr "ao reservar espacio para a entrada de caché"
106842 -#: nscd/grpcache.c:195 nscd/hstcache.c:281 nscd/pwdcache.c:191
106843 +#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192
106844 #, c-format
106845 msgid "short write in %s: %s"
106846 msgstr "escritura demasiado curta en %s: %s"
106848 -#: nscd/grpcache.c:217
106849 +#: nscd/grpcache.c:218
106850 #, c-format
106851 msgid "Haven't found \"%s\" in group cache!"
106852 msgstr "¡Non atopei \"%s\" na caché de grupos!"
106854 -#: nscd/grpcache.c:292
106855 +#: nscd/grpcache.c:284
106856 #, c-format
106857 msgid "Invalid numeric gid \"%s\"!"
106858 msgstr "¡Identificación numérica de grupo \"%s\" non válida!"
106860 -#: nscd/grpcache.c:299
106861 +#: nscd/grpcache.c:291
106862 #, c-format
106863 msgid "Haven't found \"%d\" in group cache!"
106864 msgstr "¡Non atopei \"%d\" na caché de grupos!"
106866 -#: nscd/hstcache.c:303 nscd/hstcache.c:378 nscd/hstcache.c:456
106867 -#: nscd/hstcache.c:533
106868 +#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435
106869 +#: nscd/hstcache.c:500
106870 #, c-format
106871 msgid "Haven't found \"%s\" in hosts cache!"
106872 msgstr "¡Non atopei \"%s\" na caché de servidores!"
106874 -#: nscd/nscd.c:80
106875 +#: nscd/nscd.c:85
106876 msgid "Read configuration data from NAME"
106877 msgstr "Le-los datos de configuración de NOME"
106879 -#: nscd/nscd.c:82
106880 +#: nscd/nscd.c:87
106881 msgid "Do not fork and display messages on the current tty"
106882 msgstr "Non bifurcar e visualiza-las mensaxes no terminal actual"
106884 -#: nscd/nscd.c:83
106885 +#: nscd/nscd.c:88
106886 msgid "NUMBER"
106887 msgstr "NÚMERO"
106889 -#: nscd/nscd.c:83
106890 +#: nscd/nscd.c:88
106891 msgid "Start NUMBER threads"
106892 msgstr "Comezar NÚMERO fíos"
106894 -#: nscd/nscd.c:84
106895 +#: nscd/nscd.c:89
106896 msgid "Shut the server down"
106897 msgstr "Apaga-lo servidor"
106899 -#: nscd/nscd.c:85
106900 +#: nscd/nscd.c:90
106901 msgid "Print current configuration statistic"
106902 msgstr "Visualiza-la estatística da configuración actual"
106904 -#: nscd/nscd.c:86
106905 +#: nscd/nscd.c:91
106906 msgid "TABLE"
106907 msgstr "TÁBOA"
106909 -#: nscd/nscd.c:87
106910 +#: nscd/nscd.c:92
106911 msgid "Invalidate the specified cache"
106912 msgstr "Invalida-la caché especificada"
106914 -#: nscd/nscd.c:88
106915 +#: nscd/nscd.c:93
106916 msgid "TABLE,yes"
106917 msgstr "TÁBOA,si"
106919 -#: nscd/nscd.c:88
106920 +#: nscd/nscd.c:93
106921 msgid "Use separate cache for each user"
106922 msgstr "Usar unha caché separada para cada usuario"
106924 -#: nscd/nscd.c:93
106925 +#: nscd/nscd.c:98
106926 msgid "Name Service Cache Daemon."
106927 msgstr "Demo de Cache de Servicio de Nomes."
106929 -#: nscd/nscd.c:126
106930 +#: nscd/nscd.c:131
106931 msgid "already running"
106932 msgstr "xa en execución"
106934 -#: nscd/nscd.c:192 nscd/nscd.c:212 nscd/nscd.c:218
106935 +#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269
106936 msgid "Only root is allowed to use this option!"
106937 msgstr "¡Só root pode usar esa opción!"
106939 @@ -5270,22 +5279,22 @@
106940 "%15ld%% tasa de acertos de caché\n"
106941 "%15s comprobe /etc/%s para ve-los cambios\n"
106943 -#: nscd/pwdcache.c:213
106944 +#: nscd/pwdcache.c:214
106945 #, c-format
106946 msgid "Haven't found \"%s\" in password cache!"
106947 msgstr "¡Non atopei \"%s\" na caché de contrasinais!"
106949 -#: nscd/pwdcache.c:288
106950 +#: nscd/pwdcache.c:280
106951 #, c-format
106952 msgid "Invalid numeric uid \"%s\"!"
106953 msgstr "¡Identificación numérica de usuario \"%s\" non válida!"
106955 -#: nscd/pwdcache.c:295
106956 +#: nscd/pwdcache.c:287
106957 #, c-format
106958 msgid "Haven't found \"%d\" in password cache!"
106959 msgstr "¡Non atopei \"%d\" na caché de contrasinais!"
106961 -#: elf/../sysdeps/generic/dl-sysdep.c:297
106962 +#: elf/../sysdeps/generic/dl-sysdep.c:357
106963 msgid "cannot create capability list"
106964 msgstr "non se pode crea-la lista de capacidades"
106966 @@ -5336,7 +5345,7 @@
106967 msgid ", OS ABI: %s %d.%d.%d"
106968 msgstr ", OS ABI: %s %d.%d.%d"
106970 -#: elf/cache.c:136 elf/ldconfig.c:1033
106971 +#: elf/cache.c:136 elf/ldconfig.c:1045
106972 #, c-format
106973 msgid "Can't open cache file %s\n"
106974 msgstr "Non se puido abri-lo ficheiro de caché %s\n"
106975 @@ -5382,15 +5391,15 @@
106976 msgid "Renaming of %s to %s failed"
106977 msgstr "Fallou o renomeado de %s a %s"
106979 -#: elf/dl-close.c:113
106980 +#: elf/dl-close.c:128
106981 msgid "shared object not open"
106982 msgstr "o obxecto compartido non está aberto"
106984 -#: elf/dl-close.c:357 elf/dl-open.c:436
106985 +#: elf/dl-close.c:486 elf/dl-open.c:444
106986 msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
106987 msgstr "O xerador de TLS deu unha volta completa. Informe co script 'glibcbug'."
106989 -#: elf/dl-deps.c:111 elf/dl-open.c:177
106990 +#: elf/dl-deps.c:111 elf/dl-open.c:183
106991 msgid "DST not allowed in SUID/SGID programs"
106992 msgstr "Non se admite DST en programas SUID/SGID"
106994 @@ -5407,181 +5416,193 @@
106995 msgid "cannot allocate dependency list"
106996 msgstr "non se pode localiza-la lista de dependencias"
106998 -#: elf/dl-deps.c:492 elf/dl-deps.c:547
106999 +#: elf/dl-deps.c:494 elf/dl-deps.c:549
107000 msgid "cannot allocate symbol search list"
107001 msgstr "non se pode localiza-la lista de busca de símbolos"
107003 -#: elf/dl-deps.c:532
107004 +#: elf/dl-deps.c:534
107005 msgid "Filters not supported with LD_TRACE_PRELINKING"
107006 msgstr "Non se soportan os filtros con LD_TRACE_PRELINKING"
107008 -#: elf/dl-error.c:73
107009 +#: elf/dl-error.c:75
107010 msgid "DYNAMIC LINKER BUG!!!"
107011 msgstr "¡¡¡ERRO NO LIGADOR DINÁMICO!!!"
107013 -#: elf/dl-error.c:106
107014 +#: elf/dl-error.c:108
107015 msgid "error while loading shared libraries"
107016 msgstr "erro ao carga-las bibliotecas compartidas"
107018 -#: elf/dl-load.c:338
107019 +#: elf/dl-load.c:339
107020 msgid "cannot allocate name record"
107021 msgstr "non se pode localiza-lo rexistro de nome"
107023 -#: elf/dl-load.c:440 elf/dl-load.c:520 elf/dl-load.c:614 elf/dl-load.c:709
107024 +#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707
107025 msgid "cannot create cache for search path"
107026 msgstr "non se pode crea-la caché para a ruta de busca"
107028 -#: elf/dl-load.c:545
107029 +#: elf/dl-load.c:543
107030 msgid "cannot create RUNPATH/RPATH copy"
107031 msgstr "non se pode crear unha copia de RUNPATH/RPATH"
107033 -#: elf/dl-load.c:600
107034 +#: elf/dl-load.c:598
107035 msgid "cannot create search path array"
107036 msgstr "non se pode crea-lo vector de rutas de busca"
107038 -#: elf/dl-load.c:796
107039 +#: elf/dl-load.c:794
107040 msgid "cannot stat shared object"
107041 msgstr "non se puido facer stat sobre o obxecto compartido"
107043 -#: elf/dl-load.c:840
107044 +#: elf/dl-load.c:838
107045 msgid "cannot open zero fill device"
107046 msgstr "non se pode abrir un dispositivo de recheo de ceros"
107048 -#: elf/dl-load.c:849 elf/dl-load.c:1855
107049 +#: elf/dl-load.c:847 elf/dl-load.c:1902
107050 msgid "cannot create shared object descriptor"
107051 msgstr "non se pode crear un descriptor de obxecto compartido"
107053 -#: elf/dl-load.c:868 elf/dl-load.c:1351 elf/dl-load.c:1434
107054 +#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481
107055 msgid "cannot read file data"
107056 msgstr "non se pode le-los datos do ficheiro"
107058 -#: elf/dl-load.c:908
107059 +#: elf/dl-load.c:906
107060 msgid "ELF load command alignment not page-aligned"
107061 msgstr "O comando de carga ELF non está aliñado coa páxina"
107063 -#: elf/dl-load.c:915
107064 +#: elf/dl-load.c:913
107065 msgid "ELF load command address/offset not properly aligned"
107066 msgstr "O enderezo/desprazamento do comando de carga ELF non está ben aliñado"
107068 -#: elf/dl-load.c:996
107069 +#: elf/dl-load.c:988
107070 +msgid "cannot allocate TLS data structures for initial thread"
107071 +msgstr "non se poden crea-las estructuras de datos TLS para o fío inicial"
107073 +#: elf/dl-load.c:1012
107074 +msgid "cannot handle TLS data"
107075 +msgstr "non se poden manexa-los datos TLS"
107077 +#: elf/dl-load.c:1047
107078 msgid "failed to map segment from shared object"
107079 msgstr "non se puido mapear un segmento dun obxecto compartido"
107081 -#: elf/dl-load.c:1020
107082 +#: elf/dl-load.c:1071
107083 msgid "cannot dynamically load executable"
107084 msgstr "non se pode cargar dinamicamente o executable"
107086 -#: elf/dl-load.c:1081
107087 +#: elf/dl-load.c:1132
107088 msgid "cannot change memory protections"
107089 msgstr "non se poden cambia-las proteccións de memoria"
107091 -#: elf/dl-load.c:1100
107092 +#: elf/dl-load.c:1151
107093 msgid "cannot map zero-fill pages"
107094 msgstr "non se poden mapear páxinas de recheo de ceros"
107096 -#: elf/dl-load.c:1118
107097 +#: elf/dl-load.c:1169
107098 msgid "cannot allocate memory for program header"
107099 msgstr "Non se pode reservar memoria para a cabeceira do programa"
107101 -#: elf/dl-load.c:1149
107102 +#: elf/dl-load.c:1200
107103 msgid "object file has no dynamic section"
107104 msgstr "o ficheiro obxecto non ten unha sección dinámica"
107106 -#: elf/dl-load.c:1193
107107 +#: elf/dl-load.c:1240
107108 msgid "shared object cannot be dlopen()ed"
107109 msgstr "non se pode facer dlopen() sobre o obxecto compartido"
107111 -#: elf/dl-load.c:1216
107112 +#: elf/dl-load.c:1263
107113 msgid "cannot create searchlist"
107114 msgstr "non se pode crea-la lista de busca"
107116 -#: elf/dl-load.c:1351
107117 +#: elf/dl-load.c:1398
107118 msgid "file too short"
107119 msgstr "ficheiro pequeno de máis"
107121 -#: elf/dl-load.c:1374
107122 +#: elf/dl-load.c:1421
107123 msgid "invalid ELF header"
107124 msgstr "cabeceira ELF non válida"
107126 -#: elf/dl-load.c:1383
107127 +#: elf/dl-load.c:1430
107128 msgid "ELF file data encoding not big-endian"
107129 msgstr "A codificación dos datos do ficheiro ELF non é \"big-endian\""
107131 -#: elf/dl-load.c:1385
107132 +#: elf/dl-load.c:1432
107133 msgid "ELF file data encoding not little-endian"
107134 msgstr "A codificación dos datos do ficheiro ELF non é \"little-endian\""
107136 -#: elf/dl-load.c:1389
107137 +#: elf/dl-load.c:1436
107138 msgid "ELF file version ident does not match current one"
107139 msgstr "O identificador da versión do ficheiro ELF non coincide co actual"
107141 -#: elf/dl-load.c:1393
107142 +#: elf/dl-load.c:1440
107143 msgid "ELF file OS ABI invalid"
107144 msgstr "ABI do SO do ficheiro ELF non válida"
107146 -#: elf/dl-load.c:1395
107147 +#: elf/dl-load.c:1442
107148 msgid "ELF file ABI version invalid"
107149 msgstr "Versión do ABI do ficheiro ELF non válida"
107151 -#: elf/dl-load.c:1398
107152 +#: elf/dl-load.c:1445
107153 msgid "internal error"
107154 msgstr "erro interno"
107156 -#: elf/dl-load.c:1405
107157 +#: elf/dl-load.c:1452
107158 msgid "ELF file version does not match current one"
107159 msgstr "A versión do ficheiro ELF non coincide coa actual"
107161 -#: elf/dl-load.c:1413
107162 +#: elf/dl-load.c:1460
107163 msgid "ELF file's phentsize not the expected size"
107164 msgstr "O phentsize do ficheiro ELF non é o tamaño esperado"
107166 -#: elf/dl-load.c:1419
107167 +#: elf/dl-load.c:1466
107168 msgid "only ET_DYN and ET_EXEC can be loaded"
107169 msgstr "só se pode cargar ET_DYN e ET_EXEC"
107171 -#: elf/dl-load.c:1870
107172 +#: elf/dl-load.c:1917
107173 msgid "cannot open shared object file"
107174 msgstr "non se pode abrir un ficheiro de obxecto compartido"
107176 -#: elf/dl-lookup.c:248 elf/dl-lookup.c:413
107177 +#: elf/dl-lookup.c:265 elf/dl-lookup.c:430
107178 msgid "relocation error"
107179 msgstr "erro de cambio de reserva"
107181 -#: elf/dl-open.c:105
107182 +#: elf/dl-open.c:111
107183 msgid "cannot extend global scope"
107184 msgstr "non se pode extende-lo alcance global"
107186 -#: elf/dl-open.c:208
107187 +#: elf/dl-open.c:214
107188 msgid "empty dynamic string token substitution"
107189 msgstr "substitución de elementos da cadea dinámica baleira"
107191 -#: elf/dl-open.c:345 elf/dl-open.c:356
107192 +#: elf/dl-open.c:351 elf/dl-open.c:362
107193 msgid "cannot create scope list"
107194 msgstr "non se pode crea-la lista de alcance"
107196 -#: elf/dl-open.c:416
107197 +#: elf/dl-open.c:424
107198 msgid "cannot create TLS data structures"
107199 msgstr "non se poden crea-las estructuras de datos TLS"
107201 -#: elf/dl-open.c:478
107202 +#: elf/dl-open.c:486
107203 msgid "invalid mode for dlopen()"
107204 msgstr "modo incorrecto para dlopen()"
107206 -#: elf/dl-reloc.c:88
107207 +#: elf/dl-reloc.c:58
107208 +msgid "shared object cannot be dlopen()ed: static TLS memory too small"
107209 +msgstr "non se pode facer dlopen() sobre o obxecto compartido: a memoria TLS estática é pequena de máis"
107211 +#: elf/dl-reloc.c:118
107212 msgid "cannot make segment writable for relocation"
107213 msgstr "non se pode face-lo segmento gravable para o movemento"
107215 -#: elf/dl-reloc.c:174
107216 +#: elf/dl-reloc.c:219
107217 #, c-format
107218 msgid "%s: profiler found no PLTREL in object %s\n"
107219 msgstr "%s: o perfilador non atopou PLTREL no obxecto %s\n"
107221 -#: elf/dl-reloc.c:186
107222 +#: elf/dl-reloc.c:231
107223 #, c-format
107224 msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
107225 msgstr "%s: o perfilador esgotou a memoria sombreando o PLTREL de %s\n"
107227 -#: elf/dl-reloc.c:201
107228 +#: elf/dl-reloc.c:246
107229 msgid "cannot restore segment prot after reloc"
107230 msgstr "non se pode restaura-la protección do segmento despois de movelo"
107232 @@ -5637,119 +5658,119 @@
107233 msgid "Configure Dynamic Linker Run Time Bindings."
107234 msgstr "Configura-las Asignacións de Tempo de Execución do Ligador Dinámico"
107236 -#: elf/ldconfig.c:282
107237 +#: elf/ldconfig.c:294
107238 #, c-format
107239 msgid "Path `%s' given more than once"
107240 msgstr "Proporcionouse a ruta `%s' máis dunha vez"
107242 -#: elf/ldconfig.c:326
107243 +#: elf/ldconfig.c:338
107244 #, c-format
107245 msgid "%s is not a known library type"
107246 msgstr "%s non é un tipo de biblioteca coñecido"
107248 -#: elf/ldconfig.c:344
107249 +#: elf/ldconfig.c:356
107250 #, c-format
107251 msgid "Can't stat %s"
107252 msgstr "Non se puido executar `stat' sobre %s"
107254 -#: elf/ldconfig.c:414
107255 +#: elf/ldconfig.c:426
107256 #, c-format
107257 msgid "Can't stat %s\n"
107258 msgstr "Non se puido executar `stat' sobre %s\n"
107260 -#: elf/ldconfig.c:424
107261 +#: elf/ldconfig.c:436
107262 #, c-format
107263 msgid "%s is not a symbolic link\n"
107264 msgstr "%s non é unha ligazón simbólica\n"
107266 -#: elf/ldconfig.c:443
107267 +#: elf/ldconfig.c:455
107268 #, c-format
107269 msgid "Can't unlink %s"
107270 msgstr "Non se puido borrar %s"
107272 -#: elf/ldconfig.c:449
107273 +#: elf/ldconfig.c:461
107274 #, c-format
107275 msgid "Can't link %s to %s"
107276 msgstr "Non se puido ligar %s a %s"
107278 -#: elf/ldconfig.c:455
107279 +#: elf/ldconfig.c:467
107280 msgid " (changed)\n"
107281 msgstr " (cambiou)\n"
107283 -#: elf/ldconfig.c:457
107284 +#: elf/ldconfig.c:469
107285 msgid " (SKIPPED)\n"
107286 msgstr " (OMITIDO)\n"
107288 -#: elf/ldconfig.c:512
107289 +#: elf/ldconfig.c:524
107290 #, c-format
107291 msgid "Can't find %s"
107292 msgstr "Non se pode atopar %s"
107294 -#: elf/ldconfig.c:528
107295 +#: elf/ldconfig.c:540
107296 #, c-format
107297 msgid "Can't lstat %s"
107298 msgstr "Non se pode facer lstat sobre %s"
107300 -#: elf/ldconfig.c:535
107301 +#: elf/ldconfig.c:547
107302 #, c-format
107303 msgid "Ignored file %s since it is not a regular file."
107304 msgstr "Ignorouse o ficheiro %s porque non é un ficheiro normal"
107306 -#: elf/ldconfig.c:543
107307 +#: elf/ldconfig.c:555
107308 #, c-format
107309 msgid "No link created since soname could not be found for %s"
107310 msgstr "Non se creou unha ligazón porque non se atopou o soname para %s"
107312 -#: elf/ldconfig.c:634
107313 +#: elf/ldconfig.c:646
107314 #, c-format
107315 msgid "Can't open directory %s"
107316 msgstr "Non se puido abri-lo directorio %s"
107318 -#: elf/ldconfig.c:689 elf/ldconfig.c:736
107319 +#: elf/ldconfig.c:701 elf/ldconfig.c:748
107320 #, c-format
107321 msgid "Cannot lstat %s"
107322 msgstr "Non se pode facer lstat sobre %s"
107324 -#: elf/ldconfig.c:701
107325 +#: elf/ldconfig.c:713
107326 #, c-format
107327 msgid "Cannot stat %s"
107328 msgstr "Non se pode executar `stat' sobre %s"
107330 -#: elf/ldconfig.c:758 elf/readlib.c:93
107331 +#: elf/ldconfig.c:770 elf/readlib.c:93
107332 #, c-format
107333 msgid "Input file %s not found.\n"
107334 msgstr "Non se atopou o ficheiro de entrada %s.\n"
107336 -#: elf/ldconfig.c:792
107337 +#: elf/ldconfig.c:804
107338 #, c-format
107339 msgid "libc5 library %s in wrong directory"
107340 msgstr "biblioteca libc5 %s nun directorio incorrecto"
107342 -#: elf/ldconfig.c:795
107343 +#: elf/ldconfig.c:807
107344 #, c-format
107345 msgid "libc6 library %s in wrong directory"
107346 msgstr "biblioteca libc6 %s nun directorio incorrecto"
107348 -#: elf/ldconfig.c:798
107349 +#: elf/ldconfig.c:810
107350 #, c-format
107351 msgid "libc4 library %s in wrong directory"
107352 msgstr "biblioteca libc4 %s nun directorio incorrecto"
107354 -#: elf/ldconfig.c:825
107355 +#: elf/ldconfig.c:837
107356 #, c-format
107357 msgid "libraries %s and %s in directory %s have same soname but different type."
107358 msgstr "as bibliotecas %s e %s do directorio %s teñen o mesmo soname pero diferente tipo."
107360 -#: elf/ldconfig.c:928
107361 +#: elf/ldconfig.c:940
107362 #, c-format
107363 msgid "Can't open configuration file %s"
107364 msgstr "Non se puido abri-lo ficheiro de configuración %s"
107366 -#: elf/ldconfig.c:1012
107367 +#: elf/ldconfig.c:1024
107368 msgid "Can't chdir to /"
107369 msgstr "Non se pode cambiar ao directorio /"
107371 -#: elf/ldconfig.c:1054
107372 +#: elf/ldconfig.c:1066
107373 #, c-format
107374 msgid "Can't open cache file directory %s\n"
107375 msgstr "Non se puido abri-lo directorio de ficheiros caché %s\n"
107376 Binary files glibc-2.3.2/po/hr.mo and glibc-2.3.2-200304020432/po/hr.mo differ
107377 Binary files glibc-2.3.2/po/hu.mo and glibc-2.3.2-200304020432/po/hu.mo differ
107378 Binary files glibc-2.3.2/po/it.mo and glibc-2.3.2-200304020432/po/it.mo differ
107379 Binary files glibc-2.3.2/po/ja.mo and glibc-2.3.2-200304020432/po/ja.mo differ
107380 Binary files glibc-2.3.2/po/ko.mo and glibc-2.3.2-200304020432/po/ko.mo differ
107381 Binary files glibc-2.3.2/po/nl.mo and glibc-2.3.2-200304020432/po/nl.mo differ
107382 Binary files glibc-2.3.2/po/no.mo and glibc-2.3.2-200304020432/po/no.mo differ
107383 Binary files glibc-2.3.2/po/pl.mo and glibc-2.3.2-200304020432/po/pl.mo differ
107384 Binary files glibc-2.3.2/po/pt_BR.mo and glibc-2.3.2-200304020432/po/pt_BR.mo differ
107385 Binary files glibc-2.3.2/po/sk.mo and glibc-2.3.2-200304020432/po/sk.mo differ
107386 diff -u -udbrN glibc-2.3.2/po/sk.po glibc-2.3.2-200304020432/po/sk.po
107387 --- glibc-2.3.2/po/sk.po Mon Oct 14 10:29:01 2002
107388 +++ glibc-2.3.2-200304020432/po/sk.po Mon Mar 3 19:12:34 2003
107389 @@ -1,13 +1,13 @@
107390 # Slovak translation of the GNU-libc-messages.
107391 -# Copyright (C) 1998-2001, 2002 Free Software Foundation, Inc.
107392 -# Marcel Telka <marcel@telka.sk>, 2002.
107393 +# Copyright (C) 1998-2001, 2002, 2003 Free Software Foundation, Inc.
107394 +# Marcel Telka <marcel@telka.sk>, 2002, 2003.
107395 # Stanislav Meduna <stano@meduna.org>, 1998-2001.
107397 msgid ""
107398 msgstr ""
107399 -"Project-Id-Version: libc 2.3.1\n"
107400 -"POT-Creation-Date: 2002-10-02 17:22-0700\n"
107401 -"PO-Revision-Date: 2002-10-14 09:46+0200\n"
107402 +"Project-Id-Version: libc 2.3.2\n"
107403 +"POT-Creation-Date: 2003-02-22 15:34-0800\n"
107404 +"PO-Revision-Date: 2003-03-03 08:31+0200\n"
107405 "Last-Translator: Marcel Telka <marcel@telka.sk>\n"
107406 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
107407 "MIME-Version: 1.0\n"
107408 @@ -260,7 +260,7 @@
107410 #: iconv/iconv_prog.c:241
107411 #, c-format
107412 -msgid "conversions from `%s' and to `%s' are not supported"
107413 +msgid "conversion from `%s' and to `%s' are not supported"
107414 msgstr "konverzie z `%s' a do `%s' nie sú podporované"
107416 #: iconv/iconv_prog.c:246
107417 @@ -286,15 +286,15 @@
107418 msgid "error while closing output file"
107419 msgstr "chyba počas zatvárania výstupného súboru"
107421 -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:355 locale/programs/locale.c:268
107422 +#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274
107423 #: locale/programs/localedef.c:372 catgets/gencat.c:233
107424 #: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
107425 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
107426 msgstr "Chyby hláste na adrese <bugs@gnu.org> - použite skript `glibcbug'.\n"
107428 -#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:369 locale/programs/locale.c:281
107429 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:904
107430 -#: nss/getent.c:74 nscd/nscd.c:279 nscd/nscd_nischeck.c:90 elf/ldconfig.c:259
107431 +#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287
107432 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910
107433 +#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271
107434 #: elf/sprof.c:349
107435 #, c-format
107436 msgid ""
107437 @@ -302,14 +302,14 @@
107438 "This is free software; see the source for copying conditions. There is NO\n"
107439 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
107440 msgstr ""
107441 -"Autorské práva (C) %s Free Software Foundation, Inc.\n"
107442 +"Autorské práva © %s Free Software Foundation, Inc.\n"
107443 "Toto je voľne šíriteľný softvér; pre podmienky kopírovania pozri zdrojový kód.\n"
107444 "Neposkytuje sa ŽIADNA záruka; ani čo sa týka OBCHODOVATEĽNOSTI alebo VHODNOSTI\n"
107445 "NA KONKRÉTNY ÚČEL.\n"
107447 -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:374 locale/programs/locale.c:286
107448 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:909
107449 -#: nss/getent.c:79 nscd/nscd.c:284 nscd/nscd_nischeck.c:95 elf/ldconfig.c:264
107450 +#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292
107451 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915
107452 +#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276
107453 #: elf/sprof.c:355
107454 #, c-format
107455 msgid "Written by %s.\n"
107456 @@ -360,15 +360,15 @@
107457 msgid "Prefix used for all file accesses"
107458 msgstr "Predpona použitá pre všetky prístupy k súborom"
107460 -#: iconv/iconvconfig.c:325 locale/programs/localedef.c:292
107461 +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
107462 msgid "no output file produced because warning were issued"
107463 msgstr "výstupný súbor nebol vytvorený kvôli výskytu varovaní"
107465 -#: iconv/iconvconfig.c:403
107466 +#: iconv/iconvconfig.c:405
107467 msgid "while inserting in search tree"
107468 msgstr "počas vkladania do vyhľadávacieho stromu"
107470 -#: iconv/iconvconfig.c:1202
107471 +#: iconv/iconvconfig.c:1204
107472 msgid "cannot generate output file"
107473 msgstr "nie je možné vygenerovať výstupný súbor"
107475 @@ -1278,7 +1278,7 @@
107476 msgid "unterminated symbolic name"
107477 msgstr "neukončené symbolické meno"
107479 -#: locale/programs/linereader.c:537 catgets/gencat.c:1166
107480 +#: locale/programs/linereader.c:537 catgets/gencat.c:1195
107481 msgid "invalid escape sequence"
107482 msgstr "neprípustná escape-sekvencia"
107484 @@ -1308,39 +1308,39 @@
107485 msgid "trailing garbage at end of line"
107486 msgstr "smetie na konci riadku"
107488 -#: locale/programs/locale.c:73
107489 +#: locale/programs/locale.c:75
107490 msgid "System information:"
107491 msgstr "Systémové informácie:"
107493 -#: locale/programs/locale.c:75
107494 +#: locale/programs/locale.c:77
107495 msgid "Write names of available locales"
107496 msgstr "Vypísať názvy dostupných národných prostredí"
107498 -#: locale/programs/locale.c:77
107499 +#: locale/programs/locale.c:79
107500 msgid "Write names of available charmaps"
107501 msgstr "Vypísať názvy dostupných znakových sád"
107503 -#: locale/programs/locale.c:78
107504 +#: locale/programs/locale.c:80
107505 msgid "Modify output format:"
107506 msgstr "Modifikovať výstupný formát:"
107508 -#: locale/programs/locale.c:79
107509 +#: locale/programs/locale.c:81
107510 msgid "Write names of selected categories"
107511 msgstr "Vypísať názvy vybraných kategórií"
107513 -#: locale/programs/locale.c:80
107514 +#: locale/programs/locale.c:82
107515 msgid "Write names of selected keywords"
107516 msgstr "Vypísať názvy vybraných kľúčových slov"
107518 -#: locale/programs/locale.c:81
107519 +#: locale/programs/locale.c:83
107520 msgid "Print more information"
107521 msgstr "Vypisovať viac informácií"
107523 -#: locale/programs/locale.c:86
107524 +#: locale/programs/locale.c:88
107525 msgid "Get locale-specific information."
107526 msgstr "Získať informáciu špecifickú pre národné prostredie."
107528 -#: locale/programs/locale.c:89
107529 +#: locale/programs/locale.c:91
107530 msgid ""
107531 "NAME\n"
107532 "[-a|-m]"
107533 @@ -1348,7 +1348,7 @@
107534 "NÁZOV\n"
107535 "[-a|-m]"
107537 -#: locale/programs/locale.c:488
107538 +#: locale/programs/locale.c:512
107539 msgid "while preparing output"
107540 msgstr "počas prípravy výstupu"
107542 @@ -1479,16 +1479,16 @@
107543 msgid "cannot create temporary file"
107544 msgstr "nie je možné vytvoriť dočasný súbor"
107546 -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:302
107547 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
107548 msgid "cannot initialize archive file"
107549 msgstr "nie je možné inicializovať archívny súbor"
107551 -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:309
107552 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
107553 msgid "cannot resize archive file"
107554 msgstr "nie je možné zmeniť veľkosť archívneho súboru"
107556 -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:318
107557 -#: locale/programs/locarchive.c:508
107558 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
107559 +#: locale/programs/locarchive.c:511
107560 msgid "cannot map archive header"
107561 msgstr "nie je možné namapovať hlavičku archívu"
107563 @@ -1504,88 +1504,88 @@
107564 msgid "cannot map locale archive file"
107565 msgstr "nie je možné namapovať súbor archívu národného prostredia"
107567 -#: locale/programs/locarchive.c:326
107568 +#: locale/programs/locarchive.c:329
107569 msgid "cannot lock new archive"
107570 msgstr "nie je možné uzamknúť nový archív"
107572 -#: locale/programs/locarchive.c:377
107573 +#: locale/programs/locarchive.c:380
107574 msgid "cannot extend locale archive file"
107575 msgstr "nie je možné rozšíriť súbor archívu národného prostredia"
107577 -#: locale/programs/locarchive.c:386
107578 +#: locale/programs/locarchive.c:389
107579 msgid "cannot change mode of resized locale archive"
107580 msgstr "nie je možné zmeniť mód archívu národného prostredia s upravenou veľkosťou"
107582 -#: locale/programs/locarchive.c:394
107583 +#: locale/programs/locarchive.c:397
107584 msgid "cannot rename new archive"
107585 msgstr "nie je možné premenovať nový archív"
107587 -#: locale/programs/locarchive.c:447
107588 +#: locale/programs/locarchive.c:450
107589 #, c-format
107590 msgid "cannot open locale archive \"%s\""
107591 msgstr "nie je možné otvoriť archív národného prostredia \"%s\""
107593 -#: locale/programs/locarchive.c:452
107594 +#: locale/programs/locarchive.c:455
107595 #, c-format
107596 msgid "cannot stat locale archive \"%s\""
107597 msgstr "nie je možné zistiť stav archívu národného prostredia \"%s\""
107599 -#: locale/programs/locarchive.c:471
107600 +#: locale/programs/locarchive.c:474
107601 #, c-format
107602 msgid "cannot lock locale archive \"%s\""
107603 msgstr "nie je možné uzamknúť archív národného prostredia \"%s\""
107605 -#: locale/programs/locarchive.c:494
107606 +#: locale/programs/locarchive.c:497
107607 msgid "cannot read archive header"
107608 msgstr "nie je možné prečítať hlavičku archívu"
107610 -#: locale/programs/locarchive.c:554
107611 +#: locale/programs/locarchive.c:557
107612 #, c-format
107613 msgid "locale '%s' already exists"
107614 msgstr "národné prostredie `%s' už existuje"
107616 -#: locale/programs/locarchive.c:784 locale/programs/locarchive.c:799
107617 -#: locale/programs/locarchive.c:811 locale/programs/locarchive.c:823
107618 +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
107619 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
107620 #: locale/programs/locfile.c:343
107621 msgid "cannot add to locale archive"
107622 msgstr "nie je možné pridať do archívu národného prostredia"
107624 -#: locale/programs/locarchive.c:976
107625 +#: locale/programs/locarchive.c:982
107626 #, c-format
107627 msgid "locale alias file `%s' not found"
107628 msgstr "súbor aliasu národného prostredia `%s' nebol nájdený"
107630 -#: locale/programs/locarchive.c:1118
107631 +#: locale/programs/locarchive.c:1126
107632 #, c-format
107633 msgid "Adding %s\n"
107634 msgstr "Pridávam %s\n"
107636 -#: locale/programs/locarchive.c:1124
107637 +#: locale/programs/locarchive.c:1132
107638 #, c-format
107639 msgid "stat of \"%s\" failed: %s: ignored"
107640 msgstr "zistenie stavu \"%s\" zlyhalo: %s: ignorované"
107642 -#: locale/programs/locarchive.c:1130
107643 +#: locale/programs/locarchive.c:1138
107644 #, c-format
107645 msgid "\"%s\" is no directory; ignored"
107646 msgstr "\"%s\" nie je adresár; ignorované"
107648 -#: locale/programs/locarchive.c:1137
107649 +#: locale/programs/locarchive.c:1145
107650 #, c-format
107651 msgid "cannot open directory \"%s\": %s: ignored"
107652 msgstr "nie je možné otvoriť adresár \"%s\": %s: ignorované"
107654 -#: locale/programs/locarchive.c:1209
107655 +#: locale/programs/locarchive.c:1217
107656 #, c-format
107657 msgid "incomplete set of locale files in \"%s\""
107658 msgstr "nekompletná skupina súborov národných prostredí v \"%s\""
107660 -#: locale/programs/locarchive.c:1273
107661 +#: locale/programs/locarchive.c:1281
107662 #, c-format
107663 msgid "cannot read all files in \"%s\": ignored"
107664 msgstr "nie je možné načítať všetky súbory v \"%s\": ignorované"
107666 -#: locale/programs/locarchive.c:1343
107667 +#: locale/programs/locarchive.c:1351
107668 #, c-format
107669 msgid "locale \"%s\" not in archive"
107670 msgstr "národné prostredie \"%s\" nie je v archíve"
107671 @@ -1654,8 +1654,8 @@
107672 msgid "upper limit in range is not smaller then lower limit"
107673 msgstr "horný limit rozsahu je menší ako dolný"
107675 -#: locale/programs/xmalloc.c:70 malloc/obstack.c:500 malloc/obstack.c:503
107676 -#: posix/getconf.c:996
107677 +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
107678 +#: posix/getconf.c:1002
107679 msgid "memory exhausted"
107680 msgstr "nedostatok pamäti"
107682 @@ -1681,7 +1681,7 @@
107683 msgid "Another string for testing."
107684 msgstr "Iný reťazec pre testovanie."
107686 -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:79
107687 +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84
107688 msgid "NAME"
107689 msgstr "NÁZOV"
107691 @@ -1725,7 +1725,7 @@
107692 msgid "duplicate set definition"
107693 msgstr "duplicitná definícia sady"
107695 -#: catgets/gencat.c:446 catgets/gencat.c:619 catgets/gencat.c:648
107696 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
107697 msgid "this is the first definition"
107698 msgstr "toto je prvá definícia"
107700 @@ -1743,44 +1743,44 @@
107701 msgid "unknown directive `%s': line ignored"
107702 msgstr "neznáma direktíva `%s' - riadok ignorovaný"
107704 -#: catgets/gencat.c:617
107705 +#: catgets/gencat.c:621
107706 msgid "duplicated message number"
107707 msgstr "duplicitné číslo správy"
107709 -#: catgets/gencat.c:645
107710 +#: catgets/gencat.c:674
107711 msgid "duplicated message identifier"
107712 msgstr "duplicitný identifikátor správy"
107714 -#: catgets/gencat.c:702
107715 +#: catgets/gencat.c:731
107716 msgid "invalid character: message ignored"
107717 msgstr "neprípustný znak: správa ignorovaná"
107719 -#: catgets/gencat.c:745
107720 +#: catgets/gencat.c:774
107721 msgid "invalid line"
107722 msgstr "neprípustný riadok"
107724 -#: catgets/gencat.c:799
107725 +#: catgets/gencat.c:828
107726 msgid "malformed line ignored"
107727 msgstr "nesprávny riadok ignorovaný"
107729 -#: catgets/gencat.c:963 catgets/gencat.c:1004
107730 +#: catgets/gencat.c:992 catgets/gencat.c:1033
107731 #, c-format
107732 msgid "cannot open output file `%s'"
107733 msgstr "nie je možné otvoriť výstupný súbor `%s'"
107735 -#: catgets/gencat.c:1188
107736 +#: catgets/gencat.c:1217
107737 msgid "unterminated message"
107738 msgstr "neukončená správa"
107740 -#: catgets/gencat.c:1212
107741 +#: catgets/gencat.c:1241
107742 msgid "while opening old catalog file"
107743 msgstr "počas otvárania starého katalógu"
107745 -#: catgets/gencat.c:1303
107746 +#: catgets/gencat.c:1332
107747 msgid "conversion modules not available"
107748 msgstr "moduly konverzie nie sú dostupné"
107750 -#: catgets/gencat.c:1329
107751 +#: catgets/gencat.c:1358
107752 msgid "cannot determine escape character"
107753 msgstr "nie je možné určiť znak escape"
107755 @@ -1788,7 +1788,7 @@
107756 msgid "makecontext: does not know how to handle more than 8 arguments\n"
107757 msgstr "makecontext: nevie ako má spracovať viac ako 8 argumentov\n"
107759 -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:178
107760 +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133
107761 #: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861
107762 msgid "Success"
107763 msgstr "Úspech"
107764 @@ -2977,23 +2977,23 @@
107765 msgid "%s%sUnknown signal %d\n"
107766 msgstr "%s%sNeznámy signál %d\n"
107768 -#: malloc/mcheck.c:296
107769 +#: malloc/mcheck.c:346
107770 msgid "memory is consistent, library is buggy\n"
107771 msgstr "pamäť je konzistentná, knižnica je chybná\n"
107773 -#: malloc/mcheck.c:299
107774 +#: malloc/mcheck.c:349
107775 msgid "memory clobbered before allocated block\n"
107776 msgstr "pamäť pred prideleným blokom prepísaná\n"
107778 -#: malloc/mcheck.c:302
107779 +#: malloc/mcheck.c:352
107780 msgid "memory clobbered past end of allocated block\n"
107781 msgstr "pamäť za koncom prideleného bloku prepísaná\n"
107783 -#: malloc/mcheck.c:305
107784 +#: malloc/mcheck.c:355
107785 msgid "block freed twice\n"
107786 msgstr "blok uvoľnený dvakrát\n"
107788 -#: malloc/mcheck.c:308
107789 +#: malloc/mcheck.c:358
107790 msgid "bogus mcheck_status, library is buggy\n"
107791 msgstr "pochybný mcheck_status, knižnica má chyby\n"
107793 @@ -3029,6 +3029,10 @@
107794 msgid "DATAFILE [OUTFILE]"
107795 msgstr "DÁTOVÝ_SÚBOR [VÝSTUPNÝ_SÚBOR]"
107797 +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
107798 +msgid "Unknown error"
107799 +msgstr "Neznáma chyba"
107801 #: string/strsignal.c:69
107802 #, c-format
107803 msgid "Real-time signal %d"
107804 @@ -3053,7 +3057,7 @@
107805 msgid "%s: Memory exhausted: %s\n"
107806 msgstr "%s: Nedostatok pamäti: %s\n"
107808 -#: timezone/zic.c:390 misc/error.c:120
107809 +#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155
107810 msgid "Unknown system error"
107811 msgstr "Neznáma chyba systému"
107813 @@ -3446,25 +3450,21 @@
107814 msgid "Interrupted by a signal"
107815 msgstr "Prerušené signálom"
107817 -#: posix/../sysdeps/posix/gai_strerror.c:57
107818 -msgid "Unknown error"
107819 -msgstr "Neznáma chyba"
107821 -#: posix/getconf.c:883
107822 +#: posix/getconf.c:889
107823 #, c-format
107824 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
107825 msgstr "Použitie: %s [-v špecifikácia] meno_premennej [cesta]\n"
107827 -#: posix/getconf.c:941
107828 +#: posix/getconf.c:947
107829 #, c-format
107830 msgid "unknown specification \"%s\""
107831 msgstr "neznáma špecifikácia \"%s\""
107833 -#: posix/getconf.c:968 posix/getconf.c:984
107834 +#: posix/getconf.c:974 posix/getconf.c:990
107835 msgid "undefined"
107836 msgstr "nedefinované"
107838 -#: posix/getconf.c:1006
107839 +#: posix/getconf.c:1012
107840 #, c-format
107841 msgid "Unrecognized variable `%s'"
107842 msgstr "Nerozpoznaná premenná `%s'"
107843 @@ -3526,71 +3526,71 @@
107844 msgid "%s: option `-W %s' doesn't allow an argument\n"
107845 msgstr "%s: voľba `-W %s' nedovoľuje pouťiť argument\n"
107847 -#: posix/regcomp.c:181
107848 +#: posix/regcomp.c:136
107849 msgid "No match"
107850 msgstr "Žiadna zhoda"
107852 -#: posix/regcomp.c:184
107853 +#: posix/regcomp.c:139
107854 msgid "Invalid regular expression"
107855 msgstr "Neprípustný regulérny výraz"
107857 -#: posix/regcomp.c:187
107858 +#: posix/regcomp.c:142
107859 msgid "Invalid collation character"
107860 msgstr "Neprípustný znak triedenia"
107862 -#: posix/regcomp.c:190
107863 +#: posix/regcomp.c:145
107864 msgid "Invalid character class name"
107865 msgstr "Neprípustný názov triedy znakov"
107867 -#: posix/regcomp.c:193
107868 +#: posix/regcomp.c:148
107869 msgid "Trailing backslash"
107870 msgstr "Koncové spätné lomítko"
107872 -#: posix/regcomp.c:196
107873 +#: posix/regcomp.c:151
107874 msgid "Invalid back reference"
107875 msgstr "Neprípustný spätný odkaz"
107877 -#: posix/regcomp.c:199
107878 +#: posix/regcomp.c:154
107879 msgid "Unmatched [ or [^"
107880 msgstr "Nepárová [ or [^"
107882 -#: posix/regcomp.c:202
107883 +#: posix/regcomp.c:157
107884 msgid "Unmatched ( or \\("
107885 msgstr "Nepárová ( or \\("
107887 -#: posix/regcomp.c:205
107888 +#: posix/regcomp.c:160
107889 msgid "Unmatched \\{"
107890 msgstr "Nepárová \\{"
107892 -#: posix/regcomp.c:208
107893 +#: posix/regcomp.c:163
107894 msgid "Invalid content of \\{\\}"
107895 msgstr "Neprípustný obsah \\{\\}"
107897 -#: posix/regcomp.c:211
107898 +#: posix/regcomp.c:166
107899 msgid "Invalid range end"
107900 msgstr "Neprípustný koniec rozsahu"
107902 -#: posix/regcomp.c:214
107903 +#: posix/regcomp.c:169
107904 msgid "Memory exhausted"
107905 msgstr "Pamäť vyčerpaná"
107907 -#: posix/regcomp.c:217
107908 +#: posix/regcomp.c:172
107909 msgid "Invalid preceding regular expression"
107910 msgstr "Neprípustný predchádzajúci regulérny výraz"
107912 -#: posix/regcomp.c:220
107913 +#: posix/regcomp.c:175
107914 msgid "Premature end of regular expression"
107915 msgstr "Predčasný koniec regulérneho výrazu"
107917 -#: posix/regcomp.c:223
107918 +#: posix/regcomp.c:178
107919 msgid "Regular expression too big"
107920 msgstr "Regulérny výraz príliš veľký"
107922 -#: posix/regcomp.c:226
107923 +#: posix/regcomp.c:181
107924 msgid "Unmatched ) or \\)"
107925 msgstr "Nepárová ) or \\)"
107927 -#: posix/regcomp.c:673
107928 +#: posix/regcomp.c:615
107929 msgid "No previous regular expression"
107930 msgstr "Žiadny predchádzajúci regulérny výraz"
107932 @@ -3744,24 +3744,24 @@
107933 msgid "Service configuration to be used"
107934 msgstr "Konfigurácia služby, ktorá má byť použitá"
107936 -#: nss/getent.c:136 nss/getent.c:305
107937 +#: nss/getent.c:136 nss/getent.c:308
107938 #, c-format
107939 msgid "Enumeration not supported on %s\n"
107940 msgstr "Enumerácia %s nie je podporované\n"
107942 -#: nss/getent.c:729
107943 +#: nss/getent.c:732
107944 msgid "getent - get entries from administrative database."
107945 msgstr "getent - získať záznamy z administratívnej databázy."
107947 -#: nss/getent.c:730
107948 +#: nss/getent.c:733
107949 msgid "Supported databases:"
107950 msgstr "Podporované databázy:"
107952 -#: nss/getent.c:787 nscd/nscd.c:119 nscd/nscd_nischeck.c:64
107953 +#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64
107954 msgid "wrong number of arguments"
107955 msgstr "chybný počet argumentov"
107957 -#: nss/getent.c:797
107958 +#: nss/getent.c:800
107959 #, c-format
107960 msgid "Unknown database: %s\n"
107961 msgstr "Neznáma databáza %s\n"
107962 @@ -3790,68 +3790,72 @@
107963 msgid "invalid pointer size"
107964 msgstr "neprípustná veľkostť ukazovateľa"
107966 -#: inet/rcmd.c:174 inet/rcmd.c:177
107967 +#: inet/rcmd.c:163 inet/rcmd.c:166
107968 +msgid "rcmd: Cannot allocate memory\n"
107969 +msgstr "rcmd: Nie je možné prideliť pamäť\n"
107971 +#: inet/rcmd.c:185 inet/rcmd.c:188
107972 msgid "rcmd: socket: All ports in use\n"
107973 msgstr "rcmd: socket: Všetky porty sú použité\n"
107975 -#: inet/rcmd.c:211
107976 +#: inet/rcmd.c:222
107977 #, c-format
107978 msgid "connect to address %s: "
107979 msgstr "spojiť sa s adresou %s: "
107981 -#: inet/rcmd.c:229
107982 +#: inet/rcmd.c:240
107983 #, c-format
107984 msgid "Trying %s...\n"
107985 msgstr "Skúšam %s...\n"
107987 -#: inet/rcmd.c:278
107988 +#: inet/rcmd.c:289
107989 #, c-format
107990 msgid "rcmd: write (setting up stderr): %m\n"
107991 msgstr "rcmd: write (nastavenie stderr): %m\n"
107993 -#: inet/rcmd.c:299
107994 +#: inet/rcmd.c:310
107995 #, c-format
107996 msgid "rcmd: poll (setting up stderr): %m\n"
107997 msgstr "rcmd: poll (nastavenie stderr): %m\n"
107999 -#: inet/rcmd.c:302
108000 +#: inet/rcmd.c:313
108001 msgid "poll: protocol failure in circuit setup\n"
108002 msgstr "poll: chyba protokolu počas prípravy okruhu\n"
108004 -#: inet/rcmd.c:346
108005 +#: inet/rcmd.c:358
108006 msgid "socket: protocol failure in circuit setup\n"
108007 msgstr "socket: chyba protokolu pri príprave okruhu\n"
108009 -#: inet/rcmd.c:368
108010 +#: inet/rcmd.c:387
108011 #, c-format
108012 msgid "rcmd: %s: short read"
108013 msgstr "rcmd: %s: krátke čítanie"
108015 -#: inet/rcmd.c:524
108016 +#: inet/rcmd.c:549
108017 msgid "lstat failed"
108018 msgstr "lstat zlyhal"
108020 -#: inet/rcmd.c:526
108021 +#: inet/rcmd.c:551
108022 msgid "not regular file"
108023 msgstr "nie je regulérny súbor"
108025 -#: inet/rcmd.c:531
108026 +#: inet/rcmd.c:556
108027 msgid "cannot open"
108028 msgstr "nie je možné otvoriť"
108030 -#: inet/rcmd.c:533
108031 +#: inet/rcmd.c:558
108032 msgid "fstat failed"
108033 msgstr "fstat sa nepodaril"
108035 -#: inet/rcmd.c:535
108036 +#: inet/rcmd.c:560
108037 msgid "bad owner"
108038 msgstr "chybný vlastník"
108040 -#: inet/rcmd.c:537
108041 +#: inet/rcmd.c:562
108042 msgid "writeable by other than owner"
108043 msgstr "zapisovateľný nielen pre vlastníka"
108045 -#: inet/rcmd.c:539
108046 +#: inet/rcmd.c:564
108047 msgid "hard linked somewhere"
108048 msgstr "niekde existuje pevný odkaz"
108050 @@ -4062,109 +4066,109 @@
108051 msgid "Cannot receive reply to broadcast"
108052 msgstr "Nie je možné prijať odpoveď na broadcast"
108054 -#: sunrpc/rpc_main.c:289
108055 +#: sunrpc/rpc_main.c:288
108056 #, c-format
108057 msgid "%s: output would overwrite %s\n"
108058 msgstr "%s: výstup by prepísal %s\n"
108060 -#: sunrpc/rpc_main.c:296
108061 +#: sunrpc/rpc_main.c:295
108062 #, c-format
108063 msgid "%s: unable to open %s: %m\n"
108064 msgstr "%s: nie je možné otvoriť %s: %m\n"
108066 -#: sunrpc/rpc_main.c:308
108067 +#: sunrpc/rpc_main.c:307
108068 #, c-format
108069 msgid "%s: while writing output %s: %m"
108070 msgstr "%s: počas zápisu výstupu %s: %m"
108072 -#: sunrpc/rpc_main.c:343
108073 +#: sunrpc/rpc_main.c:342
108074 #, c-format
108075 msgid "cannot find C preprocessor: %s \n"
108076 msgstr "nie je možné nájsť preprocesor: %s \n"
108078 -#: sunrpc/rpc_main.c:351
108079 +#: sunrpc/rpc_main.c:350
108080 msgid "cannot find any C preprocessor (cpp)\n"
108081 msgstr "nie je možné nájsť žiadny C preprocesor (cpp)\n"
108083 -#: sunrpc/rpc_main.c:420
108084 +#: sunrpc/rpc_main.c:419
108085 #, c-format
108086 msgid "%s: C preprocessor failed with signal %d\n"
108087 msgstr "%s: C preprocesor zlyhal so signálom %d\n"
108089 -#: sunrpc/rpc_main.c:423
108090 +#: sunrpc/rpc_main.c:422
108091 #, c-format
108092 msgid "%s: C preprocessor failed with exit code %d\n"
108093 msgstr "%s: C preprocesor zlyhal s výstupným kódom %d\n"
108095 -#: sunrpc/rpc_main.c:463
108096 +#: sunrpc/rpc_main.c:462
108097 #, c-format
108098 msgid "illegal nettype :`%s'\n"
108099 msgstr "chybný nettype :`%s'\n"
108101 -#: sunrpc/rpc_main.c:1105
108102 +#: sunrpc/rpc_main.c:1104
108103 msgid "rpcgen: too many defines\n"
108104 msgstr "rpcgen: priveľa defines\n"
108106 -#: sunrpc/rpc_main.c:1117
108107 +#: sunrpc/rpc_main.c:1116
108108 msgid "rpcgen: arglist coding error\n"
108109 msgstr "rpcgen: chyba kódovania zoznamu argumentov\n"
108111 #. TRANS: the file will not be removed; this is an
108112 #. TRANS: informative message.
108113 -#: sunrpc/rpc_main.c:1150
108114 +#: sunrpc/rpc_main.c:1149
108115 #, c-format
108116 msgid "file `%s' already exists and may be overwritten\n"
108117 msgstr "súbor `%s' už existuje a môže byť prepísaný\n"
108119 -#: sunrpc/rpc_main.c:1195
108120 +#: sunrpc/rpc_main.c:1194
108121 msgid "Cannot specify more than one input file!\n"
108122 msgstr "Nie je možné zadať viac ako jeden vstupný súbor!\n"
108124 -#: sunrpc/rpc_main.c:1365
108125 +#: sunrpc/rpc_main.c:1364
108126 msgid "This implementation doesn't support newstyle or MT-safe code!\n"
108127 msgstr "Táto implementácia nepodporuje nový štýl alebo MT-bezpečný kód!\n"
108129 -#: sunrpc/rpc_main.c:1374
108130 +#: sunrpc/rpc_main.c:1373
108131 msgid "Cannot use netid flag with inetd flag!\n"
108132 msgstr "Príznaky netid a inetd nie je možné použiť súčasne!\n"
108134 -#: sunrpc/rpc_main.c:1386
108135 +#: sunrpc/rpc_main.c:1385
108136 msgid "Cannot use netid flag without TIRPC!\n"
108137 msgstr "Nie je možné použiť príznak netid bez TIRPC!\n"
108139 -#: sunrpc/rpc_main.c:1393
108140 +#: sunrpc/rpc_main.c:1392
108141 msgid "Cannot use table flags with newstyle!\n"
108142 msgstr "Pri použití nového štýlu nie je možné použiť príznaky tabuľky!\n"
108144 -#: sunrpc/rpc_main.c:1412
108145 +#: sunrpc/rpc_main.c:1411
108146 msgid "\"infile\" is required for template generation flags.\n"
108147 msgstr "\"vst_súbor\" je vyžadovaný pri použití príznakov tvorby vzoru.\n"
108149 -#: sunrpc/rpc_main.c:1417
108150 +#: sunrpc/rpc_main.c:1416
108151 msgid "Cannot have more than one file generation flag!\n"
108152 msgstr "Nie je možné použiť viac ako jeden príznak tvorby súboru!\n"
108154 -#: sunrpc/rpc_main.c:1426
108155 +#: sunrpc/rpc_main.c:1425
108156 #, c-format
108157 msgid "usage: %s infile\n"
108158 msgstr "použitie: %s vstupný_súbor\n"
108160 -#: sunrpc/rpc_main.c:1427
108161 +#: sunrpc/rpc_main.c:1426
108162 #, c-format
108163 msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
108164 msgstr "\t%s [-abkCLNTM][-Dnázov[=hodnota]] [-i veľkosť] [-I [-K sekundy]] [-Y cesta] vst_súbor\n"
108166 -#: sunrpc/rpc_main.c:1429
108167 +#: sunrpc/rpc_main.c:1428
108168 #, c-format
108169 msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
108170 msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o výst_súbor] [vst_súbor]\n"
108172 -#: sunrpc/rpc_main.c:1431
108173 +#: sunrpc/rpc_main.c:1430
108174 #, c-format
108175 msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
108176 msgstr "\t%s [-s nettype]* [-o výst_súbor] [vst_súbor]\n"
108178 -#: sunrpc/rpc_main.c:1432
108179 +#: sunrpc/rpc_main.c:1431
108180 #, c-format
108181 msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
108182 msgstr "\t%s [-n netid]* [-o výst_súbor] [vst_súbor]\n"
108183 @@ -5027,7 +5031,7 @@
108184 msgid "while allocating hash table entry"
108185 msgstr "počas pridelenia záznamu hash-tabuľky"
108187 -#: nscd/cache.c:150 nscd/connections.c:185
108188 +#: nscd/cache.c:150 nscd/connections.c:187
108189 #, c-format
108190 msgid "cannot stat() file `%s': %s"
108191 msgstr "nie je možné vykonať stat() súboru `%s': %s"
108192 @@ -5040,153 +5044,158 @@
108193 msgid "Cannot run nscd in secure mode as unprivileged user"
108194 msgstr "Nie je možné spustiť nscd v bezpečnom režime ako neprivilegovaný používateľ"
108196 -#: nscd/connections.c:199
108197 +#: nscd/connections.c:175
108198 +#, c-format
108199 +msgid "while allocating cache: %s"
108200 +msgstr "počas pridelenia cache: %s"
108202 +#: nscd/connections.c:200
108203 #, c-format
108204 msgid "cannot open socket: %s"
108205 msgstr "nie je možné otvoriť socket `%s'"
108207 -#: nscd/connections.c:217
108208 +#: nscd/connections.c:218
108209 #, c-format
108210 msgid "cannot enable socket to accept connections: %s"
108211 msgstr "nie je možné povoliť socketu prijímať spojenia: %s"
108213 -#: nscd/connections.c:259
108214 +#: nscd/connections.c:260
108215 #, c-format
108216 msgid "handle_request: request received (Version = %d)"
108217 msgstr "handle_request: žiadosť prijatá (verzia = %d)"
108219 -#: nscd/connections.c:265
108220 +#: nscd/connections.c:266
108221 #, c-format
108222 msgid "cannot handle old request version %d; current version is %d"
108223 msgstr "nie je možné spracovať starú verziu žiadosti %d; aktuálna verzia je %d"
108225 -#: nscd/connections.c:303 nscd/connections.c:325
108226 +#: nscd/connections.c:304 nscd/connections.c:326
108227 #, c-format
108228 msgid "cannot write result: %s"
108229 msgstr "nie je možné zapísať výsledok: %s"
108231 -#: nscd/connections.c:404 nscd/connections.c:498
108232 +#: nscd/connections.c:405 nscd/connections.c:499
108233 #, c-format
108234 msgid "error getting callers id: %s"
108235 msgstr "chyba pri získaní id volajúceho: %s"
108237 -#: nscd/connections.c:470
108238 +#: nscd/connections.c:471
108239 #, c-format
108240 msgid "while accepting connection: %s"
108241 msgstr "počas prijatia spojenia: %s"
108243 -#: nscd/connections.c:481
108244 +#: nscd/connections.c:482
108245 #, c-format
108246 msgid "short read while reading request: %s"
108247 msgstr "neúplné čítanie žiadosti: `%s'"
108249 -#: nscd/connections.c:517
108250 +#: nscd/connections.c:518
108251 #, c-format
108252 msgid "key length in request too long: %d"
108253 msgstr "dĺžka kľúča v žiadosti príliš dlhá: %d"
108255 -#: nscd/connections.c:531
108256 +#: nscd/connections.c:532
108257 #, c-format
108258 msgid "short read while reading request key: %s"
108259 msgstr "neúplné čítanie kľúča žiadosti: %s"
108261 -#: nscd/connections.c:590 nscd/connections.c:591 nscd/connections.c:610
108262 -#: nscd/connections.c:623 nscd/connections.c:629 nscd/connections.c:636
108263 +#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611
108264 +#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637
108265 #, c-format
108266 msgid "Failed to run nscd as user '%s'"
108267 msgstr "Zlyhalo spustenie nscd ako používateľ '%s'"
108269 -#: nscd/connections.c:611
108270 +#: nscd/connections.c:612
108271 msgid "getgrouplist failed"
108272 msgstr "getgrouplist zlyhalo"
108274 -#: nscd/connections.c:624
108275 +#: nscd/connections.c:625
108276 msgid "setgroups failed"
108277 msgstr "setgroups zlyhalo"
108279 -#: nscd/grpcache.c:102 nscd/hstcache.c:110 nscd/pwdcache.c:108
108280 +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
108281 msgid "while allocating key copy"
108282 msgstr "počas pridelenia kópie kľúča"
108284 -#: nscd/grpcache.c:152 nscd/hstcache.c:167 nscd/pwdcache.c:145
108285 +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
108286 msgid "while allocating cache entry"
108287 msgstr "počas pridelenia záznamu cache"
108289 -#: nscd/grpcache.c:195 nscd/hstcache.c:281 nscd/pwdcache.c:191
108290 +#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192
108291 #, c-format
108292 msgid "short write in %s: %s"
108293 msgstr "neúplný zápis v %s: %s"
108295 -#: nscd/grpcache.c:217
108296 +#: nscd/grpcache.c:218
108297 #, c-format
108298 msgid "Haven't found \"%s\" in group cache!"
108299 msgstr "Nenájdené \"%s\" v cache skupín!"
108301 -#: nscd/grpcache.c:292
108302 +#: nscd/grpcache.c:284
108303 #, c-format
108304 msgid "Invalid numeric gid \"%s\"!"
108305 msgstr "Neplatné číselné gid \"%s\"!"
108307 -#: nscd/grpcache.c:299
108308 +#: nscd/grpcache.c:291
108309 #, c-format
108310 msgid "Haven't found \"%d\" in group cache!"
108311 msgstr "Nenájdené \"%d\" v cache skupín!"
108313 -#: nscd/hstcache.c:303 nscd/hstcache.c:378 nscd/hstcache.c:456
108314 -#: nscd/hstcache.c:533
108315 +#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435
108316 +#: nscd/hstcache.c:500
108317 #, c-format
108318 msgid "Haven't found \"%s\" in hosts cache!"
108319 msgstr "Nenájdené \"%s\" v cache počítačov!"
108321 -#: nscd/nscd.c:80
108322 +#: nscd/nscd.c:85
108323 msgid "Read configuration data from NAME"
108324 msgstr "Načítať údaje o konfigurácii z NÁZOV"
108326 -#: nscd/nscd.c:82
108327 +#: nscd/nscd.c:87
108328 msgid "Do not fork and display messages on the current tty"
108329 msgstr "Nespúšťať samostatný proces a zobrazovať správy na aktuálnom termináli"
108331 -#: nscd/nscd.c:83
108332 +#: nscd/nscd.c:88
108333 msgid "NUMBER"
108334 msgstr "POČET"
108336 -#: nscd/nscd.c:83
108337 +#: nscd/nscd.c:88
108338 msgid "Start NUMBER threads"
108339 msgstr "Spustiť POČET vlákien"
108341 -#: nscd/nscd.c:84
108342 +#: nscd/nscd.c:89
108343 msgid "Shut the server down"
108344 msgstr "Zastaviť server"
108346 -#: nscd/nscd.c:85
108347 +#: nscd/nscd.c:90
108348 msgid "Print current configuration statistic"
108349 msgstr "Vypísať štatistiku aktuálnej konfigurácie"
108351 -#: nscd/nscd.c:86
108352 +#: nscd/nscd.c:91
108353 msgid "TABLE"
108354 msgstr "TABUĽKA"
108356 -#: nscd/nscd.c:87
108357 +#: nscd/nscd.c:92
108358 msgid "Invalidate the specified cache"
108359 msgstr "Zneplatniť zadanú cache"
108361 -#: nscd/nscd.c:88
108362 +#: nscd/nscd.c:93
108363 msgid "TABLE,yes"
108364 msgstr "TABUĽKA,áno"
108366 -#: nscd/nscd.c:88
108367 +#: nscd/nscd.c:93
108368 msgid "Use separate cache for each user"
108369 msgstr "Použiť samostatnú cache pre každého používateľa"
108371 -#: nscd/nscd.c:93
108372 +#: nscd/nscd.c:98
108373 msgid "Name Service Cache Daemon."
108374 msgstr "Démon cache služby názvov."
108376 -#: nscd/nscd.c:126
108377 +#: nscd/nscd.c:131
108378 msgid "already running"
108379 msgstr "už beží"
108381 -#: nscd/nscd.c:192 nscd/nscd.c:212 nscd/nscd.c:218
108382 +#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269
108383 msgid "Only root is allowed to use this option!"
108384 msgstr "Táto voľba je dostupná iba superužívateľovi!"
108386 @@ -5276,22 +5285,22 @@
108387 "%15ld%% úspešnosť cache\n"
108388 "%15s skontrolujte /etc/%s na zmeny\n"
108390 -#: nscd/pwdcache.c:213
108391 +#: nscd/pwdcache.c:214
108392 #, c-format
108393 msgid "Haven't found \"%s\" in password cache!"
108394 msgstr "Nenájdené \"%s\" v cache hesiel!"
108396 -#: nscd/pwdcache.c:288
108397 +#: nscd/pwdcache.c:280
108398 #, c-format
108399 msgid "Invalid numeric uid \"%s\"!"
108400 msgstr "Neplatné číselné uid \"%s\"!"
108402 -#: nscd/pwdcache.c:295
108403 +#: nscd/pwdcache.c:287
108404 #, c-format
108405 msgid "Haven't found \"%d\" in password cache!"
108406 msgstr "Nenájdené \"%d\" v cache hesiel!"
108408 -#: elf/../sysdeps/generic/dl-sysdep.c:297
108409 +#: elf/../sysdeps/generic/dl-sysdep.c:357
108410 msgid "cannot create capability list"
108411 msgstr "nie je možné vytvoriť zoznam zlučiteľnosti"
108413 @@ -5342,7 +5351,7 @@
108414 msgid ", OS ABI: %s %d.%d.%d"
108415 msgstr ", OS ABI: %s %d.%d.%d"
108417 -#: elf/cache.c:136 elf/ldconfig.c:1033
108418 +#: elf/cache.c:136 elf/ldconfig.c:1045
108419 #, c-format
108420 msgid "Can't open cache file %s\n"
108421 msgstr "Nie je možné otvoriť cache súbor %s\n"
108422 @@ -5388,15 +5397,15 @@
108423 msgid "Renaming of %s to %s failed"
108424 msgstr "Premenovanie %s na %s zlyhalo"
108426 -#: elf/dl-close.c:113
108427 +#: elf/dl-close.c:128
108428 msgid "shared object not open"
108429 msgstr "zdieľaný objekt nie je otvorený"
108431 -#: elf/dl-close.c:357 elf/dl-open.c:436
108432 +#: elf/dl-close.c:486 elf/dl-open.c:444
108433 msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
108434 msgstr "Počítadlo generovania TLS pretieklo! Prosím pošlite správu pomocou skriptu 'glibcbug'."
108436 -#: elf/dl-deps.c:111 elf/dl-open.c:177
108437 +#: elf/dl-deps.c:111 elf/dl-open.c:183
108438 msgid "DST not allowed in SUID/SGID programs"
108439 msgstr "DST nie je pre SUID/SGID programy povolené"
108441 @@ -5413,181 +5422,193 @@
108442 msgid "cannot allocate dependency list"
108443 msgstr "nie je možné prideliť pamäť pre zoznam závislostí"
108445 -#: elf/dl-deps.c:492 elf/dl-deps.c:547
108446 +#: elf/dl-deps.c:494 elf/dl-deps.c:549
108447 msgid "cannot allocate symbol search list"
108448 msgstr "nie je možné prideliť pamäť pre vyhľadávací zoznam symbolov"
108450 -#: elf/dl-deps.c:532
108451 +#: elf/dl-deps.c:534
108452 msgid "Filters not supported with LD_TRACE_PRELINKING"
108453 msgstr "Filtre nie sú podporované s LD_TRACE_PRELINKING"
108455 -#: elf/dl-error.c:73
108456 +#: elf/dl-error.c:75
108457 msgid "DYNAMIC LINKER BUG!!!"
108458 msgstr "CHYBA V DYNAMICKOM LINKERI!!!"
108460 -#: elf/dl-error.c:106
108461 +#: elf/dl-error.c:108
108462 msgid "error while loading shared libraries"
108463 msgstr "chyba počas načítavania zdieľaných knižníc"
108465 -#: elf/dl-load.c:338
108466 +#: elf/dl-load.c:339
108467 msgid "cannot allocate name record"
108468 msgstr "nie je možné prideliť pamäť pre záznam názvu"
108470 -#: elf/dl-load.c:440 elf/dl-load.c:520 elf/dl-load.c:614 elf/dl-load.c:709
108471 +#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707
108472 msgid "cannot create cache for search path"
108473 msgstr "Nie je možné vytvoriť cache pre hľadanie v ceste"
108475 -#: elf/dl-load.c:545
108476 +#: elf/dl-load.c:543
108477 msgid "cannot create RUNPATH/RPATH copy"
108478 msgstr "nie je možné vytvoriť kópiu RUNPATH/RPATH"
108480 -#: elf/dl-load.c:600
108481 +#: elf/dl-load.c:598
108482 msgid "cannot create search path array"
108483 msgstr "nie je možné vytvoriť pole ciest"
108485 -#: elf/dl-load.c:796
108486 +#: elf/dl-load.c:794
108487 msgid "cannot stat shared object"
108488 msgstr "nepodarilo sa zistiť stav zdieľaného objektu"
108490 -#: elf/dl-load.c:840
108491 +#: elf/dl-load.c:838
108492 msgid "cannot open zero fill device"
108493 msgstr "nie je možné otvoriť zariadenie pre naplnenie nulami"
108495 -#: elf/dl-load.c:849 elf/dl-load.c:1855
108496 +#: elf/dl-load.c:847 elf/dl-load.c:1902
108497 msgid "cannot create shared object descriptor"
108498 msgstr "nie je možné vytvoriť deskriptor zdieľaného objektu"
108500 -#: elf/dl-load.c:868 elf/dl-load.c:1351 elf/dl-load.c:1434
108501 +#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481
108502 msgid "cannot read file data"
108503 msgstr "nie je možné načítať údaje súboru"
108505 -#: elf/dl-load.c:908
108506 +#: elf/dl-load.c:906
108507 msgid "ELF load command alignment not page-aligned"
108508 msgstr "ELF zarovnanie príkazu nie je zarovnané na stránku"
108510 -#: elf/dl-load.c:915
108511 +#: elf/dl-load.c:913
108512 msgid "ELF load command address/offset not properly aligned"
108513 msgstr "ELF zavádzacia adresa/posunutie nie je správne zarovnaná"
108515 -#: elf/dl-load.c:996
108516 +#: elf/dl-load.c:988
108517 +msgid "cannot allocate TLS data structures for initial thread"
108518 +msgstr "nie je možné prideliť dátové štruktúry TLS pre počiatočné vlákno"
108520 +#: elf/dl-load.c:1012
108521 +msgid "cannot handle TLS data"
108522 +msgstr "nie je možné spracovať TLS dáta"
108524 +#: elf/dl-load.c:1047
108525 msgid "failed to map segment from shared object"
108526 msgstr "nepodarilo sa namapovať segment zo zdieľaného objektu"
108528 -#: elf/dl-load.c:1020
108529 +#: elf/dl-load.c:1071
108530 msgid "cannot dynamically load executable"
108531 msgstr "nie je možné dynamicky načítať spustiteľný súbor"
108533 -#: elf/dl-load.c:1081
108534 +#: elf/dl-load.c:1132
108535 msgid "cannot change memory protections"
108536 msgstr "nie je možné zmeniť ochranu pamäti"
108538 -#: elf/dl-load.c:1100
108539 +#: elf/dl-load.c:1151
108540 msgid "cannot map zero-fill pages"
108541 msgstr "nie je možné namapovať stránky vyplnené nulami"
108543 -#: elf/dl-load.c:1118
108544 +#: elf/dl-load.c:1169
108545 msgid "cannot allocate memory for program header"
108546 msgstr "nie je možné prideliť pamäť pre hlavičku programu"
108548 -#: elf/dl-load.c:1149
108549 +#: elf/dl-load.c:1200
108550 msgid "object file has no dynamic section"
108551 msgstr "objektový súbor neobsahuje žiadnu dynamickú sekciu"
108553 -#: elf/dl-load.c:1193
108554 +#: elf/dl-load.c:1240
108555 msgid "shared object cannot be dlopen()ed"
108556 msgstr "zdieľaný objekt nemôže byť otvorený pomocou dlopen()"
108558 -#: elf/dl-load.c:1216
108559 +#: elf/dl-load.c:1263
108560 msgid "cannot create searchlist"
108561 msgstr "nie je možné vytvoriť vyhľadávací zoznam"
108563 -#: elf/dl-load.c:1351
108564 +#: elf/dl-load.c:1398
108565 msgid "file too short"
108566 msgstr "súbor je príliš krátky"
108568 -#: elf/dl-load.c:1374
108569 +#: elf/dl-load.c:1421
108570 msgid "invalid ELF header"
108571 msgstr "neprípustná ELF hlavička"
108573 -#: elf/dl-load.c:1383
108574 +#: elf/dl-load.c:1430
108575 msgid "ELF file data encoding not big-endian"
108576 msgstr "Kódovanie dát v ELF súbore nie je big-endian"
108578 -#: elf/dl-load.c:1385
108579 +#: elf/dl-load.c:1432
108580 msgid "ELF file data encoding not little-endian"
108581 msgstr "Kódovanie dát v ELF súbore nie je little-endian"
108583 -#: elf/dl-load.c:1389
108584 +#: elf/dl-load.c:1436
108585 msgid "ELF file version ident does not match current one"
108586 msgstr "Identifikácia verzie ELF súboru sa nezhoduje s aktuálnou"
108588 -#: elf/dl-load.c:1393
108589 +#: elf/dl-load.c:1440
108590 msgid "ELF file OS ABI invalid"
108591 msgstr "Neplatný OS ABI ELF súboru"
108593 -#: elf/dl-load.c:1395
108594 +#: elf/dl-load.c:1442
108595 msgid "ELF file ABI version invalid"
108596 msgstr "Neplatná verzia ABI ELF súboru"
108598 -#: elf/dl-load.c:1398
108599 +#: elf/dl-load.c:1445
108600 msgid "internal error"
108601 msgstr "interná chyba"
108603 -#: elf/dl-load.c:1405
108604 +#: elf/dl-load.c:1452
108605 msgid "ELF file version does not match current one"
108606 msgstr "Verzia súboru ELF sa nezhoduje s aktuálnou"
108608 -#: elf/dl-load.c:1413
108609 +#: elf/dl-load.c:1460
108610 msgid "ELF file's phentsize not the expected size"
108611 msgstr "phentsize ELF súboru nie je očakávaná"
108613 -#: elf/dl-load.c:1419
108614 +#: elf/dl-load.c:1466
108615 msgid "only ET_DYN and ET_EXEC can be loaded"
108616 msgstr "iba ET_DYN a ET_EXEC môžu byť načítané"
108618 -#: elf/dl-load.c:1870
108619 +#: elf/dl-load.c:1917
108620 msgid "cannot open shared object file"
108621 msgstr "nie je možné otvoriť súbor zdieľaného objektu"
108623 -#: elf/dl-lookup.c:248 elf/dl-lookup.c:413
108624 +#: elf/dl-lookup.c:265 elf/dl-lookup.c:430
108625 msgid "relocation error"
108626 msgstr "chyba relokácie"
108628 -#: elf/dl-open.c:105
108629 +#: elf/dl-open.c:111
108630 msgid "cannot extend global scope"
108631 msgstr "nie je možné rozšíriť globálny rozsah"
108633 -#: elf/dl-open.c:208
108634 +#: elf/dl-open.c:214
108635 msgid "empty dynamic string token substitution"
108636 msgstr "prázdna substitúcia tokenu dynamického reťazca"
108638 -#: elf/dl-open.c:345 elf/dl-open.c:356
108639 +#: elf/dl-open.c:351 elf/dl-open.c:362
108640 msgid "cannot create scope list"
108641 msgstr "nie je možné vytvoriť zoznam pôsobnosti"
108643 -#: elf/dl-open.c:416
108644 +#: elf/dl-open.c:424
108645 msgid "cannot create TLS data structures"
108646 msgstr "nie je možné dátové štruktúry TLS"
108648 -#: elf/dl-open.c:478
108649 +#: elf/dl-open.c:486
108650 msgid "invalid mode for dlopen()"
108651 msgstr "neprípustný mód pre dlopen()"
108653 -#: elf/dl-reloc.c:88
108654 +#: elf/dl-reloc.c:58
108655 +msgid "shared object cannot be dlopen()ed: static TLS memory too small"
108656 +msgstr "zdieľaný objekt nemôže byť otvorený pomocou dlopen(): statická pamäť TLS je príliš malá"
108658 +#: elf/dl-reloc.c:118
108659 msgid "cannot make segment writable for relocation"
108660 msgstr "nie je možné zmeniť segment na zapisovateľný pre relokáciu"
108662 -#: elf/dl-reloc.c:174
108663 +#: elf/dl-reloc.c:219
108664 #, c-format
108665 msgid "%s: profiler found no PLTREL in object %s\n"
108666 msgstr "%s: profiler nenašiel PLTREL v objekte %s\n"
108668 -#: elf/dl-reloc.c:186
108669 +#: elf/dl-reloc.c:231
108670 #, c-format
108671 msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
108672 msgstr "%s: profiler vyčerpal pamäť pri vytváraní kópie PLTREL z %s\n"
108674 -#: elf/dl-reloc.c:201
108675 +#: elf/dl-reloc.c:246
108676 msgid "cannot restore segment prot after reloc"
108677 msgstr "nie je možné obnoviť segment prot po reloc"
108679 @@ -5643,119 +5664,119 @@
108680 msgid "Configure Dynamic Linker Run Time Bindings."
108681 msgstr "Konfigurácia runtime väzieb dynamického linkera."
108683 -#: elf/ldconfig.c:282
108684 +#: elf/ldconfig.c:294
108685 #, c-format
108686 msgid "Path `%s' given more than once"
108687 msgstr "Cesta `%s' bola zadaná viac ako raz"
108689 -#: elf/ldconfig.c:326
108690 +#: elf/ldconfig.c:338
108691 #, c-format
108692 msgid "%s is not a known library type"
108693 msgstr "%s nie je známy typ knižnice"
108695 -#: elf/ldconfig.c:344
108696 +#: elf/ldconfig.c:356
108697 #, c-format
108698 msgid "Can't stat %s"
108699 msgstr "Zlyhal stat %s"
108701 -#: elf/ldconfig.c:414
108702 +#: elf/ldconfig.c:426
108703 #, c-format
108704 msgid "Can't stat %s\n"
108705 msgstr "Zlyhal stat %s\n"
108707 -#: elf/ldconfig.c:424
108708 +#: elf/ldconfig.c:436
108709 #, c-format
108710 msgid "%s is not a symbolic link\n"
108711 msgstr "%s nie je symbolický odkaz\n"
108713 -#: elf/ldconfig.c:443
108714 +#: elf/ldconfig.c:455
108715 #, c-format
108716 msgid "Can't unlink %s"
108717 msgstr "Nie je možné odstrániť %s"
108719 -#: elf/ldconfig.c:449
108720 +#: elf/ldconfig.c:461
108721 #, c-format
108722 msgid "Can't link %s to %s"
108723 msgstr "Nie je možné vytvoriť odkaz %s na %s"
108725 -#: elf/ldconfig.c:455
108726 +#: elf/ldconfig.c:467
108727 msgid " (changed)\n"
108728 msgstr " (zmenené)\n"
108730 -#: elf/ldconfig.c:457
108731 +#: elf/ldconfig.c:469
108732 msgid " (SKIPPED)\n"
108733 msgstr " (VYNECHANÉ)\n"
108735 -#: elf/ldconfig.c:512
108736 +#: elf/ldconfig.c:524
108737 #, c-format
108738 msgid "Can't find %s"
108739 msgstr "Nie je možné nájsť %s"
108741 -#: elf/ldconfig.c:528
108742 +#: elf/ldconfig.c:540
108743 #, c-format
108744 msgid "Can't lstat %s"
108745 msgstr "Zlyhal lstat %s"
108747 -#: elf/ldconfig.c:535
108748 +#: elf/ldconfig.c:547
108749 #, c-format
108750 msgid "Ignored file %s since it is not a regular file."
108751 msgstr "Súbor %s ignorovaný, keďže nie je regulérnym súborom."
108753 -#: elf/ldconfig.c:543
108754 +#: elf/ldconfig.c:555
108755 #, c-format
108756 msgid "No link created since soname could not be found for %s"
108757 msgstr "Odkaz nebol vytvorený, keďže pre %s nebolo možné nájsť soname"
108759 -#: elf/ldconfig.c:634
108760 +#: elf/ldconfig.c:646
108761 #, c-format
108762 msgid "Can't open directory %s"
108763 msgstr "Nie je možné otvoriť adresár %s"
108765 -#: elf/ldconfig.c:689 elf/ldconfig.c:736
108766 +#: elf/ldconfig.c:701 elf/ldconfig.c:748
108767 #, c-format
108768 msgid "Cannot lstat %s"
108769 msgstr "Zlyhal lstat %s"
108771 -#: elf/ldconfig.c:701
108772 +#: elf/ldconfig.c:713
108773 #, c-format
108774 msgid "Cannot stat %s"
108775 msgstr "Zlyhal stat %s"
108777 -#: elf/ldconfig.c:758 elf/readlib.c:93
108778 +#: elf/ldconfig.c:770 elf/readlib.c:93
108779 #, c-format
108780 msgid "Input file %s not found.\n"
108781 msgstr "Vstupný súbor %s nebol nájdený.\n"
108783 -#: elf/ldconfig.c:792
108784 +#: elf/ldconfig.c:804
108785 #, c-format
108786 msgid "libc5 library %s in wrong directory"
108787 msgstr "libc5 knižnica %s je v nesprávnom adresári"
108789 -#: elf/ldconfig.c:795
108790 +#: elf/ldconfig.c:807
108791 #, c-format
108792 msgid "libc6 library %s in wrong directory"
108793 msgstr "libc6 knižnica %s je v nesprávnom adresári"
108795 -#: elf/ldconfig.c:798
108796 +#: elf/ldconfig.c:810
108797 #, c-format
108798 msgid "libc4 library %s in wrong directory"
108799 msgstr "libc4 knižnica %s je v nesprávnom adresári"
108801 -#: elf/ldconfig.c:825
108802 +#: elf/ldconfig.c:837
108803 #, c-format
108804 msgid "libraries %s and %s in directory %s have same soname but different type."
108805 msgstr "knižnice %s a %s v adresári %s majú rovnaké soname, ale odlišný typ."
108807 -#: elf/ldconfig.c:928
108808 +#: elf/ldconfig.c:940
108809 #, c-format
108810 msgid "Can't open configuration file %s"
108811 msgstr "Nie je možné otvoriť konfiguračný súbor %s"
108813 -#: elf/ldconfig.c:1012
108814 +#: elf/ldconfig.c:1024
108815 msgid "Can't chdir to /"
108816 msgstr "Nie je možné zmeniť adresár na /"
108818 -#: elf/ldconfig.c:1054
108819 +#: elf/ldconfig.c:1066
108820 #, c-format
108821 msgid "Can't open cache file directory %s\n"
108822 msgstr "Nie je možné otvoriť adresár cache súboru %s\n"
108823 Binary files glibc-2.3.2/po/sv.mo and glibc-2.3.2-200304020432/po/sv.mo differ
108824 diff -u -udbrN glibc-2.3.2/po/sv.po glibc-2.3.2-200304020432/po/sv.po
108825 --- glibc-2.3.2/po/sv.po Mon Oct 14 22:03:36 2002
108826 +++ glibc-2.3.2-200304020432/po/sv.po Tue Mar 4 19:25:34 2003
108827 @@ -1,13 +1,13 @@
108828 # GNU libc message catalog for swedish
108829 -# Copyright © 1996, 1998, 2001, 2002 Free Software Foundation, Inc.
108830 -# Jan Djärv <jan.h.d@swipnet.se>, 1996, 1998, 2001, 2002.
108831 -# Revision: 1.43
108832 +# Copyright © 1996, 1998, 2001, 2002, 2003 Free Software Foundation, Inc.
108833 +# Jan Djärv <jan.h.d@swipnet.se>, 1996, 1998, 2001, 2002, 2003.
108834 +# Revision: 1.46
108836 msgid ""
108837 msgstr ""
108838 -"Project-Id-Version: libc 2.3.1\n"
108839 -"POT-Creation-Date: 2002-10-02 17:22-0700\n"
108840 -"PO-Revision-Date: 2002-10-14 21:09+0200\n"
108841 +"Project-Id-Version: libc 2.3.2\n"
108842 +"POT-Creation-Date: 2003-02-22 15:34-0800\n"
108843 +"PO-Revision-Date: 2003-03-04 18:46+0100\n"
108844 "Last-Translator: Jan Djärv <jan.h.d@swipnet.se>\n"
108845 "Language-Team: Swedish <sv@li.org>\n"
108846 "MIME-Version: 1.0\n"
108847 @@ -260,7 +260,7 @@
108849 #: iconv/iconv_prog.c:241
108850 #, c-format
108851 -msgid "conversions from `%s' and to `%s' are not supported"
108852 +msgid "conversion from `%s' and to `%s' are not supported"
108853 msgstr "konvertering från \"%s\" och till \"%s\" stöds ej"
108855 #: iconv/iconv_prog.c:246
108856 @@ -286,7 +286,7 @@
108857 msgid "error while closing output file"
108858 msgstr "fel vid stängning av utfilen"
108860 -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:355 locale/programs/locale.c:268
108861 +#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274
108862 #: locale/programs/localedef.c:372 catgets/gencat.c:233
108863 #: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
108864 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
108865 @@ -294,9 +294,9 @@
108866 "Rapportera fel med programmet \"glibcbug\" till <bugs@gnu.org>.\n"
108867 "Rapportera fel på översättningen till <sv@li.org>.\n"
108869 -#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:369 locale/programs/locale.c:281
108870 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:904
108871 -#: nss/getent.c:74 nscd/nscd.c:279 nscd/nscd_nischeck.c:90 elf/ldconfig.c:259
108872 +#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287
108873 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910
108874 +#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271
108875 #: elf/sprof.c:349
108876 #, c-format
108877 msgid ""
108878 @@ -309,9 +309,9 @@
108879 "INGEN garanti; inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT\n"
108880 "ÄNDAMÅL.\n"
108882 -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:374 locale/programs/locale.c:286
108883 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:909
108884 -#: nss/getent.c:79 nscd/nscd.c:284 nscd/nscd_nischeck.c:95 elf/ldconfig.c:264
108885 +#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292
108886 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915
108887 +#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276
108888 #: elf/sprof.c:355
108889 #, c-format
108890 msgid "Written by %s.\n"
108891 @@ -363,15 +363,15 @@
108892 msgid "Prefix used for all file accesses"
108893 msgstr "Prefix att använda för alla filåtkomster"
108895 -#: iconv/iconvconfig.c:325 locale/programs/localedef.c:292
108896 +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
108897 msgid "no output file produced because warning were issued"
108898 msgstr "ingen utfil skapad på grund av varningar"
108900 -#: iconv/iconvconfig.c:403
108901 +#: iconv/iconvconfig.c:405
108902 msgid "while inserting in search tree"
108903 msgstr "vid insättning i sökträd"
108905 -#: iconv/iconvconfig.c:1202
108906 +#: iconv/iconvconfig.c:1204
108907 msgid "cannot generate output file"
108908 msgstr "kan inte generera utfil"
108910 @@ -1283,7 +1283,7 @@
108911 msgid "unterminated symbolic name"
108912 msgstr "oavslutat symboliskt namn"
108914 -#: locale/programs/linereader.c:537 catgets/gencat.c:1166
108915 +#: locale/programs/linereader.c:537 catgets/gencat.c:1195
108916 msgid "invalid escape sequence"
108917 msgstr "ogiltig kontrollsekvens"
108919 @@ -1313,39 +1313,39 @@
108920 msgid "trailing garbage at end of line"
108921 msgstr "avslutande skräp vid radslutet"
108923 -#: locale/programs/locale.c:73
108924 +#: locale/programs/locale.c:75
108925 msgid "System information:"
108926 msgstr "Systeminformation:"
108928 -#: locale/programs/locale.c:75
108929 +#: locale/programs/locale.c:77
108930 msgid "Write names of available locales"
108931 msgstr "Skriv namn på tillgängliga lokaler"
108933 -#: locale/programs/locale.c:77
108934 +#: locale/programs/locale.c:79
108935 msgid "Write names of available charmaps"
108936 msgstr "Skriv namn på tillgängliga teckenuppsättningar"
108938 -#: locale/programs/locale.c:78
108939 +#: locale/programs/locale.c:80
108940 msgid "Modify output format:"
108941 msgstr "Ändra utdataformat:"
108943 -#: locale/programs/locale.c:79
108944 +#: locale/programs/locale.c:81
108945 msgid "Write names of selected categories"
108946 msgstr "Skriv namn på valda kategorier"
108948 -#: locale/programs/locale.c:80
108949 +#: locale/programs/locale.c:82
108950 msgid "Write names of selected keywords"
108951 msgstr "Skriv namn på valda nyckelord"
108953 -#: locale/programs/locale.c:81
108954 +#: locale/programs/locale.c:83
108955 msgid "Print more information"
108956 msgstr "Skriv mer information"
108958 -#: locale/programs/locale.c:86
108959 +#: locale/programs/locale.c:88
108960 msgid "Get locale-specific information."
108961 msgstr "Hämta lokal-specifik information"
108963 -#: locale/programs/locale.c:89
108964 +#: locale/programs/locale.c:91
108965 msgid ""
108966 "NAME\n"
108967 "[-a|-m]"
108968 @@ -1353,7 +1353,7 @@
108969 "NAMN\n"
108970 "[-a|-m]"
108972 -#: locale/programs/locale.c:488
108973 +#: locale/programs/locale.c:512
108974 msgid "while preparing output"
108975 msgstr "när utdata förbereddes"
108977 @@ -1484,16 +1484,16 @@
108978 msgid "cannot create temporary file"
108979 msgstr "kan inte skapa temporärfil"
108981 -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:302
108982 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
108983 msgid "cannot initialize archive file"
108984 msgstr "kan inte initiera arkivfil"
108986 -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:309
108987 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
108988 msgid "cannot resize archive file"
108989 msgstr "kan inte byta storlek på arkivfil"
108991 -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:318
108992 -#: locale/programs/locarchive.c:508
108993 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
108994 +#: locale/programs/locarchive.c:511
108995 msgid "cannot map archive header"
108996 msgstr "kan inte läsa arkivhuvud med mmap"
108998 @@ -1509,88 +1509,88 @@
108999 msgid "cannot map locale archive file"
109000 msgstr "kan inte öppna lokalarkivfil med mmap"
109002 -#: locale/programs/locarchive.c:326
109003 +#: locale/programs/locarchive.c:329
109004 msgid "cannot lock new archive"
109005 msgstr "kan inte låsa nytt arkiv"
109007 -#: locale/programs/locarchive.c:377
109008 +#: locale/programs/locarchive.c:380
109009 msgid "cannot extend locale archive file"
109010 msgstr "kan inte utöka lokalarkivfil"
109012 -#: locale/programs/locarchive.c:386
109013 +#: locale/programs/locarchive.c:389
109014 msgid "cannot change mode of resized locale archive"
109015 msgstr "kan inte ändra åtkomstläge på storleksändrat lokalarkiv"
109017 -#: locale/programs/locarchive.c:394
109018 +#: locale/programs/locarchive.c:397
109019 msgid "cannot rename new archive"
109020 msgstr "kan inte byta namn på nytt arkiv"
109022 -#: locale/programs/locarchive.c:447
109023 +#: locale/programs/locarchive.c:450
109024 #, c-format
109025 msgid "cannot open locale archive \"%s\""
109026 msgstr "kan inte öppna lokalarkiv \"%s\""
109028 -#: locale/programs/locarchive.c:452
109029 +#: locale/programs/locarchive.c:455
109030 #, c-format
109031 msgid "cannot stat locale archive \"%s\""
109032 msgstr "kan inte ta status på lokalarkiv \"%s\""
109034 -#: locale/programs/locarchive.c:471
109035 +#: locale/programs/locarchive.c:474
109036 #, c-format
109037 msgid "cannot lock locale archive \"%s\""
109038 msgstr "kan inte låsa lokalarkiv \"%s\""
109040 -#: locale/programs/locarchive.c:494
109041 +#: locale/programs/locarchive.c:497
109042 msgid "cannot read archive header"
109043 msgstr "kan inte läsa arkivhuvud"
109045 -#: locale/programs/locarchive.c:554
109046 +#: locale/programs/locarchive.c:557
109047 #, c-format
109048 msgid "locale '%s' already exists"
109049 msgstr "lokal \"%s\" finns redan"
109051 -#: locale/programs/locarchive.c:784 locale/programs/locarchive.c:799
109052 -#: locale/programs/locarchive.c:811 locale/programs/locarchive.c:823
109053 +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
109054 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
109055 #: locale/programs/locfile.c:343
109056 msgid "cannot add to locale archive"
109057 msgstr "kan inte lägga till till lokalarkiv"
109059 -#: locale/programs/locarchive.c:976
109060 +#: locale/programs/locarchive.c:982
109061 #, c-format
109062 msgid "locale alias file `%s' not found"
109063 msgstr "fil \"%s\" för lokalalias hittas inte"
109065 -#: locale/programs/locarchive.c:1118
109066 +#: locale/programs/locarchive.c:1126
109067 #, c-format
109068 msgid "Adding %s\n"
109069 msgstr "Lägger till %s\n"
109071 -#: locale/programs/locarchive.c:1124
109072 +#: locale/programs/locarchive.c:1132
109073 #, c-format
109074 msgid "stat of \"%s\" failed: %s: ignored"
109075 msgstr "ta status på \"%s\" misslyckades: %s: ignorerad"
109077 -#: locale/programs/locarchive.c:1130
109078 +#: locale/programs/locarchive.c:1138
109079 #, c-format
109080 msgid "\"%s\" is no directory; ignored"
109081 msgstr "\"%s\" är inte en katalog, ignorerad"
109083 -#: locale/programs/locarchive.c:1137
109084 +#: locale/programs/locarchive.c:1145
109085 #, c-format
109086 msgid "cannot open directory \"%s\": %s: ignored"
109087 msgstr "kan inte öppna katalog \"%s\": %s: ignorerad"
109089 -#: locale/programs/locarchive.c:1209
109090 +#: locale/programs/locarchive.c:1217
109091 #, c-format
109092 msgid "incomplete set of locale files in \"%s\""
109093 msgstr "ofullständig uppsättning av lokalfiler i \"%s\""
109095 -#: locale/programs/locarchive.c:1273
109096 +#: locale/programs/locarchive.c:1281
109097 #, c-format
109098 msgid "cannot read all files in \"%s\": ignored"
109099 msgstr "kan inte läsa alla filer i \"%s\": ignorerad"
109101 -#: locale/programs/locarchive.c:1343
109102 +#: locale/programs/locarchive.c:1351
109103 #, c-format
109104 msgid "locale \"%s\" not in archive"
109105 msgstr "lokal \"%s\" finns inte i arkivet"
109106 @@ -1659,8 +1659,8 @@
109107 msgid "upper limit in range is not smaller then lower limit"
109108 msgstr "övre gräns i intervall är inte mindre än undre gräns"
109110 -#: locale/programs/xmalloc.c:70 malloc/obstack.c:500 malloc/obstack.c:503
109111 -#: posix/getconf.c:996
109112 +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
109113 +#: posix/getconf.c:1002
109114 msgid "memory exhausted"
109115 msgstr "minne slut"
109117 @@ -1686,7 +1686,7 @@
109118 msgid "Another string for testing."
109119 msgstr "En till sträng för test."
109121 -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:79
109122 +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84
109123 msgid "NAME"
109124 msgstr "NAMN"
109126 @@ -1730,7 +1730,7 @@
109127 msgid "duplicate set definition"
109128 msgstr "dubblerad definition av mängd"
109130 -#: catgets/gencat.c:446 catgets/gencat.c:619 catgets/gencat.c:648
109131 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
109132 msgid "this is the first definition"
109133 msgstr "detta är den första definitionen"
109135 @@ -1748,44 +1748,44 @@
109136 msgid "unknown directive `%s': line ignored"
109137 msgstr "okänt direktiv \"%s\": rad ignorerad"
109139 -#: catgets/gencat.c:617
109140 +#: catgets/gencat.c:621
109141 msgid "duplicated message number"
109142 msgstr "dubblerat meddelandenummer"
109144 -#: catgets/gencat.c:645
109145 +#: catgets/gencat.c:674
109146 msgid "duplicated message identifier"
109147 msgstr "dubblerad meddelandeidentifierare"
109149 -#: catgets/gencat.c:702
109150 +#: catgets/gencat.c:731
109151 msgid "invalid character: message ignored"
109152 msgstr "ogiltigt tecken: meddelandet ignorerat"
109154 -#: catgets/gencat.c:745
109155 +#: catgets/gencat.c:774
109156 msgid "invalid line"
109157 msgstr "ogiltig rad"
109159 -#: catgets/gencat.c:799
109160 +#: catgets/gencat.c:828
109161 msgid "malformed line ignored"
109162 msgstr "felaktig rad ignorerad"
109164 -#: catgets/gencat.c:963 catgets/gencat.c:1004
109165 +#: catgets/gencat.c:992 catgets/gencat.c:1033
109166 #, c-format
109167 msgid "cannot open output file `%s'"
109168 msgstr "kan inte öppna utfil \"%s\""
109170 -#: catgets/gencat.c:1188
109171 +#: catgets/gencat.c:1217
109172 msgid "unterminated message"
109173 msgstr "oavslutat meddelande"
109175 -#: catgets/gencat.c:1212
109176 +#: catgets/gencat.c:1241
109177 msgid "while opening old catalog file"
109178 msgstr "när gammal katalogfil öppnades"
109180 -#: catgets/gencat.c:1303
109181 +#: catgets/gencat.c:1332
109182 msgid "conversion modules not available"
109183 msgstr "konverteringsmoduler inte tillgängliga"
109185 -#: catgets/gencat.c:1329
109186 +#: catgets/gencat.c:1358
109187 msgid "cannot determine escape character"
109188 msgstr "kan inte avgöra kontrolltecken"
109190 @@ -1793,7 +1793,7 @@
109191 msgid "makecontext: does not know how to handle more than 8 arguments\n"
109192 msgstr "makecontext: kan inte hantera mer än 8 argument\n"
109194 -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:178
109195 +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133
109196 #: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861
109197 msgid "Success"
109198 msgstr "Lyckat"
109199 @@ -2982,23 +2982,23 @@
109200 msgid "%s%sUnknown signal %d\n"
109201 msgstr "%s%sOkänd signal %d\n"
109203 -#: malloc/mcheck.c:296
109204 +#: malloc/mcheck.c:346
109205 msgid "memory is consistent, library is buggy\n"
109206 msgstr "minnet är konsistent, biblioteket är felaktigt\n"
109208 -#: malloc/mcheck.c:299
109209 +#: malloc/mcheck.c:349
109210 msgid "memory clobbered before allocated block\n"
109211 msgstr "minnet förstört före allokerat block\n"
109213 -#: malloc/mcheck.c:302
109214 +#: malloc/mcheck.c:352
109215 msgid "memory clobbered past end of allocated block\n"
109216 msgstr "minnet förstört efter slutet på allokerat block\n"
109218 -#: malloc/mcheck.c:305
109219 +#: malloc/mcheck.c:355
109220 msgid "block freed twice\n"
109221 msgstr "block frigjort två gånger\n"
109223 -#: malloc/mcheck.c:308
109224 +#: malloc/mcheck.c:358
109225 msgid "bogus mcheck_status, library is buggy\n"
109226 msgstr "felaktig mcheck_status, biblioteket är felaktigt\n"
109228 @@ -3034,6 +3034,10 @@
109229 msgid "DATAFILE [OUTFILE]"
109230 msgstr "DATAFIL [UTFIL]"
109232 +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
109233 +msgid "Unknown error"
109234 +msgstr "Okänt fel"
109236 #: string/strsignal.c:69
109237 #, c-format
109238 msgid "Real-time signal %d"
109239 @@ -3058,7 +3062,7 @@
109240 msgid "%s: Memory exhausted: %s\n"
109241 msgstr "%s: Minnet slut: %s\n"
109243 -#: timezone/zic.c:390 misc/error.c:120
109244 +#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155
109245 msgid "Unknown system error"
109246 msgstr "Okänt systemfel"
109248 @@ -3451,25 +3455,21 @@
109249 msgid "Interrupted by a signal"
109250 msgstr "Avbruten av en signal"
109252 -#: posix/../sysdeps/posix/gai_strerror.c:57
109253 -msgid "Unknown error"
109254 -msgstr "Okänt fel"
109256 -#: posix/getconf.c:883
109257 +#: posix/getconf.c:889
109258 #, c-format
109259 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
109260 msgstr "Användning: %s [-v specifikation] variabelnamn [sökväg]\n"
109262 -#: posix/getconf.c:941
109263 +#: posix/getconf.c:947
109264 #, c-format
109265 msgid "unknown specification \"%s\""
109266 msgstr "okänd specifikation \"%s\""
109268 -#: posix/getconf.c:968 posix/getconf.c:984
109269 +#: posix/getconf.c:974 posix/getconf.c:990
109270 msgid "undefined"
109271 msgstr "odefinierad"
109273 -#: posix/getconf.c:1006
109274 +#: posix/getconf.c:1012
109275 #, c-format
109276 msgid "Unrecognized variable `%s'"
109277 msgstr "Okänd variabel \"%s\""
109278 @@ -3531,71 +3531,71 @@
109279 msgid "%s: option `-W %s' doesn't allow an argument\n"
109280 msgstr "%s: flaggan \"-W %s\" tar inget argument\n"
109282 -#: posix/regcomp.c:181
109283 +#: posix/regcomp.c:136
109284 msgid "No match"
109285 msgstr "Ingen träff"
109287 -#: posix/regcomp.c:184
109288 +#: posix/regcomp.c:139
109289 msgid "Invalid regular expression"
109290 msgstr "Ogiltigt reguljärt uttryck"
109292 -#: posix/regcomp.c:187
109293 +#: posix/regcomp.c:142
109294 msgid "Invalid collation character"
109295 msgstr "Ogiltigt kollationeringstecken"
109297 -#: posix/regcomp.c:190
109298 +#: posix/regcomp.c:145
109299 msgid "Invalid character class name"
109300 msgstr "Ogiltigt teckenklassnamn"
109302 -#: posix/regcomp.c:193
109303 +#: posix/regcomp.c:148
109304 msgid "Trailing backslash"
109305 msgstr "Avslutande omvänt snedstreck"
109307 -#: posix/regcomp.c:196
109308 +#: posix/regcomp.c:151
109309 msgid "Invalid back reference"
109310 msgstr "Ogiltig bakåtreferens"
109312 -#: posix/regcomp.c:199
109313 +#: posix/regcomp.c:154
109314 msgid "Unmatched [ or [^"
109315 msgstr "Obalanserade [ eller [^"
109317 -#: posix/regcomp.c:202
109318 +#: posix/regcomp.c:157
109319 msgid "Unmatched ( or \\("
109320 msgstr "Obalanserade ( eller \\("
109322 -#: posix/regcomp.c:205
109323 +#: posix/regcomp.c:160
109324 msgid "Unmatched \\{"
109325 msgstr "Obalanserad \\{"
109327 -#: posix/regcomp.c:208
109328 +#: posix/regcomp.c:163
109329 msgid "Invalid content of \\{\\}"
109330 msgstr "Ogiltigt innehåll i \\{\\}"
109332 -#: posix/regcomp.c:211
109333 +#: posix/regcomp.c:166
109334 msgid "Invalid range end"
109335 msgstr "Ogiltigt intervallslut"
109337 -#: posix/regcomp.c:214
109338 +#: posix/regcomp.c:169
109339 msgid "Memory exhausted"
109340 msgstr "Minnet slut"
109342 -#: posix/regcomp.c:217
109343 +#: posix/regcomp.c:172
109344 msgid "Invalid preceding regular expression"
109345 msgstr "Ogiltigt föregående reguljärt uttryck"
109347 -#: posix/regcomp.c:220
109348 +#: posix/regcomp.c:175
109349 msgid "Premature end of regular expression"
109350 msgstr "För tidigt slut på reguljärt uttryck"
109352 -#: posix/regcomp.c:223
109353 +#: posix/regcomp.c:178
109354 msgid "Regular expression too big"
109355 msgstr "Reguljärt uttryck för stort"
109357 -#: posix/regcomp.c:226
109358 +#: posix/regcomp.c:181
109359 msgid "Unmatched ) or \\)"
109360 msgstr "Obalanserade ) eller \\)"
109362 -#: posix/regcomp.c:673
109363 +#: posix/regcomp.c:615
109364 msgid "No previous regular expression"
109365 msgstr "Inget föregående reguljärt uttryck"
109367 @@ -3749,24 +3749,24 @@
109368 msgid "Service configuration to be used"
109369 msgstr "Tjänstekonfiguration som ska användas"
109371 -#: nss/getent.c:136 nss/getent.c:305
109372 +#: nss/getent.c:136 nss/getent.c:308
109373 #, c-format
109374 msgid "Enumeration not supported on %s\n"
109375 msgstr "Uppräkning stöds inte på %s\n"
109377 -#: nss/getent.c:729
109378 +#: nss/getent.c:732
109379 msgid "getent - get entries from administrative database."
109380 msgstr "getent - hämta poster från administrativ databas"
109382 -#: nss/getent.c:730
109383 +#: nss/getent.c:733
109384 msgid "Supported databases:"
109385 msgstr "Databaser som stöds:"
109387 -#: nss/getent.c:787 nscd/nscd.c:119 nscd/nscd_nischeck.c:64
109388 +#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64
109389 msgid "wrong number of arguments"
109390 msgstr "fel antal argument"
109392 -#: nss/getent.c:797
109393 +#: nss/getent.c:800
109394 #, c-format
109395 msgid "Unknown database: %s\n"
109396 msgstr "Okänd databas: %s\n"
109397 @@ -3795,68 +3795,72 @@
109398 msgid "invalid pointer size"
109399 msgstr "ogiltig pekarstorlek"
109401 -#: inet/rcmd.c:174 inet/rcmd.c:177
109402 +#: inet/rcmd.c:163 inet/rcmd.c:166
109403 +msgid "rcmd: Cannot allocate memory\n"
109404 +msgstr "rcmd: Kan inte allokera minne\n"
109406 +#: inet/rcmd.c:185 inet/rcmd.c:188
109407 msgid "rcmd: socket: All ports in use\n"
109408 msgstr "rcmd: uttag (socket): Alla portar används\n"
109410 -#: inet/rcmd.c:211
109411 +#: inet/rcmd.c:222
109412 #, c-format
109413 msgid "connect to address %s: "
109414 msgstr "anslut till adress %s: "
109416 -#: inet/rcmd.c:229
109417 +#: inet/rcmd.c:240
109418 #, c-format
109419 msgid "Trying %s...\n"
109420 msgstr "Provar %s...\n"
109422 -#: inet/rcmd.c:278
109423 +#: inet/rcmd.c:289
109424 #, c-format
109425 msgid "rcmd: write (setting up stderr): %m\n"
109426 msgstr "rcmd: write: (sätter upp standard fel): %m\n"
109428 -#: inet/rcmd.c:299
109429 +#: inet/rcmd.c:310
109430 #, c-format
109431 msgid "rcmd: poll (setting up stderr): %m\n"
109432 msgstr "rcmd: poll (sätter upp standard fel): %m\n"
109434 -#: inet/rcmd.c:302
109435 +#: inet/rcmd.c:313
109436 msgid "poll: protocol failure in circuit setup\n"
109437 msgstr "poll: protokollfel i förbindelseuppsättning\n"
109439 -#: inet/rcmd.c:346
109440 +#: inet/rcmd.c:358
109441 msgid "socket: protocol failure in circuit setup\n"
109442 msgstr "uttag (socket): protokollfel i förbindelseuppsättning\n"
109444 -#: inet/rcmd.c:368
109445 +#: inet/rcmd.c:387
109446 #, c-format
109447 msgid "rcmd: %s: short read"
109448 msgstr "rcmd: %s: läsning gav för lite data"
109450 -#: inet/rcmd.c:524
109451 +#: inet/rcmd.c:549
109452 msgid "lstat failed"
109453 msgstr "misslyckades ta status (lstat)"
109455 -#: inet/rcmd.c:526
109456 +#: inet/rcmd.c:551
109457 msgid "not regular file"
109458 msgstr "inte en normal fil"
109460 -#: inet/rcmd.c:531
109461 +#: inet/rcmd.c:556
109462 msgid "cannot open"
109463 msgstr "kan inte öppna"
109465 -#: inet/rcmd.c:533
109466 +#: inet/rcmd.c:558
109467 msgid "fstat failed"
109468 msgstr "misslyckades ta status (fstat)"
109470 -#: inet/rcmd.c:535
109471 +#: inet/rcmd.c:560
109472 msgid "bad owner"
109473 msgstr "olämplig ägare"
109475 -#: inet/rcmd.c:537
109476 +#: inet/rcmd.c:562
109477 msgid "writeable by other than owner"
109478 msgstr "skrivbar för andra än ägaren"
109480 -#: inet/rcmd.c:539
109481 +#: inet/rcmd.c:564
109482 msgid "hard linked somewhere"
109483 msgstr "hårdlänkad någonstans"
109485 @@ -4067,109 +4071,109 @@
109486 msgid "Cannot receive reply to broadcast"
109487 msgstr "Kan inte ta emot svar på utsändning"
109489 -#: sunrpc/rpc_main.c:289
109490 +#: sunrpc/rpc_main.c:288
109491 #, c-format
109492 msgid "%s: output would overwrite %s\n"
109493 msgstr "%s: utdata skulle skriva över %s\n"
109495 -#: sunrpc/rpc_main.c:296
109496 +#: sunrpc/rpc_main.c:295
109497 #, c-format
109498 msgid "%s: unable to open %s: %m\n"
109499 msgstr "%s: kan inte öppna %s: %m\n"
109501 -#: sunrpc/rpc_main.c:308
109502 +#: sunrpc/rpc_main.c:307
109503 #, c-format
109504 msgid "%s: while writing output %s: %m"
109505 msgstr "%s: när resultatet %s skrevs: %m"
109507 -#: sunrpc/rpc_main.c:343
109508 +#: sunrpc/rpc_main.c:342
109509 #, c-format
109510 msgid "cannot find C preprocessor: %s \n"
109511 msgstr "kan inte hitta C preprocessor: %s \n"
109513 -#: sunrpc/rpc_main.c:351
109514 +#: sunrpc/rpc_main.c:350
109515 msgid "cannot find any C preprocessor (cpp)\n"
109516 msgstr "kan inte hitta någon C preprocessor (cpp)\n"
109518 -#: sunrpc/rpc_main.c:420
109519 +#: sunrpc/rpc_main.c:419
109520 #, c-format
109521 msgid "%s: C preprocessor failed with signal %d\n"
109522 msgstr "%s: C preprocessorn avslutades med signal %d\n"
109524 -#: sunrpc/rpc_main.c:423
109525 +#: sunrpc/rpc_main.c:422
109526 #, c-format
109527 msgid "%s: C preprocessor failed with exit code %d\n"
109528 msgstr "%s: C preprocessorn avslutades med kod %d\n"
109530 -#: sunrpc/rpc_main.c:463
109531 +#: sunrpc/rpc_main.c:462
109532 #, c-format
109533 msgid "illegal nettype :`%s'\n"
109534 msgstr "otillåten nättyp: \"%s\"\n"
109536 -#: sunrpc/rpc_main.c:1105
109537 +#: sunrpc/rpc_main.c:1104
109538 msgid "rpcgen: too many defines\n"
109539 msgstr "rpcgen: för många \"define\"\n"
109541 -#: sunrpc/rpc_main.c:1117
109542 +#: sunrpc/rpc_main.c:1116
109543 msgid "rpcgen: arglist coding error\n"
109544 msgstr "rpcgen: arglist kodningsfel\n"
109546 #. TRANS: the file will not be removed; this is an
109547 #. TRANS: informative message.
109548 -#: sunrpc/rpc_main.c:1150
109549 +#: sunrpc/rpc_main.c:1149
109550 #, c-format
109551 msgid "file `%s' already exists and may be overwritten\n"
109552 msgstr "fil \"%s\" finns redan och kan bli överskriven\n"
109554 -#: sunrpc/rpc_main.c:1195
109555 +#: sunrpc/rpc_main.c:1194
109556 msgid "Cannot specify more than one input file!\n"
109557 msgstr "Kan inte ange mer än en infil!\n"
109559 -#: sunrpc/rpc_main.c:1365
109560 +#: sunrpc/rpc_main.c:1364
109561 msgid "This implementation doesn't support newstyle or MT-safe code!\n"
109562 msgstr "Denna implementation stödjer inte \"newstyle\" eller trådsäker kod!\n"
109564 -#: sunrpc/rpc_main.c:1374
109565 +#: sunrpc/rpc_main.c:1373
109566 msgid "Cannot use netid flag with inetd flag!\n"
109567 msgstr "Kan inte ange netid-flaggan tillsammans med inetd-flaggan!\n"
109569 -#: sunrpc/rpc_main.c:1386
109570 +#: sunrpc/rpc_main.c:1385
109571 msgid "Cannot use netid flag without TIRPC!\n"
109572 msgstr "Kan inte ange netid-flaggan utan TIRPC!\n"
109574 -#: sunrpc/rpc_main.c:1393
109575 +#: sunrpc/rpc_main.c:1392
109576 msgid "Cannot use table flags with newstyle!\n"
109577 msgstr "Kan inte ange tabellflaggor med ny stil\n"
109579 -#: sunrpc/rpc_main.c:1412
109580 +#: sunrpc/rpc_main.c:1411
109581 msgid "\"infile\" is required for template generation flags.\n"
109582 msgstr "\"infil\" är obligatorisk för mallgenereringsflaggor.\n"
109584 -#: sunrpc/rpc_main.c:1417
109585 +#: sunrpc/rpc_main.c:1416
109586 msgid "Cannot have more than one file generation flag!\n"
109587 msgstr "Kan inte ha mer än en filgenereringsflagga!\n"
109589 -#: sunrpc/rpc_main.c:1426
109590 +#: sunrpc/rpc_main.c:1425
109591 #, c-format
109592 msgid "usage: %s infile\n"
109593 msgstr "användning: %s infil\n"
109595 -#: sunrpc/rpc_main.c:1427
109596 +#: sunrpc/rpc_main.c:1426
109597 #, c-format
109598 msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
109599 msgstr "\t%s [-abkCLNTM][-Dnamn[=värde]] [-i storlek] [-I [-K sekunder]] [-Y sökväg] infil\n"
109601 -#: sunrpc/rpc_main.c:1429
109602 +#: sunrpc/rpc_main.c:1428
109603 #, c-format
109604 msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
109605 msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o utfil] [infil]\n"
109607 -#: sunrpc/rpc_main.c:1431
109608 +#: sunrpc/rpc_main.c:1430
109609 #, c-format
109610 msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
109611 msgstr "\t%s [-s nättyp]* [-o utfil] [infil]\n"
109613 -#: sunrpc/rpc_main.c:1432
109614 +#: sunrpc/rpc_main.c:1431
109615 #, c-format
109616 msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
109617 msgstr "\t%s [-n nätid]* [-o utfil] [infil]\n"
109618 @@ -4698,7 +4702,7 @@
109620 #: nis/nis_print.c:239
109621 msgid "\tAccess rights: "
109622 -msgstr "\tÅtkomsträttigheter: "
109623 +msgstr "\tRättigheter : "
109625 #: nis/nis_print.c:252
109626 msgid "Group Flags :"
109627 @@ -4710,7 +4714,7 @@
109628 "Group Members :\n"
109629 msgstr ""
109631 -"Guppmedlemmar:\n"
109632 +"Gruppmedlemmar:\n"
109634 #: nis/nis_print.c:266
109635 #, c-format
109636 @@ -4725,7 +4729,7 @@
109637 #: nis/nis_print.c:268
109638 #, c-format
109639 msgid "Character Separator : %c\n"
109640 -msgstr "Teckenseparator: %c\n"
109641 +msgstr "Teckenseparator : %c\n"
109643 #: nis/nis_print.c:269
109644 #, c-format
109645 @@ -4747,7 +4751,7 @@
109647 #: nis/nis_print.c:277
109648 msgid "\t\tAccess Rights : "
109649 -msgstr "\t\tÅtkomsträttigheter: "
109650 +msgstr "\t\tRättigheter : "
109652 #: nis/nis_print.c:286
109653 msgid "Linked Object Type : "
109654 @@ -4798,7 +4802,7 @@
109656 #: nis/nis_print.c:324
109657 msgid "Access Rights : "
109658 -msgstr "Åtkomsträttigheter: "
109659 +msgstr "Rättigheter : "
109661 #: nis/nis_print.c:326
109662 msgid ""
109663 @@ -4811,7 +4815,7 @@
109664 #: nis/nis_print.c:329
109665 #, c-format
109666 msgid "Creation Time : %s"
109667 -msgstr "Skapad: %s"
109668 +msgstr "Skapad : %s"
109670 #: nis/nis_print.c:331
109671 #, c-format
109672 @@ -5026,7 +5030,7 @@
109673 msgid "while allocating hash table entry"
109674 msgstr "när hashtabellspost allokerades"
109676 -#: nscd/cache.c:150 nscd/connections.c:185
109677 +#: nscd/cache.c:150 nscd/connections.c:187
109678 #, c-format
109679 msgid "cannot stat() file `%s': %s"
109680 msgstr "kan inte ta status på fil \"%s\": %s"
109681 @@ -5039,153 +5043,158 @@
109682 msgid "Cannot run nscd in secure mode as unprivileged user"
109683 msgstr "Kan inte köra nscd i säkert läge som opriviligierad användare"
109685 -#: nscd/connections.c:199
109686 +#: nscd/connections.c:175
109687 +#, c-format
109688 +msgid "while allocating cache: %s"
109689 +msgstr "när cache-post allokerades: %s"
109691 +#: nscd/connections.c:200
109692 #, c-format
109693 msgid "cannot open socket: %s"
109694 msgstr "kan inte öppna uttag (socket): %s"
109696 -#: nscd/connections.c:217
109697 +#: nscd/connections.c:218
109698 #, c-format
109699 msgid "cannot enable socket to accept connections: %s"
109700 msgstr "kan inte få uttag (socket) att acceptera förbindelser: %s"
109702 -#: nscd/connections.c:259
109703 +#: nscd/connections.c:260
109704 #, c-format
109705 msgid "handle_request: request received (Version = %d)"
109706 msgstr "handle_request: begäran mottagen (version = %d)"
109708 -#: nscd/connections.c:265
109709 +#: nscd/connections.c:266
109710 #, c-format
109711 msgid "cannot handle old request version %d; current version is %d"
109712 msgstr "Kan inte hantera äldre förfrågansversion %d, nuvarande version är %d"
109714 -#: nscd/connections.c:303 nscd/connections.c:325
109715 +#: nscd/connections.c:304 nscd/connections.c:326
109716 #, c-format
109717 msgid "cannot write result: %s"
109718 msgstr "kan inte skriva resultat: %s"
109720 -#: nscd/connections.c:404 nscd/connections.c:498
109721 +#: nscd/connections.c:405 nscd/connections.c:499
109722 #, c-format
109723 msgid "error getting callers id: %s"
109724 msgstr "kunde inte hämta anropandes identitet: %s"
109726 -#: nscd/connections.c:470
109727 +#: nscd/connections.c:471
109728 #, c-format
109729 msgid "while accepting connection: %s"
109730 msgstr "när förbindelse accepterades: %s"
109732 -#: nscd/connections.c:481
109733 +#: nscd/connections.c:482
109734 #, c-format
109735 msgid "short read while reading request: %s"
109736 msgstr "fattas data vid läsning av begäran: %s"
109738 -#: nscd/connections.c:517
109739 +#: nscd/connections.c:518
109740 #, c-format
109741 msgid "key length in request too long: %d"
109742 msgstr "nyckellängd i begäran för lång: %d"
109744 -#: nscd/connections.c:531
109745 +#: nscd/connections.c:532
109746 #, c-format
109747 msgid "short read while reading request key: %s"
109748 msgstr "fattas data vid läsning av begäransnyckel: %s"
109750 -#: nscd/connections.c:590 nscd/connections.c:591 nscd/connections.c:610
109751 -#: nscd/connections.c:623 nscd/connections.c:629 nscd/connections.c:636
109752 +#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611
109753 +#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637
109754 #, c-format
109755 msgid "Failed to run nscd as user '%s'"
109756 msgstr "Misslyckades att köra nscd som användare \"%s\""
109758 -#: nscd/connections.c:611
109759 +#: nscd/connections.c:612
109760 msgid "getgrouplist failed"
109761 msgstr "getgrouplist misslyckades"
109763 -#: nscd/connections.c:624
109764 +#: nscd/connections.c:625
109765 msgid "setgroups failed"
109766 msgstr "setgroups misslyckades"
109768 -#: nscd/grpcache.c:102 nscd/hstcache.c:110 nscd/pwdcache.c:108
109769 +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
109770 msgid "while allocating key copy"
109771 msgstr "när nyckelkopia allokerades"
109773 -#: nscd/grpcache.c:152 nscd/hstcache.c:167 nscd/pwdcache.c:145
109774 +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
109775 msgid "while allocating cache entry"
109776 msgstr "när cache-post allokerades"
109778 -#: nscd/grpcache.c:195 nscd/hstcache.c:281 nscd/pwdcache.c:191
109779 +#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192
109780 #, c-format
109781 msgid "short write in %s: %s"
109782 msgstr "ofullständig skrivning i %s: %s"
109784 -#: nscd/grpcache.c:217
109785 +#: nscd/grpcache.c:218
109786 #, c-format
109787 msgid "Haven't found \"%s\" in group cache!"
109788 msgstr "Hittar inte \"%s\" i gruppcache!"
109790 -#: nscd/grpcache.c:292
109791 +#: nscd/grpcache.c:284
109792 #, c-format
109793 msgid "Invalid numeric gid \"%s\"!"
109794 msgstr "Ogiltigt numeriskt gruppid (gid) \"%s\"!"
109796 -#: nscd/grpcache.c:299
109797 +#: nscd/grpcache.c:291
109798 #, c-format
109799 msgid "Haven't found \"%d\" in group cache!"
109800 msgstr "Hittar inte \"%d\" i gruppcache!"
109802 -#: nscd/hstcache.c:303 nscd/hstcache.c:378 nscd/hstcache.c:456
109803 -#: nscd/hstcache.c:533
109804 +#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435
109805 +#: nscd/hstcache.c:500
109806 #, c-format
109807 msgid "Haven't found \"%s\" in hosts cache!"
109808 msgstr "Hittar inte \"%s\" i värdcache!"
109810 -#: nscd/nscd.c:80
109811 +#: nscd/nscd.c:85
109812 msgid "Read configuration data from NAME"
109813 msgstr "Läs konfigurationsdata från NAMN"
109815 -#: nscd/nscd.c:82
109816 +#: nscd/nscd.c:87
109817 msgid "Do not fork and display messages on the current tty"
109818 msgstr "Skapa inte barnprocess, visa meddelanden på nuvarande tty"
109820 -#: nscd/nscd.c:83
109821 +#: nscd/nscd.c:88
109822 msgid "NUMBER"
109823 msgstr "ANTAL"
109825 -#: nscd/nscd.c:83
109826 +#: nscd/nscd.c:88
109827 msgid "Start NUMBER threads"
109828 msgstr "Starta ANTAL trådar"
109830 -#: nscd/nscd.c:84
109831 +#: nscd/nscd.c:89
109832 msgid "Shut the server down"
109833 msgstr "Avsluta servern"
109835 -#: nscd/nscd.c:85
109836 +#: nscd/nscd.c:90
109837 msgid "Print current configuration statistic"
109838 msgstr "Skriv ut nuvarande konfigurationsstatistik"
109840 -#: nscd/nscd.c:86
109841 +#: nscd/nscd.c:91
109842 msgid "TABLE"
109843 msgstr "TABELL"
109845 -#: nscd/nscd.c:87
109846 +#: nscd/nscd.c:92
109847 msgid "Invalidate the specified cache"
109848 msgstr "Invalidera den angivna cachen"
109850 -#: nscd/nscd.c:88
109851 +#: nscd/nscd.c:93
109852 msgid "TABLE,yes"
109853 msgstr "TABELL,yes"
109855 -#: nscd/nscd.c:88
109856 +#: nscd/nscd.c:93
109857 msgid "Use separate cache for each user"
109858 msgstr "Använd separat cache för varje användare"
109860 -#: nscd/nscd.c:93
109861 +#: nscd/nscd.c:98
109862 msgid "Name Service Cache Daemon."
109863 msgstr "Namntjänst cache-demon"
109865 -#: nscd/nscd.c:126
109866 +#: nscd/nscd.c:131
109867 msgid "already running"
109868 msgstr "kör redan"
109870 -#: nscd/nscd.c:192 nscd/nscd.c:212 nscd/nscd.c:218
109871 +#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269
109872 msgid "Only root is allowed to use this option!"
109873 msgstr "Bara root har tillåtelse att använda denna operation!"
109875 @@ -5275,22 +5284,22 @@
109876 "%15ld%% cache träffprocent\n"
109877 "%15s kontrollera /etc/%s för ändringar\n"
109879 -#: nscd/pwdcache.c:213
109880 +#: nscd/pwdcache.c:214
109881 #, c-format
109882 msgid "Haven't found \"%s\" in password cache!"
109883 msgstr "Hittar inte \"%s\" i lösenordscache!"
109885 -#: nscd/pwdcache.c:288
109886 +#: nscd/pwdcache.c:280
109887 #, c-format
109888 msgid "Invalid numeric uid \"%s\"!"
109889 msgstr "Ogiltigt numeriskt användarid (uid) \"%s\"!"
109891 -#: nscd/pwdcache.c:295
109892 +#: nscd/pwdcache.c:287
109893 #, c-format
109894 msgid "Haven't found \"%d\" in password cache!"
109895 msgstr "Hittar inte \"%d\" i lösenordscache!"
109897 -#: elf/../sysdeps/generic/dl-sysdep.c:297
109898 +#: elf/../sysdeps/generic/dl-sysdep.c:357
109899 msgid "cannot create capability list"
109900 msgstr "kan inte skapa egenskapslista"
109902 @@ -5341,7 +5350,7 @@
109903 msgid ", OS ABI: %s %d.%d.%d"
109904 msgstr ", OS ABI: %s %d.%d.%d"
109906 -#: elf/cache.c:136 elf/ldconfig.c:1033
109907 +#: elf/cache.c:136 elf/ldconfig.c:1045
109908 #, c-format
109909 msgid "Can't open cache file %s\n"
109910 msgstr "Kan inte öppna cache-fil \"%s\"\n"
109911 @@ -5387,17 +5396,17 @@
109912 msgid "Renaming of %s to %s failed"
109913 msgstr "Namnbyte på %s till %s misslyckades"
109915 -#: elf/dl-close.c:113
109916 +#: elf/dl-close.c:128
109917 msgid "shared object not open"
109918 msgstr "delat objekt är inte öppnat"
109920 -#: elf/dl-close.c:357 elf/dl-open.c:436
109921 +#: elf/dl-close.c:486 elf/dl-open.c:444
109922 msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
109923 msgstr ""
109924 "Generationsräknare för TLS slog runt! Var snäll och skicka felrapport med\n"
109925 "\"glibcbug\"-skriptet"
109927 -#: elf/dl-deps.c:111 elf/dl-open.c:177
109928 +#: elf/dl-deps.c:111 elf/dl-open.c:183
109929 msgid "DST not allowed in SUID/SGID programs"
109930 msgstr "DST inte tillåten i SUID/SGID-program"
109932 @@ -5416,181 +5425,193 @@
109933 msgid "cannot allocate dependency list"
109934 msgstr "kan inte allokera beroendelista"
109936 -#: elf/dl-deps.c:492 elf/dl-deps.c:547
109937 +#: elf/dl-deps.c:494 elf/dl-deps.c:549
109938 msgid "cannot allocate symbol search list"
109939 msgstr "kan inte allokera söklista för symboler"
109941 -#: elf/dl-deps.c:532
109942 +#: elf/dl-deps.c:534
109943 msgid "Filters not supported with LD_TRACE_PRELINKING"
109944 msgstr "Filter stöds ej med LD_TRACE_PRELINKING"
109946 -#: elf/dl-error.c:73
109947 +#: elf/dl-error.c:75
109948 msgid "DYNAMIC LINKER BUG!!!"
109949 msgstr "FEL I DYNAMISK LÄNKARE!!!"
109951 -#: elf/dl-error.c:106
109952 +#: elf/dl-error.c:108
109953 msgid "error while loading shared libraries"
109954 msgstr "fel när delade bibliotek laddades"
109956 -#: elf/dl-load.c:338
109957 +#: elf/dl-load.c:339
109958 msgid "cannot allocate name record"
109959 msgstr "kan inte allokera namnpost"
109961 -#: elf/dl-load.c:440 elf/dl-load.c:520 elf/dl-load.c:614 elf/dl-load.c:709
109962 +#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707
109963 msgid "cannot create cache for search path"
109964 msgstr "kan inte skapa cache för sökväg"
109966 -#: elf/dl-load.c:545
109967 +#: elf/dl-load.c:543
109968 msgid "cannot create RUNPATH/RPATH copy"
109969 msgstr "kan inte skapa kopia av RUNPATH/RPATH"
109971 -#: elf/dl-load.c:600
109972 +#: elf/dl-load.c:598
109973 msgid "cannot create search path array"
109974 msgstr "kan inte skapa säkvägslista"
109976 -#: elf/dl-load.c:796
109977 +#: elf/dl-load.c:794
109978 msgid "cannot stat shared object"
109979 msgstr "kan inte ta status på delat objekt"
109981 -#: elf/dl-load.c:840
109982 +#: elf/dl-load.c:838
109983 msgid "cannot open zero fill device"
109984 msgstr "kan inte öppna nollfyllnadsenhet"
109986 -#: elf/dl-load.c:849 elf/dl-load.c:1855
109987 +#: elf/dl-load.c:847 elf/dl-load.c:1902
109988 msgid "cannot create shared object descriptor"
109989 msgstr "kan inte skapa delad objektdeskriptor"
109991 -#: elf/dl-load.c:868 elf/dl-load.c:1351 elf/dl-load.c:1434
109992 +#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481
109993 msgid "cannot read file data"
109994 msgstr "kan inte läsa fildata"
109996 -#: elf/dl-load.c:908
109997 +#: elf/dl-load.c:906
109998 msgid "ELF load command alignment not page-aligned"
109999 msgstr "ELF-laddkommando är inte på sidgräns"
110001 -#: elf/dl-load.c:915
110002 +#: elf/dl-load.c:913
110003 msgid "ELF load command address/offset not properly aligned"
110004 msgstr "Address/position för ELF-laddkommando är inte på rätt bytegräns"
110006 -#: elf/dl-load.c:996
110007 +#: elf/dl-load.c:988
110008 +msgid "cannot allocate TLS data structures for initial thread"
110009 +msgstr "kan inte skapa TLS-datastrukturer för första tråden"
110011 +#: elf/dl-load.c:1012
110012 +msgid "cannot handle TLS data"
110013 +msgstr "kan inte hantera TLS-data"
110015 +#: elf/dl-load.c:1047
110016 msgid "failed to map segment from shared object"
110017 msgstr "misslyckades att mappa segment från delat objekt"
110019 -#: elf/dl-load.c:1020
110020 +#: elf/dl-load.c:1071
110021 msgid "cannot dynamically load executable"
110022 msgstr "kan inte ladda exekverbar fil dynamiskt"
110024 -#: elf/dl-load.c:1081
110025 +#: elf/dl-load.c:1132
110026 msgid "cannot change memory protections"
110027 msgstr "kan inte ändra minnesskydd"
110029 -#: elf/dl-load.c:1100
110030 +#: elf/dl-load.c:1151
110031 msgid "cannot map zero-fill pages"
110032 msgstr "kan inte mappa nollfyllda sidor"
110034 -#: elf/dl-load.c:1118
110035 +#: elf/dl-load.c:1169
110036 msgid "cannot allocate memory for program header"
110037 msgstr "Kan inte allokera minne för programhuvud"
110039 -#: elf/dl-load.c:1149
110040 +#: elf/dl-load.c:1200
110041 msgid "object file has no dynamic section"
110042 msgstr "objektfilen har ingen dynamisk sektion"
110044 -#: elf/dl-load.c:1193
110045 +#: elf/dl-load.c:1240
110046 msgid "shared object cannot be dlopen()ed"
110047 msgstr "delat objekt kan inte göras dlopen() på"
110049 -#: elf/dl-load.c:1216
110050 +#: elf/dl-load.c:1263
110051 msgid "cannot create searchlist"
110052 msgstr "kan inte skapa söklista"
110054 -#: elf/dl-load.c:1351
110055 +#: elf/dl-load.c:1398
110056 msgid "file too short"
110057 msgstr "fil för kort"
110059 -#: elf/dl-load.c:1374
110060 +#: elf/dl-load.c:1421
110061 msgid "invalid ELF header"
110062 msgstr "ogiltigt ELF-huvud"
110064 -#: elf/dl-load.c:1383
110065 +#: elf/dl-load.c:1430
110066 msgid "ELF file data encoding not big-endian"
110067 msgstr "Kodning för ELF-fildata är inte \"big-endian\""
110069 -#: elf/dl-load.c:1385
110070 +#: elf/dl-load.c:1432
110071 msgid "ELF file data encoding not little-endian"
110072 msgstr "Kodning för ELF-fildata är inte \"little-endian\""
110074 -#: elf/dl-load.c:1389
110075 +#: elf/dl-load.c:1436
110076 msgid "ELF file version ident does not match current one"
110077 msgstr "ELF-filens versionsidentitet stämmer inte med nuvarande"
110079 -#: elf/dl-load.c:1393
110080 +#: elf/dl-load.c:1440
110081 msgid "ELF file OS ABI invalid"
110082 msgstr "ELF-fil har felaktig version på OS-ABI"
110084 -#: elf/dl-load.c:1395
110085 +#: elf/dl-load.c:1442
110086 msgid "ELF file ABI version invalid"
110087 msgstr "ELF-fil har felaktig version på ABI"
110089 -#: elf/dl-load.c:1398
110090 +#: elf/dl-load.c:1445
110091 msgid "internal error"
110092 msgstr "internt fel"
110094 -#: elf/dl-load.c:1405
110095 +#: elf/dl-load.c:1452
110096 msgid "ELF file version does not match current one"
110097 msgstr "ELF-filens version stämmer inte med nuvarande"
110099 -#: elf/dl-load.c:1413
110100 +#: elf/dl-load.c:1460
110101 msgid "ELF file's phentsize not the expected size"
110102 msgstr "ELF-filens värde på \"phentsize\" är inte den förväntade"
110104 -#: elf/dl-load.c:1419
110105 +#: elf/dl-load.c:1466
110106 msgid "only ET_DYN and ET_EXEC can be loaded"
110107 msgstr "bara ET_DYN och ET_EXEC kan laddas"
110109 -#: elf/dl-load.c:1870
110110 +#: elf/dl-load.c:1917
110111 msgid "cannot open shared object file"
110112 msgstr "kan inte öppna delad objektfil"
110114 -#: elf/dl-lookup.c:248 elf/dl-lookup.c:413
110115 +#: elf/dl-lookup.c:265 elf/dl-lookup.c:430
110116 msgid "relocation error"
110117 msgstr "fel vid relokering"
110119 -#: elf/dl-open.c:105
110120 +#: elf/dl-open.c:111
110121 msgid "cannot extend global scope"
110122 msgstr "kan inte utöka globalt område"
110124 -#: elf/dl-open.c:208
110125 +#: elf/dl-open.c:214
110126 msgid "empty dynamic string token substitution"
110127 msgstr "substitution av \"dynamic string token\" är tom"
110129 -#: elf/dl-open.c:345 elf/dl-open.c:356
110130 +#: elf/dl-open.c:351 elf/dl-open.c:362
110131 msgid "cannot create scope list"
110132 msgstr "kan inte skapa omfångslista"
110134 -#: elf/dl-open.c:416
110135 +#: elf/dl-open.c:424
110136 msgid "cannot create TLS data structures"
110137 msgstr "kan inte skapa datastrukturer för TLS"
110139 -#: elf/dl-open.c:478
110140 +#: elf/dl-open.c:486
110141 msgid "invalid mode for dlopen()"
110142 msgstr "ogiltiga flaggor för dlopen()"
110144 -#: elf/dl-reloc.c:88
110145 +#: elf/dl-reloc.c:58
110146 +msgid "shared object cannot be dlopen()ed: static TLS memory too small"
110147 +msgstr "delat objekt kan inte göras dlopen() på: statiskt TLS-minne är för litet"
110149 +#: elf/dl-reloc.c:118
110150 msgid "cannot make segment writable for relocation"
110151 msgstr "kan inte göra segment skrivbart för relokering"
110153 -#: elf/dl-reloc.c:174
110154 +#: elf/dl-reloc.c:219
110155 #, c-format
110156 msgid "%s: profiler found no PLTREL in object %s\n"
110157 msgstr "%s: profileraren hittade inga PLTREL i objekt %s\n"
110159 -#: elf/dl-reloc.c:186
110160 +#: elf/dl-reloc.c:231
110161 #, c-format
110162 msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
110163 msgstr "%s: profileraren fick slut minne för kopiering av PLTREL i %s\n"
110165 -#: elf/dl-reloc.c:201
110166 +#: elf/dl-reloc.c:246
110167 msgid "cannot restore segment prot after reloc"
110168 msgstr "kan inte återställa segmenträttigheter efter relokering"
110170 @@ -5646,119 +5667,119 @@
110171 msgid "Configure Dynamic Linker Run Time Bindings."
110172 msgstr "Konfigurera bindningar för den dynamiska länkaren."
110174 -#: elf/ldconfig.c:282
110175 +#: elf/ldconfig.c:294
110176 #, c-format
110177 msgid "Path `%s' given more than once"
110178 msgstr "Sökväg \"%s\" given mer än en gång"
110180 -#: elf/ldconfig.c:326
110181 +#: elf/ldconfig.c:338
110182 #, c-format
110183 msgid "%s is not a known library type"
110184 msgstr "%s är inte en känd bibliotekstyp"
110186 -#: elf/ldconfig.c:344
110187 +#: elf/ldconfig.c:356
110188 #, c-format
110189 msgid "Can't stat %s"
110190 msgstr "Kan inte ta status på %s"
110192 -#: elf/ldconfig.c:414
110193 +#: elf/ldconfig.c:426
110194 #, c-format
110195 msgid "Can't stat %s\n"
110196 msgstr "Kan inte ta status på %s\n"
110198 -#: elf/ldconfig.c:424
110199 +#: elf/ldconfig.c:436
110200 #, c-format
110201 msgid "%s is not a symbolic link\n"
110202 msgstr "%s är inte en symbolisk länk\n"
110204 -#: elf/ldconfig.c:443
110205 +#: elf/ldconfig.c:455
110206 #, c-format
110207 msgid "Can't unlink %s"
110208 msgstr "Kan inte ta bort (unlink) %s"
110210 -#: elf/ldconfig.c:449
110211 +#: elf/ldconfig.c:461
110212 #, c-format
110213 msgid "Can't link %s to %s"
110214 msgstr "Kan inte länka %s till %s"
110216 -#: elf/ldconfig.c:455
110217 +#: elf/ldconfig.c:467
110218 msgid " (changed)\n"
110219 msgstr " (ändrad)\n"
110221 -#: elf/ldconfig.c:457
110222 +#: elf/ldconfig.c:469
110223 msgid " (SKIPPED)\n"
110224 msgstr " (HOPPAR ÖVER)\n"
110226 -#: elf/ldconfig.c:512
110227 +#: elf/ldconfig.c:524
110228 #, c-format
110229 msgid "Can't find %s"
110230 msgstr "Kan inte hitta %s"
110232 -#: elf/ldconfig.c:528
110233 +#: elf/ldconfig.c:540
110234 #, c-format
110235 msgid "Can't lstat %s"
110236 msgstr "Kan inte ta länkstatus på %s"
110238 -#: elf/ldconfig.c:535
110239 +#: elf/ldconfig.c:547
110240 #, c-format
110241 msgid "Ignored file %s since it is not a regular file."
110242 msgstr "Ignorerar fil %s eftersom den inte är en vanlig fil"
110244 -#: elf/ldconfig.c:543
110245 +#: elf/ldconfig.c:555
110246 #, c-format
110247 msgid "No link created since soname could not be found for %s"
110248 msgstr "Ingen länk skapad eftersom \"soname\" inte hittades för %s"
110250 -#: elf/ldconfig.c:634
110251 +#: elf/ldconfig.c:646
110252 #, c-format
110253 msgid "Can't open directory %s"
110254 msgstr "Kan inte öppna katalog %s"
110256 -#: elf/ldconfig.c:689 elf/ldconfig.c:736
110257 +#: elf/ldconfig.c:701 elf/ldconfig.c:748
110258 #, c-format
110259 msgid "Cannot lstat %s"
110260 msgstr "Kan inte ta status (lstat) på %s"
110262 -#: elf/ldconfig.c:701
110263 +#: elf/ldconfig.c:713
110264 #, c-format
110265 msgid "Cannot stat %s"
110266 msgstr "Kan inte ta status på %s"
110268 -#: elf/ldconfig.c:758 elf/readlib.c:93
110269 +#: elf/ldconfig.c:770 elf/readlib.c:93
110270 #, c-format
110271 msgid "Input file %s not found.\n"
110272 msgstr "Hittar inte infil %s.\n"
110274 -#: elf/ldconfig.c:792
110275 +#: elf/ldconfig.c:804
110276 #, c-format
110277 msgid "libc5 library %s in wrong directory"
110278 msgstr "libc5-bibliotek %s i fel katalog"
110280 -#: elf/ldconfig.c:795
110281 +#: elf/ldconfig.c:807
110282 #, c-format
110283 msgid "libc6 library %s in wrong directory"
110284 msgstr "libc6-bibliotek %s i fel katalog"
110286 -#: elf/ldconfig.c:798
110287 +#: elf/ldconfig.c:810
110288 #, c-format
110289 msgid "libc4 library %s in wrong directory"
110290 msgstr "libc4-bibliotek %s i fel katalog"
110292 -#: elf/ldconfig.c:825
110293 +#: elf/ldconfig.c:837
110294 #, c-format
110295 msgid "libraries %s and %s in directory %s have same soname but different type."
110296 msgstr "bibliotek %s och %s i katalog %s har samma \"soname\" men olika typ."
110298 -#: elf/ldconfig.c:928
110299 +#: elf/ldconfig.c:940
110300 #, c-format
110301 msgid "Can't open configuration file %s"
110302 msgstr "Kan inte öppna konfigurationsfil \"%s\""
110304 -#: elf/ldconfig.c:1012
110305 +#: elf/ldconfig.c:1024
110306 msgid "Can't chdir to /"
110307 msgstr "Kan inte byta katalog till /"
110309 -#: elf/ldconfig.c:1054
110310 +#: elf/ldconfig.c:1066
110311 #, c-format
110312 msgid "Can't open cache file directory %s\n"
110313 msgstr "Kan inte läsa cache-filkatalog \"%s\"\n"
110314 Binary files glibc-2.3.2/po/tr.mo and glibc-2.3.2-200304020432/po/tr.mo differ
110315 diff -u -udbrN glibc-2.3.2/po/tr.po glibc-2.3.2-200304020432/po/tr.po
110316 --- glibc-2.3.2/po/tr.po Sat Oct 5 20:15:39 2002
110317 +++ glibc-2.3.2-200304020432/po/tr.po Tue Mar 4 05:20:34 2003
110318 @@ -1,13 +1,13 @@
110319 # Turkish translations for GNU libc messages.
110320 -# Copyright (C) 2002 Free Software Foundation, Inc.
110321 -# Nilgün Belma Bugüner <nilgun@superonline.com>, 2001, 2002.
110322 +# Copyright (C) 2003 Free Software Foundation, Inc.
110323 +# Nilgün Belma Bugüner <nilgun@superonline.com>, 2001, ..., 2003.
110324 # Onur Tolga Şehitoğlu <onur@lcsl.metu.edu.tr>, 1998.
110326 msgid ""
110327 msgstr ""
110328 -"Project-Id-Version: libc 2.3\n"
110329 -"POT-Creation-Date: 2002-10-02 17:22-0700\n"
110330 -"PO-Revision-Date: 2002-10-05 17:08+0300\n"
110331 +"Project-Id-Version: libc 2.3.2\n"
110332 +"POT-Creation-Date: 2003-02-22 15:34-0800\n"
110333 +"PO-Revision-Date: 2003-03-04 05:51+0200\n"
110334 "Last-Translator: Nilgün Belma Bugüner <nilgun@superonline.com>\n"
110335 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
110336 "MIME-Version: 1.0\n"
110337 @@ -261,8 +261,8 @@
110339 #: iconv/iconv_prog.c:241
110340 #, c-format
110341 -msgid "conversions from `%s' and to `%s' are not supported"
110342 -msgstr "`%s'e ve ondan `%s'e dönüşüm desteklenmiyor"
110343 +msgid "conversion from `%s' and to `%s' are not supported"
110344 +msgstr "`%s'den ve `%s'e dönüşüm desteklenmiyor"
110346 #: iconv/iconv_prog.c:246
110347 #, c-format
110348 @@ -287,7 +287,7 @@
110349 msgid "error while closing output file"
110350 msgstr "çıktı dosyası kapatılırken hata"
110352 -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:355 locale/programs/locale.c:268
110353 +#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274
110354 #: locale/programs/localedef.c:372 catgets/gencat.c:233
110355 #: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
110356 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
110357 @@ -296,9 +296,9 @@
110358 "ise `glibcbug' betiğini kullanarak oluşturacağınız hata raporuyla\n"
110359 "<bugs@gnu.org> adresine bildiriniz.\n"
110361 -#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:369 locale/programs/locale.c:281
110362 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:904
110363 -#: nss/getent.c:74 nscd/nscd.c:279 nscd/nscd_nischeck.c:90 elf/ldconfig.c:259
110364 +#: iconv/iconv_prog.c:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287
110365 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910
110366 +#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271
110367 #: elf/sprof.c:349
110368 #, c-format
110369 msgid ""
110370 @@ -311,9 +311,9 @@
110371 "HİÇBİR garanti yoktur; hatta SATILABİLİRLİĞİ veya ŞAHSİ KULLANIMINIZA\n"
110372 "UYGUNLUĞU için bile garanti verilmez.\n"
110374 -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:374 locale/programs/locale.c:286
110375 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:909
110376 -#: nss/getent.c:79 nscd/nscd.c:284 nscd/nscd_nischeck.c:95 elf/ldconfig.c:264
110377 +#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292
110378 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915
110379 +#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276
110380 #: elf/sprof.c:355
110381 #, c-format
110382 msgid "Written by %s.\n"
110383 @@ -365,15 +365,15 @@
110384 msgid "Prefix used for all file accesses"
110385 msgstr "Tüm dosya erişimlerinde kullanılan önek"
110387 -#: iconv/iconvconfig.c:325 locale/programs/localedef.c:292
110388 +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
110389 msgid "no output file produced because warning were issued"
110390 msgstr "uyarı yayınlandığından üretilen bir çıktı dosyası yok"
110392 -#: iconv/iconvconfig.c:403
110393 +#: iconv/iconvconfig.c:405
110394 msgid "while inserting in search tree"
110395 msgstr "arama ağacına eklenirken"
110397 -#: iconv/iconvconfig.c:1202
110398 +#: iconv/iconvconfig.c:1204
110399 msgid "cannot generate output file"
110400 msgstr "çıktı dosyası üretilemiyor"
110402 @@ -1283,7 +1283,7 @@
110403 msgid "unterminated symbolic name"
110404 msgstr "sonlandırılmamış sembolik isim"
110406 -#: locale/programs/linereader.c:537 catgets/gencat.c:1166
110407 +#: locale/programs/linereader.c:537 catgets/gencat.c:1195
110408 msgid "invalid escape sequence"
110409 msgstr "geçersiz escape dizisi"
110411 @@ -1313,39 +1313,39 @@
110412 msgid "trailing garbage at end of line"
110413 msgstr "satır sonu bozuk"
110415 -#: locale/programs/locale.c:73
110416 +#: locale/programs/locale.c:75
110417 msgid "System information:"
110418 msgstr "Sistem bilgileri:"
110420 -#: locale/programs/locale.c:75
110421 +#: locale/programs/locale.c:77
110422 msgid "Write names of available locales"
110423 msgstr "Mevcut yerellerin isimlerini yazar"
110425 -#: locale/programs/locale.c:77
110426 +#: locale/programs/locale.c:79
110427 msgid "Write names of available charmaps"
110428 msgstr "Mevcut karakter eşlemlerin isimlerini yazar"
110430 -#: locale/programs/locale.c:78
110431 +#: locale/programs/locale.c:80
110432 msgid "Modify output format:"
110433 msgstr "Değiştirme çıktı biçemi:"
110435 -#: locale/programs/locale.c:79
110436 +#: locale/programs/locale.c:81
110437 msgid "Write names of selected categories"
110438 msgstr "Seçilmiş kategorilerin isimlerini yazar"
110440 -#: locale/programs/locale.c:80
110441 +#: locale/programs/locale.c:82
110442 msgid "Write names of selected keywords"
110443 msgstr "Seçilmiş anahtar kelimelerin isimlerini yazar"
110445 -#: locale/programs/locale.c:81
110446 +#: locale/programs/locale.c:83
110447 msgid "Print more information"
110448 msgstr "Daha fazla ileti basar"
110450 -#: locale/programs/locale.c:86
110451 +#: locale/programs/locale.c:88
110452 msgid "Get locale-specific information."
110453 msgstr "Dile özel bilgiler alınır"
110455 -#: locale/programs/locale.c:89
110456 +#: locale/programs/locale.c:91
110457 msgid ""
110458 "NAME\n"
110459 "[-a|-m]"
110460 @@ -1353,7 +1353,7 @@
110461 "İSİM\n"
110462 "[-a|-m]"
110464 -#: locale/programs/locale.c:488
110465 +#: locale/programs/locale.c:512
110466 msgid "while preparing output"
110467 msgstr "çıktıyı hazırlarken"
110469 @@ -1484,16 +1484,16 @@
110470 msgid "cannot create temporary file"
110471 msgstr "geçici dosya oluşturulamıyor"
110473 -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:302
110474 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
110475 msgid "cannot initialize archive file"
110476 msgstr "arşiv dosyası ilklendirilemiyor"
110478 -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:309
110479 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
110480 msgid "cannot resize archive file"
110481 msgstr "arşiv dosyasının boyutu değiştirilemiyor"
110483 -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:318
110484 -#: locale/programs/locarchive.c:508
110485 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
110486 +#: locale/programs/locarchive.c:511
110487 msgid "cannot map archive header"
110488 msgstr "arşiv başlığı eşlenemiyor"
110490 @@ -1509,88 +1509,88 @@
110491 msgid "cannot map locale archive file"
110492 msgstr "yerel arşiv dosyası eşlenemiyor"
110494 -#: locale/programs/locarchive.c:326
110495 +#: locale/programs/locarchive.c:329
110496 msgid "cannot lock new archive"
110497 msgstr "yeni arşiv kilitlenemiyor"
110499 -#: locale/programs/locarchive.c:377
110500 +#: locale/programs/locarchive.c:380
110501 msgid "cannot extend locale archive file"
110502 msgstr "yerel arşiv dosyası genişletilemiyor"
110504 -#: locale/programs/locarchive.c:386
110505 +#: locale/programs/locarchive.c:389
110506 msgid "cannot change mode of resized locale archive"
110507 msgstr "boyutu değiştirilen yerel arşivin kipi değiştirilemiyor"
110509 -#: locale/programs/locarchive.c:394
110510 +#: locale/programs/locarchive.c:397
110511 msgid "cannot rename new archive"
110512 msgstr "yeni arşivin ismi değiştirilemiyor"
110514 -#: locale/programs/locarchive.c:447
110515 +#: locale/programs/locarchive.c:450
110516 #, c-format
110517 msgid "cannot open locale archive \"%s\""
110518 msgstr "yerel arşiv `%s' açılamıyor"
110520 -#: locale/programs/locarchive.c:452
110521 +#: locale/programs/locarchive.c:455
110522 #, c-format
110523 msgid "cannot stat locale archive \"%s\""
110524 msgstr "\"%s\" yerel arşivi durumlanamıyor"
110526 -#: locale/programs/locarchive.c:471
110527 +#: locale/programs/locarchive.c:474
110528 #, c-format
110529 msgid "cannot lock locale archive \"%s\""
110530 msgstr "\"%s\" yerel arşivi kilitlenemiyor"
110532 -#: locale/programs/locarchive.c:494
110533 +#: locale/programs/locarchive.c:497
110534 msgid "cannot read archive header"
110535 msgstr "arşiv başlığı okunamıyor"
110537 -#: locale/programs/locarchive.c:554
110538 +#: locale/programs/locarchive.c:557
110539 #, c-format
110540 msgid "locale '%s' already exists"
110541 msgstr "`%s' yereli zaten var"
110543 -#: locale/programs/locarchive.c:784 locale/programs/locarchive.c:799
110544 -#: locale/programs/locarchive.c:811 locale/programs/locarchive.c:823
110545 +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
110546 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
110547 #: locale/programs/locfile.c:343
110548 msgid "cannot add to locale archive"
110549 msgstr "yerel arşive ekleme yapılamıyor"
110551 -#: locale/programs/locarchive.c:976
110552 +#: locale/programs/locarchive.c:982
110553 #, c-format
110554 msgid "locale alias file `%s' not found"
110555 msgstr "`%s' yerel isim dosyası bulunamadı"
110557 -#: locale/programs/locarchive.c:1118
110558 +#: locale/programs/locarchive.c:1126
110559 #, c-format
110560 msgid "Adding %s\n"
110561 msgstr "%s ekleniyor\n"
110563 -#: locale/programs/locarchive.c:1124
110564 +#: locale/programs/locarchive.c:1132
110565 #, c-format
110566 msgid "stat of \"%s\" failed: %s: ignored"
110567 msgstr "\"%s\" durumlaması başarısız: %s: yoksayıldı"
110569 -#: locale/programs/locarchive.c:1130
110570 +#: locale/programs/locarchive.c:1138
110571 #, c-format
110572 msgid "\"%s\" is no directory; ignored"
110573 msgstr "\"%s\" dizinsiz; yoksayıldı"
110575 -#: locale/programs/locarchive.c:1137
110576 +#: locale/programs/locarchive.c:1145
110577 #, c-format
110578 msgid "cannot open directory \"%s\": %s: ignored"
110579 msgstr "\"%s\" dizini açılamıyor: %s: yoksayıldı"
110581 -#: locale/programs/locarchive.c:1209
110582 +#: locale/programs/locarchive.c:1217
110583 #, c-format
110584 msgid "incomplete set of locale files in \"%s\""
110585 msgstr "\"%s\" içindeki yerel dosyaları kümesi tamamlanmamış"
110587 -#: locale/programs/locarchive.c:1273
110588 +#: locale/programs/locarchive.c:1281
110589 #, c-format
110590 msgid "cannot read all files in \"%s\": ignored"
110591 msgstr "\"%s\" içindeki hiçbir dosya okunamıyor: yoksayıldı"
110593 -#: locale/programs/locarchive.c:1343
110594 +#: locale/programs/locarchive.c:1351
110595 #, c-format
110596 msgid "locale \"%s\" not in archive"
110597 msgstr "\"%s\" yeri arşivde değil"
110598 @@ -1659,8 +1659,8 @@
110599 msgid "upper limit in range is not smaller then lower limit"
110600 msgstr "kapsamdaki üst sınır alt sınırdan küçük değil"
110602 -#: locale/programs/xmalloc.c:70 malloc/obstack.c:500 malloc/obstack.c:503
110603 -#: posix/getconf.c:996
110604 +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
110605 +#: posix/getconf.c:1002
110606 msgid "memory exhausted"
110607 msgstr "bellek tükendi"
110609 @@ -1686,7 +1686,7 @@
110610 msgid "Another string for testing."
110611 msgstr "Test edilecek diğer dizge."
110613 -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:79
110614 +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84
110615 msgid "NAME"
110616 msgstr "İSİM"
110618 @@ -1708,7 +1708,7 @@
110619 "Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n"
110620 "is -, output is written to standard output.\n"
110621 msgstr ""
110622 -"İleti kataloğu üretilir.GİRDİ-DOSYASI - verilirse standart girdi okunur.\n"
110623 +"İleti kataloğu üretilir. GİRDİ-DOSYASI - verilirse standart girdi okunur.\n"
110624 "ÇIKTI-DOSYASI - verilirse standart çıktıya yazılır.\n"
110626 #: catgets/gencat.c:125
110627 @@ -1731,7 +1731,7 @@
110628 msgid "duplicate set definition"
110629 msgstr "küme ataması tekrarlanmış"
110631 -#: catgets/gencat.c:446 catgets/gencat.c:619 catgets/gencat.c:648
110632 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
110633 msgid "this is the first definition"
110634 msgstr "bu ilk tanım"
110636 @@ -1749,44 +1749,44 @@
110637 msgid "unknown directive `%s': line ignored"
110638 msgstr "bilinmeyen `%s' yönergesi: satır yoksayıldı"
110640 -#: catgets/gencat.c:617
110641 +#: catgets/gencat.c:621
110642 msgid "duplicated message number"
110643 msgstr "tekrarlanmış ileti numarası"
110645 -#: catgets/gencat.c:645
110646 +#: catgets/gencat.c:674
110647 msgid "duplicated message identifier"
110648 msgstr "ileti tanıtıcı tekrarlanmış"
110650 -#: catgets/gencat.c:702
110651 +#: catgets/gencat.c:731
110652 msgid "invalid character: message ignored"
110653 msgstr "geçersiz karakter: ileti yoksayıldı"
110655 -#: catgets/gencat.c:745
110656 +#: catgets/gencat.c:774
110657 msgid "invalid line"
110658 msgstr "satır geçersiz"
110660 -#: catgets/gencat.c:799
110661 +#: catgets/gencat.c:828
110662 msgid "malformed line ignored"
110663 msgstr "hatalı satır yoksayıldı"
110665 -#: catgets/gencat.c:963 catgets/gencat.c:1004
110666 +#: catgets/gencat.c:992 catgets/gencat.c:1033
110667 #, c-format
110668 msgid "cannot open output file `%s'"
110669 msgstr "`%s' çıktı dosyası açılamıyor"
110671 -#: catgets/gencat.c:1188
110672 +#: catgets/gencat.c:1217
110673 msgid "unterminated message"
110674 msgstr "sonlandırılmamış ileti"
110676 -#: catgets/gencat.c:1212
110677 +#: catgets/gencat.c:1241
110678 msgid "while opening old catalog file"
110679 msgstr "eski katalog dosyası açılırken"
110681 -#: catgets/gencat.c:1303
110682 +#: catgets/gencat.c:1332
110683 msgid "conversion modules not available"
110684 msgstr "dönüşüm modülleri yok"
110686 -#: catgets/gencat.c:1329
110687 +#: catgets/gencat.c:1358
110688 msgid "cannot determine escape character"
110689 msgstr "öncelem karakteri saptanamıyor"
110691 @@ -1794,7 +1794,7 @@
110692 msgid "makecontext: does not know how to handle more than 8 arguments\n"
110693 msgstr "makecontext: 8 argümandan fazlasının nasıl elde edileceği bilinmiyor\n"
110695 -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:178
110696 +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133
110697 #: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861
110698 msgid "Success"
110699 msgstr "Başarılı"
110700 @@ -2983,23 +2983,23 @@
110701 msgid "%s%sUnknown signal %d\n"
110702 msgstr "%s%sBilinmeyen sinyal %d\n"
110704 -#: malloc/mcheck.c:296
110705 +#: malloc/mcheck.c:346
110706 msgid "memory is consistent, library is buggy\n"
110707 msgstr "bellek tutarlı, kitaplık hatalı\n"
110709 -#: malloc/mcheck.c:299
110710 +#: malloc/mcheck.c:349
110711 msgid "memory clobbered before allocated block\n"
110712 msgstr "bellek ayrılmış bloğun öncesine taştı\n"
110714 -#: malloc/mcheck.c:302
110715 +#: malloc/mcheck.c:352
110716 msgid "memory clobbered past end of allocated block\n"
110717 msgstr "bellek ayrılmış bloğun sonrasına taştı\n"
110719 -#: malloc/mcheck.c:305
110720 +#: malloc/mcheck.c:355
110721 msgid "block freed twice\n"
110722 msgstr "blok iki kere serbest bırakıldı\n"
110724 -#: malloc/mcheck.c:308
110725 +#: malloc/mcheck.c:358
110726 msgid "bogus mcheck_status, library is buggy\n"
110727 msgstr "mcheck_status sahte, kitaplık hatalı\n"
110729 @@ -3037,6 +3037,10 @@
110730 msgid "DATAFILE [OUTFILE]"
110731 msgstr "VERİDOSYASI [ÇIKTIDOSYASI]"
110733 +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
110734 +msgid "Unknown error"
110735 +msgstr "Bilinmeyen hata"
110737 #: string/strsignal.c:69
110738 #, c-format
110739 msgid "Real-time signal %d"
110740 @@ -3061,7 +3065,7 @@
110741 msgid "%s: Memory exhausted: %s\n"
110742 msgstr "%s: Bellek tükendi: %s\n"
110744 -#: timezone/zic.c:390 misc/error.c:120
110745 +#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155
110746 msgid "Unknown system error"
110747 msgstr "Bilinmeyen sistem hatası"
110749 @@ -3454,25 +3458,21 @@
110750 msgid "Interrupted by a signal"
110751 msgstr "Bir sinyal ile engellendi"
110753 -#: posix/../sysdeps/posix/gai_strerror.c:57
110754 -msgid "Unknown error"
110755 -msgstr "Bilinmeyen hata"
110757 -#: posix/getconf.c:883
110758 +#: posix/getconf.c:889
110759 #, c-format
110760 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
110761 msgstr "Kullanımı: %s [-v özellik] değişken_ismi [dosyayolu_ismi]\n"
110763 -#: posix/getconf.c:941
110764 +#: posix/getconf.c:947
110765 #, c-format
110766 msgid "unknown specification \"%s\""
110767 msgstr "Özellik \"%s\" bilinmiyor"
110769 -#: posix/getconf.c:968 posix/getconf.c:984
110770 +#: posix/getconf.c:974 posix/getconf.c:990
110771 msgid "undefined"
110772 msgstr "atanmamış"
110774 -#: posix/getconf.c:1006
110775 +#: posix/getconf.c:1012
110776 #, c-format
110777 msgid "Unrecognized variable `%s'"
110778 msgstr "Tanınmayan değişken `%s'"
110779 @@ -3534,71 +3534,71 @@
110780 msgid "%s: option `-W %s' doesn't allow an argument\n"
110781 msgstr "%s: `-W %s' seçeneği argümansız kullanılır\n"
110783 -#: posix/regcomp.c:181
110784 +#: posix/regcomp.c:136
110785 msgid "No match"
110786 msgstr "Eşleşme yok"
110788 -#: posix/regcomp.c:184
110789 +#: posix/regcomp.c:139
110790 msgid "Invalid regular expression"
110791 msgstr "Düzenli ifade geçersiz"
110793 -#: posix/regcomp.c:187
110794 +#: posix/regcomp.c:142
110795 msgid "Invalid collation character"
110796 msgstr "Karşılaştırma karakteri geçersiz"
110798 -#: posix/regcomp.c:190
110799 +#: posix/regcomp.c:145
110800 msgid "Invalid character class name"
110801 msgstr "Geçersiz karakter sınıfı ismi"
110803 -#: posix/regcomp.c:193
110804 +#: posix/regcomp.c:148
110805 msgid "Trailing backslash"
110806 msgstr "İzleyen tersbölü"
110808 -#: posix/regcomp.c:196
110809 +#: posix/regcomp.c:151
110810 msgid "Invalid back reference"
110811 msgstr "Geriye başvuru geçersiz"
110813 -#: posix/regcomp.c:199
110814 +#: posix/regcomp.c:154
110815 msgid "Unmatched [ or [^"
110816 msgstr "[ ya da [^ eşleşmiyor"
110818 -#: posix/regcomp.c:202
110819 +#: posix/regcomp.c:157
110820 msgid "Unmatched ( or \\("
110821 msgstr "( ya da \\( eşleşmiyor"
110823 -#: posix/regcomp.c:205
110824 +#: posix/regcomp.c:160
110825 msgid "Unmatched \\{"
110826 msgstr "\\{ eşleşmiyor"
110828 -#: posix/regcomp.c:208
110829 +#: posix/regcomp.c:163
110830 msgid "Invalid content of \\{\\}"
110831 msgstr "\\{\\} içeriği geçersiz"
110833 -#: posix/regcomp.c:211
110834 +#: posix/regcomp.c:166
110835 msgid "Invalid range end"
110836 msgstr "Geçersiz kapsam sonu"
110838 -#: posix/regcomp.c:214
110839 +#: posix/regcomp.c:169
110840 msgid "Memory exhausted"
110841 msgstr "Bellek tükendi"
110843 -#: posix/regcomp.c:217
110844 +#: posix/regcomp.c:172
110845 msgid "Invalid preceding regular expression"
110846 msgstr "Önceleme düzenli ifadesi geçersiz"
110848 -#: posix/regcomp.c:220
110849 +#: posix/regcomp.c:175
110850 msgid "Premature end of regular expression"
110851 msgstr "Düzenli ifadenin sonu eksik"
110853 -#: posix/regcomp.c:223
110854 +#: posix/regcomp.c:178
110855 msgid "Regular expression too big"
110856 msgstr "Düzenli ifade çok büyük"
110858 -#: posix/regcomp.c:226
110859 +#: posix/regcomp.c:181
110860 msgid "Unmatched ) or \\)"
110861 msgstr ") ya da \\) eşleşmiyor"
110863 -#: posix/regcomp.c:673
110864 +#: posix/regcomp.c:615
110865 msgid "No previous regular expression"
110866 msgstr "Önceki düzenli ifade yok"
110868 @@ -3754,24 +3754,24 @@
110869 msgid "Service configuration to be used"
110870 msgstr "Kullanılacak yapılandırmayı hizmete alır"
110872 -#: nss/getent.c:136 nss/getent.c:305
110873 +#: nss/getent.c:136 nss/getent.c:308
110874 #, c-format
110875 msgid "Enumeration not supported on %s\n"
110876 msgstr "Numaralama %s ile desteklenmiyor\n"
110878 -#: nss/getent.c:729
110879 +#: nss/getent.c:732
110880 msgid "getent - get entries from administrative database."
110881 msgstr "getent - yönetim veritabanından girdiler alınıyor."
110883 -#: nss/getent.c:730
110884 +#: nss/getent.c:733
110885 msgid "Supported databases:"
110886 msgstr "Desteklenen veritabanları:"
110888 -#: nss/getent.c:787 nscd/nscd.c:119 nscd/nscd_nischeck.c:64
110889 +#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64
110890 msgid "wrong number of arguments"
110891 msgstr "argüman sayısı hatalı"
110893 -#: nss/getent.c:797
110894 +#: nss/getent.c:800
110895 #, c-format
110896 msgid "Unknown database: %s\n"
110897 msgstr "Bilinmeyen veritabanı: %s\n"
110898 @@ -3800,68 +3800,72 @@
110899 msgid "invalid pointer size"
110900 msgstr "imleyici uzunluğu geçersiz"
110902 -#: inet/rcmd.c:174 inet/rcmd.c:177
110903 +#: inet/rcmd.c:163 inet/rcmd.c:166
110904 +msgid "rcmd: Cannot allocate memory\n"
110905 +msgstr "rcmd: Bellek ayrılamadı\n"
110907 +#: inet/rcmd.c:185 inet/rcmd.c:188
110908 msgid "rcmd: socket: All ports in use\n"
110909 msgstr "rcmd: soket: Tüm portlar kullanımda\n"
110911 -#: inet/rcmd.c:211
110912 +#: inet/rcmd.c:222
110913 #, c-format
110914 msgid "connect to address %s: "
110915 msgstr "%s adresine bağlantı:"
110917 -#: inet/rcmd.c:229
110918 +#: inet/rcmd.c:240
110919 #, c-format
110920 msgid "Trying %s...\n"
110921 msgstr "%s deneniyor...\n"
110923 -#: inet/rcmd.c:278
110924 +#: inet/rcmd.c:289
110925 #, c-format
110926 msgid "rcmd: write (setting up stderr): %m\n"
110927 msgstr "rcmd: write (stderr ayarlaması): %m\n"
110929 -#: inet/rcmd.c:299
110930 +#: inet/rcmd.c:310
110931 #, c-format
110932 msgid "rcmd: poll (setting up stderr): %m\n"
110933 msgstr "rcmd: poll (stderr ayarlaması): %m\n"
110935 -#: inet/rcmd.c:302
110936 +#: inet/rcmd.c:313
110937 msgid "poll: protocol failure in circuit setup\n"
110938 msgstr "poll: devre ayarında protokol hatası\n"
110940 -#: inet/rcmd.c:346
110941 +#: inet/rcmd.c:358
110942 msgid "socket: protocol failure in circuit setup\n"
110943 msgstr "soket: devre ayarında protokol hatası\n"
110945 -#: inet/rcmd.c:368
110946 +#: inet/rcmd.c:387
110947 #, c-format
110948 msgid "rcmd: %s: short read"
110949 msgstr "rcmd: %s: kısa okuma"
110951 -#: inet/rcmd.c:524
110952 +#: inet/rcmd.c:549
110953 msgid "lstat failed"
110954 msgstr "lstat başarısız"
110956 -#: inet/rcmd.c:526
110957 +#: inet/rcmd.c:551
110958 msgid "not regular file"
110959 msgstr "düzenli dosya değil"
110961 -#: inet/rcmd.c:531
110962 +#: inet/rcmd.c:556
110963 msgid "cannot open"
110964 msgstr "açılamıyor"
110966 -#: inet/rcmd.c:533
110967 +#: inet/rcmd.c:558
110968 msgid "fstat failed"
110969 msgstr "fstat başarısız"
110971 -#: inet/rcmd.c:535
110972 +#: inet/rcmd.c:560
110973 msgid "bad owner"
110974 msgstr "Sahip hatalı"
110976 -#: inet/rcmd.c:537
110977 +#: inet/rcmd.c:562
110978 msgid "writeable by other than owner"
110979 msgstr "sahibinden başkası yazabilir"
110981 -#: inet/rcmd.c:539
110982 +#: inet/rcmd.c:564
110983 msgid "hard linked somewhere"
110984 msgstr "bir yere sabit bağlı"
110986 @@ -4072,109 +4076,109 @@
110987 msgid "Cannot receive reply to broadcast"
110988 msgstr "yayından yanıt alınamıyor"
110990 -#: sunrpc/rpc_main.c:289
110991 +#: sunrpc/rpc_main.c:288
110992 #, c-format
110993 msgid "%s: output would overwrite %s\n"
110994 msgstr "%s: çıktı %s üzerine yazacak\n"
110996 -#: sunrpc/rpc_main.c:296
110997 +#: sunrpc/rpc_main.c:295
110998 #, c-format
110999 msgid "%s: unable to open %s: %m\n"
111000 msgstr "%s: %s dosyasını açmak mümkün değil: %m\n"
111002 -#: sunrpc/rpc_main.c:308
111003 +#: sunrpc/rpc_main.c:307
111004 #, c-format
111005 msgid "%s: while writing output %s: %m"
111006 msgstr "%s: %s çıktısını yazarken: %m"
111008 -#: sunrpc/rpc_main.c:343
111009 +#: sunrpc/rpc_main.c:342
111010 #, c-format
111011 msgid "cannot find C preprocessor: %s \n"
111012 msgstr "C ön işlemci bulunamıyor: %s \n"
111014 -#: sunrpc/rpc_main.c:351
111015 +#: sunrpc/rpc_main.c:350
111016 msgid "cannot find any C preprocessor (cpp)\n"
111017 msgstr "hiç C ön işlemci (cpp) bulunamadı\n"
111019 -#: sunrpc/rpc_main.c:420
111020 +#: sunrpc/rpc_main.c:419
111021 #, c-format
111022 msgid "%s: C preprocessor failed with signal %d\n"
111023 msgstr "%s: C önişlemcisi %d sinyali vererek başarısız oldu\n"
111025 -#: sunrpc/rpc_main.c:423
111026 +#: sunrpc/rpc_main.c:422
111027 #, c-format
111028 msgid "%s: C preprocessor failed with exit code %d\n"
111029 msgstr "%s: C önişlemcisi %d çıkış kodu vererek başarısız oldu\n"
111031 -#: sunrpc/rpc_main.c:463
111032 +#: sunrpc/rpc_main.c:462
111033 #, c-format
111034 msgid "illegal nettype :`%s'\n"
111035 msgstr "kuraldışı ağ türü: `%s'\n"
111037 -#: sunrpc/rpc_main.c:1105
111038 +#: sunrpc/rpc_main.c:1104
111039 msgid "rpcgen: too many defines\n"
111040 msgstr "rpcgen: çok fazla atama\n"
111042 -#: sunrpc/rpc_main.c:1117
111043 +#: sunrpc/rpc_main.c:1116
111044 msgid "rpcgen: arglist coding error\n"
111045 msgstr "rpcgen: argüman listesi kodlama hatası\n"
111047 #. TRANS: the file will not be removed; this is an
111048 #. TRANS: informative message.
111049 -#: sunrpc/rpc_main.c:1150
111050 +#: sunrpc/rpc_main.c:1149
111051 #, c-format
111052 msgid "file `%s' already exists and may be overwritten\n"
111053 msgstr "`%s' dosyası zaten var ve üzerine yazılabilir\n"
111055 -#: sunrpc/rpc_main.c:1195
111056 +#: sunrpc/rpc_main.c:1194
111057 msgid "Cannot specify more than one input file!\n"
111058 msgstr "Bir girdi dosyasından fazlası belirtilemez!\n"
111060 -#: sunrpc/rpc_main.c:1365
111061 +#: sunrpc/rpc_main.c:1364
111062 msgid "This implementation doesn't support newstyle or MT-safe code!\n"
111063 msgstr "Bu tamamlama yenibiçimi ya da MT-safe kodu desteklemez!\n"
111065 -#: sunrpc/rpc_main.c:1374
111066 +#: sunrpc/rpc_main.c:1373
111067 msgid "Cannot use netid flag with inetd flag!\n"
111068 msgstr "AğKimlik flaması inetd flaması ile kullanılamaz!\n"
111070 -#: sunrpc/rpc_main.c:1386
111071 +#: sunrpc/rpc_main.c:1385
111072 msgid "Cannot use netid flag without TIRPC!\n"
111073 msgstr "AğKimlik flaması TIRPC olmaksızın kullanılamaz!\n"
111075 -#: sunrpc/rpc_main.c:1393
111076 +#: sunrpc/rpc_main.c:1392
111077 msgid "Cannot use table flags with newstyle!\n"
111078 msgstr "Tablo flamaları yenibiçimle kullanılamaz!\n"
111080 -#: sunrpc/rpc_main.c:1412
111081 +#: sunrpc/rpc_main.c:1411
111082 msgid "\"infile\" is required for template generation flags.\n"
111083 msgstr "\"girdiDosyası\" şablon üretim flamaları için gerekli.\n"
111085 -#: sunrpc/rpc_main.c:1417
111086 +#: sunrpc/rpc_main.c:1416
111087 msgid "Cannot have more than one file generation flag!\n"
111088 msgstr "Birden fazla dosya üretim flaması olamaz!?\n"
111090 -#: sunrpc/rpc_main.c:1426
111091 +#: sunrpc/rpc_main.c:1425
111092 #, c-format
111093 msgid "usage: %s infile\n"
111094 msgstr "kullanımı: %s girdi-dosyası\n"
111096 -#: sunrpc/rpc_main.c:1427
111097 +#: sunrpc/rpc_main.c:1426
111098 #, c-format
111099 msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
111100 msgstr "\t%s [-abkCLNTM][-Disim[=değer]] [-i boyut] [-I [-K saniye]] [-Y dosyaYolu] girdiDosyası\n"
111102 -#: sunrpc/rpc_main.c:1429
111103 +#: sunrpc/rpc_main.c:1428
111104 #, c-format
111105 msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
111106 msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o çıktıDosyası] [girdiDosyası]\n"
111108 -#: sunrpc/rpc_main.c:1431
111109 +#: sunrpc/rpc_main.c:1430
111110 #, c-format
111111 msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
111112 msgstr "\t%s [-s ağTürü]* [-o çıktıDosyası] [girdiDosyası]\n"
111114 -#: sunrpc/rpc_main.c:1432
111115 +#: sunrpc/rpc_main.c:1431
111116 #, c-format
111117 msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
111118 msgstr "\t%s [-n ağKimlik]* [-o çıktıDosyası] [girdiDosyası]\n"
111119 @@ -5031,7 +5035,7 @@
111120 msgid "while allocating hash table entry"
111121 msgstr "arama (hash) tablosu girdisi ayrılırken"
111123 -#: nscd/cache.c:150 nscd/connections.c:185
111124 +#: nscd/cache.c:150 nscd/connections.c:187
111125 #, c-format
111126 msgid "cannot stat() file `%s': %s"
111127 msgstr "`%s' dosyası stat() olamıyor: %s"
111128 @@ -5044,153 +5048,158 @@
111129 msgid "Cannot run nscd in secure mode as unprivileged user"
111130 msgstr "nscd güvenli kipte yetkisiz kullanıcı olarak çalıştırılamaz"
111132 -#: nscd/connections.c:199
111133 +#: nscd/connections.c:175
111134 +#, c-format
111135 +msgid "while allocating cache: %s"
111136 +msgstr "arabellek girdisi ayrılırken: %s"
111138 +#: nscd/connections.c:200
111139 #, c-format
111140 msgid "cannot open socket: %s"
111141 msgstr "soket açılamıyor: %s"
111143 -#: nscd/connections.c:217
111144 +#: nscd/connections.c:218
111145 #, c-format
111146 msgid "cannot enable socket to accept connections: %s"
111147 msgstr "bağlantıları kabul etmek üzere soket etkinleştirilemiyor: %s"
111149 -#: nscd/connections.c:259
111150 +#: nscd/connections.c:260
111151 #, c-format
111152 msgid "handle_request: request received (Version = %d)"
111153 msgstr "handle_request: istek alındı (Sürüm = %d)"
111155 -#: nscd/connections.c:265
111156 +#: nscd/connections.c:266
111157 #, c-format
111158 msgid "cannot handle old request version %d; current version is %d"
111159 msgstr "eski istem sürümü %d elde edilemedi; mevcut sürüm %d"
111161 -#: nscd/connections.c:303 nscd/connections.c:325
111162 +#: nscd/connections.c:304 nscd/connections.c:326
111163 #, c-format
111164 msgid "cannot write result: %s"
111165 msgstr "sonuç yazılamıyor: %s"
111167 -#: nscd/connections.c:404 nscd/connections.c:498
111168 +#: nscd/connections.c:405 nscd/connections.c:499
111169 #, c-format
111170 msgid "error getting callers id: %s"
111171 msgstr "çağrıcı kimliği alınırken hata: %s"
111173 -#: nscd/connections.c:470
111174 +#: nscd/connections.c:471
111175 #, c-format
111176 msgid "while accepting connection: %s"
111177 msgstr "bağlantı kabul edilirken: %s"
111179 -#: nscd/connections.c:481
111180 +#: nscd/connections.c:482
111181 #, c-format
111182 msgid "short read while reading request: %s"
111183 msgstr "istenen okuma kısa: %s"
111185 -#: nscd/connections.c:517
111186 +#: nscd/connections.c:518
111187 #, c-format
111188 msgid "key length in request too long: %d"
111189 msgstr "istenen anahtar uzunluğu fazla: %d"
111191 -#: nscd/connections.c:531
111192 +#: nscd/connections.c:532
111193 #, c-format
111194 msgid "short read while reading request key: %s"
111195 msgstr "istenen tuş okunurken kısa okuma: %s"
111197 -#: nscd/connections.c:590 nscd/connections.c:591 nscd/connections.c:610
111198 -#: nscd/connections.c:623 nscd/connections.c:629 nscd/connections.c:636
111199 +#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611
111200 +#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637
111201 #, c-format
111202 msgid "Failed to run nscd as user '%s'"
111203 msgstr "nscd '%s' kullanıcısı olarak çalıştırılamadı"
111205 -#: nscd/connections.c:611
111206 +#: nscd/connections.c:612
111207 msgid "getgrouplist failed"
111208 msgstr "getgrouplist başarısız"
111210 -#: nscd/connections.c:624
111211 +#: nscd/connections.c:625
111212 msgid "setgroups failed"
111213 msgstr "setgroups başarısız"
111215 -#: nscd/grpcache.c:102 nscd/hstcache.c:110 nscd/pwdcache.c:108
111216 +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
111217 msgid "while allocating key copy"
111218 msgstr "tuş kopyası ayrılırken"
111220 -#: nscd/grpcache.c:152 nscd/hstcache.c:167 nscd/pwdcache.c:145
111221 +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
111222 msgid "while allocating cache entry"
111223 msgstr "arabellek girdisi ayrılırken"
111225 -#: nscd/grpcache.c:195 nscd/hstcache.c:281 nscd/pwdcache.c:191
111226 +#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192
111227 #, c-format
111228 msgid "short write in %s: %s"
111229 msgstr "%s içinde kısa yazma: %s"
111231 -#: nscd/grpcache.c:217
111232 +#: nscd/grpcache.c:218
111233 #, c-format
111234 msgid "Haven't found \"%s\" in group cache!"
111235 msgstr "\"%s\" grup arabelleğinde yok!"
111237 -#: nscd/grpcache.c:292
111238 +#: nscd/grpcache.c:284
111239 #, c-format
111240 msgid "Invalid numeric gid \"%s\"!"
111241 msgstr "\"%s\" grup numarası geçersiz!"
111243 -#: nscd/grpcache.c:299
111244 +#: nscd/grpcache.c:291
111245 #, c-format
111246 msgid "Haven't found \"%d\" in group cache!"
111247 msgstr "\"%d\" grup arabelleğinde yok!"
111249 -#: nscd/hstcache.c:303 nscd/hstcache.c:378 nscd/hstcache.c:456
111250 -#: nscd/hstcache.c:533
111251 +#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435
111252 +#: nscd/hstcache.c:500
111253 #, c-format
111254 msgid "Haven't found \"%s\" in hosts cache!"
111255 msgstr "\"%s\" makinalar arabelleğinde yok!"
111257 -#: nscd/nscd.c:80
111258 +#: nscd/nscd.c:85
111259 msgid "Read configuration data from NAME"
111260 msgstr "Yapılandırma verisini İSİM den okur"
111262 -#: nscd/nscd.c:82
111263 +#: nscd/nscd.c:87
111264 msgid "Do not fork and display messages on the current tty"
111265 msgstr "Üzerinde çalışılan tty de iletiler ayrılmaz ve gösterilir"
111267 -#: nscd/nscd.c:83
111268 +#: nscd/nscd.c:88
111269 msgid "NUMBER"
111270 msgstr "SAYI"
111272 -#: nscd/nscd.c:83
111273 +#: nscd/nscd.c:88
111274 msgid "Start NUMBER threads"
111275 msgstr "SAYIlı başlıkları başlatır"
111277 -#: nscd/nscd.c:84
111278 +#: nscd/nscd.c:89
111279 msgid "Shut the server down"
111280 msgstr "Sunucuyu indirir"
111282 -#: nscd/nscd.c:85
111283 +#: nscd/nscd.c:90
111284 msgid "Print current configuration statistic"
111285 msgstr "Şu anki yapılandırma istatistiklerini basar"
111287 -#: nscd/nscd.c:86
111288 +#: nscd/nscd.c:91
111289 msgid "TABLE"
111290 msgstr "TABLO"
111292 -#: nscd/nscd.c:87
111293 +#: nscd/nscd.c:92
111294 msgid "Invalidate the specified cache"
111295 msgstr "Belirtilen arabellek geçersiz kılındı"
111297 -#: nscd/nscd.c:88
111298 +#: nscd/nscd.c:93
111299 msgid "TABLE,yes"
111300 msgstr "TABLO,evet"
111302 -#: nscd/nscd.c:88
111303 +#: nscd/nscd.c:93
111304 msgid "Use separate cache for each user"
111305 msgstr "Her kullanıcı için ayrı arabellek kullanılır"
111307 -#: nscd/nscd.c:93
111308 +#: nscd/nscd.c:98
111309 msgid "Name Service Cache Daemon."
111310 msgstr "Name Service Cache Daemon."
111312 -#: nscd/nscd.c:126
111313 +#: nscd/nscd.c:131
111314 msgid "already running"
111315 msgstr "Zaten çalışıyor"
111317 -#: nscd/nscd.c:192 nscd/nscd.c:212 nscd/nscd.c:218
111318 +#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269
111319 msgid "Only root is allowed to use this option!"
111320 msgstr "Bu seçenek sadece root tarafından kullanılabilir!"
111322 @@ -5280,22 +5289,22 @@
111323 "%15ld%% arabellekleme oranı\n"
111324 " /etc/%s'deki değişiklikler için %15s kontrol uygulandı\n"
111326 -#: nscd/pwdcache.c:213
111327 +#: nscd/pwdcache.c:214
111328 #, c-format
111329 msgid "Haven't found \"%s\" in password cache!"
111330 msgstr "\"%s\" parola arabelleğinde yok!"
111332 -#: nscd/pwdcache.c:288
111333 +#: nscd/pwdcache.c:280
111334 #, c-format
111335 msgid "Invalid numeric uid \"%s\"!"
111336 msgstr "\"%s\" kullanıcı numarası geçersiz!"
111338 -#: nscd/pwdcache.c:295
111339 +#: nscd/pwdcache.c:287
111340 #, c-format
111341 msgid "Haven't found \"%d\" in password cache!"
111342 msgstr "\"%d\" parola arabelleğinde yok!"
111344 -#: elf/../sysdeps/generic/dl-sysdep.c:297
111345 +#: elf/../sysdeps/generic/dl-sysdep.c:357
111346 msgid "cannot create capability list"
111347 msgstr "yetenek listesi oluşturulamıyor"
111349 @@ -5346,7 +5355,7 @@
111350 msgid ", OS ABI: %s %d.%d.%d"
111351 msgstr ", OS ABI: %s %d.%d.%d"
111353 -#: elf/cache.c:136 elf/ldconfig.c:1033
111354 +#: elf/cache.c:136 elf/ldconfig.c:1045
111355 #, c-format
111356 msgid "Can't open cache file %s\n"
111357 msgstr "Arabellek dosyası %s açılamıyor\n"
111358 @@ -5392,15 +5401,15 @@
111359 msgid "Renaming of %s to %s failed"
111360 msgstr "%s'in ismi %s olarak değiştirilemedi"
111362 -#: elf/dl-close.c:113
111363 +#: elf/dl-close.c:128
111364 msgid "shared object not open"
111365 msgstr "paylaşımlı nesne açık değil"
111367 -#: elf/dl-close.c:357 elf/dl-open.c:436
111368 +#: elf/dl-close.c:486 elf/dl-open.c:444
111369 msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
111370 msgstr "TLS üretecinin sayacı başa döndü! Lütfen 'glibcbug' betiğini kullanarak bir hata raporu gönderin."
111372 -#: elf/dl-deps.c:111 elf/dl-open.c:177
111373 +#: elf/dl-deps.c:111 elf/dl-open.c:183
111374 msgid "DST not allowed in SUID/SGID programs"
111375 msgstr "SUID/SGID programlarda DST'ye izin verilmez"
111377 @@ -5417,181 +5426,193 @@
111378 msgid "cannot allocate dependency list"
111379 msgstr "bağımlılık listesi ayrılamadı"
111381 -#: elf/dl-deps.c:492 elf/dl-deps.c:547
111382 +#: elf/dl-deps.c:494 elf/dl-deps.c:549
111383 msgid "cannot allocate symbol search list"
111384 msgstr "sembol arama listesi ayrılamadı"
111386 -#: elf/dl-deps.c:532
111387 +#: elf/dl-deps.c:534
111388 msgid "Filters not supported with LD_TRACE_PRELINKING"
111389 msgstr "LD_TRACE_PRELINKING'li süzgeçler destenlenmez"
111391 -#: elf/dl-error.c:73
111392 +#: elf/dl-error.c:75
111393 msgid "DYNAMIC LINKER BUG!!!"
111394 msgstr "DİNAMİK BAĞLAYICI HATASI!!!"
111396 -#: elf/dl-error.c:106
111397 +#: elf/dl-error.c:108
111398 msgid "error while loading shared libraries"
111399 msgstr "paylaşımlı kitaplıklar yüklenirken hata oluştu"
111401 -#: elf/dl-load.c:338
111402 +#: elf/dl-load.c:339
111403 msgid "cannot allocate name record"
111404 msgstr "isim kaydı ayrılamadı"
111406 -#: elf/dl-load.c:440 elf/dl-load.c:520 elf/dl-load.c:614 elf/dl-load.c:709
111407 +#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707
111408 msgid "cannot create cache for search path"
111409 msgstr "dosya arama yolu için arabellek oluşturulamıyor"
111411 -#: elf/dl-load.c:545
111412 +#: elf/dl-load.c:543
111413 msgid "cannot create RUNPATH/RPATH copy"
111414 msgstr "RUNPATH/RPATH kopyası oluşturulamıyor"
111416 -#: elf/dl-load.c:600
111417 +#: elf/dl-load.c:598
111418 msgid "cannot create search path array"
111419 msgstr "dosya arama yolu dizisi oluşturulamıyor"
111421 -#: elf/dl-load.c:796
111422 +#: elf/dl-load.c:794
111423 msgid "cannot stat shared object"
111424 msgstr "paylaşımlı nesne durumlanamıyor"
111426 -#: elf/dl-load.c:840
111427 +#: elf/dl-load.c:838
111428 msgid "cannot open zero fill device"
111429 msgstr "sıfırlar içeren aygıt açılamaz"
111431 -#: elf/dl-load.c:849 elf/dl-load.c:1855
111432 +#: elf/dl-load.c:847 elf/dl-load.c:1902
111433 msgid "cannot create shared object descriptor"
111434 msgstr "paylaşımlı nesne tanımlayıcı oluşturulamıyor"
111436 -#: elf/dl-load.c:868 elf/dl-load.c:1351 elf/dl-load.c:1434
111437 +#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481
111438 msgid "cannot read file data"
111439 msgstr "dosya verisi okunamıyor"
111441 -#: elf/dl-load.c:908
111442 +#: elf/dl-load.c:906
111443 msgid "ELF load command alignment not page-aligned"
111444 msgstr "ELF yükleme komutu hizalaması sayfa-hizalamalı değil"
111446 -#: elf/dl-load.c:915
111447 +#: elf/dl-load.c:913
111448 msgid "ELF load command address/offset not properly aligned"
111449 msgstr "ELF yükleme komutu adresi/başvurusu gereği gibi hizalanamıyor"
111451 -#: elf/dl-load.c:996
111452 +#: elf/dl-load.c:988
111453 +msgid "cannot allocate TLS data structures for initial thread"
111454 +msgstr "ilk kanak için TLS veri yapıları oluşturulamıyor"
111456 +#: elf/dl-load.c:1012
111457 +msgid "cannot handle TLS data"
111458 +msgstr "TLS verisi alınamıyor"
111460 +#: elf/dl-load.c:1047
111461 msgid "failed to map segment from shared object"
111462 msgstr "parça paylaşımlı nesneden eşleştirilemedi"
111464 -#: elf/dl-load.c:1020
111465 +#: elf/dl-load.c:1071
111466 msgid "cannot dynamically load executable"
111467 msgstr "çalıştırılabilir dosya dinamik olarak yüklenemiyor"
111469 -#: elf/dl-load.c:1081
111470 +#: elf/dl-load.c:1132
111471 msgid "cannot change memory protections"
111472 msgstr "bellek korumaları değiştirilemiyor"
111474 -#: elf/dl-load.c:1100
111475 +#: elf/dl-load.c:1151
111476 msgid "cannot map zero-fill pages"
111477 msgstr "sıfırlar içeren sayfalar eşleştirilemez"
111479 -#: elf/dl-load.c:1118
111480 +#: elf/dl-load.c:1169
111481 msgid "cannot allocate memory for program header"
111482 msgstr "uygulama başlığı için bellek ayrılamadı"
111484 -#: elf/dl-load.c:1149
111485 +#: elf/dl-load.c:1200
111486 msgid "object file has no dynamic section"
111487 msgstr "nesne dosyasının dinamik bölümü yok"
111489 -#: elf/dl-load.c:1193
111490 +#: elf/dl-load.c:1240
111491 msgid "shared object cannot be dlopen()ed"
111492 msgstr "paylaşımlı nesne dlopen()'lanamıyor"
111494 -#: elf/dl-load.c:1216
111495 +#: elf/dl-load.c:1263
111496 msgid "cannot create searchlist"
111497 msgstr "arama listesi oluşturulamıyor"
111499 -#: elf/dl-load.c:1351
111500 +#: elf/dl-load.c:1398
111501 msgid "file too short"
111502 msgstr "dosya çok küçük"
111504 -#: elf/dl-load.c:1374
111505 +#: elf/dl-load.c:1421
111506 msgid "invalid ELF header"
111507 msgstr "ELF başlığı geçersiz"
111509 -#: elf/dl-load.c:1383
111510 +#: elf/dl-load.c:1430
111511 msgid "ELF file data encoding not big-endian"
111512 msgstr "ELF dosyası verisinin kodlaması en-kıymetli-bayt-ilk (big-endian) değil"
111514 -#: elf/dl-load.c:1385
111515 +#: elf/dl-load.c:1432
111516 msgid "ELF file data encoding not little-endian"
111517 msgstr "ELF dosyası verisinin kodlaması en-kıymetli-bayt-son (little-endian) değil"
111519 -#: elf/dl-load.c:1389
111520 +#: elf/dl-load.c:1436
111521 msgid "ELF file version ident does not match current one"
111522 msgstr "ELF dosyası sürüm kimliği mevcut biriyle eşleşmiyor"
111524 -#: elf/dl-load.c:1393
111525 +#: elf/dl-load.c:1440
111526 msgid "ELF file OS ABI invalid"
111527 msgstr "ELF dosyası OS ABI geçersiz"
111529 -#: elf/dl-load.c:1395
111530 +#: elf/dl-load.c:1442
111531 msgid "ELF file ABI version invalid"
111532 msgstr "ELF dosyası ABI sürümü geçersiz"
111534 -#: elf/dl-load.c:1398
111535 +#: elf/dl-load.c:1445
111536 msgid "internal error"
111537 msgstr "iç hata"
111539 -#: elf/dl-load.c:1405
111540 +#: elf/dl-load.c:1452
111541 msgid "ELF file version does not match current one"
111542 msgstr "ELF dosyası sürümü mevcut biriyle eşleşmiyor"
111544 -#: elf/dl-load.c:1413
111545 +#: elf/dl-load.c:1460
111546 msgid "ELF file's phentsize not the expected size"
111547 msgstr "ELF dosyasının phent uzunluğu beklenen uzunlukta değil"
111549 -#: elf/dl-load.c:1419
111550 +#: elf/dl-load.c:1466
111551 msgid "only ET_DYN and ET_EXEC can be loaded"
111552 msgstr "sadece ET_DYN ve ET_EXEC yüklü olabilir"
111554 -#: elf/dl-load.c:1870
111555 +#: elf/dl-load.c:1917
111556 msgid "cannot open shared object file"
111557 msgstr "paylaşımlı nesne dosyası açılamıyor"
111559 -#: elf/dl-lookup.c:248 elf/dl-lookup.c:413
111560 +#: elf/dl-lookup.c:265 elf/dl-lookup.c:430
111561 msgid "relocation error"
111562 msgstr "yeniden konumlama hatası"
111564 -#: elf/dl-open.c:105
111565 +#: elf/dl-open.c:111
111566 msgid "cannot extend global scope"
111567 msgstr "genel kapsam genişletilemiyor"
111569 -#: elf/dl-open.c:208
111570 +#: elf/dl-open.c:214
111571 msgid "empty dynamic string token substitution"
111572 msgstr "boş dinamik dizge simge ikamesi"
111574 -#: elf/dl-open.c:345 elf/dl-open.c:356
111575 +#: elf/dl-open.c:351 elf/dl-open.c:362
111576 msgid "cannot create scope list"
111577 msgstr "etki alanı listesi oluşturulamıyor"
111579 -#: elf/dl-open.c:416
111580 +#: elf/dl-open.c:424
111581 msgid "cannot create TLS data structures"
111582 msgstr "TLS veri yapıları oluşturulamıyor"
111584 -#: elf/dl-open.c:478
111585 +#: elf/dl-open.c:486
111586 msgid "invalid mode for dlopen()"
111587 msgstr "dlopen() için kip geçersiz"
111589 -#: elf/dl-reloc.c:88
111590 +#: elf/dl-reloc.c:58
111591 +msgid "shared object cannot be dlopen()ed: static TLS memory too small"
111592 +msgstr "paylaşımlı nesne dlopen()'lanamıyor: statik TLS belleği çok küçük"
111594 +#: elf/dl-reloc.c:118
111595 msgid "cannot make segment writable for relocation"
111596 msgstr "yeniden konumlama için parça yazılabilir yapılamıyor"
111598 -#: elf/dl-reloc.c:174
111599 +#: elf/dl-reloc.c:219
111600 #, c-format
111601 msgid "%s: profiler found no PLTREL in object %s\n"
111602 msgstr "%s: profiler %s nesnesinde PLTREL bulamadı\n"
111604 -#: elf/dl-reloc.c:186
111605 +#: elf/dl-reloc.c:231
111606 #, c-format
111607 msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
111608 msgstr "%s: %s PLTREL gölgelenirken profiler bellekdışı\n"
111610 -#: elf/dl-reloc.c:201
111611 +#: elf/dl-reloc.c:246
111612 msgid "cannot restore segment prot after reloc"
111613 msgstr "reloc işleminden sonra prot segmanı eski haline getirilemedi"
111615 @@ -5647,119 +5668,119 @@
111616 msgid "Configure Dynamic Linker Run Time Bindings."
111617 msgstr "Dinamik Bağlayıcının İcra Zamanı Bağıntılarını Yapılandırır."
111619 -#: elf/ldconfig.c:282
111620 +#: elf/ldconfig.c:294
111621 #, c-format
111622 msgid "Path `%s' given more than once"
111623 msgstr "`%s' dosya yolu birden fazla verilmiş"
111625 -#: elf/ldconfig.c:326
111626 +#: elf/ldconfig.c:338
111627 #, c-format
111628 msgid "%s is not a known library type"
111629 msgstr "%s bilinen bir kitaplık türü değil"
111631 -#: elf/ldconfig.c:344
111632 +#: elf/ldconfig.c:356
111633 #, c-format
111634 msgid "Can't stat %s"
111635 msgstr "stat %s yapılamıyor"
111637 -#: elf/ldconfig.c:414
111638 +#: elf/ldconfig.c:426
111639 #, c-format
111640 msgid "Can't stat %s\n"
111641 msgstr "stat %s yapılamıyor\n"
111643 -#: elf/ldconfig.c:424
111644 +#: elf/ldconfig.c:436
111645 #, c-format
111646 msgid "%s is not a symbolic link\n"
111647 msgstr "%s bir sembolik bağ değil\n"
111649 -#: elf/ldconfig.c:443
111650 +#: elf/ldconfig.c:455
111651 #, c-format
111652 msgid "Can't unlink %s"
111653 msgstr "%s bağı kaldırılamadı"
111655 -#: elf/ldconfig.c:449
111656 +#: elf/ldconfig.c:461
111657 #, c-format
111658 msgid "Can't link %s to %s"
111659 msgstr "%s den %s'e bağ yapılamıyor"
111661 -#: elf/ldconfig.c:455
111662 +#: elf/ldconfig.c:467
111663 msgid " (changed)\n"
111664 msgstr " (değişti)\n"
111666 -#: elf/ldconfig.c:457
111667 +#: elf/ldconfig.c:469
111668 msgid " (SKIPPED)\n"
111669 msgstr " (ATLANDI)\n"
111671 -#: elf/ldconfig.c:512
111672 +#: elf/ldconfig.c:524
111673 #, c-format
111674 msgid "Can't find %s"
111675 msgstr "%s bulunamıyor"
111677 -#: elf/ldconfig.c:528
111678 +#: elf/ldconfig.c:540
111679 #, c-format
111680 msgid "Can't lstat %s"
111681 msgstr "lstat %s yapılamıyor"
111683 -#: elf/ldconfig.c:535
111684 +#: elf/ldconfig.c:547
111685 #, c-format
111686 msgid "Ignored file %s since it is not a regular file."
111687 msgstr "Normal bir dosya olmadığından %s dosyası yoksayıldı"
111689 -#: elf/ldconfig.c:543
111690 +#: elf/ldconfig.c:555
111691 #, c-format
111692 msgid "No link created since soname could not be found for %s"
111693 msgstr "%s için kitaplık ismi bulunamadığından bağ oluşturulmadı"
111695 -#: elf/ldconfig.c:634
111696 +#: elf/ldconfig.c:646
111697 #, c-format
111698 msgid "Can't open directory %s"
111699 msgstr "%s dizini açılamıyor"
111701 -#: elf/ldconfig.c:689 elf/ldconfig.c:736
111702 +#: elf/ldconfig.c:701 elf/ldconfig.c:748
111703 #, c-format
111704 msgid "Cannot lstat %s"
111705 msgstr "lstat %s yapılamıyor"
111707 -#: elf/ldconfig.c:701
111708 +#: elf/ldconfig.c:713
111709 #, c-format
111710 msgid "Cannot stat %s"
111711 msgstr "stat %s yapılamıyor"
111713 -#: elf/ldconfig.c:758 elf/readlib.c:93
111714 +#: elf/ldconfig.c:770 elf/readlib.c:93
111715 #, c-format
111716 msgid "Input file %s not found.\n"
111717 msgstr "Girdi dosyası %s bulunamadı.\n"
111719 -#: elf/ldconfig.c:792
111720 +#: elf/ldconfig.c:804
111721 #, c-format
111722 msgid "libc5 library %s in wrong directory"
111723 msgstr "libc5 kitaplığı %s yanlış dizinde"
111725 -#: elf/ldconfig.c:795
111726 +#: elf/ldconfig.c:807
111727 #, c-format
111728 msgid "libc6 library %s in wrong directory"
111729 msgstr "libc6 kitaplığı %s yanlış dizinde"
111731 -#: elf/ldconfig.c:798
111732 +#: elf/ldconfig.c:810
111733 #, c-format
111734 msgid "libc4 library %s in wrong directory"
111735 msgstr "libc4 kitaplığı %s yanlış dizinde"
111737 -#: elf/ldconfig.c:825
111738 +#: elf/ldconfig.c:837
111739 #, c-format
111740 msgid "libraries %s and %s in directory %s have same soname but different type."
111741 msgstr "%s ve %s kitaplıkları %s dizininde ve aynı isme sahip oldukları halde farklı türde."
111743 -#: elf/ldconfig.c:928
111744 +#: elf/ldconfig.c:940
111745 #, c-format
111746 msgid "Can't open configuration file %s"
111747 msgstr "Yapılandırma dosyası %s açılamıyor"
111749 -#: elf/ldconfig.c:1012
111750 +#: elf/ldconfig.c:1024
111751 msgid "Can't chdir to /"
111752 msgstr "/ dizinine geçilemiyor"
111754 -#: elf/ldconfig.c:1054
111755 +#: elf/ldconfig.c:1066
111756 #, c-format
111757 msgid "Can't open cache file directory %s\n"
111758 msgstr "Arabellek dosyasının dizini %s açılamıyor\n"
111759 Binary files glibc-2.3.2/po/zh_CN.mo and glibc-2.3.2-200304020432/po/zh_CN.mo differ
111760 Binary files glibc-2.3.2/po/zh_TW.mo and glibc-2.3.2-200304020432/po/zh_TW.mo differ
111761 diff -u -udbrN glibc-2.3.2/posix/Makefile glibc-2.3.2-200304020432/posix/Makefile
111762 --- glibc-2.3.2/posix/Makefile Sun Feb 23 10:23:05 2003
111763 +++ glibc-2.3.2-200304020432/posix/Makefile Wed Mar 19 23:32:19 2003
111764 @@ -75,7 +75,7 @@
111765 tst-chmod bug-regex1 bug-regex2 bug-regex3 bug-regex4 \
111766 tst-gnuglob tst-regex bug-regex5 bug-regex6 bug-regex7 \
111767 bug-regex8 bug-regex9 bug-regex10 bug-regex11 bug-regex12 \
111768 - bug-regex13 bug-regex14 bug-regex15 bug-regex16
111769 + bug-regex13 bug-regex14 bug-regex15 bug-regex16 tst-nice
111770 ifeq (yes,$(build-shared))
111771 test-srcs := globtest
111772 tests += wordexp-test tst-exec tst-spawn
111773 diff -u -udbrN glibc-2.3.2/posix/confstr.c glibc-2.3.2-200304020432/posix/confstr.c
111774 --- glibc-2.3.2/posix/confstr.c Wed Feb 12 22:15:00 2003
111775 +++ glibc-2.3.2-200304020432/posix/confstr.c Wed Mar 5 04:02:26 2003
111776 @@ -143,12 +143,13 @@
111778 case _CS_GNU_LIBC_VERSION:
111779 string = "glibc " VERSION;
111780 - string_len = strlen (string);
111781 + string_len = sizeof ("glibc " VERSION);
111782 + break;
111784 case _CS_GNU_LIBPTHREAD_VERSION:
111785 #ifdef LIBPTHREAD_VERSION
111786 string = LIBPTHREAD_VERSION;
111787 - string_len = strlen (string);
111788 + string_len = sizeof LIBPTHREAD_VERSION;
111789 break;
111790 #else
111791 /* No thread library. */
111792 diff -u -udbrN glibc-2.3.2/posix/fnmatch.c glibc-2.3.2-200304020432/posix/fnmatch.c
111793 --- glibc-2.3.2/posix/fnmatch.c Sun Aug 4 06:32:39 2002
111794 +++ glibc-2.3.2-200304020432/posix/fnmatch.c Sun Mar 16 02:03:46 2003
111795 @@ -1,4 +1,5 @@
111796 -/* Copyright (C) 1991-93,96-99,2000,01,02 Free Software Foundation, Inc.
111797 +/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003
111798 + Free Software Foundation, Inc.
111799 This file is part of the GNU C Library.
111801 The GNU C Library is free software; you can redistribute it and/or
111802 @@ -333,7 +334,7 @@
111803 /* Convert the strings into wide characters. */
111804 memset (&ps, '\0', sizeof (ps));
111805 n = mbsrtowcs (NULL, &pattern, 0, &ps);
111806 - if (__builtin_expect (n, 0) == (size_t) -1)
111807 + if (__builtin_expect (n == (size_t) -1, 0))
111808 /* Something wrong.
111809 XXX Do we have to set `errno' to something which mbsrtows hasn't
111810 already done? */
111811 @@ -344,7 +345,7 @@
111813 assert (mbsinit (&ps));
111814 n = mbsrtowcs (NULL, &string, 0, &ps);
111815 - if (__builtin_expect (n, 0) == (size_t) -1)
111816 + if (__builtin_expect (n == (size_t) -1, 0))
111817 /* Something wrong.
111818 XXX Do we have to set `errno' to something which mbsrtows hasn't
111819 already done? */
111820 diff -u -udbrN glibc-2.3.2/posix/fnmatch_loop.c glibc-2.3.2-200304020432/posix/fnmatch_loop.c
111821 --- glibc-2.3.2/posix/fnmatch_loop.c Mon Mar 11 09:32:00 2002
111822 +++ glibc-2.3.2-200304020432/posix/fnmatch_loop.c Sun Mar 16 04:22:23 2003
111823 @@ -1,4 +1,5 @@
111824 -/* Copyright (C) 1991-1993, 1996-2000, 2001 Free Software Foundation, Inc.
111825 +/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2003
111826 + Free Software Foundation, Inc.
111827 This file is part of the GNU C Library.
111829 The GNU C Library is free software; you can redistribute it and/or
111830 @@ -539,11 +540,13 @@
111831 if (! is_range)
111833 # ifdef WIDE_CHAR_VERSION
111834 - for (c1 = 0; c1 < wextra[idx]; ++c1)
111835 + for (c1 = 0;
111836 + (int32_t) c1 < wextra[idx];
111837 + ++c1)
111838 if (n[c1] != wextra[1 + c1])
111839 break;
111841 - if (c1 == wextra[idx])
111842 + if ((int32_t) c1 == wextra[idx])
111843 goto matched;
111844 # else
111845 for (c1 = 0; c1 < extra[idx]; ++c1)
111846 @@ -932,7 +935,7 @@
111847 case L('/'):
111848 if (NO_LEADING_PERIOD (flags))
111850 - if (n == string_end || c != *n)
111851 + if (n == string_end || c != (UCHAR) *n)
111852 return FNM_NOMATCH;
111854 new_no_leading_period = 1;
111855 diff -u -udbrN glibc-2.3.2/posix/getconf.c glibc-2.3.2-200304020432/posix/getconf.c
111856 --- glibc-2.3.2/posix/getconf.c Wed Feb 12 22:09:19 2003
111857 +++ glibc-2.3.2-200304020432/posix/getconf.c Fri Mar 14 07:20:08 2003
111858 @@ -865,6 +865,9 @@
111859 #ifdef _CS_GNU_LIBPTHREAD_VERSION
111860 { "GNU_LIBPTHREAD_VERSION", _CS_GNU_LIBPTHREAD_VERSION, CONFSTR },
111861 #endif
111862 +#ifdef _PC_2_SYMLINKS
111863 + { "POSIX2_SYMLINKS", _PC_2_SYMLINKS, PATHCONF },
111864 +#endif
111866 { NULL, 0, SYSCONF }
111868 diff -u -udbrN glibc-2.3.2/posix/glob/ChangeLog glibc-2.3.2-200304020432/posix/glob/ChangeLog
111869 --- glibc-2.3.2/posix/glob/ChangeLog Thu Jan 1 01:00:00 1970
111870 +++ glibc-2.3.2-200304020432/posix/glob/ChangeLog Fri Jul 26 02:34:28 1996
111871 @@ -0,0 +1,23 @@
111872 +Sat Jul 20 21:55:31 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
111874 + Win32 hacks from <Rob_Tulloh@tivoli.com>.
111875 + * posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;
111876 + use void * for my_realloc; include <malloc.h> for alloca.
111877 + (glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable.
111878 + * posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].
111879 + * posix/glob.h: Likewise.
111881 +Fri Jul 19 16:56:41 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
111883 + * posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA]
111884 + for `struct stat;' forward decl.
111886 +Sat Jun 22 10:44:09 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
111888 + * posix/glob.c: Include <alloca.h> only [HAVE_ALLOCA_H], not [sparc].
111890 +Fri Jun 21 00:27:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
111892 + * posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr
111893 + only for ?s, not for *s. Fix from Chet Ramey.
111895 diff -u -udbrN glibc-2.3.2/posix/glob/Makefile.ami glibc-2.3.2-200304020432/posix/glob/Makefile.ami
111896 --- glibc-2.3.2/posix/glob/Makefile.ami Thu Jan 1 01:00:00 1970
111897 +++ glibc-2.3.2-200304020432/posix/glob/Makefile.ami Tue Aug 27 00:40:48 2002
111898 @@ -0,0 +1,69 @@
111899 +# Makefile for standalone distribution of libglob.a (fnmatch, glob).
111901 +# Copyright (C) 1991, 92, 93, 94, 95, 97 Free Software Foundation, Inc.
111902 +# This file is part of the GNU C Library.
111904 +# This library is free software; you can redistribute it and/or
111905 +# modify it under the terms of the GNU Lesser General Public License
111906 +# as published by the Free Software Foundation; either version 2.1 of
111907 +# the License, or (at your option) any later version.
111909 +# This library is distributed in the hope that it will be useful,
111910 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
111911 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
111912 +# Lesser General Public License for more details.
111914 +# You should have received a copy of the GNU Lesser General Public
111915 +# License along with the GNU C Library; see the file COPYING.LIB. If not,
111916 +# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
111917 +# Boston, MA 02111-1307, USA.
111919 +# Ultrix 2.2 make doesn't expand the value of VPATH.
111920 +VPATH = /glob/
111921 +# This must repeat the value, because configure will remove `VPATH = .'.
111922 +srcdir = /glob/
111924 +CC = sc
111925 +RM = delete
111926 +CPPFLAGS =
111927 +CFLAGS =
111929 +# Information determined by configure.
111930 +DEFS = Define HAVE_HEADER_STDC Define HAVE_UNISTD_H Define HAVE_STRING_H \
111931 + Define HAVE_DIRENT_H
111933 +# How to invoke ar.
111934 +AR = join
111935 +ARFLAGS = as
111937 +# How to invoke ranlib.
111938 +RANLIB = ;
111940 +.PHONY: all
111941 +all: glob.lib
111943 +glob.lib : glob.o fnmatch.o
111944 + $(AR) $(ARFLAGS) $@ glob.o fnmatch.o
111945 + $(RANLIB) $@
111947 +# For some reason, Unix make wants the dependencies on the source files.
111948 +# Otherwise it refuses to use an implicit rule!
111949 +# And, get this: it doesn't work to use $(srcdir)foo.c!!
111950 +glob.o: $(srcdir)glob.h $(srcdir)fnmatch.h glob.c
111951 +fnmatch.o: $(srcdir)fnmatch.h fnmatch.c
111953 +OUTPUT_OPTION =
111954 +.c.o:
111955 + $(CC) IDir "" \
111956 + $(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)
111958 +.PHONY: clean realclean glob-clean glob-realclean distclean
111959 +clean glob-clean:
111960 + -$(RM) glob.lib "#?.o" core
111961 +distclean glob-realclean: clean
111962 + -$(RM) TAGS tags Makefile config.status config.h config.log
111963 +realcean: distclean
111965 +# For inside the C library.
111966 +glob.tar glob.tar.Z:
111967 + $(MAKE) -C .. $@
111968 diff -u -udbrN glibc-2.3.2/posix/glob/Makefile.in glibc-2.3.2-200304020432/posix/glob/Makefile.in
111969 --- glibc-2.3.2/posix/glob/Makefile.in Thu Jan 1 01:00:00 1970
111970 +++ glibc-2.3.2-200304020432/posix/glob/Makefile.in Tue Aug 27 00:39:49 2002
111971 @@ -0,0 +1,66 @@
111972 +# Makefile for standalone distribution of libglob.a (fnmatch, glob).
111974 +# Copyright (C) 1991, 92, 93, 94, 95 Free Software Foundation, Inc.
111975 +# This file is part of the GNU C Library.
111977 +# This library is free software; you can redistribute it and/or
111978 +# modify it under the terms of the GNU Lesser General Public License
111979 +# as published by the Free Software Foundation; either version 2.1 of
111980 +# the License, or (at your option) any later version.
111982 +# This library is distributed in the hope that it will be useful,
111983 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
111984 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
111985 +# Lesser General Public License for more details.
111987 +# You should have received a copy of the GNU Lesser General Public
111988 +# License along with this library; see the file COPYING.LIB. If
111989 +# not, write to the Free Software Foundation, Inc., 59 Temple Place,
111990 +# Suite 330, Boston, MA 02111 USA.
111992 +# Ultrix 2.2 make doesn't expand the value of VPATH.
111993 +VPATH = @srcdir@
111994 +# This must repeat the value, because configure will remove `VPATH = .'.
111995 +srcdir = @srcdir@
111997 +CC = @CC@
111998 +CPPFLAGS = @CPPFLAGS@
111999 +CFLAGS = @CFLAGS@
112001 +# Information determined by configure.
112002 +DEFS = @DEFS@
112004 +# How to invoke ar.
112005 +AR = @AR@
112006 +ARFLAGS = rv
112008 +# How to invoke ranlib.
112009 +RANLIB = @RANLIB@
112011 +.PHONY: all
112012 +all: libglob.a
112014 +libglob.a: glob.o fnmatch.o
112015 + $(AR) $(ARFLAGS) $@ glob.o fnmatch.o
112016 + $(RANLIB) $@
112018 +# For some reason, Unix make wants the dependencies on the source files.
112019 +# Otherwise it refuses to use an implicit rule!
112020 +# And, get this: it doesn't work to use $(srcdir)/foo.c!!
112021 +glob.o: $(srcdir)/glob.h $(srcdir)/fnmatch.h glob.c
112022 +fnmatch.o: $(srcdir)/fnmatch.h fnmatch.c
112024 +.c.o:
112025 + $(CC) -I. -I$(srcdir) -c \
112026 + $(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)
112028 +.PHONY: clean realclean glob-clean glob-realclean distclean
112029 +clean glob-clean:
112030 + -rm -f libglob.a *.o core
112031 +distclean glob-realclean: clean
112032 + -rm -f TAGS tags Makefile config.status config.h config.log
112033 +realcean: distclean
112035 +# For inside the C library.
112036 +glob.tar glob.tar.Z:
112037 + $(MAKE) -C .. $@
112038 diff -u -udbrN glibc-2.3.2/posix/glob/SCOPTIONS glibc-2.3.2-200304020432/posix/glob/SCOPTIONS
112039 --- glibc-2.3.2/posix/glob/SCOPTIONS Thu Jan 1 01:00:00 1970
112040 +++ glibc-2.3.2-200304020432/posix/glob/SCOPTIONS Thu May 9 19:54:36 1996
112041 @@ -0,0 +1,13 @@
112042 +ERRORREXX
112043 +OPTIMIZE
112044 +NOVERSION
112045 +OPTIMIZERTIME
112046 +OPTIMIZERALIAS
112047 +DEFINE INCLUDEDIR="include:"
112048 +DEFINE LIBDIR="lib:"
112049 +DEFINE NO_ALLOCA
112050 +DEFINE NO_FLOAT
112051 +DEFINE NO_ARCHIVES
112052 +IGNORE=161
112053 +IGNORE=100
112054 +STARTUP=cres
112055 diff -u -udbrN glibc-2.3.2/posix/glob/SMakefile glibc-2.3.2-200304020432/posix/glob/SMakefile
112056 --- glibc-2.3.2/posix/glob/SMakefile Thu Jan 1 01:00:00 1970
112057 +++ glibc-2.3.2-200304020432/posix/glob/SMakefile Fri Jul 6 06:55:38 2001
112058 @@ -0,0 +1,68 @@
112059 +# Makefile for standalone distribution of libglob.a (fnmatch, glob).
112060 +# Copyright (C) 1991, 92, 93, 94, 95, 97 Free Software Foundation, Inc.
112061 +# This file is part of the GNU C Library.
112063 +# The GNU C Library is free software; you can redistribute it and/or
112064 +# modify it under the terms of the GNU Lesser General Public
112065 +# License as published by the Free Software Foundation; either
112066 +# version 2.1 of the License, or (at your option) any later version.
112068 +# The GNU C Library is distributed in the hope that it will be useful,
112069 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
112070 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
112071 +# Lesser General Public License for more details.
112073 +# You should have received a copy of the GNU Lesser General Public
112074 +# License along with the GNU C Library; if not, write to the Free
112075 +# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
112076 +# 02111-1307 USA.
112078 +# Ultrix 2.2 make doesn't expand the value of VPATH.
112079 +VPATH = /glob/
112080 +# This must repeat the value, because configure will remove `VPATH = .'.
112081 +srcdir = /glob/
112083 +CC = sc
112084 +CPPFLAGS =
112085 +CFLAGS =
112086 +MAKE = smake
112087 +RM = delete
112089 +# Information determined by configure.
112090 +DEFS = Define HAVE_HEADER_STDC Define HAVE_UNISTD_H Define HAVE_STRING_H \
112091 + Define HAVE_DIRENT_H
112093 +# How to invoke ar.
112094 +AR = join
112095 +ARFLAGS = as
112097 +# How to invoke ranlib.
112098 +RANLIB = ;
112100 +.PHONY: all
112101 +all: glob.lib
112103 +glob.lib : glob.o fnmatch.o
112104 + $(AR) $(ARFLAGS) $@ glob.o fnmatch.o
112105 + $(RANLIB) $@
112107 +# For some reason, Unix make wants the dependencies on the source files.
112108 +# Otherwise it refuses to use an implicit rule!
112109 +# And, get this: it doesn't work to use $(srcdir)foo.c!!
112110 +glob.o: $(srcdir)glob.h $(srcdir)fnmatch.h glob.c
112111 +fnmatch.o: $(srcdir)fnmatch.h fnmatch.c
112113 +.c.o:
112114 + $(CC) IDir "" \
112115 + $(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)
112117 +.PHONY: clean realclean glob-clean glob-realclean distclean
112118 +clean glob-clean:
112119 + -$(RM) -f glob.lib *.o core
112120 +distclean glob-realclean: clean
112121 + -$(RM) -f TAGS tags Makefile config.status config.h config.log
112122 +realcean: distclean
112124 +# For inside the C library.
112125 +glob.tar glob.tar.Z:
112126 + $(MAKE) -C .. $@
112127 diff -u -udbrN glibc-2.3.2/posix/glob/configure glibc-2.3.2-200304020432/posix/glob/configure
112128 --- glibc-2.3.2/posix/glob/configure Thu Jan 1 01:00:00 1970
112129 +++ glibc-2.3.2-200304020432/posix/glob/configure Fri Mar 1 18:19:22 1996
112130 @@ -0,0 +1,1664 @@
112131 +#! /bin/sh
112133 +# Guess values for system-dependent variables and create Makefiles.
112134 +# Generated automatically using autoconf version 2.7
112135 +# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
112137 +# This configure script is free software; the Free Software Foundation
112138 +# gives unlimited permission to copy, distribute and modify it.
112140 +# Defaults:
112141 +ac_help=
112142 +ac_default_prefix=/usr/local
112143 +# Any additions from configure.in:
112145 +# Initialize some variables set by options.
112146 +# The variables have the same names as the options, with
112147 +# dashes changed to underlines.
112148 +build=NONE
112149 +cache_file=./config.cache
112150 +exec_prefix=NONE
112151 +host=NONE
112152 +no_create=
112153 +nonopt=NONE
112154 +no_recursion=
112155 +prefix=NONE
112156 +program_prefix=NONE
112157 +program_suffix=NONE
112158 +program_transform_name=s,x,x,
112159 +silent=
112160 +site=
112161 +srcdir=
112162 +target=NONE
112163 +verbose=
112164 +x_includes=NONE
112165 +x_libraries=NONE
112166 +bindir='${exec_prefix}/bin'
112167 +sbindir='${exec_prefix}/sbin'
112168 +libexecdir='${exec_prefix}/libexec'
112169 +datadir='${prefix}/share'
112170 +sysconfdir='${prefix}/etc'
112171 +sharedstatedir='${prefix}/com'
112172 +localstatedir='${prefix}/var'
112173 +libdir='${exec_prefix}/lib'
112174 +includedir='${prefix}/include'
112175 +oldincludedir='/usr/include'
112176 +infodir='${prefix}/info'
112177 +mandir='${prefix}/man'
112179 +# Initialize some other variables.
112180 +subdirs=
112181 +MFLAGS= MAKEFLAGS=
112183 +ac_prev=
112184 +for ac_option
112187 + # If the previous option needs an argument, assign it.
112188 + if test -n "$ac_prev"; then
112189 + eval "$ac_prev=\$ac_option"
112190 + ac_prev=
112191 + continue
112194 + case "$ac_option" in
112195 + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
112196 + *) ac_optarg= ;;
112197 + esac
112199 + # Accept the important Cygnus configure options, so we can diagnose typos.
112201 + case "$ac_option" in
112203 + -bindir | --bindir | --bindi | --bind | --bin | --bi)
112204 + ac_prev=bindir ;;
112205 + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
112206 + bindir="$ac_optarg" ;;
112208 + -build | --build | --buil | --bui | --bu)
112209 + ac_prev=build ;;
112210 + -build=* | --build=* | --buil=* | --bui=* | --bu=*)
112211 + build="$ac_optarg" ;;
112213 + -cache-file | --cache-file | --cache-fil | --cache-fi \
112214 + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
112215 + ac_prev=cache_file ;;
112216 + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
112217 + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
112218 + cache_file="$ac_optarg" ;;
112220 + -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
112221 + ac_prev=datadir ;;
112222 + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
112223 + | --da=*)
112224 + datadir="$ac_optarg" ;;
112226 + -disable-* | --disable-*)
112227 + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
112228 + # Reject names that are not valid shell variable names.
112229 + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
112230 + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
112232 + ac_feature=`echo $ac_feature| sed 's/-/_/g'`
112233 + eval "enable_${ac_feature}=no" ;;
112235 + -enable-* | --enable-*)
112236 + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
112237 + # Reject names that are not valid shell variable names.
112238 + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
112239 + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
112241 + ac_feature=`echo $ac_feature| sed 's/-/_/g'`
112242 + case "$ac_option" in
112243 + *=*) ;;
112244 + *) ac_optarg=yes ;;
112245 + esac
112246 + eval "enable_${ac_feature}='$ac_optarg'" ;;
112248 + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
112249 + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
112250 + | --exec | --exe | --ex)
112251 + ac_prev=exec_prefix ;;
112252 + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
112253 + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
112254 + | --exec=* | --exe=* | --ex=*)
112255 + exec_prefix="$ac_optarg" ;;
112257 + -gas | --gas | --ga | --g)
112258 + # Obsolete; use --with-gas.
112259 + with_gas=yes ;;
112261 + -help | --help | --hel | --he)
112262 + # Omit some internal or obsolete options to make the list less imposing.
112263 + # This message is too long to be a string in the A/UX 3.1 sh.
112264 + cat << EOF
112265 +Usage: configure [options] [host]
112266 +Options: [defaults in brackets after descriptions]
112267 +Configuration:
112268 + --cache-file=FILE cache test results in FILE
112269 + --help print this message
112270 + --no-create do not create output files
112271 + --quiet, --silent do not print \`checking...' messages
112272 + --version print the version of autoconf that created configure
112273 +Directory and file names:
112274 + --prefix=PREFIX install architecture-independent files in PREFIX
112275 + [$ac_default_prefix]
112276 + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
112277 + [same as prefix]
112278 + --bindir=DIR user executables in DIR [EPREFIX/bin]
112279 + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
112280 + --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
112281 + --datadir=DIR read-only architecture-independent data in DIR
112282 + [PREFIX/share]
112283 + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
112284 + --sharedstatedir=DIR modifiable architecture-independent data in DIR
112285 + [PREFIX/com]
112286 + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
112287 + --libdir=DIR object code libraries in DIR [EPREFIX/lib]
112288 + --includedir=DIR C header files in DIR [PREFIX/include]
112289 + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
112290 + --infodir=DIR info documentation in DIR [PREFIX/info]
112291 + --mandir=DIR man documentation in DIR [PREFIX/man]
112292 + --srcdir=DIR find the sources in DIR [configure dir or ..]
112293 + --program-prefix=PREFIX prepend PREFIX to installed program names
112294 + --program-suffix=SUFFIX append SUFFIX to installed program names
112295 + --program-transform-name=PROGRAM
112296 + run sed PROGRAM on installed program names
112298 + cat << EOF
112299 +Host type:
112300 + --build=BUILD configure for building on BUILD [BUILD=HOST]
112301 + --host=HOST configure for HOST [guessed]
112302 + --target=TARGET configure for TARGET [TARGET=HOST]
112303 +Features and packages:
112304 + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
112305 + --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
112306 + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
112307 + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
112308 + --x-includes=DIR X include files are in DIR
112309 + --x-libraries=DIR X library files are in DIR
112311 + if test -n "$ac_help"; then
112312 + echo "--enable and --with options recognized:$ac_help"
112314 + exit 0 ;;
112316 + -host | --host | --hos | --ho)
112317 + ac_prev=host ;;
112318 + -host=* | --host=* | --hos=* | --ho=*)
112319 + host="$ac_optarg" ;;
112321 + -includedir | --includedir | --includedi | --included | --include \
112322 + | --includ | --inclu | --incl | --inc)
112323 + ac_prev=includedir ;;
112324 + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
112325 + | --includ=* | --inclu=* | --incl=* | --inc=*)
112326 + includedir="$ac_optarg" ;;
112328 + -infodir | --infodir | --infodi | --infod | --info | --inf)
112329 + ac_prev=infodir ;;
112330 + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
112331 + infodir="$ac_optarg" ;;
112333 + -libdir | --libdir | --libdi | --libd)
112334 + ac_prev=libdir ;;
112335 + -libdir=* | --libdir=* | --libdi=* | --libd=*)
112336 + libdir="$ac_optarg" ;;
112338 + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
112339 + | --libexe | --libex | --libe)
112340 + ac_prev=libexecdir ;;
112341 + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
112342 + | --libexe=* | --libex=* | --libe=*)
112343 + libexecdir="$ac_optarg" ;;
112345 + -localstatedir | --localstatedir | --localstatedi | --localstated \
112346 + | --localstate | --localstat | --localsta | --localst \
112347 + | --locals | --local | --loca | --loc | --lo)
112348 + ac_prev=localstatedir ;;
112349 + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
112350 + | --localstate=* | --localstat=* | --localsta=* | --localst=* \
112351 + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
112352 + localstatedir="$ac_optarg" ;;
112354 + -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
112355 + ac_prev=mandir ;;
112356 + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
112357 + mandir="$ac_optarg" ;;
112359 + -nfp | --nfp | --nf)
112360 + # Obsolete; use --without-fp.
112361 + with_fp=no ;;
112363 + -no-create | --no-create | --no-creat | --no-crea | --no-cre \
112364 + | --no-cr | --no-c)
112365 + no_create=yes ;;
112367 + -no-recursion | --no-recursion | --no-recursio | --no-recursi \
112368 + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
112369 + no_recursion=yes ;;
112371 + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
112372 + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
112373 + | --oldin | --oldi | --old | --ol | --o)
112374 + ac_prev=oldincludedir ;;
112375 + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
112376 + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
112377 + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
112378 + oldincludedir="$ac_optarg" ;;
112380 + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
112381 + ac_prev=prefix ;;
112382 + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
112383 + prefix="$ac_optarg" ;;
112385 + -program-prefix | --program-prefix | --program-prefi | --program-pref \
112386 + | --program-pre | --program-pr | --program-p)
112387 + ac_prev=program_prefix ;;
112388 + -program-prefix=* | --program-prefix=* | --program-prefi=* \
112389 + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
112390 + program_prefix="$ac_optarg" ;;
112392 + -program-suffix | --program-suffix | --program-suffi | --program-suff \
112393 + | --program-suf | --program-su | --program-s)
112394 + ac_prev=program_suffix ;;
112395 + -program-suffix=* | --program-suffix=* | --program-suffi=* \
112396 + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
112397 + program_suffix="$ac_optarg" ;;
112399 + -program-transform-name | --program-transform-name \
112400 + | --program-transform-nam | --program-transform-na \
112401 + | --program-transform-n | --program-transform- \
112402 + | --program-transform | --program-transfor \
112403 + | --program-transfo | --program-transf \
112404 + | --program-trans | --program-tran \
112405 + | --progr-tra | --program-tr | --program-t)
112406 + ac_prev=program_transform_name ;;
112407 + -program-transform-name=* | --program-transform-name=* \
112408 + | --program-transform-nam=* | --program-transform-na=* \
112409 + | --program-transform-n=* | --program-transform-=* \
112410 + | --program-transform=* | --program-transfor=* \
112411 + | --program-transfo=* | --program-transf=* \
112412 + | --program-trans=* | --program-tran=* \
112413 + | --progr-tra=* | --program-tr=* | --program-t=*)
112414 + program_transform_name="$ac_optarg" ;;
112416 + -q | -quiet | --quiet | --quie | --qui | --qu | --q \
112417 + | -silent | --silent | --silen | --sile | --sil)
112418 + silent=yes ;;
112420 + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
112421 + ac_prev=sbindir ;;
112422 + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
112423 + | --sbi=* | --sb=*)
112424 + sbindir="$ac_optarg" ;;
112426 + -sharedstatedir | --sharedstatedir | --sharedstatedi \
112427 + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
112428 + | --sharedst | --shareds | --shared | --share | --shar \
112429 + | --sha | --sh)
112430 + ac_prev=sharedstatedir ;;
112431 + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
112432 + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
112433 + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
112434 + | --sha=* | --sh=*)
112435 + sharedstatedir="$ac_optarg" ;;
112437 + -site | --site | --sit)
112438 + ac_prev=site ;;
112439 + -site=* | --site=* | --sit=*)
112440 + site="$ac_optarg" ;;
112442 + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
112443 + ac_prev=srcdir ;;
112444 + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
112445 + srcdir="$ac_optarg" ;;
112447 + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
112448 + | --syscon | --sysco | --sysc | --sys | --sy)
112449 + ac_prev=sysconfdir ;;
112450 + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
112451 + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
112452 + sysconfdir="$ac_optarg" ;;
112454 + -target | --target | --targe | --targ | --tar | --ta | --t)
112455 + ac_prev=target ;;
112456 + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
112457 + target="$ac_optarg" ;;
112459 + -v | -verbose | --verbose | --verbos | --verbo | --verb)
112460 + verbose=yes ;;
112462 + -version | --version | --versio | --versi | --vers)
112463 + echo "configure generated by autoconf version 2.7"
112464 + exit 0 ;;
112466 + -with-* | --with-*)
112467 + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
112468 + # Reject names that are not valid shell variable names.
112469 + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
112470 + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
112472 + ac_package=`echo $ac_package| sed 's/-/_/g'`
112473 + case "$ac_option" in
112474 + *=*) ;;
112475 + *) ac_optarg=yes ;;
112476 + esac
112477 + eval "with_${ac_package}='$ac_optarg'" ;;
112479 + -without-* | --without-*)
112480 + ac_package=`echo $ac_option|sed -e 's/-*without-//'`
112481 + # Reject names that are not valid shell variable names.
112482 + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
112483 + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
112485 + ac_package=`echo $ac_package| sed 's/-/_/g'`
112486 + eval "with_${ac_package}=no" ;;
112488 + --x)
112489 + # Obsolete; use --with-x.
112490 + with_x=yes ;;
112492 + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
112493 + | --x-incl | --x-inc | --x-in | --x-i)
112494 + ac_prev=x_includes ;;
112495 + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
112496 + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
112497 + x_includes="$ac_optarg" ;;
112499 + -x-libraries | --x-libraries | --x-librarie | --x-librari \
112500 + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
112501 + ac_prev=x_libraries ;;
112502 + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
112503 + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
112504 + x_libraries="$ac_optarg" ;;
112506 + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
112510 + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
112511 + echo "configure: warning: $ac_option: invalid host type" 1>&2
112513 + if test "x$nonopt" != xNONE; then
112514 + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
112516 + nonopt="$ac_option"
112519 + esac
112520 +done
112522 +if test -n "$ac_prev"; then
112523 + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
112526 +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
112528 +# File descriptor usage:
112529 +# 0 standard input
112530 +# 1 file creation
112531 +# 2 errors and warnings
112532 +# 3 some systems may open it to /dev/tty
112533 +# 4 used on the Kubota Titan
112534 +# 6 checking for... messages and results
112535 +# 5 compiler messages saved in config.log
112536 +if test "$silent" = yes; then
112537 + exec 6>/dev/null
112538 +else
112539 + exec 6>&1
112541 +exec 5>./config.log
112543 +echo "\
112544 +This file contains any messages produced by compilers while
112545 +running configure, to aid debugging if configure makes a mistake.
112546 +" 1>&5
112548 +# Strip out --no-create and --no-recursion so they do not pile up.
112549 +# Also quote any args containing shell metacharacters.
112550 +ac_configure_args=
112551 +for ac_arg
112553 + case "$ac_arg" in
112554 + -no-create | --no-create | --no-creat | --no-crea | --no-cre \
112555 + | --no-cr | --no-c) ;;
112556 + -no-recursion | --no-recursion | --no-recursio | --no-recursi \
112557 + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
112558 + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
112559 + ac_configure_args="$ac_configure_args '$ac_arg'" ;;
112560 + *) ac_configure_args="$ac_configure_args $ac_arg" ;;
112561 + esac
112562 +done
112564 +# NLS nuisances.
112565 +# Only set LANG and LC_ALL to C if already set.
112566 +# These must not be set unconditionally because not all systems understand
112567 +# e.g. LANG=C (notably SCO).
112568 +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
112569 +if test "${LANG+set}" = set; then LANG=C; export LANG; fi
112571 +# confdefs.h avoids OS command line length limits that DEFS can exceed.
112572 +rm -rf conftest* confdefs.h
112573 +# AIX cpp loses on an empty file, so make sure it contains at least a newline.
112574 +echo > confdefs.h
112576 +# A filename unique to this package, relative to the directory that
112577 +# configure is in, which we can look for to find out if srcdir is correct.
112578 +ac_unique_file=fnmatch.c
112580 +# Find the source files, if location was not specified.
112581 +if test -z "$srcdir"; then
112582 + ac_srcdir_defaulted=yes
112583 + # Try the directory containing this script, then its parent.
112584 + ac_prog=$0
112585 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
112586 + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
112587 + srcdir=$ac_confdir
112588 + if test ! -r $srcdir/$ac_unique_file; then
112589 + srcdir=..
112591 +else
112592 + ac_srcdir_defaulted=no
112594 +if test ! -r $srcdir/$ac_unique_file; then
112595 + if test "$ac_srcdir_defaulted" = yes; then
112596 + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
112597 + else
112598 + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
112601 +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
112603 +# Prefer explicitly selected file to automatically selected ones.
112604 +if test -z "$CONFIG_SITE"; then
112605 + if test "x$prefix" != xNONE; then
112606 + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
112607 + else
112608 + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
112611 +for ac_site_file in $CONFIG_SITE; do
112612 + if test -r "$ac_site_file"; then
112613 + echo "loading site script $ac_site_file"
112614 + . "$ac_site_file"
112616 +done
112618 +if test -r "$cache_file"; then
112619 + echo "loading cache $cache_file"
112620 + . $cache_file
112621 +else
112622 + echo "creating cache $cache_file"
112623 + > $cache_file
112626 +ac_ext=c
112627 +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
112628 +ac_cpp='$CPP $CPPFLAGS'
112629 +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
112630 +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
112632 +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
112633 + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
112634 + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
112635 + ac_n= ac_c='
112636 +' ac_t=' '
112637 + else
112638 + ac_n=-n ac_c= ac_t=
112640 +else
112641 + ac_n= ac_c='\c' ac_t=
112644 + # Extract the first word of "gcc", so it can be a program name with args.
112645 +set dummy gcc; ac_word=$2
112646 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
112647 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
112648 + echo $ac_n "(cached) $ac_c" 1>&6
112649 +else
112650 + if test -n "$CC"; then
112651 + ac_cv_prog_CC="$CC" # Let the user override the test.
112652 +else
112653 + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
112654 + for ac_dir in $PATH; do
112655 + test -z "$ac_dir" && ac_dir=.
112656 + if test -f $ac_dir/$ac_word; then
112657 + ac_cv_prog_CC="gcc"
112658 + break
112660 + done
112661 + IFS="$ac_save_ifs"
112664 +CC="$ac_cv_prog_CC"
112665 +if test -n "$CC"; then
112666 + echo "$ac_t""$CC" 1>&6
112667 +else
112668 + echo "$ac_t""no" 1>&6
112671 +if test -z "$CC"; then
112672 + # Extract the first word of "cc", so it can be a program name with args.
112673 +set dummy cc; ac_word=$2
112674 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
112675 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
112676 + echo $ac_n "(cached) $ac_c" 1>&6
112677 +else
112678 + if test -n "$CC"; then
112679 + ac_cv_prog_CC="$CC" # Let the user override the test.
112680 +else
112681 + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
112682 + ac_prog_rejected=no
112683 + for ac_dir in $PATH; do
112684 + test -z "$ac_dir" && ac_dir=.
112685 + if test -f $ac_dir/$ac_word; then
112686 + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
112687 + ac_prog_rejected=yes
112688 + continue
112690 + ac_cv_prog_CC="cc"
112691 + break
112693 + done
112694 + IFS="$ac_save_ifs"
112695 +if test $ac_prog_rejected = yes; then
112696 + # We found a bogon in the path, so make sure we never use it.
112697 + set dummy $ac_cv_prog_CC
112698 + shift
112699 + if test $# -gt 0; then
112700 + # We chose a different compiler from the bogus one.
112701 + # However, it has the same basename, so the bogon will be chosen
112702 + # first if we set CC to just the basename; use the full file name.
112703 + shift
112704 + set dummy "$ac_dir/$ac_word" "$@"
112705 + shift
112706 + ac_cv_prog_CC="$@"
112711 +CC="$ac_cv_prog_CC"
112712 +if test -n "$CC"; then
112713 + echo "$ac_t""$CC" 1>&6
112714 +else
112715 + echo "$ac_t""no" 1>&6
112718 + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
112721 +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
112722 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
112723 + echo $ac_n "(cached) $ac_c" 1>&6
112724 +else
112725 + cat > conftest.c <<EOF
112726 +#ifdef __GNUC__
112727 + yes;
112728 +#endif
112730 +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:601: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
112731 + ac_cv_prog_gcc=yes
112732 +else
112733 + ac_cv_prog_gcc=no
112737 +echo "$ac_t""$ac_cv_prog_gcc" 1>&6
112738 +if test $ac_cv_prog_gcc = yes; then
112739 + GCC=yes
112740 + if test "${CFLAGS+set}" != set; then
112741 + echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
112742 +if eval "test \"`echo '$''{'ac_cv_prog_gcc_g'+set}'`\" = set"; then
112743 + echo $ac_n "(cached) $ac_c" 1>&6
112744 +else
112745 + echo 'void f(){}' > conftest.c
112746 +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
112747 + ac_cv_prog_gcc_g=yes
112748 +else
112749 + ac_cv_prog_gcc_g=no
112751 +rm -f conftest*
112755 +echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6
112756 + if test $ac_cv_prog_gcc_g = yes; then
112757 + CFLAGS="-g -O"
112758 + else
112759 + CFLAGS="-O"
112762 +else
112763 + GCC=
112764 + test "${CFLAGS+set}" = set || CFLAGS="-g"
112767 +# Extract the first word of "ar", so it can be a program name with args.
112768 +set dummy ar; ac_word=$2
112769 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
112770 +if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
112771 + echo $ac_n "(cached) $ac_c" 1>&6
112772 +else
112773 + if test -n "$AR"; then
112774 + ac_cv_prog_AR="$AR" # Let the user override the test.
112775 +else
112776 + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
112777 + for ac_dir in $PATH; do
112778 + test -z "$ac_dir" && ac_dir=.
112779 + if test -f $ac_dir/$ac_word; then
112780 + ac_cv_prog_AR="ar"
112781 + break
112783 + done
112784 + IFS="$ac_save_ifs"
112785 + test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
112788 +AR="$ac_cv_prog_AR"
112789 +if test -n "$AR"; then
112790 + echo "$ac_t""$AR" 1>&6
112791 +else
112792 + echo "$ac_t""no" 1>&6
112795 +# Extract the first word of "ranlib", so it can be a program name with args.
112796 +set dummy ranlib; ac_word=$2
112797 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
112798 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
112799 + echo $ac_n "(cached) $ac_c" 1>&6
112800 +else
112801 + if test -n "$RANLIB"; then
112802 + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
112803 +else
112804 + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
112805 + for ac_dir in $PATH; do
112806 + test -z "$ac_dir" && ac_dir=.
112807 + if test -f $ac_dir/$ac_word; then
112808 + ac_cv_prog_RANLIB="ranlib"
112809 + break
112811 + done
112812 + IFS="$ac_save_ifs"
112813 + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
112816 +RANLIB="$ac_cv_prog_RANLIB"
112817 +if test -n "$RANLIB"; then
112818 + echo "$ac_t""$RANLIB" 1>&6
112819 +else
112820 + echo "$ac_t""no" 1>&6
112823 +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
112824 +# On Suns, sometimes $CPP names a directory.
112825 +if test -n "$CPP" && test -d "$CPP"; then
112826 + CPP=
112828 +if test -z "$CPP"; then
112829 +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
112830 + echo $ac_n "(cached) $ac_c" 1>&6
112831 +else
112832 + # This must be in double quotes, not single quotes, because CPP may get
112833 + # substituted into the Makefile and "${CC-cc}" will confuse make.
112834 + CPP="${CC-cc} -E"
112835 + # On the NeXT, cc -E runs the code through the compiler's parser,
112836 + # not just through cpp.
112837 + cat > conftest.$ac_ext <<EOF
112838 +#line 709 "configure"
112839 +#include "confdefs.h"
112840 +#include <assert.h>
112841 +Syntax Error
112843 +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
112844 +{ (eval echo configure:715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
112845 +ac_err=`grep -v '^ *+' conftest.out`
112846 +if test -z "$ac_err"; then
112848 +else
112849 + echo "$ac_err" >&5
112850 + rm -rf conftest*
112851 + CPP="${CC-cc} -E -traditional-cpp"
112852 + cat > conftest.$ac_ext <<EOF
112853 +#line 724 "configure"
112854 +#include "confdefs.h"
112855 +#include <assert.h>
112856 +Syntax Error
112858 +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
112859 +{ (eval echo configure:730: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
112860 +ac_err=`grep -v '^ *+' conftest.out`
112861 +if test -z "$ac_err"; then
112863 +else
112864 + echo "$ac_err" >&5
112865 + rm -rf conftest*
112866 + CPP=/lib/cpp
112868 +rm -f conftest*
112870 +rm -f conftest*
112871 + ac_cv_prog_CPP="$CPP"
112873 + CPP="$ac_cv_prog_CPP"
112874 +else
112875 + ac_cv_prog_CPP="$CPP"
112877 +echo "$ac_t""$CPP" 1>&6
112878 + echo $ac_n "checking for AIX""... $ac_c" 1>&6
112879 +cat > conftest.$ac_ext <<EOF
112880 +#line 751 "configure"
112881 +#include "confdefs.h"
112882 +#ifdef _AIX
112883 + yes
112884 +#endif
112887 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
112888 + egrep "yes" >/dev/null 2>&1; then
112889 + rm -rf conftest*
112890 + echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF
112891 +#define _ALL_SOURCE 1
112894 +else
112895 + rm -rf conftest*
112896 + echo "$ac_t""no" 1>&6
112898 +rm -f conftest*
112901 +ac_safe=`echo "minix/config.h" | tr './\055' '___'`
112902 +echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6
112903 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
112904 + echo $ac_n "(cached) $ac_c" 1>&6
112905 +else
112906 + cat > conftest.$ac_ext <<EOF
112907 +#line 778 "configure"
112908 +#include "confdefs.h"
112909 +#include <minix/config.h>
112911 +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
112912 +{ (eval echo configure:783: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
112913 +ac_err=`grep -v '^ *+' conftest.out`
112914 +if test -z "$ac_err"; then
112915 + rm -rf conftest*
112916 + eval "ac_cv_header_$ac_safe=yes"
112917 +else
112918 + echo "$ac_err" >&5
112919 + rm -rf conftest*
112920 + eval "ac_cv_header_$ac_safe=no"
112922 +rm -f conftest*
112924 +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
112925 + echo "$ac_t""yes" 1>&6
112926 + MINIX=yes
112927 +else
112928 + echo "$ac_t""no" 1>&6
112929 +MINIX=
112932 +if test "$MINIX" = yes; then
112933 + cat >> confdefs.h <<\EOF
112934 +#define _POSIX_SOURCE 1
112937 + cat >> confdefs.h <<\EOF
112938 +#define _POSIX_1_SOURCE 2
112941 + cat >> confdefs.h <<\EOF
112942 +#define _MINIX 1
112947 +echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
112948 +if test -d /etc/conf/kconfig.d &&
112949 + grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
112950 +then
112951 + echo "$ac_t""yes" 1>&6
112952 + ISC=yes # If later tests want to check for ISC.
112953 + cat >> confdefs.h <<\EOF
112954 +#define _POSIX_SOURCE 1
112957 + if test "$GCC" = yes; then
112958 + CC="$CC -posix"
112959 + else
112960 + CC="$CC -Xp"
112962 +else
112963 + echo "$ac_t""no" 1>&6
112964 + ISC=
112967 +echo $ac_n "checking for working const""... $ac_c" 1>&6
112968 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
112969 + echo $ac_n "(cached) $ac_c" 1>&6
112970 +else
112971 + cat > conftest.$ac_ext <<EOF
112972 +#line 843 "configure"
112973 +#include "confdefs.h"
112975 +int main() { return 0; }
112976 +int t() {
112978 +/* Ultrix mips cc rejects this. */
112979 +typedef int charset[2]; const charset x;
112980 +/* SunOS 4.1.1 cc rejects this. */
112981 +char const *const *ccp;
112982 +char **p;
112983 +/* NEC SVR4.0.2 mips cc rejects this. */
112984 +struct point {int x, y;};
112985 +static struct point const zero = {0,0};
112986 +/* AIX XL C 1.02.0.0 rejects this.
112987 + It does not let you subtract one const X* pointer from another in an arm
112988 + of an if-expression whose if-part is not a constant expression */
112989 +const char *g = "string";
112990 +ccp = &g + (g ? g-g : 0);
112991 +/* HPUX 7.0 cc rejects these. */
112992 +++ccp;
112993 +p = (char**) ccp;
112994 +ccp = (char const *const *) p;
112995 +{ /* SCO 3.2v4 cc rejects this. */
112996 + char *t;
112997 + char const *s = 0 ? (char *) 0 : (char const *) 0;
112999 + *t++ = 0;
113001 +{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
113002 + int x[] = {25, 17};
113003 + const int *foo = &x[0];
113004 + ++foo;
113006 +{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
113007 + typedef const int *iptr;
113008 + iptr p = 0;
113009 + ++p;
113011 +{ /* AIX XL C 1.02.0.0 rejects this saying
113012 + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
113013 + struct s { int j; const int *ap[3]; };
113014 + struct s *b; b->j = 5;
113016 +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
113017 + const int foo = 10;
113020 +; return 0; }
113022 +if { (eval echo configure:893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
113023 + rm -rf conftest*
113024 + ac_cv_c_const=yes
113025 +else
113026 + rm -rf conftest*
113027 + ac_cv_c_const=no
113029 +rm -f conftest*
113033 +echo "$ac_t""$ac_cv_c_const" 1>&6
113034 +if test $ac_cv_c_const = no; then
113035 + cat >> confdefs.h <<\EOF
113036 +#define const
113041 +# If we cannot run a trivial program, we must be cross compiling.
113042 +echo $ac_n "checking whether cross-compiling""... $ac_c" 1>&6
113043 +if eval "test \"`echo '$''{'ac_cv_c_cross'+set}'`\" = set"; then
113044 + echo $ac_n "(cached) $ac_c" 1>&6
113045 +else
113046 + if test "$cross_compiling" = yes; then
113047 + ac_cv_c_cross=yes
113048 +else
113049 +cat > conftest.$ac_ext <<EOF
113050 +#line 921 "configure"
113051 +#include "confdefs.h"
113052 +main(){return(0);}
113054 +{ (eval echo configure:925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
113055 +if test -s conftest && (./conftest; exit) 2>/dev/null; then
113056 + ac_cv_c_cross=no
113057 +else
113058 + ac_cv_c_cross=yes
113061 +rm -fr conftest*
113064 +echo "$ac_t""$ac_cv_c_cross" 1>&6
113065 +cross_compiling=$ac_cv_c_cross
113067 +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
113068 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
113069 + echo $ac_n "(cached) $ac_c" 1>&6
113070 +else
113071 + cat > conftest.$ac_ext <<EOF
113072 +#line 943 "configure"
113073 +#include "confdefs.h"
113074 +#include <stdlib.h>
113075 +#include <stdarg.h>
113076 +#include <string.h>
113077 +#include <float.h>
113079 +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
113080 +{ (eval echo configure:951: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
113081 +ac_err=`grep -v '^ *+' conftest.out`
113082 +if test -z "$ac_err"; then
113083 + rm -rf conftest*
113084 + ac_cv_header_stdc=yes
113085 +else
113086 + echo "$ac_err" >&5
113087 + rm -rf conftest*
113088 + ac_cv_header_stdc=no
113090 +rm -f conftest*
113092 +if test $ac_cv_header_stdc = yes; then
113093 + # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
113094 +cat > conftest.$ac_ext <<EOF
113095 +#line 966 "configure"
113096 +#include "confdefs.h"
113097 +#include <string.h>
113099 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
113100 + egrep "memchr" >/dev/null 2>&1; then
113102 +else
113103 + rm -rf conftest*
113104 + ac_cv_header_stdc=no
113106 +rm -f conftest*
113110 +if test $ac_cv_header_stdc = yes; then
113111 + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
113112 +cat > conftest.$ac_ext <<EOF
113113 +#line 984 "configure"
113114 +#include "confdefs.h"
113115 +#include <stdlib.h>
113117 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
113118 + egrep "free" >/dev/null 2>&1; then
113120 +else
113121 + rm -rf conftest*
113122 + ac_cv_header_stdc=no
113124 +rm -f conftest*
113128 +if test $ac_cv_header_stdc = yes; then
113129 + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
113130 +if test "$cross_compiling" = yes; then
113132 +else
113133 +cat > conftest.$ac_ext <<EOF
113134 +#line 1005 "configure"
113135 +#include "confdefs.h"
113136 +#include <ctype.h>
113137 +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
113138 +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
113139 +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
113140 +int main () { int i; for (i = 0; i < 256; i++)
113141 +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
113142 +exit (0); }
113145 +{ (eval echo configure:1016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
113146 +if test -s conftest && (./conftest; exit) 2>/dev/null; then
113148 +else
113149 + ac_cv_header_stdc=no
113152 +rm -fr conftest*
113156 +echo "$ac_t""$ac_cv_header_stdc" 1>&6
113157 +if test $ac_cv_header_stdc = yes; then
113158 + cat >> confdefs.h <<\EOF
113159 +#define STDC_HEADERS 1
113164 +for ac_hdr in memory.h unistd.h string.h
113166 +ac_safe=`echo "$ac_hdr" | tr './\055' '___'`
113167 +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
113168 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
113169 + echo $ac_n "(cached) $ac_c" 1>&6
113170 +else
113171 + cat > conftest.$ac_ext <<EOF
113172 +#line 1043 "configure"
113173 +#include "confdefs.h"
113174 +#include <$ac_hdr>
113176 +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
113177 +{ (eval echo configure:1048: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
113178 +ac_err=`grep -v '^ *+' conftest.out`
113179 +if test -z "$ac_err"; then
113180 + rm -rf conftest*
113181 + eval "ac_cv_header_$ac_safe=yes"
113182 +else
113183 + echo "$ac_err" >&5
113184 + rm -rf conftest*
113185 + eval "ac_cv_header_$ac_safe=no"
113187 +rm -f conftest*
113189 +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
113190 + echo "$ac_t""yes" 1>&6
113191 + ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'`
113192 + cat >> confdefs.h <<EOF
113193 +#define $ac_tr_hdr 1
113196 +else
113197 + echo "$ac_t""no" 1>&6
113199 +done
113201 +ac_header_dirent=no
113202 +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
113204 +ac_safe=`echo "$ac_hdr" | tr './\055' '___'`
113205 +echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
113206 +if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
113207 + echo $ac_n "(cached) $ac_c" 1>&6
113208 +else
113209 + cat > conftest.$ac_ext <<EOF
113210 +#line 1081 "configure"
113211 +#include "confdefs.h"
113212 +#include <sys/types.h>
113213 +#include <$ac_hdr>
113214 +int main() { return 0; }
113215 +int t() {
113216 +DIR *dirp = 0;
113217 +; return 0; }
113219 +if { (eval echo configure:1090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
113220 + rm -rf conftest*
113221 + eval "ac_cv_header_dirent_$ac_safe=yes"
113222 +else
113223 + rm -rf conftest*
113224 + eval "ac_cv_header_dirent_$ac_safe=no"
113226 +rm -f conftest*
113229 +if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
113230 + echo "$ac_t""yes" 1>&6
113231 + ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdedfghijklmnopqrstuvwxyz./\055' 'ABCDEDFGHIJKLMNOPQRSTUVWXYZ___'`
113232 + cat >> confdefs.h <<EOF
113233 +#define $ac_tr_hdr 1
113235 + ac_header_dirent=$ac_hdr; break
113236 +else
113237 + echo "$ac_t""no" 1>&6
113239 +done
113240 +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
113241 +if test $ac_header_dirent = dirent.h; then
113242 +echo $ac_n "checking for -ldir""... $ac_c" 1>&6
113243 +ac_lib_var=`echo dir | tr '.-/+' '___p'`
113244 +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
113245 + echo $ac_n "(cached) $ac_c" 1>&6
113246 +else
113247 + ac_save_LIBS="$LIBS"
113248 +LIBS="-ldir $LIBS"
113249 +cat > conftest.$ac_ext <<EOF
113250 +#line 1121 "configure"
113251 +#include "confdefs.h"
113253 +int main() { return 0; }
113254 +int t() {
113255 +opendir()
113256 +; return 0; }
113258 +if { (eval echo configure:1129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
113259 + rm -rf conftest*
113260 + eval "ac_cv_lib_$ac_lib_var=yes"
113261 +else
113262 + rm -rf conftest*
113263 + eval "ac_cv_lib_$ac_lib_var=no"
113265 +rm -f conftest*
113266 +LIBS="$ac_save_LIBS"
113269 +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
113270 + echo "$ac_t""yes" 1>&6
113271 + LIBS="$LIBS -ldir"
113272 +else
113273 + echo "$ac_t""no" 1>&6
113276 +else
113277 +echo $ac_n "checking for -lx""... $ac_c" 1>&6
113278 +ac_lib_var=`echo x | tr '.-/+' '___p'`
113279 +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
113280 + echo $ac_n "(cached) $ac_c" 1>&6
113281 +else
113282 + ac_save_LIBS="$LIBS"
113283 +LIBS="-lx $LIBS"
113284 +cat > conftest.$ac_ext <<EOF
113285 +#line 1156 "configure"
113286 +#include "confdefs.h"
113288 +int main() { return 0; }
113289 +int t() {
113290 +opendir()
113291 +; return 0; }
113293 +if { (eval echo configure:1164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
113294 + rm -rf conftest*
113295 + eval "ac_cv_lib_$ac_lib_var=yes"
113296 +else
113297 + rm -rf conftest*
113298 + eval "ac_cv_lib_$ac_lib_var=no"
113300 +rm -f conftest*
113301 +LIBS="$ac_save_LIBS"
113304 +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
113305 + echo "$ac_t""yes" 1>&6
113306 + LIBS="$LIBS -lx"
113307 +else
113308 + echo "$ac_t""no" 1>&6
113313 +echo $ac_n "checking whether closedir returns void""... $ac_c" 1>&6
113314 +if eval "test \"`echo '$''{'ac_cv_func_closedir_void'+set}'`\" = set"; then
113315 + echo $ac_n "(cached) $ac_c" 1>&6
113316 +else
113317 + if test "$cross_compiling" = yes; then
113318 + ac_cv_func_closedir_void=yes
113319 +else
113320 +cat > conftest.$ac_ext <<EOF
113321 +#line 1192 "configure"
113322 +#include "confdefs.h"
113323 +#include <sys/types.h>
113324 +#include <$ac_header_dirent>
113325 +int closedir(); main() { exit(closedir(opendir(".")) != 0); }
113327 +{ (eval echo configure:1198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
113328 +if test -s conftest && (./conftest; exit) 2>/dev/null; then
113329 + ac_cv_func_closedir_void=no
113330 +else
113331 + ac_cv_func_closedir_void=yes
113334 +rm -fr conftest*
113337 +echo "$ac_t""$ac_cv_func_closedir_void" 1>&6
113338 +if test $ac_cv_func_closedir_void = yes; then
113339 + cat >> confdefs.h <<\EOF
113340 +#define CLOSEDIR_VOID 1
113345 +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
113346 +# for constant arguments. Useless!
113347 +echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
113348 +if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
113349 + echo $ac_n "(cached) $ac_c" 1>&6
113350 +else
113351 + cat > conftest.$ac_ext <<EOF
113352 +#line 1223 "configure"
113353 +#include "confdefs.h"
113354 +#include <alloca.h>
113355 +int main() { return 0; }
113356 +int t() {
113357 +char *p = alloca(2 * sizeof(int));
113358 +; return 0; }
113360 +if { (eval echo configure:1231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
113361 + rm -rf conftest*
113362 + ac_cv_header_alloca_h=yes
113363 +else
113364 + rm -rf conftest*
113365 + ac_cv_header_alloca_h=no
113367 +rm -f conftest*
113371 +echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
113372 +if test $ac_cv_header_alloca_h = yes; then
113373 + cat >> confdefs.h <<\EOF
113374 +#define HAVE_ALLOCA_H 1
113379 +echo $ac_n "checking for alloca""... $ac_c" 1>&6
113380 +if eval "test \"`echo '$''{'ac_cv_func_alloca'+set}'`\" = set"; then
113381 + echo $ac_n "(cached) $ac_c" 1>&6
113382 +else
113383 + cat > conftest.$ac_ext <<EOF
113384 +#line 1255 "configure"
113385 +#include "confdefs.h"
113387 +#ifdef __GNUC__
113388 +# define alloca __builtin_alloca
113389 +#else
113390 +# if HAVE_ALLOCA_H
113391 +# include <alloca.h>
113392 +# else
113393 +# ifdef _AIX
113394 + #pragma alloca
113395 +# else
113396 +# ifndef alloca /* predefined by HP cc +Olibcalls */
113397 +char *alloca ();
113398 +# endif
113399 +# endif
113400 +# endif
113401 +#endif
113403 +int main() { return 0; }
113404 +int t() {
113405 +char *p = (char *) alloca(1);
113406 +; return 0; }
113408 +if { (eval echo configure:1279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
113409 + rm -rf conftest*
113410 + ac_cv_func_alloca=yes
113411 +else
113412 + rm -rf conftest*
113413 + ac_cv_func_alloca=no
113415 +rm -f conftest*
113419 +echo "$ac_t""$ac_cv_func_alloca" 1>&6
113420 +if test $ac_cv_func_alloca = yes; then
113421 + cat >> confdefs.h <<\EOF
113422 +#define HAVE_ALLOCA 1
113427 +if test $ac_cv_func_alloca = no; then
113428 + # The SVR3 libPW and SVR4 libucb both contain incompatible functions
113429 + # that cause trouble. Some versions do not even contain alloca or
113430 + # contain a buggy version. If you still want to use their alloca,
113431 + # use ar to extract alloca.o from them instead of compiling alloca.c.
113432 + ALLOCA=alloca.o
113433 + cat >> confdefs.h <<\EOF
113434 +#define C_ALLOCA 1
113438 +echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
113439 +if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
113440 + echo $ac_n "(cached) $ac_c" 1>&6
113441 +else
113442 + cat > conftest.$ac_ext <<EOF
113443 +#line 1314 "configure"
113444 +#include "confdefs.h"
113445 +#if defined(CRAY) && ! defined(CRAY2)
113446 +webecray
113447 +#else
113448 +wenotbecray
113449 +#endif
113452 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
113453 + egrep "webecray" >/dev/null 2>&1; then
113454 + rm -rf conftest*
113455 + ac_cv_os_cray=yes
113456 +else
113457 + rm -rf conftest*
113458 + ac_cv_os_cray=no
113460 +rm -f conftest*
113464 +echo "$ac_t""$ac_cv_os_cray" 1>&6
113465 +if test $ac_cv_os_cray = yes; then
113466 +for ac_func in _getb67 GETB67 getb67; do
113467 + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
113468 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
113469 + echo $ac_n "(cached) $ac_c" 1>&6
113470 +else
113471 + cat > conftest.$ac_ext <<EOF
113472 +#line 1343 "configure"
113473 +#include "confdefs.h"
113474 +/* System header to define __stub macros and hopefully few prototypes,
113475 + which can conflict with char $ac_func(); below. */
113476 +#include <assert.h>
113477 +/* Override any gcc2 internal prototype to avoid an error. */
113478 +char $ac_func();
113480 +int main() { return 0; }
113481 +int t() {
113483 +/* The GNU C library defines this for functions which it implements
113484 + to always fail with ENOSYS. Some functions are actually named
113485 + something starting with __ and the normal name is an alias. */
113486 +#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
113487 +choke me
113488 +#else
113489 +$ac_func();
113490 +#endif
113492 +; return 0; }
113494 +if { (eval echo configure:1365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
113495 + rm -rf conftest*
113496 + eval "ac_cv_func_$ac_func=yes"
113497 +else
113498 + rm -rf conftest*
113499 + eval "ac_cv_func_$ac_func=no"
113501 +rm -f conftest*
113504 +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
113505 + echo "$ac_t""yes" 1>&6
113506 + cat >> confdefs.h <<EOF
113507 +#define CRAY_STACKSEG_END $ac_func
113510 + break
113511 +else
113512 + echo "$ac_t""no" 1>&6
113515 +done
113518 +echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
113519 +if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
113520 + echo $ac_n "(cached) $ac_c" 1>&6
113521 +else
113522 + if test "$cross_compiling" = yes; then
113523 + ac_cv_c_stack_direction=0
113524 +else
113525 +cat > conftest.$ac_ext <<EOF
113526 +#line 1397 "configure"
113527 +#include "confdefs.h"
113528 +find_stack_direction ()
113530 + static char *addr = 0;
113531 + auto char dummy;
113532 + if (addr == 0)
113534 + addr = &dummy;
113535 + return find_stack_direction ();
113537 + else
113538 + return (&dummy > addr) ? 1 : -1;
113540 +main ()
113542 + exit (find_stack_direction() < 0);
113545 +{ (eval echo configure:1416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
113546 +if test -s conftest && (./conftest; exit) 2>/dev/null; then
113547 + ac_cv_c_stack_direction=1
113548 +else
113549 + ac_cv_c_stack_direction=-1
113552 +rm -fr conftest*
113555 +echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
113556 +cat >> confdefs.h <<EOF
113557 +#define STACK_DIRECTION $ac_cv_c_stack_direction
113562 +echo $ac_n "checking for strcoll""... $ac_c" 1>&6
113563 +if eval "test \"`echo '$''{'ac_cv_func_strcoll'+set}'`\" = set"; then
113564 + echo $ac_n "(cached) $ac_c" 1>&6
113565 +else
113566 + if test "$cross_compiling" = yes; then
113567 + ac_cv_func_strcoll=no
113568 +else
113569 +cat > conftest.$ac_ext <<EOF
113570 +#line 1441 "configure"
113571 +#include "confdefs.h"
113572 +#include <string.h>
113573 +main ()
113575 + exit (strcoll ("abc", "def") >= 0 ||
113576 + strcoll ("ABC", "DEF") >= 0 ||
113577 + strcoll ("123", "456") >= 0);
113580 +{ (eval echo configure:1451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
113581 +if test -s conftest && (./conftest; exit) 2>/dev/null; then
113582 + ac_cv_func_strcoll=yes
113583 +else
113584 + ac_cv_func_strcoll=no
113587 +rm -fr conftest*
113590 +echo "$ac_t""$ac_cv_func_strcoll" 1>&6
113591 +if test $ac_cv_func_strcoll = yes; then
113592 + cat >> confdefs.h <<\EOF
113593 +#define HAVE_STRCOLL 1
113598 +trap '' 1 2 15
113599 +cat > confcache <<\EOF
113600 +# This file is a shell script that caches the results of configure
113601 +# tests run on this system so they can be shared between configure
113602 +# scripts and configure runs. It is not useful on other systems.
113603 +# If it contains results you don't want to keep, you may remove or edit it.
113605 +# By default, configure uses ./config.cache as the cache file,
113606 +# creating it if it does not exist already. You can give configure
113607 +# the --cache-file=FILE option to use a different cache file; that is
113608 +# what configure does when it calls configure scripts in
113609 +# subdirectories, so they share the cache.
113610 +# Giving --cache-file=/dev/null disables caching, for debugging configure.
113611 +# config.status only pays attention to the cache file if you give it the
113612 +# --recheck option to rerun configure.
113615 +# Ultrix sh set writes to stderr and can't be redirected directly,
113616 +# and sets the high bit in the cache file unless we assign to the vars.
113617 +(set) 2>&1 |
113618 + sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \
113619 + >> confcache
113620 +if cmp -s $cache_file confcache; then
113622 +else
113623 + if test -w $cache_file; then
113624 + echo "updating cache $cache_file"
113625 + cat confcache > $cache_file
113626 + else
113627 + echo "not updating unwritable cache $cache_file"
113630 +rm -f confcache
113632 +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
113634 +test "x$prefix" = xNONE && prefix=$ac_default_prefix
113635 +# Let make expand exec_prefix.
113636 +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
113638 +# Any assignment to VPATH causes Sun make to only execute
113639 +# the first set of double-colon rules, so remove it if not needed.
113640 +# If there is a colon in the path, we need to keep it.
113641 +if test "x$srcdir" = x.; then
113642 + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
113645 +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
113647 +# Transform confdefs.h into DEFS.
113648 +# Protect against shell expansion while executing Makefile rules.
113649 +# Protect against Makefile macro expansion.
113650 +cat > conftest.defs <<\EOF
113651 +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
113652 +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
113653 +s%\[%\\&%g
113654 +s%\]%\\&%g
113655 +s%\$%$$%g
113657 +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
113658 +rm -f conftest.defs
113661 +# Without the "./", some shells look in PATH for config.status.
113662 +: ${CONFIG_STATUS=./config.status}
113664 +echo creating $CONFIG_STATUS
113665 +rm -f $CONFIG_STATUS
113666 +cat > $CONFIG_STATUS <<EOF
113667 +#! /bin/sh
113668 +# Generated automatically by configure.
113669 +# Run this file to recreate the current configuration.
113670 +# This directory was configured as follows,
113671 +# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
113673 +# $0 $ac_configure_args
113675 +# Compiler output produced by configure, useful for debugging
113676 +# configure, is in ./config.log if it exists.
113678 +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
113679 +for ac_option
113681 + case "\$ac_option" in
113682 + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
113683 + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
113684 + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
113685 + -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
113686 + echo "$CONFIG_STATUS generated by autoconf version 2.7"
113687 + exit 0 ;;
113688 + -help | --help | --hel | --he | --h)
113689 + echo "\$ac_cs_usage"; exit 0 ;;
113690 + *) echo "\$ac_cs_usage"; exit 1 ;;
113691 + esac
113692 +done
113694 +ac_given_srcdir=$srcdir
113696 +trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
113698 +cat >> $CONFIG_STATUS <<EOF
113700 +# Protect against being on the right side of a sed subst in config.status.
113701 +sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
113702 + s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
113703 +$ac_vpsub
113704 +$extrasub
113705 +s%@CFLAGS@%$CFLAGS%g
113706 +s%@CPPFLAGS@%$CPPFLAGS%g
113707 +s%@CXXFLAGS@%$CXXFLAGS%g
113708 +s%@DEFS@%$DEFS%g
113709 +s%@LDFLAGS@%$LDFLAGS%g
113710 +s%@LIBS@%$LIBS%g
113711 +s%@exec_prefix@%$exec_prefix%g
113712 +s%@prefix@%$prefix%g
113713 +s%@program_transform_name@%$program_transform_name%g
113714 +s%@bindir@%$bindir%g
113715 +s%@sbindir@%$sbindir%g
113716 +s%@libexecdir@%$libexecdir%g
113717 +s%@datadir@%$datadir%g
113718 +s%@sysconfdir@%$sysconfdir%g
113719 +s%@sharedstatedir@%$sharedstatedir%g
113720 +s%@localstatedir@%$localstatedir%g
113721 +s%@libdir@%$libdir%g
113722 +s%@includedir@%$includedir%g
113723 +s%@oldincludedir@%$oldincludedir%g
113724 +s%@infodir@%$infodir%g
113725 +s%@mandir@%$mandir%g
113726 +s%@CC@%$CC%g
113727 +s%@AR@%$AR%g
113728 +s%@RANLIB@%$RANLIB%g
113729 +s%@CPP@%$CPP%g
113730 +s%@ALLOCA@%$ALLOCA%g
113732 +CEOF
113734 +cat >> $CONFIG_STATUS <<EOF
113736 +CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
113738 +cat >> $CONFIG_STATUS <<\EOF
113739 +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
113740 + # Support "outfile[:infile]", defaulting infile="outfile.in".
113741 + case "$ac_file" in
113742 + *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'`
113743 + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
113744 + *) ac_file_in="${ac_file}.in" ;;
113745 + esac
113747 + # Adjust relative srcdir, etc. for subdirectories.
113749 + # Remove last slash and all that follows it. Not all systems have dirname.
113750 + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
113751 + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
113752 + # The file is in a subdirectory.
113753 + test ! -d "$ac_dir" && mkdir "$ac_dir"
113754 + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
113755 + # A "../" for each directory in $ac_dir_suffix.
113756 + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
113757 + else
113758 + ac_dir_suffix= ac_dots=
113761 + case "$ac_given_srcdir" in
113762 + .) srcdir=.
113763 + if test -z "$ac_dots"; then top_srcdir=.
113764 + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
113765 + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
113766 + *) # Relative path.
113767 + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
113768 + top_srcdir="$ac_dots$ac_given_srcdir" ;;
113769 + esac
113771 + echo creating "$ac_file"
113772 + rm -f "$ac_file"
113773 + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
113774 + case "$ac_file" in
113775 + *Makefile*) ac_comsub="1i\\
113776 +# $configure_input" ;;
113777 + *) ac_comsub= ;;
113778 + esac
113779 + sed -e "$ac_comsub
113780 +s%@configure_input@%$configure_input%g
113781 +s%@srcdir@%$srcdir%g
113782 +s%@top_srcdir@%$top_srcdir%g
113783 +" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file
113784 +fi; done
113785 +rm -f conftest.subs
113789 +exit 0
113791 +chmod +x $CONFIG_STATUS
113792 +rm -fr confdefs* $ac_clean_files
113793 +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
113795 diff -u -udbrN glibc-2.3.2/posix/glob/configure.bat glibc-2.3.2-200304020432/posix/glob/configure.bat
113796 --- glibc-2.3.2/posix/glob/configure.bat Thu Jan 1 01:00:00 1970
113797 +++ glibc-2.3.2-200304020432/posix/glob/configure.bat Thu Mar 9 02:19:41 1995
113798 @@ -0,0 +1,26 @@
113799 +@echo off
113800 +echo Configuring glob for GO32
113801 +rem This batch file assumes a unix-type "sed" program
113803 +echo # Makefile generated by "configure.bat"> Makefile
113805 +if exist config.sed del config.sed
113807 +echo "s/@srcdir@/./ ">> config.sed
113808 +echo "s/@CC@/gcc/ ">> config.sed
113809 +echo "s/@CFLAGS@/-O2 -g/ ">> config.sed
113810 +echo "s/@CPPFLAGS@/-DHAVE_CONFIG_H -I../ ">> config.sed
113811 +echo "s/@AR@/ar/ ">> config.sed
113812 +echo "s/@RANLIB@/ranlib/ ">> config.sed
113813 +echo "s/@LDFLAGS@// ">> config.sed
113814 +echo "s/@DEFS@// ">> config.sed
113815 +echo "s/@ALLOCA@// ">> config.sed
113816 +echo "s/@LIBS@// ">> config.sed
113817 +echo "s/@LIBOBJS@// ">> config.sed
113818 +echo "s/^Makefile *:/_Makefile:/ ">> config.sed
113819 +echo "s/^config.h *:/_config.h:/ ">> config.sed
113821 +sed -e "s/^\"//" -e "s/\"$//" -e "s/[ ]*$//" config.sed > config2.sed
113822 +sed -f config2.sed Makefile.in >> Makefile
113823 +del config.sed
113824 +del config2.sed
113825 diff -u -udbrN glibc-2.3.2/posix/glob/configure.in glibc-2.3.2-200304020432/posix/glob/configure.in
113826 --- glibc-2.3.2/posix/glob/configure.in Thu Jan 1 01:00:00 1970
113827 +++ glibc-2.3.2-200304020432/posix/glob/configure.in Thu Feb 23 03:30:35 1995
113828 @@ -0,0 +1,19 @@
113829 +dnl Process this file with autoconf to produce a configure script.
113830 +AC_INIT(fnmatch.c) dnl A distinctive file to look for in srcdir.
113831 +AC_PREREQ(2.1) dnl Minimum Autoconf version required.
113832 +AC_PROG_CC
113833 +AC_CHECK_PROG(AR, ar, ar, ar)
113834 +AC_PROG_RANLIB
113835 +AC_PROG_CPP dnl Later checks need this.
113836 +dnl These two want to come early.
113837 +AC_AIX
113838 +AC_MINIX
113839 +AC_ISC_POSIX
113840 +AC_CONST
113841 +AC_HEADER_STDC
113842 +AC_CHECK_HEADERS(memory.h unistd.h string.h)
113843 +AC_HEADER_DIRENT
113844 +AC_FUNC_CLOSEDIR_VOID
113845 +AC_FUNC_ALLOCA
113846 +AC_FUNC_STRCOLL
113847 +AC_OUTPUT(Makefile)
113848 diff -u -udbrN glibc-2.3.2/posix/tst-nice.c glibc-2.3.2-200304020432/posix/tst-nice.c
113849 --- glibc-2.3.2/posix/tst-nice.c Thu Jan 1 01:00:00 1970
113850 +++ glibc-2.3.2-200304020432/posix/tst-nice.c Thu Mar 20 12:40:36 2003
113851 @@ -0,0 +1,66 @@
113852 +/* Copyright (C) 2003 Free Software Foundation, Inc.
113853 + This file is part of the GNU C Library.
113855 + The GNU C Library is free software; you can redistribute it and/or
113856 + modify it under the terms of the GNU Lesser General Public
113857 + License as published by the Free Software Foundation; either
113858 + version 2.1 of the License, or (at your option) any later version.
113860 + The GNU C Library is distributed in the hope that it will be useful,
113861 + but WITHOUT ANY WARRANTY; without even the implied warranty of
113862 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
113863 + Lesser General Public License for more details.
113865 + You should have received a copy of the GNU Lesser General Public
113866 + License along with the GNU C Library; if not, write to the Free
113867 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
113868 + 02111-1307 USA. */
113870 +#include <errno.h>
113871 +#include <stdio.h>
113872 +#include <unistd.h>
113875 +/* Test that nice() does not incorrectly return 0. */
113876 +static int
113877 +do_test (void)
113879 + int ret;
113880 + const int incr = 10;
113881 + int old;
113883 + /* Discover current nice value. */
113884 + errno = 0;
113885 + old = nice (0);
113886 + if (old == -1 && errno != 0)
113888 + printf ("break: nice(%d) return: %d, %m\n", 0, old);
113889 + return 1;
113892 + /* Nice ourselves up. */
113893 + errno = 0;
113894 + ret = nice (incr);
113895 + if (ret == -1 && errno != 0)
113897 + printf ("break: nice(%d) return: %d, %m\n", incr, ret);
113898 + return 1;
113901 + /* Check for return value being zero when it shouldn't. Cannot simply
113902 + check for expected value since nice values are capped at 2^n-1.
113903 + But we assume that we didn't start at the cap and so should have
113904 + increased some. */
113905 + if (ret <= old)
113907 + printf ("FAIL: retval (%d) of nice(%d) != %d\n", ret, incr, old + incr);
113908 + return 1;
113911 + printf ("PASS: nice(%d) from %d return: %d\n", incr, old, ret);
113913 + return 0;
113916 +#define TEST_FUNCTION do_test ()
113917 +#include "../test-skeleton.c"
113918 diff -u -udbrN glibc-2.3.2/resolv/Makefile glibc-2.3.2-200304020432/resolv/Makefile
113919 --- glibc-2.3.2/resolv/Makefile Wed Feb 26 00:40:08 2003
113920 +++ glibc-2.3.2-200304020432/resolv/Makefile Sat Mar 1 23:15:00 2003
113921 @@ -93,6 +93,8 @@
113922 tst-leaks-ENV = MALLOC_TRACE=$(objpfx)tst-leaks.mtrace
113923 $(objpfx)mtrace-tst-leaks: $(objpfx)tst-leaks.out
113924 $(common-objpfx)malloc/mtrace $(objpfx)tst-leaks.mtrace > $@
113925 +ifeq (no,$(cross-compiling))
113926 ifneq (no,$(PERL))
113927 tests: $(objpfx)mtrace-tst-leaks
113928 +endif
113929 endif
113930 diff -u -udbrN glibc-2.3.2/rt/tst-aio7.c glibc-2.3.2-200304020432/rt/tst-aio7.c
113931 --- glibc-2.3.2/rt/tst-aio7.c Tue Oct 1 00:02:39 2002
113932 +++ glibc-2.3.2-200304020432/rt/tst-aio7.c Sat Mar 8 19:54:21 2003
113933 @@ -1,5 +1,5 @@
113934 /* Test for AIO POSIX compliance.
113935 - Copyright (C) 2001,02 Free Software Foundation, Inc.
113936 + Copyright (C) 2001,02, 03 Free Software Foundation, Inc.
113937 This file is part of the GNU C Library.
113939 The GNU C Library is free software; you can redistribute it and/or
113940 @@ -117,12 +117,13 @@
113942 /* Test for aio_suspend() suspending even if completed elements in list. */
113944 - const int BYTES = 8, ELEMS = 2;
113945 +#define BYTES 8
113946 + const int ELEMS = 2;
113947 int i, r, fd;
113948 - char buff[BYTES];
113949 + static char buff[BYTES];
113950 char name[] = "/tmp/aio7.XXXXXX";
113951 struct timespec timeout;
113952 - struct aiocb cb0, cb1;
113953 + static struct aiocb cb0, cb1;
113954 struct aiocb *list[ELEMS];
113956 fd = mkstemp (name);
113957 @@ -180,6 +181,9 @@
113958 puts ("aio_suspend([done,blocked],2,3) suspended thread");
113959 ++result;
113962 + /* Note that CB1 is still pending, and so cannot be an auto variable.
113963 + Thus we also test that exiting with an outstanding request works. */
113966 return result;
113967 diff -u -udbrN glibc-2.3.2/scripts/abilist.awk glibc-2.3.2-200304020432/scripts/abilist.awk
113968 --- glibc-2.3.2/scripts/abilist.awk Mon Dec 23 20:11:45 2002
113969 +++ glibc-2.3.2-200304020432/scripts/abilist.awk Wed Apr 2 06:00:03 2003
113970 @@ -1,6 +1,33 @@
113971 # This awk script processes the output of objdump --dynamic-syms
113972 # into a simple format that should not change when the ABI is not changing.
113974 +BEGIN {
113975 + if (combine_fullname)
113976 + combine = 1;
113977 + if (combine)
113978 + parse_names = 1;
113981 +# Per-file header.
113982 +/[^ :]+\.so\.[0-9.]+:[ ]+.file format .*$/ {
113983 + emit(0);
113985 + seen_opd = 0;
113987 + sofullname = $1;
113988 + sub(/:$/, "", sofullname);
113989 + soname = sofullname;
113990 + sub(/^.*\//, "", soname);
113991 + sub(/\.so\.[0-9.]+$/, "", soname);
113993 + suppress = ((filename_regexp != "" && sofullname !~ filename_regexp) \
113994 + || (libname_regexp != "" && soname !~ libname_regexp));
113996 + next
113999 +suppress { next }
114001 # Normalize columns.
114002 /^[0-9a-fA-F]+ / { sub(/ /, " - ") }
114004 @@ -22,14 +49,18 @@
114006 if (version == "GLIBC_PRIVATE") next;
114008 + desc = "";
114009 if (type == "D" && $4 == ".tbss") {
114010 type = "T";
114012 else if (type == "D" && $4 == ".opd") {
114013 - type = "O";
114014 + type = "F";
114015 size = "";
114016 + if (seen_opd < 0)
114017 + type = "O";
114018 + seen_opd = 1;
114020 - else if (type == "DO" && $4 == "*ABS*") {
114021 + else if ($4 == "*ABS*") {
114022 type = "A";
114023 size = "";
114025 @@ -37,15 +68,26 @@
114026 type = "D";
114028 else if (type == "DF") {
114029 + if (symbol ~ /^\./ && seen_opd >= 0)
114030 + next;
114031 + seen_opd = -1;
114032 type = "F";
114033 size = "";
114035 else {
114036 - print symbol, version, weak, "?", type, $4, $5;
114037 - next;
114038 + desc = symbol " " version " " weak " ? " type " " $4 " " $5;
114040 + if (size == " 0x") {
114041 + desc = symbol " " version " " weak " ? " type " " $4 " " $5;
114044 - desc = " " symbol " " (weak == "w" ? tolower(type) : type) size;
114045 + # Disabled -- weakness should not matter to shared library ABIs any more.
114046 + #if (weak == "w") type = tolower(type);
114047 + if (desc == "")
114048 + desc = " " symbol " " type size;
114050 + if (combine)
114051 + version = soname " " version (combine_fullname ? " " sofullname : "");
114053 if (version in versions) {
114054 versions[version] = versions[version] "\n" desc;
114055 @@ -63,8 +105,12 @@
114056 print "Don't grok this line:", $0
114059 -END {
114060 - nverlist = 0;
114061 +function emit(end) {
114062 + if (!end && (combine || ! parse_names || soname == ""))
114063 + return;
114064 + tofile = parse_names && !combine;
114066 + nverslist = 0;
114067 for (version in versions) {
114068 if (nverslist == 0) {
114069 verslist = version;
114070 @@ -92,13 +138,42 @@
114071 ++nverslist;
114074 + if (tofile) {
114075 + out = prefix soname ".symlist";
114076 + if (soname in outfiles)
114077 + out = out "." ++outfiles[soname];
114078 + else
114079 + outfiles[soname] = 1;
114080 + printf "" > out;
114083 split(verslist, order, "\n");
114084 for (i = 1; i <= nverslist; ++i) {
114085 version = order[i];
114087 - print version;
114088 + if (tofile) {
114089 + print version >> out;
114090 + close(out);
114091 + outpipe = "sort >> " out;
114093 + else {
114094 + if (combine)
114095 + print "";
114096 + print prefix version;
114097 outpipe = "sort";
114099 print versions[version] | outpipe;
114100 close(outpipe);
114102 + delete versions[version];
114104 + for (version in versions)
114105 + delete versions[version];
114107 + if (tofile)
114108 + print "wrote", out, "for", sofullname;
114111 +END {
114112 + emit(1);
114114 diff -u -udbrN glibc-2.3.2/scripts/merge-abilist.awk glibc-2.3.2-200304020432/scripts/merge-abilist.awk
114115 --- glibc-2.3.2/scripts/merge-abilist.awk Thu Jan 16 18:28:31 2003
114116 +++ glibc-2.3.2-200304020432/scripts/merge-abilist.awk Mon Mar 3 08:11:44 2003
114117 @@ -12,9 +12,11 @@
114118 # function F
114119 # variable D 0x4
114121 +BEGIN { current = "UNSET" }
114123 /^[^| ]/ {
114124 if (NF < 2 && config == "") {
114125 - print "BAD LINE:", $0 > "/dev/stderr";
114126 + print FILENAME ":" FNR ": BAD SET LINE:", $0 > "/dev/stderr";
114127 exit 2;
114130 @@ -44,8 +46,8 @@
114133 /^\| / {
114134 - if (NF < 3) {
114135 - print "BAD LINE:", $0 > "/dev/stderr";
114136 + if (NF < 3 || current == "UNSET") {
114137 + print FILENAME ":" FNR ": BAD | LINE:", $0 > "/dev/stderr";
114138 exit 2;
114141 @@ -61,12 +63,20 @@
114144 if (current == "") next;
114145 + if (current == "UNSET") {
114146 + print FILENAME ":" FNR ": IGNORED LINE:", $0 > "/dev/stderr";
114147 + next;
114150 ns = split(seen[$0], s, ",");
114151 nc = split(current, c, ",");
114152 for (i = 1; i <= nc; ++i) {
114153 + if (c[i] == "")
114154 + continue;
114155 # Sorted insert.
114156 for (j = 1; j <= ns; ++j) {
114157 + if (c[i] == s[j])
114158 + break;
114159 if (c[i] < s[j]) {
114160 for (k = ns; k >= j; --k)
114161 s[k + 1] = s[k];
114162 @@ -75,7 +85,7 @@
114163 break;
114166 - if (j >= ns)
114167 + if (j > ns)
114168 s[++ns] = c[i];
114171 @@ -97,7 +107,9 @@
114172 ns = split("", s);
114173 for (configs in stanzas) {
114174 # Sorted insert.
114175 - for (j = 1; j <= ns; ++j)
114176 + for (j = 1; j <= ns; ++j) {
114177 + if (configs == s[j])
114178 + break;
114179 if (configs < s[j]) {
114180 for (k = ns; k >= j; --k)
114181 s[k + 1] = s[k];
114182 @@ -105,7 +117,8 @@
114183 ++ns;
114184 break;
114186 - if (j >= ns)
114188 + if (j > ns)
114189 s[++ns] = configs;
114192 @@ -118,15 +131,22 @@
114193 # S[I] is a sorted, comma-separated list of SET:CONFIG pairs.
114194 # All we have to do is pretty-print them.
114195 nc = split(s[i], c, ",");
114196 - lastvers = "";
114197 + lastvers = lastconf = "";
114198 for (j = 1; j <= nc; ++j) {
114199 split(c[j], temp, ":");
114200 version = temp[1];
114201 conf = temp[2];
114202 if (version != lastvers)
114203 printf "%s%s", (lastvers != "" ? "\n| " : ""), version;
114204 + # Hack: if CONF is foo.*/bar and LASTCONF was foo.*,
114205 + # then we can omit the foo.*/bar since foo.* matches already.
114206 + # Note we don't update LASTCONF, so foo.*/baz next time will match too.
114207 + else if ((slash = index(conf, ".*/")) > 0 && \
114208 + substr(conf, 1, slash + 2 - 1) == lastconf)
114209 + continue;
114210 printf " %s", conf;
114211 lastvers = version;
114212 + lastconf = conf;
114214 print "";
114215 outpipe = "sort";
114216 diff -u -udbrN glibc-2.3.2/scripts/rpm2dynsym.sh glibc-2.3.2-200304020432/scripts/rpm2dynsym.sh
114217 --- glibc-2.3.2/scripts/rpm2dynsym.sh Thu Jan 1 01:00:00 1970
114218 +++ glibc-2.3.2-200304020432/scripts/rpm2dynsym.sh Thu Mar 27 23:48:49 2003
114219 @@ -0,0 +1,36 @@
114220 +#!/bin/sh
114222 +# This script takes rpm package files, finds *.so.N files in them,
114223 +# and runs objdump --dynamic-syms on them. The arguments are rpm file
114224 +# names. For each rpm, it creates an output file with the name
114225 +# "NAME-VERSION-RELEASE.ARCH.dynsym", the variable parts being extracted
114226 +# from the rpm's headers (not its file name). Each file contains the
114227 +# collected objdump output for all the *.so.N files in the corresponding rpm.
114228 +# This can be processed with abilist.awk or sent to someone who will do that.
114229 +# This does not do a lot of error-checking, so you should always watch stderr
114230 +# and sanity-check the resulting output files.
114232 +RPM=${RPM:-rpm}
114233 +RPM2CPIO=${RPM2CPIO:-rpm2cpio}
114234 +CPIO=${CPIO:-cpio}
114235 +OBJDUMP=${OBJDUMP:-objdump}
114237 +unpackdir=/tmp/rpm2dynsym$$
114238 +trap 'rm -rf $unpackdir' 0 1 2 15
114240 +for rpm; do
114241 + name=`$RPM -qp $rpm --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n'`
114242 + mkdir $unpackdir || exit
114243 + $RPM2CPIO "$rpm" | {
114244 + cd $unpackdir
114245 + $CPIO -i -d --no-absolute-filenames -uv '*.so.*' '*.so' 2>&1 |
114246 + while read file b; do
114247 + test x"$b" = x || break
114248 + case "$file" in
114249 + *.so.[0-9]*) $OBJDUMP --dynamic-syms $file ;;
114250 + esac
114251 + done
114252 + } > $name.dynsym
114253 + echo wrote $name.dynsym for $rpm
114254 + rm -rf $unpackdir
114255 +done
114256 diff -u -udbrN glibc-2.3.2/signal/Makefile glibc-2.3.2-200304020432/signal/Makefile
114257 --- glibc-2.3.2/signal/Makefile Sat Jul 7 21:21:17 2001
114258 +++ glibc-2.3.2-200304020432/signal/Makefile Tue Apr 1 08:49:23 2003
114259 @@ -1,4 +1,5 @@
114260 -# Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
114261 +# Copyright (C) 1991,1992,1993,1994,1995,1996,1997,1998,2003
114262 +# Free Software Foundation, Inc.
114263 # This file is part of the GNU C Library.
114265 # The GNU C Library is free software; you can redistribute it and/or
114266 @@ -37,7 +38,7 @@
114267 allocrtsig sigtimedwait sigwaitinfo sigqueue \
114268 sighold sigrelse sigignore sigset
114270 -tests := tst-signal
114271 +tests := tst-signal tst-sigset
114273 distribute := sigsetops.h testrtsig.h sigset-cvt-mask.h
114275 diff -u -udbrN glibc-2.3.2/signal/tst-sigset.c glibc-2.3.2-200304020432/signal/tst-sigset.c
114276 --- glibc-2.3.2/signal/tst-sigset.c Thu Jan 1 01:00:00 1970
114277 +++ glibc-2.3.2-200304020432/signal/tst-sigset.c Tue Apr 1 08:49:23 2003
114278 @@ -0,0 +1,43 @@
114279 +/* Test sig*set functions. */
114281 +#include <signal.h>
114282 +#include <stdio.h>
114284 +#define TEST_FUNCTION do_test ()
114285 +static int
114286 +do_test (void)
114288 + int result = 0;
114289 + int sig = -1;
114291 +#define TRY(call) \
114292 + if (call) \
114293 + { \
114294 + printf ("%s (sig = %d): %m\n", #call, sig); \
114295 + result = 1; \
114296 + } \
114297 + else
114300 + sigset_t set;
114301 + TRY (sigemptyset (&set) != 0);
114303 +#ifdef SIGRTMAX
114304 + int max_sig = SIGRTMAX;
114305 +#else
114306 + int max_sig = NSIG - 1;
114307 +#endif
114309 + for (sig = 1; sig <= max_sig; ++sig)
114311 + TRY (sigismember (&set, sig) != 0);
114312 + TRY (sigaddset (&set, sig) != 0);
114313 + TRY (sigismember (&set, sig) == 0);
114314 + TRY (sigdelset (&set, sig) != 0);
114315 + TRY (sigismember (&set, sig) != 0);
114318 + return result;
114321 +#include "../test-skeleton.c"
114322 diff -u -udbrN glibc-2.3.2/stdio-common/_itoa.c glibc-2.3.2-200304020432/stdio-common/_itoa.c
114323 --- glibc-2.3.2/stdio-common/_itoa.c Tue Mar 12 20:27:44 2002
114324 +++ glibc-2.3.2-200304020432/stdio-common/_itoa.c Fri Mar 14 04:59:41 2003
114325 @@ -1,5 +1,6 @@
114326 /* Internal function for converting integers to ASCII.
114327 - Copyright (C) 1994,1995,1996,1999,2000,2002 Free Software Foundation, Inc.
114328 + Copyright (C) 1994, 1995, 1996, 1999, 2000, 2002, 2003
114329 + Free Software Foundation, Inc.
114330 This file is part of the GNU C Library.
114331 Contributed by Torbjorn Granlund <tege@matematik.su.se>
114332 and Ulrich Drepper <drepper@gnu.org>.
114333 @@ -81,41 +82,41 @@
114334 const struct base_table_t _itoa_base_table[] attribute_hidden =
114336 #if BITS_PER_MP_LIMB == 64
114337 - /* 2 */ {SEL1(0ul) 1, 1},
114338 - /* 3 */ {SEL1(0xaaaaaaaaaaaaaaabul) 0, 1},
114339 - /* 4 */ {SEL1(0ul) 1, 2},
114340 - /* 5 */ {SEL1(0xcccccccccccccccdul) 0, 2},
114341 - /* 6 */ {SEL1(0xaaaaaaaaaaaaaaabul) 0, 2},
114342 - /* 7 */ {SEL1(0x2492492492492493ul) 1, 3},
114343 - /* 8 */ {SEL1(0ul) 1, 3},
114344 - /* 9 */ {SEL1(0xe38e38e38e38e38ful) 0, 3},
114345 - /* 10 */ {SEL1(0xcccccccccccccccdul) 0, 3},
114346 - /* 11 */ {SEL1(0x2e8ba2e8ba2e8ba3ul) 0, 1},
114347 - /* 12 */ {SEL1(0xaaaaaaaaaaaaaaabul) 0, 3},
114348 - /* 13 */ {SEL1(0x4ec4ec4ec4ec4ec5ul) 0, 2},
114349 - /* 14 */ {SEL1(0x2492492492492493ul) 1, 4},
114350 - /* 15 */ {SEL1(0x8888888888888889ul) 0, 3},
114351 - /* 16 */ {SEL1(0ul) 1, 4},
114352 - /* 17 */ {SEL1(0xf0f0f0f0f0f0f0f1ul) 0, 4},
114353 - /* 18 */ {SEL1(0xe38e38e38e38e38ful) 0, 4},
114354 - /* 19 */ {SEL1(0xd79435e50d79435ful) 0, 4},
114355 - /* 20 */ {SEL1(0xcccccccccccccccdul) 0, 4},
114356 - /* 21 */ {SEL1(0x8618618618618619ul) 1, 5},
114357 - /* 22 */ {SEL1(0x2e8ba2e8ba2e8ba3ul) 0, 2},
114358 - /* 23 */ {SEL1(0x642c8590b21642c9ul) 1, 5},
114359 - /* 24 */ {SEL1(0xaaaaaaaaaaaaaaabul) 0, 4},
114360 - /* 25 */ {SEL1(0x47ae147ae147ae15ul) 1, 5},
114361 - /* 26 */ {SEL1(0x4ec4ec4ec4ec4ec5ul) 0, 3},
114362 - /* 27 */ {SEL1(0x97b425ed097b425ful) 0, 4},
114363 - /* 28 */ {SEL1(0x2492492492492493ul) 1, 5},
114364 - /* 29 */ {SEL1(0x1a7b9611a7b9611bul) 1, 5},
114365 - /* 30 */ {SEL1(0x8888888888888889ul) 0, 4},
114366 - /* 31 */ {SEL1(0x0842108421084211ul) 1, 5},
114367 - /* 32 */ {SEL1(0ul) 1, 5},
114368 - /* 33 */ {SEL1(0x0f83e0f83e0f83e1ul) 0, 1},
114369 - /* 34 */ {SEL1(0xf0f0f0f0f0f0f0f1ul) 0, 5},
114370 - /* 35 */ {SEL1(0xea0ea0ea0ea0ea0ful) 0, 5},
114371 - /* 36 */ {SEL1(0xe38e38e38e38e38ful) 0, 5}
114372 + /* 2 */ {SEL1(0ull) 1, 1},
114373 + /* 3 */ {SEL1(0xaaaaaaaaaaaaaaabull) 0, 1},
114374 + /* 4 */ {SEL1(0ull) 1, 2},
114375 + /* 5 */ {SEL1(0xcccccccccccccccdull) 0, 2},
114376 + /* 6 */ {SEL1(0xaaaaaaaaaaaaaaabull) 0, 2},
114377 + /* 7 */ {SEL1(0x2492492492492493ull) 1, 3},
114378 + /* 8 */ {SEL1(0ull) 1, 3},
114379 + /* 9 */ {SEL1(0xe38e38e38e38e38full) 0, 3},
114380 + /* 10 */ {SEL1(0xcccccccccccccccdull) 0, 3},
114381 + /* 11 */ {SEL1(0x2e8ba2e8ba2e8ba3ull) 0, 1},
114382 + /* 12 */ {SEL1(0xaaaaaaaaaaaaaaabull) 0, 3},
114383 + /* 13 */ {SEL1(0x4ec4ec4ec4ec4ec5ull) 0, 2},
114384 + /* 14 */ {SEL1(0x2492492492492493ull) 1, 4},
114385 + /* 15 */ {SEL1(0x8888888888888889ull) 0, 3},
114386 + /* 16 */ {SEL1(0ull) 1, 4},
114387 + /* 17 */ {SEL1(0xf0f0f0f0f0f0f0f1ull) 0, 4},
114388 + /* 18 */ {SEL1(0xe38e38e38e38e38full) 0, 4},
114389 + /* 19 */ {SEL1(0xd79435e50d79435full) 0, 4},
114390 + /* 20 */ {SEL1(0xcccccccccccccccdull) 0, 4},
114391 + /* 21 */ {SEL1(0x8618618618618619ull) 1, 5},
114392 + /* 22 */ {SEL1(0x2e8ba2e8ba2e8ba3ull) 0, 2},
114393 + /* 23 */ {SEL1(0x642c8590b21642c9ull) 1, 5},
114394 + /* 24 */ {SEL1(0xaaaaaaaaaaaaaaabull) 0, 4},
114395 + /* 25 */ {SEL1(0x47ae147ae147ae15ull) 1, 5},
114396 + /* 26 */ {SEL1(0x4ec4ec4ec4ec4ec5ull) 0, 3},
114397 + /* 27 */ {SEL1(0x97b425ed097b425full) 0, 4},
114398 + /* 28 */ {SEL1(0x2492492492492493ull) 1, 5},
114399 + /* 29 */ {SEL1(0x1a7b9611a7b9611bull) 1, 5},
114400 + /* 30 */ {SEL1(0x8888888888888889ull) 0, 4},
114401 + /* 31 */ {SEL1(0x0842108421084211ull) 1, 5},
114402 + /* 32 */ {SEL1(0ull) 1, 5},
114403 + /* 33 */ {SEL1(0x0f83e0f83e0f83e1ull) 0, 1},
114404 + /* 34 */ {SEL1(0xf0f0f0f0f0f0f0f1ull) 0, 5},
114405 + /* 35 */ {SEL1(0xea0ea0ea0ea0ea0full) 0, 5},
114406 + /* 36 */ {SEL1(0xe38e38e38e38e38full) 0, 5}
114407 #endif
114408 #if BITS_PER_MP_LIMB == 32
114409 /* 2 */ {SEL1(0ul) 1, 1, {0, 31, 0x80000000ul SEL2(0xfffffffful)}},
114410 diff -u -udbrN glibc-2.3.2/stdio-common/sscanf.c glibc-2.3.2-200304020432/stdio-common/sscanf.c
114411 --- glibc-2.3.2/stdio-common/sscanf.c Sat Aug 10 20:09:08 2002
114412 +++ glibc-2.3.2-200304020432/stdio-common/sscanf.c Wed Mar 5 20:58:03 2003
114413 @@ -1,4 +1,4 @@
114414 -/* Copyright (C) 1991,95,96,98,2002 Free Software Foundation, Inc.
114415 +/* Copyright (C) 1991,1995,1996,1998,2002,2003 Free Software Foundation, Inc.
114416 This file is part of the GNU C Library.
114418 The GNU C Library is free software; you can redistribute it and/or
114419 @@ -27,9 +27,7 @@
114420 /* Read formatted input from S, according to the format string FORMAT. */
114421 /* VARARGS2 */
114423 -sscanf (s, format)
114424 - const char *s;
114425 - const char *format;
114426 +sscanf (const char *s, const char *format, ...)
114428 va_list arg;
114429 int done;
114430 diff -u -udbrN glibc-2.3.2/stdlib/cxa_finalize.c glibc-2.3.2-200304020432/stdlib/cxa_finalize.c
114431 --- glibc-2.3.2/stdlib/cxa_finalize.c Fri Dec 6 11:43:29 2002
114432 +++ glibc-2.3.2-200304020432/stdlib/cxa_finalize.c Fri Mar 21 08:45:55 2003
114433 @@ -1,4 +1,4 @@
114434 -/* Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
114435 +/* Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
114436 This file is part of the GNU C Library.
114438 The GNU C Library is free software; you can redistribute it and/or
114439 @@ -18,7 +18,7 @@
114441 #include <assert.h>
114442 #include <stdlib.h>
114443 -#include <atomicity.h>
114444 +#include <atomic.h>
114445 #include "exit.h"
114446 #include <fork.h>
114448 @@ -36,7 +36,8 @@
114449 for (f = &funcs->fns[funcs->idx - 1]; f >= &funcs->fns[0]; --f)
114450 if ((d == NULL || d == f->func.cxa.dso_handle)
114451 /* We don't want to run this cleanup more than once. */
114452 - && compare_and_swap (&f->flavor, ef_cxa, ef_free))
114453 + && ! atomic_compare_and_exchange_bool_acq (&f->flavor, ef_free,
114454 + ef_cxa))
114455 (*f->func.cxa.fn) (f->func.cxa.arg, 0);
114458 diff -u -udbrN glibc-2.3.2/stdlib/fpioconst.c glibc-2.3.2-200304020432/stdlib/fpioconst.c
114459 --- glibc-2.3.2/stdlib/fpioconst.c Mon Mar 11 09:32:01 2002
114460 +++ glibc-2.3.2-200304020432/stdlib/fpioconst.c Fri Mar 14 04:59:41 2003
114461 @@ -1,5 +1,6 @@
114462 /* Table of MP integer constants 10^(2^i), used for floating point <-> decimal.
114463 - Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
114464 + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2002, 2003
114465 + Free Software Foundation, Inc.
114466 This file is part of the GNU C Library.
114468 The GNU C Library is free software; you can redistribute it and/or
114469 @@ -235,195 +236,198 @@
114471 #define TENS_P0_IDX 0
114472 #define TENS_P0_SIZE 2
114473 - [TENS_P0_IDX] = 0x0000000000000000, 0x000000000000000a,
114474 + [TENS_P0_IDX] = 0x0000000000000000ull, 0x000000000000000aull,
114476 #define TENS_P1_IDX (TENS_P0_IDX + TENS_P0_SIZE)
114477 #define TENS_P1_SIZE 2
114478 - [TENS_P1_IDX] = 0x0000000000000000, 0x0000000000000064,
114479 + [TENS_P1_IDX] = 0x0000000000000000ull, 0x0000000000000064ull,
114481 #define TENS_P2_IDX (TENS_P1_IDX + TENS_P1_SIZE)
114482 #define TENS_P2_SIZE 2
114483 - [TENS_P2_IDX] = 0x0000000000000000, 0x0000000000002710,
114484 + [TENS_P2_IDX] = 0x0000000000000000ull, 0x0000000000002710ull,
114486 #define TENS_P3_IDX (TENS_P2_IDX + TENS_P2_SIZE)
114487 #define TENS_P3_SIZE 2
114488 - [TENS_P3_IDX] = 0x0000000000000000, 0x0000000005f5e100,
114489 + [TENS_P3_IDX] = 0x0000000000000000ull, 0x0000000005f5e100ull,
114491 #define TENS_P4_IDX (TENS_P3_IDX + TENS_P3_SIZE)
114492 #define TENS_P4_SIZE 2
114493 - [TENS_P4_IDX] = 0x0000000000000000, 0x002386f26fc10000,
114494 + [TENS_P4_IDX] = 0x0000000000000000ull, 0x002386f26fc10000ull,
114496 #define TENS_P5_IDX (TENS_P4_IDX + TENS_P4_SIZE)
114497 #define TENS_P5_SIZE 3
114498 - [TENS_P5_IDX] = 0x0000000000000000, 0x85acef8100000000, 0x000004ee2d6d415b,
114499 + [TENS_P5_IDX] = 0x0000000000000000ull, 0x85acef8100000000ull,
114500 + 0x000004ee2d6d415bull,
114502 #define TENS_P6_IDX (TENS_P5_IDX + TENS_P5_SIZE)
114503 #define TENS_P6_SIZE 5
114504 - [TENS_P6_IDX] = 0x0000000000000000, 0x0000000000000000, 0x6e38ed64bf6a1f01,
114505 - 0xe93ff9f4daa797ed, 0x0000000000184f03,
114506 + [TENS_P6_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
114507 + 0x6e38ed64bf6a1f01ull, 0xe93ff9f4daa797edull, 0x0000000000184f03ull,
114509 #define TENS_P7_IDX (TENS_P6_IDX + TENS_P6_SIZE)
114510 #define TENS_P7_SIZE 8
114511 - [TENS_P7_IDX] = 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114512 - 0x03df99092e953e01, 0x2374e42f0f1538fd, 0xc404dc08d3cff5ec,
114513 - 0xa6337f19bccdb0da, 0x0000024ee91f2603,
114514 + [TENS_P7_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
114515 + 0x0000000000000000ull, 0x03df99092e953e01ull, 0x2374e42f0f1538fdull,
114516 + 0xc404dc08d3cff5ecull, 0xa6337f19bccdb0daull, 0x0000024ee91f2603ull,
114518 #define TENS_P8_IDX (TENS_P7_IDX + TENS_P7_SIZE)
114519 #define TENS_P8_SIZE 15
114520 - [TENS_P8_IDX] = 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114521 - 0x0000000000000000, 0x0000000000000000, 0xbed3875b982e7c01,
114522 - 0x12152f87d8d99f72, 0xcf4a6e706bde50c6, 0x26b2716ed595d80f,
114523 - 0x1d153624adc666b0, 0x63ff540e3c42d35a, 0x65f9ef17cc5573c0,
114524 - 0x80dcc7f755bc28f2, 0x5fdcefcef46eeddc, 0x00000000000553f7,
114525 + [TENS_P8_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
114526 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114527 + 0xbed3875b982e7c01ull, 0x12152f87d8d99f72ull, 0xcf4a6e706bde50c6ull,
114528 + 0x26b2716ed595d80full, 0x1d153624adc666b0ull, 0x63ff540e3c42d35aull,
114529 + 0x65f9ef17cc5573c0ull, 0x80dcc7f755bc28f2ull, 0x5fdcefcef46eeddcull,
114530 + 0x00000000000553f7ull,
114531 #ifndef __NO_LONG_DOUBLE_MATH
114532 # define TENS_P9_IDX (TENS_P8_IDX + TENS_P8_SIZE)
114533 # define TENS_P9_SIZE 28
114534 - [TENS_P9_IDX] = 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114535 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114536 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114537 - 0x77f27267fc6cf801, 0x5d96976f8f9546dc, 0xc31e1ad9b83a8a97,
114538 - 0x94e6574746c40513, 0x4475b579c88976c1, 0xaa1da1bf28f8733b,
114539 - 0x1e25cfea703ed321, 0xbc51fb2eb21a2f22, 0xbfa3edac96e14f5d,
114540 - 0xe7fc7153329c57ae, 0x85a91924c3fc0695, 0xb2908ee0f95f635e,
114541 - 0x1366732a93abade4, 0x69be5b0e9449775c, 0xb099bc817343afac,
114542 - 0xa269974845a71d46, 0x8a0b1f138cb07303, 0xc1d238d98cab8a97,
114543 - 0x0000001c633415d4,
114544 + [TENS_P9_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
114545 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114546 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114547 + 0x0000000000000000ull, 0x77f27267fc6cf801ull, 0x5d96976f8f9546dcull,
114548 + 0xc31e1ad9b83a8a97ull, 0x94e6574746c40513ull, 0x4475b579c88976c1ull,
114549 + 0xaa1da1bf28f8733bull, 0x1e25cfea703ed321ull, 0xbc51fb2eb21a2f22ull,
114550 + 0xbfa3edac96e14f5dull, 0xe7fc7153329c57aeull, 0x85a91924c3fc0695ull,
114551 + 0xb2908ee0f95f635eull, 0x1366732a93abade4ull, 0x69be5b0e9449775cull,
114552 + 0xb099bc817343afacull, 0xa269974845a71d46ull, 0x8a0b1f138cb07303ull,
114553 + 0xc1d238d98cab8a97ull, 0x0000001c633415d4ull,
114555 # define TENS_P10_IDX (TENS_P9_IDX + TENS_P9_SIZE)
114556 # define TENS_P10_SIZE 55
114557 - [TENS_P10_IDX] = 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114558 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114559 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114560 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114561 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114562 - 0x0000000000000000, 0x0000000000000000, 0xf55b2b722919f001,
114563 - 0x1ec29f866e7c215b, 0x15c51a88991c4e87, 0x4c7d1e1a140ac535,
114564 - 0x0ed1440ecc2cd819, 0x7de16cfb896634ee, 0x9fce837d1e43f61f,
114565 - 0x233e55c7231d2b9c, 0xf451218b65dc60d7, 0xc96359861c5cd134,
114566 - 0xa7e89431922bbb9f, 0x62be695a9f9f2a07, 0x045b7a748e1042c4,
114567 - 0x8ad822a51abe1de3, 0xd814b505ba34c411, 0x8fc51a16bf3fdeb3,
114568 - 0xf56deeecb1b896bc, 0xb6f4654b31fb6bfd, 0x6b7595fb101a3616,
114569 - 0x80d98089dc1a47fe, 0x9a20288280bda5a5, 0xfc8f1f9031eb0f66,
114570 - 0xe26a7b7e976a3310, 0x3ce3a0b8df68368a, 0x75a351a28e4262ce,
114571 - 0x445975836cb0b6c9, 0xc356e38a31b5653f, 0x0190fba035faaba6,
114572 - 0x88bc491b9fc4ed52, 0x005b80411640114a, 0x1e8d4649f4f3235e,
114573 - 0x73c5534936a8de06, 0xc1a6970ca7e6bd2a, 0xd2db49ef47187094,
114574 - 0xae6209d4926c3f5b, 0x34f4a3c62d433949, 0xd9d61a05d4305d94,
114575 - 0x0000000000000325,
114576 + [TENS_P10_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
114577 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114578 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114579 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114580 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114581 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114582 + 0xf55b2b722919f001ull, 0x1ec29f866e7c215bull, 0x15c51a88991c4e87ull,
114583 + 0x4c7d1e1a140ac535ull, 0x0ed1440ecc2cd819ull, 0x7de16cfb896634eeull,
114584 + 0x9fce837d1e43f61full, 0x233e55c7231d2b9cull, 0xf451218b65dc60d7ull,
114585 + 0xc96359861c5cd134ull, 0xa7e89431922bbb9full, 0x62be695a9f9f2a07ull,
114586 + 0x045b7a748e1042c4ull, 0x8ad822a51abe1de3ull, 0xd814b505ba34c411ull,
114587 + 0x8fc51a16bf3fdeb3ull, 0xf56deeecb1b896bcull, 0xb6f4654b31fb6bfdull,
114588 + 0x6b7595fb101a3616ull, 0x80d98089dc1a47feull, 0x9a20288280bda5a5ull,
114589 + 0xfc8f1f9031eb0f66ull, 0xe26a7b7e976a3310ull, 0x3ce3a0b8df68368aull,
114590 + 0x75a351a28e4262ceull, 0x445975836cb0b6c9ull, 0xc356e38a31b5653full,
114591 + 0x0190fba035faaba6ull, 0x88bc491b9fc4ed52ull, 0x005b80411640114aull,
114592 + 0x1e8d4649f4f3235eull, 0x73c5534936a8de06ull, 0xc1a6970ca7e6bd2aull,
114593 + 0xd2db49ef47187094ull, 0xae6209d4926c3f5bull, 0x34f4a3c62d433949ull,
114594 + 0xd9d61a05d4305d94ull, 0x0000000000000325ull,
114596 # define TENS_P11_IDX (TENS_P10_IDX + TENS_P10_SIZE)
114597 # define TENS_P11_SIZE 108
114598 - [TENS_P11_IDX] = 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114599 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114600 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114601 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114602 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114603 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114604 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114605 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114606 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114607 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114608 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114609 - 0xe30968651333e001, 0x49e28dcfb27d4d3f, 0xee87e354ec2e4721,
114610 - 0x368b8abbb6067584, 0x2ed56d55a5e5a191, 0xea50d142fd827773,
114611 - 0x98342c9e51b78db2, 0x866ed6f1c850dabc, 0x9279498719342c12,
114612 - 0x66912e4ad2f869c2, 0x57a7842d71c7fd8f, 0xfb7fedcc235552eb,
114613 - 0x38209ce1f3861ce0, 0x34c101349713b449, 0xa7a8289c8c6c54de,
114614 - 0xe3cb64f32dbb6643, 0xe3892ee98074ff01, 0xa8f16f9210c17f94,
114615 - 0x967abbb3a8281ed6, 0x9952fbed5a151440, 0xafe609c313b41e44,
114616 - 0xf111821fa2bca416, 0x91bac974fb1264b4, 0x8e48ff35d6c7d6ab,
114617 - 0xc4a656654419bd43, 0x33554c36685e5510, 0x0dbd21feab498697,
114618 - 0x982da4663cfe491d, 0x9e110c7bcbea4ca7, 0x5fc5a04779c56b8a,
114619 - 0x1aa9f44484d80e2e, 0x6a57b1ab730f203c, 0x87a7dc62d752f7a6,
114620 - 0x40660460944545ff, 0xc9ac375d77c1a42f, 0x744695f0e866d7ef,
114621 - 0xa1fc6b9681428c85, 0x7bf03c19d7917c7b, 0x5715f7915b33eb41,
114622 - 0xdb0708fd8f6cae5f, 0x785ce6b7b125ac8e, 0x6f46eadb56c6815b,
114623 - 0x195355d84eeebeee, 0x9d7389c0a244de3c, 0xcf99d01953761abd,
114624 - 0x0d76ce39de9ec24b, 0x2e55ecee70beb181, 0xf56d9d4bd5f86079,
114625 - 0x13ef5a83fb8886fb, 0x3f3389a4408f43c5, 0x58ccf45cfad37943,
114626 - 0x415c7f3ef82df846, 0x8b3d5cf42915e818, 0xf8dbb57a6a445f27,
114627 - 0x8ad803ecca8f0070, 0x038f9245b2e87c34, 0xc7c9dee0bedd8a6c,
114628 - 0x2ad3fa140eac7d56, 0xf775677ce0de0840, 0x92be221ef1bd0ad5,
114629 - 0xce9d04a487fa1fb9, 0x3f6f7024d2c36fa9, 0x907855eeb028af62,
114630 - 0x4efac5dcd83e49d6, 0x77cd8c6be7151aab, 0x0af908b40a753b7d,
114631 - 0xe50f30278c983623, 0x1d08e2d694222771, 0xf2ee5ca6f7e928e6,
114632 - 0x11eb962b1b61b93c, 0xce2bcba19648b21c, 0x7bbebe3034f77154,
114633 - 0x8ce329ace526a319, 0xb5dc53d5de4a74d2, 0x000000000009e8b3,
114634 + [TENS_P11_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
114635 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114636 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114637 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114638 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114639 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114640 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114641 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114642 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114643 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114644 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114645 + 0x0000000000000000ull, 0xe30968651333e001ull, 0x49e28dcfb27d4d3full,
114646 + 0xee87e354ec2e4721ull, 0x368b8abbb6067584ull, 0x2ed56d55a5e5a191ull,
114647 + 0xea50d142fd827773ull, 0x98342c9e51b78db2ull, 0x866ed6f1c850dabcull,
114648 + 0x9279498719342c12ull, 0x66912e4ad2f869c2ull, 0x57a7842d71c7fd8full,
114649 + 0xfb7fedcc235552ebull, 0x38209ce1f3861ce0ull, 0x34c101349713b449ull,
114650 + 0xa7a8289c8c6c54deull, 0xe3cb64f32dbb6643ull, 0xe3892ee98074ff01ull,
114651 + 0xa8f16f9210c17f94ull, 0x967abbb3a8281ed6ull, 0x9952fbed5a151440ull,
114652 + 0xafe609c313b41e44ull, 0xf111821fa2bca416ull, 0x91bac974fb1264b4ull,
114653 + 0x8e48ff35d6c7d6abull, 0xc4a656654419bd43ull, 0x33554c36685e5510ull,
114654 + 0x0dbd21feab498697ull, 0x982da4663cfe491dull, 0x9e110c7bcbea4ca7ull,
114655 + 0x5fc5a04779c56b8aull, 0x1aa9f44484d80e2eull, 0x6a57b1ab730f203cull,
114656 + 0x87a7dc62d752f7a6ull, 0x40660460944545ffull, 0xc9ac375d77c1a42full,
114657 + 0x744695f0e866d7efull, 0xa1fc6b9681428c85ull, 0x7bf03c19d7917c7bull,
114658 + 0x5715f7915b33eb41ull, 0xdb0708fd8f6cae5full, 0x785ce6b7b125ac8eull,
114659 + 0x6f46eadb56c6815bull, 0x195355d84eeebeeeull, 0x9d7389c0a244de3cull,
114660 + 0xcf99d01953761abdull, 0x0d76ce39de9ec24bull, 0x2e55ecee70beb181ull,
114661 + 0xf56d9d4bd5f86079ull, 0x13ef5a83fb8886fbull, 0x3f3389a4408f43c5ull,
114662 + 0x58ccf45cfad37943ull, 0x415c7f3ef82df846ull, 0x8b3d5cf42915e818ull,
114663 + 0xf8dbb57a6a445f27ull, 0x8ad803ecca8f0070ull, 0x038f9245b2e87c34ull,
114664 + 0xc7c9dee0bedd8a6cull, 0x2ad3fa140eac7d56ull, 0xf775677ce0de0840ull,
114665 + 0x92be221ef1bd0ad5ull, 0xce9d04a487fa1fb9ull, 0x3f6f7024d2c36fa9ull,
114666 + 0x907855eeb028af62ull, 0x4efac5dcd83e49d6ull, 0x77cd8c6be7151aabull,
114667 + 0x0af908b40a753b7dull, 0xe50f30278c983623ull, 0x1d08e2d694222771ull,
114668 + 0xf2ee5ca6f7e928e6ull, 0x11eb962b1b61b93cull, 0xce2bcba19648b21cull,
114669 + 0x7bbebe3034f77154ull, 0x8ce329ace526a319ull, 0xb5dc53d5de4a74d2ull,
114670 + 0x000000000009e8b3ull,
114672 # define TENS_P12_IDX (TENS_P11_IDX + TENS_P11_SIZE)
114673 # define TENS_P12_SIZE 214
114674 - [TENS_P12_IDX] = 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114675 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114676 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114677 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114678 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114679 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114680 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114681 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114682 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114683 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114684 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114685 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114686 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114687 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114688 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114689 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114690 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114691 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114692 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114693 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114694 - 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
114695 - 0x0000000000000000, 0x0000000000000000, 0xd4724e8d2a67c001,
114696 - 0xf89a1e908efe7ae7, 0x54e05154ef084117, 0x506be82913b1bb51,
114697 - 0xe599574efb29b172, 0x806c0ed3f0da6146, 0x45155e93b86ae5be,
114698 - 0x7e1e7c34c0591cc2, 0x1d1f4cce7c4823da, 0xd6bfdf759b8ba1e8,
114699 - 0xc2dfae78e341be10, 0x0f237f1a016b67b2, 0xaf6a25743dbeabcd,
114700 - 0x142e0e80cab3e6d7, 0x2c23481161959127, 0xcb4bf98287009701,
114701 - 0x88052f8cf8169c84, 0xbc13176168dde6d4, 0x54ab9c41ff0b0905,
114702 - 0x1a1c304e7613b224, 0x441c2d473bfe167b, 0x78f061814f6cea9c,
114703 - 0x30c7ae41eb659fb8, 0xa1ebcad7947e0d0e, 0x2130504dd97d9556,
114704 - 0xf2acd5071a8309cb, 0xfd82373a3f8ec72a, 0x280f4d3295a842bc,
114705 - 0x811a4f04f3618ac0, 0xd3967a1b6dc3a5b4, 0xdcfe388f15b8c898,
114706 - 0x8738b909454eb2a0, 0x2bd9cc1110c4e996, 0x655fec303297cd0c,
114707 - 0xf4090ee8ae0725b1, 0x398c6fed037d19ee, 0xc994a4503b9af26b,
114708 - 0x75a697b2b5341743, 0x3ccb5b92ac50b9c1, 0xa8329761ffe06205,
114709 - 0xeb83cadbdfea5242, 0x3c20ee69e79dadf7, 0x7021b97a1e0a6817,
114710 - 0x176ca776743074fa, 0xeca19beb77fb8af6, 0xaf63b71292baf1de,
114711 - 0xa4eb8f8cde35c88b, 0x40b464a0e137d5e9, 0x42923bbd87d1cde8,
114712 - 0x2e2690f3cd8f62ff, 0x59c89f1b095edc16, 0x5138753d1fa8fd5d,
114713 - 0x80152f18390a2b29, 0xf984d83e2dd8d925, 0xc19e1faf7a872e74,
114714 - 0xecf9b5d0ed4d542d, 0xc53c0adf9462ea75, 0x37a2d4390caea134,
114715 - 0x2181327ec8fa2e8a, 0x2d2408206e7bb827, 0x5893d4b850be10e0,
114716 - 0x1f2b2322ab312bb9, 0xbf627ede440b3f25, 0xb608b89572dac789,
114717 - 0x86deb3f078787e2a, 0xbb9373f46fee7aab, 0xf7d8b57e27ecf57b,
114718 - 0x3d04e8d2fca26a9f, 0x3172826ac9df13cb, 0xa8fcd8e0cd9e8d7c,
114719 - 0x307641d9b2c39497, 0x2608c4cf1cc939c1, 0x3d326a7eb6d1c7bf,
114720 - 0x8e13e25feeaf19e6, 0x2dfe6d97ee63302b, 0xe41d3cc425971d58,
114721 - 0xab8db59a0a80627c, 0xe90afb779eea37c8, 0x9ee3352c90ca19cf,
114722 - 0xfe78d6823613c850, 0x5b060904788f6e50, 0x3fecb534b71bd1a4,
114723 - 0x20c33857b32c450c, 0x0239f4cea6e9cfda, 0xa19adb9548497187,
114724 - 0x95aca6a8b492ed8a, 0xcf1b23504dcd6cd9, 0x1a67778cfbe8b12a,
114725 - 0xc32da38338eb3acc, 0xa03f40a8fb126ab1, 0xe9ce4724ed5bf546,
114726 - 0x73a130d84c4a74fd, 0xa2ebd6c1d9960e2d, 0x6f233b7c94ab6feb,
114727 - 0x8e7b9a7349126080, 0xd298f9994b8c9091, 0xa96ddeff35e836b5,
114728 - 0x6b0dd9bc96119b31, 0x282566fbc6cc3f8d, 0xd6769f3b72b882e7,
114729 - 0x00fc509ba674343d, 0xd6266a3fdcbf7789, 0x4e89541bae9641fd,
114730 - 0x53400d0311953407, 0xe5b533458e0dd75a, 0x108b89bc108f19ad,
114731 - 0xe03b2b6341a4c954, 0x97aced8e437b3d7f, 0x2c5508c2cbd66670,
114732 - 0x5c4f2ef0650ebc69, 0x9985a2df904ff6bf, 0x5ed8d2399faddd9e,
114733 - 0xe3e51cb925585832, 0x56c02d9a0ff4f1d4, 0xc1a08a138c4ef804,
114734 - 0xe6d2767113fd01c8, 0x9d0176cca7c234f4, 0x4d8bfa89d0d73df2,
114735 - 0x2b17e0b2544f10cd, 0xfd86fe49b70a5c7d, 0x214495bbdf373f41,
114736 - 0x00d313d584e857fd, 0xa4ba47440496fcbe, 0xaec29e6ee8cac982,
114737 - 0x7000a51987ec7038, 0xff66e42caeee333b, 0x03b4f63b8afd6b25,
114738 - 0x5ab8d9c7bd7991dc, 0x48741a6c2ed4684e, 0x2fdc6349af06940d,
114739 - 0xe974996fb03d7ecd, 0x52ec8721ac7867f9, 0x8edd2d00bcdd9d4a,
114740 - 0x41c759f83557de06, 0xa75409f23956d4b9, 0xb6100fab123cd8a1,
114741 - 0x2e8d623b3e7b21e2, 0xbca35f7792959da2, 0x35fcb457200c03a5,
114742 - 0xf74eb9281bb6c6e4, 0x87cc1d213d5d0b54, 0x18ae42404964046f,
114743 - 0x8bd2b496d868b275, 0xc234d8f51c5563f4, 0xf9151ffff868e970,
114744 - 0x271133eeae7be4a2, 0x25254932bb0fd922, 0x104bcd64a60a9fc0,
114745 - 0x0000006230290145
114746 + [TENS_P12_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
114747 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114748 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114749 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114750 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114751 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114752 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114753 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114754 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114755 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114756 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114757 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114758 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114759 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114760 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114761 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114762 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114763 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114764 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114765 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114766 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114767 + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
114768 + 0xd4724e8d2a67c001ull, 0xf89a1e908efe7ae7ull, 0x54e05154ef084117ull,
114769 + 0x506be82913b1bb51ull, 0xe599574efb29b172ull, 0x806c0ed3f0da6146ull,
114770 + 0x45155e93b86ae5beull, 0x7e1e7c34c0591cc2ull, 0x1d1f4cce7c4823daull,
114771 + 0xd6bfdf759b8ba1e8ull, 0xc2dfae78e341be10ull, 0x0f237f1a016b67b2ull,
114772 + 0xaf6a25743dbeabcdull, 0x142e0e80cab3e6d7ull, 0x2c23481161959127ull,
114773 + 0xcb4bf98287009701ull, 0x88052f8cf8169c84ull, 0xbc13176168dde6d4ull,
114774 + 0x54ab9c41ff0b0905ull, 0x1a1c304e7613b224ull, 0x441c2d473bfe167bull,
114775 + 0x78f061814f6cea9cull, 0x30c7ae41eb659fb8ull, 0xa1ebcad7947e0d0eull,
114776 + 0x2130504dd97d9556ull, 0xf2acd5071a8309cbull, 0xfd82373a3f8ec72aull,
114777 + 0x280f4d3295a842bcull, 0x811a4f04f3618ac0ull, 0xd3967a1b6dc3a5b4ull,
114778 + 0xdcfe388f15b8c898ull, 0x8738b909454eb2a0ull, 0x2bd9cc1110c4e996ull,
114779 + 0x655fec303297cd0cull, 0xf4090ee8ae0725b1ull, 0x398c6fed037d19eeull,
114780 + 0xc994a4503b9af26bull, 0x75a697b2b5341743ull, 0x3ccb5b92ac50b9c1ull,
114781 + 0xa8329761ffe06205ull, 0xeb83cadbdfea5242ull, 0x3c20ee69e79dadf7ull,
114782 + 0x7021b97a1e0a6817ull, 0x176ca776743074faull, 0xeca19beb77fb8af6ull,
114783 + 0xaf63b71292baf1deull, 0xa4eb8f8cde35c88bull, 0x40b464a0e137d5e9ull,
114784 + 0x42923bbd87d1cde8ull, 0x2e2690f3cd8f62ffull, 0x59c89f1b095edc16ull,
114785 + 0x5138753d1fa8fd5dull, 0x80152f18390a2b29ull, 0xf984d83e2dd8d925ull,
114786 + 0xc19e1faf7a872e74ull, 0xecf9b5d0ed4d542dull, 0xc53c0adf9462ea75ull,
114787 + 0x37a2d4390caea134ull, 0x2181327ec8fa2e8aull, 0x2d2408206e7bb827ull,
114788 + 0x5893d4b850be10e0ull, 0x1f2b2322ab312bb9ull, 0xbf627ede440b3f25ull,
114789 + 0xb608b89572dac789ull, 0x86deb3f078787e2aull, 0xbb9373f46fee7aabull,
114790 + 0xf7d8b57e27ecf57bull, 0x3d04e8d2fca26a9full, 0x3172826ac9df13cbull,
114791 + 0xa8fcd8e0cd9e8d7cull, 0x307641d9b2c39497ull, 0x2608c4cf1cc939c1ull,
114792 + 0x3d326a7eb6d1c7bfull, 0x8e13e25feeaf19e6ull, 0x2dfe6d97ee63302bull,
114793 + 0xe41d3cc425971d58ull, 0xab8db59a0a80627cull, 0xe90afb779eea37c8ull,
114794 + 0x9ee3352c90ca19cfull, 0xfe78d6823613c850ull, 0x5b060904788f6e50ull,
114795 + 0x3fecb534b71bd1a4ull, 0x20c33857b32c450cull, 0x0239f4cea6e9cfdaull,
114796 + 0xa19adb9548497187ull, 0x95aca6a8b492ed8aull, 0xcf1b23504dcd6cd9ull,
114797 + 0x1a67778cfbe8b12aull, 0xc32da38338eb3accull, 0xa03f40a8fb126ab1ull,
114798 + 0xe9ce4724ed5bf546ull, 0x73a130d84c4a74fdull, 0xa2ebd6c1d9960e2dull,
114799 + 0x6f233b7c94ab6febull, 0x8e7b9a7349126080ull, 0xd298f9994b8c9091ull,
114800 + 0xa96ddeff35e836b5ull, 0x6b0dd9bc96119b31ull, 0x282566fbc6cc3f8dull,
114801 + 0xd6769f3b72b882e7ull, 0x00fc509ba674343dull, 0xd6266a3fdcbf7789ull,
114802 + 0x4e89541bae9641fdull, 0x53400d0311953407ull, 0xe5b533458e0dd75aull,
114803 + 0x108b89bc108f19adull, 0xe03b2b6341a4c954ull, 0x97aced8e437b3d7full,
114804 + 0x2c5508c2cbd66670ull, 0x5c4f2ef0650ebc69ull, 0x9985a2df904ff6bfull,
114805 + 0x5ed8d2399faddd9eull, 0xe3e51cb925585832ull, 0x56c02d9a0ff4f1d4ull,
114806 + 0xc1a08a138c4ef804ull, 0xe6d2767113fd01c8ull, 0x9d0176cca7c234f4ull,
114807 + 0x4d8bfa89d0d73df2ull, 0x2b17e0b2544f10cdull, 0xfd86fe49b70a5c7dull,
114808 + 0x214495bbdf373f41ull, 0x00d313d584e857fdull, 0xa4ba47440496fcbeull,
114809 + 0xaec29e6ee8cac982ull, 0x7000a51987ec7038ull, 0xff66e42caeee333bull,
114810 + 0x03b4f63b8afd6b25ull, 0x5ab8d9c7bd7991dcull, 0x48741a6c2ed4684eull,
114811 + 0x2fdc6349af06940dull, 0xe974996fb03d7ecdull, 0x52ec8721ac7867f9ull,
114812 + 0x8edd2d00bcdd9d4aull, 0x41c759f83557de06ull, 0xa75409f23956d4b9ull,
114813 + 0xb6100fab123cd8a1ull, 0x2e8d623b3e7b21e2ull, 0xbca35f7792959da2ull,
114814 + 0x35fcb457200c03a5ull, 0xf74eb9281bb6c6e4ull, 0x87cc1d213d5d0b54ull,
114815 + 0x18ae42404964046full, 0x8bd2b496d868b275ull, 0xc234d8f51c5563f4ull,
114816 + 0xf9151ffff868e970ull, 0x271133eeae7be4a2ull, 0x25254932bb0fd922ull,
114817 + 0x104bcd64a60a9fc0ull, 0x0000006230290145ull
114818 #endif
114821 diff -u -udbrN glibc-2.3.2/stdlib/fpioconst.h glibc-2.3.2-200304020432/stdlib/fpioconst.h
114822 --- glibc-2.3.2/stdlib/fpioconst.h Tue Mar 12 10:24:56 2002
114823 +++ glibc-2.3.2-200304020432/stdlib/fpioconst.h Fri Mar 14 05:21:27 2003
114824 @@ -1,5 +1,6 @@
114825 /* Header file for constants used in floating point <-> decimal conversions.
114826 - Copyright (C) 1995,1996,1997,1998,1999,2002 Free Software Foundation, Inc.
114827 + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2002, 2003
114828 + Free Software Foundation, Inc.
114829 This file is part of the GNU C Library.
114831 The GNU C Library is free software; you can redistribute it and/or
114832 @@ -22,7 +23,7 @@
114834 #include <float.h>
114835 #include <math.h>
114836 -#include "gmp.h"
114837 +#include <gmp.h>
114840 /* These values are used by __printf_fp, where they are noncritical (if the
114841 diff -u -udbrN glibc-2.3.2/stdlib/stdlib.h glibc-2.3.2-200304020432/stdlib/stdlib.h
114842 --- glibc-2.3.2/stdlib/stdlib.h Wed Aug 28 04:11:33 2002
114843 +++ glibc-2.3.2-200304020432/stdlib/stdlib.h Sat Mar 1 23:31:46 2003
114844 @@ -410,7 +410,9 @@
114845 /* Read a number from a string S in base 64 as above. */
114846 extern long int a64l (__const char *__s) __THROW __attribute_pure__;
114848 +#endif /* Use SVID || extended X/Open. */
114850 +#if defined __USE_SVID || defined __USE_XOPEN_EXTENDED || defined __USE_BSD
114851 # include <sys/types.h> /* we need int32_t... */
114853 /* These are the functions that actually do things. The `random', `srandom',
114854 @@ -463,7 +465,7 @@
114855 extern int setstate_r (char *__restrict __statebuf,
114856 struct random_data *__restrict __buf) __THROW;
114857 # endif /* Use misc. */
114858 -#endif /* Use SVID || extended X/Open. */
114859 +#endif /* Use SVID || extended X/Open || BSD. */
114862 __BEGIN_NAMESPACE_STD
114863 diff -u -udbrN glibc-2.3.2/stdlib/strtod.c glibc-2.3.2-200304020432/stdlib/strtod.c
114864 --- glibc-2.3.2/stdlib/strtod.c Sat Feb 22 10:10:31 2003
114865 +++ glibc-2.3.2-200304020432/stdlib/strtod.c Sat Mar 29 20:04:35 2003
114866 @@ -64,9 +64,11 @@
114867 /* The gmp headers need some configuration frobs. */
114868 #define HAVE_ALLOCA 1
114870 +/* Include gmp-mparam.h first, such that definitions of _SHORT_LIMB
114871 + and _LONG_LONG_LIMB in it can take effect into gmp.h. */
114872 +#include <gmp-mparam.h>
114873 #include <gmp.h>
114874 #include <gmp-impl.h>
114875 -#include <gmp-mparam.h>
114876 #include <longlong.h>
114877 #include "fpioconst.h"
114879 @@ -157,7 +159,7 @@
114880 # define MAX_FAC_PER_LIMB 1000000000UL
114881 #elif BITS_PER_MP_LIMB == 64
114882 # define MAX_DIG_PER_LIMB 19
114883 -# define MAX_FAC_PER_LIMB 10000000000000000000UL
114884 +# define MAX_FAC_PER_LIMB 10000000000000000000ULL
114885 #else
114886 # error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
114887 #endif
114888 @@ -166,14 +168,14 @@
114889 /* Local data structure. */
114890 static const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1] =
114891 { 0, 10, 100,
114892 - 1000, 10000, 100000,
114893 - 1000000, 10000000, 100000000,
114894 - 1000000000
114895 + 1000, 10000, 100000L,
114896 + 1000000L, 10000000L, 100000000L,
114897 + 1000000000L
114898 #if BITS_PER_MP_LIMB > 32
114899 - , 10000000000U, 100000000000U,
114900 - 1000000000000U, 10000000000000U, 100000000000000U,
114901 - 1000000000000000U, 10000000000000000U, 100000000000000000U,
114902 - 1000000000000000000U, 10000000000000000000U
114903 + , 10000000000ULL, 100000000000ULL,
114904 + 1000000000000ULL, 10000000000000ULL, 100000000000000ULL,
114905 + 1000000000000000ULL, 10000000000000000ULL, 100000000000000000ULL,
114906 + 1000000000000000000ULL, 10000000000000000000ULL
114907 #endif
114908 #if BITS_PER_MP_LIMB > 64
114909 #error "Need to expand tens_in_limb table to" MAX_DIG_PER_LIMB
114910 @@ -566,7 +568,7 @@
114911 for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
114912 if (cp[cnt] != decimal[cnt])
114913 break;
114914 - if (decimal[cnt] == '\0' && cp[1] >= '0' && cp[1] <= '9')
114915 + if (decimal[cnt] == '\0' && cp[cnt] >= '0' && cp[cnt] <= '9')
114917 /* We accept it. This funny construct is here only to indent
114918 the code directly. */
114919 @@ -880,7 +882,7 @@
114920 if (dig_no == int_no && dig_no > 0 && exponent < 0)
114923 - while (expp[-1] < L_('0') || expp[-1] > L_('9'))
114924 + while (! (base == 16 ? ISXDIGIT (expp[-1]) : ISDIGIT (expp[-1])))
114925 --expp;
114927 if (expp[-1] != L_('0'))
114928 diff -u -udbrN glibc-2.3.2/stdlib/tst-strtod.c glibc-2.3.2-200304020432/stdlib/tst-strtod.c
114929 --- glibc-2.3.2/stdlib/tst-strtod.c Sat Feb 22 10:08:26 2003
114930 +++ glibc-2.3.2-200304020432/stdlib/tst-strtod.c Thu Mar 20 02:06:11 2003
114931 @@ -71,6 +71,7 @@
114932 { "-Inf", -HUGE_VAL, '\0', 0 },
114933 { "+InFiNiTy", HUGE_VAL, '\0', 0 },
114934 #endif
114935 + { "0x80000Ap-23", 0x80000Ap-23, '\0', 0 },
114936 { NULL, 0, '\0', 0 }
114939 diff -u -udbrN glibc-2.3.2/sysdeps/alpha/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/alpha/fpu/libm-test-ulps
114940 --- glibc-2.3.2/sysdeps/alpha/fpu/libm-test-ulps Mon Aug 19 19:57:42 2002
114941 +++ glibc-2.3.2-200304020432/sysdeps/alpha/fpu/libm-test-ulps Sun Mar 23 01:52:10 2003
114942 @@ -94,7 +94,7 @@
114943 idouble: 1
114945 # ccos
114946 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
114947 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
114948 float: 1
114949 ifloat: 1
114950 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
114951 @@ -107,10 +107,10 @@
114952 ifloat: 1
114954 # ccosh
114955 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
114956 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
114957 float: 1
114958 ifloat: 1
114959 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
114960 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
114961 float: 1
114962 ifloat: 1
114963 Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
114964 @@ -145,7 +145,7 @@
114965 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
114966 float: 1
114967 ifloat: 1
114968 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
114969 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
114970 double: 1
114971 float: 5
114972 idouble: 1
114973 @@ -239,7 +239,7 @@
114974 ifloat: 2
114976 # csinh
114977 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
114978 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
114979 double: 1
114980 idouble: 1
114981 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
114982 @@ -258,7 +258,7 @@
114983 ifloat: 1
114985 # ctan
114986 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
114987 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
114988 double: 1
114989 idouble: 1
114990 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
114991 @@ -266,7 +266,7 @@
114992 idouble: 1
114994 # ctanh
114995 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
114996 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
114997 double: 1
114998 float: 2
114999 idouble: 1
115000 @@ -453,12 +453,12 @@
115001 ifloat: 2
115003 # lgamma
115004 -Test "lgamma (0.7) == 0.26086724653166651439":
115005 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
115006 double: 1
115007 float: 1
115008 idouble: 1
115009 ifloat: 1
115010 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
115011 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
115012 double: 1
115013 float: 2
115014 idouble: 1
115015 @@ -513,7 +513,7 @@
115016 Test "tgamma (0.5) == sqrt (pi)":
115017 float: 1
115018 ifloat: 1
115019 -Test "tgamma (0.7) == 1.29805533264755778568":
115020 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
115021 double: 1
115022 float: 1
115023 idouble: 1
115024 diff -u -udbrN glibc-2.3.2/sysdeps/arm/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/arm/libm-test-ulps
115025 --- glibc-2.3.2/sysdeps/arm/libm-test-ulps Tue Apr 17 20:55:56 2001
115026 +++ glibc-2.3.2-200304020432/sysdeps/arm/libm-test-ulps Sun Mar 23 01:52:10 2003
115027 @@ -134,7 +134,7 @@
115028 idouble: 1
115030 # ccos
115031 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
115032 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
115033 float: 1
115034 ifloat: 1
115035 Test "Real part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
115036 @@ -145,10 +145,10 @@
115037 idouble: 1
115039 # ccosh
115040 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
115041 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
115042 float: 1
115043 ifloat: 1
115044 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
115045 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
115046 float: 1
115047 ifloat: 1
115048 Test "Real part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
115049 @@ -187,7 +187,7 @@
115050 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
115051 float: 1
115052 ifloat: 1
115053 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
115054 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
115055 double: 1
115056 float: 5
115057 idouble: 1
115058 @@ -280,7 +280,7 @@
115059 ifloat: 1
115061 # csinh
115062 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
115063 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
115064 double: 1
115065 idouble: 1
115066 Test "Real part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
115067 @@ -307,7 +307,7 @@
115068 ifloat: 1
115070 # ctan
115071 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
115072 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
115073 double: 1
115074 idouble: 1
115075 Test "Real part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
115076 @@ -320,7 +320,7 @@
115077 ifloat: 1
115079 # ctanh
115080 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
115081 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
115082 double: 1
115083 float: 2
115084 idouble: 1
115085 @@ -509,12 +509,12 @@
115086 ifloat: 2
115088 # lgamma
115089 -Test "lgamma (0.7) == 0.26086724653166651439":
115090 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
115091 double: 1
115092 float: 1
115093 idouble: 1
115094 ifloat: 1
115095 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
115096 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
115097 double: 1
115098 float: 2
115099 idouble: 1
115100 @@ -604,7 +604,7 @@
115101 Test "tgamma (0.5) == sqrt (pi)":
115102 float: 1
115103 ifloat: 1
115104 -Test "tgamma (0.7) == 1.29805533264755778568":
115105 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
115106 double: 1
115107 float: 1
115108 idouble: 1
115109 diff -u -udbrN glibc-2.3.2/sysdeps/arm/sysdep.h glibc-2.3.2-200304020432/sysdeps/arm/sysdep.h
115110 --- glibc-2.3.2/sysdeps/arm/sysdep.h Sat Jul 7 21:21:19 2001
115111 +++ glibc-2.3.2-200304020432/sysdeps/arm/sysdep.h Fri Mar 21 21:51:59 2003
115112 @@ -1,5 +1,5 @@
115113 /* Assembler macros for ARM.
115114 - Copyright (C) 1997, 1998 Free Software Foundation, Inc.
115115 + Copyright (C) 1997, 1998, 2003 Free Software Foundation, Inc.
115116 This file is part of the GNU C Library.
115118 The GNU C Library is free software; you can redistribute it and/or
115119 @@ -76,7 +76,7 @@
115120 #define CALL_MCOUNT \
115121 str lr,[sp, #-4]! ; \
115122 bl PLTJMP(mcount) ; \
115123 - ldr lr, [sp], #4
115124 + ldr lr, [sp], #4 ;
115125 #else
115126 #define CALL_MCOUNT /* Do nothing. */
115127 #endif
115128 diff -u -udbrN glibc-2.3.2/sysdeps/generic/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/generic/bits/atomic.h
115129 --- glibc-2.3.2/sysdeps/generic/bits/atomic.h Thu Jan 1 01:00:00 1970
115130 +++ glibc-2.3.2-200304020432/sysdeps/generic/bits/atomic.h Sun Mar 23 00:00:14 2003
115131 @@ -0,0 +1,43 @@
115132 +/* Copyright (C) 2003 Free Software Foundation, Inc.
115133 + This file is part of the GNU C Library.
115134 + Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
115136 + The GNU C Library is free software; you can redistribute it and/or
115137 + modify it under the terms of the GNU Lesser General Public
115138 + License as published by the Free Software Foundation; either
115139 + version 2.1 of the License, or (at your option) any later version.
115141 + The GNU C Library is distributed in the hope that it will be useful,
115142 + but WITHOUT ANY WARRANTY; without even the implied warranty of
115143 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
115144 + Lesser General Public License for more details.
115146 + You should have received a copy of the GNU Lesser General Public
115147 + License along with the GNU C Library; if not, write to the Free
115148 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
115149 + 02111-1307 USA. */
115151 +#ifndef _BITS_ATOMIC_H
115152 +#define _BITS_ATOMIC_H 1
115154 +/* We have by default no support for atomic operations. So define
115155 + them non-atomic. If this is a problem somebody will have to come
115156 + up with real definitions. */
115158 +/* The only basic operation needed is compare and exchange. */
115159 +#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
115160 + ({ __typeof (mem) __gmemp = (mem); \
115161 + __typeof (*mem) __gret = *__gmemp; \
115162 + __typeof (*mem) __gnewval = (newval); \
115164 + if (__gret == (oldval)) \
115165 + *__gmemp = __gnewval; \
115166 + __gret; })
115168 +#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
115169 + ({ __typeof (mem) __gmemp = (mem); \
115170 + __typeof (*mem) __gnewval = (newval); \
115172 + *__gmemp == (oldval) ? (*__gmemp = __gnewval, 0) : 1; })
115174 +#endif /* bits/atomic.h */
115175 diff -u -udbrN glibc-2.3.2/sysdeps/generic/bits/confname.h glibc-2.3.2-200304020432/sysdeps/generic/bits/confname.h
115176 --- glibc-2.3.2/sysdeps/generic/bits/confname.h Mon Feb 24 02:38:15 2003
115177 +++ glibc-2.3.2-200304020432/sysdeps/generic/bits/confname.h Fri Mar 14 07:20:58 2003
115178 @@ -62,8 +62,10 @@
115179 #define _PC_REC_XFER_ALIGN _PC_REC_XFER_ALIGN
115180 _PC_ALLOC_SIZE_MIN,
115181 #define _PC_ALLOC_SIZE_MIN _PC_ALLOC_SIZE_MIN
115182 - _PC_SYMLINK_MAX
115183 + _PC_SYMLINK_MAX,
115184 #define _PC_SYMLINK_MAX _PC_SYMLINK_MAX
115185 + _PC_2_SYMLINKS
115186 +#define _PC_2_SYMLINKS _PC_2_SYMLINKS
115189 /* Values for the argument to `sysconf'. */
115190 diff -u -udbrN glibc-2.3.2/sysdeps/generic/bits/time.h glibc-2.3.2-200304020432/sysdeps/generic/bits/time.h
115191 --- glibc-2.3.2/sysdeps/generic/bits/time.h Wed Oct 23 08:21:18 2002
115192 +++ glibc-2.3.2-200304020432/sysdeps/generic/bits/time.h Mon Mar 3 05:42:14 2003
115193 @@ -1,5 +1,5 @@
115194 /* System-dependent timing definitions. Generic version.
115195 - Copyright (C) 1996,1997,1999,2000,2001,2002 Free Software Foundation, Inc.
115196 + Copyright (C) 1996,1997,1999-2002,2003 Free Software Foundation, Inc.
115197 This file is part of the GNU C Library.
115199 The GNU C Library is free software; you can redistribute it and/or
115200 @@ -44,6 +44,8 @@
115201 # ifdef __USE_POSIX199309
115202 /* Identifier for system-wide realtime clock. */
115203 # define CLOCK_REALTIME 0
115204 +/* Monotonic system-wide clock. */
115205 +# define CLOCK_MONOTONIC 1
115206 /* High-resolution timer from the CPU. */
115207 # define CLOCK_PROCESS_CPUTIME_ID 2
115208 /* Thread-specific CPU-time clock. */
115209 diff -u -udbrN glibc-2.3.2/sysdeps/generic/bits/typesizes.h glibc-2.3.2-200304020432/sysdeps/generic/bits/typesizes.h
115210 --- glibc-2.3.2/sysdeps/generic/bits/typesizes.h Thu Oct 24 01:48:45 2002
115211 +++ glibc-2.3.2-200304020432/sysdeps/generic/bits/typesizes.h Tue Mar 25 21:33:05 2003
115212 @@ -1,5 +1,5 @@
115213 /* bits/typesizes.h -- underlying types for *_t. Generic version.
115214 - Copyright (C) 2002 Free Software Foundation, Inc.
115215 + Copyright (C) 2002, 2003 Free Software Foundation, Inc.
115216 This file is part of the GNU C Library.
115218 The GNU C Library is free software; you can redistribute it and/or
115219 @@ -54,7 +54,7 @@
115220 #define __SWBLK_T_TYPE __SLONGWORD_TYPE
115221 #define __KEY_T_TYPE __S32_TYPE
115222 #define __CLOCKID_T_TYPE __S32_TYPE
115223 -#define __TIMER_T_TYPE __S32_TYPE
115224 +#define __TIMER_T_TYPE void *
115225 #define __BLKSIZE_T_TYPE __SLONGWORD_TYPE
115226 #define __FSID_T_TYPE struct { int __val[2]; }
115228 diff -u -udbrN glibc-2.3.2/sysdeps/generic/dl-sysdep.c glibc-2.3.2-200304020432/sysdeps/generic/dl-sysdep.c
115229 --- glibc-2.3.2/sysdeps/generic/dl-sysdep.c Sun Feb 23 06:04:15 2003
115230 +++ glibc-2.3.2-200304020432/sysdeps/generic/dl-sysdep.c Sun Mar 16 00:09:21 2003
115231 @@ -140,6 +140,9 @@
115232 GL(dl_sysinfo) = av->a_un.a_val;
115233 break;
115234 #endif
115235 +#ifdef DL_PLATFORM_AUXV
115236 + DL_PLATFORM_AUXV
115237 +#endif
115240 #ifdef DL_SYSDEP_OSCHECK
115241 @@ -338,7 +341,7 @@
115243 /* Determine the total size of all strings together. */
115244 if (cnt == 1)
115245 - total = temp[0].len;
115246 + total = temp[0].len + 1;
115249 total = (1UL << (cnt - 2)) * (temp[0].len + temp[cnt - 1].len + 2);
115250 diff -u -udbrN glibc-2.3.2/sysdeps/generic/dl-sysdep.h glibc-2.3.2-200304020432/sysdeps/generic/dl-sysdep.h
115251 --- glibc-2.3.2/sysdeps/generic/dl-sysdep.h Thu Dec 19 19:36:08 2002
115252 +++ glibc-2.3.2-200304020432/sysdeps/generic/dl-sysdep.h Tue Mar 4 08:56:25 2003
115253 @@ -1,5 +1,5 @@
115254 /* System-specific settings for dynamic linker code. Generic version.
115255 - Copyright (C) 2002 Free Software Foundation, Inc.
115256 + Copyright (C) 2002, 2003 Free Software Foundation, Inc.
115257 This file is part of the GNU C Library.
115259 The GNU C Library is free software; you can redistribute it and/or
115260 @@ -17,6 +17,9 @@
115261 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
115262 02111-1307 USA. */
115264 +#ifndef _DL_SYSDEP_H
115265 +#define _DL_SYSDEP_H 1
115267 /* This macro must be defined to either 0 or 1.
115269 If 1, then an errno global variable hidden in ld.so will work right with
115270 @@ -30,3 +33,5 @@
115271 #else
115272 # define RTLD_PRIVATE_ERRNO 0
115273 #endif
115275 +#endif /* dl-sysdep.h */
115276 diff -u -udbrN glibc-2.3.2/sysdeps/generic/dl-tls.c glibc-2.3.2-200304020432/sysdeps/generic/dl-tls.c
115277 --- glibc-2.3.2/sysdeps/generic/dl-tls.c Thu Jan 30 21:58:27 2003
115278 +++ glibc-2.3.2-200304020432/sysdeps/generic/dl-tls.c Thu Mar 6 07:40:43 2003
115279 @@ -294,7 +294,7 @@
115281 /* Allocate a correctly aligned chunk of memory. */
115282 result = __libc_memalign (GL(dl_tls_static_align), size);
115283 - if (__builtin_expect (result != NULL, 0))
115284 + if (__builtin_expect (result != NULL, 1))
115286 /* Allocate the DTV. */
115287 void *allocated = result;
115288 @@ -415,6 +415,9 @@
115289 dtv_t *dtv = GET_DTV (tcb);
115291 /* The array starts with dtv[-1]. */
115292 +#ifdef SHARED
115293 + if (dtv != GL(dl_initial_dtv))
115294 +#endif
115295 free (dtv - 1);
115297 if (dealloc_tcb)
115298 diff -u -udbrN glibc-2.3.2/sysdeps/generic/elf/backtracesyms.c glibc-2.3.2-200304020432/sysdeps/generic/elf/backtracesyms.c
115299 --- glibc-2.3.2/sysdeps/generic/elf/backtracesyms.c Sat Jul 7 21:21:22 2001
115300 +++ glibc-2.3.2-200304020432/sysdeps/generic/elf/backtracesyms.c Mon Mar 10 10:12:11 2003
115301 @@ -1,5 +1,5 @@
115302 /* Return list with names for address in backtrace.
115303 - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
115304 + Copyright (C) 1998,1999,2000,2001,2003 Free Software Foundation, Inc.
115305 This file is part of the GNU C Library.
115306 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
115308 @@ -48,7 +48,7 @@
115309 /* Fill in the information we can get from `dladdr'. */
115310 for (cnt = 0; cnt < size; ++cnt)
115312 - status[cnt] = _dl_addr (array[cnt], &info[cnt]);
115313 + status[cnt] = _dl_addr (array[cnt], &info[cnt], NULL, NULL);
115314 if (status[cnt] && info[cnt].dli_fname && info[cnt].dli_fname[0] != '\0')
115315 /* We have some info, compute the length of the string which will be
115316 "<file-name>(<sym-name>) [+offset]. */
115317 diff -u -udbrN glibc-2.3.2/sysdeps/generic/elf/backtracesymsfd.c glibc-2.3.2-200304020432/sysdeps/generic/elf/backtracesymsfd.c
115318 --- glibc-2.3.2/sysdeps/generic/elf/backtracesymsfd.c Sat Jul 7 21:21:22 2001
115319 +++ glibc-2.3.2-200304020432/sysdeps/generic/elf/backtracesymsfd.c Mon Mar 10 10:12:11 2003
115320 @@ -1,5 +1,5 @@
115321 /* Write formatted list with names for addresses in backtrace to a file.
115322 - Copyright (C) 1998, 2000 Free Software Foundation, Inc.
115323 + Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
115324 This file is part of the GNU C Library.
115325 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
115327 @@ -48,7 +48,7 @@
115328 Dl_info info;
115329 size_t last = 0;
115331 - if (_dl_addr (array[cnt], &info)
115332 + if (_dl_addr (array[cnt], &info, NULL, NULL)
115333 && info.dli_fname && info.dli_fname[0] != '\0')
115335 /* Name of the file. */
115336 diff -u -udbrN glibc-2.3.2/sysdeps/generic/ldconfig.h glibc-2.3.2-200304020432/sysdeps/generic/ldconfig.h
115337 --- glibc-2.3.2/sysdeps/generic/ldconfig.h Sun Sep 15 04:18:58 2002
115338 +++ glibc-2.3.2-200304020432/sysdeps/generic/ldconfig.h Fri Mar 14 06:32:49 2003
115339 @@ -1,4 +1,4 @@
115340 -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
115341 +/* Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
115342 This file is part of the GNU C Library.
115343 Contributed by Andreas Jaeger <aj@suse.de>, 1999.
115345 @@ -32,6 +32,8 @@
115346 #define FLAG_X8664_LIB64 0x0300
115347 #define FLAG_S390_LIB64 0x0400
115348 #define FLAG_POWERPC_LIB64 0x0500
115349 +#define FLAG_MIPS64_LIBN32 0x0600
115350 +#define FLAG_MIPS64_LIBN64 0x0700
115352 /* Declared in cache.c. */
115353 extern void print_cache (const char *cache_name);
115354 diff -u -udbrN glibc-2.3.2/sysdeps/generic/ldsodefs.h glibc-2.3.2-200304020432/sysdeps/generic/ldsodefs.h
115355 --- glibc-2.3.2/sysdeps/generic/ldsodefs.h Fri Jan 3 21:42:47 2003
115356 +++ glibc-2.3.2-200304020432/sysdeps/generic/ldsodefs.h Thu Mar 27 02:15:04 2003
115357 @@ -97,9 +97,16 @@
115358 /* Reloc type classes as returned by elf_machine_type_class().
115359 ELF_RTYPE_CLASS_PLT means this reloc should not be satisfied by
115360 some PLT symbol, ELF_RTYPE_CLASS_COPY means this reloc should not be
115361 - satisfied by any symbol in the executable. */
115362 + satisfied by any symbol in the executable. Some architectures do
115363 + not support copy relocations. In this case we define the macro to
115364 + zero so that the code for handling them gets automatically optimized
115365 + out. */
115366 #define ELF_RTYPE_CLASS_PLT 1
115367 -#define ELF_RTYPE_CLASS_COPY 2
115368 +#ifndef DL_NO_COPY_RELOCS
115369 +# define ELF_RTYPE_CLASS_COPY 2
115370 +#else
115371 +# define ELF_RTYPE_CLASS_COPY 0
115372 +#endif
115374 /* ELF uses the PF_x macros to specify the segment permissions, mmap
115375 uses PROT_xxx. In most cases the three macros have the values 1, 2,
115376 @@ -552,6 +559,16 @@
115377 /* Cache the locations of MAP's hash table. */
115378 extern void _dl_setup_hash (struct link_map *map)
115379 internal_function attribute_hidden;
115382 +/* Collect the directories in the search path for LOADER's dependencies.
115383 + The data structure is defined in <dlfcn.h>. If COUNTING is true,
115384 + SI->dls_cnt and SI->dls_size are set; if false, those must be as set
115385 + by a previous call with COUNTING set, and SI must point to SI->dls_size
115386 + bytes to be used in filling in the result. */
115387 +extern void _dl_rtld_di_serinfo (struct link_map *loader,
115388 + Dl_serinfo *si, bool counting)
115389 + internal_function;
115392 /* Search loaded objects' symbol tables for a definition of the symbol
115393 diff -u -udbrN glibc-2.3.2/sysdeps/generic/libc-start.c glibc-2.3.2-200304020432/sysdeps/generic/libc-start.c
115394 --- glibc-2.3.2/sysdeps/generic/libc-start.c Fri Feb 14 23:59:15 2003
115395 +++ glibc-2.3.2-200304020432/sysdeps/generic/libc-start.c Tue Mar 18 02:54:24 2003
115396 @@ -44,21 +44,50 @@
115397 #endif
115400 -extern int BP_SYM (__libc_start_main) (int (*main) (int, char **, char **),
115401 +#ifdef LIBC_START_MAIN
115402 +# define STATIC static inline
115403 +#else
115404 +# define STATIC
115405 +# define LIBC_START_MAIN BP_SYM (__libc_start_main)
115406 +#endif
115408 +STATIC int LIBC_START_MAIN (int (*main) (int, char **, char **
115409 +#ifdef MAIN_AUXVEC_ARG
115410 + , void *
115411 +#endif
115414 int argc,
115415 char *__unbounded *__unbounded ubp_av,
115416 +#ifdef LIBC_START_MAIN_AUXVEC_ARG
115417 + ElfW(auxv_t) *__unbounded auxvec,
115418 +#endif
115419 +#ifdef INIT_MAIN_ARGS
115420 + __typeof (main) init,
115421 +#else
115422 void (*init) (void),
115423 +#endif
115424 void (*fini) (void),
115425 void (*rtld_fini) (void),
115426 void *__unbounded stack_end)
115427 __attribute__ ((noreturn));
115430 -/* GKM FIXME: GCC: this should get __BP_ prefix by virtue of the
115431 - BPs in the arglist of startup_info.main and startup_info.init. */
115432 -BP_SYM (__libc_start_main) (int (*main) (int, char **, char **),
115433 +STATIC int
115434 +LIBC_START_MAIN (int (*main) (int, char **, char **
115435 +#ifdef MAIN_AUXVEC_ARG
115436 + , void *
115437 +#endif
115439 int argc, char *__unbounded *__unbounded ubp_av,
115440 - void (*init) (void), void (*fini) (void),
115441 +#ifdef LIBC_START_MAIN_AUXVEC_ARG
115442 + ElfW(auxv_t) *__unbounded auxvec,
115443 +#endif
115444 +#ifdef INIT_MAIN_ARGS
115445 + __typeof (main) init,
115446 +#else
115447 + void (*init) (void),
115448 +#endif
115449 + void (*fini) (void),
115450 void (*rtld_fini) (void), void *__unbounded stack_end)
115452 char *__unbounded *__unbounded ubp_ev = &ubp_av[argc + 1];
115453 @@ -80,13 +109,18 @@
115455 #ifndef SHARED
115456 # ifdef HAVE_AUX_VECTOR
115457 - void *__unbounded *__unbounded auxvec;
115458 /* First process the auxiliary vector since we need to find the
115459 program header to locate an eventually present PT_TLS entry. */
115460 - for (auxvec = (void *__unbounded *__unbounded) ubp_ev;
115461 - *auxvec != NULL; ++auxvec);
115462 - ++auxvec;
115463 - _dl_aux_init ((ElfW(auxv_t) *) auxvec);
115464 +# ifndef LIBC_START_MAIN_AUXVEC_ARG
115465 + ElfW(auxv_t) *__unbounded auxvec;
115467 + char *__unbounded *__unbounded evp = ubp_ev;
115468 + while (*evp++ != NULL)
115470 + auxvec = (ElfW(auxv_t) *__unbounded) evp;
115472 +# endif
115473 + _dl_aux_init (auxvec);
115474 # endif
115475 # ifdef DL_SYSDEP_OSCHECK
115476 if (!__libc_multiple_libcs)
115477 @@ -136,7 +170,14 @@
115478 _dl_debug_printf ("\ninitialize program: %s\n\n", argv[0]);
115479 #endif
115480 if (init)
115481 - (*init) ();
115482 + (*init) (
115483 +#ifdef INIT_MAIN_ARGS
115484 + argc, argv, __environ
115485 +# ifdef MAIN_AUXVEC_ARG
115486 + , auxvec
115487 +# endif
115488 +#endif
115491 #ifdef SHARED
115492 if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
115493 @@ -149,7 +190,12 @@
115495 /* XXX This is where the try/finally handling must be used. */
115497 - result = main (argc, argv, __environ);
115498 + result = main (argc, argv, __environ
115499 +#ifdef MAIN_AUXVEC_ARG
115500 + , auxvec
115501 +#endif
115505 #ifdef HAVE_CANCELBUF
115507 @@ -158,12 +204,11 @@
115508 /* One less thread. Decrement the counter. If it is zero we
115509 terminate the entire process. */
115510 result = 0;
115511 - int *const ptr;
115512 # ifdef SHARED
115513 - ptr = __libc_pthread_functions.ptr_nthreads;
115514 + int *const ptr = __libc_pthread_functions.ptr_nthreads;
115515 # else
115516 extern int __nptl_nthreads __attribute ((weak));
115517 - ptr = &__nptl_nthreads;
115518 + int *const ptr = &__nptl_nthreads;
115519 # endif
115521 if (! atomic_decrement_and_test (ptr))
115522 diff -u -udbrN glibc-2.3.2/sysdeps/generic/remap_file_pages.c glibc-2.3.2-200304020432/sysdeps/generic/remap_file_pages.c
115523 --- glibc-2.3.2/sysdeps/generic/remap_file_pages.c Thu Jan 1 01:00:00 1970
115524 +++ glibc-2.3.2-200304020432/sysdeps/generic/remap_file_pages.c Mon Mar 3 10:44:55 2003
115525 @@ -0,0 +1,35 @@
115526 +/* Copyright (C) 2003 Free Software Foundation, Inc.
115527 + This file is part of the GNU C Library.
115529 + The GNU C Library is free software; you can redistribute it and/or
115530 + modify it under the terms of the GNU Lesser General Public
115531 + License as published by the Free Software Foundation; either
115532 + version 2.1 of the License, or (at your option) any later version.
115534 + The GNU C Library is distributed in the hope that it will be useful,
115535 + but WITHOUT ANY WARRANTY; without even the implied warranty of
115536 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
115537 + Lesser General Public License for more details.
115539 + You should have received a copy of the GNU Lesser General Public
115540 + License along with the GNU C Library; if not, write to the Free
115541 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
115542 + 02111-1307 USA. */
115544 +#include <sys/mman.h>
115545 +#include <errno.h>
115547 +/* Remap arbitrary pages of a shared backing store within an existing
115548 + VMA. */
115551 +__remap_file_pages (void *start, size_t size, int prot, size_t pgoff,
115552 + int flags)
115554 + __set_errno (ENOSYS);
115555 + return -1;
115558 +stub_warning (remap_file_pages)
115559 +#include <stub-tag.h>
115560 +weak_alias (__remap_file_pages, remap_file_pages)
115561 diff -u -udbrN glibc-2.3.2/sysdeps/gnu/siglist.c glibc-2.3.2-200304020432/sysdeps/gnu/siglist.c
115562 --- glibc-2.3.2/sysdeps/gnu/siglist.c Sat Dec 21 19:38:36 2002
115563 +++ glibc-2.3.2-200304020432/sysdeps/gnu/siglist.c Tue Apr 1 07:51:02 2003
115564 @@ -1,5 +1,5 @@
115565 /* Define list of all signal numbers and their names.
115566 - Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
115567 + Copyright (C) 1997-2000, 2002, 2003 Free Software Foundation, Inc.
115568 This file is part of the GNU C Library.
115570 The GNU C Library is free software; you can redistribute it and/or
115571 @@ -31,11 +31,6 @@
115573 strong_alias (__new_sys_siglist, _sys_siglist_internal)
115575 -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
115576 -strong_alias (_sys_siglist_internal, __old_sys_siglist)
115577 -declare_symbol (__old_sys_siglist, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8)
115578 -#endif
115580 const char *const __new_sys_sigabbrev[NSIG] =
115582 #define init_sig(sig, abbrev, desc) [sig] = abbrev,
115583 @@ -45,6 +40,9 @@
115584 strong_alias (__new_sys_sigabbrev, _sys_sigabbrev_internal)
115586 #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
115587 +strong_alias (_sys_siglist_internal, __old_sys_siglist)
115588 +declare_symbol (__old_sys_siglist, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8)
115590 strong_alias (_sys_sigabbrev_internal, __old_sys_sigabbrev)
115591 declare_symbol (__old_sys_sigabbrev, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8)
115593 @@ -54,7 +52,26 @@
115594 compat_symbol (libc, __old_sys_sigabbrev, sys_sigabbrev, GLIBC_2_0);
115595 #endif
115597 +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) && defined OLD2_SIGLIST_SIZE
115598 +strong_alias (_sys_siglist_internal, __old2_sys_siglist)
115599 +declare_symbol (__old2_sys_siglist, object, OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
115601 +strong_alias (_sys_sigabbrev_internal, __old2_sys_sigabbrev)
115602 +declare_symbol (__old2_sys_sigabbrev, object,
115603 + OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
115605 +strong_alias (__old2_sys_siglist, _old2_sys_siglist)
115606 +compat_symbol (libc, __old2_sys_siglist, _sys_siglist, GLIBC_2_1);
115607 +compat_symbol (libc, _old2_sys_siglist, sys_siglist, GLIBC_2_1);
115608 +compat_symbol (libc, __old2_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1);
115610 +strong_alias (__new_sys_siglist, _new_sys_siglist)
115611 +versioned_symbol (libc, __new_sys_siglist, _sys_siglist, GLIBC_2_3_3);
115612 +versioned_symbol (libc, _new_sys_siglist, sys_siglist, GLIBC_2_3_3);
115613 +versioned_symbol (libc, __new_sys_sigabbrev, sys_sigabbrev, GLIBC_2_3_3);
115614 +#else
115615 strong_alias (__new_sys_siglist, _new_sys_siglist)
115616 versioned_symbol (libc, __new_sys_siglist, _sys_siglist, GLIBC_2_1);
115617 versioned_symbol (libc, _new_sys_siglist, sys_siglist, GLIBC_2_1);
115618 versioned_symbol (libc, __new_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1);
115619 +#endif
115620 diff -u -udbrN glibc-2.3.2/sysdeps/hppa/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/hppa/fpu/libm-test-ulps
115621 --- glibc-2.3.2/sysdeps/hppa/fpu/libm-test-ulps Tue Nov 19 07:40:57 2002
115622 +++ glibc-2.3.2-200304020432/sysdeps/hppa/fpu/libm-test-ulps Sun Mar 23 01:52:10 2003
115623 @@ -94,7 +94,7 @@
115624 idouble: 1
115626 # ccos
115627 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
115628 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
115629 float: 1
115630 ifloat: 1
115631 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
115632 @@ -107,10 +107,10 @@
115633 ifloat: 1
115635 # ccosh
115636 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
115637 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
115638 float: 1
115639 ifloat: 1
115640 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
115641 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
115642 float: 1
115643 ifloat: 1
115644 Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
115645 @@ -145,7 +145,7 @@
115646 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
115647 float: 1
115648 ifloat: 1
115649 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
115650 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
115651 double: 1
115652 float: 5
115653 idouble: 1
115654 @@ -239,7 +239,7 @@
115655 ifloat: 2
115657 # csinh
115658 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
115659 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
115660 double: 1
115661 idouble: 1
115662 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
115663 @@ -258,7 +258,7 @@
115664 ifloat: 1
115666 # ctan
115667 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
115668 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
115669 double: 1
115670 idouble: 1
115671 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
115672 @@ -266,7 +266,7 @@
115673 idouble: 1
115675 # ctanh
115676 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
115677 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
115678 double: 1
115679 float: 2
115680 idouble: 1
115681 @@ -453,12 +453,12 @@
115682 ifloat: 2
115684 # lgamma
115685 -Test "lgamma (0.7) == 0.26086724653166651439":
115686 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
115687 double: 1
115688 float: 1
115689 idouble: 1
115690 ifloat: 1
115691 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
115692 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
115693 double: 1
115694 float: 2
115695 idouble: 1
115696 @@ -513,7 +513,7 @@
115697 Test "tgamma (0.5) == sqrt (pi)":
115698 float: 1
115699 ifloat: 1
115700 -Test "tgamma (0.7) == 1.29805533264755778568":
115701 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
115702 double: 1
115703 float: 1
115704 idouble: 1
115705 diff -u -udbrN glibc-2.3.2/sysdeps/i386/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/i386/fpu/libm-test-ulps
115706 --- glibc-2.3.2/sysdeps/i386/fpu/libm-test-ulps Thu Feb 27 23:27:36 2003
115707 +++ glibc-2.3.2-200304020432/sysdeps/i386/fpu/libm-test-ulps Sat Mar 22 07:14:23 2003
115708 @@ -121,7 +121,7 @@
115709 ldouble: 1
115711 # ccos
115712 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
115713 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
115714 float: 1
115715 ifloat: 1
115716 ildouble: 1
115717 @@ -136,7 +136,7 @@
115718 ldouble: 1
115720 # ccosh
115721 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
115722 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
115723 double: 1
115724 float: 1
115725 idouble: 1
115726 @@ -181,7 +181,7 @@
115727 float: 1
115728 idouble: 1
115729 ifloat: 1
115730 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
115731 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
115732 double: 1
115733 idouble: 1
115734 ildouble: 1
115735 @@ -343,10 +343,10 @@
115736 ifloat: 1
115738 # csinh
115739 -Test "Real part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
115740 +Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
115741 double: 1
115742 idouble: 1
115743 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
115744 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
115745 double: 1
115746 float: 1
115747 idouble: 1
115748 @@ -363,10 +363,12 @@
115749 ifloat: 1
115751 # ctan
115752 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
115753 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
115754 +double: 1
115755 +idouble: 1
115756 ildouble: 439
115757 ldouble: 439
115758 -Test "Imaginary part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
115759 +Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
115760 float: 1
115761 ifloat: 1
115762 ildouble: 2
115763 @@ -381,10 +383,10 @@
115764 ldouble: 3
115766 # ctanh
115767 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
115768 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
115769 ildouble: 5
115770 ldouble: 5
115771 -Test "Imaginary part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
115772 +Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
115773 float: 1
115774 ifloat: 1
115775 ildouble: 25
115776 @@ -624,12 +626,12 @@
115777 idouble: 1
115778 ildouble: 1
115779 ldouble: 1
115780 -Test "lgamma (0.7) == 0.26086724653166651439":
115781 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
115782 float: 1
115783 ifloat: 1
115784 double: 1
115785 idouble: 1
115786 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
115787 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
115788 double: 1
115789 float: 2
115790 idouble: 1
115791 @@ -693,7 +695,7 @@
115792 Test "tgamma (0.5) == sqrt (pi)":
115793 float: 1
115794 ifloat: 1
115795 -Test "tgamma (0.7) == 1.29805533264755778568":
115796 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
115797 double: 1
115798 float: 1
115799 idouble: 1
115800 @@ -1057,11 +1059,15 @@
115801 ldouble: 2
115803 Function: Real part of "ctan":
115804 +double: 1
115805 +idouble: 1
115806 ildouble: 439
115807 ldouble: 439
115809 Function: Imaginary part of "ctan":
115810 +double: 1
115811 float: 1
115812 +idouble: 1
115813 ifloat: 1
115814 ildouble: 3
115815 ldouble: 3
115816 diff -u -udbrN glibc-2.3.2/sysdeps/i386/i486/atomicity.h glibc-2.3.2-200304020432/sysdeps/i386/i486/atomicity.h
115817 --- glibc-2.3.2/sysdeps/i386/i486/atomicity.h Sat Jul 7 21:21:23 2001
115818 +++ glibc-2.3.2-200304020432/sysdeps/i386/i486/atomicity.h Thu Jan 1 01:00:00 1970
115819 @@ -1,57 +0,0 @@
115820 -/* Low-level functions for atomic operations. ix86 version, x >= 4.
115821 - Copyright (C) 1997, 2000, 2001 Free Software Foundation, Inc.
115822 - This file is part of the GNU C Library.
115824 - The GNU C Library is free software; you can redistribute it and/or
115825 - modify it under the terms of the GNU Lesser General Public
115826 - License as published by the Free Software Foundation; either
115827 - version 2.1 of the License, or (at your option) any later version.
115829 - The GNU C Library is distributed in the hope that it will be useful,
115830 - but WITHOUT ANY WARRANTY; without even the implied warranty of
115831 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
115832 - Lesser General Public License for more details.
115834 - You should have received a copy of the GNU Lesser General Public
115835 - License along with the GNU C Library; if not, write to the Free
115836 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
115837 - 02111-1307 USA. */
115839 -#ifndef _ATOMICITY_H
115840 -#define _ATOMICITY_H 1
115842 -#include <inttypes.h>
115845 -static inline uint32_t
115846 -__attribute__ ((unused))
115847 -exchange_and_add (volatile uint32_t *mem, uint32_t val)
115849 - register uint32_t result;
115850 - __asm__ __volatile__ ("lock; xaddl %0,%1"
115851 - : "=r" (result), "=m" (*mem) : "0" (val), "1" (*mem));
115852 - return result;
115855 -static inline void
115856 -__attribute__ ((unused))
115857 -atomic_add (volatile uint32_t *mem, int val)
115859 - __asm__ __volatile__ ("lock; addl %1,%0"
115860 - : "=m" (*mem) : "ir" (val), "0" (*mem));
115863 -static inline char
115864 -__attribute__ ((unused))
115865 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
115867 - char ret;
115868 - long int readval;
115870 - __asm__ __volatile__ ("lock; cmpxchgl %3, %1; sete %0"
115871 - : "=q" (ret), "=m" (*p), "=a" (readval)
115872 - : "r" (newval), "1" (*p), "a" (oldval));
115873 - return ret;
115876 -#endif /* atomicity.h */
115877 diff -u -udbrN glibc-2.3.2/sysdeps/i386/i486/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/i386/i486/bits/atomic.h
115878 --- glibc-2.3.2/sysdeps/i386/i486/bits/atomic.h Thu Jan 1 01:00:00 1970
115879 +++ glibc-2.3.2-200304020432/sysdeps/i386/i486/bits/atomic.h Sat Mar 22 01:05:02 2003
115880 @@ -0,0 +1,359 @@
115881 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
115882 + This file is part of the GNU C Library.
115883 + Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
115885 + The GNU C Library is free software; you can redistribute it and/or
115886 + modify it under the terms of the GNU Lesser General Public
115887 + License as published by the Free Software Foundation; either
115888 + version 2.1 of the License, or (at your option) any later version.
115890 + The GNU C Library is distributed in the hope that it will be useful,
115891 + but WITHOUT ANY WARRANTY; without even the implied warranty of
115892 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
115893 + Lesser General Public License for more details.
115895 + You should have received a copy of the GNU Lesser General Public
115896 + License along with the GNU C Library; if not, write to the Free
115897 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
115898 + 02111-1307 USA. */
115900 +#include <stdint.h>
115903 +typedef int8_t atomic8_t;
115904 +typedef uint8_t uatomic8_t;
115905 +typedef int_fast8_t atomic_fast8_t;
115906 +typedef uint_fast8_t uatomic_fast8_t;
115908 +typedef int16_t atomic16_t;
115909 +typedef uint16_t uatomic16_t;
115910 +typedef int_fast16_t atomic_fast16_t;
115911 +typedef uint_fast16_t uatomic_fast16_t;
115913 +typedef int32_t atomic32_t;
115914 +typedef uint32_t uatomic32_t;
115915 +typedef int_fast32_t atomic_fast32_t;
115916 +typedef uint_fast32_t uatomic_fast32_t;
115918 +typedef int64_t atomic64_t;
115919 +typedef uint64_t uatomic64_t;
115920 +typedef int_fast64_t atomic_fast64_t;
115921 +typedef uint_fast64_t uatomic_fast64_t;
115923 +typedef intptr_t atomicptr_t;
115924 +typedef uintptr_t uatomicptr_t;
115925 +typedef intmax_t atomic_max_t;
115926 +typedef uintmax_t uatomic_max_t;
115929 +#ifndef LOCK
115930 +# ifdef UP
115931 +# define LOCK /* nothing */
115932 +# else
115933 +# define LOCK "lock;"
115934 +# endif
115935 +#endif
115938 +#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
115939 + ({ __typeof (*mem) ret; \
115940 + __asm __volatile (LOCK "cmpxchgb %b2, %1" \
115941 + : "=a" (ret), "=m" (*mem) \
115942 + : "q" (newval), "m" (*mem), "0" (oldval)); \
115943 + ret; })
115945 +#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
115946 + ({ __typeof (*mem) ret; \
115947 + __asm __volatile (LOCK "cmpxchgw %w2, %1" \
115948 + : "=a" (ret), "=m" (*mem) \
115949 + : "r" (newval), "m" (*mem), "0" (oldval)); \
115950 + ret; })
115952 +#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
115953 + ({ __typeof (*mem) ret; \
115954 + __asm __volatile (LOCK "cmpxchgl %2, %1" \
115955 + : "=a" (ret), "=m" (*mem) \
115956 + : "r" (newval), "m" (*mem), "0" (oldval)); \
115957 + ret; })
115959 +/* XXX We do not really need 64-bit compare-and-exchange. At least
115960 + not in the moment. Using it would mean causing portability
115961 + problems since not many other 32-bit architectures have support for
115962 + such an operation. So don't define any code for now. If it is
115963 + really going to be used the code below can be used on Intel Pentium
115964 + and later, but NOT on i486. */
115965 +#if 1
115966 +# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
115967 + ({ __typeof (*mem) ret = *(mem); abort (); ret = (newval); ret = (oldval); })
115968 +#else
115969 +# ifdef __PIC__
115970 +# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
115971 + ({ __typeof (*mem) ret; \
115972 + __asm __volatile ("xchgl %2, %%ebx\n\t" \
115973 + LOCK "cmpxchg8b %1\n\t" \
115974 + "xchgl %2, %%ebx" \
115975 + : "=A" (ret), "=m" (*mem) \
115976 + : "DS" (((unsigned long long int) (newval)) \
115977 + & 0xffffffff), \
115978 + "c" (((unsigned long long int) (newval)) >> 32), \
115979 + "m" (*mem), "a" (((unsigned long long int) (oldval)) \
115980 + & 0xffffffff), \
115981 + "d" (((unsigned long long int) (oldval)) >> 32)); \
115982 + ret; })
115983 +# else
115984 +# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
115985 + ({ __typeof (*mem) ret; \
115986 + __asm __volatile (LOCK "cmpxchg8b %1" \
115987 + : "=A" (ret), "=m" (*mem) \
115988 + : "b" (((unsigned long long int) (newval)) \
115989 + & 0xffffffff), \
115990 + "c" (((unsigned long long int) (newval)) >> 32), \
115991 + "m" (*mem), "a" (((unsigned long long int) (oldval)) \
115992 + & 0xffffffff), \
115993 + "d" (((unsigned long long int) (oldval)) >> 32)); \
115994 + ret; })
115995 +# endif
115996 +#endif
115999 +/* Note that we need no lock prefix. */
116000 +#define atomic_exchange(mem, newvalue) \
116001 + ({ __typeof (*mem) result; \
116002 + if (sizeof (*mem) == 1) \
116003 + __asm __volatile ("xchgb %b0, %1" \
116004 + : "=r" (result), "=m" (*mem) \
116005 + : "0" (newvalue), "m" (*mem)); \
116006 + else if (sizeof (*mem) == 2) \
116007 + __asm __volatile ("xchgw %w0, %1" \
116008 + : "=r" (result), "=m" (*mem) \
116009 + : "0" (newvalue), "m" (*mem)); \
116010 + else if (sizeof (*mem) == 4) \
116011 + __asm __volatile ("xchgl %0, %1" \
116012 + : "=r" (result), "=m" (*mem) \
116013 + : "0" (newvalue), "m" (*mem)); \
116014 + else \
116015 + { \
116016 + result = 0; \
116017 + abort (); \
116018 + } \
116019 + result; })
116022 +#define atomic_exchange_and_add(mem, value) \
116023 + ({ __typeof (*mem) result; \
116024 + __typeof (value) addval = (value); \
116025 + if (sizeof (*mem) == 1) \
116026 + __asm __volatile (LOCK "xaddb %b0, %1" \
116027 + : "=r" (result), "=m" (*mem) \
116028 + : "0" (addval), "m" (*mem)); \
116029 + else if (sizeof (*mem) == 2) \
116030 + __asm __volatile (LOCK "xaddw %w0, %1" \
116031 + : "=r" (result), "=m" (*mem) \
116032 + : "0" (addval), "m" (*mem)); \
116033 + else if (sizeof (*mem) == 4) \
116034 + __asm __volatile (LOCK "xaddl %0, %1" \
116035 + : "=r" (result), "=m" (*mem) \
116036 + : "0" (addval), "m" (*mem)); \
116037 + else \
116038 + { \
116039 + __typeof (mem) memp = (mem); \
116040 + do \
116041 + result = *memp; \
116042 + while (__arch_compare_and_exchange_val_64_acq (memp, \
116043 + result + addval, \
116044 + result) == result); \
116045 + } \
116046 + result; })
116049 +#define atomic_add(mem, value) \
116050 + (void) ({ if (__builtin_constant_p (value) && (value) == 1) \
116051 + atomic_increment (mem); \
116052 + else if (__builtin_constant_p (value) && (value) == 1) \
116053 + atomic_decrement (mem); \
116054 + else if (sizeof (*mem) == 1) \
116055 + __asm __volatile (LOCK "addb %b1, %0" \
116056 + : "=m" (*mem) \
116057 + : "ir" (value), "m" (*mem)); \
116058 + else if (sizeof (*mem) == 2) \
116059 + __asm __volatile (LOCK "addw %w1, %0" \
116060 + : "=m" (*mem) \
116061 + : "ir" (value), "m" (*mem)); \
116062 + else if (sizeof (*mem) == 4) \
116063 + __asm __volatile (LOCK "addl %1, %0" \
116064 + : "=m" (*mem) \
116065 + : "ir" (value), "m" (*mem)); \
116066 + else \
116067 + { \
116068 + __typeof (value) addval = (value); \
116069 + __typeof (*mem) oldval; \
116070 + __typeof (mem) memp = (mem); \
116071 + do \
116072 + oldval = *memp; \
116073 + while (__arch_compare_and_exchange_val_64_acq \
116074 + (memp, oldval + addval, oldval) == oldval); \
116075 + } \
116079 +#define atomic_add_negative(mem, value) \
116080 + ({ unsigned char __result; \
116081 + if (sizeof (*mem) == 1) \
116082 + __asm __volatile (LOCK "addb %b2, %0; sets %1" \
116083 + : "=m" (*mem), "=qm" (__result) \
116084 + : "iq" (value), "m" (*mem)); \
116085 + else if (sizeof (*mem) == 2) \
116086 + __asm __volatile (LOCK "addw %w2, %0; sets %1" \
116087 + : "=m" (*mem), "=qm" (__result) \
116088 + : "ir" (value), "m" (*mem)); \
116089 + else if (sizeof (*mem) == 4) \
116090 + __asm __volatile (LOCK "addl %2, %0; sets %1" \
116091 + : "=m" (*mem), "=qm" (__result) \
116092 + : "ir" (value), "m" (*mem)); \
116093 + else \
116094 + abort (); \
116095 + __result; })
116098 +#define atomic_add_zero(mem, value) \
116099 + ({ unsigned char __result; \
116100 + if (sizeof (*mem) == 1) \
116101 + __asm __volatile (LOCK "addb %b2, %0; setz %1" \
116102 + : "=m" (*mem), "=qm" (__result) \
116103 + : "ir" (value), "m" (*mem)); \
116104 + else if (sizeof (*mem) == 2) \
116105 + __asm __volatile (LOCK "addw %w2, %0; setz %1" \
116106 + : "=m" (*mem), "=qm" (__result) \
116107 + : "ir" (value), "m" (*mem)); \
116108 + else if (sizeof (*mem) == 4) \
116109 + __asm __volatile (LOCK "addl %2, %0; setz %1" \
116110 + : "=m" (*mem), "=qm" (__result) \
116111 + : "ir" (value), "m" (*mem)); \
116112 + else \
116113 + abort (); \
116114 + __result; })
116117 +#define atomic_increment(mem) \
116118 + (void) ({ if (sizeof (*mem) == 1) \
116119 + __asm __volatile (LOCK "incb %b0" \
116120 + : "=m" (*mem) \
116121 + : "m" (*mem)); \
116122 + else if (sizeof (*mem) == 2) \
116123 + __asm __volatile (LOCK "incw %w0" \
116124 + : "=m" (*mem) \
116125 + : "m" (*mem)); \
116126 + else if (sizeof (*mem) == 4) \
116127 + __asm __volatile (LOCK "incl %0" \
116128 + : "=m" (*mem) \
116129 + : "m" (*mem)); \
116130 + else \
116131 + { \
116132 + __typeof (*mem) oldval; \
116133 + __typeof (mem) memp = (mem); \
116134 + do \
116135 + oldval = *memp; \
116136 + while (__arch_compare_and_exchange_val_64_acq \
116137 + (memp, oldval + 1, oldval) == oldval); \
116138 + } \
116142 +#define atomic_increment_and_test(mem) \
116143 + ({ unsigned char __result; \
116144 + if (sizeof (*mem) == 1) \
116145 + __asm __volatile (LOCK "incb %0; sete %b1" \
116146 + : "=m" (*mem), "=qm" (__result) \
116147 + : "m" (*mem)); \
116148 + else if (sizeof (*mem) == 2) \
116149 + __asm __volatile (LOCK "incw %0; sete %w1" \
116150 + : "=m" (*mem), "=qm" (__result) \
116151 + : "m" (*mem)); \
116152 + else if (sizeof (*mem) == 4) \
116153 + __asm __volatile (LOCK "incl %0; sete %1" \
116154 + : "=m" (*mem), "=qm" (__result) \
116155 + : "m" (*mem)); \
116156 + else \
116157 + abort (); \
116158 + __result; })
116161 +#define atomic_decrement(mem) \
116162 + (void) ({ if (sizeof (*mem) == 1) \
116163 + __asm __volatile (LOCK "decb %b0" \
116164 + : "=m" (*mem) \
116165 + : "m" (*mem)); \
116166 + else if (sizeof (*mem) == 2) \
116167 + __asm __volatile (LOCK "decw %w0" \
116168 + : "=m" (*mem) \
116169 + : "m" (*mem)); \
116170 + else if (sizeof (*mem) == 4) \
116171 + __asm __volatile (LOCK "decl %0" \
116172 + : "=m" (*mem) \
116173 + : "m" (*mem)); \
116174 + else \
116175 + { \
116176 + __typeof (*mem) oldval; \
116177 + __typeof (mem) memp = (mem); \
116178 + do \
116179 + oldval = *memp; \
116180 + while (__arch_compare_and_exchange_val_64_acq \
116181 + (memp, oldval - 1, oldval) == oldval); \
116182 + } \
116186 +#define atomic_decrement_and_test(mem) \
116187 + ({ unsigned char __result; \
116188 + if (sizeof (*mem) == 1) \
116189 + __asm __volatile (LOCK "decb %b0; sete %1" \
116190 + : "=m" (*mem), "=qm" (__result) \
116191 + : "m" (*mem)); \
116192 + else if (sizeof (*mem) == 2) \
116193 + __asm __volatile (LOCK "decw %w0; sete %1" \
116194 + : "=m" (*mem), "=qm" (__result) \
116195 + : "m" (*mem)); \
116196 + else if (sizeof (*mem) == 4) \
116197 + __asm __volatile (LOCK "decl %0; sete %1" \
116198 + : "=m" (*mem), "=qm" (__result) \
116199 + : "m" (*mem)); \
116200 + else \
116201 + abort (); \
116202 + __result; })
116205 +#define atomic_bit_set(mem, bit) \
116206 + (void) ({ if (sizeof (*mem) == 1) \
116207 + __asm __volatile (LOCK "orb %b2, %0" \
116208 + : "=m" (*mem) \
116209 + : "m" (*mem), "ir" (1 << (bit))); \
116210 + else if (sizeof (*mem) == 2) \
116211 + __asm __volatile (LOCK "orw %w2, %0" \
116212 + : "=m" (*mem) \
116213 + : "m" (*mem), "ir" (1 << (bit))); \
116214 + else if (sizeof (*mem) == 4) \
116215 + __asm __volatile (LOCK "orl %2, %0" \
116216 + : "=m" (*mem) \
116217 + : "m" (*mem), "ir" (1 << (bit))); \
116218 + else \
116219 + abort (); \
116223 +#define atomic_bit_test_set(mem, bit) \
116224 + ({ unsigned char __result; \
116225 + if (sizeof (*mem) == 1) \
116226 + __asm __volatile (LOCK "btsb %3, %1; setc %0" \
116227 + : "=q" (__result), "=m" (*mem) \
116228 + : "m" (*mem), "ir" (bit)); \
116229 + else if (sizeof (*mem) == 2) \
116230 + __asm __volatile (LOCK "btsw %3, %1; setc %0" \
116231 + : "=q" (__result), "=m" (*mem) \
116232 + : "m" (*mem), "ir" (bit)); \
116233 + else if (sizeof (*mem) == 4) \
116234 + __asm __volatile (LOCK "btsl %3, %1; setc %0" \
116235 + : "=q" (__result), "=m" (*mem) \
116236 + : "m" (*mem), "ir" (bit)); \
116237 + else \
116238 + abort (); \
116239 + __result; })
116240 diff -u -udbrN glibc-2.3.2/sysdeps/i386/sysdep.h glibc-2.3.2-200304020432/sysdeps/i386/sysdep.h
116241 --- glibc-2.3.2/sysdeps/i386/sysdep.h Thu Jan 9 20:43:34 2003
116242 +++ glibc-2.3.2-200304020432/sysdeps/i386/sysdep.h Mon Mar 10 10:10:46 2003
116243 @@ -64,6 +64,14 @@
116244 ASM_SIZE_DIRECTIVE(name) \
116245 STABS_FUN_END(name)
116247 +#ifdef HAVE_CPP_ASM_DEBUGINFO
116248 +/* Disable that goop, because we just pass -g through to the assembler
116249 + and it generates proper line number information directly. */
116250 +# define STABS_CURRENT_FILE1(name)
116251 +# define STABS_CURRENT_FILE(name)
116252 +# define STABS_FUN(name)
116253 +# define STABS_FUN_END(name)
116254 +#else
116255 /* Remove the following two lines once the gdb bug is fixed. */
116256 #define STABS_CURRENT_FILE(name) \
116257 STABS_CURRENT_FILE1 (#name)
116258 @@ -77,6 +85,7 @@
116259 .stabs #namestr,36,0,0,name;
116260 #define STABS_FUN_END(name) \
116261 1: .stabs "",36,0,0,1b-name;
116262 +#endif
116264 /* If compiled for profiling, call `mcount' at the start of each function. */
116265 #ifdef PROF
116266 diff -u -udbrN glibc-2.3.2/sysdeps/ia64/atomicity.h glibc-2.3.2-200304020432/sysdeps/ia64/atomicity.h
116267 --- glibc-2.3.2/sysdeps/ia64/atomicity.h Sat Jul 7 21:21:23 2001
116268 +++ glibc-2.3.2-200304020432/sysdeps/ia64/atomicity.h Thu Jan 1 01:00:00 1970
116269 @@ -1,48 +0,0 @@
116270 -/* Low-level functions for atomic operations. IA-64 version.
116271 - Copyright (C) 2001 Free Software Foundation, Inc.
116272 - This file is part of the GNU C Library.
116274 - The GNU C Library is free software; you can redistribute it and/or
116275 - modify it under the terms of the GNU Lesser General Public
116276 - License as published by the Free Software Foundation; either
116277 - version 2.1 of the License, or (at your option) any later version.
116279 - The GNU C Library is distributed in the hope that it will be useful,
116280 - but WITHOUT ANY WARRANTY; without even the implied warranty of
116281 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
116282 - Lesser General Public License for more details.
116284 - You should have received a copy of the GNU Lesser General Public
116285 - License along with the GNU C Library; if not, write to the Free
116286 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
116287 - 02111-1307 USA. */
116289 -#ifndef _ATOMICITY_H
116290 -#define _ATOMICITY_H 1
116292 -#include <inttypes.h>
116293 -#include <ia64intrin.h>
116296 -static inline uint32_t
116297 -__attribute__ ((unused))
116298 -exchange_and_add (volatile uint32_t *mem, uint32_t val)
116300 - return __sync_fetch_and_add (mem, val);
116303 -static inline void
116304 -__attribute__ ((unused))
116305 -atomic_add (volatile uint32_t *mem, int val)
116307 - __sync_fetch_and_add (mem, val);
116310 -static inline int
116311 -__attribute__ ((unused))
116312 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
116314 - return __sync_bool_compare_and_swap (p, oldval, newval);
116317 -#endif /* atomicity.h */
116318 diff -u -udbrN glibc-2.3.2/sysdeps/ia64/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/ia64/bits/atomic.h
116319 --- glibc-2.3.2/sysdeps/ia64/bits/atomic.h Thu Jan 1 01:00:00 1970
116320 +++ glibc-2.3.2-200304020432/sysdeps/ia64/bits/atomic.h Wed Mar 26 05:01:47 2003
116321 @@ -0,0 +1,129 @@
116322 +/* Copyright (C) 2003 Free Software Foundation, Inc.
116323 + This file is part of the GNU C Library.
116325 + The GNU C Library is free software; you can redistribute it and/or
116326 + modify it under the terms of the GNU Lesser General Public
116327 + License as published by the Free Software Foundation; either
116328 + version 2.1 of the License, or (at your option) any later version.
116330 + The GNU C Library is distributed in the hope that it will be useful,
116331 + but WITHOUT ANY WARRANTY; without even the implied warranty of
116332 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
116333 + Lesser General Public License for more details.
116335 + You should have received a copy of the GNU Lesser General Public
116336 + License along with the GNU C Library; if not, write to the Free
116337 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
116338 + 02111-1307 USA. */
116340 +#include <stdint.h>
116341 +#include <ia64intrin.h>
116343 +typedef int8_t atomic8_t;
116344 +typedef uint8_t uatomic8_t;
116345 +typedef int_fast8_t atomic_fast8_t;
116346 +typedef uint_fast8_t uatomic_fast8_t;
116348 +typedef int16_t atomic16_t;
116349 +typedef uint16_t uatomic16_t;
116350 +typedef int_fast16_t atomic_fast16_t;
116351 +typedef uint_fast16_t uatomic_fast16_t;
116353 +typedef int32_t atomic32_t;
116354 +typedef uint32_t uatomic32_t;
116355 +typedef int_fast32_t atomic_fast32_t;
116356 +typedef uint_fast32_t uatomic_fast32_t;
116358 +typedef int64_t atomic64_t;
116359 +typedef uint64_t uatomic64_t;
116360 +typedef int_fast64_t atomic_fast64_t;
116361 +typedef uint_fast64_t uatomic_fast64_t;
116363 +typedef intptr_t atomicptr_t;
116364 +typedef uintptr_t uatomicptr_t;
116365 +typedef intmax_t atomic_max_t;
116366 +typedef uintmax_t uatomic_max_t;
116369 +#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \
116370 + (abort (), 0)
116372 +#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \
116373 + (abort (), 0)
116375 +#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \
116376 + (!__sync_bool_compare_and_swap_si ((int *) (mem), (int) (long) (oldval), \
116377 + (int) (long) (newval)))
116379 +#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \
116380 + (!__sync_bool_compare_and_swap_di ((long *) (mem), (long) (oldval), \
116381 + (long) (newval)))
116383 +#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
116384 + (abort (), 0)
116386 +#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
116387 + (abort (), 0)
116389 +#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
116390 + __sync_val_compare_and_swap_si ((int *) (mem), (int) (long) (oldval), \
116391 + (int) (long) (newval))
116393 +#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
116394 + __sync_val_compare_and_swap_di ((long *) (mem), (long) (oldval), \
116395 + (long) (newval))
116397 +/* Atomically store newval and return the old value. */
116398 +#define atomic_exchange(mem, value) \
116399 + ({ __typeof (*mem) __result; \
116400 + if (sizeof (*mem) == 4) \
116401 + __result = __sync_lock_test_and_set_si ((int *) (mem), (int) (value)); \
116402 + else if (sizeof (*mem) == 8) \
116403 + __result = __sync_lock_test_and_set_di ((long *) (mem), \
116404 + (long) (value)); \
116405 + else \
116406 + abort (); \
116407 + __result; })
116410 +#define atomic_exchange_and_add(mem, value) \
116411 + ({ __typeof (*mem) __result; \
116412 + if (sizeof (*mem) == 4) \
116413 + __result = __sync_fetch_and_add_si ((int *) (mem), (int) (value)); \
116414 + else if (sizeof (*mem) == 8) \
116415 + __result = __sync_fetch_and_add_di ((long *) (mem), (long) (value)); \
116416 + else \
116417 + abort (); \
116418 + __result; })
116420 +#define atomic_decrement_if_positive(mem) \
116421 + ({ __typeof (*mem) __oldval, __val; \
116422 + __typeof (mem) __memp = (mem); \
116424 + __val = (*__memp); \
116425 + do \
116426 + { \
116427 + __oldval = __val; \
116428 + if (__builtin_expect (__val <= 0, 0)) \
116429 + break; \
116430 + __val = atomic_compare_and_exchange_val_acq (__memp, __oldval - 1, \
116431 + __oldval); \
116432 + } \
116433 + while (__builtin_expect (__val != __oldval, 0)); \
116434 + __oldval; })
116436 +#define atomic_bit_test_set(mem, bit) \
116437 + ({ __typeof (*mem) __oldval, __val; \
116438 + __typeof (mem) __memp = (mem); \
116439 + __typeof (*mem) __mask = ((__typeof (*mem)) 1 << (bit)); \
116441 + __val = (*__memp); \
116442 + do \
116443 + { \
116444 + __oldval = __val; \
116445 + __val = atomic_compare_and_exchange_val_acq (__memp, \
116446 + __oldval | __mask, \
116447 + __oldval); \
116448 + } \
116449 + while (__builtin_expect (__val != __oldval, 0)); \
116450 + __oldval & __mask; })
116451 diff -u -udbrN glibc-2.3.2/sysdeps/ia64/dl-fptr.c glibc-2.3.2-200304020432/sysdeps/ia64/dl-fptr.c
116452 --- glibc-2.3.2/sysdeps/ia64/dl-fptr.c Wed Nov 13 22:41:52 2002
116453 +++ glibc-2.3.2-200304020432/sysdeps/ia64/dl-fptr.c Mon Mar 3 10:45:09 2003
116454 @@ -1,5 +1,5 @@
116455 /* Manage function descriptors. IA-64 version.
116456 - Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
116457 + Copyright (C) 1999,2000,2001,2002,2003 Free Software Foundation, Inc.
116458 This file is part of the GNU C Library.
116460 The GNU C Library is free software; you can redistribute it and/or
116461 diff -u -udbrN glibc-2.3.2/sysdeps/ia64/dl-lookupcfg.h glibc-2.3.2-200304020432/sysdeps/ia64/dl-lookupcfg.h
116462 --- glibc-2.3.2/sysdeps/ia64/dl-lookupcfg.h Wed Jan 30 01:22:50 2002
116463 +++ glibc-2.3.2-200304020432/sysdeps/ia64/dl-lookupcfg.h Thu Mar 27 02:15:24 2003
116464 @@ -1,5 +1,5 @@
116465 /* Configuration of lookup functions.
116466 - Copyright (C) 2000, 2001 Free Software Foundation, Inc.
116467 + Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
116468 This file is part of the GNU C Library.
116470 The GNU C Library is free software; you can redistribute it and/or
116471 @@ -23,11 +23,13 @@
116472 #define ELF_FUNCTION_PTR_IS_SPECIAL
116473 #define DL_UNMAP_IS_SPECIAL
116475 +/* We do not support copy relocations for IA-64. */
116476 +#define DL_NO_COPY_RELOCS
116478 /* Forward declaration. */
116479 struct link_map;
116481 -extern void *_dl_symbol_address (const struct link_map *map,
116482 - const Elf64_Sym *ref);
116483 +extern void *_dl_symbol_address (struct link_map *map, const Elf64_Sym *ref);
116485 #define DL_SYMBOL_ADDRESS(map, ref) _dl_symbol_address(map, ref)
116487 diff -u -udbrN glibc-2.3.2/sysdeps/ia64/dl-machine.h glibc-2.3.2-200304020432/sysdeps/ia64/dl-machine.h
116488 --- glibc-2.3.2/sysdeps/ia64/dl-machine.h Sun Jan 12 09:37:35 2003
116489 +++ glibc-2.3.2-200304020432/sysdeps/ia64/dl-machine.h Sat Mar 29 20:18:10 2003
116490 @@ -301,8 +301,10 @@
116491 "_start:\n" \
116492 "0: { .mii\n" \
116493 " .prologue\n" \
116494 -" .save ar.pfs, r32\n" \
116495 " .save rp, r0\n" \
116496 +" .body\n" \
116497 +" .prologue\n" \
116498 +" .save ar.pfs, r32\n" \
116499 " alloc loc0 = ar.pfs, 0, 3, 4, 0\n" \
116500 " .body\n" \
116501 " mov r2 = ip\n" \
116502 @@ -332,9 +334,11 @@
116503 " .proc _dl_start_user#\n" \
116504 "_dl_start_user:\n" \
116505 " .prologue\n" \
116506 -" .save ar.pfs, r32\n" \
116507 " .save rp, r0\n" \
116508 " .body\n" \
116509 +" .prologue\n" \
116510 +" .save ar.pfs, r32\n" \
116511 +" .body\n" \
116512 " { .mii\n" \
116513 " /* Save the pointer to the user entry point fptr in loc2. */\n" \
116514 " mov loc2 = ret0\n" \
116515 diff -u -udbrN glibc-2.3.2/sysdeps/ia64/dl-symaddr.c glibc-2.3.2-200304020432/sysdeps/ia64/dl-symaddr.c
116516 --- glibc-2.3.2/sysdeps/ia64/dl-symaddr.c Thu Jul 26 01:53:58 2001
116517 +++ glibc-2.3.2-200304020432/sysdeps/ia64/dl-symaddr.c Mon Mar 3 10:45:09 2003
116518 @@ -1,5 +1,5 @@
116519 /* Get the symbol address. IA-64 version.
116520 - Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
116521 + Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
116522 This file is part of the GNU C Library.
116524 The GNU C Library is free software; you can redistribute it and/or
116525 @@ -21,7 +21,7 @@
116526 #include <dl-machine.h>
116528 void *
116529 -_dl_symbol_address (const struct link_map *map, const Elf64_Sym *ref)
116530 +_dl_symbol_address (struct link_map *map, const Elf64_Sym *ref)
116532 Elf64_Addr value = (map ? map->l_addr : 0) + ref->st_value;
116534 diff -u -udbrN glibc-2.3.2/sysdeps/ia64/elf/start.S glibc-2.3.2-200304020432/sysdeps/ia64/elf/start.S
116535 --- glibc-2.3.2/sysdeps/ia64/elf/start.S Tue Dec 10 04:41:52 2002
116536 +++ glibc-2.3.2-200304020432/sysdeps/ia64/elf/start.S Sat Mar 29 20:18:27 2003
116537 @@ -40,6 +40,9 @@
116538 .type _start,@function
116539 _start:
116540 .prologue
116541 + .save rp, r0
116542 + .body
116543 + .prologue
116544 { .mlx
116545 alloc r2 = ar.pfs,0,0,7,0
116546 movl r3 = FPSR_DEFAULT
116547 @@ -76,8 +79,7 @@
116548 { .mmi
116549 ld8 out3 = [out3] /* pointer to `init' function descriptor */
116550 ld8 out4 = [out4] /* pointer to `fini' function descriptor */
116551 - .save rp, r4
116552 - mov r4 = r0 /* terminate unwind chain with a NULL return-pointer */
116553 + nop 0
116555 .body
116556 { .mib
116557 diff -u -udbrN glibc-2.3.2/sysdeps/ia64/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/ia64/fpu/libm-test-ulps
116558 --- glibc-2.3.2/sysdeps/ia64/fpu/libm-test-ulps Fri Jun 21 00:06:37 2002
116559 +++ glibc-2.3.2-200304020432/sysdeps/ia64/fpu/libm-test-ulps Fri Mar 28 00:26:48 2003
116560 @@ -1,10 +1,5 @@
116561 # Begin of automatic generation
116563 -# acos
116564 -Test "acos (0.0625) == 1.50825556499840522843072005474337068":
116565 -ildouble: 622
116566 -ldouble: 622
116568 # cacos
116569 Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
116570 float: 1
116571 @@ -84,7 +79,7 @@
116572 idouble: 1
116574 # ccos
116575 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
116576 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
116577 float: 1
116578 ifloat: 1
116579 ildouble: 1
116580 @@ -99,7 +94,7 @@
116581 ldouble: 1
116583 # ccosh
116584 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
116585 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
116586 double: 1
116587 float: 1
116588 idouble: 1
116589 @@ -122,8 +117,6 @@
116590 Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
116591 float: 1
116592 ifloat: 1
116593 -ildouble: 202
116594 -ldouble: 202
116595 Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
116596 ildouble: 1
116597 ldouble: 1
116598 @@ -146,7 +139,7 @@
116599 float: 1
116600 idouble: 1
116601 ifloat: 1
116602 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
116603 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
116604 double: 1
116605 idouble: 1
116606 ildouble: 1
116607 @@ -223,6 +216,9 @@
116608 ifloat: 1
116610 # cos
116611 +Test "cos (0.80190127184058835) == 0.69534156199418473":
116612 +double: 1
116613 +idouble: 1
116614 Test "cos (M_PI_6l * 2.0) == 0.5":
116615 double: 1
116616 float: 1
116617 @@ -247,8 +243,6 @@
116618 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
116619 float: 1
116620 ifloat: 1
116621 -ildouble: 587
116622 -ldouble: 587
116623 Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
116624 float: 1
116625 ifloat: 1
116626 @@ -259,8 +253,8 @@
116627 float: 4
116628 idouble: 1
116629 ifloat: 4
116630 -ildouble: 768
116631 -ldouble: 768
116632 +ildouble: 1
116633 +ldouble: 1
116634 Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
116635 ildouble: 1
116636 ldouble: 1
116637 @@ -272,8 +266,8 @@
116638 float: 3
116639 idouble: 2
116640 ifloat: 3
116641 -ildouble: 370
116642 -ldouble: 370
116643 +ildouble: 3
116644 +ldouble: 3
116645 Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i":
116646 ildouble: 1
116647 ldouble: 1
116648 @@ -308,10 +302,10 @@
116649 ifloat: 1
116651 # csinh
116652 -Test "Real part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
116653 +Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
116654 double: 1
116655 idouble: 1
116656 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
116657 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
116658 double: 1
116659 float: 1
116660 idouble: 1
116661 @@ -336,14 +330,16 @@
116662 ifloat: 1
116664 # ctan
116665 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
116666 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
116667 double: 1
116668 idouble: 1
116669 -ildouble: 436
116670 -ldouble: 436
116671 -Test "Imaginary part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
116672 +ildouble: 2
116673 +ldouble: 2
116674 +Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
116675 float: 1
116676 ifloat: 1
116677 +ildouble: 1
116678 +ldouble: 1
116679 Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
116680 ildouble: 1
116681 ldouble: 1
116682 @@ -354,10 +350,10 @@
116683 ifloat: 1
116685 # ctanh
116686 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
116687 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
116688 ildouble: 1
116689 ldouble: 1
116690 -Test "Imaginary part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
116691 +Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
116692 float: 1
116693 ifloat: 1
116694 ildouble: 24
116695 @@ -584,12 +580,12 @@
116696 Test "lgamma (-0.5) == log(2*sqrt(pi))":
116697 ildouble: 1
116698 ldouble: 1
116699 -Test "lgamma (0.7) == 0.26086724653166651439":
116700 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
116701 double: 1
116702 float: 1
116703 idouble: 1
116704 ifloat: 1
116705 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
116706 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
116707 double: 1
116708 float: 2
116709 idouble: 1
116710 @@ -610,6 +606,9 @@
116711 ldouble: 1
116713 # sincos
116714 +Test "sincos (0.80190127184058835, &sin_res, &cos_res) puts 0.69534156199418473 in cos_res":
116715 +double: 1
116716 +idouble: 1
116717 Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
116718 double: 1
116719 float: 1
116720 @@ -646,7 +645,7 @@
116721 Test "tgamma (0.5) == sqrt (pi)":
116722 float: 1
116723 ifloat: 1
116724 -Test "tgamma (0.7) == 1.29805533264755778568":
116725 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
116726 double: 1
116727 float: 1
116728 idouble: 1
116729 @@ -794,10 +793,6 @@
116730 idouble: 1
116732 # Maximal error of functions:
116733 -Function: "acos":
116734 -ildouble: 622
116735 -ldouble: 622
116737 Function: Imaginary part of "cacos":
116738 float: 1
116739 ifloat: 1
116740 @@ -889,8 +884,6 @@
116741 Function: Real part of "cexp":
116742 float: 1
116743 ifloat: 1
116744 -ildouble: 202
116745 -ldouble: 202
116747 Function: Imaginary part of "cexp":
116748 float: 1
116749 @@ -933,8 +926,8 @@
116750 float: 5
116751 idouble: 2
116752 ifloat: 5
116753 -ildouble: 768
116754 -ldouble: 768
116755 +ildouble: 3
116756 +ldouble: 3
116758 Function: Imaginary part of "cpow":
116759 double: 2
116760 @@ -977,14 +970,16 @@
116761 Function: Real part of "ctan":
116762 double: 1
116763 idouble: 1
116764 -ildouble: 436
116765 -ldouble: 436
116766 +ildouble: 2
116767 +ldouble: 2
116769 Function: Imaginary part of "ctan":
116770 double: 1
116771 float: 1
116772 idouble: 1
116773 ifloat: 1
116774 +ildouble: 1
116775 +ldouble: 1
116777 Function: Real part of "ctanh":
116778 double: 1
116779 diff -u -udbrN glibc-2.3.2/sysdeps/ieee754/dbl-64/dbl2mpn.c glibc-2.3.2-200304020432/sysdeps/ieee754/dbl-64/dbl2mpn.c
116780 --- glibc-2.3.2/sysdeps/ieee754/dbl-64/dbl2mpn.c Sat Jul 7 21:21:24 2001
116781 +++ glibc-2.3.2-200304020432/sysdeps/ieee754/dbl-64/dbl2mpn.c Fri Mar 14 04:59:34 2003
116782 @@ -1,4 +1,4 @@
116783 -/* Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
116784 +/* Copyright (C) 1993,1994,1995,1996,1997,2003 Free Software Foundation, Inc.
116785 This file is part of the GNU C Library.
116787 The GNU C Library is free software; you can redistribute it and/or
116788 @@ -45,7 +45,7 @@
116789 #elif BITS_PER_MP_LIMB == 64
116790 /* Hopefully the compiler will combine the two bitfield extracts
116791 and this composition into just the original quadword extract. */
116792 - res_ptr[0] = ((unsigned long int) u.ieee.mantissa0 << 32) | u.ieee.mantissa1;
116793 + res_ptr[0] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1;
116794 #define N 1
116795 #else
116796 #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
116797 @@ -101,7 +101,8 @@
116800 /* Add the implicit leading one bit for a normalized number. */
116801 - res_ptr[N - 1] |= 1L << (DBL_MANT_DIG - 1 - ((N - 1) * BITS_PER_MP_LIMB));
116802 + res_ptr[N - 1] |= (mp_limb_t) 1 << (DBL_MANT_DIG - 1
116803 + - ((N - 1) * BITS_PER_MP_LIMB));
116805 return N;
116807 diff -u -udbrN glibc-2.3.2/sysdeps/ieee754/dbl-64/mpn2dbl.c glibc-2.3.2-200304020432/sysdeps/ieee754/dbl-64/mpn2dbl.c
116808 --- glibc-2.3.2/sysdeps/ieee754/dbl-64/mpn2dbl.c Sat Jul 7 21:21:24 2001
116809 +++ glibc-2.3.2-200304020432/sysdeps/ieee754/dbl-64/mpn2dbl.c Fri Mar 14 04:59:34 2003
116810 @@ -1,4 +1,4 @@
116811 -/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
116812 +/* Copyright (C) 1995,1996,1997,2002,2003 Free Software Foundation, Inc.
116813 This file is part of the GNU C Library.
116815 The GNU C Library is free software; you can redistribute it and/or
116816 @@ -34,10 +34,12 @@
116817 u.ieee.exponent = expt + IEEE754_DOUBLE_BIAS;
116818 #if BITS_PER_MP_LIMB == 32
116819 u.ieee.mantissa1 = frac_ptr[0];
116820 - u.ieee.mantissa0 = frac_ptr[1] & ((1 << (DBL_MANT_DIG - 32)) - 1);
116821 + u.ieee.mantissa0 = frac_ptr[1] & (((mp_limb_t) 1
116822 + << (DBL_MANT_DIG - 32)) - 1);
116823 #elif BITS_PER_MP_LIMB == 64
116824 - u.ieee.mantissa1 = frac_ptr[0] & ((1L << 32) - 1);
116825 - u.ieee.mantissa0 = (frac_ptr[0] >> 32) & ((1 << (DBL_MANT_DIG - 32)) - 1);
116826 + u.ieee.mantissa1 = frac_ptr[0] & (((mp_limb_t) 1 << 32) - 1);
116827 + u.ieee.mantissa0 = (frac_ptr[0] >> 32) & (((mp_limb_t) 1
116828 + << (DBL_MANT_DIG - 32)) - 1);
116829 #else
116830 #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
116831 #endif
116832 diff -u -udbrN glibc-2.3.2/sysdeps/ieee754/flt-32/mpn2flt.c glibc-2.3.2-200304020432/sysdeps/ieee754/flt-32/mpn2flt.c
116833 --- glibc-2.3.2/sysdeps/ieee754/flt-32/mpn2flt.c Sat Jul 7 21:21:24 2001
116834 +++ glibc-2.3.2-200304020432/sysdeps/ieee754/flt-32/mpn2flt.c Fri Mar 14 04:59:34 2003
116835 @@ -1,4 +1,4 @@
116836 -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
116837 +/* Copyright (C) 1995,1997,2002,2003 Free Software Foundation, Inc.
116838 This file is part of the GNU C Library.
116840 The GNU C Library is free software; you can redistribute it and/or
116841 @@ -33,7 +33,7 @@
116842 u.ieee.negative = sign;
116843 u.ieee.exponent = expt + IEEE754_FLOAT_BIAS;
116844 #if BITS_PER_MP_LIMB > FLT_MANT_DIG
116845 - u.ieee.mantissa = frac_ptr[0] & ((1 << FLT_MANT_DIG) - 1);
116846 + u.ieee.mantissa = frac_ptr[0] & (((mp_limb_t) 1 << FLT_MANT_DIG) - 1);
116847 #else
116848 #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
116849 #endif
116850 diff -u -udbrN glibc-2.3.2/sysdeps/ieee754/ldbl-128/ldbl2mpn.c glibc-2.3.2-200304020432/sysdeps/ieee754/ldbl-128/ldbl2mpn.c
116851 --- glibc-2.3.2/sysdeps/ieee754/ldbl-128/ldbl2mpn.c Thu Jul 11 05:09:36 2002
116852 +++ glibc-2.3.2-200304020432/sysdeps/ieee754/ldbl-128/ldbl2mpn.c Fri Mar 14 04:59:34 2003
116853 @@ -1,4 +1,5 @@
116854 -/* Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
116855 +/* Copyright (C) 1995,1996,1997,1998,1999,2002,2003
116856 + Free Software Foundation, Inc.
116857 This file is part of the GNU C Library.
116859 The GNU C Library is free software; you can redistribute it and/or
116860 @@ -49,8 +50,8 @@
116861 #elif BITS_PER_MP_LIMB == 64
116862 /* Hopefully the compiler will combine the two bitfield extracts
116863 and this composition into just the original quadword extract. */
116864 - res_ptr[0] = ((unsigned long int) u.ieee.mantissa2 << 32) | u.ieee.mantissa3;
116865 - res_ptr[1] = ((unsigned long int) u.ieee.mantissa0 << 32) | u.ieee.mantissa1;
116866 + res_ptr[0] = ((mp_limb_t) u.ieee.mantissa2 << 32) | u.ieee.mantissa3;
116867 + res_ptr[1] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1;
116868 #define N 2
116869 #else
116870 #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
116871 @@ -133,7 +134,8 @@
116874 /* Add the implicit leading one bit for a normalized number. */
116875 - res_ptr[N - 1] |= 1L << (LDBL_MANT_DIG - 1 - ((N - 1) * BITS_PER_MP_LIMB));
116876 + res_ptr[N - 1] |= (mp_limb_t) 1 << (LDBL_MANT_DIG - 1
116877 + - ((N - 1) * BITS_PER_MP_LIMB));
116879 return N;
116881 diff -u -udbrN glibc-2.3.2/sysdeps/ieee754/ldbl-128/mpn2ldbl.c glibc-2.3.2-200304020432/sysdeps/ieee754/ldbl-128/mpn2ldbl.c
116882 --- glibc-2.3.2/sysdeps/ieee754/ldbl-128/mpn2ldbl.c Sat Jul 7 21:21:24 2001
116883 +++ glibc-2.3.2-200304020432/sysdeps/ieee754/ldbl-128/mpn2ldbl.c Fri Mar 14 04:59:34 2003
116884 @@ -1,4 +1,5 @@
116885 -/* Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
116886 +/* Copyright (C) 1995,1996,1997,1998,1999,2002,2003
116887 + Free Software Foundation, Inc.
116888 This file is part of the GNU C Library.
116890 The GNU C Library is free software; you can redistribute it and/or
116891 @@ -37,12 +38,14 @@
116892 u.ieee.mantissa3 = frac_ptr[0];
116893 u.ieee.mantissa2 = frac_ptr[1];
116894 u.ieee.mantissa1 = frac_ptr[2];
116895 - u.ieee.mantissa0 = frac_ptr[3] & ((1 << (LDBL_MANT_DIG - 96)) - 1);
116896 + u.ieee.mantissa0 = frac_ptr[3] & (((mp_limb_t) 1
116897 + << (LDBL_MANT_DIG - 96)) - 1);
116898 #elif BITS_PER_MP_LIMB == 64
116899 - u.ieee.mantissa3 = frac_ptr[0] & ((1L << 32) - 1);
116900 + u.ieee.mantissa3 = frac_ptr[0] & (((mp_limb_t) 1 << 32) - 1);
116901 u.ieee.mantissa2 = frac_ptr[0] >> 32;
116902 - u.ieee.mantissa1 = frac_ptr[1] & ((1L << 32) - 1);
116903 - u.ieee.mantissa0 = (frac_ptr[1] >> 32) & ((1 << (LDBL_MANT_DIG - 96)) - 1);
116904 + u.ieee.mantissa1 = frac_ptr[1] & (((mp_limb_t) 1 << 32) - 1);
116905 + u.ieee.mantissa0 = (frac_ptr[1] >> 32) & (((mp_limb_t) 1
116906 + << (LDBL_MANT_DIG - 96)) - 1);
116907 #else
116908 #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
116909 #endif
116910 diff -u -udbrN glibc-2.3.2/sysdeps/ieee754/ldbl-96/ldbl2mpn.c glibc-2.3.2-200304020432/sysdeps/ieee754/ldbl-96/ldbl2mpn.c
116911 --- glibc-2.3.2/sysdeps/ieee754/ldbl-96/ldbl2mpn.c Sat Jul 7 21:21:24 2001
116912 +++ glibc-2.3.2-200304020432/sysdeps/ieee754/ldbl-96/ldbl2mpn.c Fri Mar 14 04:59:34 2003
116913 @@ -1,4 +1,4 @@
116914 -/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
116915 +/* Copyright (C) 1995,1996,1997,1998,2002,2003 Free Software Foundation, Inc.
116916 This file is part of the GNU C Library.
116918 The GNU C Library is free software; you can redistribute it and/or
116919 @@ -47,7 +47,7 @@
116920 #elif BITS_PER_MP_LIMB == 64
116921 /* Hopefully the compiler will combine the two bitfield extracts
116922 and this composition into just the original quadword extract. */
116923 - res_ptr[0] = ((unsigned long int) u.ieee.mantissa0 << 32) | u.ieee.mantissa1;
116924 + res_ptr[0] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1;
116925 #define N 1
116926 #else
116927 #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
116928 diff -u -udbrN glibc-2.3.2/sysdeps/ieee754/ldbl-96/mpn2ldbl.c glibc-2.3.2-200304020432/sysdeps/ieee754/ldbl-96/mpn2ldbl.c
116929 --- glibc-2.3.2/sysdeps/ieee754/ldbl-96/mpn2ldbl.c Sat Jul 7 21:21:24 2001
116930 +++ glibc-2.3.2-200304020432/sysdeps/ieee754/ldbl-96/mpn2ldbl.c Fri Mar 14 04:59:34 2003
116931 @@ -1,4 +1,4 @@
116932 -/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
116933 +/* Copyright (C) 1995,1996,1997,1998,2002,2003 Free Software Foundation, Inc.
116934 This file is part of the GNU C Library.
116936 The GNU C Library is free software; you can redistribute it and/or
116937 @@ -37,7 +37,7 @@
116938 u.ieee.mantissa1 = frac_ptr[0];
116939 u.ieee.mantissa0 = frac_ptr[1];
116940 #elif BITS_PER_MP_LIMB == 64
116941 - u.ieee.mantissa1 = frac_ptr[0] & ((1L << 32) - 1);
116942 + u.ieee.mantissa1 = frac_ptr[0] & (((mp_limb_t) 1 << 32) - 1);
116943 u.ieee.mantissa0 = frac_ptr[0] >> 32;
116944 #else
116945 #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
116946 diff -u -udbrN glibc-2.3.2/sysdeps/m68k/dl-machine.h glibc-2.3.2-200304020432/sysdeps/m68k/dl-machine.h
116947 --- glibc-2.3.2/sysdeps/m68k/dl-machine.h Sun Jan 26 22:07:32 2003
116948 +++ glibc-2.3.2-200304020432/sysdeps/m68k/dl-machine.h Sat Mar 1 16:33:11 2003
116949 @@ -1,5 +1,5 @@
116950 /* Machine-dependent ELF dynamic relocation inline functions. m68k version.
116951 - Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
116952 + Copyright (C) 1996-2001, 2002, 2003 Free Software Foundation, Inc.
116953 This file is part of the GNU C Library.
116955 The GNU C Library is free software; you can redistribute it and/or
116956 @@ -158,7 +158,7 @@
116957 | Save the user entry point address in %a4.\n\
116958 move.l %d0, %a4\n\
116959 | Remember the highest stack address.\n\
116960 - lea __libc_stack_end(%pc), %a0\n\
116961 + move.l __libc_stack_end@GOTPC(%pc), %a0\n\
116962 move.l %sp, (%a0)\n\
116963 | See if we were run as a command with the executable file\n\
116964 | name as an extra leading argument.\n\
116965 diff -u -udbrN glibc-2.3.2/sysdeps/m68k/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/m68k/fpu/libm-test-ulps
116966 --- glibc-2.3.2/sysdeps/m68k/fpu/libm-test-ulps Sun Jan 12 08:54:07 2003
116967 +++ glibc-2.3.2-200304020432/sysdeps/m68k/fpu/libm-test-ulps Sat Mar 22 22:17:47 2003
116968 @@ -119,10 +119,10 @@
116969 ldouble: 1
116971 # ccos
116972 -Test "Real part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
116973 +Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
116974 float: 1
116975 ifloat: 1
116976 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
116977 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
116978 float: 1
116979 ifloat: 1
116980 ildouble: 1
116981 @@ -139,10 +139,10 @@
116982 ldouble: 1
116984 # ccosh
116985 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
116986 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
116987 float: 1
116988 ifloat: 1
116989 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
116990 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
116991 float: 1
116992 ifloat: 1
116993 ildouble: 1
116994 @@ -189,10 +189,10 @@
116995 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
116996 float: 1
116997 ifloat: 1
116998 -Test "Real part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
116999 +Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
117000 ildouble: 1
117001 ldouble: 1
117002 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
117003 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
117004 ildouble: 1
117005 ldouble: 1
117006 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
117007 @@ -336,10 +336,10 @@
117008 ldouble: 1
117010 # csin
117011 -Test "Real part of: csin (-2 - 3 i) == -9.1544991469114295734 + 4.1689069599665643507 i":
117012 +Test "Real part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
117013 float: 1
117014 ifloat: 1
117015 -Test "Imaginary part of: csin (-2 - 3 i) == -9.1544991469114295734 + 4.1689069599665643507 i":
117016 +Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
117017 float: 1
117018 ifloat: 1
117019 Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
117020 @@ -352,10 +352,10 @@
117021 ifloat: 1
117023 # csinh
117024 -Test "Real part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
117025 +Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
117026 float: 1
117027 ifloat: 1
117028 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
117029 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
117030 float: 1
117031 ifloat: 1
117032 ildouble: 2
117033 @@ -370,10 +370,10 @@
117034 ifloat: 1
117036 # ctan
117037 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
117038 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
117039 ildouble: 439
117040 ldouble: 439
117041 -Test "Imaginary part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
117042 +Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
117043 ildouble: 1
117044 ldouble: 1
117045 Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
117046 @@ -384,10 +384,10 @@
117047 ldouble: 2
117049 # ctanh
117050 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
117051 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
117052 ildouble: 2
117053 ldouble: 2
117054 -Test "Imaginary part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
117055 +Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
117056 ildouble: 25
117057 ldouble: 25
117058 Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
117059 @@ -599,12 +599,12 @@
117060 Test "lgamma (0.5) == log(sqrt(pi))":
117061 ildouble: 1
117062 ldouble: 1
117063 -Test "lgamma (0.7) == 0.26086724653166651439":
117064 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
117065 float: 1
117066 ifloat: 1
117067 ildouble: 1
117068 ldouble: 1
117069 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
117070 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
117071 double: 1
117072 float: 2
117073 idouble: 1
117074 @@ -698,7 +698,7 @@
117075 ifloat: 1
117076 ildouble: 1
117077 ldouble: 1
117078 -Test "tgamma (0.7) == 1.29805533264755778568":
117079 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
117080 double: 1
117081 float: 1
117082 idouble: 1
117083 diff -u -udbrN glibc-2.3.2/sysdeps/m68k/m68020/atomicity.h glibc-2.3.2-200304020432/sysdeps/m68k/m68020/atomicity.h
117084 --- glibc-2.3.2/sysdeps/m68k/m68020/atomicity.h Wed Aug 15 18:14:06 2001
117085 +++ glibc-2.3.2-200304020432/sysdeps/m68k/m68020/atomicity.h Thu Jan 1 01:00:00 1970
117086 @@ -1,64 +0,0 @@
117087 -/* Low-level functions for atomic operations. m680x0 version, x >= 2.
117088 - Copyright (C) 1997 Free Software Foundation, Inc.
117089 - Contributed by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.
117090 - This file is part of the GNU C Library.
117092 - The GNU C Library is free software; you can redistribute it and/or
117093 - modify it under the terms of the GNU Lesser General Public
117094 - License as published by the Free Software Foundation; either
117095 - version 2.1 of the License, or (at your option) any later version.
117097 - The GNU C Library is distributed in the hope that it will be useful,
117098 - but WITHOUT ANY WARRANTY; without even the implied warranty of
117099 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
117100 - Lesser General Public License for more details.
117102 - You should have received a copy of the GNU Lesser General Public
117103 - License along with the GNU C Library; if not, write to the Free
117104 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
117105 - 02111-1307 USA. */
117107 -#ifndef _ATOMICITY_H
117108 -#define _ATOMICITY_H 1
117110 -#include <inttypes.h>
117113 -static inline int
117114 -__attribute__ ((unused))
117115 -exchange_and_add (volatile uint32_t *mem, int val)
117117 - register int result = *mem;
117118 - register int temp;
117119 - __asm__ __volatile__ ("1: move%.l %0,%1;"
117120 - " add%.l %2,%1;"
117121 - " cas%.l %0,%1,%3;"
117122 - " jbne 1b"
117123 - : "=d" (result), "=&d" (temp)
117124 - : "d" (val), "m" (*mem), "0" (result) : "memory");
117125 - return result;
117128 -static inline void
117129 -__attribute__ ((unused))
117130 -atomic_add (volatile uint32_t *mem, int val)
117132 - /* XXX Use cas here as well? */
117133 - __asm__ __volatile__ ("add%.l %0,%1"
117134 - : : "id" (val), "m" (*mem) : "memory");
117137 -static inline int
117138 -__attribute__ ((unused))
117139 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
117141 - char ret;
117142 - long int readval;
117144 - __asm__ __volatile__ ("cas%.l %2,%3,%1; seq %0"
117145 - : "=dm" (ret), "=m" (*p), "=d" (readval)
117146 - : "d" (newval), "m" (*p), "2" (oldval));
117147 - return ret;
117150 -#endif /* atomicity.h */
117151 diff -u -udbrN glibc-2.3.2/sysdeps/m68k/m68020/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/m68k/m68020/bits/atomic.h
117152 --- glibc-2.3.2/sysdeps/m68k/m68020/bits/atomic.h Thu Jan 1 01:00:00 1970
117153 +++ glibc-2.3.2-200304020432/sysdeps/m68k/m68020/bits/atomic.h Mon Mar 31 18:01:09 2003
117154 @@ -0,0 +1,261 @@
117155 +/* Copyright (C) 2003 Free Software Foundation, Inc.
117156 + This file is part of the GNU C Library.
117157 + Contributed by Andreas Schwab <schwab@suse.de>, 2003.
117159 + The GNU C Library is free software; you can redistribute it and/or
117160 + modify it under the terms of the GNU Lesser General Public
117161 + License as published by the Free Software Foundation; either
117162 + version 2.1 of the License, or (at your option) any later version.
117164 + The GNU C Library is distributed in the hope that it will be useful,
117165 + but WITHOUT ANY WARRANTY; without even the implied warranty of
117166 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
117167 + Lesser General Public License for more details.
117169 + You should have received a copy of the GNU Lesser General Public
117170 + License along with the GNU C Library; if not, write to the Free
117171 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
117172 + 02111-1307 USA. */
117174 +#include <stdint.h>
117177 +typedef int8_t atomic8_t;
117178 +typedef uint8_t uatomic8_t;
117179 +typedef int_fast8_t atomic_fast8_t;
117180 +typedef uint_fast8_t uatomic_fast8_t;
117182 +typedef int16_t atomic16_t;
117183 +typedef uint16_t uatomic16_t;
117184 +typedef int_fast16_t atomic_fast16_t;
117185 +typedef uint_fast16_t uatomic_fast16_t;
117187 +typedef int32_t atomic32_t;
117188 +typedef uint32_t uatomic32_t;
117189 +typedef int_fast32_t atomic_fast32_t;
117190 +typedef uint_fast32_t uatomic_fast32_t;
117192 +typedef int64_t atomic64_t;
117193 +typedef uint64_t uatomic64_t;
117194 +typedef int_fast64_t atomic_fast64_t;
117195 +typedef uint_fast64_t uatomic_fast64_t;
117197 +typedef intptr_t atomicptr_t;
117198 +typedef uintptr_t uatomicptr_t;
117199 +typedef intmax_t atomic_max_t;
117200 +typedef uintmax_t uatomic_max_t;
117202 +#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
117203 + ({ __typeof (*(mem)) __ret; \
117204 + __asm __volatile ("cas%.b %0,%2,%1" \
117205 + : "=d" (__ret), "=m" (*(mem)) \
117206 + : "d" (newval), "m" (*(mem)), "0" (oldval)); \
117207 + __ret; })
117209 +#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
117210 + ({ __typeof (*(mem)) __ret; \
117211 + __asm __volatile ("cas%.w %0,%2,%1" \
117212 + : "=d" (__ret), "=m" (*(mem)) \
117213 + : "d" (newval), "m" (*(mem)), "0" (oldval)); \
117214 + __ret; })
117216 +#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
117217 + ({ __typeof (*(mem)) __ret; \
117218 + __asm __volatile ("cas%.l %0,%2,%1" \
117219 + : "=d" (__ret), "=m" (*(mem)) \
117220 + : "d" (newval), "m" (*(mem)), "0" (oldval)); \
117221 + __ret; })
117223 +# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
117224 + ({ __typeof (*(mem)) __ret; \
117225 + __typeof (mem) __memp = (mem); \
117226 + __asm __volatile ("cas2%.l %0:%R0,%1:%R1,(%2):(%3)" \
117227 + : "=d" (__ret) \
117228 + : "d" (newval), "r" (__memp), \
117229 + "r" ((char *) __memp + 4), "0" (oldval) \
117230 + : "memory"); \
117231 + __ret; })
117233 +#define atomic_exchange(mem, newvalue) \
117234 + ({ __typeof (*(mem)) __result = *(mem); \
117235 + if (sizeof (*(mem)) == 1) \
117236 + __asm __volatile ("1: cas%.b %0,%2,%1;" \
117237 + " jbne 1b" \
117238 + : "=d" (__result), "=m" (*(mem)) \
117239 + : "d" (newvalue), "m" (*(mem)), "0" (__result)); \
117240 + else if (sizeof (*(mem)) == 2) \
117241 + __asm __volatile ("1: cas%.w %0,%2,%1;" \
117242 + " jbne 1b" \
117243 + : "=d" (__result), "=m" (*(mem)) \
117244 + : "d" (newvalue), "m" (*(mem)), "0" (__result)); \
117245 + else if (sizeof (*(mem)) == 4) \
117246 + __asm __volatile ("1: cas%.l %0,%2,%1;" \
117247 + " jbne 1b" \
117248 + : "=d" (__result), "=m" (*(mem)) \
117249 + : "d" (newvalue), "m" (*(mem)), "0" (__result)); \
117250 + else \
117251 + { \
117252 + __typeof (mem) __memp = (mem); \
117253 + __asm __volatile ("1: cas2%.l %0:%R0,%1:%R1,(%2):(%3);" \
117254 + " jbne 1b" \
117255 + : "=d" (__result) \
117256 + : "d" (newvalue), "r" (__memp), \
117257 + "r" ((char *) __memp + 4), "0" (__result) \
117258 + : "memory"); \
117259 + } \
117260 + __result; })
117262 +#define atomic_exchange_and_add(mem, value) \
117263 + ({ __typeof (*(mem)) __result = *(mem); \
117264 + __typeof (*(mem)) __temp; \
117265 + if (sizeof (*(mem)) == 1) \
117266 + __asm __volatile ("1: move%.b %0,%2;" \
117267 + " add%.b %3,%2;" \
117268 + " cas%.b %0,%2,%1;" \
117269 + " jbne 1b" \
117270 + : "=d" (__result), "=m" (*(mem)), \
117271 + "=&d" (__temp) \
117272 + : "d" (value), "1" (*(mem)), "0" (__result)); \
117273 + else if (sizeof (*(mem)) == 2) \
117274 + __asm __volatile ("1: move%.w %0,%2;" \
117275 + " add%.w %3,%2;" \
117276 + " cas%.w %0,%2,%1;" \
117277 + " jbne 1b" \
117278 + : "=d" (__result), "=m" (*(mem)), \
117279 + "=&d" (__temp) \
117280 + : "d" (value), "1" (*(mem)), "0" (__result)); \
117281 + else if (sizeof (*(mem)) == 4) \
117282 + __asm __volatile ("1: move%.l %0,%2;" \
117283 + " add%.l %3,%2;" \
117284 + " cas%.l %0,%2,%1;" \
117285 + " jbne 1b" \
117286 + : "=d" (__result), "=m" (*(mem)), \
117287 + "=&d" (__temp) \
117288 + : "d" (value), "1" (*(mem)), "0" (__result)); \
117289 + else \
117290 + { \
117291 + __typeof (mem) __memp = (mem); \
117292 + __asm __volatile ("1: move%.l %0,%1;" \
117293 + " move%.l %R0,%R1;" \
117294 + " add%.l %2,%1;" \
117295 + " addx%.l %R2,%R1;" \
117296 + " cas2%.l %0:%R0,%1:%R1,(%3):(%4);" \
117297 + " jbne 1b" \
117298 + : "=d" (__result), "=&d" (__temp) \
117299 + : "d" (value), "r" (__memp), \
117300 + "r" ((char *) __memp + 4), "0" (__result) \
117301 + : "memory"); \
117302 + } \
117303 + __result; })
117305 +#define atomic_add(mem, value) \
117306 + (void) ({ if (sizeof (*(mem)) == 1) \
117307 + __asm __volatile ("add%.b %1,%0" \
117308 + : "=m" (*(mem)) \
117309 + : "id" (value), "0" (*(mem))); \
117310 + else if (sizeof (*(mem)) == 2) \
117311 + __asm __volatile ("add%.w %1,%0" \
117312 + : "=m" (*(mem)) \
117313 + : "id" (value), "0" (*(mem))); \
117314 + else if (sizeof (*(mem)) == 4) \
117315 + __asm __volatile ("add%.l %1,%0" \
117316 + : "=m" (*(mem)) \
117317 + : "id" (value), "0" (*(mem))); \
117318 + else \
117319 + { \
117320 + __typeof (mem) __memp = (mem); \
117321 + __typeof (*(mem)) __oldval = *__memp; \
117322 + __typeof (*(mem)) __temp; \
117323 + __asm __volatile ("1: move%.l %0,%1;" \
117324 + " move%.l %R0,%R1;" \
117325 + " add%.l %2,%1;" \
117326 + " addx%.l %R2,%R1;" \
117327 + " cas2%.l %0:%R0,%1:%R1,(%3):(%4);" \
117328 + " jbne 1b" \
117329 + : "=d" (__oldval), "=&d" (__temp) \
117330 + : "d" (value), "r" (__memp), \
117331 + "r" ((char *) __memp + 4), "0" (__oldval) \
117332 + : "memory"); \
117333 + } \
117336 +#define atomic_increment_and_test(mem) \
117337 + ({ char __result; \
117338 + if (sizeof (*(mem)) == 1) \
117339 + __asm __volatile ("addq%.b %#1,%1; seq %0" \
117340 + : "=dm" (__result), "=m" (*(mem)) \
117341 + : "1" (*(mem))); \
117342 + else if (sizeof (*(mem)) == 2) \
117343 + __asm __volatile ("addq%.w %#1,%1; seq %0" \
117344 + : "=dm" (__result), "=m" (*(mem)) \
117345 + : "1" (*(mem))); \
117346 + else if (sizeof (*(mem)) == 4) \
117347 + __asm __volatile ("addq%.l %#1,%1; seq %0" \
117348 + : "=dm" (__result), "=m" (*(mem)) \
117349 + : "1" (*(mem))); \
117350 + else \
117351 + { \
117352 + __typeof (mem) __memp = (mem); \
117353 + __typeof (*(mem)) __oldval = *__memp; \
117354 + __typeof (*(mem)) __temp; \
117355 + __asm __volatile ("1: move%.l %1,%2;" \
117356 + " move%.l %R1,%R2;" \
117357 + " addq%.l %#1,%2;" \
117358 + " addx%.l %5,%R2;" \
117359 + " seq %0;" \
117360 + " cas2%.l %1:%R1,%2:%R2,(%3):(%4);" \
117361 + " jbne 1b" \
117362 + : "=&dm" (__result), "=d" (__oldval), \
117363 + "=&d" (__temp) \
117364 + : "r" (__memp), "r" ((char *) __memp + 4), \
117365 + "d" (0), "1" (__oldval) \
117366 + : "memory"); \
117367 + } \
117368 + __result; })
117370 +#define atomic_decrement_and_test(mem) \
117371 + ({ char __result; \
117372 + if (sizeof (*(mem)) == 1) \
117373 + __asm __volatile ("subq%.b %#1,%1; seq %0" \
117374 + : "=dm" (__result), "=m" (*(mem)) \
117375 + : "1" (*(mem))); \
117376 + else if (sizeof (*(mem)) == 2) \
117377 + __asm __volatile ("subq%.w %#1,%1; seq %0" \
117378 + : "=dm" (__result), "=m" (*(mem)) \
117379 + : "1" (*(mem))); \
117380 + else if (sizeof (*(mem)) == 4) \
117381 + __asm __volatile ("subq%.l %#1,%1; seq %0" \
117382 + : "=dm" (__result), "=m" (*(mem)) \
117383 + : "1" (*(mem))); \
117384 + else \
117385 + { \
117386 + __typeof (mem) __memp = (mem); \
117387 + __typeof (*(mem)) __oldval = *__memp; \
117388 + __typeof (*(mem)) __temp; \
117389 + __asm __volatile ("1: move%.l %1,%2;" \
117390 + " move%.l %R1,%R2;" \
117391 + " subq%.l %#1,%2;" \
117392 + " subx%.l %5,%R2;" \
117393 + " seq %0;" \
117394 + " cas2%.l %1:%R1,%2:%R2,(%3):(%4);" \
117395 + " jbne 1b" \
117396 + : "=&dm" (__result), "=d" (__oldval), \
117397 + "=&d" (__temp) \
117398 + : "r" (__memp), "r" ((char *) __memp + 4), \
117399 + "d" (0), "1" (__oldval) \
117400 + : "memory"); \
117401 + } \
117402 + __result; })
117404 +#define atomic_bit_set(mem, bit) \
117405 + __asm __volatile ("bfset %0{%1,#1}" \
117406 + : "=m" (*(mem)) \
117407 + : "di" (sizeof (*(mem)) * 8 - (bit) - 1), "m" (*(mem)))
117409 +#define atomic_bit_test_set(mem, bit) \
117410 + ({ char __result; \
117411 + __asm __volatile ("bfset %1{%2,#1}; sne %0" \
117412 + : "=dm" (__result), "=m" (*(mem)) \
117413 + : "di" (sizeof (*(mem)) * 8 - (bit) - 1), \
117414 + "m" (*(mem))); \
117415 + __result; })
117416 diff -u -udbrN glibc-2.3.2/sysdeps/mips/Implies glibc-2.3.2-200304020432/sysdeps/mips/Implies
117417 --- glibc-2.3.2/sysdeps/mips/Implies Sat Jan 29 08:28:21 2000
117418 +++ glibc-2.3.2-200304020432/sysdeps/mips/Implies Sat Mar 29 09:15:28 2003
117419 @@ -1,4 +1,3 @@
117420 -wordsize-32
117421 # MIPS uses IEEE 754 floating point.
117422 ieee754/flt-32
117423 ieee754/dbl-64
117424 diff -u -udbrN glibc-2.3.2/sysdeps/mips/add_n.S glibc-2.3.2-200304020432/sysdeps/mips/add_n.S
117425 --- glibc-2.3.2/sysdeps/mips/add_n.S Sat Jul 7 21:21:27 2001
117426 +++ glibc-2.3.2-200304020432/sysdeps/mips/add_n.S Fri Mar 14 04:59:37 2003
117427 @@ -1,7 +1,7 @@
117428 /* MIPS2 __mpn_add_n -- Add two limb vectors of the same length > 0 and
117429 store sum in a third limb vector.
117431 -Copyright (C) 1995, 2000 Free Software Foundation, Inc.
117432 +Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
117434 This file is part of the GNU MP Library.
117436 @@ -43,12 +43,12 @@
117438 addiu $7,$7,-1
117439 and $9,$7,4-1 /* number of limbs in first loop */
117440 - beq $9,$0,.L0 /* if multiple of 4 limbs, skip first loop */
117441 + beq $9,$0,L(L0) /* if multiple of 4 limbs, skip first loop */
117442 move $2,$0
117444 subu $7,$7,$9
117446 -.Loop0: addiu $9,$9,-1
117447 +L(Loop0): addiu $9,$9,-1
117448 lw $12,4($5)
117449 addu $11,$11,$2
117450 lw $13,4($6)
117451 @@ -62,13 +62,13 @@
117452 addiu $6,$6,4
117453 move $10,$12
117454 move $11,$13
117455 - bne $9,$0,.Loop0
117456 + bne $9,$0,L(Loop0)
117457 addiu $4,$4,4
117459 -.L0: beq $7,$0,.Lend
117460 +L(L0): beq $7,$0,L(end)
117463 -.Loop: addiu $7,$7,-4
117464 +L(Loop): addiu $7,$7,-4
117466 lw $12,4($5)
117467 addu $11,$11,$2
117468 @@ -109,10 +109,10 @@
117469 addiu $5,$5,16
117470 addiu $6,$6,16
117472 - bne $7,$0,.Loop
117473 + bne $7,$0,L(Loop)
117474 addiu $4,$4,16
117476 -.Lend: addu $11,$11,$2
117477 +L(end): addu $11,$11,$2
117478 sltu $8,$11,$2
117479 addu $11,$10,$11
117480 sltu $2,$11,$10
117481 diff -u -udbrN glibc-2.3.2/sysdeps/mips/addmul_1.S glibc-2.3.2-200304020432/sysdeps/mips/addmul_1.S
117482 --- glibc-2.3.2/sysdeps/mips/addmul_1.S Sat Jul 7 21:21:27 2001
117483 +++ glibc-2.3.2-200304020432/sysdeps/mips/addmul_1.S Fri Mar 14 04:59:37 2003
117484 @@ -1,7 +1,7 @@
117485 /* MIPS __mpn_addmul_1 -- Multiply a limb vector with a single limb and
117486 add the product to a second limb vector.
117488 -Copyright (C) 1995, 2000 Free Software Foundation, Inc.
117489 +Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
117491 This file is part of the GNU MP Library.
117493 @@ -46,14 +46,14 @@
117494 multu $8,$7
117496 addiu $6,$6,-1
117497 - beq $6,$0,$LC0
117498 + beq $6,$0,L(LC0)
117499 move $2,$0 /* zero cy2 */
117501 addiu $6,$6,-1
117502 - beq $6,$0,$LC1
117503 + beq $6,$0,L(LC1)
117504 lw $8,0($5) /* load new s1 limb as early as possible */
117506 -Loop: lw $10,0($4)
117507 +L(Loop): lw $10,0($4)
117508 mflo $3
117509 mfhi $9
117510 addiu $5,$5,4
117511 @@ -67,11 +67,11 @@
117512 addu $2,$2,$10
117513 sw $3,0($4)
117514 addiu $4,$4,4
117515 - bne $6,$0,Loop /* should be "bnel" */
117516 + bne $6,$0,L(Loop) /* should be "bnel" */
117517 addu $2,$9,$2 /* add high product limb and carry from addition */
117519 /* cool down phase 1 */
117520 -$LC1: lw $10,0($4)
117521 +L(LC1): lw $10,0($4)
117522 mflo $3
117523 mfhi $9
117524 addu $3,$3,$2
117525 @@ -85,7 +85,7 @@
117526 addu $2,$9,$2 /* add high product limb and carry from addition */
117528 /* cool down phase 0 */
117529 -$LC0: lw $10,0($4)
117530 +L(LC0): lw $10,0($4)
117531 mflo $3
117532 mfhi $9
117533 addu $3,$3,$2
117534 diff -u -udbrN glibc-2.3.2/sysdeps/mips/atomicity.h glibc-2.3.2-200304020432/sysdeps/mips/atomicity.h
117535 --- glibc-2.3.2/sysdeps/mips/atomicity.h Tue Jul 16 02:52:17 2002
117536 +++ glibc-2.3.2-200304020432/sysdeps/mips/atomicity.h Fri Mar 14 06:30:31 2003
117537 @@ -1,5 +1,5 @@
117538 /* Low-level functions for atomic operations. Mips version.
117539 - Copyright (C) 2001, 2002 Free Software Foundation, Inc.
117540 + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
117541 This file is part of the GNU C Library.
117543 The GNU C Library is free software; you can redistribute it and/or
117544 @@ -32,7 +32,9 @@
117545 ("/* Inline exchange & add */\n"
117546 "1:\n\t"
117547 ".set push\n\t"
117548 +#if _MIPS_SIM == _MIPS_SIM_ABI32
117549 ".set mips2\n\t"
117550 +#endif
117551 "ll %0,%3\n\t"
117552 "addu %1,%4,%0\n\t"
117553 "sc %1,%2\n\t"
117554 @@ -56,7 +58,9 @@
117555 ("/* Inline atomic add */\n"
117556 "1:\n\t"
117557 ".set push\n\t"
117558 +#if _MIPS_SIM == _MIPS_SIM_ABI32
117559 ".set mips2\n\t"
117560 +#endif
117561 "ll %0,%2\n\t"
117562 "addu %0,%3,%0\n\t"
117563 "sc %0,%1\n\t"
117564 @@ -78,12 +82,22 @@
117565 ("/* Inline compare & swap */\n"
117566 "1:\n\t"
117567 ".set push\n\t"
117568 +#if _MIPS_SIM == _MIPS_SIM_ABI32
117569 ".set mips2\n\t"
117570 +#endif
117571 +#if defined _ABI64 && _MIPS_SIM == _ABI64
117572 + "lld %1,%5\n\t"
117573 +#else
117574 "ll %1,%5\n\t"
117575 +#endif
117576 "move %0,$0\n\t"
117577 "bne %1,%3,2f\n\t"
117578 "move %0,%4\n\t"
117579 +#if defined _ABI64 && _MIPS_SIM == _ABI64
117580 + "scd %0,%2\n\t"
117581 +#else
117582 "sc %0,%2\n\t"
117583 +#endif
117584 ".set pop\n\t"
117585 "beqz %0,1b\n"
117586 "2:\n\t"
117587 diff -u -udbrN glibc-2.3.2/sysdeps/mips/bits/endian.h glibc-2.3.2-200304020432/sysdeps/mips/bits/endian.h
117588 --- glibc-2.3.2/sysdeps/mips/bits/endian.h Wed Nov 26 04:52:55 1997
117589 +++ glibc-2.3.2-200304020432/sysdeps/mips/bits/endian.h Sat Mar 29 09:15:28 2003
117590 @@ -5,4 +5,9 @@
117591 # error "Never use <bits/endian.h> directly; include <endian.h> instead."
117592 #endif
117594 -#define __BYTE_ORDER __BIG_ENDIAN
117595 +#if __MIPSEB
117596 +# define __BYTE_ORDER __BIG_ENDIAN
117597 +#endif
117598 +#if __MIPSEL
117599 +# define __BYTE_ORDER __LITTLE_ENDIAN
117600 +#endif
117601 diff -u -udbrN glibc-2.3.2/sysdeps/mips/bits/setjmp.h glibc-2.3.2-200304020432/sysdeps/mips/bits/setjmp.h
117602 --- glibc-2.3.2/sysdeps/mips/bits/setjmp.h Sat Jul 7 21:21:27 2001
117603 +++ glibc-2.3.2-200304020432/sysdeps/mips/bits/setjmp.h Thu Mar 20 23:29:44 2003
117604 @@ -1,5 +1,6 @@
117605 /* Define the machine-dependent type `jmp_buf'. MIPS version.
117606 - Copyright (C) 1992,93,95,97,2000 Free Software Foundation, Inc.
117607 + Copyright (C) 1992, 1993, 1995, 1997, 2000, 2002, 2003
117608 + Free Software Foundation, Inc.
117609 This file is part of the GNU C Library.
117611 The GNU C Library is free software; you can redistribute it and/or
117612 @@ -23,26 +24,47 @@
117614 typedef struct
117616 +#if _MIPS_SIM == _MIPS_SIM_ABI32
117617 /* Program counter. */
117618 - void * __pc;
117619 + __ptr_t __pc;
117621 /* Stack pointer. */
117622 - void * __sp;
117623 + __ptr_t __sp;
117625 /* Callee-saved registers s0 through s7. */
117626 int __regs[8];
117628 /* The frame pointer. */
117629 - void * __fp;
117630 + __ptr_t __fp;
117632 /* The global pointer. */
117633 - void * __gp;
117634 + __ptr_t __gp;
117635 +#else
117636 + /* Program counter. */
117637 + __extension__ long long __pc;
117639 + /* Stack pointer. */
117640 + __extension__ long long __sp;
117642 + /* Callee-saved registers s0 through s7. */
117643 + __extension__ long long __regs[8];
117645 + /* The frame pointer. */
117646 + __extension__ long long __fp;
117648 + /* The global pointer. */
117649 + __extension__ long long __gp;
117650 +#endif
117652 /* Floating point status register. */
117653 int __fpc_csr;
117655 /* Callee-saved floating point registers. */
117656 +#if defined _ABI64 && _MIPS_SIM == _ABI64
117657 + double __fpregs[8];
117658 +#else
117659 double __fpregs[6];
117660 +#endif
117661 } __jmp_buf[1];
117663 #ifdef __USE_MISC
117664 diff -u -udbrN glibc-2.3.2/sysdeps/mips/bits/wordsize.h glibc-2.3.2-200304020432/sysdeps/mips/bits/wordsize.h
117665 --- glibc-2.3.2/sysdeps/mips/bits/wordsize.h Thu Jan 1 01:00:00 1970
117666 +++ glibc-2.3.2-200304020432/sysdeps/mips/bits/wordsize.h Mon Mar 17 16:47:12 2003
117667 @@ -0,0 +1,19 @@
117668 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
117669 + This file is part of the GNU C Library.
117671 + The GNU C Library is free software; you can redistribute it and/or
117672 + modify it under the terms of the GNU Lesser General Public
117673 + License as published by the Free Software Foundation; either
117674 + version 2.1 of the License, or (at your option) any later version.
117676 + The GNU C Library is distributed in the hope that it will be useful,
117677 + but WITHOUT ANY WARRANTY; without even the implied warranty of
117678 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
117679 + Lesser General Public License for more details.
117681 + You should have received a copy of the GNU Lesser General Public
117682 + License along with the GNU C Library; if not, write to the Free
117683 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
117684 + 02111-1307 USA. */
117686 +#define __WORDSIZE _MIPS_SZPTR
117687 diff -u -udbrN glibc-2.3.2/sysdeps/mips/dl-machine.h glibc-2.3.2-200304020432/sysdeps/mips/dl-machine.h
117688 --- glibc-2.3.2/sysdeps/mips/dl-machine.h Wed Feb 12 10:42:22 2003
117689 +++ glibc-2.3.2-200304020432/sysdeps/mips/dl-machine.h Sat Mar 22 13:50:46 2003
117690 @@ -32,6 +32,8 @@
117691 #error ENTRY_POINT needs to be defined for MIPS.
117692 #endif
117694 +#include <sys/asm.h>
117696 /* The offset of gp from GOT might be system-dependent. It's set by
117697 ld. The same value is also */
117698 #define OFFSET_GP_GOT 0x7ff0
117699 @@ -72,6 +74,13 @@
117700 static inline int __attribute_used__
117701 elf_machine_matches_host (const ElfW(Ehdr) *ehdr)
117703 +#if _MIPS_SIM == _MIPS_SIM_ABI32 || _MIPS_SIM == _MIPS_SIM_NABI32
117704 + /* Don't link o32 and n32 together. */
117705 + if (((ehdr->e_flags & EF_MIPS_ABI2) != 0)
117706 + != (_MIPS_SIM != _MIPS_SIM_ABI32))
117707 + return 0;
117708 +#endif
117710 switch (ehdr->e_machine)
117712 case EM_MIPS:
117713 @@ -91,7 +100,7 @@
117715 /* Return the link-time address of _DYNAMIC. Conveniently, this is the
117716 first element of the GOT. This must be inlined in a function which
117717 - uses global data. */
117718 + uses global data. We assume its $gp points to the primary GOT. */
117719 static inline ElfW(Addr)
117720 elf_machine_dynamic (void)
117722 @@ -99,6 +108,9 @@
117723 return *elf_mips_got_from_gpreg (gp);
117726 +#define STRINGXP(X) __STRING(X)
117727 +#define STRINGXV(X) STRINGV_(X)
117728 +#define STRINGV_(...) # __VA_ARGS__
117730 /* Return the run-time load address of the shared object. */
117731 static inline ElfW(Addr)
117732 @@ -106,10 +118,10 @@
117734 ElfW(Addr) addr;
117735 asm (" .set noreorder\n"
117736 - " la %0, here\n"
117737 - " bltzal $0, here\n"
117738 + " " STRINGXP (PTR_LA) " %0, 0f\n"
117739 + " bltzal $0, 0f\n"
117740 " nop\n"
117741 - "here: subu %0, $31, %0\n"
117742 + "0: " STRINGXP (PTR_SUBU) " %0, $31, %0\n"
117743 " .set reorder\n"
117744 : "=r" (addr)
117745 : /* No inputs */
117746 @@ -118,7 +130,11 @@
117749 /* The MSB of got[1] of a gnu object is set to identify gnu objects. */
117750 -#define ELF_MIPS_GNU_GOT1_MASK 0x80000000
117751 +#if defined _ABI64 && _MIPS_SIM == _ABI64
117752 +# define ELF_MIPS_GNU_GOT1_MASK 0x8000000000000000L
117753 +#else
117754 +# define ELF_MIPS_GNU_GOT1_MASK 0x80000000L
117755 +#endif
117757 /* We can't rely on elf_machine_got_rel because _dl_object_relocation_scope
117758 fiddles with global data. */
117759 @@ -242,6 +258,55 @@
117760 return NULL;
117763 +#if _MIPS_SIM == _MIPS_SIM_ABI32
117764 +#define ELF_DL_FRAME_SIZE 40
117766 +#define ELF_DL_SAVE_ARG_REGS "\
117767 + sw $15, 36($29)\n \
117768 + sw $4, 16($29)\n \
117769 + sw $5, 20($29)\n \
117770 + sw $6, 24($29)\n \
117771 + sw $7, 28($29)\n \
117774 +#define ELF_DL_RESTORE_ARG_REGS "\
117775 + lw $31, 36($29)\n \
117776 + lw $4, 16($29)\n \
117777 + lw $5, 20($29)\n \
117778 + lw $6, 24($29)\n \
117779 + lw $7, 28($29)\n \
117782 +#define IFABIO32(X) X
117784 +#else /* _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM == _MIPS_SIM_ABI64 */
117786 +#define ELF_DL_FRAME_SIZE 64
117788 +#define ELF_DL_SAVE_ARG_REGS "\
117789 + sd $15, 56($29)\n \
117790 + sd $4, 8($29)\n \
117791 + sd $5, 16($29)\n \
117792 + sd $6, 24($29)\n \
117793 + sd $7, 32($29)\n \
117794 + sd $8, 40($29)\n \
117795 + sd $9, 48($29)\n \
117798 +#define ELF_DL_RESTORE_ARG_REGS "\
117799 + ld $31, 56($29)\n \
117800 + ld $4, 8($29)\n \
117801 + ld $5, 16($29)\n \
117802 + ld $6, 24($29)\n \
117803 + ld $7, 32($29)\n \
117804 + ld $8, 40($29)\n \
117805 + ld $9, 48($29)\n \
117808 +#define IFABIO32(X)
117810 +#endif
117812 /* Define mips specific runtime resolver. The function __dl_runtime_resolve
117813 is called from assembler function _dl_runtime_resolve which converts
117814 special argument registers t7 ($15) and t8 ($24):
117815 @@ -272,9 +337,8 @@
117817 struct link_map *l = elf_machine_runtime_link_map (old_gpreg, stub_pc); \
117818 const ElfW(Sym) *const symtab \
117819 - = (const void *) D_PTR (l, l_info[DT_SYMTAB]); \
117820 - const char *strtab \
117821 - = (const void *) D_PTR (l, l_info[DT_STRTAB]); \
117822 + = (const ElfW(Sym) *) D_PTR (l, l_info[DT_SYMTAB]); \
117823 + const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); \
117824 ElfW(Addr) *got \
117825 = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); \
117826 const ElfW(Word) local_gotno \
117827 @@ -333,36 +397,30 @@
117828 .type _dl_runtime_resolve,@function\n \
117829 .ent _dl_runtime_resolve\n \
117830 _dl_runtime_resolve:\n \
117831 - .frame $29, 40, $31\n \
117832 + .frame $29, " STRINGXP(ELF_DL_FRAME_SIZE) ", $31\n \
117833 .set noreorder\n \
117834 # Save GP.\n \
117835 move $3, $28\n \
117836 + # Save arguments and sp value in stack.\n \
117837 + " STRINGXP(PTR_SUBIU) " $29, " STRINGXP(ELF_DL_FRAME_SIZE) "\n \
117838 # Modify t9 ($25) so as to point .cpload instruction.\n \
117839 - addu $25, 8\n \
117840 + " IFABIO32(STRINGXP(PTR_ADDIU) " $25, 12\n") " \
117841 # Compute GP.\n \
117842 - .cpload $25\n \
117843 + " STRINGXP(SETUP_GP) "\n \
117844 + " STRINGXV(SETUP_GP64 (0, _dl_runtime_resolve)) "\n \
117845 .set reorder\n \
117846 # Save slot call pc.\n \
117847 move $2, $31\n \
117848 - # Save arguments and sp value in stack.\n \
117849 - subu $29, 40\n \
117850 - .cprestore 32\n \
117851 - sw $15, 36($29)\n \
117852 - sw $4, 16($29)\n \
117853 - sw $5, 20($29)\n \
117854 - sw $6, 24($29)\n \
117855 - sw $7, 28($29)\n \
117856 + " IFABIO32(STRINGXP(CPRESTORE(32))) "\n \
117857 + " ELF_DL_SAVE_ARG_REGS " \
117858 move $4, $24\n \
117859 move $5, $15\n \
117860 move $6, $3\n \
117861 move $7, $2\n \
117862 jal __dl_runtime_resolve\n \
117863 - lw $31, 36($29)\n \
117864 - lw $4, 16($29)\n \
117865 - lw $5, 20($29)\n \
117866 - lw $6, 24($29)\n \
117867 - lw $7, 28($29)\n \
117868 - addu $29, 40\n \
117869 + " ELF_DL_RESTORE_ARG_REGS " \
117870 + " STRINGXP(RESTORE_GP64) "\n \
117871 + " STRINGXP(PTR_ADDIU) " $29, " STRINGXP(ELF_DL_FRAME_SIZE) "\n \
117872 move $25, $2\n \
117873 jr $25\n \
117874 .end _dl_runtime_resolve\n \
117875 @@ -374,7 +432,6 @@
117876 #define ELF_MACHINE_USER_ADDRESS_MASK 0x80000000UL
117880 /* Initial entry point code for the dynamic linker.
117881 The C function `_dl_start' is the real entry point;
117882 its return value is the user program's entry point.
117883 @@ -392,71 +449,71 @@
117885 #define RTLD_START asm (\
117886 ".text\n"\
117887 - _RTLD_PROLOGUE(ENTRY_POINT)\
117888 - ".set noreorder\n\
117889 - bltzal $0, 0f\n\
117890 - nop\n\
117891 -0: .cpload $31\n\
117892 - .set reorder\n\
117893 + _RTLD_PROLOGUE(ENTRY_POINT) "\
117894 + " STRINGXV(SETUP_GPX($25)) "\n\
117895 + " STRINGXV(SETUP_GPX64($18,$25)) "\n\
117896 # i386 ABI book says that the first entry of GOT holds\n\
117897 # the address of the dynamic structure. Though MIPS ABI\n\
117898 # doesn't say nothing about this, I emulate this here.\n\
117899 - la $4, _DYNAMIC\n\
117900 + " STRINGXP(PTR_LA) " $4, _DYNAMIC\n\
117901 # Subtract OFFSET_GP_GOT\n\
117902 - sw $4, -0x7ff0($28)\n\
117903 + " STRINGXP(PTR_S) " $4, -0x7ff0($28)\n\
117904 move $4, $29\n\
117905 - subu $29, 16\n\
117906 + " STRINGXP(PTR_SUBIU) " $29, 16\n\
117908 - la $8, coff\n\
117909 - bltzal $8, coff\n\
117910 -coff: subu $8, $31, $8\n\
117911 + " STRINGXP(PTR_LA) " $8, .Lcoff\n\
117912 + bltzal $8, .Lcoff\n\
117913 +.Lcoff: " STRINGXP(PTR_SUBU) " $8, $31, $8\n\
117915 - la $25, _dl_start\n\
117916 - addu $25, $8\n\
117917 + " STRINGXP(PTR_LA) " $25, _dl_start\n\
117918 + " STRINGXP(PTR_ADDU) " $25, $8\n\
117919 jalr $25\n\
117921 - addiu $29, 16\n\
117922 + " STRINGXP(PTR_ADDIU) " $29, 16\n\
117923 # Get the value of label '_dl_start_user' in t9 ($25).\n\
117924 - la $25, _dl_start_user\n\
117925 + " STRINGXP(PTR_LA) " $25, _dl_start_user\n\
117926 .globl _dl_start_user\n\
117927 + .type _dl_start_user,@function\n\
117928 + .ent _dl_start_user\n\
117929 _dl_start_user:\n\
117930 - .set noreorder\n\
117931 - .cpload $25\n\
117932 - .set reorder\n\
117933 + " STRINGXP(SETUP_GP) "\n\
117934 + " STRINGXV(SETUP_GP64($18,_dl_start_user)) "\n\
117935 move $16, $28\n\
117936 # Save the user entry point address in a saved register.\n\
117937 move $17, $2\n\
117938 # Store the highest stack address\n\
117939 - sw $29, __libc_stack_end\n\
117940 + " STRINGXP(PTR_S) " $29, __libc_stack_end\n\
117941 # See if we were run as a command with the executable file\n\
117942 # name as an extra leading argument.\n\
117943 lw $2, _dl_skip_args\n\
117944 beq $2, $0, 1f\n\
117945 # Load the original argument count.\n\
117946 - lw $4, 0($29)\n\
117947 + " STRINGXP(PTR_L) " $4, 0($29)\n\
117948 # Subtract _dl_skip_args from it.\n\
117949 subu $4, $2\n\
117950 # Adjust the stack pointer to skip _dl_skip_args words.\n\
117951 - sll $2, 2\n\
117952 - addu $29, $2\n\
117953 + sll $2, " STRINGXP (PTRLOG) "\n\
117954 + " STRINGXP(PTR_ADDU) " $29, $2\n\
117955 # Save back the modified argument count.\n\
117956 - sw $4, 0($29)\n\
117957 + " STRINGXP(PTR_S) " $4, 0($29)\n\
117958 1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\
117959 - lw $4, _rtld_local\n\
117960 - lw $5, 0($29)\n\
117961 - la $6, 4($29)\n\
117962 - sll $7, $5, 2\n\
117963 - addu $7, $7, $6\n\
117964 - addu $7, $7, 4\n\
117965 - subu $29, 16\n\
117966 + " STRINGXP(PTR_L) " $4, _rtld_local\n\
117967 + " STRINGXP(PTR_L) /* or lw??? fixme */ " $5, 0($29)\n\
117968 + " STRINGXP(PTR_LA) " $6, " STRINGXP (PTRSIZE) "($29)\n\
117969 + sll $7, $5, " STRINGXP (PTRLOG) "\n\
117970 + " STRINGXP(PTR_ADDU) " $7, $7, $6\n\
117971 + " STRINGXP(PTR_ADDU) " $7, $7, " STRINGXP (PTRSIZE) " \n\
117972 + " STRINGXP(PTR_SUBIU) " $29, 32\n\
117973 + " STRINGXP(SAVE_GP(16)) "\n\
117974 # Call the function to run the initializers.\n\
117975 jal _dl_init_internal\n\
117976 - addiu $29, 16\n\
117977 + " STRINGXP(PTR_ADDIU) " $29, 32\n\
117978 # Pass our finalizer function to the user in $2 as per ELF ABI.\n\
117979 - la $2, _dl_fini\n\
117980 + " STRINGXP(PTR_LA) " $2, _dl_fini\n\
117981 # Jump to the user entry point.\n\
117982 move $25, $17\n\
117983 - jr $25\n\t"\
117984 + jr $25\n\
117985 + .end _dl_start_user\n\t"\
117986 _RTLD_EPILOGUE(ENTRY_POINT)\
117987 ".previous"\
117989 @@ -472,9 +529,15 @@
117990 MAP is the object containing the reloc. */
117992 static inline void
117993 +#ifdef RTLD_BOOTSTRAP
117994 + __attribute__ ((always_inline))
117995 +#endif
117996 elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
117997 const ElfW(Sym) *sym, const struct r_found_version *version,
117998 - ElfW(Addr) *const reloc_addr)
117999 + /* We use void* because the location to be relocated
118000 + is not required to be properly aligned for a
118001 + ELFW(Addr). */
118002 + void /* ElfW(Addr) */ *const reloc_addr)
118004 const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info);
118006 @@ -490,21 +553,46 @@
118008 switch (r_type)
118010 +#if _MIPS_SIM == _MIPS_SIM_ABI64
118011 + case (R_MIPS_64 << 8) | R_MIPS_REL32:
118012 +#else
118013 case R_MIPS_REL32:
118014 +#endif
118016 int symidx = ELFW(R_SYM) (reloc->r_info);
118017 + ElfW(Addr) reloc_value;
118019 + /* Support relocations on mis-aligned offsets. Should we ever
118020 + implement RELA, this should be replaced with an assignment
118021 + from reloc->r_addend. */
118022 + __builtin_memcpy (&reloc_value, reloc_addr, sizeof (reloc_value));
118024 if (symidx)
118026 const ElfW(Word) gotsym
118027 = (const ElfW(Word)) map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val;
118029 - if (symidx < gotsym)
118030 + if ((ElfW(Word))symidx < gotsym)
118032 + /* This wouldn't work for a symbol imported from other
118033 + libraries for which there's no GOT entry, but MIPS
118034 + requires every symbol referenced in a dynamic
118035 + relocation to have a GOT entry in the primary GOT,
118036 + so we only get here for locally-defined symbols.
118037 + For section symbols, we should *NOT* be adding
118038 + sym->st_value (per the definition of the meaning of
118039 + S in reloc expressions in the ELF64 MIPS ABI),
118040 + since it should have already been added to
118041 + reloc_value by the linker, but older versions of
118042 + GNU ld didn't add it, and newer versions don't emit
118043 + useless relocations to section symbols any more, so
118044 + it is safe to keep on adding sym->st_value, even
118045 + though it's not ABI compliant. Some day we should
118046 + bite the bullet and stop doing this. */
118047 #ifndef RTLD_BOOTSTRAP
118048 if (map != &GL(dl_rtld_map))
118049 #endif
118050 - *reloc_addr += sym->st_value + map->l_addr;
118051 + reloc_value += sym->st_value + map->l_addr;
118055 @@ -515,7 +603,7 @@
118056 = (const ElfW(Word))
118057 map->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val;
118059 - *reloc_addr += got[symidx + local_gotno - gotsym];
118060 + reloc_value += got[symidx + local_gotno - gotsym];
118061 #endif
118064 @@ -523,11 +611,27 @@
118065 #ifndef RTLD_BOOTSTRAP
118066 if (map != &GL(dl_rtld_map))
118067 #endif
118068 - *reloc_addr += map->l_addr;
118069 + reloc_value += map->l_addr;
118071 + __builtin_memcpy (reloc_addr, &reloc_value, sizeof (reloc_value));
118073 break;
118074 case R_MIPS_NONE: /* Alright, Wilbur. */
118075 break;
118076 +#if _MIPS_SIM == _MIPS_SIM_ABI64
118077 + case R_MIPS_64:
118078 + /* For full compliance with the ELF64 ABI, one must precede the
118079 + _REL32/_64 pair of relocations with a _64 relocation, such
118080 + that the in-place addend is read as a 64-bit value. IRIX
118081 + didn't pick up on this requirement, so we treat the
118082 + _REL32/_64 relocation as a 64-bit relocation even if it's by
118083 + itself. For ABI compliance, we ignore such _64 dummy
118084 + relocations. For RELA, this may be simply removed, since
118085 + it's totally unnecessary. */
118086 + if (ELFW(R_SYM) (reloc->r_info) == 0)
118087 + break;
118088 + /* Fall through. */
118089 +#endif
118090 default:
118091 _dl_reloc_bad_type (map, r_type, 0);
118092 break;
118093 @@ -536,7 +640,7 @@
118095 static inline void
118096 elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc,
118097 - ElfW(Addr) *const reloc_addr)
118098 + void /* ElfW(Addr) */ *const reloc_addr)
118100 /* XXX Nothing to do. There is no relative relocation, right? */
118102 @@ -661,7 +765,7 @@
118103 of got[1] of a gnu object is set to identify gnu objects.
118104 Where we can store l for non gnu objects? XXX */
118105 if ((got[1] & ELF_MIPS_GNU_GOT1_MASK) != 0)
118106 - got[1] = (ElfW(Addr)) ((unsigned) l | ELF_MIPS_GNU_GOT1_MASK);
118107 + got[1] = ((ElfW(Addr)) l | ELF_MIPS_GNU_GOT1_MASK);
118109 _dl_mips_gnu_objects = 0;
118111 diff -u -udbrN glibc-2.3.2/sysdeps/mips/elf/ldsodefs.h glibc-2.3.2-200304020432/sysdeps/mips/elf/ldsodefs.h
118112 --- glibc-2.3.2/sysdeps/mips/elf/ldsodefs.h Wed Feb 6 23:56:54 2002
118113 +++ glibc-2.3.2-200304020432/sysdeps/mips/elf/ldsodefs.h Sat Mar 22 16:07:05 2003
118114 @@ -1,5 +1,5 @@
118115 /* Run-time dynamic linker data structures for loaded ELF shared objects.
118116 - Copyright (C) 2000, 2002 Free Software Foundation, Inc.
118117 + Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
118118 This file is part of the GNU C Library.
118120 The GNU C Library is free software; you can redistribute it and/or
118121 @@ -17,9 +17,93 @@
118122 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
118123 02111-1307 USA. */
118125 +#ifndef _MIPS_LDSODEFS_H
118126 +#define _MIPS_LDSODEFS_H
118128 /* The MIPS ABI specifies that the dynamic section has to be read-only. */
118130 #define DL_RO_DYN_SECTION 1
118132 #include_next <ldsodefs.h>
118134 +/* The 64-bit MIPS ELF ABI uses an unusual reloc format. Each
118135 + relocation entry specifies up to three actual relocations, all at
118136 + the same address. The first relocation which required a symbol
118137 + uses the symbol in the r_sym field. The second relocation which
118138 + requires a symbol uses the symbol in the r_ssym field. If all
118139 + three relocations require a symbol, the third one uses a zero
118140 + value.
118142 + We define these structures in internal headers because we're not
118143 + sure we want to make them part of the ABI yet. Eventually, some of
118144 + this may move into elf/elf.h. */
118146 +/* An entry in a 64 bit SHT_REL section. */
118148 +typedef struct
118150 + Elf32_Word r_sym; /* Symbol index */
118151 + unsigned char r_ssym; /* Special symbol for 2nd relocation */
118152 + unsigned char r_type3; /* 3rd relocation type */
118153 + unsigned char r_type2; /* 2nd relocation type */
118154 + unsigned char r_type1; /* 1st relocation type */
118155 +} _Elf64_Mips_R_Info;
118157 +typedef union
118159 + Elf64_Xword r_info_number;
118160 + _Elf64_Mips_R_Info r_info_fields;
118161 +} _Elf64_Mips_R_Info_union;
118163 +typedef struct
118165 + Elf64_Addr r_offset; /* Address */
118166 + _Elf64_Mips_R_Info_union r_info; /* Relocation type and symbol index */
118167 +} Elf64_Mips_Rel;
118169 +typedef struct
118171 + Elf64_Addr r_offset; /* Address */
118172 + _Elf64_Mips_R_Info_union r_info; /* Relocation type and symbol index */
118173 + Elf64_Sxword r_addend; /* Addend */
118174 +} Elf64_Mips_Rela;
118176 +#define ELF64_MIPS_R_SYM(i) \
118177 + ((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_sym)
118178 +#define ELF64_MIPS_R_TYPE(i) \
118179 + (((_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_type1 \
118180 + | ((Elf32_Word)(__extension__ (_Elf64_Mips_R_Info_union)(i) \
118181 + ).r_info_fields.r_type2 << 8) \
118182 + | ((Elf32_Word)(__extension__ (_Elf64_Mips_R_Info_union)(i) \
118183 + ).r_info_fields.r_type3 << 16) \
118184 + | ((Elf32_Word)(__extension__ (_Elf64_Mips_R_Info_union)(i) \
118185 + ).r_info_fields.r_ssym << 24))
118186 +#define ELF64_MIPS_R_INFO(sym, type) \
118187 + (__extension__ (_Elf64_Mips_R_Info_union) \
118188 + (__extension__ (_Elf64_Mips_R_Info) \
118189 + { (sym), ELF64_MIPS_R_SSYM (type), \
118190 + ELF64_MIPS_R_TYPE3 (type), \
118191 + ELF64_MIPS_R_TYPE2 (type), \
118192 + ELF64_MIPS_R_TYPE1 (type) \
118193 + }).r_info_number)
118194 +/* These macros decompose the value returned by ELF64_MIPS_R_TYPE, and
118195 + compose it back into a value that it can be used as an argument to
118196 + ELF64_MIPS_R_INFO. */
118197 +#define ELF64_MIPS_R_SSYM(i) (((i) >> 24) & 0xff)
118198 +#define ELF64_MIPS_R_TYPE3(i) (((i) >> 16) & 0xff)
118199 +#define ELF64_MIPS_R_TYPE2(i) (((i) >> 8) & 0xff)
118200 +#define ELF64_MIPS_R_TYPE1(i) ((i) & 0xff)
118201 +#define ELF64_MIPS_R_TYPEENC(type1, type2, type3, ssym) \
118202 + ((type1) \
118203 + | ((Elf32_Word)(type2) << 8) \
118204 + | ((Elf32_Word)(type3) << 16) \
118205 + | ((Elf32_Word)(ssym) << 24))
118207 +#undef ELF64_R_SYM
118208 +#define ELF64_R_SYM(i) ELF64_MIPS_R_SYM (i)
118209 +#undef ELF64_R_TYPE
118210 +#define ELF64_R_TYPE(i) ELF64_MIPS_R_TYPE (i)
118211 +#undef ELF64_R_INFO
118212 +#define ELF64_R_INFO(sym, type) ELF64_MIPS_R_INFO ((sym), (type))
118214 +#endif
118215 diff -u -udbrN glibc-2.3.2/sysdeps/mips/elf/start.S glibc-2.3.2-200304020432/sysdeps/mips/elf/start.S
118216 --- glibc-2.3.2/sysdeps/mips/elf/start.S Tue Dec 10 04:41:54 2002
118217 +++ glibc-2.3.2-200304020432/sysdeps/mips/elf/start.S Mon Mar 17 16:47:12 2003
118218 @@ -1,5 +1,6 @@
118219 /* Startup code compliant to the ELF Mips ABI.
118220 - Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
118221 + Copyright (C) 1995, 1997, 2000, 2001, 2002, 2003
118222 + Free Software Foundation, Inc.
118223 This file is part of the GNU C Library.
118225 The GNU C Library is free software; you can redistribute it and/or
118226 @@ -19,6 +20,7 @@
118228 #define __ASSEMBLY__ 1
118229 #include <entry.h>
118230 +#include <sys/asm.h>
118232 #ifndef ENTRY_POINT
118233 #error ENTRY_POINT needs to be defined for start.S on MIPS/ELF.
118234 @@ -52,42 +54,41 @@
118235 char **argv, void (*init) (void), void (*fini) (void),
118236 void (*rtld_fini) (void), void *stack_end)
118238 -#ifdef __PIC__
118239 -/* A macro to (re)initialize gp. We can get the run time address of 0f in
118240 - ra ($31) by blezal instruction. In this early phase, we can't save gp
118241 - in stack and .cprestore doesn't work properly. So we set gp by using
118242 - this macro. */
118243 -#define SET_GP \
118244 - .set noreorder; \
118245 - bltzal $0,0f; \
118246 - nop; \
118247 -0: .cpload $31; \
118248 - .set reorder;
118249 -#endif
118251 .text
118252 .globl ENTRY_POINT
118253 .type ENTRY_POINT,@function
118254 ENTRY_POINT:
118255 #ifdef __PIC__
118256 - SET_GP
118257 + SETUP_GPX($0)
118258 + SETUP_GPX64($25,$0)
118259 #else
118260 - la $28, _gp /* Setup GP correctly if we're non-PIC. */
118261 -#endif
118262 + PTR_LA $28, _gp /* Setup GP correctly if we're non-PIC. */
118263 move $31, $0
118264 +#endif
118266 - la $4, main /* main */
118267 - lw $5, 0($29) /* argc */
118268 - addu $6, $29, 4 /* argv */
118269 - /* Allocate space on the stack for seven arguments and make sure
118270 - the stack is aligned to double words (8 bytes). */
118271 - and $29, 0xfffffff8
118272 - subu $29, 32
118273 - la $7, __libc_csu_init /* init */
118274 - la $8, __libc_csu_fini
118275 - sw $8, 16($29) /* fini */
118276 - sw $2, 20($29) /* rtld_fini */
118277 - sw $29, 24($29) /* stack_end */
118278 + PTR_LA $4, main /* main */
118279 + PTR_L $5, 0($29) /* argc */
118280 + PTR_ADDIU $6, $29, PTRSIZE /* argv */
118282 + /* Allocate space on the stack for seven arguments (o32 only)
118283 + and make sure the stack is aligned to double words (8 bytes)
118284 + on o32 and quad words (16 bytes) on n32 and n64. */
118286 + and $29, -2 * SZREG
118287 +#if _MIPS_SIM == _MIPS_SIM_ABI32
118288 + PTR_SUBIU $29, 32
118289 +#endif
118290 + PTR_LA $7, __libc_csu_init /* init */
118291 + PTR_LA $8, __libc_csu_fini
118292 +#if _MIPS_SIM == _MIPS_SIM_ABI32
118293 + PTR_S $8, 16($29) /* fini */
118294 + PTR_S $2, 20($29) /* rtld_fini */
118295 + PTR_S $29, 24($29) /* stack_end */
118296 +#else
118297 + move $9, $2 /* rtld_fini */
118298 + move $10, $29 /* stack_end */
118299 +#endif
118300 jal __libc_start_main
118301 hlt: b hlt /* Crash if somehow it does return. */
118303 diff -u -udbrN glibc-2.3.2/sysdeps/mips/fpu/bits/mathdef.h glibc-2.3.2-200304020432/sysdeps/mips/fpu/bits/mathdef.h
118304 --- glibc-2.3.2/sysdeps/mips/fpu/bits/mathdef.h Thu Jan 1 01:00:00 1970
118305 +++ glibc-2.3.2-200304020432/sysdeps/mips/fpu/bits/mathdef.h Fri Mar 14 16:30:43 2003
118306 @@ -0,0 +1,48 @@
118307 +/* Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
118308 + Free Software Foundation, Inc.
118309 + This file is part of the GNU C Library.
118311 + The GNU C Library is free software; you can redistribute it and/or
118312 + modify it under the terms of the GNU Lesser General Public
118313 + License as published by the Free Software Foundation; either
118314 + version 2.1 of the License, or (at your option) any later version.
118316 + The GNU C Library is distributed in the hope that it will be useful,
118317 + but WITHOUT ANY WARRANTY; without even the implied warranty of
118318 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
118319 + Lesser General Public License for more details.
118321 + You should have received a copy of the GNU Lesser General Public
118322 + License along with the GNU C Library; if not, write to the Free
118323 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
118324 + 02111-1307 USA. */
118326 +#if !defined _MATH_H && !defined _COMPLEX_H
118327 +# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
118328 +#endif
118330 +#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
118331 +# define _MATH_H_MATHDEF 1
118333 +/* Normally, there is no long double type and the `float' and `double'
118334 + expressions are evaluated as `double'. */
118335 +typedef double float_t; /* `float' expressions are evaluated as
118336 + `double'. */
118337 +typedef double double_t; /* `double' expressions are evaluated as
118338 + `double'. */
118340 +/* Define `INFINITY' as value of type `float'. */
118341 +# define INFINITY HUGE_VALF
118344 +/* The values returned by `ilogb' for 0 and NaN respectively. */
118345 +# define FP_ILOGB0 (-2147483647)
118346 +# define FP_ILOGBNAN 2147483647
118348 +#endif /* ISO C99 */
118350 +#if ! defined __NO_LONG_DOUBLE_MATH && _MIPS_SIM == _MIPS_SIM_ABI32
118351 +/* Signal that we do not really have a `long double'. This disables the
118352 + declaration of all the `long double' function variants. */
118353 +# define __NO_LONG_DOUBLE_MATH 1
118354 +#endif
118355 diff -u -udbrN glibc-2.3.2/sysdeps/mips/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/mips/fpu/libm-test-ulps
118356 --- glibc-2.3.2/sysdeps/mips/fpu/libm-test-ulps Wed Oct 16 01:39:37 2002
118357 +++ glibc-2.3.2-200304020432/sysdeps/mips/fpu/libm-test-ulps Sun Mar 23 01:52:10 2003
118358 @@ -94,7 +94,7 @@
118359 idouble: 1
118361 # ccos
118362 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
118363 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
118364 float: 1
118365 ifloat: 1
118366 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
118367 @@ -107,10 +107,10 @@
118368 ifloat: 1
118370 # ccosh
118371 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
118372 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
118373 float: 1
118374 ifloat: 1
118375 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
118376 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
118377 float: 1
118378 ifloat: 1
118379 Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
118380 @@ -145,7 +145,7 @@
118381 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
118382 float: 1
118383 ifloat: 1
118384 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
118385 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
118386 double: 1
118387 float: 5
118388 idouble: 1
118389 @@ -239,7 +239,7 @@
118390 ifloat: 2
118392 # csinh
118393 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
118394 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
118395 double: 1
118396 idouble: 1
118397 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
118398 @@ -258,7 +258,7 @@
118399 ifloat: 1
118401 # ctan
118402 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
118403 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
118404 double: 1
118405 idouble: 1
118406 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
118407 @@ -266,7 +266,7 @@
118408 idouble: 1
118410 # ctanh
118411 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
118412 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
118413 double: 1
118414 float: 2
118415 idouble: 1
118416 @@ -453,12 +453,12 @@
118417 ifloat: 2
118419 # lgamma
118420 -Test "lgamma (0.7) == 0.26086724653166651439":
118421 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
118422 double: 1
118423 float: 1
118424 idouble: 1
118425 ifloat: 1
118426 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
118427 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
118428 double: 1
118429 float: 2
118430 idouble: 1
118431 @@ -513,7 +513,7 @@
118432 Test "tgamma (0.5) == sqrt (pi)":
118433 float: 1
118434 ifloat: 1
118435 -Test "tgamma (0.7) == 1.29805533264755778568":
118436 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
118437 double: 1
118438 float: 1
118439 idouble: 1
118440 diff -u -udbrN glibc-2.3.2/sysdeps/mips/ieee754.h glibc-2.3.2-200304020432/sysdeps/mips/ieee754.h
118441 --- glibc-2.3.2/sysdeps/mips/ieee754.h Thu Jan 1 01:00:00 1970
118442 +++ glibc-2.3.2-200304020432/sysdeps/mips/ieee754.h Thu Mar 20 18:59:45 2003
118443 @@ -0,0 +1,325 @@
118444 +/* Copyright (C) 1992, 1995, 1996, 1999, 2002, 2003
118445 + Free Software Foundation, Inc.
118446 + This file is part of the GNU C Library.
118448 + The GNU C Library is free software; you can redistribute it and/or
118449 + modify it under the terms of the GNU Lesser General Public
118450 + License as published by the Free Software Foundation; either
118451 + version 2.1 of the License, or (at your option) any later version.
118453 + The GNU C Library is distributed in the hope that it will be useful,
118454 + but WITHOUT ANY WARRANTY; without even the implied warranty of
118455 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
118456 + Lesser General Public License for more details.
118458 + You should have received a copy of the GNU Lesser General Public
118459 + License along with the GNU C Library; if not, write to the Free
118460 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
118461 + 02111-1307 USA. */
118463 +#ifndef _IEEE754_H
118465 +#define _IEEE754_H 1
118466 +#include <features.h>
118468 +#include <endian.h>
118470 +#include <float.h>
118472 +__BEGIN_DECLS
118474 +union ieee754_float
118476 + float f;
118478 + /* This is the IEEE 754 single-precision format. */
118479 + struct
118481 +#if __BYTE_ORDER == __BIG_ENDIAN
118482 + unsigned int negative:1;
118483 + unsigned int exponent:8;
118484 + unsigned int mantissa:23;
118485 +#endif /* Big endian. */
118486 +#if __BYTE_ORDER == __LITTLE_ENDIAN
118487 + unsigned int mantissa:23;
118488 + unsigned int exponent:8;
118489 + unsigned int negative:1;
118490 +#endif /* Little endian. */
118491 + } ieee;
118493 + /* This format makes it easier to see if a NaN is a signalling NaN. */
118494 + struct
118496 +#if __BYTE_ORDER == __BIG_ENDIAN
118497 + unsigned int negative:1;
118498 + unsigned int exponent:8;
118499 + unsigned int quiet_nan:1;
118500 + unsigned int mantissa:22;
118501 +#endif /* Big endian. */
118502 +#if __BYTE_ORDER == __LITTLE_ENDIAN
118503 + unsigned int mantissa:22;
118504 + unsigned int quiet_nan:1;
118505 + unsigned int exponent:8;
118506 + unsigned int negative:1;
118507 +#endif /* Little endian. */
118508 + } ieee_nan;
118511 +#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */
118514 +union ieee754_double
118516 + double d;
118518 + /* This is the IEEE 754 double-precision format. */
118519 + struct
118521 +#if __BYTE_ORDER == __BIG_ENDIAN
118522 + unsigned int negative:1;
118523 + unsigned int exponent:11;
118524 + /* Together these comprise the mantissa. */
118525 + unsigned int mantissa0:20;
118526 + unsigned int mantissa1:32;
118527 +#endif /* Big endian. */
118528 +#if __BYTE_ORDER == __LITTLE_ENDIAN
118529 +# if __FLOAT_WORD_ORDER == BIG_ENDIAN
118530 + unsigned int mantissa0:20;
118531 + unsigned int exponent:11;
118532 + unsigned int negative:1;
118533 + unsigned int mantissa1:32;
118534 +# else
118535 + /* Together these comprise the mantissa. */
118536 + unsigned int mantissa1:32;
118537 + unsigned int mantissa0:20;
118538 + unsigned int exponent:11;
118539 + unsigned int negative:1;
118540 +# endif
118541 +#endif /* Little endian. */
118542 + } ieee;
118544 + /* This format makes it easier to see if a NaN is a signalling NaN. */
118545 + struct
118547 +#if __BYTE_ORDER == __BIG_ENDIAN
118548 + unsigned int negative:1;
118549 + unsigned int exponent:11;
118550 + unsigned int quiet_nan:1;
118551 + /* Together these comprise the mantissa. */
118552 + unsigned int mantissa0:19;
118553 + unsigned int mantissa1:32;
118554 +#else
118555 +# if __FLOAT_WORD_ORDER == BIG_ENDIAN
118556 + unsigned int mantissa0:19;
118557 + unsigned int quiet_nan:1;
118558 + unsigned int exponent:11;
118559 + unsigned int negative:1;
118560 + unsigned int mantissa1:32;
118561 +# else
118562 + /* Together these comprise the mantissa. */
118563 + unsigned int mantissa1:32;
118564 + unsigned int mantissa0:19;
118565 + unsigned int quiet_nan:1;
118566 + unsigned int exponent:11;
118567 + unsigned int negative:1;
118568 +# endif
118569 +#endif
118570 + } ieee_nan;
118573 +#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */
118575 +#if LDBL_MANT_DIG == 113
118577 +union ieee854_long_double
118579 + long double d;
118581 + /* This is the IEEE 854 quad-precision format. */
118582 + struct
118584 +#if __BYTE_ORDER == __BIG_ENDIAN
118585 + unsigned int negative:1;
118586 + unsigned int exponent:15;
118587 + /* Together these comprise the mantissa. */
118588 + unsigned int mantissa0:16;
118589 + unsigned int mantissa1:32;
118590 + unsigned int mantissa2:32;
118591 + unsigned int mantissa3:32;
118592 +#endif /* Big endian. */
118593 +#if __BYTE_ORDER == __LITTLE_ENDIAN
118594 + /* Together these comprise the mantissa. */
118595 + unsigned int mantissa3:32;
118596 + unsigned int mantissa2:32;
118597 + unsigned int mantissa1:32;
118598 + unsigned int mantissa0:16;
118599 + unsigned int exponent:15;
118600 + unsigned int negative:1;
118601 +#endif /* Little endian. */
118602 + } ieee;
118604 + /* This format makes it easier to see if a NaN is a signalling NaN. */
118605 + struct
118607 +#if __BYTE_ORDER == __BIG_ENDIAN
118608 + unsigned int negative:1;
118609 + unsigned int exponent:15;
118610 + unsigned int quiet_nan:1;
118611 + /* Together these comprise the mantissa. */
118612 + unsigned int mantissa0:15;
118613 + unsigned int mantissa1:32;
118614 + unsigned int mantissa2:32;
118615 + unsigned int mantissa3:32;
118616 +#endif /* Big endian. */
118617 +#if __BYTE_ORDER == __LITTLE_ENDIAN
118618 + /* Together these comprise the mantissa. */
118619 + unsigned int mantissa3:32;
118620 + unsigned int mantissa2:32;
118621 + unsigned int mantissa1:32;
118622 + unsigned int mantissa0:15;
118623 + unsigned int quiet_nan:1;
118624 + unsigned int exponent:15;
118625 + unsigned int negative:1;
118626 +#endif /* Little endian. */
118627 + } ieee_nan;
118630 +#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent. */
118632 +#elif LDBL_MANT_DIG == 64
118634 +union ieee854_long_double
118636 + long double d;
118638 + /* This is the IEEE 854 double-extended-precision format. */
118639 + struct
118641 +#if __BYTE_ORDER == __BIG_ENDIAN
118642 + unsigned int negative:1;
118643 + unsigned int exponent:15;
118644 + unsigned int empty:16;
118645 + unsigned int mantissa0:32;
118646 + unsigned int mantissa1:32;
118647 +#endif
118648 +#if __BYTE_ORDER == __LITTLE_ENDIAN
118649 +# if __FLOAT_WORD_ORDER == BIG_ENDIAN
118650 + unsigned int exponent:15;
118651 + unsigned int negative:1;
118652 + unsigned int empty:16;
118653 + unsigned int mantissa0:32;
118654 + unsigned int mantissa1:32;
118655 +# else
118656 + unsigned int mantissa1:32;
118657 + unsigned int mantissa0:32;
118658 + unsigned int exponent:15;
118659 + unsigned int negative:1;
118660 + unsigned int empty:16;
118661 +# endif
118662 +#endif
118663 + } ieee;
118665 + /* This is for NaNs in the IEEE 854 double-extended-precision format. */
118666 + struct
118668 +#if __BYTE_ORDER == __BIG_ENDIAN
118669 + unsigned int negative:1;
118670 + unsigned int exponent:15;
118671 + unsigned int empty:16;
118672 + unsigned int one:1;
118673 + unsigned int quiet_nan:1;
118674 + unsigned int mantissa0:30;
118675 + unsigned int mantissa1:32;
118676 +#endif
118677 +#if __BYTE_ORDER == __LITTLE_ENDIAN
118678 +# if __FLOAT_WORD_ORDER == BIG_ENDIAN
118679 + unsigned int exponent:15;
118680 + unsigned int negative:1;
118681 + unsigned int empty:16;
118682 + unsigned int mantissa0:30;
118683 + unsigned int quiet_nan:1;
118684 + unsigned int one:1;
118685 + unsigned int mantissa1:32;
118686 +# else
118687 + unsigned int mantissa1:32;
118688 + unsigned int mantissa0:30;
118689 + unsigned int quiet_nan:1;
118690 + unsigned int one:1;
118691 + unsigned int exponent:15;
118692 + unsigned int negative:1;
118693 + unsigned int empty:16;
118694 +# endif
118695 +#endif
118696 + } ieee_nan;
118699 +#define IEEE854_LONG_DOUBLE_BIAS 0x3fff
118701 +#elif LDBL_MANT_DIG == 53
118703 +union ieee854_long_double
118705 + long double d;
118707 + /* This is the IEEE 754 double-precision format. */
118708 + struct
118710 +#if __BYTE_ORDER == __BIG_ENDIAN
118711 + unsigned int negative:1;
118712 + unsigned int exponent:11;
118713 + /* Together these comprise the mantissa. */
118714 + unsigned int mantissa0:20;
118715 + unsigned int mantissa1:32;
118716 +#endif /* Big endian. */
118717 +#if __BYTE_ORDER == __LITTLE_ENDIAN
118718 +# if __FLOAT_WORD_ORDER == BIG_ENDIAN
118719 + unsigned int mantissa0:20;
118720 + unsigned int exponent:11;
118721 + unsigned int negative:1;
118722 + unsigned int mantissa1:32;
118723 +# else
118724 + /* Together these comprise the mantissa. */
118725 + unsigned int mantissa1:32;
118726 + unsigned int mantissa0:20;
118727 + unsigned int exponent:11;
118728 + unsigned int negative:1;
118729 +# endif
118730 +#endif /* Little endian. */
118731 + } ieee;
118733 + /* This format makes it easier to see if a NaN is a signalling NaN. */
118734 + struct
118736 +#if __BYTE_ORDER == __BIG_ENDIAN
118737 + unsigned int negative:1;
118738 + unsigned int exponent:11;
118739 + unsigned int quiet_nan:1;
118740 + /* Together these comprise the mantissa. */
118741 + unsigned int mantissa0:19;
118742 + unsigned int mantissa1:32;
118743 +#else
118744 +# if __FLOAT_WORD_ORDER == BIG_ENDIAN
118745 + unsigned int mantissa0:19;
118746 + unsigned int quiet_nan:1;
118747 + unsigned int exponent:11;
118748 + unsigned int negative:1;
118749 + unsigned int mantissa1:32;
118750 +# else
118751 + /* Together these comprise the mantissa. */
118752 + unsigned int mantissa1:32;
118753 + unsigned int mantissa0:19;
118754 + unsigned int quiet_nan:1;
118755 + unsigned int exponent:11;
118756 + unsigned int negative:1;
118757 +# endif
118758 +#endif
118759 + } ieee_nan;
118762 +#define IEEE854_LONG_DOUBLE_BIAS 0x3ff /* Added to exponent. */
118764 +#endif /* LDBL_MANT_DIG == 53 */
118766 +__END_DECLS
118768 +#endif /* ieee754.h */
118769 diff -u -udbrN glibc-2.3.2/sysdeps/mips/lshift.S glibc-2.3.2-200304020432/sysdeps/mips/lshift.S
118770 --- glibc-2.3.2/sysdeps/mips/lshift.S Sat Jul 7 21:21:27 2001
118771 +++ glibc-2.3.2-200304020432/sysdeps/mips/lshift.S Fri Mar 14 04:59:37 2003
118772 @@ -1,6 +1,6 @@
118773 /* MIPS2 __mpn_lshift --
118775 -Copyright (C) 1995, 2000 Free Software Foundation, Inc.
118776 +Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
118778 This file is part of the GNU MP Library.
118780 @@ -44,12 +44,12 @@
118781 addu $4,$4,$2 /* make r4 point at end of res */
118782 addiu $6,$6,-1
118783 and $9,$6,4-1 /* number of limbs in first loop */
118784 - beq $9,$0,.L0 /* if multiple of 4 limbs, skip first loop */
118785 + beq $9,$0,L(L0) /* if multiple of 4 limbs, skip first loop */
118786 srl $2,$10,$13 /* compute function result */
118788 subu $6,$6,$9
118790 -.Loop0: lw $3,-8($5)
118791 +L(Loop0): lw $3,-8($5)
118792 addiu $4,$4,-4
118793 addiu $5,$5,-4
118794 addiu $9,$9,-1
118795 @@ -57,13 +57,13 @@
118796 srl $12,$3,$13
118797 move $10,$3
118798 or $8,$11,$12
118799 - bne $9,$0,.Loop0
118800 + bne $9,$0,L(Loop0)
118801 sw $8,0($4)
118803 -.L0: beq $6,$0,.Lend
118804 +L(L0): beq $6,$0,L(Lend)
118807 -.Loop: lw $3,-8($5)
118808 +L(Loop): lw $3,-8($5)
118809 addiu $4,$4,-16
118810 addiu $6,$6,-4
118811 sll $11,$10,$7
118812 @@ -89,10 +89,10 @@
118814 addiu $5,$5,-16
118815 or $8,$14,$9
118816 - bgtz $6,.Loop
118817 + bgtz $6,L(Loop)
118818 sw $8,0($4)
118820 -.Lend: sll $8,$10,$7
118821 +L(Lend): sll $8,$10,$7
118822 j $31
118823 sw $8,-4($4)
118824 END (__mpn_lshift)
118825 diff -u -udbrN glibc-2.3.2/sysdeps/mips/machine-gmon.h glibc-2.3.2-200304020432/sysdeps/mips/machine-gmon.h
118826 --- glibc-2.3.2/sysdeps/mips/machine-gmon.h Wed Feb 13 08:30:11 2002
118827 +++ glibc-2.3.2-200304020432/sysdeps/mips/machine-gmon.h Mon Mar 17 16:53:37 2003
118828 @@ -1,5 +1,6 @@
118829 /* Machine-specific calling sequence for `mcount' profiling function. MIPS
118830 - Copyright (C) 1996, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
118831 + Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003
118832 + Free Software Foundation, Inc.
118833 This file is part of the GNU C Library.
118835 The GNU C Library is free software; you can redistribute it and/or
118836 @@ -20,14 +21,17 @@
118837 #define _MCOUNT_DECL(frompc,selfpc) \
118838 static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
118840 -/* Call __mcount with our the return PC for our caller,
118841 +/* Call __mcount with the return PC for our caller,
118842 and the return PC our caller will return to. */
118844 +#if _MIPS_SIM == _MIPS_SIM_ABI32
118846 #ifdef __PIC__
118847 -#define CPLOAD ".cpload $25;"
118848 -#define CPRESTORE ".cprestore 44\n\t"
118849 +# define CPLOAD ".cpload $25;"
118850 +# define CPRESTORE ".cprestore 44\n\t"
118851 #else
118852 -#define CPLOAD
118853 -#define CPRESTORE
118854 +# define CPLOAD
118855 +# define CPRESTORE
118856 #endif
118858 #define MCOUNT asm(\
118859 @@ -66,3 +70,70 @@
118860 ".set reorder;\n\t" \
118861 ".set at\n\t" \
118862 ".end _mcount");
118864 +#else
118866 +#ifdef __PIC__
118867 +# define CPSETUP ".cpsetup $25, 88, _mcount;"
118868 +# define CPRETURN ".cpreturn;"
118869 +#else
118870 +# define CPSETUP
118871 +# define CPRETURN
118872 +#endif
118874 +#if defined _ABIN32 && _MIPS_SIM == _ABIN32
118875 +# define PTR_ADDU_STRING "add" /* no u */
118876 +# define PTR_SUBU_STRING "sub" /* no u */
118877 +#elif defined _ABI64 && _MIPS_SIM == _ABI64
118878 +# define PTR_ADDU_STRING "daddu"
118879 +# define PTR_SUBU_STRING "dsubu"
118880 +#else
118881 +# error "Unknown ABI"
118882 +#endif
118884 +#define MCOUNT asm(\
118885 + ".globl _mcount;\n\t" \
118886 + ".align 3;\n\t" \
118887 + ".type _mcount,@function;\n\t" \
118888 + ".ent _mcount\n\t" \
118889 + "_mcount:\n\t" \
118890 + ".frame $sp,88,$31\n\t" \
118891 + ".set noreorder;\n\t" \
118892 + ".set noat;\n\t" \
118893 + PTR_SUBU_STRING " $29,$29,96;\n\t" \
118894 + CPSETUP \
118895 + "sd $4,24($29);\n\t" \
118896 + "sd $5,32($29);\n\t" \
118897 + "sd $6,40($29);\n\t" \
118898 + "sd $7,48($29);\n\t" \
118899 + "sd $8,56($29);\n\t" \
118900 + "sd $9,64($29);\n\t" \
118901 + "sd $10,72($29);\n\t" \
118902 + "sd $11,80($29);\n\t" \
118903 + "sd $2,16($29);\n\t" \
118904 + "sd $1,0($29);\n\t" \
118905 + "sd $31,8($29);\n\t" \
118906 + "move $5,$31;\n\t" \
118907 + "move $4,$1;\n\t" \
118908 + "jal __mcount;\n\t" \
118909 + "nop;\n\t" \
118910 + "ld $4,24($29);\n\t" \
118911 + "ld $5,32($29);\n\t" \
118912 + "ld $6,40($29);\n\t" \
118913 + "ld $7,48($29);\n\t" \
118914 + "ld $8,56($29);\n\t" \
118915 + "ld $9,64($29);\n\t" \
118916 + "ld $10,72($29);\n\t" \
118917 + "ld $11,80($29);\n\t" \
118918 + "ld $2,16($29);\n\t" \
118919 + "ld $31,8($29);\n\t" \
118920 + "ld $1,0($29);\n\t" \
118921 + CPRETURN \
118922 + PTR_ADDU_STRING " $29,$29,96;\n\t" \
118923 + "j $31;\n\t" \
118924 + "move $31,$1;\n\t" \
118925 + ".set reorder;\n\t" \
118926 + ".set at\n\t" \
118927 + ".end _mcount");
118929 +#endif
118930 diff -u -udbrN glibc-2.3.2/sysdeps/mips/memcpy.S glibc-2.3.2-200304020432/sysdeps/mips/memcpy.S
118931 --- glibc-2.3.2/sysdeps/mips/memcpy.S Tue Sep 10 13:22:59 2002
118932 +++ glibc-2.3.2-200304020432/sysdeps/mips/memcpy.S Fri Mar 21 22:39:39 2003
118933 @@ -1,4 +1,4 @@
118934 -/* Copyright (C) 2002 Free Software Foundation, Inc.
118935 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
118936 This file is part of the GNU C Library.
118937 Contributed by Hartvig Ekner <hartvige@mips.com>, 2002.
118939 @@ -21,12 +21,7 @@
118940 #include <endian.h>
118943 -/* void *memcpy(void *s1, const void *s2, size_t n);
118945 - This routine could be optimized further for MIPS64, but this is left
118946 - as an exercise for the future. When it is done, the file should be kept
118947 - as a sisterfile to this one, and placed in the sysdeps/mips/mips64
118948 - directory. */
118949 +/* void *memcpy(void *s1, const void *s2, size_t n); */
118951 #if __BYTE_ORDER == __BIG_ENDIAN
118952 # define LWHI lwl /* high part is left in big-endian */
118953 @@ -44,27 +39,29 @@
118954 .set noreorder
118956 slti t0, a2, 8 # Less than 8?
118957 - bne t0, zero, $last8
118958 + bne t0, zero, L(last8)
118959 move v0, a0 # Setup exit value before too late
118961 xor t0, a1, a0 # Find a0/a1 displacement
118962 andi t0, 0x3
118963 - bne t0, zero, $shift # Go handle the unaligned case
118964 + bne t0, zero, L(shift) # Go handle the unaligned case
118965 subu t1, zero, a1
118966 andi t1, 0x3 # a0/a1 are aligned, but are we
118967 - beq t1, zero, $chk8w # starting in the middle of a word?
118968 + beq t1, zero, L(chk8w) # starting in the middle of a word?
118969 subu a2, t1
118970 LWHI t0, 0(a1) # Yes we are... take care of that
118971 addu a1, t1
118972 SWHI t0, 0(a0)
118973 addu a0, t1
118975 -$chk8w: andi t0, a2, 0x1f # 32 or more bytes left?
118976 - beq t0, a2, $chk1w
118977 +L(chk8w):
118978 + andi t0, a2, 0x1f # 32 or more bytes left?
118979 + beq t0, a2, L(chk1w)
118980 subu a3, a2, t0 # Yes
118981 addu a3, a1 # a3 = end address of loop
118982 move a2, t0 # a2 = what will be left after loop
118983 -$lop8w: lw t0, 0(a1) # Loop taking 8 words at a time
118984 +L(lop8w):
118985 + lw t0, 0(a1) # Loop taking 8 words at a time
118986 lw t1, 4(a1)
118987 lw t2, 8(a1)
118988 lw t3, 12(a1)
118989 @@ -81,49 +78,57 @@
118990 sw t4, -16(a0)
118991 sw t5, -12(a0)
118992 sw t6, -8(a0)
118993 - bne a1, a3, $lop8w
118994 + bne a1, a3, L(lop8w)
118995 sw t7, -4(a0)
118997 -$chk1w: andi t0, a2, 0x3 # 4 or more bytes left?
118998 - beq t0, a2, $last8
118999 +L(chk1w):
119000 + andi t0, a2, 0x3 # 4 or more bytes left?
119001 + beq t0, a2, L(last8)
119002 subu a3, a2, t0 # Yes, handle them one word at a time
119003 addu a3, a1 # a3 again end address
119004 move a2, t0
119005 -$lop1w: lw t0, 0(a1)
119006 +L(lop1w):
119007 + lw t0, 0(a1)
119008 addiu a0, 4
119009 addiu a1, 4
119010 - bne a1, a3, $lop1w
119011 + bne a1, a3, L(lop1w)
119012 sw t0, -4(a0)
119014 -$last8: blez a2, $lst8e # Handle last 8 bytes, one at a time
119015 +L(last8):
119016 + blez a2, L(lst8e) # Handle last 8 bytes, one at a time
119017 addu a3, a2, a1
119018 -$lst8l: lb t0, 0(a1)
119019 +L(lst8l):
119020 + lb t0, 0(a1)
119021 addiu a0, 1
119022 addiu a1, 1
119023 - bne a1, a3, $lst8l
119024 + bne a1, a3, L(lst8l)
119025 sb t0, -1(a0)
119026 -$lst8e: jr ra # Bye, bye
119027 +L(lst8e):
119028 + jr ra # Bye, bye
119031 -$shift: subu a3, zero, a0 # Src and Dest unaligned
119032 +L(shift):
119033 + subu a3, zero, a0 # Src and Dest unaligned
119034 andi a3, 0x3 # (unoptimized case...)
119035 - beq a3, zero, $shft1
119036 + beq a3, zero, L(shft1)
119037 subu a2, a3 # a2 = bytes left
119038 LWHI t0, 0(a1) # Take care of first odd part
119039 LWLO t0, 3(a1)
119040 addu a1, a3
119041 SWHI t0, 0(a0)
119042 addu a0, a3
119043 -$shft1: andi t0, a2, 0x3
119044 +L(shft1):
119045 + andi t0, a2, 0x3
119046 subu a3, a2, t0
119047 addu a3, a1
119048 -$shfth: LWHI t1, 0(a1) # Limp through, word by word
119049 +L(shfth):
119050 + LWHI t1, 0(a1) # Limp through, word by word
119051 LWLO t1, 3(a1)
119052 addiu a0, 4
119053 addiu a1, 4
119054 - bne a1, a3, $shfth
119055 + bne a1, a3, L(shfth)
119056 sw t1, -4(a0)
119057 - b $last8 # Handle anything which may be left
119058 + b L(last8) # Handle anything which may be left
119059 move a2, t0
119061 .set reorder
119062 diff -u -udbrN glibc-2.3.2/sysdeps/mips/memset.S glibc-2.3.2-200304020432/sysdeps/mips/memset.S
119063 --- glibc-2.3.2/sysdeps/mips/memset.S Tue Sep 10 13:22:59 2002
119064 +++ glibc-2.3.2-200304020432/sysdeps/mips/memset.S Fri Mar 21 22:39:39 2003
119065 @@ -1,4 +1,4 @@
119066 -/* Copyright (C) 2002 Free Software Foundation, Inc.
119067 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
119068 This file is part of the GNU C Library.
119069 Contributed by Hartvig Ekner <hartvige@mips.com>, 2002.
119071 @@ -21,12 +21,7 @@
119072 #include <endian.h>
119075 -/* void *memset(void *s, int c, size_t n).
119077 - This routine could be optimized further for MIPS64, but this is left
119078 - as an exercise for the future. When it is done, the file should be kept
119079 - as a sisterfile to this one, and placed in the sysdeps/mips/mips64
119080 - directory. */
119081 +/* void *memset(void *s, int c, size_t n). */
119083 #if __BYTE_ORDER == __BIG_ENDIAN
119084 # define SWHI swl /* high part is left in big-endian */
119085 @@ -38,45 +33,52 @@
119086 .set noreorder
119088 slti t1, a2, 8 # Less than 8?
119089 - bne t1, zero, $last8
119090 + bne t1, zero, L(last8)
119091 move v0, a0 # Setup exit value before too late
119093 - beq a1, zero, $ueven # If zero pattern, no need to extend
119094 + beq a1, zero, L(ueven) # If zero pattern, no need to extend
119095 andi a1, 0xff # Avoid problems with bogus arguments
119096 sll t0, a1, 8
119097 or a1, t0
119098 sll t0, a1, 16
119099 or a1, t0 # a1 is now pattern in full word
119101 -$ueven: subu t0, zero, a0 # Unaligned address?
119102 +L(ueven):
119103 + subu t0, zero, a0 # Unaligned address?
119104 andi t0, 0x3
119105 - beq t0, zero, $chkw
119106 + beq t0, zero, L(chkw)
119107 subu a2, t0
119108 SWHI a1, 0(a0) # Yes, handle first unaligned part
119109 addu a0, t0 # Now both a0 and a2 are updated
119111 -$chkw: andi t0, a2, 0x7 # Enough left for one loop iteration?
119112 - beq t0, a2, $chkl
119113 +L(chkw):
119114 + andi t0, a2, 0x7 # Enough left for one loop iteration?
119115 + beq t0, a2, L(chkl)
119116 subu a3, a2, t0
119117 addu a3, a0 # a3 is last loop address +1
119118 move a2, t0 # a2 is now # of bytes left after loop
119119 -$loopw: addiu a0, 8 # Handle 2 words pr. iteration
119120 +L(loopw):
119121 + addiu a0, 8 # Handle 2 words pr. iteration
119122 sw a1, -8(a0)
119123 - bne a0, a3, $loopw
119124 + bne a0, a3, L(loopw)
119125 sw a1, -4(a0)
119127 -$chkl: andi t0, a2, 0x4 # Check if there is at least a full
119128 - beq t0, zero, $last8 # word remaining after the loop
119129 +L(chkl):
119130 + andi t0, a2, 0x4 # Check if there is at least a full
119131 + beq t0, zero, L(last8) # word remaining after the loop
119132 subu a2, t0
119133 sw a1, 0(a0) # Yes...
119134 addiu a0, 4
119136 -$last8: blez a2, $exit # Handle last 8 bytes (if cnt>0)
119137 +L(last8):
119138 + blez a2, L(exit) # Handle last 8 bytes (if cnt>0)
119139 addu a3, a2, a0 # a3 is last address +1
119140 -$lst8l: addiu a0, 1
119141 - bne a0, a3, $lst8l
119142 +L(lst8l):
119143 + addiu a0, 1
119144 + bne a0, a3, L(lst8l)
119145 sb a1, -1(a0)
119146 -$exit: j ra # Bye, bye
119147 +L(exit):
119148 + j ra # Bye, bye
119151 .set reorder
119152 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips32/Implies glibc-2.3.2-200304020432/sysdeps/mips/mips32/Implies
119153 --- glibc-2.3.2/sysdeps/mips/mips32/Implies Thu Jan 1 01:00:00 1970
119154 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips32/Implies Sat Mar 29 09:15:28 2003
119155 @@ -0,0 +1,2 @@
119156 +mips
119157 +wordsize-32
119158 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips32/Makefile glibc-2.3.2-200304020432/sysdeps/mips/mips32/Makefile
119159 --- glibc-2.3.2/sysdeps/mips/mips32/Makefile Thu Jan 1 01:00:00 1970
119160 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips32/Makefile Sat Mar 29 09:15:28 2003
119161 @@ -0,0 +1,3 @@
119162 +ifeq ($(filter -mabi=32,$(CC)),)
119163 +CC += -mabi=32
119164 +endif
119165 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/Implies glibc-2.3.2-200304020432/sysdeps/mips/mips64/Implies
119166 --- glibc-2.3.2/sysdeps/mips/mips64/Implies Wed Jul 14 09:27:44 1999
119167 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/Implies Mon Mar 17 17:20:44 2003
119168 @@ -1,4 +1,3 @@
119169 -wordsize-64
119170 # MIPS uses IEEE 754 floating point.
119171 ieee754/flt-32
119172 ieee754/dbl-64
119173 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/__longjmp.c glibc-2.3.2-200304020432/sysdeps/mips/mips64/__longjmp.c
119174 --- glibc-2.3.2/sysdeps/mips/mips64/__longjmp.c Sat Jul 7 21:21:27 2001
119175 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/__longjmp.c Thu Mar 20 23:29:44 2003
119176 @@ -1,4 +1,4 @@
119177 -/* Copyright (C) 1992, 1995, 1997, 2000 Free Software Foundation, Inc.
119178 +/* Copyright (C) 1992, 1995, 1997, 2000, 2003 Free Software Foundation, Inc.
119179 This file is part of the GNU C Library.
119180 Contributed by Brendan Kehoe (brendan@zen.org).
119182 @@ -38,6 +38,7 @@
119183 register int val asm ("a1");
119185 /* Pull back the floating point callee-saved registers. */
119186 +#if defined _ABI64 && _MIPS_SIM == _ABI64
119187 asm volatile ("l.d $f24, %0" : : "m" (env[0].__fpregs[0]));
119188 asm volatile ("l.d $f25, %0" : : "m" (env[0].__fpregs[1]));
119189 asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[2]));
119190 @@ -46,6 +47,14 @@
119191 asm volatile ("l.d $f29, %0" : : "m" (env[0].__fpregs[5]));
119192 asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[6]));
119193 asm volatile ("l.d $f31, %0" : : "m" (env[0].__fpregs[7]));
119194 +#else
119195 + asm volatile ("l.d $f20, %0" : : "m" (env[0].__fpregs[0]));
119196 + asm volatile ("l.d $f22, %0" : : "m" (env[0].__fpregs[1]));
119197 + asm volatile ("l.d $f24, %0" : : "m" (env[0].__fpregs[2]));
119198 + asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[3]));
119199 + asm volatile ("l.d $f28, %0" : : "m" (env[0].__fpregs[4]));
119200 + asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[5]));
119201 +#endif
119203 /* Get and reconstruct the floating point csr. */
119204 asm volatile ("lw $2, %0" : : "m" (env[0].__fpc_csr));
119205 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/add_n.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/add_n.S
119206 --- glibc-2.3.2/sysdeps/mips/mips64/add_n.S Sat Jul 7 21:21:27 2001
119207 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/add_n.S Fri Mar 14 04:59:37 2003
119208 @@ -1,7 +1,7 @@
119209 /* MIPS3 __mpn_add_n -- Add two limb vectors of the same length > 0 and
119210 * store sum in a third limb vector.
119212 - * Copyright (C) 1995, 2000 Free Software Foundation, Inc.
119213 + * Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
119215 * This file is part of the GNU MP Library.
119217 @@ -22,6 +22,7 @@
119220 #include <sysdep.h>
119221 +#include <sys/asm.h>
119224 * INPUT PARAMETERS
119225 @@ -38,10 +39,10 @@
119226 .globl __mpn_add_n
119227 .ent __mpn_add_n
119228 __mpn_add_n:
119229 - .set noreorder
119230 #ifdef __PIC__
119231 - .cpload t9
119232 + SETUP_GP /* ??? unused */
119233 #endif
119234 + .set noreorder
119235 .set nomacro
119237 ld $10,0($5)
119238 @@ -49,12 +50,12 @@
119240 daddiu $7,$7,-1
119241 and $9,$7,4-1 # number of limbs in first loop
119242 - beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
119243 + beq $9,$0,L(L0) # if multiple of 4 limbs, skip first loop
119244 move $2,$0
119246 dsubu $7,$7,$9
119248 -.Loop0: daddiu $9,$9,-1
119249 +L(Loop0): daddiu $9,$9,-1
119250 ld $12,8($5)
119251 daddu $11,$11,$2
119252 ld $13,8($6)
119253 @@ -68,13 +69,13 @@
119254 daddiu $6,$6,8
119255 move $10,$12
119256 move $11,$13
119257 - bne $9,$0,.Loop0
119258 + bne $9,$0,L(Loop0)
119259 daddiu $4,$4,8
119261 -.L0: beq $7,$0,.Lend
119262 +L(L0): beq $7,$0,L(Lend)
119265 -.Loop: daddiu $7,$7,-4
119266 +L(Loop): daddiu $7,$7,-4
119268 ld $12,8($5)
119269 daddu $11,$11,$2
119270 @@ -115,10 +116,10 @@
119271 daddiu $5,$5,32
119272 daddiu $6,$6,32
119274 - bne $7,$0,.Loop
119275 + bne $7,$0,L(Loop)
119276 daddiu $4,$4,32
119278 -.Lend: daddu $11,$11,$2
119279 +L(Lend): daddu $11,$11,$2
119280 sltu $8,$11,$2
119281 daddu $11,$10,$11
119282 sltu $2,$11,$10
119283 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/addmul_1.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/addmul_1.S
119284 --- glibc-2.3.2/sysdeps/mips/mips64/addmul_1.S Sat Jul 7 21:21:27 2001
119285 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/addmul_1.S Fri Mar 14 04:59:37 2003
119286 @@ -1,7 +1,7 @@
119287 /* MIPS3 __mpn_addmul_1 -- Multiply a limb vector with a single limb and
119288 * add the product to a second limb vector.
119290 - * Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
119291 + * Copyright (C) 1992, 1994, 1995, 2002, 2003 Free Software Foundation, Inc.
119293 * This file is part of the GNU MP Library.
119295 @@ -22,6 +22,7 @@
119298 #include <sysdep.h>
119299 +#include <sys/asm.h>
119301 /* INPUT PARAMETERS
119302 * res_ptr $4
119303 @@ -38,10 +39,10 @@
119304 .globl __mpn_addmul_1
119305 .ent __mpn_addmul_1
119306 __mpn_addmul_1:
119307 - .set noreorder
119308 #ifdef PIC
119309 - .cpload t9
119310 + SETUP_GP /* ??? unused */
119311 #endif
119312 + .set noreorder
119313 .set nomacro
119315 # warm up phase 0
119316 @@ -52,14 +53,14 @@
119317 dmultu $8,$7
119319 daddiu $6,$6,-1
119320 - beq $6,$0,$LC0
119321 + beq $6,$0,L(LC0)
119322 move $2,$0 # zero cy2
119324 daddiu $6,$6,-1
119325 - beq $6,$0,$LC1
119326 + beq $6,$0,L(LC1)
119327 ld $8,0($5) # load new s1 limb as early as possible
119329 -Loop: ld $10,0($4)
119330 +L(Loop): ld $10,0($4)
119331 mflo $3
119332 mfhi $9
119333 daddiu $5,$5,8
119334 @@ -73,11 +74,11 @@
119335 daddu $2,$2,$10
119336 sd $3,0($4)
119337 daddiu $4,$4,8
119338 - bne $6,$0,Loop
119339 + bne $6,$0,L(Loop)
119340 daddu $2,$9,$2 # add high product limb and carry from addition
119342 # cool down phase 1
119343 -$LC1: ld $10,0($4)
119344 +L(LC1): ld $10,0($4)
119345 mflo $3
119346 mfhi $9
119347 daddu $3,$3,$2
119348 @@ -91,7 +92,7 @@
119349 daddu $2,$9,$2 # add high product limb and carry from addition
119351 # cool down phase 0
119352 -$LC0: ld $10,0($4)
119353 +L(LC0): ld $10,0($4)
119354 mflo $3
119355 mfhi $9
119356 daddu $3,$3,$2
119357 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/bits/setjmp.h glibc-2.3.2-200304020432/sysdeps/mips/mips64/bits/setjmp.h
119358 --- glibc-2.3.2/sysdeps/mips/mips64/bits/setjmp.h Sat Jul 7 21:21:27 2001
119359 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/bits/setjmp.h Thu Jan 1 01:00:00 1970
119360 @@ -1,57 +0,0 @@
119361 -/* Define the machine-dependent type `jmp_buf'. MIPS version.
119362 - Copyright (C) 1996, 1997 Free Software Foundation, Inc.
119363 - This file is part of the GNU C Library.
119365 - The GNU C Library is free software; you can redistribute it and/or
119366 - modify it under the terms of the GNU Lesser General Public
119367 - License as published by the Free Software Foundation; either
119368 - version 2.1 of the License, or (at your option) any later version.
119370 - The GNU C Library is distributed in the hope that it will be useful,
119371 - but WITHOUT ANY WARRANTY; without even the implied warranty of
119372 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
119373 - Lesser General Public License for more details.
119375 - You should have received a copy of the GNU Lesser General Public
119376 - License along with the GNU C Library; if not, write to the Free
119377 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
119378 - 02111-1307 USA. */
119380 -#ifndef _SETJMP_H
119381 -# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
119382 -#endif
119384 -typedef struct
119386 - /* Program counter. */
119387 - __ptr_t __pc;
119389 - /* Stack pointer. */
119390 - __ptr_t __sp;
119392 - /* Callee-saved registers s0 through s7. */
119393 - int __regs[8];
119395 - /* The frame pointer. */
119396 - __ptr_t __fp;
119398 - /* The global pointer. */
119399 - __ptr_t __gp;
119401 - /* Floating point status register. */
119402 - int __fpc_csr;
119404 - /* Callee-saved floating point registers. */
119405 - double __fpregs[8];
119406 - } __jmp_buf[1];
119408 -#ifdef __USE_MISC
119409 -/* Offset to the program counter in `jmp_buf'. */
119410 -# define JB_PC 0
119411 -#endif
119414 -/* Test if longjmp to JMPBUF would unwind the frame
119415 - containing a local variable at ADDRESS. */
119416 -#define _JMPBUF_UNWINDS(jmpbuf, address) \
119417 - ((__ptr_t) (address) < (jmpbuf)[0].__sp)
119418 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/bsd-_setjmp.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/bsd-_setjmp.S
119419 --- glibc-2.3.2/sysdeps/mips/mips64/bsd-_setjmp.S Tue Dec 31 20:13:27 2002
119420 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/bsd-_setjmp.S Mon Mar 17 16:47:12 2003
119421 @@ -1,5 +1,5 @@
119422 /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. MIPS64 version.
119423 - Copyright (C) 1996, 1997, 2000, 2002 Free Software Foundation, Inc.
119424 + Copyright (C) 1996, 1997, 2000, 2002, 2003 Free Software Foundation, Inc.
119425 This file is part of the GNU C Library.
119427 The GNU C Library is free software; you can redistribute it and/or
119428 @@ -28,10 +28,19 @@
119429 #endif
119430 ENTRY (_setjmp)
119431 #ifdef __PIC__
119432 - .cpload t9
119433 + SETUP_GP
119434 #endif
119435 - dla t9, C_SYMBOL_NAME (__sigsetjmp)
119436 + SETUP_GP64 (v0, C_SYMBOL_NAME (_setjmp))
119437 + PTR_LA t9, C_SYMBOL_NAME (__sigsetjmp)
119438 +#if _MIPS_SIM == _MIPS_SIM_ABI32
119440 +#endif
119441 + RESTORE_GP64
119442 + move a1, zero /* Pass a second argument of zero. */
119443 +#ifdef __PIC__
119444 jr t9
119445 - dli a1, 0 /* Pass a second argument of zero. */
119446 +#else
119447 + j C_SYMBOL_NAME (__sigsetjmp)
119448 +#endif
119449 + .end _setjmp
119450 libc_hidden_def (_setjmp)
119451 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/bsd-setjmp.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/bsd-setjmp.S
119452 --- glibc-2.3.2/sysdeps/mips/mips64/bsd-setjmp.S Sat Jul 7 21:21:27 2001
119453 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/bsd-setjmp.S Mon Mar 17 16:47:12 2003
119454 @@ -1,5 +1,5 @@
119455 /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. MIPS64 version.
119456 - Copyright (C) 1996, 1997 Free Software Foundation, Inc.
119457 + Copyright (C) 1996, 1997, 2002, 2003 Free Software Foundation, Inc.
119458 This file is part of the GNU C Library.
119460 The GNU C Library is free software; you can redistribute it and/or
119461 @@ -22,15 +22,25 @@
119462 in setjmp doesn't clobber the state restored by longjmp. */
119464 #include <sysdep.h>
119465 +#include <sys/asm.h>
119467 #ifdef PIC
119468 .option pic2
119469 #endif
119470 ENTRY (setjmp)
119471 -#ifdef PIC
119472 - .cpload t9
119473 +#ifdef __PIC__
119474 + SETUP_GP
119475 #endif
119476 - dla t9, C_SYMBOL_NAME (__sigsetjmp)
119477 + SETUP_GP64 (v0, C_SYMBOL_NAME (setjmp))
119478 + PTR_LA t9, C_SYMBOL_NAME (__sigsetjmp)
119479 +#if _MIPS_SIM == _MIPS_SIM_ABI32
119481 - jr t9
119482 +#endif
119483 + RESTORE_GP64
119484 dli a1, 1 /* Pass a second argument of one. */
119485 +#ifdef __PIC__
119486 + jr t9
119487 +#else
119488 + j C_SYMBOL_NAME (__sigsetjmp)
119489 +#endif
119490 + .end setjmp
119491 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/dl-machine.h glibc-2.3.2-200304020432/sysdeps/mips/mips64/dl-machine.h
119492 --- glibc-2.3.2/sysdeps/mips/mips64/dl-machine.h Thu Feb 28 22:35:57 2002
119493 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/dl-machine.h Thu Jan 1 01:00:00 1970
119494 @@ -1,594 +0,0 @@
119495 -/* Machine-dependent ELF dynamic relocation inline functions. MIPS64 version.
119496 - Copyright (C) 1996,1997,1999,2000,2001,2002 Free Software Foundation, Inc.
119497 - This file is part of the GNU C Library.
119498 - Contributed by Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>.
119500 - The GNU C Library is free software; you can redistribute it and/or
119501 - modify it under the terms of the GNU Lesser General Public
119502 - License as published by the Free Software Foundation; either
119503 - version 2.1 of the License, or (at your option) any later version.
119505 - The GNU C Library is distributed in the hope that it will be useful,
119506 - but WITHOUT ANY WARRANTY; without even the implied warranty of
119507 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
119508 - Lesser General Public License for more details.
119510 - You should have received a copy of the GNU Lesser General Public
119511 - License along with the GNU C Library; if not, write to the Free
119512 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
119513 - 02111-1307 USA. */
119515 -#ifndef dl_machine_h
119516 -#define dl_machine_h
119518 -#define ELF_MACHINE_NAME "MIPS"
119520 -#define ELF_MACHINE_NO_PLT
119522 -#include <entry.h>
119524 -#ifndef ENTRY_POINT
119525 -#error ENTRY_POINT needs to be defined for MIPS.
119526 -#endif
119528 -#ifndef _RTLD_PROLOGUE
119529 -# define _RTLD_PROLOGUE(entry) "\n\t.globl " __STRING(entry) \
119530 - "\n\t.ent " __STRING(entry) \
119531 - "\n\t" __STRING(entry) ":\n\t"
119532 -#endif
119534 -#ifndef _RTLD_EPILOGUE
119535 -# define _RTLD_EPILOGUE(entry) "\t.end " __STRING(entry) "\n"
119536 -#endif
119538 -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.
119539 - This makes no sense on MIPS but we have to define this to R_MIPS_REL32
119540 - to avoid the asserts in dl-lookup.c from blowing. */
119541 -#define ELF_MACHINE_JMP_SLOT R_MIPS_REL32
119542 -#define elf_machine_type_class(type) ELF_RTYPE_CLASS_PLT
119544 -/* Translate a processor specific dynamic tag to the index
119545 - in l_info array. */
119546 -#define DT_MIPS(x) (DT_MIPS_##x - DT_LOPROC + DT_NUM)
119548 -#if 0
119549 -/* We may need 64k alignment. */
119550 -#define ELF_MACHINE_ALIGN_MASK 0xffff
119551 -#endif
119554 - * MIPS libraries are usually linked to a non-zero base address. We
119555 - * subtrace the base address from the address where we map the object
119556 - * to. This results in more efficient address space usage.
119558 -#if 0
119559 -#define MAP_BASE_ADDR(l) ((l)->l_info[DT_MIPS(BASE_ADDRESS)] ? \
119560 - (l)->l_info[DT_MIPS(BASE_ADDRESS)]->d_un.d_ptr : 0)
119561 -#else
119562 -#define MAP_BASE_ADDR(l) 0x5ffe0000
119563 -#endif
119565 -/* If there is a DT_MIPS_RLD_MAP entry in the dynamic section, fill it in
119566 - with the run-time address of the r_debug structure */
119567 -#define ELF_MACHINE_DEBUG_SETUP(l,r) \
119568 -do { if ((l)->l_info[DT_MIPS (RLD_MAP)]) \
119569 - *(ElfW(Addr) *)((l)->l_info[DT_MIPS (RLD_MAP)]->d_un.d_ptr) = \
119570 - (ElfW(Addr)) (r); \
119571 - } while (0)
119573 -/* Return nonzero iff ELF header is compatible with the running host. */
119574 -static inline int __attribute__ ((unused))
119575 -elf_machine_matches_host (const ElfW(Ehdr) *ehdr)
119577 - switch (ehdr->e_machine)
119579 - case EM_MIPS:
119580 - case EM_MIPS_RS3_LE:
119581 - return 1;
119582 - default:
119583 - return 0;
119587 -static inline ElfW(Addr) *
119588 -elf_mips_got_from_gpreg (ElfW(Addr) gpreg)
119590 - /* FIXME: the offset of gp from GOT may be system-dependent. */
119591 - return (ElfW(Addr) *) (gpreg - 0x7ff0);
119594 -/* Return the link-time address of _DYNAMIC. Conveniently, this is the
119595 - first element of the GOT. This must be inlined in a function which
119596 - uses global data. */
119597 -static inline ElfW(Addr)
119598 -elf_machine_dynamic (void)
119600 - register ElfW(Addr) gp __asm__ ("$28");
119602 - return *elf_mips_got_from_gpreg (gp);
119606 -/* Return the run-time load address of the shared object. */
119607 -static inline ElfW(Addr)
119608 -elf_machine_load_address (void)
119610 - ElfW(Addr) addr;
119611 - asm (" .set noreorder\n"
119612 - " dla %0, here\n"
119613 - " bltzal $0, here\n"
119614 - " nop\n"
119615 - "here: dsubu %0, $31, %0\n"
119616 - " .set reorder\n"
119617 - : "=r" (addr)
119618 - : /* No inputs */
119619 - : "$31");
119620 - return addr;
119623 -/* The MSB of got[1] of a gnu object is set to identify gnu objects. */
119624 -#define ELF_MIPS_GNU_GOT1_MASK 0x80000000
119626 -/* Relocate GOT. */
119627 -static inline void
119628 -elf_machine_got_rel (struct link_map *map, int lazy)
119630 - ElfW(Addr) *got;
119631 - ElfW(Sym) *sym;
119632 - int i, n;
119633 - const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
119635 -#define RESOLVE_GOTSYM(sym) \
119636 - ({ \
119637 - const ElfW(Sym) *ref = sym; \
119638 - ElfW(Addr) sym_loadaddr; \
119639 - sym_loadaddr = _dl_lookup_symbol (strtab + sym->st_name, &ref, \
119640 - map->l_scope, \
119641 - map->l_name, R_MIPS_REL32);\
119642 - (ref)? sym_loadaddr + ref->st_value: 0; \
119645 - got = (ElfW(Addr) *) D_PTR (map, l_info[DT_PLTGOT]);
119647 - /* got[0] is reserved. got[1] is also reserved for the dynamic object
119648 - generated by gnu ld. Skip these reserved entries from relocation. */
119649 - i = (got[1] & ELF_MIPS_GNU_GOT1_MASK)? 2: 1;
119650 - n = map->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val;
119651 - /* Add the run-time display to all local got entries. */
119652 - while (i < n)
119653 - got[i++] += map->l_addr;
119655 - /* Handle global got entries. */
119656 - got += n;
119657 - sym = (ElfW(Sym) *) D_PTR (map, l_info[DT_SYMTAB]);
119658 - sym += map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val;
119659 - i = (map->l_info[DT_MIPS (SYMTABNO)]->d_un.d_val
119660 - - map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val);
119662 - while (i--)
119664 - if (sym->st_shndx == SHN_UNDEF)
119666 - if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC)
119668 - if (sym->st_value && lazy)
119669 - *got = sym->st_value + map->l_addr;
119670 - else
119671 - *got = RESOLVE_GOTSYM (sym);
119673 - else /* if (*got == 0 || *got == QS) */
119674 - *got = RESOLVE_GOTSYM (sym);
119676 - else if (sym->st_shndx == SHN_COMMON)
119677 - *got = RESOLVE_GOTSYM (sym);
119678 - else if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC
119679 - && *got != sym->st_value
119680 - && lazy)
119681 - *got += map->l_addr;
119682 - else if (ELFW(ST_TYPE) (sym->st_info) == STT_SECTION)
119684 - if (sym->st_other == 0)
119685 - *got += map->l_addr;
119687 - else
119688 - *got = RESOLVE_GOTSYM (sym);
119690 - got++;
119691 - sym++;
119694 -#undef RESOLVE_GOTSYM
119696 - return;
119699 -/* Set up the loaded object described by L so its stub function
119700 - will jump to the on-demand fixup code in dl-runtime.c. */
119702 -static inline int
119703 -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
119705 - ElfW(Addr) *got;
119706 - extern void _dl_runtime_resolve (ElfW(Word));
119707 - extern int _dl_mips_gnu_objects;
119709 -#ifdef RTLD_BOOTSTRAP
119711 - return lazy;
119713 -#endif
119714 - if (lazy)
119716 - /* The GOT entries for functions have not yet been filled in.
119717 - Their initial contents will arrange when called to put an
119718 - offset into the .dynsym section in t8, the return address
119719 - in t7 and then jump to _GLOBAL_OFFSET_TABLE[0]. */
119720 - got = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]);
119722 - /* This function will get called to fix up the GOT entry indicated by
119723 - the register t8, and then jump to the resolved address. */
119724 - got[0] = (ElfW(Addr)) &_dl_runtime_resolve;
119726 - /* Store l to _GLOBAL_OFFSET_TABLE[1] for gnu object. The MSB
119727 - of got[1] of a gnu object is set to identify gnu objects.
119728 - Where we can store l for non gnu objects? XXX */
119729 - if ((got[1] & ELF_MIPS_GNU_GOT1_MASK) != 0)
119730 - got[1] = (ElfW(Addr)) ((unsigned) l | ELF_MIPS_GNU_GOT1_MASK);
119731 - else
119732 - _dl_mips_gnu_objects = 0;
119735 - /* Relocate global offset table. */
119736 - elf_machine_got_rel (l, lazy);
119738 - return lazy;
119741 -/* Get link_map for this object. */
119742 -static inline struct link_map *
119743 -elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc)
119745 - extern int _dl_mips_gnu_objects;
119747 - /* got[1] is reserved to keep its link map address for the shared
119748 - object generated by the gnu linker. If all are such objects, we
119749 - can find the link map from current GPREG simply. If not so, get
119750 - the link map for caller's object containing STUB_PC. */
119752 - if (_dl_mips_gnu_objects)
119754 - ElfW(Addr) *got = elf_mips_got_from_gpreg (gpreg);
119755 - ElfW(Word) g1;
119757 - g1 = ((ElfW(Word) *) got)[1];
119759 - if ((g1 & ELF_MIPS_GNU_GOT1_MASK) != 0)
119761 - struct link_map *l =
119762 - (struct link_map *) (g1 & ~ELF_MIPS_GNU_GOT1_MASK);
119763 - ElfW(Addr) base, limit;
119764 - const ElfW(Phdr) *p = l->l_phdr;
119765 - ElfW(Half) this, nent = l->l_phnum;
119767 - /* For the common case of a stub being called from the containing
119768 - object, STUB_PC will point to somewhere within the object that
119769 - is described by the link map fetched via got[1]. Otherwise we
119770 - have to scan all maps. */
119771 - for (this = 0; this < nent; this++)
119773 - if (p[this].p_type == PT_LOAD)
119775 - base = p[this].p_vaddr + l->l_addr;
119776 - limit = base + p[this].p_memsz;
119777 - if (stub_pc >= base && stub_pc < limit)
119778 - return l;
119780 - this++;
119786 - struct link_map *l = GL(dl_loaded);
119788 - while (l)
119790 - ElfW(Addr) base, limit;
119791 - const ElfW(Phdr) *p = l->l_phdr;
119792 - ElfW(Half) this, nent = l->l_phnum;
119794 - for (this = 0; this < nent; this++)
119796 - if (p[this].p_type == PT_LOAD)
119798 - base = p[this].p_vaddr + l->l_addr;
119799 - limit = base + p[this].p_memsz;
119800 - if (stub_pc >= base && stub_pc < limit)
119801 - return l;
119804 - l = l->l_next;
119808 - _dl_signal_error (0, NULL, NULL, "cannot find runtime link map");
119809 - return NULL;
119812 -/* Mips has no PLT but define elf_machine_relplt to be elf_machine_rel. */
119813 -#define elf_machine_relplt elf_machine_rel
119815 -/* Define mips specific runtime resolver. The function __dl_runtime_resolve
119816 - is called from assembler function _dl_runtime_resolve which converts
119817 - special argument registers t7 ($15) and t8 ($24):
119818 - t7 address to return to the caller of the function
119819 - t8 index for this function symbol in .dynsym
119820 - to usual c arguments. */
119822 -#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
119823 -/* The flag _dl_mips_gnu_objects is set if all dynamic objects are \
119824 - generated by the gnu linker. */ \
119825 -int _dl_mips_gnu_objects = 1; \
119827 -/* This is called from assembly stubs below which the compiler can't see. */ \
119828 -static ElfW(Addr) \
119829 -__dl_runtime_resolve (ElfW(Word), ElfW(Word), ElfW(Addr), ElfW(Addr)) \
119830 - __attribute__ ((unused)); \
119832 -static ElfW(Addr) \
119833 -__dl_runtime_resolve (ElfW(Word) sym_index, \
119834 - ElfW(Word) return_address, \
119835 - ElfW(Addr) old_gpreg, \
119836 - ElfW(Addr) stub_pc) \
119838 - struct link_map *l = elf_machine_runtime_link_map (old_gpreg, stub_pc); \
119839 - const ElfW(Sym) *const symtab \
119840 - = (const ElfW(Sym) *) D_PTR (l, l_info[DT_SYMTAB]); \
119841 - const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); \
119842 - const ElfW(Addr) *got \
119843 - = (const ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); \
119844 - const ElfW(Word) local_gotno \
119845 - = (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; \
119846 - const ElfW(Word) gotsym \
119847 - = (const ElfW(Word)) l->l_info[DT_MIPS (GOTSYM)]->d_un.d_val; \
119848 - const ElfW(Sym) *definer; \
119849 - ElfW(Addr) loadbase; \
119850 - ElfW(Addr) funcaddr; \
119852 - /* Look up the symbol's run-time value. */ \
119853 - definer = &symtab[sym_index]; \
119855 - loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer, \
119856 - l->l_scope, l->l_name, \
119857 - R_MIPS_REL32); \
119859 - /* Apply the relocation with that value. */ \
119860 - funcaddr = loadbase + definer->st_value; \
119861 - *(got + local_gotno + sym_index - gotsym) = funcaddr; \
119863 - return funcaddr; \
119866 -asm ("\n \
119867 - .text\n \
119868 - .align 3\n \
119869 - .globl _dl_runtime_resolve\n \
119870 - .type _dl_runtime_resolve,@function\n \
119871 - .ent _dl_runtime_resolve\n \
119872 -_dl_runtime_resolve:\n \
119873 - .set noreorder\n \
119874 - # Save old GP to $3.\n \
119875 - move $3,$28\n \
119876 - # Modify t9 ($25) so as to point .cpload instruction.\n \
119877 - daddu $25,2*8\n \
119878 - # Compute GP.\n \
119879 - .cpload $25\n \
119880 - .set reorder\n \
119881 - # Save slot call pc.\n \
119882 - move $2, $31\n \
119883 - # Save arguments and sp value in stack.\n \
119884 - dsubu $29, 10*8\n \
119885 - .cprestore 8*8\n \
119886 - sd $15, 9*8($29)\n \
119887 - sd $4, 3*8($29)\n \
119888 - sd $5, 4*8($29)\n \
119889 - sd $6, 5*8($29)\n \
119890 - sd $7, 6*8($29)\n \
119891 - sd $16, 7*8($29)\n \
119892 - move $16, $29\n \
119893 - move $4, $24\n \
119894 - move $5, $15\n \
119895 - move $6, $3\n \
119896 - move $7, $2\n \
119897 - jal __dl_runtime_resolve\n \
119898 - move $29, $16\n \
119899 - ld $31, 9*8($29)\n \
119900 - ld $4, 3*8($29)\n \
119901 - ld $5, 4*8($29)\n \
119902 - ld $6, 5*8($29)\n \
119903 - ld $7, 6*8($29)\n \
119904 - ld $16, 7*8($29)\n \
119905 - daddu $29, 10*8\n \
119906 - move $25, $2\n \
119907 - jr $25\n \
119908 - .end _dl_runtime_resolve\n \
119909 - .previous\n \
119912 -/* Mask identifying addresses reserved for the user program,
119913 - where the dynamic linker should not map anything. */
119914 -#define ELF_MACHINE_USER_ADDRESS_MASK 0x80000000UL
119918 -/* Initial entry point code for the dynamic linker.
119919 - The C function `_dl_start' is the real entry point;
119920 - its return value is the user program's entry point.
119921 - Note how we have to be careful about two things:
119923 - 1) That we allocate a minimal stack of 24 bytes for
119924 - every function call, the MIPS ABI states that even
119925 - if all arguments are passed in registers the procedure
119926 - called can use the 16 byte area pointed to by $sp
119927 - when it is called to store away the arguments passed
119928 - to it.
119930 - 2) That under Linux the entry is named __start
119931 - and not just plain _start. */
119933 -#define RTLD_START asm ("\
119934 - .text\n\
119935 - .align 3\n"\
119936 -_RTLD_PROLOGUE (ENTRY_POINT)\
119937 -" .globl _dl_start_user\n\
119938 - .set noreorder\n\
119939 - bltzal $0, 0f\n\
119940 - nop\n\
119941 -0: .cpload $31\n\
119942 - .set reorder\n\
119943 - # i386 ABI book says that the first entry of GOT holds\n\
119944 - # the address of the dynamic structure. Though MIPS ABI\n\
119945 - # doesn't say nothing about this, I emulate this here.\n\
119946 - dla $4, _DYNAMIC\n\
119947 - sd $4, -0x7ff0($28)\n\
119948 - dsubu $29, 16\n\
119949 - move $4, $29\n\
119950 - jal _dl_start\n\
119951 - daddiu $29, 16\n\
119952 - # Get the value of label '_dl_start_user' in t9 ($25).\n\
119953 - dla $25, _dl_start_user\n\
119954 -_dl_start_user:\n\
119955 - .set noreorder\n\
119956 - .cpload $25\n\
119957 - .set reorder\n\
119958 - move $16, $28\n\
119959 - # Save the user entry point address in saved register.\n\
119960 - move $17, $2\n\
119961 - # Store the highest stack address\n\
119962 - sd $29, __libc_stack_end\n\
119963 - # See if we were run as a command with the executable file\n\
119964 - # name as an extra leading argument.\n\
119965 - ld $2, _dl_skip_args\n\
119966 - beq $2, $0, 1f\n\
119967 - # Load the original argument count.\n\
119968 - ld $4, 0($29)\n\
119969 - # Subtract _dl_skip_args from it.\n\
119970 - dsubu $4, $2\n\
119971 - # Adjust the stack pointer to skip _dl_skip_args words.\n\
119972 - dsll $2,2\n\
119973 - daddu $29, $2\n\
119974 - # Save back the modified argument count.\n\
119975 - sd $4, 0($29)\n\
119976 -1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\
119977 - ld $4, _rtld_local\n\
119978 - ld $5, 0($29)\n\
119979 - dla $6, 4($29)\n\
119980 - dla $7, 8($29)\n\
119981 - dsubu $29, 16\n\
119982 - # Call the function to run the initializers.\n\
119983 - jal _dl_init_internal\n\
119984 - daddiu $29, 16\n\
119985 - # Pass our finalizer function to the user in ra.\n\
119986 - dla $31, _dl_fini\n\
119987 - # Jump to the user entry point.\n\
119988 -1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\
119989 - lw $4, _rtld_local\n\
119990 - lw $5, 0($29)\n\
119991 - la $6, 4($29)\n\
119992 - la $7, 8($29)\n\
119993 - subu $29, 16\n\
119994 - # Call the function to run the initializers.\n\
119995 - jal _dl_init_internal\n\
119996 - addiu $29, 16\n\
119997 - # Pass our finalizer function to the user in ra.\n\
119998 - dla $31, _dl_fini\n\
119999 - # Jump to the user entry point.\n\
120000 - move $25, $17\n\
120001 - ld $4, 0($29)\n\
120002 - ld $5, 1*8($29)\n\
120003 - ld $6, 2*8$29)\n\
120004 - ld $7, 3*8($29)\n\
120005 - jr $25\n"\
120006 -_RTLD_EPILOGUE(ENTRY_POINT) \
120007 - "\n.previous"\
120011 -/* The MIPS never uses Elfxx_Rela relocations. */
120012 -#define ELF_MACHINE_NO_RELA 1
120014 -#endif /* !dl_machine_h */
120016 -#ifdef RESOLVE
120018 -/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
120019 - MAP is the object containing the reloc. */
120021 -static inline void
120022 -elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
120023 - const ElfW(Sym) *sym, const struct r_found_version *version,
120024 - ElfW(Addr) *const reloc_addr)
120026 - const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info);
120027 - ElfW(Addr) loadbase;
120028 - ElfW(Addr) undo __attribute__ ((unused));
120030 - switch (r_type)
120032 - case R_MIPS_REL32:
120034 - ElfW(Addr) undo = 0;
120036 - if (ELFW(ST_BIND) (sym->st_info) == STB_LOCAL
120037 - && (ELFW(ST_TYPE) (sym->st_info) == STT_SECTION
120038 - || ELFW(ST_TYPE) (sym->st_info) == STT_NOTYPE))
120040 - *reloc_addr += map->l_addr;
120041 - break;
120043 -#ifndef RTLD_BOOTSTRAP
120044 - /* This is defined in rtld.c, but nowhere in the static libc.a;
120045 - make the reference weak so static programs can still link. This
120046 - declaration cannot be done when compiling rtld.c (i.e. #ifdef
120047 - RTLD_BOOTSTRAP) because rtld.c contains the common defn for
120048 - _dl_rtld_map, which is incompatible with a weak decl in the same
120049 - file. */
120050 -# ifndef SHARED
120051 - weak_extern (GL(dl_rtld_map));
120052 -# endif
120053 - if (map == &GL(dl_rtld_map))
120054 - /* Undo the relocation done here during bootstrapping. Now we will
120055 - relocate it anew, possibly using a binding found in the user
120056 - program or a loaded library rather than the dynamic linker's
120057 - built-in definitions used while loading those libraries. */
120058 - undo = map->l_addr + sym->st_value;
120059 -#endif
120060 - loadbase = RESOLVE (&sym, version, 0);
120061 - *reloc_addr += (sym ? (loadbase + sym->st_value) : 0) - undo;
120063 - break;
120064 -#ifndef RTLD_BOOTSTRAP
120065 - case R_MIPS_NONE: /* Alright, Wilbur. */
120066 - break;
120067 -#endif
120068 - default:
120069 - _dl_reloc_bad_type (map, r_type, 0);
120070 - break;
120074 -static inline void
120075 -elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc,
120076 - ElfW(Addr) *const reloc_addr)
120078 - /* XXX Nothing to do. There is no relative relocation, right? */
120081 -static inline void
120082 -elf_machine_lazy_rel (struct link_map *map, ElfW(Addr) l_addr,
120083 - const ElfW(Rel) *reloc)
120085 - /* Do nothing. */
120088 -#endif /* RESOLVE */
120089 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/gmp-mparam.h glibc-2.3.2-200304020432/sysdeps/mips/mips64/gmp-mparam.h
120090 --- glibc-2.3.2/sysdeps/mips/mips64/gmp-mparam.h Thu Jan 1 01:00:00 1970
120091 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/gmp-mparam.h Mon Mar 17 16:47:12 2003
120092 @@ -0,0 +1,31 @@
120093 +/* gmp-mparam.h -- Compiler/machine parameter header file.
120095 +Copyright (C) 1991, 1993, 1994, 2002, 2003 Free Software Foundation, Inc.
120097 +This file is part of the GNU MP Library.
120099 +The GNU MP Library is free software; you can redistribute it and/or modify
120100 +it under the terms of the GNU Lesser General Public License as published by
120101 +the Free Software Foundation; either version 2.1 of the License, or (at your
120102 +option) any later version.
120104 +The GNU MP Library is distributed in the hope that it will be useful, but
120105 +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
120106 +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
120107 +License for more details.
120109 +You should have received a copy of the GNU Lesser General Public License
120110 +along with the GNU MP Library; see the file COPYING.LIB. If not, write to
120111 +the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
120113 +#if defined __GMP_H__ && ! defined _LONG_LONG_LIMB
120114 +#error "Included too late for _LONG_LONG_LIMB to take effect"
120115 +#endif
120117 +#define _LONG_LONG_LIMB
120118 +#define BITS_PER_MP_LIMB 64
120119 +#define BYTES_PER_MP_LIMB 8
120120 +#define BITS_PER_LONGINT __WORDSIZE
120121 +#define BITS_PER_INT 32
120122 +#define BITS_PER_SHORTINT 16
120123 +#define BITS_PER_CHAR 8
120124 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/lshift.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/lshift.S
120125 --- glibc-2.3.2/sysdeps/mips/mips64/lshift.S Sat Jul 7 21:21:27 2001
120126 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/lshift.S Fri Mar 14 04:59:37 2003
120127 @@ -1,6 +1,6 @@
120128 /* MIPS3 __mpn_lshift --
120130 - * Copyright (C) 1995, 2000 Free Software Foundation, Inc.
120131 + * Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
120133 * This file is part of the GNU MP Library.
120135 @@ -21,6 +21,7 @@
120138 #include <sysdep.h>
120139 +#include <sys/asm.h>
120141 /* INPUT PARAMETERS
120142 * res_ptr $4
120143 @@ -37,10 +38,10 @@
120144 .globl __mpn_lshift
120145 .ent __mpn_lshift
120146 __mpn_lshift:
120147 - .set noreorder
120148 #ifdef __PIC__
120149 - .cpload t9
120150 + SETUP_GP /* ??? unused */
120151 #endif
120152 + .set noreorder
120153 .set nomacro
120155 dsll $2,$6,3
120156 @@ -50,12 +51,12 @@
120157 daddu $4,$4,$2 # make r4 point at end of res
120158 daddiu $6,$6,-1
120159 and $9,$6,4-1 # number of limbs in first loop
120160 - beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
120161 + beq $9,$0,L(L0) # if multiple of 4 limbs, skip first loop
120162 dsrl $2,$10,$13 # compute function result
120164 dsubu $6,$6,$9
120166 -.Loop0: ld $3,-16($5)
120167 +L(Loop0): ld $3,-16($5)
120168 daddiu $4,$4,-8
120169 daddiu $5,$5,-8
120170 daddiu $9,$9,-1
120171 @@ -63,13 +64,13 @@
120172 dsrl $12,$3,$13
120173 move $10,$3
120174 or $8,$11,$12
120175 - bne $9,$0,.Loop0
120176 + bne $9,$0,L(Loop0)
120177 sd $8,0($4)
120179 -.L0: beq $6,$0,.Lend
120180 +L(L0): beq $6,$0,L(Lend)
120183 -.Loop: ld $3,-16($5)
120184 +L(Loop): ld $3,-16($5)
120185 daddiu $4,$4,-32
120186 daddiu $6,$6,-4
120187 dsll $11,$10,$7
120188 @@ -95,10 +96,10 @@
120190 daddiu $5,$5,-32
120191 or $8,$14,$9
120192 - bgtz $6,.Loop
120193 + bgtz $6,L(Loop)
120194 sd $8,0($4)
120196 -.Lend: dsll $8,$10,$7
120197 +L(Lend): dsll $8,$10,$7
120198 j $31
120199 sd $8,-8($4)
120200 .end __mpn_lshift
120201 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/memcpy.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/memcpy.S
120202 --- glibc-2.3.2/sysdeps/mips/mips64/memcpy.S Thu Jan 1 01:00:00 1970
120203 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/memcpy.S Fri Mar 21 22:39:39 2003
120204 @@ -0,0 +1,139 @@
120205 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
120206 + This file is part of the GNU C Library.
120207 + Contributed by Hartvig Ekner <hartvige@mips.com>, 2002.
120208 + Ported to mips3 n32/n64 by Alexandre Oliva <aoliva@redhat.com>
120210 + The GNU C Library is free software; you can redistribute it and/or
120211 + modify it under the terms of the GNU Lesser General Public
120212 + License as published by the Free Software Foundation; either
120213 + version 2.1 of the License, or (at your option) any later version.
120215 + The GNU C Library is distributed in the hope that it will be useful,
120216 + but WITHOUT ANY WARRANTY; without even the implied warranty of
120217 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
120218 + Lesser General Public License for more details.
120220 + You should have received a copy of the GNU Lesser General Public
120221 + License along with the GNU C Library; if not, write to the Free
120222 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
120223 + 02111-1307 USA. */
120225 +#include <sysdep.h>
120226 +#include <endian.h>
120227 +#include <sys/asm.h>
120230 +/* void *memcpy(void *s1, const void *s2, size_t n);
120232 + This could probably be optimized further. */
120234 +#if __BYTE_ORDER == __BIG_ENDIAN
120235 +# define LDHI ldl /* high part is left in big-endian */
120236 +# define SDHI sdl /* high part is left in big-endian */
120237 +# define LDLO ldr /* low part is right in big-endian */
120238 +# define SDLO sdr /* low part is right in big-endian */
120239 +#else
120240 +# define LDHI ldr /* high part is right in little-endian */
120241 +# define SDHI sdr /* high part is right in little-endian */
120242 +# define LDLO ldl /* low part is left in little-endian */
120243 +# define SDLO sdl /* low part is left in little-endian */
120244 +#endif
120246 +ENTRY (memcpy)
120247 + .set noreorder
120249 + slti a4, a2, 16 # Less than 16?
120250 + bne a4, zero, L(last16)
120251 + move v0, a0 # Setup exit value before too late
120253 + xor a4, a1, a0 # Find a0/a1 displacement
120254 + andi a4, 0x7
120255 + bne a4, zero, L(shift) # Go handle the unaligned case
120256 + PTR_SUBU a5, zero, a1
120257 + andi a5, 0x7 # a0/a1 are aligned, but are we
120258 + beq a5, zero, L(chk8w) # starting in the middle of a word?
120259 + PTR_SUBU a2, a5
120260 + LDHI a4, 0(a1) # Yes we are... take care of that
120261 + PTR_ADDU a1, a5
120262 + SDHI a4, 0(a0)
120263 + PTR_ADDU a0, a5
120265 +L(chk8w):
120266 + andi a4, a2, 0x3f # 64 or more bytes left?
120267 + beq a4, a2, L(chk1w)
120268 + PTR_SUBU a3, a2, a4 # Yes
120269 + PTR_ADDU a3, a1 # a3 = end address of loop
120270 + move a2, a4 # a2 = what will be left after loop
120271 +L(lop8w):
120272 + ld a4, 0(a1) # Loop taking 8 words at a time
120273 + ld a5, 8(a1)
120274 + ld a6, 16(a1)
120275 + ld a7, 24(a1)
120276 + ld t4, 32(a1)
120277 + ld t5, 40(a1)
120278 + ld t6, 48(a1)
120279 + ld t7, 56(a1)
120280 + PTR_ADDIU a0, 64
120281 + PTR_ADDIU a1, 64
120282 + sd a4, -64(a0)
120283 + sd a5, -56(a0)
120284 + sd a6, -48(a0)
120285 + sd a7, -40(a0)
120286 + sd t4, -32(a0)
120287 + sd t5, -24(a0)
120288 + sd t6, -16(a0)
120289 + bne a1, a3, L(lop8w)
120290 + sd t7, -8(a0)
120292 +L(chk1w):
120293 + andi a4, a2, 0x7 # 8 or more bytes left?
120294 + beq a4, a2, L(last16)
120295 + PTR_SUBU a3, a2, a4 # Yes, handle them one dword at a time
120296 + PTR_ADDU a3, a1 # a3 again end address
120297 + move a2, a4
120298 +L(lop1w):
120299 + ld a4, 0(a1)
120300 + PTR_ADDIU a0, 8
120301 + PTR_ADDIU a1, 8
120302 + bne a1, a3, L(lop1w)
120303 + sd a4, -8(a0)
120305 +L(last16):
120306 + blez a2, L(lst16e) # Handle last 16 bytes, one at a time
120307 + PTR_ADDU a3, a2, a1
120308 +L(lst16l):
120309 + lb a4, 0(a1)
120310 + PTR_ADDIU a0, 1
120311 + PTR_ADDIU a1, 1
120312 + bne a1, a3, L(lst16l)
120313 + sb a4, -1(a0)
120314 +L(lst16e):
120315 + jr ra # Bye, bye
120316 + nop
120318 +L(shift):
120319 + PTR_SUBU a3, zero, a0 # Src and Dest unaligned
120320 + andi a3, 0x7 # (unoptimized case...)
120321 + beq a3, zero, L(shft1)
120322 + PTR_SUBU a2, a3 # a2 = bytes left
120323 + LDHI a4, 0(a1) # Take care of first odd part
120324 + LDLO a4, 7(a1)
120325 + PTR_ADDU a1, a3
120326 + SDHI a4, 0(a0)
120327 + PTR_ADDU a0, a3
120328 +L(shft1):
120329 + andi a4, a2, 0x7
120330 + PTR_SUBU a3, a2, a4
120331 + PTR_ADDU a3, a1
120332 +L(shfth):
120333 + LDHI a5, 0(a1) # Limp through, dword by dword
120334 + LDLO a5, 7(a1)
120335 + PTR_ADDIU a0, 8
120336 + PTR_ADDIU a1, 8
120337 + bne a1, a3, L(shfth)
120338 + sd a5, -8(a0)
120339 + b L(last16) # Handle anything which may be left
120340 + move a2, a4
120342 + .set reorder
120343 +END (memcpy)
120344 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/memset.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/memset.S
120345 --- glibc-2.3.2/sysdeps/mips/mips64/memset.S Thu Jan 1 01:00:00 1970
120346 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/memset.S Fri Mar 21 22:39:39 2003
120347 @@ -0,0 +1,91 @@
120348 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
120349 + This file is part of the GNU C Library.
120350 + Contributed by Hartvig Ekner <hartvige@mips.com>, 2002.
120351 + Ported to mips3 n32/n64 by Alexandre Oliva <aoliva@redhat.com>
120353 + The GNU C Library is free software; you can redistribute it and/or
120354 + modify it under the terms of the GNU Lesser General Public
120355 + License as published by the Free Software Foundation; either
120356 + version 2.1 of the License, or (at your option) any later version.
120358 + The GNU C Library is distributed in the hope that it will be useful,
120359 + but WITHOUT ANY WARRANTY; without even the implied warranty of
120360 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
120361 + Lesser General Public License for more details.
120363 + You should have received a copy of the GNU Lesser General Public
120364 + License along with the GNU C Library; if not, write to the Free
120365 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
120366 + 02111-1307 USA. */
120368 +#include <sysdep.h>
120369 +#include <endian.h>
120370 +#include <sys/asm.h>
120373 +/* void *memset(void *s, int c, size_t n);
120375 + This could probably be optimized further. */
120377 +#if __BYTE_ORDER == __BIG_ENDIAN
120378 +# define SDHI sdl /* high part is left in big-endian */
120379 +#else
120380 +# define SDHI sdr /* high part is right in little-endian */
120381 +#endif
120383 +ENTRY (memset)
120384 + .set noreorder
120386 + slti t5, a2, 16 # Less than 16?
120387 + bne t5, zero, L(last16)
120388 + move v0, a0 # Setup exit value before too late
120390 + beq a1, zero, L(ueven) # If zero pattern, no need to extend
120391 + andi a1, 0xff # Avoid problems with bogus arguments
120392 + dsll t4, a1, 8
120393 + or a1, t4
120394 + dsll t4, a1, 16
120395 + or a1, t4 # a1 is now pattern in full word
120396 + dsll t4, a1, 32
120397 + or a1, t4 # a1 is now pattern in double word
120399 +L(ueven):
120400 + PTR_SUBU t4, zero, a0 # Unaligned address?
120401 + andi t4, 0x7
120402 + beq t4, zero, L(chkw)
120403 + PTR_SUBU a2, t4
120404 + SDHI a1, 0(a0) # Yes, handle first unaligned part
120405 + PTR_ADDU a0, t4 # Now both a0 and a2 are updated
120407 +L(chkw):
120408 + andi t4, a2, 0xf # Enough left for one loop iteration?
120409 + beq t4, a2, L(chkl)
120410 + PTR_SUBU a3, a2, t4
120411 + PTR_ADDU a3, a0 # a3 is last loop address +1
120412 + move a2, t4 # a2 is now # of bytes left after loop
120413 +L(loopw):
120414 + PTR_ADDIU a0, 16 # Handle 2 dwords pr. iteration
120415 + sd a1, -16(a0)
120416 + bne a0, a3, L(loopw)
120417 + sd a1, -8(a0)
120419 +L(chkl):
120420 + andi t4, a2, 0x8 # Check if there is at least a double
120421 + beq t4, zero, L(last16) # word remaining after the loop
120422 + PTR_SUBU a2, t4
120423 + sd a1, 0(a0) # Yes...
120424 + PTR_ADDIU a0, 8
120426 +L(last16):
120427 + blez a2, L(exit) # Handle last 16 bytes (if cnt>0)
120428 + PTR_ADDU a3, a2, a0 # a3 is last address +1
120429 +L(lst16l):
120430 + PTR_ADDIU a0, 1
120431 + bne a0, a3, L(lst16l)
120432 + sb a1, -1(a0)
120433 +L(exit):
120434 + j ra # Bye, bye
120435 + nop
120437 + .set reorder
120438 +END (memset)
120439 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/mul_1.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/mul_1.S
120440 --- glibc-2.3.2/sysdeps/mips/mips64/mul_1.S Sat Jul 7 21:21:27 2001
120441 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/mul_1.S Fri Mar 14 04:59:37 2003
120442 @@ -1,7 +1,8 @@
120443 /* MIPS3 __mpn_mul_1 -- Multiply a limb vector with a single limb and
120444 * store the product in a second limb vector.
120446 - * Copyright (C) 1992, 1994, 1995, 2000 Free Software Foundation, Inc.
120447 + * Copyright (C) 1992, 1994, 1995, 2000, 2002, 2003
120448 + * Free Software Foundation, Inc.
120450 * This file is part of the GNU MP Library.
120452 @@ -22,6 +23,7 @@
120455 #include <sysdep.h>
120456 +#include <sys/asm.h>
120458 /* INPUT PARAMETERS
120459 * res_ptr $4
120460 @@ -38,10 +40,10 @@
120461 .globl __mpn_mul_1
120462 .ent __mpn_mul_1
120463 __mpn_mul_1:
120464 - .set noreorder
120465 #ifdef __PIC__
120466 - .cpload t9
120467 + SETUP_GP /* ??? unused */
120468 #endif
120469 + .set noreorder
120470 .set nomacro
120472 # warm up phase 0
120473 @@ -52,14 +54,14 @@
120474 dmultu $8,$7
120476 daddiu $6,$6,-1
120477 - beq $6,$0,$LC0
120478 + beq $6,$0,L(LC0)
120479 move $2,$0 # zero cy2
120481 daddiu $6,$6,-1
120482 - beq $6,$0,$LC1
120483 + beq $6,$0,L(LC1)
120484 ld $8,0($5) # load new s1 limb as early as possible
120486 -Loop: mflo $10
120487 +L(Loop): mflo $10
120488 mfhi $9
120489 daddiu $5,$5,8
120490 daddu $10,$10,$2 # add old carry limb to low product limb
120491 @@ -69,11 +71,11 @@
120492 sltu $2,$10,$2 # carry from previous addition -> $2
120493 sd $10,0($4)
120494 daddiu $4,$4,8
120495 - bne $6,$0,Loop
120496 + bne $6,$0,L(Loop)
120497 daddu $2,$9,$2 # add high product limb and carry from addition
120499 # cool down phase 1
120500 -$LC1: mflo $10
120501 +L(LC1): mflo $10
120502 mfhi $9
120503 daddu $10,$10,$2
120504 sltu $2,$10,$2
120505 @@ -83,7 +85,7 @@
120506 daddu $2,$9,$2 # add high product limb and carry from addition
120508 # cool down phase 0
120509 -$LC0: mflo $10
120510 +L(LC0): mflo $10
120511 mfhi $9
120512 daddu $10,$10,$2
120513 sltu $2,$10,$2
120514 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/n32/Implies glibc-2.3.2-200304020432/sysdeps/mips/mips64/n32/Implies
120515 --- glibc-2.3.2/sysdeps/mips/mips64/n32/Implies Thu Jan 1 01:00:00 1970
120516 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/n32/Implies Mon Mar 17 17:20:44 2003
120517 @@ -0,0 +1,4 @@
120518 +mips/mips64
120519 +mips
120520 +wordsize-32
120521 +ieee754/ldbl-128
120522 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/n32/Makefile glibc-2.3.2-200304020432/sysdeps/mips/mips64/n32/Makefile
120523 --- glibc-2.3.2/sysdeps/mips/mips64/n32/Makefile Thu Jan 1 01:00:00 1970
120524 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/n32/Makefile Sat Mar 29 09:15:28 2003
120525 @@ -0,0 +1,6 @@
120526 +# `long double' is a distinct type we support.
120527 +long-double-fcts = yes
120529 +ifeq ($(filter -mabi=n32,$(CC)),)
120530 +CC += -mabi=n32
120531 +endif
120532 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/n64/Implies glibc-2.3.2-200304020432/sysdeps/mips/mips64/n64/Implies
120533 --- glibc-2.3.2/sysdeps/mips/mips64/n64/Implies Thu Jan 1 01:00:00 1970
120534 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/n64/Implies Mon Mar 17 17:20:44 2003
120535 @@ -0,0 +1,4 @@
120536 +mips/mips64
120537 +mips
120538 +wordsize-64
120539 +ieee754/ldbl-128
120540 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/n64/Makefile glibc-2.3.2-200304020432/sysdeps/mips/mips64/n64/Makefile
120541 --- glibc-2.3.2/sysdeps/mips/mips64/n64/Makefile Thu Jan 1 01:00:00 1970
120542 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/n64/Makefile Sat Mar 29 09:15:28 2003
120543 @@ -0,0 +1,6 @@
120544 +# `long double' is a distinct type we support.
120545 +long-double-fcts = yes
120547 +ifeq ($(filter -mabi=64,$(CC)),)
120548 +CC += -mabi=64
120549 +endif
120550 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/rshift.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/rshift.S
120551 --- glibc-2.3.2/sysdeps/mips/mips64/rshift.S Sat Jul 7 21:21:27 2001
120552 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/rshift.S Fri Mar 14 04:59:37 2003
120553 @@ -1,6 +1,6 @@
120554 /* MIPS3 __mpn_rshift --
120556 - * Copyright (C) 1995, 2000 Free Software Foundation, Inc.
120557 + * Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
120559 * This file is part of the GNU MP Library.
120561 @@ -21,6 +21,7 @@
120564 #include <sysdep.h>
120565 +#include <sys/asm.h>
120567 /* INPUT PARAMETERS
120568 * res_ptr $4
120569 @@ -37,22 +38,22 @@
120570 .globl __mpn_rshift
120571 .ent __mpn_rshift
120572 __mpn_rshift:
120573 - .set noreorder
120574 #ifdef __PIC__
120575 - .cpload t9
120576 + SETUP_GP /* ??? unused */
120577 #endif
120578 + .set noreorder
120579 .set nomacro
120581 ld $10,0($5) # load first limb
120582 dsubu $13,$0,$7
120583 daddiu $6,$6,-1
120584 and $9,$6,4-1 # number of limbs in first loop
120585 - beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
120586 + beq $9,$0,L(L0) # if multiple of 4 limbs, skip first loop
120587 dsll $2,$10,$13 # compute function result
120589 dsubu $6,$6,$9
120591 -.Loop0: ld $3,8($5)
120592 +L(Loop0): ld $3,8($5)
120593 daddiu $4,$4,8
120594 daddiu $5,$5,8
120595 daddiu $9,$9,-1
120596 @@ -60,13 +61,13 @@
120597 dsll $12,$3,$13
120598 move $10,$3
120599 or $8,$11,$12
120600 - bne $9,$0,.Loop0
120601 + bne $9,$0,L(Loop0)
120602 sd $8,-8($4)
120604 -.L0: beq $6,$0,.Lend
120605 +L(L0): beq $6,$0,L(Lend)
120608 -.Loop: ld $3,8($5)
120609 +L(Loop): ld $3,8($5)
120610 daddiu $4,$4,32
120611 daddiu $6,$6,-4
120612 dsrl $11,$10,$7
120613 @@ -92,10 +93,10 @@
120615 daddiu $5,$5,32
120616 or $8,$14,$9
120617 - bgtz $6,.Loop
120618 + bgtz $6,L(Loop)
120619 sd $8,-8($4)
120621 -.Lend: dsrl $8,$10,$7
120622 +L(Lend): dsrl $8,$10,$7
120623 j $31
120624 sd $8,0($4)
120625 .end __mpn_rshift
120626 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/setjmp.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/setjmp.S
120627 --- glibc-2.3.2/sysdeps/mips/mips64/setjmp.S Sat Jul 7 21:21:27 2001
120628 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/setjmp.S Thu Mar 20 11:27:55 2003
120629 @@ -1,4 +1,4 @@
120630 -/* Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
120631 +/* Copyright (C) 1996, 1997, 2000, 2002, 2003 Free Software Foundation, Inc.
120632 This file is part of the GNU C Library.
120634 The GNU C Library is free software; you can redistribute it and/or
120635 @@ -17,6 +17,7 @@
120636 02111-1307 USA. */
120638 #include <sysdep.h>
120639 +#include <sys/asm.h>
120641 /* The function __sigsetjmp_aux saves all the registers, but it can't
120642 reliably access the stack or frame pointers, so we pass them in as
120643 @@ -26,10 +27,18 @@
120644 #endif
120645 ENTRY (__sigsetjmp)
120646 #ifdef __PIC__
120647 - .cpload t9
120648 + SETUP_GP
120649 #endif
120650 + SETUP_GP64 (v0, C_SYMBOL_NAME (__sigsetjmp))
120651 move a2, sp
120652 move a3, fp
120653 - dla t9, __sigsetjmp_aux
120654 + PTR_LA t9, __sigsetjmp_aux
120655 +#if _MIPS_SIM == _MIPS_SIM_ABI32
120657 +#endif
120658 + RESTORE_GP64
120659 +#if _MIPS_SIM != _MIPS_SIM_ABI32
120660 + move a4, gp
120661 +#endif
120662 jr t9
120663 + .end __sigsetjmp
120664 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/setjmp_aux.c glibc-2.3.2-200304020432/sysdeps/mips/mips64/setjmp_aux.c
120665 --- glibc-2.3.2/sysdeps/mips/mips64/setjmp_aux.c Sat Jul 7 21:21:27 2001
120666 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/setjmp_aux.c Thu Mar 20 23:29:44 2003
120667 @@ -1,4 +1,4 @@
120668 -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
120669 +/* Copyright (C) 1996, 1997, 2003 Free Software Foundation, Inc.
120670 This file is part of the GNU C Library.
120671 Contributed by Brendan Kehoe (brendan@zen.org).
120673 @@ -25,9 +25,11 @@
120674 access them in C. */
120677 -__sigsetjmp_aux (jmp_buf env, int savemask, int sp, int fp)
120678 +__sigsetjmp_aux (jmp_buf env, int savemask, long long sp, long long fp,
120679 + long long gp)
120681 /* Store the floating point callee-saved registers... */
120682 +#if defined _ABI64 && _MIPS_SIM == _ABI64
120683 asm volatile ("s.d $f24, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[0]));
120684 asm volatile ("s.d $f25, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[1]));
120685 asm volatile ("s.d $f26, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[2]));
120686 @@ -36,6 +38,14 @@
120687 asm volatile ("s.d $f29, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[5]));
120688 asm volatile ("s.d $f30, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[6]));
120689 asm volatile ("s.d $f31, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[7]));
120690 +#else
120691 + asm volatile ("s.d $f20, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[0]));
120692 + asm volatile ("s.d $f22, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[1]));
120693 + asm volatile ("s.d $f24, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[2]));
120694 + asm volatile ("s.d $f26, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[3]));
120695 + asm volatile ("s.d $f28, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[4]));
120696 + asm volatile ("s.d $f30, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[5]));
120697 +#endif
120699 /* .. and the PC; */
120700 asm volatile ("sd $31, %0" : : "m" (env[0].__jmpbuf[0].__pc));
120701 @@ -47,7 +57,7 @@
120702 env[0].__jmpbuf[0].__fp = fp;
120704 /* .. and the GP; */
120705 - asm volatile ("sd $gp, %0" : : "m" (env[0].__jmpbuf[0].__gp));
120706 + env[0].__jmpbuf[0].__gp = gp;
120708 /* .. and the callee-saved registers; */
120709 asm volatile ("sd $16, %0" : : "m" (env[0].__jmpbuf[0].__regs[0]));
120710 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/soft-fp/sfp-machine.h glibc-2.3.2-200304020432/sysdeps/mips/mips64/soft-fp/sfp-machine.h
120711 --- glibc-2.3.2/sysdeps/mips/mips64/soft-fp/sfp-machine.h Tue Sep 5 10:37:09 2000
120712 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/soft-fp/sfp-machine.h Mon Mar 17 16:47:12 2003
120713 @@ -1,7 +1,7 @@
120714 #define _FP_W_TYPE_SIZE 64
120715 -#define _FP_W_TYPE unsigned long
120716 -#define _FP_WS_TYPE signed long
120717 -#define _FP_I_TYPE long
120718 +#define _FP_W_TYPE unsigned long long
120719 +#define _FP_WS_TYPE signed long long
120720 +#define _FP_I_TYPE long long
120722 #define _FP_MUL_MEAT_S(R,X,Y) \
120723 _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y)
120724 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/sub_n.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/sub_n.S
120725 --- glibc-2.3.2/sysdeps/mips/mips64/sub_n.S Sat Jul 7 21:21:27 2001
120726 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/sub_n.S Fri Mar 14 04:59:37 2003
120727 @@ -1,7 +1,7 @@
120728 /* MIPS3 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
120729 * store difference in a third limb vector.
120731 - * Copyright (C) 1995, 2000 Free Software Foundation, Inc.
120732 + * Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
120734 * This file is part of the GNU MP Library.
120736 @@ -22,6 +22,7 @@
120739 #include <sysdep.h>
120740 +#include <sys/asm.h>
120742 /* INPUT PARAMETERS
120743 * res_ptr $4
120744 @@ -38,10 +39,10 @@
120745 .globl __mpn_sub_n
120746 .ent __mpn_sub_n
120747 __mpn_sub_n:
120748 - .set noreorder
120749 #ifdef __PIC__
120750 - .cpload t9
120751 + SETUP_GP /* ??? unused */
120752 #endif
120753 + .set noreorder
120754 .set nomacro
120756 ld $10,0($5)
120757 @@ -49,12 +50,12 @@
120759 daddiu $7,$7,-1
120760 and $9,$7,4-1 # number of limbs in first loop
120761 - beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
120762 + beq $9,$0,L(L0) # if multiple of 4 limbs, skip first loop
120763 move $2,$0
120765 dsubu $7,$7,$9
120767 -.Loop0: daddiu $9,$9,-1
120768 +L(Loop0): daddiu $9,$9,-1
120769 ld $12,8($5)
120770 daddu $11,$11,$2
120771 ld $13,8($6)
120772 @@ -68,13 +69,13 @@
120773 daddiu $6,$6,8
120774 move $10,$12
120775 move $11,$13
120776 - bne $9,$0,.Loop0
120777 + bne $9,$0,L(Loop0)
120778 daddiu $4,$4,8
120780 -.L0: beq $7,$0,.Lend
120781 +L(L0): beq $7,$0,L(Lend)
120784 -.Loop: daddiu $7,$7,-4
120785 +L(Loop): daddiu $7,$7,-4
120787 ld $12,8($5)
120788 daddu $11,$11,$2
120789 @@ -115,10 +116,10 @@
120790 daddiu $5,$5,32
120791 daddiu $6,$6,32
120793 - bne $7,$0,.Loop
120794 + bne $7,$0,L(Loop)
120795 daddiu $4,$4,32
120797 -.Lend: daddu $11,$11,$2
120798 +L(Lend): daddu $11,$11,$2
120799 sltu $8,$11,$2
120800 dsubu $11,$10,$11
120801 sltu $2,$10,$11
120802 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mips64/submul_1.S glibc-2.3.2-200304020432/sysdeps/mips/mips64/submul_1.S
120803 --- glibc-2.3.2/sysdeps/mips/mips64/submul_1.S Sat Jul 7 21:21:27 2001
120804 +++ glibc-2.3.2-200304020432/sysdeps/mips/mips64/submul_1.S Fri Mar 14 04:59:37 2003
120805 @@ -1,7 +1,8 @@
120806 /* MIPS3 __mpn_submul_1 -- Multiply a limb vector with a single limb and
120807 * subtract the product from a second limb vector.
120809 - * Copyright (C) 1992, 1994, 1995, 2000 Free Software Foundation, Inc.
120810 + * Copyright (C) 1992, 1994, 1995, 2000, 2002, 2003
120811 + * Free Software Foundation, Inc.
120813 * This file is part of the GNU MP Library.
120815 @@ -22,6 +23,7 @@
120818 #include <sysdep.h>
120819 +#include <sys/asm.h>
120821 /* INPUT PARAMETERS
120822 * res_ptr $4
120823 @@ -38,10 +40,10 @@
120824 .globl __mpn_submul_1
120825 .ent __mpn_submul_1
120826 __mpn_submul_1:
120827 - .set noreorder
120828 #ifdef __PIC__
120829 - .cpload t9
120830 + SETUP_GP /* ??? unused */
120831 #endif
120832 + .set noreorder
120833 .set nomacro
120835 # warm up phase 0
120836 @@ -52,14 +54,14 @@
120837 dmultu $8,$7
120839 daddiu $6,$6,-1
120840 - beq $6,$0,$LC0
120841 + beq $6,$0,L(LC0)
120842 move $2,$0 # zero cy2
120844 daddiu $6,$6,-1
120845 - beq $6,$0,$LC1
120846 + beq $6,$0,L(LC1)
120847 ld $8,0($5) # load new s1 limb as early as possible
120849 -Loop: ld $10,0($4)
120850 +L(Loop): ld $10,0($4)
120851 mflo $3
120852 mfhi $9
120853 daddiu $5,$5,8
120854 @@ -73,11 +75,11 @@
120855 daddu $2,$2,$10
120856 sd $3,0($4)
120857 daddiu $4,$4,8
120858 - bne $6,$0,Loop
120859 + bne $6,$0,L(Loop)
120860 daddu $2,$9,$2 # add high product limb and carry from addition
120862 # cool down phase 1
120863 -$LC1: ld $10,0($4)
120864 +L(LC1): ld $10,0($4)
120865 mflo $3
120866 mfhi $9
120867 daddu $3,$3,$2
120868 @@ -91,7 +93,7 @@
120869 daddu $2,$9,$2 # add high product limb and carry from addition
120871 # cool down phase 0
120872 -$LC0: ld $10,0($4)
120873 +L(LC0): ld $10,0($4)
120874 mflo $3
120875 mfhi $9
120876 daddu $3,$3,$2
120877 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mipsel/bits/endian.h glibc-2.3.2-200304020432/sysdeps/mips/mipsel/bits/endian.h
120878 --- glibc-2.3.2/sysdeps/mips/mipsel/bits/endian.h Wed Nov 26 04:53:00 1997
120879 +++ glibc-2.3.2-200304020432/sysdeps/mips/mipsel/bits/endian.h Thu Jan 1 01:00:00 1970
120880 @@ -1,8 +0,0 @@
120881 -/* The MIPS architecture has selectable endianness.
120882 - This file is for a machine using little-endian mode. */
120884 -#ifndef _ENDIAN_H
120885 -# error "Never use <bits/endian.h> directly; include <endian.h> instead."
120886 -#endif
120888 -#define __BYTE_ORDER __LITTLE_ENDIAN
120889 diff -u -udbrN glibc-2.3.2/sysdeps/mips/mul_1.S glibc-2.3.2-200304020432/sysdeps/mips/mul_1.S
120890 --- glibc-2.3.2/sysdeps/mips/mul_1.S Sat Jul 7 21:21:27 2001
120891 +++ glibc-2.3.2-200304020432/sysdeps/mips/mul_1.S Fri Mar 14 04:59:37 2003
120892 @@ -1,7 +1,7 @@
120893 /* MIPS __mpn_mul_1 -- Multiply a limb vector with a single limb and
120894 store the product in a second limb vector.
120896 -Copyright (C) 1995, 1998, 2000 Free Software Foundation, Inc.
120897 +Copyright (C) 1995, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
120899 This file is part of the GNU MP Library.
120901 @@ -46,14 +46,14 @@
120902 multu $8,$7
120904 addiu $6,$6,-1
120905 - beq $6,$0,$LC0
120906 + beq $6,$0,L(LC0)
120907 move $2,$0 /* zero cy2 */
120909 addiu $6,$6,-1
120910 - beq $6,$0,$LC1
120911 + beq $6,$0,L(LC1)
120912 lw $8,0($5) /* load new s1 limb as early as possible */
120914 -Loop: mflo $10
120915 +L(Loop): mflo $10
120916 mfhi $9
120917 addiu $5,$5,4
120918 addu $10,$10,$2 /* add old carry limb to low product limb */
120919 @@ -63,11 +63,11 @@
120920 sltu $2,$10,$2 /* carry from previous addition -> $2 */
120921 sw $10,0($4)
120922 addiu $4,$4,4
120923 - bne $6,$0,Loop /* should be "bnel" */
120924 + bne $6,$0,L(Loop) /* should be "bnel" */
120925 addu $2,$9,$2 /* add high product limb and carry from addition */
120927 /* cool down phase 1 */
120928 -$LC1: mflo $10
120929 +L(LC1): mflo $10
120930 mfhi $9
120931 addu $10,$10,$2
120932 sltu $2,$10,$2
120933 @@ -77,7 +77,7 @@
120934 addu $2,$9,$2 /* add high product limb and carry from addition */
120936 /* cool down phase 0 */
120937 -$LC0: mflo $10
120938 +L(LC0): mflo $10
120939 mfhi $9
120940 addu $10,$10,$2
120941 sltu $2,$10,$2
120942 diff -u -udbrN glibc-2.3.2/sysdeps/mips/rshift.S glibc-2.3.2-200304020432/sysdeps/mips/rshift.S
120943 --- glibc-2.3.2/sysdeps/mips/rshift.S Sat Jul 7 21:21:27 2001
120944 +++ glibc-2.3.2-200304020432/sysdeps/mips/rshift.S Fri Mar 14 04:59:37 2003
120945 @@ -1,6 +1,6 @@
120946 /* MIPS2 __mpn_rshift --
120948 -Copyright (C) 1995, 2000 Free Software Foundation, Inc.
120949 +Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
120951 This file is part of the GNU MP Library.
120953 @@ -41,12 +41,12 @@
120954 subu $13,$0,$7
120955 addiu $6,$6,-1
120956 and $9,$6,4-1 /* number of limbs in first loop */
120957 - beq $9,$0,.L0 /* if multiple of 4 limbs, skip first loop*/
120958 + beq $9,$0,L(L0) /* if multiple of 4 limbs, skip first loop*/
120959 sll $2,$10,$13 /* compute function result */
120961 subu $6,$6,$9
120963 -.Loop0: lw $3,4($5)
120964 +L(Loop0): lw $3,4($5)
120965 addiu $4,$4,4
120966 addiu $5,$5,4
120967 addiu $9,$9,-1
120968 @@ -54,13 +54,13 @@
120969 sll $12,$3,$13
120970 move $10,$3
120971 or $8,$11,$12
120972 - bne $9,$0,.Loop0
120973 + bne $9,$0,L(Loop0)
120974 sw $8,-4($4)
120976 -.L0: beq $6,$0,.Lend
120977 +L(L0): beq $6,$0,L(Lend)
120980 -.Loop: lw $3,4($5)
120981 +L(Loop): lw $3,4($5)
120982 addiu $4,$4,16
120983 addiu $6,$6,-4
120984 srl $11,$10,$7
120985 @@ -86,10 +86,10 @@
120987 addiu $5,$5,16
120988 or $8,$14,$9
120989 - bgtz $6,.Loop
120990 + bgtz $6,L(Loop)
120991 sw $8,-4($4)
120993 -.Lend: srl $8,$10,$7
120994 +L(Lend): srl $8,$10,$7
120995 j $31
120996 sw $8,0($4)
120997 END (__mpn_rshift)
120998 diff -u -udbrN glibc-2.3.2/sysdeps/mips/setjmp_aux.c glibc-2.3.2-200304020432/sysdeps/mips/setjmp_aux.c
120999 --- glibc-2.3.2/sysdeps/mips/setjmp_aux.c Sat Jul 7 21:21:27 2001
121000 +++ glibc-2.3.2-200304020432/sysdeps/mips/setjmp_aux.c Thu Mar 20 11:27:55 2003
121001 @@ -1,4 +1,4 @@
121002 -/* Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
121003 +/* Copyright (C) 1996, 1997, 2000, 2002, 2003 Free Software Foundation, Inc.
121004 This file is part of the GNU C Library.
121005 Contributed by Brendan Kehoe (brendan@zen.org).
121007 diff -u -udbrN glibc-2.3.2/sysdeps/mips/sgidefs.h glibc-2.3.2-200304020432/sysdeps/mips/sgidefs.h
121008 --- glibc-2.3.2/sysdeps/mips/sgidefs.h Sat Jul 7 21:21:27 2001
121009 +++ glibc-2.3.2-200304020432/sysdeps/mips/sgidefs.h Tue Mar 25 22:51:52 2003
121010 @@ -1,4 +1,4 @@
121011 -/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
121012 +/* Copyright (C) 1996, 1997, 1998, 2003 Free Software Foundation, Inc.
121013 This file is part of the GNU C Library.
121014 Contributed by Ralf Baechle <ralf@gnu.org>.
121016 @@ -28,6 +28,8 @@
121017 #define _MIPS_ISA_MIPS3 3
121018 #define _MIPS_ISA_MIPS4 4
121019 #define _MIPS_ISA_MIPS5 5
121020 +#define _MIPS_ISA_MIPS32 6
121021 +#define _MIPS_ISA_MIPS64 7
121024 * Subprogram calling convention
121025 diff -u -udbrN glibc-2.3.2/sysdeps/mips/sub_n.S glibc-2.3.2-200304020432/sysdeps/mips/sub_n.S
121026 --- glibc-2.3.2/sysdeps/mips/sub_n.S Sat Jul 7 21:21:27 2001
121027 +++ glibc-2.3.2-200304020432/sysdeps/mips/sub_n.S Fri Mar 14 04:59:37 2003
121028 @@ -1,7 +1,7 @@
121029 /* MIPS2 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
121030 store difference in a third limb vector.
121032 -Copyright (C) 1995, 2000 Free Software Foundation, Inc.
121033 +Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
121035 This file is part of the GNU MP Library.
121037 @@ -43,12 +43,12 @@
121039 addiu $7,$7,-1
121040 and $9,$7,4-1 /* number of limbs in first loop */
121041 - beq $9,$0,.L0 /* if multiple of 4 limbs, skip first loop */
121042 + beq $9,$0,L(L0) /* if multiple of 4 limbs, skip first loop */
121043 move $2,$0
121045 subu $7,$7,$9
121047 -.Loop0: addiu $9,$9,-1
121048 +L(Loop0): addiu $9,$9,-1
121049 lw $12,4($5)
121050 addu $11,$11,$2
121051 lw $13,4($6)
121052 @@ -62,13 +62,13 @@
121053 addiu $6,$6,4
121054 move $10,$12
121055 move $11,$13
121056 - bne $9,$0,.Loop0
121057 + bne $9,$0,L(Loop0)
121058 addiu $4,$4,4
121060 -.L0: beq $7,$0,.Lend
121061 +L(L0): beq $7,$0,L(Lend)
121064 -.Loop: addiu $7,$7,-4
121065 +L(Loop): addiu $7,$7,-4
121067 lw $12,4($5)
121068 addu $11,$11,$2
121069 @@ -109,10 +109,10 @@
121070 addiu $5,$5,16
121071 addiu $6,$6,16
121073 - bne $7,$0,.Loop
121074 + bne $7,$0,L(Loop)
121075 addiu $4,$4,16
121077 -.Lend: addu $11,$11,$2
121078 +L(Lend): addu $11,$11,$2
121079 sltu $8,$11,$2
121080 subu $11,$10,$11
121081 sltu $2,$10,$11
121082 diff -u -udbrN glibc-2.3.2/sysdeps/mips/submul_1.S glibc-2.3.2-200304020432/sysdeps/mips/submul_1.S
121083 --- glibc-2.3.2/sysdeps/mips/submul_1.S Sat Jul 7 21:21:27 2001
121084 +++ glibc-2.3.2-200304020432/sysdeps/mips/submul_1.S Fri Mar 14 04:59:37 2003
121085 @@ -1,7 +1,7 @@
121086 /* MIPS __mpn_submul_1 -- Multiply a limb vector with a single limb and
121087 subtract the product from a second limb vector.
121089 -Copyright (C) 1995, 2000 Free Software Foundation, Inc.
121090 +Copyright (C) 1995, 2000, 2002, 2003 Free Software Foundation, Inc.
121092 This file is part of the GNU MP Library.
121094 @@ -46,14 +46,14 @@
121095 multu $8,$7
121097 addiu $6,$6,-1
121098 - beq $6,$0,$LC0
121099 + beq $6,$0,L(LC0)
121100 move $2,$0 /* zero cy2 */
121102 addiu $6,$6,-1
121103 - beq $6,$0,$LC1
121104 + beq $6,$0,L(LC1)
121105 lw $8,0($5) /* load new s1 limb as early as possible */
121107 -Loop: lw $10,0($4)
121108 +L(Loop): lw $10,0($4)
121109 mflo $3
121110 mfhi $9
121111 addiu $5,$5,4
121112 @@ -67,11 +67,11 @@
121113 addu $2,$2,$10
121114 sw $3,0($4)
121115 addiu $4,$4,4
121116 - bne $6,$0,Loop /* should be "bnel" */
121117 + bne $6,$0,L(Loop) /* should be "bnel" */
121118 addu $2,$9,$2 /* add high product limb and carry from addition */
121120 /* cool down phase 1 */
121121 -$LC1: lw $10,0($4)
121122 +L(LC1): lw $10,0($4)
121123 mflo $3
121124 mfhi $9
121125 addu $3,$3,$2
121126 @@ -85,7 +85,7 @@
121127 addu $2,$9,$2 /* add high product limb and carry from addition */
121129 /* cool down phase 0 */
121130 -$LC0: lw $10,0($4)
121131 +L(LC0): lw $10,0($4)
121132 mflo $3
121133 mfhi $9
121134 addu $3,$3,$2
121135 diff -u -udbrN glibc-2.3.2/sysdeps/mips/sys/asm.h glibc-2.3.2-200304020432/sysdeps/mips/sys/asm.h
121136 --- glibc-2.3.2/sysdeps/mips/sys/asm.h Sat Jul 7 21:21:27 2001
121137 +++ glibc-2.3.2-200304020432/sysdeps/mips/sys/asm.h Tue Mar 25 22:51:52 2003
121138 @@ -1,4 +1,4 @@
121139 -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
121140 +/* Copyright (C) 1997, 1998, 2002, 2003 Free Software Foundation, Inc.
121141 This file is part of the GNU C Library.
121142 Contributed by Ralf Baechle <ralf@gnu.org>.
121144 @@ -23,12 +23,12 @@
121145 #include <sgidefs.h>
121147 #ifndef CAT
121148 -#ifdef __STDC__
121149 -#define __CAT(str1,str2) str1##str2
121150 -#else
121151 -#define __CAT(str1,str2) str1/**/str2
121152 -#endif
121153 -#define CAT(str1,str2) __CAT(str1,str2)
121154 +# ifdef __STDC__
121155 +# define __CAT(str1,str2) str1##str2
121156 +# else
121157 +# define __CAT(str1,str2) str1/**/str2
121158 +# endif
121159 +# define CAT(str1,str2) __CAT(str1,str2)
121160 #endif
121163 @@ -37,25 +37,112 @@
121164 * 64 bit address space isn't used yet, so we may use the R3000 32 bit
121165 * defines for now.
121167 -#define PTR .word
121168 -#define PTRSIZE 4
121169 -#define PTRLOG 2
121170 +#if (_MIPS_SIM == _MIPS_SIM_ABI32) || (_MIPS_SIM == _MIPS_SIM_NABI32)
121171 +# define PTR .word
121172 +# define PTRSIZE 4
121173 +# define PTRLOG 2
121174 +#elif (_MIPS_SIM == _MIPS_SIM_ABI64)
121175 +# define PTR .dword
121176 +# define PTRSIZE 8
121177 +# define PTRLOG 3
121178 +#endif
121181 * PIC specific declarations
121183 -#ifdef __PIC__
121184 -#define CPRESTORE(register) \
121185 +#if (_MIPS_SIM == _MIPS_SIM_ABI32)
121186 +# ifdef __PIC__
121187 +# define CPRESTORE(register) \
121188 .cprestore register
121189 -#define CPADD(register) \
121190 - .cpadd register
121191 -#define CPLOAD(register) \
121192 +# define CPLOAD(register) \
121193 .cpload register
121194 -#else
121195 -#define CPRESTORE(register)
121196 -#define CPADD(register)
121197 -#define CPLOAD(register)
121198 +# else
121199 +# define CPRESTORE(register)
121200 +# define CPLOAD(register)
121201 +# endif
121203 +# define CPADD(register) \
121204 + .cpadd register
121207 + * Set gp when at 1st instruction
121209 +# define SETUP_GP \
121210 + .set noreorder; \
121211 + .cpload $25; \
121212 + .set reorder
121213 +/* Set gp when not at 1st instruction */
121214 +# define SETUP_GPX(r) \
121215 + .set noreorder; \
121216 + move r, $31; /* Save old ra. */ \
121217 + bal 10f; /* Find addr of cpload. */ \
121218 + nop; \
121219 +10: \
121220 + .cpload $31; \
121221 + move $31, r; \
121222 + .set reorder
121223 +# define SETUP_GPX_L(r, l) \
121224 + .set noreorder; \
121225 + move r, $31; /* Save old ra. */ \
121226 + bal l; /* Find addr of cpload. */ \
121227 + nop; \
121228 +l: \
121229 + .cpload $31; \
121230 + move $31, r; \
121231 + .set reorder
121232 +# define SAVE_GP(x) \
121233 + .cprestore x /* Save gp trigger t9/jalr conversion. */
121234 +# define SETUP_GP64(a, b)
121235 +# define SETUP_GPX64(a, b)
121236 +# define SETUP_GPX64_L(cp_reg, ra_save, l)
121237 +# define RESTORE_GP64
121238 +# define USE_ALT_CP(a)
121239 +#else /* (_MIPS_SIM == _MIPS_SIM_ABI64) || (_MIPS_SIM == _MIPS_SIM_NABI32) */
121241 + * For callee-saved gp calling convention:
121243 +# define SETUP_GP
121244 +# define SETUP_GPX(r)
121245 +# define SETUP_GPX_L(r, l)
121246 +# define SAVE_GP(x)
121248 +# define SETUP_GP64(gpoffset, proc) \
121249 + .cpsetup $25, gpoffset, proc
121250 +# define SETUP_GPX64(cp_reg, ra_save) \
121251 + move ra_save, $31; /* Save old ra. */ \
121252 + .set noreorder; \
121253 + bal 10f; /* Find addr of .cpsetup. */ \
121254 + nop; \
121255 +10: \
121256 + .set reorder; \
121257 + .cpsetup $31, cp_reg, 10b; \
121258 + move $31, ra_save
121259 +# define SETUP_GPX64_L(cp_reg, ra_save, l) \
121260 + move ra_save, $31; /* Save old ra. */ \
121261 + .set noreorder; \
121262 + bal l; /* Find addr of .cpsetup. */ \
121263 + nop; \
121264 +l: \
121265 + .set reorder; \
121266 + .cpsetup $31, cp_reg, l; \
121267 + move $31, ra_save
121268 +# define RESTORE_GP64 \
121269 + .cpreturn
121270 +/* Use alternate register for context pointer. */
121271 +# define USE_ALT_CP(reg) \
121272 + .cplocal reg
121273 +#endif /* _MIPS_SIM != _MIPS_SIM_ABI32 */
121276 + * Stack Frame Definitions
121278 +#if (_MIPS_SIM == _MIPS_SIM_ABI32)
121279 +# define NARGSAVE 4 /* Space for 4 argument registers must be allocated. */
121280 #endif
121281 +#if (_MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32)
121282 +# define NARGSAVE 0 /* No caller responsibilities. */
121283 +#endif
121287 * LEAF - declare leaf routine
121288 @@ -80,9 +167,11 @@
121290 * END - mark end of function
121292 -#define END(function) \
121293 +#ifndef END
121294 +# define END(function) \
121295 .end function; \
121296 .size function,.-function
121297 +#endif
121300 * EXPORT - export definition of symbol
121301 @@ -141,28 +230,29 @@
121302 * MIPS IV implementations are free to treat this as a nop. The R5000
121303 * is one of them. So we should have an option not to use this instruction.
121305 -#if (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5)
121306 -#define PREF(hint,addr) \
121307 +#if (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5) || \
121308 + (_MIPS_ISA == _MIPS_ISA_MIPS32) || (_MIPS_ISA == _MIPS_ISA_MIPS64)
121309 +# define PREF(hint,addr) \
121310 pref hint,addr
121311 -#define PREFX(hint,addr) \
121312 +# define PREFX(hint,addr) \
121313 prefx hint,addr
121314 #else
121315 -#define PREF
121316 -#define PREFX
121317 +# define PREF
121318 +# define PREFX
121319 #endif
121322 * MIPS ISA IV/V movn/movz instructions and equivalents for older CPUs.
121324 #if _MIPS_ISA == _MIPS_ISA_MIPS1
121325 -#define MOVN(rd,rs,rt) \
121326 +# define MOVN(rd,rs,rt) \
121327 .set push; \
121328 .set reorder; \
121329 beqz rt,9f; \
121330 move rd,rs; \
121331 .set pop; \
121333 -#define MOVZ(rd,rs,rt) \
121334 +# define MOVZ(rd,rs,rt) \
121335 .set push; \
121336 .set reorder; \
121337 bnez rt,9f; \
121338 @@ -171,14 +261,14 @@
121340 #endif /* _MIPS_ISA == _MIPS_ISA_MIPS1 */
121341 #if (_MIPS_ISA == _MIPS_ISA_MIPS2) || (_MIPS_ISA == _MIPS_ISA_MIPS3)
121342 -#define MOVN(rd,rs,rt) \
121343 +# define MOVN(rd,rs,rt) \
121344 .set push; \
121345 .set noreorder; \
121346 bnezl rt,9f; \
121347 move rd,rs; \
121348 .set pop; \
121350 -#define MOVZ(rd,rs,rt) \
121351 +# define MOVZ(rd,rs,rt) \
121352 .set push; \
121353 .set noreorder; \
121354 beqzl rt,9f; \
121355 @@ -186,192 +276,198 @@
121356 .set pop; \
121358 #endif /* (_MIPS_ISA == _MIPS_ISA_MIPS2) || (_MIPS_ISA == _MIPS_ISA_MIPS3) */
121359 -#if (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5)
121360 -#define MOVN(rd,rs,rt) \
121361 +#if (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5) || \
121362 + (_MIPS_ISA == _MIPS_ISA_MIPS32) || (_MIPS_ISA == _MIPS_ISA_MIPS64)
121363 +# define MOVN(rd,rs,rt) \
121364 movn rd,rs,rt
121365 -#define MOVZ(rd,rs,rt) \
121366 +# define MOVZ(rd,rs,rt) \
121367 movz rd,rs,rt
121368 #endif /* (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5) */
121371 * Stack alignment
121373 -#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2)
121374 -#define ALSZ 7
121375 -#define ALMASK ~7
121376 -#endif
121377 -#if (_MIPS_ISA == _MIPS_ISA_MIPS3) || (_MIPS_ISA == _MIPS_ISA_MIPS4) || \
121378 - (_MIPS_ISA == _MIPS_ISA_MIPS5)
121379 -#define ALSZ 15
121380 -#define ALMASK ~15
121381 +#if (_MIPS_SIM == _MIPS_SIM_ABI64) || (_MIPS_SIM == _MIPS_SIM_NABI32)
121382 +# define ALSZ 15
121383 +# define ALMASK ~15
121384 +#else
121385 +# define ALSZ 7
121386 +# define ALMASK ~7
121387 #endif
121390 * Size of a register
121392 -#ifdef __mips64
121393 -#define SZREG 8
121394 +#if (_MIPS_SIM == _MIPS_SIM_ABI64) || (_MIPS_SIM == _MIPS_SIM_NABI32)
121395 +# define SZREG 8
121396 #else
121397 -#define SZREG 4
121398 +# define SZREG 4
121399 #endif
121402 * Use the following macros in assemblercode to load/store registers,
121403 * pointers etc.
121405 -#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2)
121406 -#define REG_S sw
121407 -#define REG_L lw
121408 -#define PTR_SUBU subu
121409 -#define PTR_ADDU addu
121410 -#endif
121411 -#if (_MIPS_ISA == _MIPS_ISA_MIPS3) || (_MIPS_ISA == _MIPS_ISA_MIPS4) || \
121412 - (_MIPS_ISA == _MIPS_ISA_MIPS5)
121413 -#define REG_S sd
121414 -#define REG_L ld
121415 -/* We still live in a 32 bit address space ... */
121416 -#define PTR_SUBU subu
121417 -#define PTR_ADDU addu
121418 +#if (SZREG == 4)
121419 +# define REG_S sw
121420 +# define REG_L lw
121421 +#else
121422 +# define REG_S sd
121423 +# define REG_L ld
121424 #endif
121427 * How to add/sub/load/store/shift C int variables.
121429 #if (_MIPS_SZINT == 32)
121430 -#define INT_ADD add
121431 -#define INT_ADDI addi
121432 -#define INT_ADDU addu
121433 -#define INT_ADDIU addiu
121434 -#define INT_SUB add
121435 -#define INT_SUBI subi
121436 -#define INT_SUBU subu
121437 -#define INT_SUBIU subu
121438 -#define INT_L lw
121439 -#define INT_S sw
121440 -#define LONG_SLL sll
121441 -#define LONG_SLLV sllv
121442 -#define LONG_SRL srl
121443 -#define LONG_SRLV srlv
121444 -#define LONG_SRA sra
121445 -#define LONG_SRAV srav
121446 +# define INT_ADD add
121447 +# define INT_ADDI addi
121448 +# define INT_ADDU addu
121449 +# define INT_ADDIU addiu
121450 +# define INT_SUB add
121451 +# define INT_SUBI subi
121452 +# define INT_SUBU subu
121453 +# define INT_SUBIU subu
121454 +# define INT_L lw
121455 +# define INT_S sw
121456 #endif
121458 #if (_MIPS_SZINT == 64)
121459 -#define INT_ADD dadd
121460 -#define INT_ADDI daddi
121461 -#define INT_ADDU daddu
121462 -#define INT_ADDIU daddiu
121463 -#define INT_SUB dadd
121464 -#define INT_SUBI dsubi
121465 -#define INT_SUBU dsubu
121466 -#define INT_SUBIU dsubu
121467 -#define INT_L ld
121468 -#define INT_S sd
121469 -#define LONG_SLL dsll
121470 -#define LONG_SLLV dsllv
121471 -#define LONG_SRL dsrl
121472 -#define LONG_SRLV dsrlv
121473 -#define LONG_SRA dsra
121474 -#define LONG_SRAV dsrav
121475 +# define INT_ADD dadd
121476 +# define INT_ADDI daddi
121477 +# define INT_ADDU daddu
121478 +# define INT_ADDIU daddiu
121479 +# define INT_SUB dadd
121480 +# define INT_SUBI dsubi
121481 +# define INT_SUBU dsubu
121482 +# define INT_SUBIU dsubu
121483 +# define INT_L ld
121484 +# define INT_S sd
121485 #endif
121488 * How to add/sub/load/store/shift C long variables.
121490 #if (_MIPS_SZLONG == 32)
121491 -#define LONG_ADD add
121492 -#define LONG_ADDI addi
121493 -#define LONG_ADDU addu
121494 -#define LONG_ADDIU addiu
121495 -#define LONG_SUB add
121496 -#define LONG_SUBI subi
121497 -#define LONG_SUBU subu
121498 -#define LONG_SUBIU subu
121499 -#define LONG_L lw
121500 -#define LONG_S sw
121501 -#define LONG_SLL sll
121502 -#define LONG_SLLV sllv
121503 -#define LONG_SRL srl
121504 -#define LONG_SRLV srlv
121505 -#define LONG_SRA sra
121506 -#define LONG_SRAV srav
121507 +# define LONG_ADD add
121508 +# define LONG_ADDI addi
121509 +# define LONG_ADDU addu
121510 +# define LONG_ADDIU addiu
121511 +# define LONG_SUB add
121512 +# define LONG_SUBI subi
121513 +# define LONG_SUBU subu
121514 +# define LONG_SUBIU subu
121515 +# define LONG_L lw
121516 +# define LONG_S sw
121517 +# define LONG_SLL sll
121518 +# define LONG_SLLV sllv
121519 +# define LONG_SRL srl
121520 +# define LONG_SRLV srlv
121521 +# define LONG_SRA sra
121522 +# define LONG_SRAV srav
121523 #endif
121525 #if (_MIPS_SZLONG == 64)
121526 -#define LONG_ADD dadd
121527 -#define LONG_ADDI daddi
121528 -#define LONG_ADDU daddu
121529 -#define LONG_ADDIU daddiu
121530 -#define LONG_SUB dadd
121531 -#define LONG_SUBI dsubi
121532 -#define LONG_SUBU dsubu
121533 -#define LONG_SUBIU dsubu
121534 -#define LONG_L ld
121535 -#define LONG_S sd
121536 -#define LONG_SLL dsll
121537 -#define LONG_SLLV dsllv
121538 -#define LONG_SRL dsrl
121539 -#define LONG_SRLV dsrlv
121540 -#define LONG_SRA dsra
121541 -#define LONG_SRAV dsrav
121542 +# define LONG_ADD dadd
121543 +# define LONG_ADDI daddi
121544 +# define LONG_ADDU daddu
121545 +# define LONG_ADDIU daddiu
121546 +# define LONG_SUB dadd
121547 +# define LONG_SUBI dsubi
121548 +# define LONG_SUBU dsubu
121549 +# define LONG_SUBIU dsubu
121550 +# define LONG_L ld
121551 +# define LONG_S sd
121552 +# define LONG_SLL dsll
121553 +# define LONG_SLLV dsllv
121554 +# define LONG_SRL dsrl
121555 +# define LONG_SRLV dsrlv
121556 +# define LONG_SRA dsra
121557 +# define LONG_SRAV dsrav
121558 #endif
121561 * How to add/sub/load/store/shift pointers.
121563 -#if (_MIPS_SZLONG == 32)
121564 -#define PTR_ADD add
121565 -#define PTR_ADDI addi
121566 -#define PTR_ADDU addu
121567 -#define PTR_ADDIU addiu
121568 -#define PTR_SUB add
121569 -#define PTR_SUBI subi
121570 -#define PTR_SUBU subu
121571 -#define PTR_SUBIU subu
121572 -#define PTR_L lw
121573 -#define PTR_S sw
121574 -#define PTR_SLL sll
121575 -#define PTR_SLLV sllv
121576 -#define PTR_SRL srl
121577 -#define PTR_SRLV srlv
121578 -#define PTR_SRA sra
121579 -#define PTR_SRAV srav
121580 +#if (_MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32)
121581 +# define PTR_ADD add
121582 +# define PTR_ADDI addi
121583 +# define PTR_ADDU addu
121584 +# define PTR_ADDIU addiu
121585 +# define PTR_SUB add
121586 +# define PTR_SUBI subi
121587 +# define PTR_SUBU subu
121588 +# define PTR_SUBIU subu
121589 +# define PTR_L lw
121590 +# define PTR_LA la
121591 +# define PTR_S sw
121592 +# define PTR_SLL sll
121593 +# define PTR_SLLV sllv
121594 +# define PTR_SRL srl
121595 +# define PTR_SRLV srlv
121596 +# define PTR_SRA sra
121597 +# define PTR_SRAV srav
121599 -#define PTR_SCALESHIFT 2
121600 +# define PTR_SCALESHIFT 2
121601 #endif
121603 -#if (_MIPS_SZLONG == 64)
121604 -#define PTR_ADD dadd
121605 -#define PTR_ADDI daddi
121606 -#define PTR_ADDU daddu
121607 -#define PTR_ADDIU daddiu
121608 -#define PTR_SUB dadd
121609 -#define PTR_SUBI dsubi
121610 -#define PTR_SUBU dsubu
121611 -#define PTR_SUBIU dsubu
121612 -#define PTR_L ld
121613 -#define PTR_S sd
121614 -#define PTR_SLL dsll
121615 -#define PTR_SLLV dsllv
121616 -#define PTR_SRL dsrl
121617 -#define PTR_SRLV dsrlv
121618 -#define PTR_SRA dsra
121619 -#define PTR_SRAV dsrav
121620 +#if _MIPS_SIM == _MIPS_SIM_NABI32
121621 +# define PTR_ADD add
121622 +# define PTR_ADDI addi
121623 +# define PTR_ADDU add /* no u */
121624 +# define PTR_ADDIU addi /* no u */
121625 +# define PTR_SUB add
121626 +# define PTR_SUBI subi
121627 +# define PTR_SUBU sub /* no u */
121628 +# define PTR_SUBIU sub /* no u */
121629 +# define PTR_L lw
121630 +# define PTR_LA la
121631 +# define PTR_S sw
121632 +# define PTR_SLL sll
121633 +# define PTR_SLLV sllv
121634 +# define PTR_SRL srl
121635 +# define PTR_SRLV srlv
121636 +# define PTR_SRA sra
121637 +# define PTR_SRAV srav
121639 -#define PTR_SCALESHIFT 3
121640 +# define PTR_SCALESHIFT 2
121641 +#endif
121643 +#if (_MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 64 /* o64??? */) \
121644 + || _MIPS_SIM == _MIPS_SIM_ABI64
121645 +# define PTR_ADD dadd
121646 +# define PTR_ADDI daddi
121647 +# define PTR_ADDU daddu
121648 +# define PTR_ADDIU daddiu
121649 +# define PTR_SUB dadd
121650 +# define PTR_SUBI dsubi
121651 +# define PTR_SUBU dsubu
121652 +# define PTR_SUBIU dsubu
121653 +# define PTR_L ld
121654 +# define PTR_LA dla
121655 +# define PTR_S sd
121656 +# define PTR_SLL dsll
121657 +# define PTR_SLLV dsllv
121658 +# define PTR_SRL dsrl
121659 +# define PTR_SRLV dsrlv
121660 +# define PTR_SRA dsra
121661 +# define PTR_SRAV dsrav
121663 +# define PTR_SCALESHIFT 3
121664 #endif
121667 * Some cp0 registers were extended to 64bit for MIPS III.
121669 -#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2)
121670 -#define MFC0 mfc0
121671 -#define MTC0 mtc0
121672 +#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2) || \
121673 + (_MIPS_ISA == _MIPS_ISA_MIPS32)
121674 +# define MFC0 mfc0
121675 +# define MTC0 mtc0
121676 #endif
121677 #if (_MIPS_ISA == _MIPS_ISA_MIPS3) || (_MIPS_ISA == _MIPS_ISA_MIPS4) || \
121678 - (_MIPS_ISA == _MIPS_ISA_MIPS5)
121679 -#define MFC0 dmfc0
121680 -#define MTC0 dmtc0
121681 + (_MIPS_ISA == _MIPS_ISA_MIPS5) || (_MIPS_ISA == _MIPS_ISA_MIPS64)
121682 +# define MFC0 dmfc0
121683 +# define MTC0 dmtc0
121684 #endif
121686 #endif /* sys/asm.h */
121687 diff -u -udbrN glibc-2.3.2/sysdeps/mips/sys/regdef.h glibc-2.3.2-200304020432/sysdeps/mips/sys/regdef.h
121688 --- glibc-2.3.2/sysdeps/mips/sys/regdef.h Sat Jul 7 21:21:27 2001
121689 +++ glibc-2.3.2-200304020432/sysdeps/mips/sys/regdef.h Fri Mar 14 06:31:28 2003
121690 @@ -1,4 +1,4 @@
121691 -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
121692 +/* Copyright (C) 1997, 1998, 2002, 2003 Free Software Foundation, Inc.
121693 This file is part of the GNU C Library.
121694 Contributed by Ralf Baechle <ralf@gnu.org>.
121696 @@ -31,10 +31,17 @@
121697 #define a1 $5
121698 #define a2 $6
121699 #define a3 $7
121700 +#if _MIPS_SIM != _MIPS_SIM_ABI32
121701 +#define a4 $8
121702 +#define a5 $9
121703 +#define a6 $10
121704 +#define a7 $11
121705 +#else /* if _MIPS_SIM == _MIPS_SIM_ABI32 */
121706 #define t0 $8 /* caller saved */
121707 #define t1 $9
121708 #define t2 $10
121709 #define t3 $11
121710 +#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
121711 #define t4 $12
121712 #define t5 $13
121713 #define t6 $14
121714 diff -u -udbrN glibc-2.3.2/sysdeps/mips/sys/ucontext.h glibc-2.3.2-200304020432/sysdeps/mips/sys/ucontext.h
121715 --- glibc-2.3.2/sysdeps/mips/sys/ucontext.h Sat Jul 7 21:21:27 2001
121716 +++ glibc-2.3.2-200304020432/sysdeps/mips/sys/ucontext.h Mon Mar 17 16:47:12 2003
121717 @@ -1,4 +1,4 @@
121718 -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc.
121719 +/* Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
121720 This file is part of the GNU C Library.
121722 The GNU C Library is free software; you can redistribute it and/or
121723 @@ -25,7 +25,11 @@
121724 #include <signal.h>
121726 /* Type for general register. */
121727 -typedef unsigned int greg_t;
121728 +#if _MIPS_SIM == _MIPS_SIM_ABI32
121729 +typedef __uint32_t greg_t;
121730 +#else
121731 +typedef __uint64_t greg_t;
121732 +#endif
121734 /* Number of general registers. */
121735 #define NGREG 36
121736 @@ -115,9 +119,15 @@
121738 union
121740 +#if _MIPS_SIM == _MIPS_SIM_ABI32
121741 double fp_dregs[16];
121742 float fp_fregs[32];
121743 unsigned int fp_regs[32];
121744 +#else
121745 + double fp_dregs[32];
121746 + /* float fp_fregs[32]; */
121747 + __uint64_t fp_regs[32];
121748 +#endif
121749 } fp_r;
121750 unsigned int fp_csr;
121751 unsigned int fp_pad;
121752 @@ -133,12 +143,16 @@
121753 /* Userlevel context. */
121754 typedef struct ucontext
121756 +#if _MIPS_SIM == _MIPS_SIM_ABI32
121757 unsigned long int uc_flags;
121758 +#else
121759 + __uint64_t uc_flags;
121760 +#endif
121761 struct ucontext *uc_link;
121762 __sigset_t uc_sigmask;
121763 stack_t uc_stack;
121764 mcontext_t uc_mcontext;
121765 - long int uc_filler[48];
121766 + int uc_filler[48];
121767 } ucontext_t;
121769 #endif /* sys/ucontext.h */
121770 diff -u -udbrN glibc-2.3.2/sysdeps/posix/clock_getres.c glibc-2.3.2-200304020432/sysdeps/posix/clock_getres.c
121771 --- glibc-2.3.2/sysdeps/posix/clock_getres.c Sat Jul 7 21:21:27 2001
121772 +++ glibc-2.3.2-200304020432/sysdeps/posix/clock_getres.c Mon Mar 3 05:43:57 2003
121773 @@ -1,4 +1,4 @@
121774 -/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
121775 +/* Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
121776 This file is part of the GNU C Library.
121778 The GNU C Library is free software; you can redistribute it and/or
121779 @@ -24,7 +24,7 @@
121780 #include <libc-internal.h>
121783 -#if HP_TIMING_AVAIL
121784 +#if HP_TIMING_AVAIL && !defined HANDLED_CPUTIME
121785 /* Clock frequency of the processor. */
121786 static long int nsec;
121787 #endif
121788 @@ -38,24 +38,33 @@
121790 switch (clock_id)
121792 - case CLOCK_REALTIME:
121794 - long int clk_tck = sysconf (_SC_CLK_TCK);
121795 +#define HANDLE_REALTIME \
121796 + do { \
121797 + long int clk_tck = sysconf (_SC_CLK_TCK); \
121799 + if (__builtin_expect (clk_tck != -1, 1)) \
121800 + { \
121801 + /* This implementation assumes that the realtime clock has a \
121802 + resolution higher than 1 second. This is the case for any \
121803 + reasonable implementation. */ \
121804 + res->tv_sec = 0; \
121805 + res->tv_nsec = 1000000000 / clk_tck; \
121807 + retval = 0; \
121808 + } \
121809 + } while (0)
121811 - if (__builtin_expect (clk_tck != -1, 1))
121813 - /* This implementation assumes that the realtime clock has a
121814 - resolution higher than 1 second. This is the case for any
121815 - reasonable implementation. */
121816 - res->tv_sec = 0;
121817 - res->tv_nsec = 1000000000 / clk_tck;
121818 +#ifdef SYSDEP_GETRES
121819 + SYSDEP_GETRES;
121820 +#endif
121822 - retval = 0;
121825 +#ifndef HANDLED_REALTIME
121826 + case CLOCK_REALTIME:
121827 + HANDLE_REALTIME;
121828 break;
121829 +#endif /* handled REALTIME */
121831 -#if HP_TIMING_AVAIL
121832 +#if HP_TIMING_AVAIL && !defined HANDLED_CPUTIME
121833 case CLOCK_PROCESS_CPUTIME_ID:
121834 case CLOCK_THREAD_CPUTIME_ID:
121836 diff -u -udbrN glibc-2.3.2/sysdeps/posix/fpathconf.c glibc-2.3.2-200304020432/sysdeps/posix/fpathconf.c
121837 --- glibc-2.3.2/sysdeps/posix/fpathconf.c Sat Jul 7 21:21:27 2001
121838 +++ glibc-2.3.2-200304020432/sysdeps/posix/fpathconf.c Fri Mar 14 07:22:16 2003
121839 @@ -1,4 +1,5 @@
121840 -/* Copyright (C) 1991,1995,1996,1998,2000,2001 Free Software Foundation, Inc.
121841 +/* Copyright (C) 1991,1995,1996,1998,2000,2001,2003
121842 + Free Software Foundation, Inc.
121843 This file is part of the GNU C Library.
121845 The GNU C Library is free software; you can redistribute it and/or
121846 @@ -229,6 +230,10 @@
121847 /* In general there are no limits. If a system has one it should
121848 overwrite this case. */
121849 return -1;
121851 + case _PC_2_SYMLINKS:
121852 + /* Unix systems generally have symlinks. */
121853 + return 1;
121857 diff -u -udbrN glibc-2.3.2/sysdeps/posix/pathconf.c glibc-2.3.2-200304020432/sysdeps/posix/pathconf.c
121858 --- glibc-2.3.2/sysdeps/posix/pathconf.c Sat Jul 7 21:21:27 2001
121859 +++ glibc-2.3.2-200304020432/sysdeps/posix/pathconf.c Fri Mar 14 07:22:16 2003
121860 @@ -1,4 +1,5 @@
121861 -/* Copyright (C) 1991,1995,1996,1998,2000,2001 Free Software Foundation, Inc.
121862 +/* Copyright (C) 1991,1995,1996,1998,2000,2001,2003
121863 + Free Software Foundation, Inc.
121864 This file is part of the GNU C Library.
121866 The GNU C Library is free software; you can redistribute it and/or
121867 @@ -225,6 +226,10 @@
121868 /* In general there are no limits. If a system has one it should
121869 overwrite this case. */
121870 return -1;
121872 + case _PC_2_SYMLINKS:
121873 + /* Unix systems generally have symlinks. */
121874 + return 1;
121878 diff -u -udbrN glibc-2.3.2/sysdeps/posix/sysconf.c glibc-2.3.2-200304020432/sysdeps/posix/sysconf.c
121879 --- glibc-2.3.2/sysdeps/posix/sysconf.c Mon Feb 17 23:45:41 2003
121880 +++ glibc-2.3.2-200304020432/sysdeps/posix/sysconf.c Wed Mar 19 00:49:45 2003
121881 @@ -938,7 +938,7 @@
121882 #endif
121884 case _SC_MONOTONIC_CLOCK:
121885 -#ifdef _POSIX_MONOTONIC_CLOCK
121886 +#if _POSIX_MONOTONIC_CLOCK
121887 return _POSIX_MONOTONIC_CLOCK;
121888 #else
121889 return -1;
121890 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/powerpc/bits/atomic.h
121891 --- glibc-2.3.2/sysdeps/powerpc/bits/atomic.h Thu Jan 1 01:00:00 1970
121892 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/bits/atomic.h Fri Mar 28 08:17:02 2003
121893 @@ -0,0 +1,267 @@
121894 +/* Atomic operations. PowerPC version.
121895 + Copyright (C) 2003 Free Software Foundation, Inc.
121896 + This file is part of the GNU C Library.
121897 + Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
121899 + The GNU C Library is free software; you can redistribute it and/or
121900 + modify it under the terms of the GNU Lesser General Public
121901 + License as published by the Free Software Foundation; either
121902 + version 2.1 of the License, or (at your option) any later version.
121904 + The GNU C Library is distributed in the hope that it will be useful,
121905 + but WITHOUT ANY WARRANTY; without even the implied warranty of
121906 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
121907 + Lesser General Public License for more details.
121909 + You should have received a copy of the GNU Lesser General Public
121910 + License along with the GNU C Library; if not, write to the Free
121911 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
121912 + 02111-1307 USA. */
121914 +#include <stdint.h>
121916 +typedef int8_t atomic8_t;
121917 +typedef uint8_t uatomic8_t;
121918 +typedef int_fast8_t atomic_fast8_t;
121919 +typedef uint_fast8_t uatomic_fast8_t;
121921 +typedef int16_t atomic16_t;
121922 +typedef uint16_t uatomic16_t;
121923 +typedef int_fast16_t atomic_fast16_t;
121924 +typedef uint_fast16_t uatomic_fast16_t;
121926 +typedef int32_t atomic32_t;
121927 +typedef uint32_t uatomic32_t;
121928 +typedef int_fast32_t atomic_fast32_t;
121929 +typedef uint_fast32_t uatomic_fast32_t;
121931 +typedef int64_t atomic64_t;
121932 +typedef uint64_t uatomic64_t;
121933 +typedef int_fast64_t atomic_fast64_t;
121934 +typedef uint_fast64_t uatomic_fast64_t;
121936 +typedef intptr_t atomicptr_t;
121937 +typedef uintptr_t uatomicptr_t;
121938 +typedef intmax_t atomic_max_t;
121939 +typedef uintmax_t uatomic_max_t;
121942 +#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \
121943 + (abort (), 0)
121945 +#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \
121946 + (abort (), 0)
121948 +#ifdef UP
121949 +# define __ARCH_ACQ_INSTR ""
121950 +# define __ARCH_REL_INSTR ""
121951 +#else
121952 +# define __ARCH_ACQ_INSTR "isync"
121953 +# define __ARCH_REL_INSTR "sync"
121954 +#endif
121957 + * XXX At present these have both acquire and release semantics.
121958 + * Ultimately we should do separate _acq and _rel versions.
121961 +#ifdef __powerpc64__
121964 + * The 32-bit exchange_bool is different on powerpc64 because the subf
121965 + * does signed 64-bit arthmatic while the lwarx is 32-bit unsigned
121966 + * (a load word and zero (high 32) form).
121967 + * In powerpc64 register values are 64-bit by default, including oldval.
121968 + * Net we need to extend sign word the result of lwarx to 64-bit so the
121969 + * 64-bit subtract from gives the expected result and sets the condition
121970 + * correctly.
121972 +# define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \
121973 +({ \
121974 + unsigned int __tmp; \
121975 + __asm __volatile (__ARCH_REL_INSTR "\n" \
121976 + "1: lwarx %0,0,%1\n" \
121977 + " extsw %0,%0\n" \
121978 + " subf. %0,%2,%0\n" \
121979 + " bne 2f\n" \
121980 + " stwcx. %3,0,%1\n" \
121981 + " bne- 1b\n" \
121982 + "2: " __ARCH_ACQ_INSTR \
121983 + : "=&r" (__tmp) \
121984 + : "b" (mem), "r" (oldval), "r" (newval) \
121985 + : "cr0", "memory"); \
121986 + __tmp != 0; \
121989 +# define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \
121990 +({ \
121991 + unsigned long __tmp; \
121992 + __asm __volatile (__ARCH_REL_INSTR "\n" \
121993 + "1: ldarx %0,0,%1\n" \
121994 + " subf. %0,%2,%0\n" \
121995 + " bne 2f\n" \
121996 + " stdcx. %3,0,%1\n" \
121997 + " bne- 1b\n" \
121998 + "2: " __ARCH_ACQ_INSTR \
121999 + : "=&r" (__tmp) \
122000 + : "b" (mem), "r" (oldval), "r" (newval) \
122001 + : "cr0", "memory"); \
122002 + __tmp != 0; \
122005 +# define __arch_atomic_exchange_64(mem, value) \
122006 + ({ \
122007 + __typeof (*mem) __val; \
122008 + __asm __volatile (__ARCH_REL_INSTR "\n" \
122009 + "1: ldarx %0,0,%2\n" \
122010 + " stdcx. %3,0,%2\n" \
122011 + " bne- 1b" \
122012 + : "=&r" (__val), "=m" (*mem) \
122013 + : "b" (mem), "r" (value), "1" (*mem) \
122014 + : "cr0"); \
122015 + __val; \
122018 +# define __arch_atomic_exchange_and_add_64(mem, value) \
122019 + ({ \
122020 + __typeof (*mem) __val, __tmp; \
122021 + __asm __volatile ("1: ldarx %0,0,%3\n" \
122022 + " add %1,%0,%4\n" \
122023 + " stdcx. %1,0,%3\n" \
122024 + " bne- 1b" \
122025 + : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
122026 + : "b" (mem), "r" (value), "2" (*mem) \
122027 + : "cr0"); \
122028 + __val; \
122031 +# define __arch_atomic_decrement_if_positive_64(mem) \
122032 + ({ int __val, __tmp; \
122033 + __asm __volatile ("1: ldarx %0,0,%3\n" \
122034 + " cmpdi 0,%0,0\n" \
122035 + " addi %1,%0,-1\n" \
122036 + " ble 2f\n" \
122037 + " stdcx. %1,0,%3\n" \
122038 + " bne- 1b\n" \
122039 + "2: " __ARCH_ACQ_INSTR \
122040 + : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
122041 + : "b" (mem), "2" (*mem) \
122042 + : "cr0"); \
122043 + __val; \
122046 +#else /* powerpc32 */
122047 +# define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \
122048 +({ \
122049 + unsigned int __tmp; \
122050 + __asm __volatile (__ARCH_REL_INSTR "\n" \
122051 + "1: lwarx %0,0,%1\n" \
122052 + " subf. %0,%2,%0\n" \
122053 + " bne 2f\n" \
122054 + " stwcx. %3,0,%1\n" \
122055 + " bne- 1b\n" \
122056 + "2: " __ARCH_ACQ_INSTR \
122057 + : "=&r" (__tmp) \
122058 + : "b" (mem), "r" (oldval), "r" (newval) \
122059 + : "cr0", "memory"); \
122060 + __tmp != 0; \
122063 +# define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \
122064 + (abort (), 0)
122066 +# define __arch_atomic_exchange_64(mem, value) \
122067 + ({ abort (); (*mem) = (value); })
122068 +# define __arch_atomic_exchange_and_add_64(mem, value) \
122069 + ({ abort (); (*mem) = (value); })
122070 +# define __arch_atomic_decrement_if_positive_64(mem) \
122071 + ({ abort (); (*mem)--; })
122072 +#endif
122074 +#define __arch_atomic_exchange_32(mem, value) \
122075 + ({ \
122076 + __typeof (*mem) __val; \
122077 + __asm __volatile (__ARCH_REL_INSTR "\n" \
122078 + "1: lwarx %0,0,%2\n" \
122079 + " stwcx. %3,0,%2\n" \
122080 + " bne- 1b" \
122081 + : "=&r" (__val), "=m" (*mem) \
122082 + : "b" (mem), "r" (value), "1" (*mem) \
122083 + : "cr0"); \
122084 + __val; \
122087 +#define __arch_atomic_exchange_and_add_32(mem, value) \
122088 + ({ \
122089 + __typeof (*mem) __val, __tmp; \
122090 + __asm __volatile ("1: lwarx %0,0,%3\n" \
122091 + " add %1,%0,%4\n" \
122092 + " stwcx. %1,0,%3\n" \
122093 + " bne- 1b" \
122094 + : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
122095 + : "b" (mem), "r" (value), "2" (*mem) \
122096 + : "cr0"); \
122097 + __val; \
122100 +#define __arch_atomic_decrement_if_positive_32(mem) \
122101 + ({ int __val, __tmp; \
122102 + __asm __volatile ("1: lwarx %0,0,%3\n" \
122103 + " cmpwi 0,%0,0\n" \
122104 + " addi %1,%0,-1\n" \
122105 + " ble 2f\n" \
122106 + " stwcx. %1,0,%3\n" \
122107 + " bne- 1b\n" \
122108 + "2: " __ARCH_ACQ_INSTR \
122109 + : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
122110 + : "b" (mem), "2" (*mem) \
122111 + : "cr0"); \
122112 + __val; \
122116 +#define atomic_exchange(mem, value) \
122117 + ({ \
122118 + __typeof (*(mem)) __result; \
122119 + if (sizeof (*mem) == 4) \
122120 + __result = __arch_atomic_exchange_32 ((mem), (value)); \
122121 + else if (sizeof (*mem) == 8) \
122122 + __result = __arch_atomic_exchange_64 ((mem), (value)); \
122123 + else \
122124 + abort (); \
122125 + __result; \
122128 +#define atomic_exchange_and_add(mem, value) \
122129 + ({ \
122130 + __typeof (*(mem)) __result; \
122131 + if (sizeof (*mem) == 4) \
122132 + __result = __arch_atomic_exchange_and_add_32 ((mem), (value)); \
122133 + else if (sizeof (*mem) == 8) \
122134 + __result = __arch_atomic_exchange_and_add_64 ((mem), (value)); \
122135 + else \
122136 + abort (); \
122137 + __result; \
122141 +/* Decrement *MEM if it is > 0, and return the old value. */
122142 +#define atomic_decrement_if_positive(mem) \
122143 + ({ __typeof (*(mem)) __result; \
122144 + if (sizeof (*mem) == 4) \
122145 + __result = __arch_atomic_decrement_if_positive_32 (mem); \
122146 + else if (sizeof (*mem) == 8) \
122147 + __result = __arch_atomic_decrement_if_positive_64 (mem); \
122148 + else \
122149 + abort (); \
122150 + __result; \
122154 +#define atomic_full_barrier() __asm ("sync" ::: "memory")
122155 +#ifdef __powerpc64__
122156 +# define atomic_read_barrier() __asm ("lwsync" ::: "memory")
122157 +#else
122158 +# define atomic_read_barrier() __asm ("sync" ::: "memory")
122159 +#endif
122160 +#define atomic_write_barrier() __asm ("eieio" ::: "memory")
122161 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/dl-tls.h glibc-2.3.2-200304020432/sysdeps/powerpc/dl-tls.h
122162 --- glibc-2.3.2/sysdeps/powerpc/dl-tls.h Fri Feb 28 05:54:53 2003
122163 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/dl-tls.h Sun Mar 2 12:41:46 2003
122164 @@ -25,19 +25,25 @@
122165 unsigned long int ti_offset;
122166 } tls_index;
122169 -#ifdef SHARED
122171 -extern void *__tls_get_addr (tls_index *ti);
122173 /* The thread pointer points 0x7000 past the first static TLS block. */
122174 -# define TLS_TP_OFFSET 0x7000
122175 +#define TLS_TP_OFFSET 0x7000
122177 /* Dynamic thread vector pointers point 0x8000 past the start of each
122178 TLS block. */
122179 -# define TLS_DTV_OFFSET 0x8000
122180 +#define TLS_DTV_OFFSET 0x8000
122182 +/* Compute the value for a @tprel reloc. */
122183 +#define TLS_TPREL_VALUE(sym_map, sym, reloc) \
122184 + ((sym_map)->l_tls_offset + (sym)->st_value + (reloc)->r_addend \
122185 + - TLS_TCB_SIZE - TLS_TP_OFFSET)
122187 +/* Compute the value for a @dtprel reloc. */
122188 +#define TLS_DTPREL_VALUE(sym, reloc) \
122189 + ((sym)->st_value + (reloc)->r_addend - TLS_DTV_OFFSET)
122191 +#ifdef SHARED
122192 +extern void *__tls_get_addr (tls_index *ti);
122194 # define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET)
122195 # define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET)
122197 #endif
122198 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/elf/libc-start.c glibc-2.3.2-200304020432/sysdeps/powerpc/elf/libc-start.c
122199 --- glibc-2.3.2/sysdeps/powerpc/elf/libc-start.c Wed Feb 26 00:40:09 2003
122200 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/elf/libc-start.c Sun Mar 16 00:09:18 2003
122201 @@ -1,4 +1,4 @@
122202 -/* Copyright (C) 1998,2000,2001,2002 Free Software Foundation, Inc.
122203 +/* Copyright (C) 1998,2000,2001,2002,2003 Free Software Foundation, Inc.
122204 This file is part of the GNU C Library.
122206 The GNU C Library is free software; you can redistribute it and/or
122207 @@ -22,31 +22,9 @@
122208 #include <bp-start.h>
122209 #include <bp-sym.h>
122211 -extern void __libc_init_first (int argc, char **argv, char **envp);
122213 extern int __cache_line_size;
122214 weak_extern (__cache_line_size)
122216 -extern int __libc_multiple_libcs;
122217 -extern void *__libc_stack_end;
122219 -#ifndef SHARED
122220 -# include <tls.h>
122221 -extern void __pthread_initialize_minimal (void)
122222 -# if !(USE_TLS - 0) && !defined NONTLS_INIT_TP
122223 - __attribute__ ((weak))
122224 -# endif
122226 -#endif
122228 -struct startup_info
122230 - void *__unbounded sda_base;
122231 - int (*main) (int, char **, char **, void *);
122232 - int (*init) (int, char **, char **, void *);
122233 - void (*fini) (void);
122236 /* Scan the Aux Vector for the "Data Cache Block Size" entry. If found
122237 verify that the static extern __cache_line_size is defined by checking
122238 for not NULL. If it is defined then assign the cache block size
122239 @@ -66,6 +44,24 @@
122240 break;
122243 +/* This is used in sysdeps/generic/libc-start.c. */
122244 +#define AUX_VECTOR_INIT __aux_init_cache
122246 +/* The main work is done in the generic function. */
122247 +#define LIBC_START_MAIN generic_start_main
122248 +#define LIBC_START_MAIN_AUXVEC_ARG
122249 +#define MAIN_AUXVEC_ARG
122250 +#define INIT_MAIN_ARGS
122251 +#include <sysdeps/generic/libc-start.c>
122254 +struct startup_info
122256 + void *__unbounded sda_base;
122257 + int (*main) (int, char **, char **, void *);
122258 + int (*init) (int, char **, char **, void *);
122259 + void (*fini) (void);
122264 @@ -73,7 +69,8 @@
122265 BPs in the arglist of startup_info.main and startup_info.init. */
122266 BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
122267 char *__unbounded *__unbounded ubp_ev,
122268 - ElfW(auxv_t) *__unbounded auxvec, void (*rtld_fini) (void),
122269 + ElfW(auxv_t) *__unbounded auxvec,
122270 + void (*rtld_fini) (void),
122271 struct startup_info *__unbounded stinfo,
122272 char *__unbounded *__unbounded stack_on_entry)
122274 @@ -83,15 +80,6 @@
122275 # define argv ubp_av
122276 #endif
122278 -#ifndef SHARED
122279 - /* The next variable is only here to work around a bug in gcc <= 2.7.2.2.
122280 - If the address would be taken inside the expression the optimizer
122281 - would try to be too smart and throws it away. Grrr. */
122282 - int *dummy_addr = &_dl_starting_up;
122284 - __libc_multiple_libcs = dummy_addr && !_dl_starting_up;
122285 -#endif
122287 /* the PPC SVR4 ABI says that the top thing on the stack will
122288 be a NULL pointer, so if not we assume that we're being called
122289 as a statically-linked program by Linux... */
122290 @@ -110,78 +98,14 @@
122291 while (*temp != NULL)
122292 ++temp;
122293 auxvec = (ElfW(auxv_t) *)++temp;
122295 -# ifndef SHARED
122296 - _dl_aux_init (auxvec);
122297 -# endif
122298 #endif
122299 rtld_fini = NULL;
122302 - INIT_ARGV_and_ENVIRON;
122304 /* Initialize the __cache_line_size variable from the aux vector. */
122305 - __aux_init_cache(auxvec);
122307 - /* Store something that has some relationship to the end of the
122308 - stack, for backtraces. This variable should be thread-specific.
122309 - Use +8 so it works for both 32- and 64-bit. */
122310 - __libc_stack_end = stack_on_entry + 8;
122312 -#ifndef SHARED
122313 -# ifdef DL_SYSDEP_OSCHECK
122314 - if (!__libc_multiple_libcs)
122316 - /* This needs to run to initiliaze _dl_osversion before TLS
122317 - setup might check it. */
122318 - DL_SYSDEP_OSCHECK (__libc_fatal);
122320 -# endif
122321 - /* Initialize the thread library at least a bit since the libgcc
122322 - functions are using thread functions if these are available and
122323 - we need to setup errno. If there is no thread library and we
122324 - handle TLS the function is defined in the libc to initialized the
122325 - TLS handling. */
122326 -# if !(USE_TLS - 0) && !defined NONTLS_INIT_TP
122327 - if (__pthread_initialize_minimal)
122328 -# endif
122329 - __pthread_initialize_minimal ();
122331 - /* Some security at this point. Prevent starting a SUID binary where
122332 - the standard file descriptors are not opened. We have to do this
122333 - only for statically linked applications since otherwise the dynamic
122334 - loader did the work already. */
122335 - if (__builtin_expect (__libc_enable_secure, 0))
122336 - __libc_check_standard_fds ();
122337 -#endif
122339 - /* Register the destructor of the dynamic linker if there is any. */
122340 - if (rtld_fini != NULL)
122341 - __cxa_atexit ((void (*) (void *)) rtld_fini, NULL, NULL);
122343 - /* Call the initializer of the libc. */
122344 -#ifdef SHARED
122345 - if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
122346 - _dl_debug_printf ("\ninitialize libc\n\n");
122347 -#endif
122348 - __libc_init_first (argc, argv, __environ);
122350 - /* Register the destructor of the program, if any. */
122351 - if (stinfo->fini)
122352 - __cxa_atexit ((void (*) (void *)) stinfo->fini, NULL, NULL);
122354 - /* Call the initializer of the program, if any. */
122355 -#ifdef SHARED
122356 - if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
122357 - _dl_debug_printf ("\ninitialize program: %s\n\n", argv[0]);
122358 -#endif
122359 - if (stinfo->init)
122360 - stinfo->init (argc, argv, __environ, auxvec);
122362 -#ifdef SHARED
122363 - if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
122364 - _dl_debug_printf ("\ntransferring control: %s\n\n", argv[0]);
122365 -#endif
122366 + __aux_init_cache (auxvec);
122368 - exit (stinfo->main (argc, argv, __environ, auxvec));
122369 + return generic_start_main (stinfo->main, argc, ubp_av, auxvec,
122370 + stinfo->init, stinfo->fini, rtld_fini,
122371 + stack_on_entry);
122373 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/powerpc/fpu/libm-test-ulps
122374 --- glibc-2.3.2/sysdeps/powerpc/fpu/libm-test-ulps Tue Sep 3 00:15:28 2002
122375 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/fpu/libm-test-ulps Sun Mar 23 01:52:10 2003
122376 @@ -91,7 +91,7 @@
122377 idouble: 1
122379 # ccos
122380 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
122381 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
122382 float: 1
122383 ifloat: 1
122384 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
122385 @@ -104,10 +104,10 @@
122386 ifloat: 1
122388 # ccosh
122389 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
122390 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
122391 float: 1
122392 ifloat: 1
122393 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
122394 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
122395 float: 1
122396 ifloat: 1
122397 Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
122398 @@ -142,7 +142,7 @@
122399 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
122400 float: 1
122401 ifloat: 1
122402 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
122403 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
122404 double: 1
122405 float: 5
122406 idouble: 1
122407 @@ -236,7 +236,7 @@
122408 ifloat: 2
122410 # csinh
122411 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
122412 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
122413 double: 1
122414 idouble: 1
122415 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
122416 @@ -255,7 +255,7 @@
122417 ifloat: 1
122419 # ctan
122420 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
122421 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
122422 double: 1
122423 idouble: 1
122424 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
122425 @@ -263,7 +263,7 @@
122426 idouble: 1
122428 # ctanh
122429 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
122430 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
122431 double: 1
122432 float: 2
122433 idouble: 1
122434 @@ -437,12 +437,12 @@
122435 ifloat: 1
122437 # lgamma
122438 -Test "lgamma (0.7) == 0.26086724653166651439":
122439 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
122440 double: 1
122441 float: 1
122442 idouble: 1
122443 ifloat: 1
122444 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
122445 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
122446 double: 1
122447 float: 2
122448 idouble: 1
122449 @@ -497,7 +497,7 @@
122450 Test "tgamma (0.5) == sqrt (pi)":
122451 float: 1
122452 ifloat: 1
122453 -Test "tgamma (0.7) == 1.29805533264755778568":
122454 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
122455 double: 1
122456 float: 1
122457 idouble: 1
122458 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/fpu/w_sqrt.c glibc-2.3.2-200304020432/sysdeps/powerpc/fpu/w_sqrt.c
122459 --- glibc-2.3.2/sysdeps/powerpc/fpu/w_sqrt.c Tue May 14 22:46:17 2002
122460 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/fpu/w_sqrt.c Fri Mar 7 22:18:23 2003
122461 @@ -1,5 +1,5 @@
122462 -/* Single-precision floating point square root.
122463 - Copyright (C) 1997, 2002 Free Software Foundation, Inc.
122464 +/* Double-precision floating point square root.
122465 + Copyright (C) 1997, 2002, 2003 Free Software Foundation, Inc.
122466 This file is part of the GNU C Library.
122468 The GNU C Library is free software; you can redistribute it and/or
122469 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/nofpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/powerpc/nofpu/libm-test-ulps
122470 --- glibc-2.3.2/sysdeps/powerpc/nofpu/libm-test-ulps Sat Oct 19 22:06:29 2002
122471 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/nofpu/libm-test-ulps Sun Mar 23 01:52:10 2003
122472 @@ -94,7 +94,7 @@
122473 idouble: 1
122475 # ccos
122476 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
122477 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
122478 float: 1
122479 ifloat: 1
122480 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
122481 @@ -107,10 +107,10 @@
122482 ifloat: 1
122484 # ccosh
122485 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
122486 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
122487 float: 1
122488 ifloat: 1
122489 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
122490 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
122491 float: 1
122492 ifloat: 1
122493 Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
122494 @@ -145,7 +145,7 @@
122495 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
122496 float: 1
122497 ifloat: 1
122498 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
122499 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
122500 double: 1
122501 float: 5
122502 idouble: 1
122503 @@ -239,7 +239,7 @@
122504 ifloat: 2
122506 # csinh
122507 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
122508 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
122509 double: 1
122510 idouble: 1
122511 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
122512 @@ -258,7 +258,7 @@
122513 ifloat: 1
122515 # ctan
122516 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
122517 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
122518 double: 1
122519 idouble: 1
122520 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
122521 @@ -266,7 +266,7 @@
122522 idouble: 1
122524 # ctanh
122525 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
122526 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
122527 double: 1
122528 float: 2
122529 idouble: 1
122530 @@ -453,12 +453,12 @@
122531 ifloat: 2
122533 # lgamma
122534 -Test "lgamma (0.7) == 0.26086724653166651439":
122535 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
122536 double: 1
122537 float: 1
122538 idouble: 1
122539 ifloat: 1
122540 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
122541 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
122542 double: 1
122543 float: 2
122544 idouble: 1
122545 @@ -513,7 +513,7 @@
122546 Test "tgamma (0.5) == sqrt (pi)":
122547 float: 1
122548 ifloat: 1
122549 -Test "tgamma (0.7) == 1.29805533264755778568":
122550 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
122551 double: 1
122552 float: 1
122553 idouble: 1
122554 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc32/atomicity.h glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/atomicity.h
122555 --- glibc-2.3.2/sysdeps/powerpc/powerpc32/atomicity.h Thu Feb 20 23:11:52 2003
122556 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/atomicity.h Thu Jan 1 01:00:00 1970
122557 @@ -1,98 +0,0 @@
122558 -/* Low-level functions for atomic operations. PowerPC version.
122559 - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
122560 - This file is part of the GNU C Library.
122562 - The GNU C Library is free software; you can redistribute it and/or
122563 - modify it under the terms of the GNU Lesser General Public
122564 - License as published by the Free Software Foundation; either
122565 - version 2.1 of the License, or (at your option) any later version.
122567 - The GNU C Library is distributed in the hope that it will be useful,
122568 - but WITHOUT ANY WARRANTY; without even the implied warranty of
122569 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
122570 - Lesser General Public License for more details.
122572 - You should have received a copy of the GNU Lesser General Public
122573 - License along with the GNU C Library; if not, write to the Free
122574 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
122575 - 02111-1307 USA. */
122577 -#ifndef _ATOMICITY_H
122578 -#define _ATOMICITY_H 1
122580 -#include <inttypes.h>
122582 -static inline int
122583 -__attribute__ ((unused))
122584 -exchange_and_add (volatile uint32_t *mem, int val)
122586 - int tmp, result;
122587 - __asm__ ("\n\
122588 -0: lwarx %0,0,%2 \n\
122589 - add%I3 %1,%0,%3 \n\
122590 - stwcx. %1,0,%2 \n\
122591 - bne- 0b \n\
122592 -" : "=&b"(result), "=&r"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
122593 - return result;
122596 -static inline void
122597 -__attribute__ ((unused))
122598 -atomic_add (volatile uint32_t *mem, int val)
122600 - int tmp;
122601 - __asm__ ("\n\
122602 -0: lwarx %0,0,%1 \n\
122603 - add%I2 %0,%0,%2 \n\
122604 - stwcx. %0,0,%1 \n\
122605 - bne- 0b \n\
122606 -" : "=&b"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
122609 -static inline int
122610 -__attribute__ ((unused))
122611 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
122613 - int result;
122614 - __asm__ ("\n\
122615 -0: lwarx %0,0,%1 \n\
122616 - sub%I2c. %0,%0,%2 \n\
122617 - cntlzw %0,%0 \n\
122618 - bne- 1f \n\
122619 - stwcx. %3,0,%1 \n\
122620 - bne- 0b \n\
122621 -1: \n\
122622 -" : "=&b"(result) : "r"(p), "Ir"(oldval), "r"(newval) : "cr0", "memory");
122623 - return result >> 5;
122626 -static inline long int
122627 -__attribute__ ((unused))
122628 -always_swap (volatile long int *p, long int newval)
122630 - long int result;
122631 - __asm__ ("\n\
122632 -0: lwarx %0,0,%1 \n\
122633 - stwcx. %2,0,%1 \n\
122634 - bne- 0b \n\
122635 -" : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory");
122636 - return result;
122639 -static inline int
122640 -__attribute__ ((unused))
122641 -test_and_set (volatile long int *p, long int newval)
122643 - int result;
122644 - __asm__ ("\n\
122645 -0: lwarx %0,0,%1 \n\
122646 - cmpwi %0,0 \n\
122647 - bne- 1f \n\
122648 - stwcx. %2,0,%1 \n\
122649 - bne- 0b \n\
122650 -1: \n\
122651 -" : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory");
122652 - return result;
122655 -#endif /* atomicity.h */
122656 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc32/dl-machine.c glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/dl-machine.c
122657 --- glibc-2.3.2/sysdeps/powerpc/powerpc32/dl-machine.c Thu Nov 21 20:09:30 2002
122658 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/dl-machine.c Mon Mar 3 02:04:53 2003
122659 @@ -1,5 +1,5 @@
122660 /* Machine-dependent ELF dynamic relocation functions. PowerPC version.
122661 - Copyright (C) 1995-2001, 2002 Free Software Foundation, Inc.
122662 + Copyright (C) 1995-2001,2002,2003 Free Software Foundation, Inc.
122663 This file is part of the GNU C Library.
122665 The GNU C Library is free software; you can redistribute it and/or
122666 @@ -368,8 +368,8 @@
122667 return finaladdr;
122670 -static void
122671 -dl_reloc_overflow (struct link_map *map,
122672 +void
122673 +_dl_reloc_overflow (struct link_map *map,
122674 const char *name,
122675 Elf32_Addr *const reloc_addr,
122676 const Elf32_Sym *sym,
122677 @@ -423,19 +423,19 @@
122679 case R_PPC_ADDR24:
122680 if (__builtin_expect (finaladdr > 0x01fffffc && finaladdr < 0xfe000000, 0))
122681 - dl_reloc_overflow (map, "R_PPC_ADDR24", reloc_addr, sym, refsym);
122682 + _dl_reloc_overflow (map, "R_PPC_ADDR24", reloc_addr, sym, refsym);
122683 *reloc_addr = (*reloc_addr & 0xfc000003) | (finaladdr & 0x3fffffc);
122684 break;
122686 case R_PPC_ADDR16:
122687 if (__builtin_expect (finaladdr > 0x7fff && finaladdr < 0xffff8000, 0))
122688 - dl_reloc_overflow (map, "R_PPC_ADDR16", reloc_addr, sym, refsym);
122689 + _dl_reloc_overflow (map, "R_PPC_ADDR16", reloc_addr, sym, refsym);
122690 *(Elf32_Half*) reloc_addr = finaladdr;
122691 break;
122693 case R_PPC_UADDR16:
122694 if (__builtin_expect (finaladdr > 0x7fff && finaladdr < 0xffff8000, 0))
122695 - dl_reloc_overflow (map, "R_PPC_UADDR16", reloc_addr, sym, refsym);
122696 + _dl_reloc_overflow (map, "R_PPC_UADDR16", reloc_addr, sym, refsym);
122697 ((char *) reloc_addr)[0] = finaladdr >> 8;
122698 ((char *) reloc_addr)[1] = finaladdr;
122699 break;
122700 @@ -456,7 +456,7 @@
122701 case R_PPC_ADDR14_BRTAKEN:
122702 case R_PPC_ADDR14_BRNTAKEN:
122703 if (__builtin_expect (finaladdr > 0x7fff && finaladdr < 0xffff8000, 0))
122704 - dl_reloc_overflow (map, "R_PPC_ADDR14", reloc_addr, sym, refsym);
122705 + _dl_reloc_overflow (map, "R_PPC_ADDR14", reloc_addr, sym, refsym);
122706 *reloc_addr = (*reloc_addr & 0xffff0003) | (finaladdr & 0xfffc);
122707 if (rinfo != R_PPC_ADDR14)
122708 *reloc_addr = ((*reloc_addr & 0xffdfffff)
122709 @@ -468,7 +468,7 @@
122711 Elf32_Sword delta = finaladdr - (Elf32_Word) reloc_addr;
122712 if (delta << 6 >> 6 != delta)
122713 - dl_reloc_overflow (map, "R_PPC_REL24", reloc_addr, sym, refsym);
122714 + _dl_reloc_overflow (map, "R_PPC_REL24", reloc_addr, sym, refsym);
122715 *reloc_addr = (*reloc_addr & 0xfc000003) | (delta & 0x3fffffc);
122717 break;
122718 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc32/dl-machine.h glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/dl-machine.h
122719 --- glibc-2.3.2/sysdeps/powerpc/powerpc32/dl-machine.h Thu Jan 30 21:25:20 2003
122720 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/dl-machine.h Fri Mar 28 01:31:50 2003
122721 @@ -23,6 +23,7 @@
122722 #define ELF_MACHINE_NAME "powerpc"
122724 #include <assert.h>
122725 +#include <dl-tls.h>
122727 /* Return nonzero iff ELF header is compatible with the running host. */
122728 static inline int
122729 @@ -275,11 +276,21 @@
122730 /* We never want to use a PLT entry as the destination of a
122731 reloc, when what is being relocated is a branch. This is
122732 partly for efficiency, but mostly so we avoid loops. */
122733 +#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
122734 #define elf_machine_type_class(type) \
122735 ((((type) == R_PPC_JMP_SLOT \
122736 || (type) == R_PPC_REL24 \
122737 + || ((type) >= R_PPC_DTPMOD32 /* contiguous TLS */ \
122738 + && (type) <= R_PPC_DTPREL32) \
122739 || (type) == R_PPC_ADDR24) * ELF_RTYPE_CLASS_PLT) \
122740 | (((type) == R_PPC_COPY) * ELF_RTYPE_CLASS_COPY))
122741 +#else
122742 +#define elf_machine_type_class(type) \
122743 + ((((type) == R_PPC_JMP_SLOT \
122744 + || (type) == R_PPC_REL24 \
122745 + || (type) == R_PPC_ADDR24) * ELF_RTYPE_CLASS_PLT) \
122746 + | (((type) == R_PPC_COPY) * ELF_RTYPE_CLASS_COPY))
122747 +#endif
122749 /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
122750 #define ELF_MACHINE_JMP_SLOT R_PPC_JMP_SLOT
122751 @@ -329,7 +340,14 @@
122752 const Elf32_Sym *refsym,
122753 Elf32_Addr *const reloc_addr,
122754 Elf32_Addr finaladdr,
122755 - int rinfo);
122756 + int rinfo) attribute_hidden;
122758 +/* Call _dl_signal_error when a resolved value overflows a relocated area. */
122759 +extern void _dl_reloc_overflow (struct link_map *map,
122760 + const char *name,
122761 + Elf32_Addr *const reloc_addr,
122762 + const Elf32_Sym *sym,
122763 + const Elf32_Sym *refsym) attribute_hidden;
122765 /* Perform the relocation specified by RELOC and SYM (which is fully resolved).
122766 LOADADDR is the load address of the object; INFO is an array indexed
122767 @@ -341,44 +359,40 @@
122768 Elf32_Addr *const reloc_addr)
122770 const Elf32_Sym *const refsym = sym;
122771 - Elf32_Word finaladdr;
122772 - const int rinfo = ELF32_R_TYPE (reloc->r_info);
122774 -#ifndef RESOLVE_CONFLICT_FIND_MAP
122775 - if (__builtin_expect (rinfo == R_PPC_NONE, 0))
122776 - return;
122777 + Elf32_Addr value;
122778 + const int r_type = ELF32_R_TYPE (reloc->r_info);
122779 +#if defined USE_TLS && !defined RTLD_BOOTSTRAP
122780 + struct link_map *sym_map;
122781 +#endif
122783 - /* The condition on the next two lines is a hack around a bug in Solaris
122784 - tools on Sparc. It's not clear whether it should really be here at all,
122785 - but if not the binutils need to be changed. */
122786 - if (rinfo == R_PPC_RELATIVE
122787 - || (sym->st_shndx != SHN_UNDEF
122788 - && ELF32_ST_BIND (sym->st_info) == STB_LOCAL))
122789 + if (r_type == R_PPC_RELATIVE)
122791 - /* Has already been relocated. */
122792 - Elf32_Word loadbase = map->l_addr;
122793 - finaladdr = loadbase + reloc->r_addend;
122794 + *reloc_addr = map->l_addr + reloc->r_addend;
122795 + return;
122798 + if (__builtin_expect (r_type == R_PPC_NONE, 0))
122799 + return;
122801 + /* binutils on ppc32 includes st_value in r_addend for relocations
122802 + against local symbols. */
122803 + if (__builtin_expect (ELF32_ST_BIND (sym->st_info) == STB_LOCAL, 0)
122804 + && sym->st_shndx != SHN_UNDEF)
122805 + value = map->l_addr;
122808 - Elf32_Word loadbase
122809 - = (Elf32_Word) (char *) (RESOLVE (&sym, version,
122810 - ELF32_R_TYPE(reloc->r_info)));
122811 - if (sym == NULL)
122813 - /* Weak symbol that wasn't actually defined anywhere. */
122814 - assert (loadbase == 0);
122815 - finaladdr = reloc->r_addend;
122817 - else
122818 - finaladdr = (loadbase + (Elf32_Word) (char *) sym->st_value
122819 - + reloc->r_addend);
122821 +#if defined USE_TLS && !defined RTLD_BOOTSTRAP
122822 + sym_map = RESOLVE_MAP (&sym, version, r_type);
122823 + value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
122824 #else
122825 - finaladdr = reloc->r_addend;
122826 - if (rinfo == R_PPC_JMP_SLOT)
122827 - RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr);
122828 + value = RESOLVE (&sym, version, r_type);
122829 +# ifndef RTLD_BOOTSTRAP
122830 + if (sym != NULL)
122831 +# endif
122832 + value += sym->st_value;
122833 #endif
122835 + value += reloc->r_addend;
122837 /* A small amount of code is duplicated here for speed. In libc,
122838 more than 90% of the relocs are R_PPC_RELATIVE; in the X11 shared
122839 @@ -386,15 +400,90 @@
122840 R_PPC_ADDR32, and 16% are R_PPC_JMP_SLOT (which this routine
122841 wouldn't usually handle). As an bonus, doing this here allows
122842 the switch statement in __process_machine_rela to work. */
122843 - if (rinfo == R_PPC_RELATIVE
122844 - || rinfo == R_PPC_GLOB_DAT
122845 - || rinfo == R_PPC_ADDR32)
122846 + switch (r_type)
122848 - *reloc_addr = finaladdr;
122849 + case R_PPC_GLOB_DAT:
122850 + case R_PPC_ADDR32:
122851 + *reloc_addr = value;
122852 + break;
122854 +#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
122855 + case R_PPC_DTPMOD32:
122856 +# ifdef RTLD_BOOTSTRAP
122857 + /* During startup the dynamic linker is always index 1. */
122858 + *reloc_addr = 1;
122859 +# else
122860 + /* Get the information from the link map returned by the
122861 + RESOLVE_MAP function. */
122862 + if (sym_map != NULL)
122863 + *reloc_addr = sym_map->l_tls_modid;
122864 +# endif
122865 + break;
122867 +# ifdef RTLD_BOOTSTRAP
122868 +# define NOT_BOOTSTRAP 0
122869 +# else
122870 +# define NOT_BOOTSTRAP 1
122871 +# endif
122872 +# define DO_TLS_RELOC(suffix) \
122873 + case R_PPC_DTPREL##suffix: \
122874 + /* During relocation all TLS symbols are defined and used. \
122875 + Therefore the offset is already correct. */ \
122876 + if (NOT_BOOTSTRAP) \
122877 + do_reloc##suffix ("R_PPC_DTPREL"#suffix, \
122878 + TLS_DTPREL_VALUE (sym, reloc)); \
122879 + break; \
122880 + case R_PPC_TPREL##suffix: \
122881 + if (!NOT_BOOTSTRAP || sym_map) \
122882 + { \
122883 + if (NOT_BOOTSTRAP) \
122884 + CHECK_STATIC_TLS (map, sym_map); \
122885 + do_reloc##suffix ("R_PPC_TPREL"#suffix, \
122886 + TLS_TPREL_VALUE (sym_map, sym, reloc)); \
122887 + } \
122888 + break;
122890 + inline void do_reloc32 (const char *r_name, Elf32_Addr value)
122892 + *reloc_addr = value;
122894 - else
122895 + DO_TLS_RELOC (32)
122896 +# ifndef RTLD_BOOTSTRAP /* PIC code like ld.so doesn't use these. */
122897 + inline void do_reloc16 (const char *r_name, Elf32_Addr value)
122899 + if (__builtin_expect (value > 0x7fff && value < 0xffff8000, 0))
122900 + _dl_reloc_overflow (map, "R_PPC_ADDR16", reloc_addr, sym, refsym);
122901 + *(Elf32_Half *) reloc_addr = value;
122903 + inline void do_reloc16_LO (const char *r_name, Elf32_Addr value)
122905 + *(Elf32_Half *) reloc_addr = value;
122907 + inline void do_reloc16_HI (const char *r_name, Elf32_Addr value)
122909 + *(Elf32_Half *) reloc_addr = value >> 16;
122911 + inline void do_reloc16_HA (const char *r_name, Elf32_Addr value)
122913 + *(Elf32_Half *) reloc_addr = (value + 0x8000) >> 16;
122915 + DO_TLS_RELOC (16)
122916 + DO_TLS_RELOC (16_LO)
122917 + DO_TLS_RELOC (16_HI)
122918 + DO_TLS_RELOC (16_HA)
122919 +# endif
122920 +#endif /* USE_TLS etc. */
122922 +#ifdef RESOLVE_CONFLICT_FIND_MAP
122923 + case R_PPC_JMP_SLOT:
122924 + RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr);
122925 + /* FALLTHROUGH */
122926 +#endif
122928 + default:
122929 __process_machine_rela (map, reloc, sym, refsym,
122930 - reloc_addr, finaladdr, rinfo);
122931 + reloc_addr, value, r_type);
122935 static inline void
122936 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc32/elf/configure glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/elf/configure
122937 --- glibc-2.3.2/sysdeps/powerpc/powerpc32/elf/configure Thu Jan 1 01:00:00 1970
122938 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/elf/configure Mon Mar 3 22:20:51 2003
122939 @@ -0,0 +1,52 @@
122940 +# This file is generated from configure.in by Autoconf. DO NOT EDIT!
122941 + # Local configure fragment for sysdeps/powerpc32/elf.
122943 +if test "$usetls" != no; then
122944 +# Check for support of thread-local storage handling in assembler and
122945 +# linker.
122946 +echo "$as_me:$LINENO: checking for powerpc32 TLS support" >&5
122947 +echo $ECHO_N "checking for powerpc32 TLS support... $ECHO_C" >&6
122948 +if test "${libc_cv_powerpc32_tls+set}" = set; then
122949 + echo $ECHO_N "(cached) $ECHO_C" >&6
122950 +else
122951 + cat > conftest.s <<\EOF
122952 + .section ".tdata","awT",@progbits
122953 +x: .long 1
122954 +x1: .long 1
122955 +x2: .long 1
122956 + .text
122957 + addi 3,31,x@got@tlsgd
122958 + addi 3,31,x1@got@tlsld
122959 + addi 9,3,x1@dtprel
122960 + addis 9,3,x2@dtprel@ha
122961 + addi 9,9,x2@dtprel@l
122962 + lwz 0,x1@dtprel(3)
122963 + addis 9,3,x2@dtprel@ha
122964 + lwz 0,x2@dtprel@l(9)
122965 + lwz 9,x3@got@tprel(31)
122966 + add 9,9,x@tls
122967 + addi 9,2,x1@tprel
122968 + addis 9,2,x2@tprel@ha
122969 + addi 9,9,x2@tprel@l
122971 +if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
122972 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
122973 + (eval $ac_try) 2>&5
122974 + ac_status=$?
122975 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
122976 + (exit $ac_status); }; }; then
122977 + libc_cv_powerpc32_tls=yes
122978 +else
122979 + libc_cv_powerpc32_tls=no
122981 +rm -f conftest*
122983 +echo "$as_me:$LINENO: result: $libc_cv_powerpc32_tls" >&5
122984 +echo "${ECHO_T}$libc_cv_powerpc32_tls" >&6
122985 +if test $libc_cv_powerpc32_tls = yes; then
122986 + cat >>confdefs.h <<\_ACEOF
122987 +#define HAVE_TLS_SUPPORT 1
122988 +_ACEOF
122992 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc32/elf/configure.in glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/elf/configure.in
122993 --- glibc-2.3.2/sysdeps/powerpc/powerpc32/elf/configure.in Thu Jan 1 01:00:00 1970
122994 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/elf/configure.in Mon Mar 3 22:20:51 2003
122995 @@ -0,0 +1,38 @@
122996 +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
122997 +# Local configure fragment for sysdeps/powerpc32/elf.
122999 +if test "$usetls" != no; then
123000 +# Check for support of thread-local storage handling in assembler and
123001 +# linker.
123002 +AC_CACHE_CHECK(for powerpc32 TLS support, libc_cv_powerpc32_tls, [dnl
123003 +cat > conftest.s <<\EOF
123004 + .section ".tdata","awT",@progbits
123005 +x: .long 1
123006 +x1: .long 1
123007 +x2: .long 1
123008 + .text
123009 + addi 3,31,x@got@tlsgd
123010 + addi 3,31,x1@got@tlsld
123011 + addi 9,3,x1@dtprel
123012 + addis 9,3,x2@dtprel@ha
123013 + addi 9,9,x2@dtprel@l
123014 + lwz 0,x1@dtprel(3)
123015 + addis 9,3,x2@dtprel@ha
123016 + lwz 0,x2@dtprel@l(9)
123017 + lwz 9,x3@got@tprel(31)
123018 + add 9,9,x@tls
123019 + addi 9,2,x1@tprel
123020 + addis 9,2,x2@tprel@ha
123021 + addi 9,9,x2@tprel@l
123024 +if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
123025 + libc_cv_powerpc32_tls=yes
123026 +else
123027 + libc_cv_powerpc32_tls=no
123029 +rm -f conftest*])
123030 +if test $libc_cv_powerpc32_tls = yes; then
123031 + AC_DEFINE(HAVE_TLS_SUPPORT)
123034 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc32/memset.S glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/memset.S
123035 --- glibc-2.3.2/sysdeps/powerpc/powerpc32/memset.S Fri Aug 23 21:46:49 2002
123036 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/memset.S Sun Mar 16 00:09:14 2003
123037 @@ -1,5 +1,5 @@
123038 /* Optimized memset implementation for PowerPC.
123039 - Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
123040 + Copyright (C) 1997, 1999, 2000, 2003 Free Software Foundation, Inc.
123041 This file is part of the GNU C Library.
123043 The GNU C Library is free software; you can redistribute it and/or
123044 @@ -27,13 +27,8 @@
123045 variable. */
123047 .globl __cache_line_size
123048 - .section ".data","aw"
123049 - .align 2
123050 - .type __cache_line_size,@object
123051 - .size __cache_line_size,4
123052 -__cache_line_size:
123053 - .long 0
123054 - .section ".text"
123055 + .lcomm __cache_line_size,4,4
123057 /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5]));
123058 Returns 's'.
123060 @@ -42,6 +37,7 @@
123061 There is a special case for setting whole cache lines to 0, which
123062 takes advantage of the dcbz instruction. */
123064 + .section ".text"
123065 EALIGN (BP_SYM (memset), 5, 1)
123067 #define rTMP r0
123068 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc32/sysdep.h glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/sysdep.h
123069 --- glibc-2.3.2/sysdeps/powerpc/powerpc32/sysdep.h Thu Feb 20 21:26:54 2003
123070 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc32/sysdep.h Sun Mar 23 20:42:22 2003
123071 @@ -131,6 +131,19 @@
123072 #define PSEUDO_END(name) \
123073 END (name)
123075 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
123076 + .section ".text"; \
123077 + ENTRY (name) \
123078 + DO_CALL (SYS_ify (syscall_name));
123080 +#define PSEUDO_RET_NOERRNO \
123081 + blr
123082 +#define ret_NOERRNO PSEUDO_RET_NOERRNO
123084 +#undef PSEUDO_END_NOERRNO
123085 +#define PSEUDO_END_NOERRNO(name) \
123086 + END (name)
123088 /* Local labels stripped out by the linker. */
123089 #undef L
123090 #define L(x) .L##x
123091 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc64/atomicity.h glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/atomicity.h
123092 --- glibc-2.3.2/sysdeps/powerpc/powerpc64/atomicity.h Wed Sep 18 01:50:02 2002
123093 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/atomicity.h Thu Jan 1 01:00:00 1970
123094 @@ -1,132 +0,0 @@
123095 -/* Low-level functions for atomic operations. PowerPC64 version.
123096 - Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
123097 - This file is part of the GNU C Library.
123099 - The GNU C Library is free software; you can redistribute it and/or
123100 - modify it under the terms of the GNU Library General Public License as
123101 - published by the Free Software Foundation; either version 2 of the
123102 - License, or (at your option) any later version.
123104 - The GNU C Library is distributed in the hope that it will be useful,
123105 - but WITHOUT ANY WARRANTY; without even the implied warranty of
123106 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
123107 - Library General Public License for more details.
123109 - You should have received a copy of the GNU Library General Public
123110 - License along with the GNU C Library; see the file COPYING.LIB. If not,
123111 - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
123112 - Boston, MA 02111-1307, USA. */
123114 -#ifndef _ATOMICITY_H
123115 -#define _ATOMICITY_H 1
123117 -#include <inttypes.h>
123119 -#if BROKEN_PPC_ASM_CR0
123120 -# define __ATOMICITY_INLINE /* nothing */
123121 -#else
123122 -# define __ATOMICITY_INLINE inline
123123 -#endif
123125 -static __ATOMICITY_INLINE int
123126 -__attribute__ ((unused))
123127 -exchange_and_add (volatile uint32_t *mem, int val)
123129 - int tmp, result;
123130 - __asm__ ("\n\
123131 -0: lwarx %0,0,%2 \n\
123132 - add%I3 %1,%0,%3 \n\
123133 - stwcx. %1,0,%2 \n\
123134 - bne- 0b \n\
123135 -" : "=&b"(result), "=&r"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
123136 - return result;
123139 -static __ATOMICITY_INLINE void
123140 -__attribute__ ((unused))
123141 -atomic_add_long (volatile long *mem, int val)
123143 - int tmp;
123144 - __asm__ ("\n\
123145 -0: ldarx %0,0,%1 \n\
123146 - add%I2 %0,%0,%2 \n\
123147 - stdcx. %0,0,%1 \n\
123148 - bne- 0b \n\
123149 -" : "=&b"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
123153 -static __ATOMICITY_INLINE int
123154 -__attribute__ ((unused))
123155 -exchange_and_add_long (volatile long *mem, int val)
123157 - int tmp, result;
123158 - __asm__ ("\n\
123159 -0: ldarx %0,0,%2 \n\
123160 - add%I3 %1,%0,%3 \n\
123161 - stdcx. %1,0,%2 \n\
123162 - bne- 0b \n\
123163 -" : "=&b"(result), "=&r"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
123164 - return result;
123167 -static __ATOMICITY_INLINE void
123168 -__attribute__ ((unused))
123169 -atomic_add (volatile uint32_t *mem, int val)
123171 - int tmp;
123172 - __asm__ ("\n\
123173 -0: lwarx %0,0,%1 \n\
123174 - add%I2 %0,%0,%2 \n\
123175 - stwcx. %0,0,%1 \n\
123176 - bne- 0b \n\
123177 -" : "=&b"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
123180 -static __ATOMICITY_INLINE int
123181 -__attribute__ ((unused))
123182 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
123184 - int result;
123185 - __asm__ ("\n\
123186 -0: ldarx %0,0,%1 \n\
123187 - sub%I2c. %0,%0,%2 \n\
123188 - cntlzw %0,%0 \n\
123189 - bne- 1f \n\
123190 - stdcx. %3,0,%1 \n\
123191 - bne- 0b \n\
123192 -1: \n\
123193 -" : "=&b"(result) : "r"(p), "Ir"(oldval), "r"(newval) : "cr0", "memory");
123194 - return result >> 5;
123197 -static __ATOMICITY_INLINE long int
123198 -__attribute__ ((unused))
123199 -always_swap (volatile long int *p, long int newval)
123201 - long int result;
123202 - __asm__ ("\n\
123203 -0: ldarx %0,0,%1 \n\
123204 - stdcx. %2,0,%1 \n\
123205 - bne- 0b \n\
123206 -" : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory");
123207 - return result;
123210 -static __ATOMICITY_INLINE int
123211 -__attribute__ ((unused))
123212 -test_and_set (volatile long int *p, long int newval)
123214 - int result;
123215 - __asm__ ("\n\
123216 -0: ldarx %0,0,%1 \n\
123217 - cmpdi %0,0 \n\
123218 - bne- 1f \n\
123219 - stdcx. %2,0,%1 \n\
123220 - bne- 0b \n\
123221 -1: \n\
123222 -" : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory");
123223 - return result;
123226 -#endif /* atomicity.h */
123227 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc64/dl-machine.h glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/dl-machine.h
123228 --- glibc-2.3.2/sysdeps/powerpc/powerpc64/dl-machine.h Sat Mar 1 01:06:31 2003
123229 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/dl-machine.h Wed Mar 12 08:45:07 2003
123230 @@ -26,6 +26,7 @@
123232 #include <assert.h>
123233 #include <sys/param.h>
123234 +#include <dl-tls.h>
123236 /* Translate a processor specific dynamic tag to the index
123237 in l_info array. */
123238 @@ -331,9 +332,8 @@
123240 #if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
123241 #define elf_machine_type_class(type) \
123242 - ( (((type) == R_PPC64_DTPMOD64 \
123243 - || (type) == R_PPC64_DTPREL64 \
123244 - || (type) == R_PPC64_TPREL64 \
123245 + /* This covers all the TLS relocs, though most won't appear. */ \
123246 + (((((type) >= R_PPC64_DTPMOD64 && (type) <= R_PPC64_TPREL16_HIGHESTA) \
123247 || (type) == R_PPC64_ADDR24) * ELF_RTYPE_CLASS_PLT) \
123248 | (((type) == R_PPC64_COPY) * ELF_RTYPE_CLASS_COPY))
123249 #else
123250 @@ -472,9 +472,6 @@
123251 Elf64_FuncDesc *plt = (Elf64_FuncDesc *) reloc_addr;
123252 Elf64_FuncDesc *rel = (Elf64_FuncDesc *) finaladdr;
123253 Elf64_Addr offset = 0;
123254 -#ifndef RTLD_BOOTSTRAP
123255 - weak_extern (GL(dl_rtld_map));
123256 -#endif
123258 /* If sym_map is NULL, it's a weak undefined sym; Leave the plt zero. */
123259 if (sym_map == NULL)
123260 @@ -483,7 +480,7 @@
123261 /* If the opd entry is not yet relocated (because it's from a shared
123262 object that hasn't been processed yet), then manually reloc it. */
123263 if (map != sym_map && !sym_map->l_relocated
123264 -#ifndef RTLD_BOOTSTRAP
123265 +#if !defined RTLD_BOOTSTRAP && defined SHARED
123266 /* Bootstrap map doesn't have l_relocated set for it. */
123267 && sym_map != &GL(dl_rtld_map)
123268 #endif
123269 @@ -528,7 +525,8 @@
123270 #define PPC_HIGHERA(v) PPC_HIGHER ((v) + 0x8000)
123271 #define PPC_HIGHEST(v) (((v) >> 48) & 0xffff)
123272 #define PPC_HIGHESTA(v) PPC_HIGHEST ((v) + 0x8000)
123273 -#define BIT_INSERT(old, val, mask) ((old & ~(Elf64_Addr) mask) | (val & mask))
123274 +#define BIT_INSERT(var, val, mask) \
123275 + ((var) = ((var) & ~(Elf64_Addr) (mask)) | ((val) & (mask)))
123277 #define dont_expect(X) __builtin_expect ((X), 0)
123279 @@ -546,6 +544,27 @@
123280 *reloc_addr = l_addr + reloc->r_addend;
123283 +#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
123284 +/* This computes the value used by TPREL* relocs. */
123285 +static Elf64_Addr __attribute__ ((const))
123286 +elf_machine_tprel (struct link_map *map,
123287 + struct link_map *sym_map,
123288 + const Elf64_Sym *sym,
123289 + const Elf64_Rela *reloc)
123291 +# ifndef RTLD_BOOTSTRAP
123292 + if (sym_map)
123294 + CHECK_STATIC_TLS (map, sym_map);
123295 +# endif
123296 + return TLS_TPREL_VALUE (sym_map, sym, reloc);
123297 +# ifndef RTLD_BOOTSTRAP
123299 +# endif
123300 + return 0;
123302 +#endif
123304 /* Perform the relocation specified by RELOC and SYM (which is fully
123305 resolved). MAP is the object containing the reloc. */
123306 static inline void
123307 @@ -555,9 +574,7 @@
123308 const struct r_found_version *version,
123309 Elf64_Addr *const reloc_addr)
123311 - int r_type = ELF64_R_TYPE (reloc->r_info);
123312 - struct link_map *sym_map;
123313 - Elf64_Addr value, raw_value;
123314 + const int r_type = ELF64_R_TYPE (reloc->r_info);
123315 #ifndef RTLD_BOOTSTRAP
123316 const Elf64_Sym *const refsym = sym;
123317 #endif
123318 @@ -568,17 +585,16 @@
123319 return;
123322 - if (r_type == R_PPC64_NONE)
123323 + if (__builtin_expect (r_type == R_PPC64_NONE, 0))
123324 return;
123326 - sym_map = RESOLVE_MAP (&sym, version, r_type);
123327 - value = raw_value = reloc->r_addend;
123328 - if (sym_map)
123330 - raw_value += sym->st_value;
123331 - value = raw_value + sym_map->l_addr;
123333 + /* We need SYM_MAP even in the absence of TLS, for elf_machine_fixup_plt. */
123334 + struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
123335 + Elf64_Addr value = ((sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value)
123336 + + reloc->r_addend);
123338 + /* For relocs that don't edit code, return.
123339 + For relocs that might edit instructions, break from the switch. */
123340 switch (r_type)
123342 case R_PPC64_ADDR64:
123343 @@ -586,58 +602,40 @@
123344 *reloc_addr = value;
123345 return;
123347 -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
123348 + case R_PPC64_JMP_SLOT:
123349 +#ifdef RESOLVE_CONFLICT_FIND_MAP
123350 + RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr);
123351 +#endif
123352 + elf_machine_fixup_plt (map, sym_map, reloc, reloc_addr, value);
123353 + return;
123355 +#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
123356 case R_PPC64_DTPMOD64:
123357 -#ifdef RTLD_BOOTSTRAP
123358 +# ifdef RTLD_BOOTSTRAP
123359 /* During startup the dynamic linker is always index 1. */
123360 *reloc_addr = 1;
123361 -#else
123362 +# else
123363 /* Get the information from the link map returned by the
123364 resolve function. */
123365 if (sym_map != NULL)
123366 *reloc_addr = sym_map->l_tls_modid;
123367 -#endif
123368 - return;
123370 - case R_PPC64_TPREL64:
123371 -#ifdef RTLD_BOOTSTRAP
123372 - *reloc_addr = (sym_map->l_tls_offset - TLS_TCB_SIZE
123373 - + raw_value - TLS_TP_OFFSET);
123374 -#else
123375 - if (sym_map)
123377 - CHECK_STATIC_TLS (map, sym_map);
123378 - *reloc_addr = (sym_map->l_tls_offset - TLS_TCB_SIZE
123379 - + raw_value - TLS_TP_OFFSET);
123381 -#endif
123382 +# endif
123383 return;
123385 case R_PPC64_DTPREL64:
123386 -#ifndef RTLD_BOOTSTRAP
123387 /* During relocation all TLS symbols are defined and used.
123388 Therefore the offset is already correct. */
123389 - *reloc_addr = raw_value - TLS_DTV_OFFSET;
123390 -#endif
123391 +# ifndef RTLD_BOOTSTRAP
123392 + *reloc_addr = TLS_DTPREL_VALUE (sym, reloc);
123393 +# endif
123394 return;
123395 -#endif
123397 - case R_PPC64_JMP_SLOT:
123399 - elf_machine_fixup_plt (map, sym_map, reloc, reloc_addr, value);
123400 + case R_PPC64_TPREL64:
123401 + *reloc_addr = elf_machine_tprel (map, sym_map, sym, reloc);
123402 return;
123404 -#ifndef RTLD_BOOTSTRAP /* None of the following appear in ld.so */
123405 - case R_PPC64_ADDR16_LO_DS:
123406 - if (dont_expect ((value & 3) != 0))
123407 - _dl_reloc_overflow (map, "R_PPC64_ADDR16_LO_DS",
123408 - reloc_addr, sym, refsym);
123409 - *(Elf64_Half *) reloc_addr = BIT_INSERT (*(Elf64_Half *) reloc_addr,
123410 - value, 0xfffc);
123411 - break;
123413 case R_PPC64_TPREL16_LO_DS:
123414 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123415 if (dont_expect ((value & 3) != 0))
123416 _dl_reloc_overflow (map, "R_PPC64_TPREL16_LO_DS",
123417 reloc_addr, sym, refsym);
123418 @@ -645,63 +643,86 @@
123419 value, 0xfffc);
123420 break;
123422 - case R_PPC64_DTPREL16_LO_DS:
123423 - if (dont_expect ((value & 3) != 0))
123424 - _dl_reloc_overflow (map, "R_PPC64_DTPREL16_LO_DS",
123425 - reloc_addr, sym, refsym);
123426 + case R_PPC64_TPREL16_DS:
123427 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123428 + if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
123429 + _dl_reloc_overflow (map, "R_PPC64_TPREL16_DS", reloc_addr,
123430 + sym, refsym);
123431 *(Elf64_Half *) reloc_addr = BIT_INSERT (*(Elf64_Half *) reloc_addr,
123432 value, 0xfffc);
123433 break;
123435 - case R_PPC64_GOT_TPREL16_LO_DS:
123436 - if (dont_expect ((value & 3) != 0))
123437 - _dl_reloc_overflow (map, "R_PPC64_GOT_TPREL16_LO_DS",
123438 - reloc_addr, sym, refsym);
123439 - *(Elf64_Half *) reloc_addr = BIT_INSERT (*(Elf64_Half *) reloc_addr,
123440 - value, 0xfffc);
123441 + case R_PPC64_TPREL16:
123442 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123443 + if (dont_expect ((value + 0x8000) >= 0x10000))
123444 + _dl_reloc_overflow (map, "R_PPC64_TPREL16", reloc_addr,
123445 + sym, refsym);
123446 + *(Elf64_Half *) reloc_addr = PPC_LO (value);
123447 break;
123449 - case R_PPC64_GOT_DTPREL16_LO_DS:
123450 + case R_PPC64_TPREL16_LO:
123451 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123452 + *(Elf64_Half *) reloc_addr = PPC_LO (value);
123453 + break;
123455 + case R_PPC64_TPREL16_HI:
123456 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123457 + *(Elf64_Half *) reloc_addr = PPC_HI (value);
123458 + break;
123460 + case R_PPC64_TPREL16_HA:
123461 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123462 + *(Elf64_Half *) reloc_addr = PPC_HA (value);
123463 + break;
123465 + case R_PPC64_TPREL16_HIGHER:
123466 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123467 + *(Elf64_Half *) reloc_addr = PPC_HIGHER (value);
123468 + break;
123470 + case R_PPC64_TPREL16_HIGHEST:
123471 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123472 + *(Elf64_Half *) reloc_addr = PPC_HIGHEST (value);
123473 + break;
123475 + case R_PPC64_TPREL16_HIGHERA:
123476 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123477 + *(Elf64_Half *) reloc_addr = PPC_HIGHERA (value);
123478 + break;
123480 + case R_PPC64_TPREL16_HIGHESTA:
123481 + value = elf_machine_tprel (map, sym_map, sym, reloc);
123482 + *(Elf64_Half *) reloc_addr = PPC_HIGHESTA (value);
123483 + break;
123484 +#endif /* USE_TLS etc. */
123486 +#ifndef RTLD_BOOTSTRAP /* None of the following appear in ld.so */
123487 + case R_PPC64_ADDR16_LO_DS:
123488 if (dont_expect ((value & 3) != 0))
123489 - _dl_reloc_overflow (map, "R_PPC64_GOT_DTPREL16_LO_DS",
123490 + _dl_reloc_overflow (map, "R_PPC64_ADDR16_LO_DS",
123491 reloc_addr, sym, refsym);
123492 - *(Elf64_Half *) reloc_addr = BIT_INSERT (*(Elf64_Half *) reloc_addr,
123493 - value, 0xfffc);
123494 + BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc);
123495 break;
123497 case R_PPC64_ADDR16_LO:
123498 - case R_PPC64_TPREL16_LO:
123499 - case R_PPC64_DTPREL16_LO:
123500 - case R_PPC64_GOT_TLSGD16_LO:
123501 - case R_PPC64_GOT_TLSLD16_LO:
123502 *(Elf64_Half *) reloc_addr = PPC_LO (value);
123503 break;
123505 case R_PPC64_ADDR16_HI:
123506 - case R_PPC64_TPREL16_HI:
123507 - case R_PPC64_DTPREL16_HI:
123508 - case R_PPC64_GOT_TPREL16_HI:
123509 - case R_PPC64_GOT_DTPREL16_HI:
123510 - case R_PPC64_GOT_TLSGD16_HI:
123511 - case R_PPC64_GOT_TLSLD16_HI:
123512 *(Elf64_Half *) reloc_addr = PPC_HI (value);
123513 break;
123515 case R_PPC64_ADDR16_HA:
123516 - case R_PPC64_TPREL16_HA:
123517 - case R_PPC64_DTPREL16_HA:
123518 - case R_PPC64_GOT_TLSGD16_HA:
123519 - case R_PPC64_GOT_TLSLD16_HA:
123520 *(Elf64_Half *) reloc_addr = PPC_HA (value);
123521 break;
123523 - case R_PPC64_REL24:
123524 + case R_PPC64_ADDR30:
123526 Elf64_Addr delta = value - (Elf64_Xword) reloc_addr;
123527 - if (dont_expect ((delta + 0x2000000) >= 0x4000000 || (delta & 3) != 0))
123528 - _dl_reloc_overflow (map, "R_PPC64_REL24", reloc_addr, sym, refsym);
123529 - *(Elf64_Word *) reloc_addr = BIT_INSERT (*(Elf64_Word *) reloc_addr,
123530 - delta, 0x3fffffc);
123531 + if (dont_expect ((delta + 0x80000000) >= 0x10000000
123532 + || (delta & 3) != 0))
123533 + _dl_reloc_overflow (map, "R_PPC64_ADDR30", reloc_addr, sym, refsym);
123534 + BIT_INSERT (*(Elf64_Word *) reloc_addr, delta, 0xfffffffc);
123536 break;
123538 @@ -744,11 +765,16 @@
123539 ((char *) reloc_addr)[3] = (value >> 0) & 0xff;
123540 return;
123542 + case R_PPC64_ADDR32:
123543 + if (dont_expect ((value + 0x80000000) >= 0x10000000))
123544 + _dl_reloc_overflow (map, "R_PPC64_ADDR32", reloc_addr, sym, refsym);
123545 + *(Elf64_Word *) reloc_addr = value;
123546 + return;
123548 case R_PPC64_ADDR24:
123549 if (dont_expect ((value + 0x2000000) >= 0x4000000 || (value & 3) != 0))
123550 _dl_reloc_overflow (map, "R_PPC64_ADDR24", reloc_addr, sym, refsym);
123551 - *(Elf64_Word *) reloc_addr = BIT_INSERT (*(Elf64_Word *) reloc_addr,
123552 - value, 0x3fffffc);
123553 + BIT_INSERT (*(Elf64_Word *) reloc_addr, value, 0x3fffffc);
123554 break;
123556 case R_PPC64_ADDR16:
123557 @@ -768,63 +794,22 @@
123558 case R_PPC64_ADDR16_DS:
123559 if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
123560 _dl_reloc_overflow (map, "R_PPC64_ADDR16_DS", reloc_addr, sym, refsym);
123561 - *(Elf64_Half *) reloc_addr = BIT_INSERT (*(Elf64_Half *) reloc_addr,
123562 - value, 0xfffc);
123563 - break;
123565 - case R_PPC64_TPREL16_DS:
123566 - if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
123567 - _dl_reloc_overflow (map, "R_PPC64_TPREL16_DS", reloc_addr,
123568 - sym, refsym);
123569 - *(Elf64_Half *) reloc_addr = BIT_INSERT (*(Elf64_Half *) reloc_addr,
123570 - value, 0xfffc);
123571 - break;
123573 - case R_PPC64_DTPREL16_DS:
123574 - if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
123575 - _dl_reloc_overflow (map, "R_PPC64_DTPREL16_DS", reloc_addr,
123576 - sym, refsym);
123577 - *(Elf64_Half *) reloc_addr = BIT_INSERT (*(Elf64_Half *) reloc_addr,
123578 - value, 0xfffc);
123579 - break;
123581 - case R_PPC64_GOT_TPREL16_DS:
123582 - if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
123583 - _dl_reloc_overflow (map, "R_PPC64_GOT_TPREL16_DS", reloc_addr,
123584 - sym, refsym);
123585 - *(Elf64_Half *) reloc_addr = BIT_INSERT (*(Elf64_Half *) reloc_addr,
123586 - value, 0xfffc);
123587 - break;
123589 - case R_PPC64_GOT_DTPREL16_DS:
123590 - if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
123591 - _dl_reloc_overflow (map, "R_PPC64_GOT_DTPREL16_DS",
123592 - reloc_addr, sym, refsym);
123593 - *(Elf64_Half *) reloc_addr = BIT_INSERT (*(Elf64_Half *) reloc_addr,
123594 - value, 0xfffc);
123595 + BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc);
123596 break;
123598 case R_PPC64_ADDR16_HIGHER:
123599 - case R_PPC64_TPREL16_HIGHER:
123600 - case R_PPC64_DTPREL16_HIGHER:
123601 *(Elf64_Half *) reloc_addr = PPC_HIGHER (value);
123602 break;
123604 case R_PPC64_ADDR16_HIGHEST:
123605 - case R_PPC64_TPREL16_HIGHEST:
123606 - case R_PPC64_DTPREL16_HIGHEST:
123607 *(Elf64_Half *) reloc_addr = PPC_HIGHEST (value);
123608 break;
123610 case R_PPC64_ADDR16_HIGHERA:
123611 - case R_PPC64_TPREL16_HIGHERA:
123612 - case R_PPC64_DTPREL16_HIGHERA:
123613 *(Elf64_Half *) reloc_addr = PPC_HIGHERA (value);
123614 break;
123616 case R_PPC64_ADDR16_HIGHESTA:
123617 - case R_PPC64_TPREL16_HIGHESTA:
123618 - case R_PPC64_DTPREL16_HIGHESTA:
123619 *(Elf64_Half *) reloc_addr = PPC_HIGHESTA (value);
123620 break;
123622 @@ -832,10 +817,10 @@
123623 case R_PPC64_ADDR14_BRTAKEN:
123624 case R_PPC64_ADDR14_BRNTAKEN:
123626 - Elf64_Word insn;
123627 if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
123628 _dl_reloc_overflow (map, "R_PPC64_ADDR14", reloc_addr, sym, refsym);
123629 - insn = BIT_INSERT (*(Elf64_Word *) reloc_addr, value, 0xfffc);
123630 + Elf64_Word insn = *(Elf64_Word *) reloc_addr;
123631 + BIT_INSERT (insn, value, 0xfffc);
123632 if (r_type != R_PPC64_ADDR14)
123634 insn &= ~(1 << 21);
123635 @@ -851,7 +836,11 @@
123636 break;
123638 case R_PPC64_REL32:
123639 - *(Elf64_Word *) reloc_addr = value - (Elf64_Xword) reloc_addr;
123640 + *(Elf64_Word *) reloc_addr = value - (Elf64_Addr) reloc_addr;
123641 + return;
123643 + case R_PPC64_REL64:
123644 + *reloc_addr = value - (Elf64_Addr) reloc_addr;
123645 return;
123646 #endif /* !RTLD_BOOTSTRAP */
123648 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc64/elf/configure glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/elf/configure
123649 --- glibc-2.3.2/sysdeps/powerpc/powerpc64/elf/configure Wed Feb 26 00:41:08 2003
123650 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/elf/configure Wed Mar 12 22:39:43 2003
123651 @@ -70,7 +70,3 @@
123655 -cat >>confdefs.h <<\_ACEOF
123656 -#define PI_STATIC_AND_HIDDEN 1
123657 -_ACEOF
123659 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc64/elf/configure.in glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/elf/configure.in
123660 --- glibc-2.3.2/sysdeps/powerpc/powerpc64/elf/configure.in Wed Feb 26 00:26:57 2003
123661 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/elf/configure.in Wed Mar 12 22:39:43 2003
123662 @@ -56,6 +56,3 @@
123666 -dnl It is always possible to access static and hidden symbols in an
123667 -dnl position independent way.
123668 -AC_DEFINE(PI_STATIC_AND_HIDDEN)
123669 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc64/memcpy.S glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/memcpy.S
123670 --- glibc-2.3.2/sysdeps/powerpc/powerpc64/memcpy.S Thu Jan 1 01:00:00 1970
123671 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/memcpy.S Tue Mar 18 23:58:31 2003
123672 @@ -0,0 +1,210 @@
123673 +/* Optimized memcpy implementation for PowerPC64.
123674 + Copyright (C) 2003 Free Software Foundation, Inc.
123675 + This file is part of the GNU C Library.
123677 + The GNU C Library is free software; you can redistribute it and/or
123678 + modify it under the terms of the GNU Lesser General Public
123679 + License as published by the Free Software Foundation; either
123680 + version 2.1 of the License, or (at your option) any later version.
123682 + The GNU C Library is distributed in the hope that it will be useful,
123683 + but WITHOUT ANY WARRANTY; without even the implied warranty of
123684 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
123685 + Lesser General Public License for more details.
123687 + You should have received a copy of the GNU Lesser General Public
123688 + License along with the GNU C Library; if not, write to the Free
123689 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
123690 + 02111-1307 USA. */
123692 +#include <sysdep.h>
123693 +#include <bp-sym.h>
123694 +#include <bp-asm.h>
123696 +/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
123697 + Returns 'dst'.
123699 + Memcpy handles short copies (< 32-bytes) using an unaligned
123700 + word lwz/stw loop. The tail (remaining 1-3) bytes is handled with the
123701 + appropriate combination of byte and halfword load/stores. There is no
123702 + attempt to optimize the alignment of short moves. The 64-bit
123703 + implementations of POWER3 and POWER4 do a reasonable job of handling
123704 + unligned load/stores that do not cross 32-byte boundries.
123706 + Longer moves (>= 32-bytes) justify the effort to get at least the
123707 + destination doubleword (8-byte) aligned. Further optimization is
123708 + posible when both source and destination are doubleword aligned.
123709 + Each case has a optimized unrolled loop. */
123711 +EALIGN (BP_SYM (memcpy), 5, 0)
123712 + cmpldi cr1,5,31
123713 + neg 0,3
123714 + std 30,-16(1)
123715 + std 31,-8(1)
123716 + rldicl. 0,0,0,61
123717 + mr 12,4
123718 + mr 31,5
123719 + mr 30,3
123720 + ble- cr1,.L2
123721 + subf 31,0,5
123723 + /* Move 0-7 bytes as needed to get the destination doubleword alligned. */
123724 + beq 0f
123725 + mtcrf 0x01,0
123726 +1: bf 31,2f
123727 + lbz 6,0(12)
123728 + addi 12,12,1
123729 + stb 6,0(3)
123730 + addi 3,3,1
123731 +2: bf 30,4f
123732 + lhz 6,0(12)
123733 + addi 12,12,2
123734 + sth 6,0(3)
123735 + addi 3,3,2
123736 +4: bf 29,0f
123737 + lwz 6,0(12)
123738 + addi 12,12,4
123739 + stw 6,0(3)
123740 + addi 3,3,4
123742 + /* Copy doublewords from source to destination, assumpting the
123743 + destination is aligned on a doubleword boundary.
123745 + First verify that there is > 7 bytes to copy and check if the source
123746 + is also doubleword aligned. If there are < 8 bytes to copy fall
123747 + through to the tail byte copy code. Otherwise if the source and
123748 + destination are both doubleword aligned use an optimized doubleword
123749 + copy loop. Otherwise the source has a different alignment and we use
123750 + a load, shift, store strategy. */
123751 + rldicl. 0,12,0,61
123752 + cmpldi cr6,31,7
123753 + ble- cr6,.L2 /* less than 8 bytes left. */
123754 + bne- 0,.L6 /* Source is not DW aligned. */
123755 + srdi. 9,31,3
123756 + mr 10,3
123757 + mr 11,12
123759 + /* Move doublewords where destination and source are aligned.
123760 + Use a unrolled loop to copy 4 doubleword (32-bytes) per iteration.
123761 + If the remainder is >0 and < 32 bytes copy 1-3 doublewords. */
123762 + cmpldi cr1,9,4
123763 + beq 0f
123764 + mtcrf 0x01,9
123765 + blt cr1,2f
123766 + ld 6,0(11)
123767 + .align 4
123769 + ld 7,8(11)
123770 + addi 9,9,-4
123771 + std 6,0(10)
123772 + ld 6,16(11)
123773 + std 7,8(10)
123774 + ld 7,24(11)
123775 + addi 11,11,32
123776 + cmpldi cr1,9,4
123777 + std 6,16(10)
123778 + blt cr1,3f
123779 + ld 6,0(11)
123780 + std 7,24(10)
123781 + addi 10,10,32
123782 + b 4b
123783 +3: std 7,24(10)
123784 + addi 10,10,32
123785 +2: bf 30,1f
123786 + ld 6,0(11)
123787 + ld 7,8(11)
123788 + addi 11,11,16
123789 + std 6,0(10)
123790 + std 7,8(10)
123791 + addi 10,10,16
123792 +1: bf 31,0f
123793 + ld 6,0(11)
123794 + addi 11,11,8
123795 + std 6,0(10)
123796 + addi 10,10,8
123799 +.L8:
123800 + rldicr 0,31,0,60
123801 + rldicl 31,31,0,61
123802 + add 3,3,0
123803 + add 12,12,0
123805 + /* Copy the tail for up to 31 bytes. If this is the tail of a longer
123806 + copy then the destination will be aligned and the length will be
123807 + less than 8. So it is normally not worth the set-up overhead to
123808 + get doubleword aligned and do doubleword load/store. */
123809 +.L2:
123810 + mr. 10,31
123811 + cmpldi cr1,31,4
123812 + beq 0f
123813 + mtcrf 0x01,31
123814 + blt cr1,2f
123815 +4: lwz 6,0(12)
123816 + addi 12,12,4
123817 + addi 10,10,-4
123818 + stw 6,0(3)
123819 + cmpldi cr1,10,4
123820 + addi 3,3,4
123821 + bge cr1,4b
123822 +2: bf 30,1f
123823 + lhz 6,0(12)
123824 + addi 12,12,2
123825 + sth 6,0(3)
123826 + addi 3,3,2
123827 +1: bf 31,0f
123828 + lbz 6,0(12)
123829 + addi 12,12,1
123830 + stb 6,0(3)
123831 + addi 3,3,1
123833 + /* Return original dst pointer. */
123834 + ld 31,-8(1)
123835 + mr 3,30
123836 + ld 30,-16(1)
123837 + blr
123839 +.L6:
123840 + srdi 11,31,3
123841 + mr 4,3
123842 + mr 5,12
123844 + /* Copy doublewords where the destination is aligned but the source is
123845 + not. Use aligned doubleword loads from the source, shifted to realign
123846 + the data, to allow aligned destination stores. */
123847 + andi. 10,5,7
123848 + andi. 0,11,1
123849 + subf 5,10,5
123850 + ld 6,0(5)
123851 + sldi 10,10,3
123852 + ld 7,8(5)
123853 + subfic 9,10,64
123854 + beq 2f
123855 + sld 0,6,10
123856 + addi 11,11,-1
123857 + mr 6,7
123858 + addi 4,4,-8
123859 + cmpldi 11,0
123860 + b 1f
123861 +2: addi 5,5,8
123862 + .align 4
123863 +0: sld 0,6,10
123864 + srd 8,7,9
123865 + addi 11,11,-2
123866 + ld 6,8(5)
123867 + or 0,0,8
123868 + cmpldi 11,0
123869 + std 0,0(4)
123870 + sld 0,7,10
123871 +1: srd 8,6,9
123872 + or 0,0,8
123873 + beq 8f
123874 + ld 7,16(5)
123875 + std 0,8(4)
123876 + addi 5,5,16
123877 + addi 4,4,16
123878 + b 0b
123880 + std 0,8(4)
123881 + b .L8
123882 +END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS)
123883 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc64/memset.S glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/memset.S
123884 --- glibc-2.3.2/sysdeps/powerpc/powerpc64/memset.S Wed Sep 18 01:50:02 2002
123885 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/memset.S Sun Mar 16 00:09:13 2003
123886 @@ -1,5 +1,5 @@
123887 /* Optimized memset implementation for PowerPC64.
123888 - Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
123889 + Copyright (C) 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
123890 This file is part of the GNU C Library.
123892 The GNU C Library is free software; you can redistribute it and/or
123893 @@ -26,12 +26,7 @@
123894 to obtain the value set by the kernel and store it into this
123895 variable. */
123896 .globl __cache_line_size
123897 - .section ".data"
123898 - .align 2
123899 - .type __cache_line_size,@object
123900 - .size __cache_line_size,4
123901 -__cache_line_size:
123902 - .long 0
123903 + .lcomm __cache_line_size,4,4
123904 .section ".toc","aw"
123905 .LC0:
123906 .tc __cache_line_size[TC],__cache_line_size
123907 @@ -293,4 +288,3 @@
123908 END_GEN_TB (BP_SYM (__bzero),TB_TOCLESS)
123910 weak_alias (BP_SYM (__bzero), BP_SYM (bzero))
123912 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/powerpc64/sysdep.h glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/sysdep.h
123913 --- glibc-2.3.2/sysdeps/powerpc/powerpc64/sysdep.h Sun Jan 12 09:09:45 2003
123914 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/powerpc64/sysdep.h Mon Mar 24 19:45:27 2003
123915 @@ -225,6 +225,20 @@
123916 #define PSEUDO_END(name) \
123917 END (name)
123919 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
123920 + .section ".text"; \
123921 + ENTRY (name) \
123922 + DO_CALL (SYS_ify (syscall_name));
123924 +#define PSEUDO_RET_NOERRNO \
123925 + blr
123927 +#define ret_NOERRNO PSEUDO_RET_NOERRNO
123929 +#undef PSEUDO_END_NOERRNO
123930 +#define PSEUDO_END_NOERRNO(name) \
123931 + END (name)
123933 /* Label in text section. */
123934 /* ppc64 function descriptors which requires . notation */
123935 #define C_TEXT(name) .##name
123936 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/test-arith.c glibc-2.3.2-200304020432/sysdeps/powerpc/test-arith.c
123937 --- glibc-2.3.2/sysdeps/powerpc/test-arith.c Thu Jan 1 01:00:00 1970
123938 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/test-arith.c Fri Jul 6 06:56:01 2001
123939 @@ -0,0 +1,605 @@
123940 +/* Test floating-point arithmetic operations.
123941 + Copyright (C) 1997, 1998 Free Software Foundation, Inc.
123942 + This file is part of the GNU C Library.
123944 + The GNU C Library is free software; you can redistribute it and/or
123945 + modify it under the terms of the GNU Lesser General Public
123946 + License as published by the Free Software Foundation; either
123947 + version 2.1 of the License, or (at your option) any later version.
123949 + The GNU C Library is distributed in the hope that it will be useful,
123950 + but WITHOUT ANY WARRANTY; without even the implied warranty of
123951 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
123952 + Lesser General Public License for more details.
123954 + You should have received a copy of the GNU Lesser General Public
123955 + License along with the GNU C Library; if not, write to the Free
123956 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
123957 + 02111-1307 USA. */
123958 +#ifndef _GNU_SOURCE
123959 +#define _GNU_SOURCE
123960 +#endif
123961 +#include <math.h>
123962 +#include <stdio.h>
123963 +#include <stdlib.h>
123964 +#include <string.h>
123965 +#include <fenv.h>
123966 +#include <assert.h>
123968 +#ifndef ESIZE
123969 +typedef double tocheck_t;
123970 +#define ESIZE 11
123971 +#define MSIZE 52
123972 +#define FUNC(x) x
123973 +#endif
123975 +#define R_NEAREST 1
123976 +#define R_ZERO 2
123977 +#define R_UP 4
123978 +#define R_DOWN 8
123979 +#define R_ALL (R_NEAREST|R_ZERO|R_UP|R_DOWN)
123980 +static fenv_t rmodes[4];
123981 +static const char * const rmnames[4] =
123982 +{ "nearest","zero","+Inf","-Inf" };
123984 +typedef union {
123985 + tocheck_t tc;
123986 + unsigned char c[sizeof(tocheck_t)];
123987 +} union_t;
123989 +/* Don't try reading these in a font that doesn't distinguish
123990 + O and zero. */
123991 +typedef enum {
123992 + P_Z = 0x0, /* 00000...0 */
123993 + P_000O = 0x1, /* 00011...1 */
123994 + P_001Z = 0x2, /* 00100...0 */
123995 + P_00O = 0x3, /* 00111...1 */
123996 + P_01Z = 0x4, /* 01000...0 */
123997 + P_010O = 0x5, /* 01011...1 */
123998 + P_011Z = 0x6, /* 01100...0 */
123999 + P_0O = 0x7, /* 01111...1 */
124000 + P_1Z = 0x8, /* 10000...0 */
124001 + P_100O = 0x9, /* 10011...1 */
124002 + P_101Z = 0xa, /* 10100...0 */
124003 + P_10O = 0xb, /* 10111...1 */
124004 + P_11Z = 0xc, /* 11000...0 */
124005 + P_110O = 0xd, /* 11011...1 */
124006 + P_111Z = 0xe, /* 11100...0 */
124007 + P_O = 0xf, /* 11111...1 */
124008 + P_Z1 = 0x11, /* 000...001 */
124009 + P_Z10 = 0x12, /* 000...010 */
124010 + P_Z11 = 0x13, /* 000...011 */
124011 + P_0O00 = 0x14, /* 011...100 */
124012 + P_0O01 = 0x15, /* 011...101 */
124013 + P_0O0 = 0x16, /* 011...110 */
124014 + P_1Z1 = 0x19, /* 100...001 */
124015 + P_1Z10 = 0x1a, /* 100...010 */
124016 + P_1Z11 = 0x1b, /* 100...011 */
124017 + P_O00 = 0x1c, /* 111...100 */
124018 + P_O01 = 0x1d, /* 111...101 */
124019 + P_O0 = 0x1e, /* 111...110 */
124020 + P_R = 0x20, /* rrr...rrr */ /* ('r' means random. ) */
124021 + P_Ro = 0x21, /* rrr...rrr, with odd parity. */
124022 + P_0R = 0x22, /* 0rr...rrr */
124023 + P_1R = 0x23, /* 1rr...rrr */
124024 + P_Rno = 0x24, /* rrr...rrr, but not all ones. */
124025 +} pattern_t;
124027 +static void
124028 +pattern_fill(pattern_t ptn, unsigned char *start, int bitoffset, int count)
124030 +#define bitset(count, value) \
124031 + start[(count)/8] = (start[(count)/8] & ~(1 << 7-(count)%8) \
124032 + | (value) << 7-(count)%8)
124033 + int i;
124035 + if (ptn >= 0 && ptn <= 0xf)
124037 + /* Patterns between 0 and 0xF have the following format:
124038 + The LSBit is used to fill the last n-3 bits of the pattern;
124039 + The next 3 bits are the first 3 bits of the pattern. */
124040 + for (i = 0; i < count; i++)
124041 + if (i < 3)
124042 + bitset((bitoffset+i), ptn >> (3-i) & 1);
124043 + else
124044 + bitset((bitoffset+i), ptn >> 0 & 1);
124046 + else if (ptn <= 0x1f)
124048 + /* Patterns between 0x10 and 0x1F have the following format:
124049 + The two LSBits are the last two bits of the pattern;
124050 + The 0x8 bit is the first bit of the pattern;
124051 + The 0x4 bit is used to fill the remainder. */
124052 + for (i = 0; i < count; i++)
124053 + if (i == 0)
124054 + bitset((bitoffset+i), ptn >> 3 & 1);
124055 + else if (i >= count-2)
124056 + bitset((bitoffset+i), ptn >> (count-1-i) & 1);
124057 + else
124058 + bitset((bitoffset+i), ptn >> 2 & 1);
124060 + else switch (ptn)
124062 + case P_0R: case P_1R:
124063 + assert(count > 0);
124064 + bitset(bitoffset, ptn & 1);
124065 + count--;
124066 + bitoffset++;
124067 + case P_R:
124068 + for (; count > 0; count--, bitoffset++)
124069 + bitset(bitoffset, rand() & 1);
124070 + break;
124071 + case P_Ro:
124073 + int op = 1;
124074 + assert(count > 0);
124075 + for (; count > 1; count--, bitoffset++)
124076 + bitset(bitoffset, op ^= (rand() & 1));
124077 + bitset(bitoffset, op);
124078 + break;
124080 + case P_Rno:
124082 + int op = 1;
124083 + assert(count > 0);
124084 + for (; count > 1; count--, bitoffset++)
124086 + int r = rand() & 1;
124087 + op &= r;
124088 + bitset(bitoffset, r);
124090 + bitset(bitoffset, rand() & (op ^ 1));
124091 + break;
124094 + default:
124095 + assert(0);
124097 +#undef bitset
124100 +static tocheck_t
124101 +pattern(int negative, pattern_t exp, pattern_t mant)
124103 + union_t result;
124104 +#if 0
124105 + int i;
124106 +#endif
124108 + pattern_fill(negative ? P_O : P_Z, result.c, 0, 1);
124109 + pattern_fill(exp, result.c, 1, ESIZE);
124110 + pattern_fill(mant, result.c, ESIZE+1, MSIZE);
124111 +#if 0
124112 + printf("neg=%d exp=%02x mant=%02x: ", negative, exp, mant);
124113 + for (i = 0; i < sizeof(tocheck_t); i++)
124114 + printf("%02x", result.c[i]);
124115 + printf("\n");
124116 +#endif
124117 + return result.tc;
124120 +/* Return the closest different tocheck_t to 'x' in the direction of
124121 + 'direction', or 'x' if there is no such value. Assumes 'x' is not
124122 + a NaN. */
124123 +static tocheck_t
124124 +delta(tocheck_t x, int direction)
124126 + union_t xx;
124127 + int i;
124129 + xx.tc = x;
124130 + if (xx.c[0] & 0x80)
124131 + direction = -direction;
124132 + if (direction == +1)
124134 + union_t tx;
124135 + tx.tc = pattern(xx.c[0] >> 7, P_O, P_Z);
124136 + if (memcmp(tx.c, xx.c, sizeof(tocheck_t)) == 0)
124137 + return x;
124139 + for (i = sizeof(tocheck_t)-1; i > 0; i--)
124141 + xx.c[i] += direction;
124142 + if (xx.c[i] != (direction > 0 ? 0 : 0xff))
124143 + return xx.tc;
124145 + if (direction < 0 && (xx.c[0] & 0x7f) == 0)
124146 + return pattern(~(xx.c[0] >> 7) & 1, P_Z, P_Z1);
124147 + else
124149 + xx.c[0] += direction;
124150 + return xx.tc;
124154 +static int nerrors = 0;
124156 +#ifdef FE_ALL_INVALID
124157 +static const int all_exceptions = FE_ALL_INVALID | FE_ALL_EXCEPT;
124158 +#else
124159 +static const int all_exceptions = FE_ALL_EXCEPT;
124160 +#endif
124162 +static void
124163 +check_result(int line, const char *rm, tocheck_t expected, tocheck_t actual)
124165 + if (memcmp(&expected, &actual, sizeof(tocheck_t)) != 0)
124167 + unsigned char *ex, *ac;
124168 + size_t i;
124170 + printf("%s:%d:round %s:result failed\n"
124171 + " expected result 0x", __FILE__, line, rm);
124172 + ex = (unsigned char *)&expected;
124173 + ac = (unsigned char *)&actual;
124174 + for (i = 0; i < sizeof(tocheck_t); i++)
124175 + printf("%02x", ex[i]);
124176 + printf(" got 0x");
124177 + for (i = 0; i < sizeof(tocheck_t); i++)
124178 + printf("%02x", ac[i]);
124179 + printf("\n");
124180 + nerrors++;
124184 +static const struct {
124185 + int except;
124186 + const char *name;
124187 +} excepts[] = {
124188 +#define except_entry(ex) { ex, #ex } ,
124189 +#ifdef FE_INEXACT
124190 + except_entry(FE_INEXACT)
124191 +#else
124192 +# define FE_INEXACT 0
124193 +#endif
124194 +#ifdef FE_DIVBYZERO
124195 + except_entry(FE_DIVBYZERO)
124196 +#else
124197 +# define FE_DIVBYZERO 0
124198 +#endif
124199 +#ifdef FE_UNDERFLOW
124200 + except_entry(FE_UNDERFLOW)
124201 +#else
124202 +# define FE_UNDERFLOW 0
124203 +#endif
124204 +#ifdef FE_OVERFLOW
124205 + except_entry(FE_OVERFLOW)
124206 +#else
124207 +# define FE_OVERFLOW 0
124208 +#endif
124209 +#ifdef FE_INVALID
124210 + except_entry(FE_INVALID)
124211 +#else
124212 +# define FE_INVALID 0
124213 +#endif
124214 +#ifdef FE_INVALID_SNAN
124215 + except_entry(FE_INVALID_SNAN)
124216 +#else
124217 +# define FE_INVALID_SNAN FE_INVALID
124218 +#endif
124219 +#ifdef FE_INVALID_ISI
124220 + except_entry(FE_INVALID_ISI)
124221 +#else
124222 +# define FE_INVALID_ISI FE_INVALID
124223 +#endif
124224 +#ifdef FE_INVALID_IDI
124225 + except_entry(FE_INVALID_IDI)
124226 +#else
124227 +# define FE_INVALID_IDI FE_INVALID
124228 +#endif
124229 +#ifdef FE_INVALID_ZDZ
124230 + except_entry(FE_INVALID_ZDZ)
124231 +#else
124232 +# define FE_INVALID_ZDZ FE_INVALID
124233 +#endif
124234 +#ifdef FE_INVALID_COMPARE
124235 + except_entry(FE_INVALID_COMPARE)
124236 +#else
124237 +# define FE_INVALID_COMPARE FE_INVALID
124238 +#endif
124239 +#ifdef FE_INVALID_SOFTWARE
124240 + except_entry(FE_INVALID_SOFTWARE)
124241 +#else
124242 +# define FE_INVALID_SOFTWARE FE_INVALID
124243 +#endif
124244 +#ifdef FE_INVALID_SQRT
124245 + except_entry(FE_INVALID_SQRT)
124246 +#else
124247 +# define FE_INVALID_SQRT FE_INVALID
124248 +#endif
124249 +#ifdef FE_INVALID_INTEGER_CONVERSION
124250 + except_entry(FE_INVALID_INTEGER_CONVERSION)
124251 +#else
124252 +# define FE_INVALID_INTEGER_CONVERSION FE_INVALID
124253 +#endif
124256 +static int excepts_missing = 0;
124258 +static void
124259 +check_excepts(int line, const char *rm, int expected, int actual)
124261 + if (expected & excepts_missing)
124262 + expected = expected & ~excepts_missing | FE_INVALID_SNAN;
124263 + if ((expected & all_exceptions) != actual)
124265 + size_t i;
124266 + printf("%s:%d:round %s:exceptions failed\n"
124267 + " expected exceptions ", __FILE__, line,rm);
124268 + for (i = 0; i < sizeof(excepts)/sizeof(excepts[0]); i++)
124269 + if (expected & excepts[i].except)
124270 + printf("%s ",excepts[i].name);
124271 + if ((expected & all_exceptions) == 0)
124272 + printf("- ");
124273 + printf("got");
124274 + for (i = 0; i < sizeof(excepts)/sizeof(excepts[0]); i++)
124275 + if (actual & excepts[i].except)
124276 + printf(" %s",excepts[i].name);
124277 + if ((actual & all_exceptions) == 0)
124278 + printf("- ");
124279 + printf(".\n");
124280 + nerrors++;
124284 +typedef enum {
124285 + B_ADD, B_SUB, B_MUL, B_DIV, B_NEG, B_ABS, B_SQRT
124286 +} op_t;
124287 +typedef struct {
124288 + int line;
124289 + op_t op;
124290 + int a_sgn;
124291 + pattern_t a_exp, a_mant;
124292 + int b_sgn;
124293 + pattern_t b_exp, b_mant;
124294 + int rmode;
124295 + int excepts;
124296 + int x_sgn;
124297 + pattern_t x_exp, x_mant;
124298 +} optest_t;
124299 +static const optest_t optests[] = {
124300 + /* Additions of zero. */
124301 + {__LINE__,B_ADD, 0,P_Z,P_Z, 0,P_Z,P_Z, R_ALL,0, 0,P_Z,P_Z },
124302 + {__LINE__,B_ADD, 1,P_Z,P_Z, 0,P_Z,P_Z, R_ALL & ~R_DOWN,0, 0,P_Z,P_Z },
124303 + {__LINE__,B_ADD, 1,P_Z,P_Z, 0,P_Z,P_Z, R_DOWN,0, 1,P_Z,P_Z },
124304 + {__LINE__,B_ADD, 1,P_Z,P_Z, 1,P_Z,P_Z, R_ALL,0, 1,P_Z,P_Z },
124306 + /* Additions with NaN. */
124307 + {__LINE__,B_ADD, 0,P_O,P_101Z, 0,P_Z,P_Z, R_ALL,0, 0,P_O,P_101Z },
124308 + {__LINE__,B_ADD, 0,P_O,P_01Z, 0,P_Z,P_Z, R_ALL,
124309 + FE_INVALID | FE_INVALID_SNAN, 0,P_O,P_11Z },
124310 + {__LINE__,B_ADD, 0,P_O,P_Z, 0,P_O,P_0O, R_ALL,
124311 + FE_INVALID | FE_INVALID_SNAN, 0,P_O,P_O },
124312 + {__LINE__,B_ADD, 0,P_Z,P_Z, 0,P_O,P_11Z, R_ALL,0, 0,P_O,P_11Z },
124313 + {__LINE__,B_ADD, 0,P_O,P_001Z, 0,P_O,P_001Z, R_ALL,
124314 + FE_INVALID | FE_INVALID_SNAN, 0,P_O,P_101Z },
124315 + {__LINE__,B_ADD, 0,P_O,P_1Z, 0,P_Z,P_Z, R_ALL,0, 0,P_O,P_1Z },
124316 + {__LINE__,B_ADD, 0,P_0O,P_Z, 0,P_O,P_10O, R_ALL,0, 0,P_O,P_10O },
124318 + /* Additions with infinity. */
124319 + {__LINE__,B_ADD, 0,P_O,P_Z, 0,P_Z,P_Z, R_ALL,0, 0,P_O,P_Z },
124320 + {__LINE__,B_ADD, 0,P_O,P_Z, 1,P_Z,P_Z, R_ALL,0, 0,P_O,P_Z },
124321 + {__LINE__,B_ADD, 1,P_O,P_Z, 0,P_Z,P_Z, R_ALL,0, 1,P_O,P_Z },
124322 + {__LINE__,B_ADD, 1,P_O,P_Z, 1,P_Z,P_Z, R_ALL,0, 1,P_O,P_Z },
124323 + {__LINE__,B_ADD, 0,P_O,P_Z, 0,P_O,P_Z, R_ALL,0, 0,P_O,P_Z },
124324 + {__LINE__,B_ADD, 1,P_O,P_Z, 1,P_O,P_Z, R_ALL,0, 1,P_O,P_Z },
124325 + {__LINE__,B_ADD, 0,P_O,P_Z, 1,P_O,P_Z, R_ALL,
124326 + FE_INVALID | FE_INVALID_ISI, 0,P_O,P_1Z },
124327 + {__LINE__,B_ADD, 1,P_O,P_Z, 0,P_O,P_Z, R_ALL,
124328 + FE_INVALID | FE_INVALID_ISI, 0,P_O,P_1Z },
124329 + {__LINE__,B_ADD, 0,P_O,P_Z, 0,P_0O,P_Z, R_ALL,0, 0,P_O,P_Z },
124330 + {__LINE__,B_ADD, 1,P_O,P_Z, 0,P_0O,P_Z, R_ALL,0, 1,P_O,P_Z },
124331 + {__LINE__,B_ADD, 0,P_O,P_Z, 1,P_0O,P_Z, R_ALL,0, 0,P_O,P_Z },
124332 + {__LINE__,B_ADD, 1,P_O,P_Z, 1,P_0O,P_Z, R_ALL,0, 1,P_O,P_Z },
124334 + /* Overflow (and zero). */
124335 + {__LINE__,B_ADD, 0,P_O0,P_Z, 0,P_O0,P_Z, R_NEAREST | R_UP,
124336 + FE_INEXACT | FE_OVERFLOW, 0,P_O,P_Z },
124337 + {__LINE__,B_ADD, 0,P_O0,P_Z, 0,P_O0,P_Z, R_ZERO | R_DOWN,
124338 + FE_INEXACT | FE_OVERFLOW, 0,P_O0,P_O },
124339 + {__LINE__,B_ADD, 1,P_O0,P_Z, 1,P_O0,P_Z, R_NEAREST | R_DOWN,
124340 + FE_INEXACT | FE_OVERFLOW, 1,P_O,P_Z },
124341 + {__LINE__,B_ADD, 1,P_O0,P_Z, 1,P_O0,P_Z, R_ZERO | R_UP,
124342 + FE_INEXACT | FE_OVERFLOW, 1,P_O0,P_O },
124343 + {__LINE__,B_ADD, 0,P_O0,P_Z, 1,P_O0,P_Z, R_ALL & ~R_DOWN,
124344 + 0, 0,P_Z,P_Z },
124345 + {__LINE__,B_ADD, 0,P_O0,P_Z, 1,P_O0,P_Z, R_DOWN,
124346 + 0, 1,P_Z,P_Z },
124348 + /* Negation. */
124349 + {__LINE__,B_NEG, 0,P_Z,P_Z, 0,0,0, R_ALL, 0, 1,P_Z,P_Z },
124350 + {__LINE__,B_NEG, 1,P_Z,P_Z, 0,0,0, R_ALL, 0, 0,P_Z,P_Z },
124351 + {__LINE__,B_NEG, 0,P_O,P_Z, 0,0,0, R_ALL, 0, 1,P_O,P_Z },
124352 + {__LINE__,B_NEG, 1,P_O,P_Z, 0,0,0, R_ALL, 0, 0,P_O,P_Z },
124353 + {__LINE__,B_NEG, 0,P_O,P_1Z, 0,0,0, R_ALL, 0, 1,P_O,P_1Z },
124354 + {__LINE__,B_NEG, 1,P_O,P_1Z, 0,0,0, R_ALL, 0, 0,P_O,P_1Z },
124355 + {__LINE__,B_NEG, 0,P_O,P_01Z, 0,0,0, R_ALL, 0, 1,P_O,P_01Z },
124356 + {__LINE__,B_NEG, 1,P_O,P_01Z, 0,0,0, R_ALL, 0, 0,P_O,P_01Z },
124357 + {__LINE__,B_NEG, 0,P_1Z,P_1Z1, 0,0,0, R_ALL, 0, 1,P_1Z,P_1Z1 },
124358 + {__LINE__,B_NEG, 1,P_1Z,P_1Z1, 0,0,0, R_ALL, 0, 0,P_1Z,P_1Z1 },
124359 + {__LINE__,B_NEG, 0,P_Z,P_Z1, 0,0,0, R_ALL, 0, 1,P_Z,P_Z1 },
124360 + {__LINE__,B_NEG, 1,P_Z,P_Z1, 0,0,0, R_ALL, 0, 0,P_Z,P_Z1 },
124362 + /* Absolute value. */
124363 + {__LINE__,B_ABS, 0,P_Z,P_Z, 0,0,0, R_ALL, 0, 0,P_Z,P_Z },
124364 + {__LINE__,B_ABS, 1,P_Z,P_Z, 0,0,0, R_ALL, 0, 0,P_Z,P_Z },
124365 + {__LINE__,B_ABS, 0,P_O,P_Z, 0,0,0, R_ALL, 0, 0,P_O,P_Z },
124366 + {__LINE__,B_ABS, 1,P_O,P_Z, 0,0,0, R_ALL, 0, 0,P_O,P_Z },
124367 + {__LINE__,B_ABS, 0,P_O,P_1Z, 0,0,0, R_ALL, 0, 0,P_O,P_1Z },
124368 + {__LINE__,B_ABS, 1,P_O,P_1Z, 0,0,0, R_ALL, 0, 0,P_O,P_1Z },
124369 + {__LINE__,B_ABS, 0,P_O,P_01Z, 0,0,0, R_ALL, 0, 0,P_O,P_01Z },
124370 + {__LINE__,B_ABS, 1,P_O,P_01Z, 0,0,0, R_ALL, 0, 0,P_O,P_01Z },
124371 + {__LINE__,B_ABS, 0,P_1Z,P_1Z1, 0,0,0, R_ALL, 0, 0,P_1Z,P_1Z1 },
124372 + {__LINE__,B_ABS, 1,P_1Z,P_1Z1, 0,0,0, R_ALL, 0, 0,P_1Z,P_1Z1 },
124373 + {__LINE__,B_ABS, 0,P_Z,P_Z1, 0,0,0, R_ALL, 0, 0,P_Z,P_Z1 },
124374 + {__LINE__,B_ABS, 1,P_Z,P_Z1, 0,0,0, R_ALL, 0, 0,P_Z,P_Z1 },
124376 + /* Square root. */
124377 + {__LINE__,B_SQRT, 0,P_Z,P_Z, 0,0,0, R_ALL, 0, 0,P_Z,P_Z },
124378 + {__LINE__,B_SQRT, 1,P_Z,P_Z, 0,0,0, R_ALL, 0, 1,P_Z,P_Z },
124379 + {__LINE__,B_SQRT, 0,P_O,P_1Z, 0,0,0, R_ALL, 0, 0,P_O,P_1Z },
124380 + {__LINE__,B_SQRT, 1,P_O,P_1Z, 0,0,0, R_ALL, 0, 1,P_O,P_1Z },
124381 + {__LINE__,B_SQRT, 0,P_O,P_01Z, 0,0,0, R_ALL,
124382 + FE_INVALID | FE_INVALID_SNAN, 0,P_O,P_11Z },
124383 + {__LINE__,B_SQRT, 1,P_O,P_01Z, 0,0,0, R_ALL,
124384 + FE_INVALID | FE_INVALID_SNAN, 1,P_O,P_11Z },
124386 + {__LINE__,B_SQRT, 0,P_O,P_Z, 0,0,0, R_ALL, 0, 0,P_O,P_Z },
124387 + {__LINE__,B_SQRT, 0,P_0O,P_Z, 0,0,0, R_ALL, 0, 0,P_0O,P_Z },
124389 + {__LINE__,B_SQRT, 1,P_O,P_Z, 0,0,0, R_ALL,
124390 + FE_INVALID | FE_INVALID_SQRT, 0,P_O,P_1Z },
124391 + {__LINE__,B_SQRT, 1,P_1Z,P_1Z1, 0,0,0, R_ALL,
124392 + FE_INVALID | FE_INVALID_SQRT, 0,P_O,P_1Z },
124393 + {__LINE__,B_SQRT, 1,P_Z,P_Z1, 0,0,0, R_ALL,
124394 + FE_INVALID | FE_INVALID_SQRT, 0,P_O,P_1Z },
124398 +static void
124399 +check_op(void)
124401 + size_t i;
124402 + int j;
124403 + tocheck_t r, a, b, x;
124404 + int raised;
124406 + for (i = 0; i < sizeof(optests)/sizeof(optests[0]); i++)
124408 + a = pattern(optests[i].a_sgn, optests[i].a_exp,
124409 + optests[i].a_mant);
124410 + b = pattern(optests[i].b_sgn, optests[i].b_exp,
124411 + optests[i].b_mant);
124412 + x = pattern(optests[i].x_sgn, optests[i].x_exp,
124413 + optests[i].x_mant);
124414 + for (j = 0; j < 4; j++)
124415 + if (optests[i].rmode & 1<<j)
124417 + fesetenv(rmodes+j);
124418 + switch (optests[i].op)
124420 + case B_ADD: r = a + b; break;
124421 + case B_SUB: r = a - b; break;
124422 + case B_MUL: r = a * b; break;
124423 + case B_DIV: r = a / b; break;
124424 + case B_NEG: r = -a; break;
124425 + case B_ABS: r = FUNC(fabs)(a); break;
124426 + case B_SQRT: r = FUNC(sqrt)(a); break;
124428 + raised = fetestexcept(all_exceptions);
124429 + check_result(optests[i].line,rmnames[j],x,r);
124430 + check_excepts(optests[i].line,rmnames[j],
124431 + optests[i].excepts,raised);
124436 +static void
124437 +fail_xr(int line, const char *rm, tocheck_t x, tocheck_t r, tocheck_t xx,
124438 + int xflag)
124440 + size_t i;
124441 + unsigned char *cx, *cr, *cxx;
124443 + printf("%s:%d:round %s:fail\n with x=0x", __FILE__, line,rm);
124444 + cx = (unsigned char *)&x;
124445 + cr = (unsigned char *)&r;
124446 + cxx = (unsigned char *)&xx;
124447 + for (i = 0; i < sizeof(tocheck_t); i++)
124448 + printf("%02x", cx[i]);
124449 + printf(" r=0x");
124450 + for (i = 0; i < sizeof(tocheck_t); i++)
124451 + printf("%02x", cr[i]);
124452 + printf(" xx=0x");
124453 + for (i = 0; i < sizeof(tocheck_t); i++)
124454 + printf("%02x", cxx[i]);
124455 + printf(" inexact=%d\n", xflag != 0);
124456 + nerrors++;
124459 +static void
124460 +check_sqrt(tocheck_t a)
124462 + int j;
124463 + tocheck_t r0, r1, r2, x0, x1, x2;
124464 + int raised = 0;
124465 + int ok;
124467 + for (j = 0; j < 4; j++)
124469 + int excepts;
124471 + fesetenv(rmodes+j);
124472 + r1 = FUNC(sqrt)(a);
124473 + excepts = fetestexcept(all_exceptions);
124474 + fesetenv(FE_DFL_ENV);
124475 + raised |= excepts & ~FE_INEXACT;
124476 + x1 = r1 * r1 - a;
124477 + if (excepts & FE_INEXACT)
124479 + r0 = delta(r1,-1); r2 = delta(r1,1);
124480 + switch (1 << j)
124482 + case R_NEAREST:
124483 + x0 = r0 * r0 - a; x2 = r2 * r2 - a;
124484 + ok = fabs(x0) >= fabs(x1) && fabs(x1) <= fabs(x2);
124485 + break;
124486 + case R_ZERO: case R_DOWN:
124487 + x2 = r2 * r2 - a;
124488 + ok = x1 <= 0 && x2 >= 0;
124489 + break;
124490 + case R_UP:
124491 + x0 = r0 * r0 - a;
124492 + ok = x1 >= 0 && x0 <= 0;
124493 + break;
124494 + default:
124495 + assert(0);
124498 + else
124499 + ok = x1 == 0;
124500 + if (!ok)
124501 + fail_xr(__LINE__,rmnames[j],a,r1,x1,excepts&FE_INEXACT);
124503 + check_excepts(__LINE__,"all",0,raised);
124506 +int main(int argc, char **argv)
124508 + int i;
124510 + _LIB_VERSION = _IEEE_;
124512 + /* Set up environments for rounding modes. */
124513 + fesetenv(FE_DFL_ENV);
124514 + fesetround(FE_TONEAREST);
124515 + fegetenv(rmodes+0);
124516 + fesetround(FE_TOWARDZERO);
124517 + fegetenv(rmodes+1);
124518 + fesetround(FE_UPWARD);
124519 + fegetenv(rmodes+2);
124520 + fesetround(FE_DOWNWARD);
124521 + fegetenv(rmodes+3);
124523 +#if defined(FE_INVALID_SOFTWARE) || defined(FE_INVALID_SQRT)
124524 + /* There's this really stupid feature of the 601... */
124525 + fesetenv(FE_DFL_ENV);
124526 + feraiseexcept(FE_INVALID_SOFTWARE);
124527 + if (!fetestexcept(FE_INVALID_SOFTWARE))
124528 + excepts_missing |= FE_INVALID_SOFTWARE;
124529 + fesetenv(FE_DFL_ENV);
124530 + feraiseexcept(FE_INVALID_SQRT);
124531 + if (!fetestexcept(FE_INVALID_SQRT))
124532 + excepts_missing |= FE_INVALID_SQRT;
124533 +#endif
124535 + check_op();
124536 + for (i = 0; i < 100000; i++)
124537 + check_sqrt(pattern(0, P_Rno, P_R));
124538 + for (i = 0; i < 100; i++)
124539 + check_sqrt(pattern(0, P_Z, P_R));
124540 + check_sqrt(pattern(0,P_Z,P_Z1));
124542 + printf("%d errors.\n", nerrors);
124543 + return nerrors == 0 ? 0 : 1;
124545 diff -u -udbrN glibc-2.3.2/sysdeps/powerpc/test-arithf.c glibc-2.3.2-200304020432/sysdeps/powerpc/test-arithf.c
124546 --- glibc-2.3.2/sysdeps/powerpc/test-arithf.c Thu Jan 1 01:00:00 1970
124547 +++ glibc-2.3.2-200304020432/sysdeps/powerpc/test-arithf.c Sun Aug 10 19:49:46 1997
124548 @@ -0,0 +1,6 @@
124549 +typedef float tocheck_t;
124550 +#define ESIZE 8
124551 +#define MSIZE 23
124552 +#define FUNC(x) x##f
124554 +#include "test-arith.c"
124555 diff -u -udbrN glibc-2.3.2/sysdeps/s390/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/s390/bits/atomic.h
124556 --- glibc-2.3.2/sysdeps/s390/bits/atomic.h Thu Jan 1 01:00:00 1970
124557 +++ glibc-2.3.2-200304020432/sysdeps/s390/bits/atomic.h Wed Mar 26 05:01:47 2003
124558 @@ -0,0 +1,76 @@
124559 +/* Copyright (C) 2003 Free Software Foundation, Inc.
124560 + This file is part of the GNU C Library.
124561 + Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
124563 + The GNU C Library is free software; you can redistribute it and/or
124564 + modify it under the terms of the GNU Lesser General Public
124565 + License as published by the Free Software Foundation; either
124566 + version 2.1 of the License, or (at your option) any later version.
124568 + The GNU C Library is distributed in the hope that it will be useful,
124569 + but WITHOUT ANY WARRANTY; without even the implied warranty of
124570 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
124571 + Lesser General Public License for more details.
124573 + You should have received a copy of the GNU Lesser General Public
124574 + License along with the GNU C Library; if not, write to the Free
124575 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
124576 + 02111-1307 USA. */
124578 +#include <stdint.h>
124580 +typedef int8_t atomic8_t;
124581 +typedef uint8_t uatomic8_t;
124582 +typedef int_fast8_t atomic_fast8_t;
124583 +typedef uint_fast8_t uatomic_fast8_t;
124585 +typedef int16_t atomic16_t;
124586 +typedef uint16_t uatomic16_t;
124587 +typedef int_fast16_t atomic_fast16_t;
124588 +typedef uint_fast16_t uatomic_fast16_t;
124590 +typedef int32_t atomic32_t;
124591 +typedef uint32_t uatomic32_t;
124592 +typedef int_fast32_t atomic_fast32_t;
124593 +typedef uint_fast32_t uatomic_fast32_t;
124595 +typedef int64_t atomic64_t;
124596 +typedef uint64_t uatomic64_t;
124597 +typedef int_fast64_t atomic_fast64_t;
124598 +typedef uint_fast64_t uatomic_fast64_t;
124600 +typedef intptr_t atomicptr_t;
124601 +typedef uintptr_t uatomicptr_t;
124602 +typedef intmax_t atomic_max_t;
124603 +typedef uintmax_t uatomic_max_t;
124606 +#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
124607 + (abort (), 0)
124609 +#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
124610 + (abort (), 0)
124612 +#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
124613 + ({ __typeof (mem) __archmem = (mem); \
124614 + __typeof (*mem) __archold = (oldval); \
124615 + __asm __volatile ("cs %0,%2,%1" \
124616 + : "+d" (__archold), "=Q" (*__archmem) \
124617 + : "d" (newval), "m" (*__archmem) : "cc" ); \
124618 + __archold; })
124620 +#ifdef __s390x__
124621 +# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
124622 + ({ __typeof (mem) __archmem = (mem); \
124623 + __typeof (*mem) __archold = (oldval); \
124624 + __asm __volatile ("csg %0,%2,%1" \
124625 + : "+d" (__archold), "=Q" (*__archmem) \
124626 + : "d" ((long) (newval)), "m" (*__archmem) : "cc" ); \
124627 + __archold; })
124628 +#else
124629 +/* For 31 bit we do not really need 64-bit compare-and-exchange. We can
124630 + implement them by use of the csd instruction. The straightforward
124631 + implementation causes warnings so we skip the definition for now. */
124632 +# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
124633 + (abort (), 0)
124634 +#endif
124635 diff -u -udbrN glibc-2.3.2/sysdeps/s390/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/s390/fpu/libm-test-ulps
124636 --- glibc-2.3.2/sysdeps/s390/fpu/libm-test-ulps Thu Sep 5 01:12:20 2002
124637 +++ glibc-2.3.2-200304020432/sysdeps/s390/fpu/libm-test-ulps Sun Mar 23 01:52:10 2003
124638 @@ -94,7 +94,7 @@
124639 idouble: 1
124641 # ccos
124642 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
124643 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
124644 float: 1
124645 ifloat: 1
124646 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
124647 @@ -107,10 +107,10 @@
124648 ifloat: 1
124650 # ccosh
124651 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
124652 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
124653 float: 1
124654 ifloat: 1
124655 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
124656 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
124657 float: 1
124658 ifloat: 1
124659 Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
124660 @@ -145,7 +145,7 @@
124661 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
124662 float: 1
124663 ifloat: 1
124664 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
124665 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
124666 double: 1
124667 float: 5
124668 idouble: 1
124669 @@ -239,7 +239,7 @@
124670 ifloat: 2
124672 # csinh
124673 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
124674 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
124675 double: 1
124676 idouble: 1
124677 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
124678 @@ -258,7 +258,7 @@
124679 ifloat: 1
124681 # ctan
124682 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
124683 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
124684 double: 1
124685 idouble: 1
124686 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
124687 @@ -266,7 +266,7 @@
124688 idouble: 1
124690 # ctanh
124691 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
124692 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
124693 double: 1
124694 float: 2
124695 idouble: 1
124696 @@ -453,12 +453,12 @@
124697 ifloat: 2
124699 # lgamma
124700 -Test "lgamma (0.7) == 0.26086724653166651439":
124701 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
124702 double: 1
124703 float: 1
124704 idouble: 1
124705 ifloat: 1
124706 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
124707 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
124708 double: 1
124709 float: 2
124710 idouble: 1
124711 @@ -513,7 +513,7 @@
124712 Test "tgamma (0.5) == sqrt (pi)":
124713 float: 1
124714 ifloat: 1
124715 -Test "tgamma (0.7) == 1.29805533264755778568":
124716 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
124717 double: 1
124718 float: 1
124719 idouble: 1
124720 diff -u -udbrN glibc-2.3.2/sysdeps/s390/s390-32/atomicity.h glibc-2.3.2-200304020432/sysdeps/s390/s390-32/atomicity.h
124721 --- glibc-2.3.2/sysdeps/s390/s390-32/atomicity.h Sat Jul 7 21:21:28 2001
124722 +++ glibc-2.3.2-200304020432/sysdeps/s390/s390-32/atomicity.h Thu Jan 1 01:00:00 1970
124723 @@ -1,76 +0,0 @@
124724 -/* Low-level functions for atomic operations. S390 version.
124725 - Copyright (C) 2000, 2001 Free Software Foundation, Inc.
124726 - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
124727 - This file is part of the GNU C Library.
124729 - The GNU C Library is free software; you can redistribute it and/or
124730 - modify it under the terms of the GNU Lesser General Public
124731 - License as published by the Free Software Foundation; either
124732 - version 2.1 of the License, or (at your option) any later version.
124734 - The GNU C Library is distributed in the hope that it will be useful,
124735 - but WITHOUT ANY WARRANTY; without even the implied warranty of
124736 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
124737 - Lesser General Public License for more details.
124739 - You should have received a copy of the GNU Lesser General Public
124740 - License along with the GNU C Library; if not, write to the Free
124741 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
124742 - 02111-1307 USA. */
124744 -#ifndef _ATOMICITY_H
124745 -#define _ATOMICITY_H 1
124747 -#include <inttypes.h>
124749 -static inline int
124750 -__attribute__ ((unused))
124751 -exchange_and_add (volatile uint32_t *mem, int val)
124753 - int result;
124754 - __asm__ __volatile__(
124755 - " L %0,%2\n"
124756 - " LA 2,%1\n"
124757 - "0: LR 0,%0\n"
124758 - " AR 0,%3\n"
124759 - " CS %0,0,0(2)\n"
124760 - " JL 0b"
124761 - : "=&d" (result), "=m" (*mem)
124762 - : "1" (*mem), "d" (val) : "0", "1", "2" );
124763 - return result;
124766 -static inline void
124767 -__attribute__ ((unused))
124768 -atomic_add (volatile uint32_t *mem, int val)
124770 - __asm__ __volatile__(
124771 - " LA 2,%0\n"
124772 - "0: L 0,%1\n"
124773 - " LR 1,0\n"
124774 - " AR 1,%2\n"
124775 - " CS 0,1,0(2)\n"
124776 - " JL 0b"
124777 - : "=m" (*mem) : "0" (*mem), "d" (val) : "0", "1", "2" );
124780 -static inline int
124781 -__attribute__ ((unused))
124782 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
124784 - int retval;
124786 - __asm__ __volatile__(
124787 - " la 1,%1\n"
124788 - " lr 0,%2\n"
124789 - " cs 0,%3,0(1)\n"
124790 - " ipm %0\n"
124791 - " srl %0,28\n"
124792 - "0:"
124793 - : "=&r" (retval), "+m" (*p)
124794 - : "d" (oldval) , "d" (newval)
124795 - : "memory", "0", "1", "cc");
124796 - return !retval;
124799 -#endif /* atomicity.h */
124800 diff -u -udbrN glibc-2.3.2/sysdeps/s390/s390-32/backtrace.c glibc-2.3.2-200304020432/sysdeps/s390/s390-32/backtrace.c
124801 --- glibc-2.3.2/sysdeps/s390/s390-32/backtrace.c Sat Jul 7 21:21:28 2001
124802 +++ glibc-2.3.2-200304020432/sysdeps/s390/s390-32/backtrace.c Wed Mar 26 04:43:53 2003
124803 @@ -71,7 +71,7 @@
124804 out of range. */
124805 break;
124807 - array[cnt++] = stack->save_grps[8];
124808 + array[cnt++] = stack->save_grps[8] & 0x7fffffff;
124810 stack = (struct layout *) stack->back_chain;
124812 diff -u -udbrN glibc-2.3.2/sysdeps/s390/s390-32/sysdep.h glibc-2.3.2-200304020432/sysdeps/s390/s390-32/sysdep.h
124813 --- glibc-2.3.2/sysdeps/s390/s390-32/sysdep.h Tue Jan 14 02:04:15 2003
124814 +++ glibc-2.3.2-200304020432/sysdeps/s390/s390-32/sysdep.h Fri Mar 7 11:06:56 2003
124815 @@ -111,7 +111,7 @@
124817 /* Local label name for asm code. */
124818 #ifndef L
124819 -#define L(name) name
124820 +#define L(name) .L##name
124821 #endif
124823 #endif /* __ASSEMBLER__ */
124824 diff -u -udbrN glibc-2.3.2/sysdeps/s390/s390-64/atomicity.h glibc-2.3.2-200304020432/sysdeps/s390/s390-64/atomicity.h
124825 --- glibc-2.3.2/sysdeps/s390/s390-64/atomicity.h Sat Jul 7 21:21:28 2001
124826 +++ glibc-2.3.2-200304020432/sysdeps/s390/s390-64/atomicity.h Thu Jan 1 01:00:00 1970
124827 @@ -1,76 +0,0 @@
124828 -/* Low-level functions for atomic operations. 64 bit S/390 version.
124829 - Copyright (C) 2001 Free Software Foundation, Inc.
124830 - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
124831 - This file is part of the GNU C Library.
124833 - The GNU C Library is free software; you can redistribute it and/or
124834 - modify it under the terms of the GNU Lesser General Public
124835 - License as published by the Free Software Foundation; either
124836 - version 2.1 of the License, or (at your option) any later version.
124838 - The GNU C Library is distributed in the hope that it will be useful,
124839 - but WITHOUT ANY WARRANTY; without even the implied warranty of
124840 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
124841 - Lesser General Public License for more details.
124843 - You should have received a copy of the GNU Lesser General Public
124844 - License along with the GNU C Library; if not, write to the Free
124845 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
124846 - 02111-1307 USA. */
124848 -#ifndef _ATOMICITY_H
124849 -#define _ATOMICITY_H 1
124851 -#include <inttypes.h>
124853 -static inline int
124854 -__attribute__ ((unused))
124855 -exchange_and_add (volatile uint32_t *mem, int val)
124857 - int result;
124858 - __asm__ __volatile__(
124859 - " L %0,%2\n"
124860 - " LA 2,%1\n"
124861 - "0: LR 0,%0\n"
124862 - " AR 0,%3\n"
124863 - " CS %0,0,0(2)\n"
124864 - " JL 0b"
124865 - : "=&d" (result), "=m" (*mem)
124866 - : "1" (*mem), "d" (val) : "0", "1", "2" );
124867 - return result;
124870 -static inline void
124871 -__attribute__ ((unused))
124872 -atomic_add (volatile uint32_t *mem, int val)
124874 - __asm__ __volatile__(
124875 - " LA 2,%0\n"
124876 - "0: L 0,%1\n"
124877 - " LR 1,0\n"
124878 - " AR 1,%2\n"
124879 - " CS 0,1,0(2)\n"
124880 - " JL 0b"
124881 - : "=m" (*mem) : "0" (*mem), "d" (val) : "0", "1", "2" );
124884 -static inline int
124885 -__attribute__ ((unused))
124886 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
124888 - int retval;
124890 - __asm__ __volatile__(
124891 - " la 1,%1\n"
124892 - " lgr 0,%2\n"
124893 - " csg 0,%3,0(1)\n"
124894 - " ipm %0\n"
124895 - " srl %0,28\n"
124896 - "0:"
124897 - : "=&r" (retval), "+m" (*p)
124898 - : "d" (oldval) , "d" (newval)
124899 - : "memory", "0", "1", "cc");
124900 - return !retval;
124903 -#endif /* atomicity.h */
124904 diff -u -udbrN glibc-2.3.2/sysdeps/s390/s390-64/sysdep.h glibc-2.3.2-200304020432/sysdeps/s390/s390-64/sysdep.h
124905 --- glibc-2.3.2/sysdeps/s390/s390-64/sysdep.h Tue Jan 14 02:04:15 2003
124906 +++ glibc-2.3.2-200304020432/sysdeps/s390/s390-64/sysdep.h Fri Mar 7 11:06:55 2003
124907 @@ -104,8 +104,7 @@
124909 /* Local label name for asm code. */
124910 #ifndef L
124911 -#define L(name) name
124912 +#define L(name) .L##name
124913 #endif
124915 #endif /* __ASSEMBLER__ */
124917 diff -u -udbrN glibc-2.3.2/sysdeps/sh/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/sh/bits/atomic.h
124918 --- glibc-2.3.2/sysdeps/sh/bits/atomic.h Thu Jan 1 01:00:00 1970
124919 +++ glibc-2.3.2-200304020432/sysdeps/sh/bits/atomic.h Sat Mar 29 02:14:29 2003
124920 @@ -0,0 +1,402 @@
124921 +/* Copyright (C) 2003 Free Software Foundation, Inc.
124922 + This file is part of the GNU C Library.
124924 + The GNU C Library is free software; you can redistribute it and/or
124925 + modify it under the terms of the GNU Lesser General Public
124926 + License as published by the Free Software Foundation; either
124927 + version 2.1 of the License, or (at your option) any later version.
124929 + The GNU C Library is distributed in the hope that it will be useful,
124930 + but WITHOUT ANY WARRANTY; without even the implied warranty of
124931 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
124932 + Lesser General Public License for more details.
124934 + You should have received a copy of the GNU Lesser General Public
124935 + License along with the GNU C Library; if not, write to the Free
124936 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
124937 + 02111-1307 USA. */
124939 +#include <stdint.h>
124942 +typedef int8_t atomic8_t;
124943 +typedef uint8_t uatomic8_t;
124944 +typedef int_fast8_t atomic_fast8_t;
124945 +typedef uint_fast8_t uatomic_fast8_t;
124947 +typedef int16_t atomic16_t;
124948 +typedef uint16_t uatomic16_t;
124949 +typedef int_fast16_t atomic_fast16_t;
124950 +typedef uint_fast16_t uatomic_fast16_t;
124952 +typedef int32_t atomic32_t;
124953 +typedef uint32_t uatomic32_t;
124954 +typedef int_fast32_t atomic_fast32_t;
124955 +typedef uint_fast32_t uatomic_fast32_t;
124957 +typedef int64_t atomic64_t;
124958 +typedef uint64_t uatomic64_t;
124959 +typedef int_fast64_t atomic_fast64_t;
124960 +typedef uint_fast64_t uatomic_fast64_t;
124962 +typedef intptr_t atomicptr_t;
124963 +typedef uintptr_t uatomicptr_t;
124964 +typedef intmax_t atomic_max_t;
124965 +typedef uintmax_t uatomic_max_t;
124968 +#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
124969 + ({ __typeof (*mem) __result; \
124970 + __asm __volatile ("\
124971 + .align 2\n\
124972 + mova 1f,r0\n\
124973 + nop\n\
124974 + mov r15,r1\n\
124975 + mov #-8,r15\n\
124976 + 0: mov.b @%1,%0\n\
124977 + cmp/eq %0,%3\n\
124978 + bf 1f\n\
124979 + mov.b %2,@%1\n\
124980 + 1: mov r1,r15"\
124981 + : "=&r" (__result) : "r" (mem), "r" (newval), "r" (oldval) \
124982 + : "r0", "r1", "t", "memory"); \
124983 + __result; })
124985 +#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
124986 + ({ __typeof (*mem) __result; \
124987 + __asm __volatile ("\
124988 + .align 2\n\
124989 + mova 1f,r0\n\
124990 + nop\n\
124991 + mov r15,r1\n\
124992 + mov #-8,r15\n\
124993 + 0: mov.w @%1,%0\n\
124994 + cmp/eq %0,%3\n\
124995 + bf 1f\n\
124996 + mov.w %2,@%1\n\
124997 + 1: mov r1,r15"\
124998 + : "=&r" (__result) : "r" (mem), "r" (newval), "r" (oldval) \
124999 + : "r0", "r1", "t", "memory"); \
125000 + __result; })
125002 +#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
125003 + ({ __typeof (*mem) __result; \
125004 + __asm __volatile ("\
125005 + .align 2\n\
125006 + mova 1f,r0\n\
125007 + nop\n\
125008 + mov r15,r1\n\
125009 + mov #-8,r15\n\
125010 + 0: mov.l @%1,%0\n\
125011 + cmp/eq %0,%3\n\
125012 + bf 1f\n\
125013 + mov.l %2,@%1\n\
125014 + 1: mov r1,r15"\
125015 + : "=&r" (__result) : "r" (mem), "r" (newval), "r" (oldval) \
125016 + : "r0", "r1", "t", "memory"); \
125017 + __result; })
125019 +/* XXX We do not really need 64-bit compare-and-exchange. At least
125020 + not in the moment. Using it would mean causing portability
125021 + problems since not many other 32-bit architectures have support for
125022 + such an operation. So don't define any code for now. */
125024 +# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
125025 + (abort (), 0)
125027 +#define atomic_exchange_and_add(mem, value) \
125028 + ({ __typeof (*mem) __result; \
125029 + __typeof (value) __value; \
125030 + if (sizeof (*mem) == 1) \
125031 + __asm __volatile ("\
125032 + .align 2\n\
125033 + mova 1f,r0\n\
125034 + mov r15,r1\n\
125035 + mov #-6,r15\n\
125036 + 0: mov.b @%2,%0\n\
125037 + add %0,%1\n\
125038 + mov.b %1,@%2\n\
125039 + 1: mov r1,r15"\
125040 + : "=&r" (__result), "=&r" (__value) : "r" (mem), "1" (value) \
125041 + : "r0", "r1", "memory"); \
125042 + else if (sizeof (*mem) == 2) \
125043 + __asm __volatile ("\
125044 + .align 2\n\
125045 + mova 1f,r0\n\
125046 + mov r15,r1\n\
125047 + mov #-6,r15\n\
125048 + 0: mov.w @%2,%0\n\
125049 + add %0,%1\n\
125050 + mov.w %1,@%2\n\
125051 + 1: mov r1,r15"\
125052 + : "=&r" (__result), "=&r" (__value) : "r" (mem), "1" (value) \
125053 + : "r0", "r1", "memory"); \
125054 + else if (sizeof (*mem) == 4) \
125055 + __asm __volatile ("\
125056 + .align 2\n\
125057 + mova 1f,r0\n\
125058 + mov r15,r1\n\
125059 + mov #-6,r15\n\
125060 + 0: mov.l @%2,%0\n\
125061 + add %0,%1\n\
125062 + mov.l %1,@%2\n\
125063 + 1: mov r1,r15"\
125064 + : "=&r" (__result), "=&r" (__value) : "r" (mem), "1" (value) \
125065 + : "r0", "r1", "memory"); \
125066 + else \
125067 + { \
125068 + __typeof (value) addval = (value); \
125069 + __typeof (mem) memp = (mem); \
125070 + do \
125071 + __result = *memp; \
125072 + while (__arch_compare_and_exchange_val_64_acq \
125073 + (memp, __result + addval, __result) == __result); \
125074 + (void) addval; \
125075 + } \
125076 + __result; })
125078 +#define atomic_add(mem, value) \
125079 + (void) ({ __typeof (value) __value; \
125080 + if (sizeof (*mem) == 1) \
125081 + __asm __volatile ("\
125082 + .align 2\n\
125083 + mova 1f,r0\n\
125084 + mov r15,r1\n\
125085 + mov #-6,r15\n\
125086 + 0: mov.b @%1,r2\n\
125087 + add r2,%0\n\
125088 + mov.b %0,@%1\n\
125089 + 1: mov r1,r15"\
125090 + : "=&r" (__value) : "r" (mem), "0" (value) \
125091 + : "r0", "r1", "r2", "memory"); \
125092 + else if (sizeof (*mem) == 2) \
125093 + __asm __volatile ("\
125094 + .align 2\n\
125095 + mova 1f,r0\n\
125096 + mov r15,r1\n\
125097 + mov #-6,r15\n\
125098 + 0: mov.w @%1,r2\n\
125099 + add r2,%0\n\
125100 + mov.w %0,@%1\n\
125101 + 1: mov r1,r15"\
125102 + : "=&r" (__value) : "r" (mem), "0" (value) \
125103 + : "r0", "r1", "r2", "memory"); \
125104 + else if (sizeof (*mem) == 4) \
125105 + __asm __volatile ("\
125106 + .align 2\n\
125107 + mova 1f,r0\n\
125108 + mov r15,r1\n\
125109 + mov #-6,r15\n\
125110 + 0: mov.l @%1,r2\n\
125111 + add r2,%0\n\
125112 + mov.l %0,@%1\n\
125113 + 1: mov r1,r15"\
125114 + : "=&r" (__value) : "r" (mem), "0" (value) \
125115 + : "r0", "r1", "r2", "memory"); \
125116 + else \
125117 + { \
125118 + __typeof (value) addval = (value); \
125119 + __typeof (*mem) oldval; \
125120 + __typeof (mem) memp = (mem); \
125121 + do \
125122 + oldval = *memp; \
125123 + while (__arch_compare_and_exchange_val_64_acq \
125124 + (memp, oldval + addval, oldval) == oldval); \
125125 + (void) addval; \
125126 + } \
125129 +#define atomic_add_negative(mem, value) \
125130 + ({ unsigned char __result; \
125131 + __typeof (value) __value; \
125132 + if (sizeof (*mem) == 1) \
125133 + __asm __volatile ("\
125134 + .align 2\n\
125135 + mova 1f,r0\n\
125136 + mov r15,r1\n\
125137 + mov #-6,r15\n\
125138 + 0: mov.b @%2,r2\n\
125139 + add r2,%1\n\
125140 + mov.b %1,@%2\n\
125141 + 1: mov r1,r15\n\
125142 + shal %1\n\
125143 + movt %0"\
125144 + : "=r" (__result), "=&r" (__value) : "r" (mem), "1" (value) \
125145 + : "r0", "r1", "r2", "t", "memory"); \
125146 + else if (sizeof (*mem) == 2) \
125147 + __asm __volatile ("\
125148 + .align 2\n\
125149 + mova 1f,r0\n\
125150 + mov r15,r1\n\
125151 + mov #-6,r15\n\
125152 + 0: mov.w @%2,r2\n\
125153 + add r2,%1\n\
125154 + mov.w %1,@%2\n\
125155 + 1: mov r1,r15\n\
125156 + shal %1\n\
125157 + movt %0"\
125158 + : "=r" (__result), "=&r" (__value) : "r" (mem), "1" (value) \
125159 + : "r0", "r1", "r2", "t", "memory"); \
125160 + else if (sizeof (*mem) == 4) \
125161 + __asm __volatile ("\
125162 + .align 2\n\
125163 + mova 1f,r0\n\
125164 + mov r15,r1\n\
125165 + mov #-6,r15\n\
125166 + 0: mov.l @%2,r2\n\
125167 + add r2,%1\n\
125168 + mov.l %1,@%2\n\
125169 + 1: mov r1,r15\n\
125170 + shal %1\n\
125171 + movt %0"\
125172 + : "=r" (__result), "=&r" (__value) : "r" (mem), "1" (value) \
125173 + : "r0", "r1", "r2", "t", "memory"); \
125174 + else \
125175 + abort (); \
125176 + __result; })
125178 +#define atomic_add_zero(mem, value) \
125179 + ({ unsigned char __result; \
125180 + __typeof (value) __value; \
125181 + if (sizeof (*mem) == 1) \
125182 + __asm __volatile ("\
125183 + .align 2\n\
125184 + mova 1f,r0\n\
125185 + mov r15,r1\n\
125186 + mov #-6,r15\n\
125187 + 0: mov.b @%2,r2\n\
125188 + add r2,%1\n\
125189 + mov.b %1,@%2\n\
125190 + 1: mov r1,r15\n\
125191 + tst %1,%1\n\
125192 + movt %0"\
125193 + : "=r" (__result), "=&r" (__value) : "r" (mem), "1" (value) \
125194 + : "r0", "r1", "r2", "t", "memory"); \
125195 + else if (sizeof (*mem) == 2) \
125196 + __asm __volatile ("\
125197 + .align 2\n\
125198 + mova 1f,r0\n\
125199 + mov r15,r1\n\
125200 + mov #-6,r15\n\
125201 + 0: mov.w @%2,r2\n\
125202 + add r2,%1\n\
125203 + mov.w %1,@%2\n\
125204 + 1: mov r1,r15\n\
125205 + tst %1,%1\n\
125206 + movt %0"\
125207 + : "=r" (__result), "=&r" (__value) : "r" (mem), "1" (value) \
125208 + : "r0", "r1", "r2", "t", "memory"); \
125209 + else if (sizeof (*mem) == 4) \
125210 + __asm __volatile ("\
125211 + .align 2\n\
125212 + mova 1f,r0\n\
125213 + mov r15,r1\n\
125214 + mov #-6,r15\n\
125215 + 0: mov.l @%2,r2\n\
125216 + add r2,%1\n\
125217 + mov.l %1,@%2\n\
125218 + 1: mov r1,r15\n\
125219 + tst %1,%1\n\
125220 + movt %0"\
125221 + : "=r" (__result), "=&r" (__value) : "r" (mem), "1" (value) \
125222 + : "r0", "r1", "r2", "t", "memory"); \
125223 + else \
125224 + abort (); \
125225 + __result; })
125227 +#define atomic_increment_and_test(mem) atomic_add_zero((mem), 1)
125228 +#define atomic_decrement_and_test(mem) atomic_add_zero((mem), -1)
125230 +#define atomic_bit_set(mem, bit) \
125231 + (void) ({ unsigned int __mask = 1 << (bit); \
125232 + if (sizeof (*mem) == 1) \
125233 + __asm __volatile ("\
125234 + .align 2\n\
125235 + mova 1f,r0\n\
125236 + mov r15,r1\n\
125237 + mov #-6,r15\n\
125238 + 0: mov.b @%0,r2\n\
125239 + or %1,r2\n\
125240 + mov.b r2,@%0\n\
125241 + 1: mov r1,r15"\
125242 + : : "r" (mem), "r" (__mask) \
125243 + : "r0", "r1", "r2", "memory"); \
125244 + else if (sizeof (*mem) == 2) \
125245 + __asm __volatile ("\
125246 + .align 2\n\
125247 + mova 1f,r0\n\
125248 + mov r15,r1\n\
125249 + mov #-6,r15\n\
125250 + 0: mov.w @%0,r2\n\
125251 + or %1,r2\n\
125252 + mov.w r2,@%0\n\
125253 + 1: mov r1,r15"\
125254 + : : "r" (mem), "r" (__mask) \
125255 + : "r0", "r1", "r2", "memory"); \
125256 + else if (sizeof (*mem) == 4) \
125257 + __asm __volatile ("\
125258 + .align 2\n\
125259 + mova 1f,r0\n\
125260 + mov r15,r1\n\
125261 + mov #-6,r15\n\
125262 + 0: mov.l @%0,r2\n\
125263 + or %1,r2\n\
125264 + mov.l r2,@%0\n\
125265 + 1: mov r1,r15"\
125266 + : : "r" (mem), "r" (__mask) \
125267 + : "r0", "r1", "r2", "memory"); \
125268 + else \
125269 + abort (); \
125272 +#define atomic_bit_test_set(mem, bit) \
125273 + ({ unsigned int __mask = 1 << (bit); \
125274 + unsigned int __result = __mask; \
125275 + if (sizeof (*mem) == 1) \
125276 + __asm __volatile ("\
125277 + .align 2\n\
125278 + mova 1f,r0\n\
125279 + nop\n\
125280 + mov r15,r1\n\
125281 + mov #-8,r15\n\
125282 + 0: mov.b @%2,r2\n\
125283 + or r2,%1\n\
125284 + and r2,%0\n\
125285 + mov.b %1,@%2\n\
125286 + 1: mov r1,r15"\
125287 + : "=&r" (__result), "=&r" (__mask) \
125288 + : "r" (mem), "0" (__result), "1" (__mask) \
125289 + : "r0", "r1", "r2", "memory"); \
125290 + else if (sizeof (*mem) == 2) \
125291 + __asm __volatile ("\
125292 + .align 2\n\
125293 + mova 1f,r0\n\
125294 + nop\n\
125295 + mov r15,r1\n\
125296 + mov #-8,r15\n\
125297 + 0: mov.w @%2,r2\n\
125298 + or r2,%1\n\
125299 + and r2,%0\n\
125300 + mov.w %1,@%2\n\
125301 + 1: mov r1,r15"\
125302 + : "=&r" (__result), "=&r" (__mask) \
125303 + : "r" (mem), "0" (__result), "1" (__mask) \
125304 + : "r0", "r1", "r2", "memory"); \
125305 + else if (sizeof (*mem) == 4) \
125306 + __asm __volatile ("\
125307 + .align 2\n\
125308 + mova 1f,r0\n\
125309 + nop\n\
125310 + mov r15,r1\n\
125311 + mov #-8,r15\n\
125312 + 0: mov.l @%2,r2\n\
125313 + or r2,%1\n\
125314 + and r2,%0\n\
125315 + mov.l %1,@%2\n\
125316 + 1: mov r1,r15"\
125317 + : "=&r" (__result), "=&r" (__mask) \
125318 + : "r" (mem), "0" (__result), "1" (__mask) \
125319 + : "r0", "r1", "r2", "memory"); \
125320 + else \
125321 + abort (); \
125322 + __result; })
125323 diff -u -udbrN glibc-2.3.2/sysdeps/sh/sh4/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/sh/sh4/fpu/libm-test-ulps
125324 --- glibc-2.3.2/sysdeps/sh/sh4/fpu/libm-test-ulps Sun Apr 22 06:53:11 2001
125325 +++ glibc-2.3.2-200304020432/sysdeps/sh/sh4/fpu/libm-test-ulps Sun Mar 23 01:52:10 2003
125326 @@ -145,7 +145,7 @@
125327 idouble: 1
125329 # ccos
125330 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
125331 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
125332 float: 1
125333 ifloat: 1
125334 Test "Real part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
125335 @@ -156,10 +156,10 @@
125336 idouble: 1
125338 # ccosh
125339 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
125340 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
125341 float: 1
125342 ifloat: 1
125343 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
125344 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
125345 float: 1
125346 ifloat: 1
125347 Test "Real part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
125348 @@ -198,7 +198,7 @@
125349 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
125350 float: 1
125351 ifloat: 1
125352 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
125353 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
125354 double: 1
125355 float: 5
125356 idouble: 1
125357 @@ -291,7 +291,7 @@
125358 ifloat: 1
125360 # csinh
125361 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
125362 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
125363 double: 1
125364 idouble: 1
125365 Test "Real part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
125366 @@ -318,7 +318,7 @@
125367 ifloat: 1
125369 # ctan
125370 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
125371 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
125372 double: 1
125373 idouble: 1
125374 Test "Real part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
125375 @@ -331,7 +331,7 @@
125376 ifloat: 1
125378 # ctanh
125379 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
125380 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
125381 double: 1
125382 float: 2
125383 idouble: 1
125384 @@ -520,12 +520,12 @@
125385 ifloat: 2
125387 # lgamma
125388 -Test "lgamma (0.7) == 0.26086724653166651439":
125389 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
125390 double: 1
125391 float: 1
125392 idouble: 1
125393 ifloat: 1
125394 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
125395 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
125396 double: 1
125397 float: 2
125398 idouble: 1
125399 @@ -615,7 +615,7 @@
125400 Test "tgamma (0.5) == sqrt (pi)":
125401 float: 1
125402 ifloat: 1
125403 -Test "tgamma (0.7) == 1.29805533264755778568":
125404 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
125405 double: 1
125406 float: 1
125407 idouble: 1
125408 diff -u -udbrN glibc-2.3.2/sysdeps/sparc/sparc32/atomicity.h glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/atomicity.h
125409 --- glibc-2.3.2/sysdeps/sparc/sparc32/atomicity.h Sat Jul 7 21:21:29 2001
125410 +++ glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/atomicity.h Mon Mar 31 01:36:39 2003
125411 @@ -1,98 +0,0 @@
125412 -/* Low-level functions for atomic operations. Sparc32 version.
125413 - Copyright (C) 1999 Free Software Foundation, Inc.
125414 - This file is part of the GNU C Library.
125416 - The GNU C Library is free software; you can redistribute it and/or
125417 - modify it under the terms of the GNU Lesser General Public
125418 - License as published by the Free Software Foundation; either
125419 - version 2.1 of the License, or (at your option) any later version.
125421 - The GNU C Library is distributed in the hope that it will be useful,
125422 - but WITHOUT ANY WARRANTY; without even the implied warranty of
125423 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
125424 - Lesser General Public License for more details.
125426 - You should have received a copy of the GNU Lesser General Public
125427 - License along with the GNU C Library; if not, write to the Free
125428 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
125429 - 02111-1307 USA. */
125431 -#ifndef _ATOMICITY_H
125432 -#define _ATOMICITY_H 1
125434 -#include <inttypes.h>
125436 -static int
125437 -__attribute__ ((unused))
125438 -exchange_and_add (volatile uint32_t *mem, int val)
125440 - static unsigned char lock;
125441 - int result, tmp;
125443 - __asm__ __volatile__("1: ldstub [%1], %0\n\t"
125444 - " cmp %0, 0\n\t"
125445 - " bne 1b\n\t"
125446 - " nop"
125447 - : "=&r" (tmp)
125448 - : "r" (&lock)
125449 - : "memory");
125450 - result = *mem;
125451 - *mem += val;
125452 - __asm__ __volatile__("stb %%g0, [%0]"
125453 - : /* no outputs */
125454 - : "r" (&lock)
125455 - : "memory");
125456 - return result;
125459 -static void
125460 -__attribute__ ((unused))
125461 -atomic_add (volatile uint32_t *mem, int val)
125463 - static unsigned char lock;
125464 - int tmp;
125466 - __asm__ __volatile__("1: ldstub [%1], %0\n\t"
125467 - " cmp %0, 0\n\t"
125468 - " bne 1b\n\t"
125469 - " nop"
125470 - : "=&r" (tmp)
125471 - : "r" (&lock)
125472 - : "memory");
125473 - *mem += val;
125474 - __asm__ __volatile__("stb %%g0, [%0]"
125475 - : /* no outputs */
125476 - : "r" (&lock)
125477 - : "memory");
125480 -static int
125481 -__attribute__ ((unused))
125482 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
125484 - static unsigned char lock;
125485 - int ret, tmp;
125487 - __asm__ __volatile__("1: ldstub [%1], %0\n\t"
125488 - " cmp %0, 0\n\t"
125489 - " bne 1b\n\t"
125490 - " nop"
125491 - : "=&r" (tmp)
125492 - : "r" (&lock)
125493 - : "memory");
125494 - if (*p != oldval)
125495 - ret = 0;
125496 - else
125498 - *p = newval;
125499 - ret = 1;
125501 - __asm__ __volatile__("stb %%g0, [%0]"
125502 - : /* no outputs */
125503 - : "r" (&lock)
125504 - : "memory");
125506 - return ret;
125509 -#endif /* atomicity.h */
125510 diff -u -udbrN glibc-2.3.2/sysdeps/sparc/sparc32/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/bits/atomic.h
125511 --- glibc-2.3.2/sysdeps/sparc/sparc32/bits/atomic.h Thu Jan 1 01:00:00 1970
125512 +++ glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/bits/atomic.h Mon Mar 31 01:36:39 2003
125513 @@ -0,0 +1,75 @@
125514 +/* Atomic operations. sparc32 version.
125515 + Copyright (C) 2003 Free Software Foundation, Inc.
125516 + This file is part of the GNU C Library.
125517 + Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
125519 + The GNU C Library is free software; you can redistribute it and/or
125520 + modify it under the terms of the GNU Lesser General Public
125521 + License as published by the Free Software Foundation; either
125522 + version 2.1 of the License, or (at your option) any later version.
125524 + The GNU C Library is distributed in the hope that it will be useful,
125525 + but WITHOUT ANY WARRANTY; without even the implied warranty of
125526 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
125527 + Lesser General Public License for more details.
125529 + You should have received a copy of the GNU Lesser General Public
125530 + License along with the GNU C Library; if not, write to the Free
125531 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
125532 + 02111-1307 USA. */
125534 +#ifndef _BITS_ATOMIC_H
125535 +#define _BITS_ATOMIC_H 1
125537 +/* We have no compare and swap, just test and set.
125538 + The following implementation contends on one single global lock
125539 + per library and assumes no variable will be accessed using atomic.h
125540 + macros from two different libraries. */
125542 +volatile unsigned char __sparc32_atomic_lock
125543 + __attribute__ ((nocommon, section (".gnu.linkonce.b.__sparc32_atomic_lock"),
125544 + visibility ("hidden")));
125546 +#define __sparc32_atomic_do_lock() \
125547 + do \
125548 + { \
125549 + unsigned int __old_lock; \
125550 + do \
125551 + __asm ("ldstub %1, %0" \
125552 + : "=r" (__old_lock), "=m" (__sparc32_atomic_lock) \
125553 + : "m" (__sparc32_atomic_lock)); \
125554 + while (__old_lock); \
125555 + } \
125556 + while (0)
125558 +#define __sparc32_atomic_do_unlock() \
125559 + do __sparc32_atomic_lock = 0; while (0)
125561 +/* The only basic operation needed is compare and exchange. */
125562 +#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
125563 + ({ __typeof (mem) __acev_memp = (mem); \
125564 + __typeof (*mem) __acev_ret; \
125565 + __typeof (*mem) __acev_newval = (newval); \
125567 + __sparc32_atomic_do_lock (); \
125568 + __acev_ret = *__acev_memp; \
125569 + if (__acev_ret == (oldval)) \
125570 + *__acev_memp = __acev_newval; \
125571 + __sparc32_atomic_do_unlock (); \
125572 + __acev_ret; })
125574 +#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
125575 + ({ __typeof (mem) __aceb_memp = (mem); \
125576 + int __aceb_ret; \
125577 + __typeof (*mem) __aceb_newval = (newval); \
125579 + __sparc32_atomic_do_lock (); \
125580 + __aceb_ret = 0; \
125581 + if (*__aceb_memp == (oldval)) \
125582 + *__aceb_memp = __aceb_newval; \
125583 + else \
125584 + __aceb_ret = 1; \
125585 + __sparc32_atomic_do_unlock (); \
125586 + __aceb_ret; })
125588 +#endif /* bits/atomic.h */
125589 diff -u -udbrN glibc-2.3.2/sysdeps/sparc/sparc32/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/fpu/libm-test-ulps
125590 --- glibc-2.3.2/sysdeps/sparc/sparc32/fpu/libm-test-ulps Tue Sep 17 18:46:01 2002
125591 +++ glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/fpu/libm-test-ulps Sun Mar 23 01:52:09 2003
125592 @@ -94,7 +94,7 @@
125593 idouble: 1
125595 # ccos
125596 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
125597 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
125598 float: 1
125599 ifloat: 1
125600 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
125601 @@ -107,10 +107,10 @@
125602 ifloat: 1
125604 # ccosh
125605 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
125606 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
125607 float: 1
125608 ifloat: 1
125609 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
125610 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
125611 float: 1
125612 ifloat: 1
125613 Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
125614 @@ -145,7 +145,7 @@
125615 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
125616 float: 1
125617 ifloat: 1
125618 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
125619 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
125620 double: 1
125621 float: 5
125622 idouble: 1
125623 @@ -239,7 +239,7 @@
125624 ifloat: 2
125626 # csinh
125627 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
125628 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
125629 double: 1
125630 idouble: 1
125631 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
125632 @@ -258,7 +258,7 @@
125633 ifloat: 1
125635 # ctan
125636 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
125637 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
125638 double: 1
125639 idouble: 1
125640 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
125641 @@ -266,7 +266,7 @@
125642 idouble: 1
125644 # ctanh
125645 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
125646 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
125647 double: 1
125648 float: 2
125649 idouble: 1
125650 @@ -453,12 +453,12 @@
125651 ifloat: 2
125653 # lgamma
125654 -Test "lgamma (0.7) == 0.26086724653166651439":
125655 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
125656 double: 1
125657 float: 1
125658 idouble: 1
125659 ifloat: 1
125660 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
125661 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
125662 double: 1
125663 float: 2
125664 idouble: 1
125665 @@ -513,7 +513,7 @@
125666 Test "tgamma (0.5) == sqrt (pi)":
125667 float: 1
125668 ifloat: 1
125669 -Test "tgamma (0.7) == 1.29805533264755778568":
125670 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
125671 double: 1
125672 float: 1
125673 idouble: 1
125674 diff -u -udbrN glibc-2.3.2/sysdeps/sparc/sparc32/sparcv9/atomicity.h glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/sparcv9/atomicity.h
125675 --- glibc-2.3.2/sysdeps/sparc/sparc32/sparcv9/atomicity.h Sat Jul 7 21:21:29 2001
125676 +++ glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/sparcv9/atomicity.h Mon Mar 31 01:36:38 2003
125677 @@ -1,82 +0,0 @@
125678 -/* Low-level functions for atomic operations. Sparc32+v9 version.
125679 - Copyright (C) 1999 Free Software Foundation, Inc.
125680 - This file is part of the GNU C Library.
125682 - The GNU C Library is free software; you can redistribute it and/or
125683 - modify it under the terms of the GNU Lesser General Public
125684 - License as published by the Free Software Foundation; either
125685 - version 2.1 of the License, or (at your option) any later version.
125687 - The GNU C Library is distributed in the hope that it will be useful,
125688 - but WITHOUT ANY WARRANTY; without even the implied warranty of
125689 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
125690 - Lesser General Public License for more details.
125692 - You should have received a copy of the GNU Lesser General Public
125693 - License along with the GNU C Library; if not, write to the Free
125694 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
125695 - 02111-1307 USA. */
125697 -#ifndef _ATOMICITY_H
125698 -#define _ATOMICITY_H 1
125700 -#include <inttypes.h>
125702 -static inline int
125703 -__attribute__ ((unused))
125704 -exchange_and_add (volatile uint32_t *mem, int val)
125706 - uint32_t tmp1, tmp2;
125708 - __asm__ __volatile__("1: lduw [%2], %0\n\t"
125709 - " add %0, %3, %1\n\t"
125710 - " cas [%2], %0, %1\n\t"
125711 - " sub %0, %1, %0\n\t"
125712 - " brnz,pn %0, 1b\n\t"
125713 - " nop"
125714 - : "=&r" (tmp1), "=&r" (tmp2)
125715 - : "r" (mem), "r" (val)
125716 - : "memory");
125717 - return tmp2;
125720 -static inline void
125721 -__attribute__ ((unused))
125722 -atomic_add (volatile uint32_t *mem, int val)
125724 - uint32_t tmp1, tmp2;
125726 - __asm__ __volatile__("1: lduw [%2], %0\n\t"
125727 - " add %0, %3, %1\n\t"
125728 - " cas [%2], %0, %1\n\t"
125729 - " sub %0, %1, %0\n\t"
125730 - " brnz,pn %0, 1b\n\t"
125731 - " nop"
125732 - : "=&r" (tmp1), "=&r" (tmp2)
125733 - : "r" (mem), "r" (val)
125734 - : "memory");
125737 -static inline int
125738 -__attribute__ ((unused))
125739 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
125741 - register long int tmp, tmp2;
125743 - __asm__ __volatile__("1: lduw [%4], %0\n\t"
125744 - " mov %2, %1\n\t"
125745 - " cmp %0, %3\n\t"
125746 - " bne,a,pn %%xcc, 2f\n\t"
125747 - " mov 0, %0\n\t"
125748 - " cas [%4], %0, %1\n\t"
125749 - " sub %0, %1, %0\n\t"
125750 - " brnz,pn %0, 1b\n\t"
125751 - " mov 1, %0\n\t"
125752 - "2:"
125753 - : "=&r" (tmp), "=&r" (tmp2)
125754 - : "r" (newval), "r" (oldval), "r" (p)
125755 - : "memory");
125756 - return tmp;
125759 -#endif /* atomicity.h */
125760 diff -u -udbrN glibc-2.3.2/sysdeps/sparc/sparc32/sparcv9/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/sparcv9/bits/atomic.h
125761 --- glibc-2.3.2/sysdeps/sparc/sparc32/sparcv9/bits/atomic.h Thu Jan 1 01:00:00 1970
125762 +++ glibc-2.3.2-200304020432/sysdeps/sparc/sparc32/sparcv9/bits/atomic.h Mon Mar 31 01:36:38 2003
125763 @@ -0,0 +1,88 @@
125764 +/* Atomic operations. sparcv9 version.
125765 + Copyright (C) 2003 Free Software Foundation, Inc.
125766 + This file is part of the GNU C Library.
125767 + Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
125769 + The GNU C Library is free software; you can redistribute it and/or
125770 + modify it under the terms of the GNU Lesser General Public
125771 + License as published by the Free Software Foundation; either
125772 + version 2.1 of the License, or (at your option) any later version.
125774 + The GNU C Library is distributed in the hope that it will be useful,
125775 + but WITHOUT ANY WARRANTY; without even the implied warranty of
125776 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
125777 + Lesser General Public License for more details.
125779 + You should have received a copy of the GNU Lesser General Public
125780 + License along with the GNU C Library; if not, write to the Free
125781 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
125782 + 02111-1307 USA. */
125784 +#include <stdint.h>
125786 +typedef int8_t atomic8_t;
125787 +typedef uint8_t uatomic8_t;
125788 +typedef int_fast8_t atomic_fast8_t;
125789 +typedef uint_fast8_t uatomic_fast8_t;
125791 +typedef int16_t atomic16_t;
125792 +typedef uint16_t uatomic16_t;
125793 +typedef int_fast16_t atomic_fast16_t;
125794 +typedef uint_fast16_t uatomic_fast16_t;
125796 +typedef int32_t atomic32_t;
125797 +typedef uint32_t uatomic32_t;
125798 +typedef int_fast32_t atomic_fast32_t;
125799 +typedef uint_fast32_t uatomic_fast32_t;
125801 +typedef int64_t atomic64_t;
125802 +typedef uint64_t uatomic64_t;
125803 +typedef int_fast64_t atomic_fast64_t;
125804 +typedef uint_fast64_t uatomic_fast64_t;
125806 +typedef intptr_t atomicptr_t;
125807 +typedef uintptr_t uatomicptr_t;
125808 +typedef intmax_t atomic_max_t;
125809 +typedef uintmax_t uatomic_max_t;
125812 +#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
125813 + (abort (), 0)
125815 +#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
125816 + (abort (), 0)
125818 +#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
125819 +({ \
125820 + __typeof (*(mem)) __acev_tmp; \
125821 + __typeof (mem) __acev_mem = (mem); \
125822 + __asm __volatile ("cas [%4], %2, %0" \
125823 + : "=r" (__acev_tmp), "=m" (*__acev_mem) \
125824 + : "r" (oldval), "m" (*__acev_mem), "r" (__acev_mem), \
125825 + "0" (newval)); \
125826 + __acev_tmp; })
125828 +/* This can be implemented if needed. */
125829 +#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
125830 + (abort (), 0)
125832 +#define atomic_exchange(mem, newvalue) \
125833 + ({ __typeof (*(mem)) __oldval; \
125834 + __typeof (mem) __memp = (mem); \
125835 + __typeof (*(mem)) __value = (newvalue); \
125837 + if (sizeof (*(mem)) == 4) \
125838 + __asm ("swap %0, %1" \
125839 + : "=m" (*__memp), "=r" (__oldval) \
125840 + : "m" (*__memp), "1" (__value)); \
125841 + else \
125842 + abort (); \
125843 + __oldval; })
125845 +#define atomic_full_barrier() \
125846 + __asm __volatile ("membar #LoadLoad | #LoadStore" \
125847 + " | #StoreLoad | #StoreStore" : : : "memory")
125848 +#define atomic_read_barrier() \
125849 + __asm __volatile ("membar #LoadLoad | #LoadStore" : : : "memory")
125850 +#define atomic_write_barrier() \
125851 + __asm __volatile ("membar #StoreLoad | #StoreStore" : : : "memory")
125852 diff -u -udbrN glibc-2.3.2/sysdeps/sparc/sparc64/atomicity.h glibc-2.3.2-200304020432/sysdeps/sparc/sparc64/atomicity.h
125853 --- glibc-2.3.2/sysdeps/sparc/sparc64/atomicity.h Sat Jul 7 21:21:29 2001
125854 +++ glibc-2.3.2-200304020432/sysdeps/sparc/sparc64/atomicity.h Mon Mar 31 01:36:38 2003
125855 @@ -1,82 +0,0 @@
125856 -/* Low-level functions for atomic operations. Sparc64 version.
125857 - Copyright (C) 1999 Free Software Foundation, Inc.
125858 - This file is part of the GNU C Library.
125860 - The GNU C Library is free software; you can redistribute it and/or
125861 - modify it under the terms of the GNU Lesser General Public
125862 - License as published by the Free Software Foundation; either
125863 - version 2.1 of the License, or (at your option) any later version.
125865 - The GNU C Library is distributed in the hope that it will be useful,
125866 - but WITHOUT ANY WARRANTY; without even the implied warranty of
125867 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
125868 - Lesser General Public License for more details.
125870 - You should have received a copy of the GNU Lesser General Public
125871 - License along with the GNU C Library; if not, write to the Free
125872 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
125873 - 02111-1307 USA. */
125875 -#ifndef _ATOMICITY_H
125876 -#define _ATOMICITY_H 1
125878 -#include <inttypes.h>
125880 -static inline int
125881 -__attribute__ ((unused))
125882 -exchange_and_add (volatile uint32_t *mem, int val)
125884 - uint32_t tmp1, tmp2;
125886 - __asm__ __volatile__("1: lduw [%2], %0\n\t"
125887 - " add %0, %3, %1\n\t"
125888 - " cas [%2], %0, %1\n\t"
125889 - " sub %0, %1, %0\n\t"
125890 - " brnz,pn %0, 1b\n\t"
125891 - " nop"
125892 - : "=&r" (tmp1), "=&r" (tmp2)
125893 - : "r" (mem), "r" (val)
125894 - : "memory");
125895 - return tmp2;
125898 -static inline void
125899 -__attribute__ ((unused))
125900 -atomic_add (volatile uint32_t *mem, int val)
125902 - uint32_t tmp1, tmp2;
125904 - __asm__ __volatile__("1: lduw [%2], %0\n\t"
125905 - " add %0, %3, %1\n\t"
125906 - " cas [%2], %0, %1\n\t"
125907 - " sub %0, %1, %0\n\t"
125908 - " brnz,pn %0, 1b\n\t"
125909 - " nop"
125910 - : "=&r" (tmp1), "=&r" (tmp2)
125911 - : "r" (mem), "r" (val)
125912 - : "memory");
125915 -static inline int
125916 -__attribute__ ((unused))
125917 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
125919 - register long int tmp, tmp2;
125921 - __asm__ __volatile__("1: ldx [%4], %0\n\t"
125922 - " mov %2, %1\n\t"
125923 - " cmp %0, %3\n\t"
125924 - " bne,a,pn %%xcc, 2f\n\t"
125925 - " mov 0, %0\n\t"
125926 - " casx [%4], %0, %1\n\t"
125927 - " sub %0, %1, %0\n\t"
125928 - " brnz,pn %0, 1b\n\t"
125929 - " mov 1, %0\n\t"
125930 - "2:"
125931 - : "=&r" (tmp), "=&r" (tmp2)
125932 - : "r" (newval), "r" (oldval), "r" (p)
125933 - : "memory");
125934 - return tmp;
125937 -#endif /* atomicity.h */
125938 diff -u -udbrN glibc-2.3.2/sysdeps/sparc/sparc64/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/sparc/sparc64/bits/atomic.h
125939 --- glibc-2.3.2/sysdeps/sparc/sparc64/bits/atomic.h Thu Jan 1 01:00:00 1970
125940 +++ glibc-2.3.2-200304020432/sysdeps/sparc/sparc64/bits/atomic.h Mon Mar 31 01:36:39 2003
125941 @@ -0,0 +1,103 @@
125942 +/* Atomic operations. sparc64 version.
125943 + Copyright (C) 2003 Free Software Foundation, Inc.
125944 + This file is part of the GNU C Library.
125945 + Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
125947 + The GNU C Library is free software; you can redistribute it and/or
125948 + modify it under the terms of the GNU Lesser General Public
125949 + License as published by the Free Software Foundation; either
125950 + version 2.1 of the License, or (at your option) any later version.
125952 + The GNU C Library is distributed in the hope that it will be useful,
125953 + but WITHOUT ANY WARRANTY; without even the implied warranty of
125954 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
125955 + Lesser General Public License for more details.
125957 + You should have received a copy of the GNU Lesser General Public
125958 + License along with the GNU C Library; if not, write to the Free
125959 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
125960 + 02111-1307 USA. */
125962 +#include <stdint.h>
125964 +typedef int8_t atomic8_t;
125965 +typedef uint8_t uatomic8_t;
125966 +typedef int_fast8_t atomic_fast8_t;
125967 +typedef uint_fast8_t uatomic_fast8_t;
125969 +typedef int16_t atomic16_t;
125970 +typedef uint16_t uatomic16_t;
125971 +typedef int_fast16_t atomic_fast16_t;
125972 +typedef uint_fast16_t uatomic_fast16_t;
125974 +typedef int32_t atomic32_t;
125975 +typedef uint32_t uatomic32_t;
125976 +typedef int_fast32_t atomic_fast32_t;
125977 +typedef uint_fast32_t uatomic_fast32_t;
125979 +typedef int64_t atomic64_t;
125980 +typedef uint64_t uatomic64_t;
125981 +typedef int_fast64_t atomic_fast64_t;
125982 +typedef uint_fast64_t uatomic_fast64_t;
125984 +typedef intptr_t atomicptr_t;
125985 +typedef uintptr_t uatomicptr_t;
125986 +typedef intmax_t atomic_max_t;
125987 +typedef uintmax_t uatomic_max_t;
125990 +#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
125991 + (abort (), 0)
125993 +#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
125994 + (abort (), 0)
125996 +#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
125997 +({ \
125998 + __typeof (*(mem)) __acev_tmp; \
125999 + __typeof (mem) __acev_mem = (mem); \
126000 + __asm __volatile ("cas [%4], %2, %0" \
126001 + : "=r" (__acev_tmp), "=m" (*__acev_mem) \
126002 + : "r" (oldval), "m" (*__acev_mem), "r" (__acev_mem), \
126003 + "0" (newval)); \
126004 + __acev_tmp; })
126006 +#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
126007 +({ \
126008 + __typeof (*(mem)) __acev_tmp; \
126009 + __typeof (mem) __acev_mem = (mem); \
126010 + __asm __volatile ("casx [%4], %2, %0" \
126011 + : "=r" (__acev_tmp), "=m" (*__acev_mem) \
126012 + : "r" ((long) (oldval)), "m" (*__acev_mem), \
126013 + "r" (__acev_mem), "0" ((long) (newval))); \
126014 + __acev_tmp; })
126016 +#define atomic_exchange(mem, newvalue) \
126017 + ({ __typeof (*(mem)) __oldval, __val; \
126018 + __typeof (mem) __memp = (mem); \
126019 + __typeof (*(mem)) __value = (newvalue); \
126021 + if (sizeof (*(mem)) == 4) \
126022 + __asm ("swap %0, %1" \
126023 + : "=m" (*__memp), "=r" (__oldval) \
126024 + : "m" (*__memp), "1" (__value)); \
126025 + else \
126026 + { \
126027 + __val = *__memp; \
126028 + do \
126029 + { \
126030 + __oldval = __val; \
126031 + __val = atomic_compare_and_exchange_val_acq (__memp, __value, \
126032 + __oldval); \
126033 + } \
126034 + while (__builtin_expect (__val != __oldval, 0)); \
126035 + } \
126036 + __oldval; })
126038 +#define atomic_full_barrier() \
126039 + __asm __volatile ("membar #LoadLoad | #LoadStore" \
126040 + " | #StoreLoad | #StoreStore" : : : "memory")
126041 +#define atomic_read_barrier() \
126042 + __asm __volatile ("membar #LoadLoad | #LoadStore" : : : "memory")
126043 +#define atomic_write_barrier() \
126044 + __asm __volatile ("membar #StoreLoad | #StoreStore" : : : "memory")
126045 diff -u -udbrN glibc-2.3.2/sysdeps/sparc/sparc64/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/sparc/sparc64/fpu/libm-test-ulps
126046 --- glibc-2.3.2/sysdeps/sparc/sparc64/fpu/libm-test-ulps Mon Oct 1 01:31:32 2001
126047 +++ glibc-2.3.2-200304020432/sysdeps/sparc/sparc64/fpu/libm-test-ulps Sun Mar 23 01:52:10 2003
126048 @@ -1,85 +1,31 @@
126050 # Begin of automatic generation
126052 -# acos
126053 -Test "acos (0.7) == 0.79539883018414355549096833892476432":
126054 -ldouble: 1
126055 -ildouble: 1
126057 -# asin
126058 -Test "asin (-0.5) == -pi/6":
126059 -float: 2
126060 -ifloat: 2
126061 -Test "asin (0.5) == pi/6":
126062 -float: 2
126063 -ifloat: 2
126064 -Test "asin (0.7) == 0.77539749661075306374035335271498708":
126065 -double: 1
126066 -float: 2
126067 -idouble: 1
126068 -ifloat: 2
126070 -# atan
126071 -Test "atan (0.7) == 0.61072596438920861654375887649023613":
126072 -ildouble: 1
126073 -ldouble: 1
126075 -# atanh
126076 -Test "atanh (0.7) == 0.8673005276940531944":
126077 -double: 1
126078 -idouble: 1
126080 # atan2
126081 -Test "atan2 (0.4, 0.0003) == 1.5700463269355215717704032607580829":
126082 +Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
126083 +float: 3
126084 +ifloat: 3
126085 ildouble: 1
126086 ldouble: 1
126087 -Test "atan2 (0.7, 1) == 0.61072596438920861654375887649023613":
126088 +Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
126089 +float: 3
126090 +ifloat: 3
126091 ildouble: 1
126092 ldouble: 1
126093 -Test "atan2 (-0.7, 1.0) == -0.61072596438920861654375887649023613":
126094 +Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
126095 +float: 1
126096 +ifloat: 1
126097 ildouble: 1
126098 ldouble: 1
126099 -Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267":
126100 -float: 3
126101 -ifloat: 3
126102 -Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267":
126103 -float: 3
126104 -ifloat: 3
126105 -Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736":
126106 -float: 4
126107 -ifloat: 4
126109 -# cabs
126110 -Test "cabs (-0.7 + 12.4 i) == 12.419742348374220601176836866763271":
126111 -float: 1
126112 -ifloat: 1
126113 -Test "cabs (-0.7 - 12.4 i) == 12.419742348374220601176836866763271":
126114 -float: 1
126115 -ifloat: 1
126116 -Test "cabs (-12.4 + 0.7 i) == 12.419742348374220601176836866763271":
126117 -float: 1
126118 -ifloat: 1
126119 -Test "cabs (-12.4 - 0.7 i) == 12.419742348374220601176836866763271":
126120 -float: 1
126121 -ifloat: 1
126122 -Test "cabs (0.7 + 1.2 i) == 1.3892443989449804508432547041028554":
126123 -double: 1
126124 -idouble: 1
126125 -Test "cabs (0.7 + 12.4 i) == 12.419742348374220601176836866763271":
126126 +# atanh
126127 +Test "atanh (0.75) == 0.972955074527656652552676371721589865":
126128 float: 1
126129 ifloat: 1
126131 # cacos
126132 -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i":
126133 -double: 1
126134 -float: 1
126135 -idouble: 1
126136 -ifloat: 1
126137 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i":
126138 -float: 1
126139 -ifloat: 1
126140 -ildouble: 3
126141 -ldouble: 3
126142 +Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
126143 +ildouble: 1
126144 +ldouble: 1
126146 # cacosh
126147 Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i":
126148 @@ -96,25 +42,16 @@
126149 ifloat: 3
126150 ildouble: 1
126151 ldouble: 1
126152 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i":
126154 +# casin
126155 +Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
126156 double: 1
126157 float: 1
126158 idouble: 1
126159 ifloat: 1
126161 -# casin
126162 -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i":
126163 -double: 3
126164 -float: 2
126165 -idouble: 3
126166 -ifloat: 2
126167 +Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
126168 ildouble: 1
126169 ldouble: 1
126170 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i":
126171 -float: 1
126172 -ifloat: 1
126173 -ildouble: 3
126174 -ldouble: 3
126176 # casinh
126177 Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
126178 @@ -131,13 +68,15 @@
126179 ifloat: 6
126180 ildouble: 2
126181 ldouble: 2
126182 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i":
126183 -double: 1
126184 -idouble: 1
126185 +Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
126186 +float: 1
126187 +ifloat: 1
126188 ildouble: 1
126189 ldouble: 1
126190 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i":
126191 +Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
126192 +double: 1
126193 float: 1
126194 +idouble: 1
126195 ifloat: 1
126196 ildouble: 1
126197 ldouble: 1
126198 @@ -151,12 +90,10 @@
126199 float: 1
126200 idouble: 1
126201 ifloat: 1
126202 -Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i":
126203 +Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
126204 float: 4
126205 ifloat: 4
126206 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i":
126207 -double: 1
126208 -idouble: 1
126209 +Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
126210 ildouble: 1
126211 ldouble: 1
126213 @@ -167,49 +104,59 @@
126214 Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
126215 float: 4
126216 ifloat: 4
126217 -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i":
126218 -float: 1
126219 -ifloat: 1
126220 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i":
126221 +Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
126222 double: 1
126223 -float: 6
126224 idouble: 1
126225 +ildouble: 1
126226 +ldouble: 1
126227 +Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
126228 +float: 6
126229 ifloat: 6
126230 +ildouble: 1
126231 +ldouble: 1
126233 # cbrt
126234 +Test "cbrt (-0.001) == -0.1":
126235 +ildouble: 1
126236 +ldouble: 1
126237 Test "cbrt (-27.0) == -3.0":
126238 double: 1
126239 idouble: 1
126240 -Test "cbrt (0.970299) == 0.99":
126241 +Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
126242 +double: 1
126243 +idouble: 1
126244 +Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
126245 double: 1
126246 idouble: 1
126248 # ccos
126249 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
126250 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
126251 float: 1
126252 ifloat: 1
126253 -Test "Real part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
126254 -double: 1
126255 -idouble: 1
126256 -Test "Imaginary part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
126257 +Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
126258 double: 1
126259 +float: 1
126260 idouble: 1
126261 +ifloat: 1
126262 +Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
126263 +float: 1
126264 +ifloat: 1
126266 # ccosh
126267 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
126268 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
126269 float: 1
126270 ifloat: 1
126271 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
126272 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
126273 float: 1
126274 ifloat: 1
126275 -Test "Real part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
126276 +Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
126277 double: 1
126278 float: 1
126279 idouble: 1
126280 ifloat: 1
126281 -Test "Imaginary part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
126282 -double: 1
126283 -idouble: 1
126284 +Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
126285 +float: 1
126286 +ifloat: 1
126288 # cexp
126289 Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
126290 @@ -220,23 +167,22 @@
126291 ifloat: 1
126292 ildouble: 1
126293 ldouble: 1
126294 -Test "Real part of: cexp (0.7 + 1.2 i) == 0.72969890915032360123451688642930727 + 1.8768962328348102821139467908203072 i":
126295 -double: 1
126296 -float: 1
126297 -idouble: 1
126298 -ifloat: 1
126299 -Test "Imaginary part of: cexp (0.7 + 1.2 i) == 0.72969890915032360123451688642930727 + 1.8768962328348102821139467908203072 i":
126300 +Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
126301 float: 1
126302 ifloat: 1
126303 +Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
126304 ildouble: 1
126305 ldouble: 1
126307 # clog
126308 Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
126309 -double: 1
126310 float: 3
126311 -idouble: 1
126312 ifloat: 3
126313 +Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
126314 +float: 1
126315 +ifloat: 1
126316 +ildouble: 1
126317 +ldouble: 1
126319 # clog10
126320 Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
126321 @@ -249,7 +195,7 @@
126322 float: 1
126323 idouble: 1
126324 ifloat: 1
126325 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
126326 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
126327 double: 1
126328 float: 5
126329 idouble: 1
126330 @@ -297,14 +243,12 @@
126331 float: 1
126332 idouble: 1
126333 ifloat: 1
126334 -Test "Real part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i":
126335 -double: 1
126336 +Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
126337 float: 1
126338 -idouble: 1
126339 ifloat: 1
126340 -Test "Imaginary part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i":
126341 -double: 1
126342 -idouble: 1
126343 +Test "Imaginary part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
126344 +ildouble: 1
126345 +ldouble: 1
126346 Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
126347 double: 1
126348 float: 1
126349 @@ -327,16 +271,11 @@
126350 ifloat: 1
126352 # cos
126353 -Test "cos (0.7) == 0.76484218728448842625585999019186495":
126354 +Test "cos (M_PI_6l * 2.0) == 0.5":
126355 double: 1
126356 float: 1
126357 idouble: 1
126358 ifloat: 1
126359 -Test "cos (M_PI_6l * 2.0) == 0.5":
126360 -double: 1
126361 -float: 0.5
126362 -idouble: 1
126363 -ifloat: 0.5
126364 ildouble: 1
126365 ldouble: 1
126366 Test "cos (M_PI_6l * 4.0) == -0.5":
126367 @@ -347,14 +286,40 @@
126368 ildouble: 1
126369 ldouble: 1
126370 Test "cos (pi/2) == 0":
126371 -double: 0.2758
126372 -float: 0.3667
126373 -idouble: 0.2758
126374 -ifloat: 0.3667
126375 -ildouble: 0.2252
126376 -ldouble: 0.2252
126377 +double: 1
126378 +float: 1
126379 +idouble: 1
126380 +ifloat: 1
126381 +ildouble: 1
126382 +ldouble: 1
126384 # cpow
126385 +Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
126386 +float: 1
126387 +ifloat: 1
126388 +Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
126389 +float: 1
126390 +ifloat: 1
126391 +Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
126392 +double: 1
126393 +float: 4
126394 +idouble: 1
126395 +ifloat: 4
126396 +ildouble: 4
126397 +ldouble: 4
126398 +Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
126399 +ildouble: 2
126400 +ldouble: 2
126401 +Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
126402 +ildouble: 1
126403 +ldouble: 1
126404 +Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
126405 +double: 2
126406 +float: 3
126407 +idouble: 2
126408 +ifloat: 3
126409 +ildouble: 1
126410 +ldouble: 1
126411 Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i":
126412 ildouble: 2
126413 ldouble: 2
126414 @@ -369,26 +334,26 @@
126415 float: 2
126416 ifloat: 2
126417 Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
126418 -double: 1.1031
126419 -float: 1.4668
126420 -idouble: 1.1031
126421 -ifloat: 1.4668
126422 -ildouble: 0.9006
126423 -ldouble: 0.9006
126424 +double: 2
126425 +float: 2
126426 +idouble: 2
126427 +ifloat: 2
126428 +ildouble: 1
126429 +ldouble: 1
126431 # csin
126432 -Test "Imaginary part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i":
126433 -float: 1
126434 -ifloat: 1
126435 +Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
126436 +ildouble: 1
126437 +ldouble: 1
126439 # csinh
126440 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
126441 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
126442 double: 1
126443 idouble: 1
126444 -Test "Real part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
126445 +Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
126446 float: 1
126447 ifloat: 1
126448 -Test "Imaginary part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
126449 +Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
126450 float: 1
126451 ifloat: 1
126453 @@ -403,32 +368,22 @@
126454 ifloat: 1
126455 ildouble: 1
126456 ldouble: 1
126457 -Test "Real part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i":
126458 -double: 1
126459 -float: 1
126460 -idouble: 1
126461 -ifloat: 1
126462 -Test "Imaginary part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i":
126463 -float: 1
126464 -ifloat: 1
126465 +Test "Imaginary part of: csqrt (0.75 + 1.25 i) == 1.05065169626078392338656675760808326 + 0.594868882070379067881984030639932657 i":
126466 ildouble: 1
126467 ldouble: 1
126469 # ctan
126470 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
126471 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
126472 double: 1
126473 idouble: 1
126474 -Test "Real part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
126475 -float: 1
126476 -ifloat: 1
126477 -Test "Imaginary part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
126478 +Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
126479 double: 1
126480 -float: 1
126481 idouble: 1
126482 -ifloat: 1
126483 +ildouble: 2
126484 +ldouble: 2
126486 # ctanh
126487 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
126488 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
126489 double: 1
126490 float: 2
126491 idouble: 1
126492 @@ -436,34 +391,25 @@
126493 Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
126494 float: 1
126495 ifloat: 1
126496 -Test "Real part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i":
126497 -double: 2
126498 -float: 1
126499 -idouble: 2
126500 -ifloat: 1
126501 -Test "Imaginary part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i":
126502 -double: 2
126503 -float: 1
126504 -idouble: 2
126505 -ifloat: 1
126506 +Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
126507 +double: 1
126508 +idouble: 1
126510 +# erf
126511 +Test "erf (1.25) == 0.922900128256458230136523481197281140":
126512 +double: 1
126513 +idouble: 1
126515 # erfc
126516 -Test "erfc (0.7) == 0.32219880616258152702":
126517 +Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
126518 double: 1
126519 idouble: 1
126520 -Test "erfc (1.2) == 0.089686021770364619762":
126521 -double: 2
126522 -float: 2
126523 -idouble: 2
126524 -ifloat: 2
126525 -Test "erfc (2.0) == 0.0046777349810472658379":
126526 +Test "erfc (27.0) == 0.523704892378925568501606768284954709e-318":
126527 +ildouble: 1
126528 +ldouble: 1
126529 +Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
126530 double: 1
126531 idouble: 1
126532 -Test "erfc (4.1) == 0.67000276540848983727e-8":
126533 -double: 24
126534 -float: 12
126535 -idouble: 24
126536 -ifloat: 12
126538 # exp10
126539 Test "exp10 (-1) == 0.1":
126540 @@ -471,11 +417,11 @@
126541 float: 1
126542 idouble: 2
126543 ifloat: 1
126544 -Test "exp10 (0.7) == 5.0118723362727228500155418688494574":
126545 +Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
126546 +double: 1
126547 float: 1
126548 +idouble: 1
126549 ifloat: 1
126550 -ildouble: 1
126551 -ldouble: 1
126552 Test "exp10 (3) == 1000":
126553 double: 6
126554 float: 2
126555 @@ -485,6 +431,9 @@
126556 ldouble: 1
126558 # expm1
126559 +Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
126560 +double: 1
126561 +idouble: 1
126562 Test "expm1 (1) == M_El - 1.0":
126563 double: 1
126564 float: 1
126565 @@ -493,36 +442,10 @@
126566 ildouble: 1
126567 ldouble: 1
126570 -# fmod
126571 -Test "fmod (-6.5, -2.3) == -1.9":
126572 -double: 2
126573 -float: 1
126574 -idouble: 2
126575 -ifloat: 1
126576 -ildouble: 2
126577 -ldouble: 2
126578 -Test "fmod (-6.5, 2.3) == -1.9":
126579 -double: 2
126580 -float: 1
126581 -idouble: 2
126582 -ifloat: 1
126583 -ildouble: 2
126584 -ldouble: 2
126585 -Test "fmod (6.5, -2.3) == 1.9":
126586 -double: 2
126587 -float: 1
126588 -idouble: 2
126589 -ifloat: 1
126590 -ildouble: 2
126591 -ldouble: 2
126592 -Test "fmod (6.5, 2.3) == 1.9":
126593 -double: 2
126594 -float: 1
126595 -idouble: 2
126596 -ifloat: 1
126597 -ildouble: 2
126598 -ldouble: 2
126599 +# gamma
126600 +Test "gamma (-0.5) == log(2*sqrt(pi))":
126601 +ildouble: 1
126602 +ldouble: 1
126604 # hypot
126605 Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
126606 @@ -540,9 +463,6 @@
126607 Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
126608 float: 1
126609 ifloat: 1
126610 -Test "hypot (0.7, 1.2) == 1.3892443989449804508432547041028554":
126611 -double: 1
126612 -idouble: 1
126613 Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
126614 float: 1
126615 ifloat: 1
126616 @@ -554,161 +474,213 @@
126617 ifloat: 1
126620 -Test "j0 (10.0) == -0.24593576445134833520":
126621 +Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
126622 +double: 1
126623 +float: 1
126624 +idouble: 1
126625 +ifloat: 1
126626 +Test "j0 (0.75) == 0.864242275166648623555731103820923211":
126627 +float: 1
126628 +ifloat: 1
126629 +Test "j0 (10.0) == -0.245935764451348335197760862485328754":
126630 double: 2
126631 float: 1
126632 idouble: 2
126633 ifloat: 1
126634 -Test "j0 (2.0) == 0.22389077914123566805":
126635 +ildouble: 2
126636 +ldouble: 2
126637 +Test "j0 (2.0) == 0.223890779141235668051827454649948626":
126638 float: 2
126639 ifloat: 2
126640 -Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1"
126641 +ildouble: 2
126642 +ldouble: 2
126643 +Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
126644 double: 1
126645 -idouble: 1
126646 float: 1
126647 -ifloat: 1
126648 -Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1"
126649 -double: 1
126650 idouble: 1
126651 -float: 1
126652 ifloat: 1
126653 -Test "j0 (8.0) == 0.17165080713755390609":
126654 +Test "j0 (8.0) == 0.171650807137553906090869407851972001":
126655 float: 1
126656 ifloat: 1
126657 +ildouble: 1
126658 +ldouble: 1
126661 -Test "j1 (10.0) == 0.043472746168861436670":
126662 +Test "j1 (-1.0) == -0.440050585744933515959682203718914913":
126663 +ildouble: 1
126664 +ldouble: 1
126665 +Test "j1 (0.75) == 0.349243602174862192523281016426251335":
126666 +ildouble: 1
126667 +ldouble: 1
126668 +Test "j1 (1.0) == 0.440050585744933515959682203718914913":
126669 +ildouble: 1
126670 +ldouble: 1
126671 +Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
126672 float: 2
126673 ifloat: 2
126674 -Test "j1 (2.0) == 0.57672480775687338720":
126675 +ildouble: 2
126676 +ldouble: 2
126677 +Test "j1 (2.0) == 0.576724807756873387202448242269137087":
126678 double: 1
126679 idouble: 1
126680 -Test "j1 (8.0) == 0.23463634685391462438":
126681 +Test "j1 (8.0) == 0.234636346853914624381276651590454612":
126682 double: 1
126683 idouble: 1
126684 +ildouble: 4
126685 +ldouble: 4
126688 -Test "jn (0, 10.0) == -0.24593576445134833520":
126689 +Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
126690 +double: 1
126691 +float: 1
126692 +idouble: 1
126693 +ifloat: 1
126694 +Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
126695 +float: 1
126696 +ifloat: 1
126697 +Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
126698 double: 2
126699 float: 1
126700 idouble: 2
126701 ifloat: 1
126702 -Test "jn (0, 2.0) == 0.22389077914123566805":
126703 +ildouble: 2
126704 +ldouble: 2
126705 +Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
126706 float: 2
126707 ifloat: 2
126708 -Test "jn (0, 8.0) == 0.17165080713755390609":
126709 +ildouble: 2
126710 +ldouble: 2
126711 +Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
126712 +double: 1
126713 float: 1
126714 +idouble: 1
126715 ifloat: 1
126716 -Test "jn (1, 10.0) == 0.043472746168861436670":
126717 +Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
126718 +float: 1
126719 +ifloat: 1
126720 +ildouble: 1
126721 +ldouble: 1
126722 +Test "jn (1, -1.0) == -0.440050585744933515959682203718914913":
126723 +ildouble: 1
126724 +ldouble: 1
126725 +Test "jn (1, 0.75) == 0.349243602174862192523281016426251335":
126726 +ildouble: 1
126727 +ldouble: 1
126728 +Test "jn (1, 1.0) == 0.440050585744933515959682203718914913":
126729 +ildouble: 1
126730 +ldouble: 1
126731 +Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
126732 float: 2
126733 ifloat: 2
126734 -Test "jn (1, 2.0) == 0.57672480775687338720":
126735 +ildouble: 2
126736 +ldouble: 2
126737 +Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
126738 double: 1
126739 idouble: 1
126740 -Test "jn (1, 8.0) == 0.23463634685391462438":
126741 +Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
126742 double: 1
126743 idouble: 1
126744 -Test "jn (10, 0.1) == 0.26905328954342155795e-19":
126745 -double: 6
126746 -float: 4
126747 -idouble: 6
126748 -ifloat: 4
126749 -Test "jn (10, 0.7) == 0.75175911502153953928e-11":
126750 -double: 3
126751 +ildouble: 4
126752 +ldouble: 4
126753 +Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9":
126754 +ildouble: 1
126755 +ldouble: 1
126756 +Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
126757 +double: 1
126758 float: 1
126759 -idouble: 3
126760 +idouble: 1
126761 ifloat: 1
126762 -Test "jn (10, 10.0) == 0.20748610663335885770":
126763 +ildouble: 1
126764 +ldouble: 1
126765 +Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
126766 +double: 1
126767 +float: 1
126768 +idouble: 1
126769 +ifloat: 1
126770 +ildouble: 1
126771 +ldouble: 1
126772 +Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9":
126773 +ildouble: 1
126774 +ldouble: 1
126775 +Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
126776 double: 4
126777 float: 3
126778 idouble: 4
126779 ifloat: 3
126780 -Test "jn (10, 2.0) == 0.25153862827167367096e-6":
126781 +ildouble: 2
126782 +ldouble: 2
126783 +Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
126784 float: 4
126785 ifloat: 4
126786 -Test "jn (3, 0.1) == 0.000020820315754756261429":
126787 +Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
126788 double: 1
126789 +float: 1
126790 idouble: 1
126791 -Test "jn (3, 0.7) == 0.0069296548267508408077":
126792 +ifloat: 1
126793 +Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
126794 +double: 1
126795 float: 1
126796 +idouble: 1
126797 ifloat: 1
126798 -Test "jn (3, 10.0) == 0.058379379305186812343":
126799 +Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
126800 double: 3
126801 float: 1
126802 idouble: 3
126803 ifloat: 1
126804 -Test "jn (3, 2.0) == 0.12894324947440205110":
126805 +ildouble: 2
126806 +ldouble: 2
126807 +Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
126808 double: 1
126809 float: 2
126810 idouble: 1
126811 ifloat: 2
126813 # lgamma
126814 -Test "lgamma (0.7) == 0.26086724653166651439":
126815 +Test "lgamma (-0.5) == log(2*sqrt(pi))":
126816 +ildouble: 1
126817 +ldouble: 1
126818 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
126819 double: 1
126820 float: 1
126821 idouble: 1
126822 ifloat: 1
126823 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
126824 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
126825 double: 1
126826 float: 2
126827 idouble: 1
126828 ifloat: 2
126830 -# log
126831 -Test "log (0.7) == -0.35667494393873237891263871124118447":
126832 -double: 1
126833 -float: 1
126834 -idouble: 1
126835 -ifloat: 1
126836 -ildouble: 1
126837 -ldouble: 1
126839 # log10
126840 -Test "log10 (0.7) == -0.15490195998574316929":
126841 +Test "log10 (0.75) == -0.124938736608299953132449886193870744":
126842 double: 1
126843 -float: 1
126844 +float: 2
126845 idouble: 1
126846 -ifloat: 1
126847 +ifloat: 2
126848 Test "log10 (e) == log10(e)":
126849 float: 1
126850 ifloat: 1
126851 +ildouble: 1
126852 +ldouble: 1
126854 # log1p
126855 -Test "log1p (-0.3) == -0.35667494393873237891263871124118447":
126856 -double: 1
126857 +Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
126858 float: 1
126859 -idouble: 1
126860 ifloat: 1
126861 +Test "log1p (M_El - 1.0) == 1":
126862 ildouble: 1
126863 ldouble: 1
126865 # log2
126866 -Test "log2 (0.7) == -0.51457317282975824043":
126867 -double: 1
126868 -float: 1
126869 -idouble: 1
126870 -ifloat: 1
126872 -# remquo
126873 -Test "remquo (-1.625, 1.0, &x) sets x to -2":
126874 -ildouble: 4
126875 -ldouble: 4
126876 -Test "remquo (1.625, -1.0, &x) sets x to -2":
126877 -ildouble: 4
126878 -ldouble: 4
126879 +Test "log2 (0.75) == -.415037499278843818546261056052183492":
126880 +ildouble: 1
126881 +ldouble: 1
126883 # sincos
126884 -Test "sincos (0.7, &sin_res, &cos_res) puts 0.76484218728448842625585999019186495 in cos_res":
126885 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
126886 double: 1
126887 float: 1
126888 idouble: 1
126889 ifloat: 1
126890 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
126891 -double: 1
126892 -float: 0.5
126893 -idouble: 1
126894 -ifloat: 0.5
126895 ildouble: 1
126896 ldouble: 1
126897 Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
126898 @@ -719,22 +691,15 @@
126899 ildouble: 1
126900 ldouble: 1
126901 Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
126902 -double: 0.2758
126903 -float: 0.3667
126904 -idouble: 0.2758
126905 -ifloat: 0.3667
126906 -ildouble: 0.2252
126907 -ldouble: 0.2252
126908 -Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
126909 -float: 1
126910 -ifloat: 1
126912 -# sinh
126913 -Test "sinh (0.7) == 0.75858370183953350346":
126914 double: 1
126915 float: 1
126916 idouble: 1
126917 ifloat: 1
126918 +ildouble: 1
126919 +ldouble: 1
126920 +Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
126921 +float: 1
126922 +ifloat: 1
126924 # sqrt
126925 Test "sqrt (2) == M_SQRT2l":
126926 @@ -742,31 +707,23 @@
126927 ldouble: 1
126929 # tan
126930 -Test "tan (0.7) == 0.84228838046307944812813500221293775":
126931 -ildouble: 1
126932 -ldouble: 1
126933 Test "tan (pi/4) == 1":
126934 -double: 0.5
126935 -idouble: 0.5
126937 -# tanh
126938 -Test "tanh (0.7) == 0.60436777711716349631":
126939 -double: 1
126940 -float: 1
126941 -idouble: 1
126942 -ifloat: 1
126943 -Test "tanh (-0.7) == -0.60436777711716349631":
126944 double: 1
126945 -float: 1
126946 idouble: 1
126947 -ifloat: 1
126948 -Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
126949 -ldouble: 1
126951 +# tanh
126952 +Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
126953 ildouble: 1
126954 +ldouble: 1
126955 Test "tanh (-1.0) == -0.7615941559557648881194582826047935904":
126956 +ildouble: 1
126957 ldouble: 1
126958 +Test "tanh (0.75) == 0.635148952387287319214434357312496495":
126959 ildouble: 1
126960 -Function: "tanh":
126961 +ldouble: 1
126962 +Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
126963 +ildouble: 1
126964 +ldouble: 1
126966 # tgamma
126967 Test "tgamma (-0.5) == -2 sqrt (pi)":
126968 @@ -774,198 +731,193 @@
126969 float: 1
126970 idouble: 1
126971 ifloat: 1
126972 +ildouble: 1
126973 +ldouble: 1
126974 Test "tgamma (0.5) == sqrt (pi)":
126975 float: 1
126976 ifloat: 1
126977 -Test "tgamma (0.7) == 1.29805533264755778568":
126978 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
126979 double: 1
126980 float: 1
126981 idouble: 1
126982 ifloat: 1
126983 +Test "tgamma (4) == 6":
126984 +ildouble: 1
126985 +ldouble: 1
126988 -Test "y0 (0.7) == -0.19066492933739506743":
126989 -double: 2
126990 -float: 1
126991 -idouble: 2
126992 -ifloat: 1
126993 -Test "y0 (1.0) == 0.088256964215676957983":
126994 +Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
126995 double: 2
126996 float: 1
126997 idouble: 2
126998 ifloat: 1
126999 -Test "y0 (1.5) == 0.38244892379775884396":
127000 +Test "y0 (1.5) == 0.382448923797758843955068554978089862":
127001 double: 2
127002 float: 1
127003 idouble: 2
127004 ifloat: 1
127005 -Test "y0 (10.0) == 0.055671167283599391424":
127006 +Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
127007 float: 1
127008 ifloat: 1
127009 -Test "y0 (8.0) == 0.22352148938756622053":
127010 +ildouble: 3
127011 +ldouble: 3
127012 +Test "y0 (8.0) == 0.223521489387566220527323400498620359":
127013 double: 1
127014 float: 1
127015 idouble: 1
127016 ifloat: 1
127017 +ildouble: 3
127018 +ldouble: 3
127021 -Test "y1 (0.1) == -6.4589510947020269877":
127022 +Test "y1 (0.125) == -5.19993611253477499595928744876579921":
127023 double: 1
127024 idouble: 1
127025 -Test "y1 (0.7) == -1.1032498719076333697":
127026 -double: 1
127027 -float: 1
127028 -idouble: 1
127029 -ifloat: 1
127030 -Test "y1 (1.5) == -0.41230862697391129595":
127031 +Test "y1 (0.75) == -1.03759455076928541973767132140642198":
127032 +ildouble: 1
127033 +ldouble: 1
127034 +Test "y1 (1.5) == -0.412308626973911295952829820633445323":
127035 float: 1
127036 ifloat: 1
127037 -Test "y1 (10.0) == 0.24901542420695388392":
127038 +ildouble: 1
127039 +ldouble: 1
127040 +Test "y1 (10.0) == 0.249015424206953883923283474663222803":
127041 double: 3
127042 float: 1
127043 idouble: 3
127044 ifloat: 1
127045 -Test "y1 (2.0) == -0.10703243154093754689":
127046 +Test "y1 (2.0) == -0.107032431540937546888370772277476637":
127047 double: 1
127048 float: 1
127049 idouble: 1
127050 ifloat: 1
127051 -Test "y1 (8.0) == -0.15806046173124749426":
127052 +ildouble: 1
127053 +ldouble: 1
127054 +Test "y1 (8.0) == -0.158060461731247494255555266187483550":
127055 double: 1
127056 float: 2
127057 idouble: 1
127058 ifloat: 2
127059 +ildouble: 1
127060 +ldouble: 1
127063 -Test "yn (0, 0.7) == -0.19066492933739506743":
127064 -double: 2
127065 -float: 1
127066 -idouble: 2
127067 -ifloat: 1
127068 -Test "yn (0, 1.0) == 0.088256964215676957983":
127069 +Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
127070 double: 2
127071 float: 1
127072 idouble: 2
127073 ifloat: 1
127074 -Test "yn (0, 1.5) == 0.38244892379775884396":
127075 +Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
127076 double: 2
127077 float: 1
127078 idouble: 2
127079 ifloat: 1
127080 -Test "yn (0, 10.0) == 0.055671167283599391424":
127081 +Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
127082 float: 1
127083 ifloat: 1
127084 -Test "yn (0, 8.0) == 0.22352148938756622053":
127085 +ildouble: 3
127086 +ldouble: 3
127087 +Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
127088 double: 1
127089 float: 1
127090 idouble: 1
127091 ifloat: 1
127092 -Test "yn (1, 0.1) == -6.4589510947020269877":
127093 -double: 1
127094 -idouble: 1
127095 -Test "yn (1, 0.7) == -1.1032498719076333697":
127096 +ildouble: 3
127097 +ldouble: 3
127098 +Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
127099 double: 1
127100 -float: 1
127101 idouble: 1
127102 -ifloat: 1
127103 -Test "yn (1, 1.5) == -0.41230862697391129595":
127104 +Test "yn (1, 0.75) == -1.03759455076928541973767132140642198":
127105 +ildouble: 1
127106 +ldouble: 1
127107 +Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
127108 float: 1
127109 ifloat: 1
127110 -Test "yn (1, 10.0) == 0.24901542420695388392":
127111 +ildouble: 1
127112 +ldouble: 1
127113 +Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
127114 double: 3
127115 float: 1
127116 idouble: 3
127117 ifloat: 1
127118 -Test "yn (1, 2.0) == -0.10703243154093754689":
127119 +Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
127120 double: 1
127121 float: 1
127122 idouble: 1
127123 ifloat: 1
127124 -Test "yn (1, 8.0) == -0.15806046173124749426":
127125 +ildouble: 1
127126 +ldouble: 1
127127 +Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
127128 double: 1
127129 float: 2
127130 idouble: 1
127131 ifloat: 2
127132 -Test "yn (10, 0.1) == -0.11831335132045197885e19":
127133 -double: 2
127134 -float: 2
127135 -idouble: 2
127136 -ifloat: 2
127137 -Test "yn (10, 0.7) == -0.42447194260703866924e10":
127138 -double: 3
127139 -idouble: 3
127140 -Test "yn (10, 1.0) == -0.12161801427868918929e9":
127141 +ildouble: 1
127142 +ldouble: 1
127143 +Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
127144 double: 1
127145 idouble: 1
127146 -Test "yn (10, 10.0) == -0.35981415218340272205":
127147 +ildouble: 2
127148 +ldouble: 2
127149 +Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
127150 double: 1
127151 float: 1
127152 idouble: 1
127153 ifloat: 1
127154 -Test "yn (10, 2.0) == -129184.54220803928264":
127155 -double: 2
127156 -idouble: 2
127157 -Test "yn (3, 0.1) == -5099.3323786129048894":
127158 +ildouble: 5
127159 +ldouble: 5
127160 +Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
127161 double: 1
127162 -float: 1
127163 idouble: 1
127164 -ifloat: 1
127165 -Test "yn (3, 0.7) == -15.819479052819633505":
127166 -double: 3
127167 +ildouble: 1
127168 +ldouble: 1
127169 +Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
127170 +double: 1
127171 float: 1
127172 -idouble: 3
127173 +idouble: 1
127174 ifloat: 1
127175 -Test "yn (3, 10.0) == -0.25136265718383732978":
127176 +ildouble: 2
127177 +ldouble: 2
127178 +Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
127179 +double: 2
127180 +idouble: 2
127181 +ildouble: 2
127182 +ldouble: 2
127183 +Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
127184 +double: 1
127185 +idouble: 1
127186 +Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
127187 double: 1
127188 float: 1
127189 idouble: 1
127190 ifloat: 1
127191 -Test "yn (3, 2.0) == -1.1277837768404277861":
127192 +ildouble: 2
127193 +ldouble: 2
127194 +Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
127195 double: 1
127196 +float: 1
127197 idouble: 1
127199 -# Maximal error of functions:
127200 -Function: "acos":
127201 -ldouble: 1
127202 +ifloat: 1
127203 ildouble: 1
127205 -Function: "asin":
127206 +ldouble: 1
127207 +Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
127208 double: 1
127209 -float: 2
127210 idouble: 1
127211 -ifloat: 2
127213 -Function: "atan":
127214 -ildouble: 1
127215 -ldouble: 1
127217 +# Maximal error of functions:
127218 Function: "atan2":
127219 +float: 3
127220 +ifloat: 3
127221 ildouble: 1
127222 ldouble: 1
127223 -float: 4
127224 -ifloat: 4
127226 Function: "atanh":
127227 -double: 1
127228 -idouble: 1
127230 -Function: "cabs":
127231 -double: 1
127232 -float: 1
127233 -idouble: 1
127234 -ifloat: 1
127236 -Function: Real part of "cacos":
127237 -double: 1
127238 float: 1
127239 -idouble: 1
127240 ifloat: 1
127242 Function: Imaginary part of "cacos":
127243 -float: 1
127244 -ifloat: 1
127245 -ildouble: 3
127246 -ldouble: 3
127247 +ildouble: 1
127248 +ldouble: 1
127250 Function: Real part of "cacosh":
127251 double: 1
127252 @@ -984,18 +936,14 @@
127253 ldouble: 1
127255 Function: Real part of "casin":
127256 -double: 3
127257 -float: 2
127258 -idouble: 3
127259 -ifloat: 2
127260 -ildouble: 1
127261 -ldouble: 1
127263 -Function: Imaginary part of "casin":
127264 +double: 1
127265 float: 1
127266 +idouble: 1
127267 ifloat: 1
127268 -ildouble: 3
127269 -ldouble: 3
127271 +Function: Imaginary part of "casin":
127272 +ildouble: 1
127273 +ldouble: 1
127275 Function: Real part of "casinh":
127276 double: 5
127277 @@ -1027,28 +975,30 @@
127279 Function: Real part of "catanh":
127280 double: 4
127281 -float: 1
127282 idouble: 4
127283 -ifloat: 1
127284 +ildouble: 1
127285 +ldouble: 1
127287 Function: Imaginary part of "catanh":
127288 -double: 1
127289 float: 6
127290 -idouble: 1
127291 ifloat: 6
127292 +ildouble: 1
127293 +ldouble: 1
127295 Function: "cbrt":
127296 double: 1
127297 idouble: 1
127298 +ildouble: 1
127299 +ldouble: 1
127301 Function: Real part of "ccos":
127302 double: 1
127303 +float: 1
127304 idouble: 1
127305 +ifloat: 1
127307 Function: Imaginary part of "ccos":
127308 -double: 1
127309 float: 1
127310 -idouble: 1
127311 ifloat: 1
127313 Function: Real part of "ccosh":
127314 @@ -1058,15 +1008,11 @@
127315 ifloat: 1
127317 Function: Imaginary part of "ccosh":
127318 -double: 1
127319 float: 1
127320 -idouble: 1
127321 ifloat: 1
127323 Function: Real part of "cexp":
127324 -double: 1
127325 float: 1
127326 -idouble: 1
127327 ifloat: 1
127328 ildouble: 1
127329 ldouble: 1
127330 @@ -1077,16 +1023,18 @@
127331 ildouble: 1
127332 ldouble: 1
127334 +Function: Real part of "clog":
127335 +float: 1
127336 +ifloat: 1
127337 +ildouble: 1
127338 +ldouble: 1
127340 Function: Imaginary part of "clog":
127341 -double: 1
127342 float: 3
127343 -idouble: 1
127344 ifloat: 3
127346 Function: Real part of "clog10":
127347 -double: 1
127348 float: 1
127349 -idouble: 1
127350 ifloat: 1
127352 Function: Imaginary part of "clog10":
127353 @@ -1094,6 +1042,7 @@
127354 float: 5
127355 idouble: 1
127356 ifloat: 5
127357 +ldouble: 1
127359 Function: "cos":
127360 double: 2
127361 @@ -1104,24 +1053,24 @@
127362 ldouble: 1
127364 Function: Real part of "cpow":
127365 -double: 1
127366 +double: 2
127367 float: 4
127368 -idouble: 1
127369 +idouble: 2
127370 ifloat: 4
127371 -ildouble: 3
127372 -ldouble: 3
127373 +ildouble: 1
127374 +ldouble: 1
127376 Function: Imaginary part of "cpow":
127377 -double: 1.1031
127378 +double: 2
127379 float: 2
127380 -idouble: 1.1031
127381 +idouble: 2
127382 ifloat: 2
127383 -ildouble: 0.9006
127384 -ldouble: 0.9006
127385 +ildouble: 1
127386 +ldouble: 1
127388 -Function: Imaginary part of "csin":
127389 -float: 1
127390 -ifloat: 1
127391 +Function: Real part of "csin":
127392 +ildouble: 1
127393 +ldouble: 1
127395 Function: Real part of "csinh":
127396 float: 1
127397 @@ -1134,48 +1083,44 @@
127398 ifloat: 1
127400 Function: Real part of "csqrt":
127401 -double: 1
127402 float: 1
127403 -idouble: 1
127404 ifloat: 1
127405 ildouble: 1
127406 ldouble: 1
127408 Function: Imaginary part of "csqrt":
127409 -float: 1
127410 -ifloat: 1
127411 ildouble: 1
127412 ldouble: 1
127414 Function: Real part of "ctan":
127415 double: 1
127416 -float: 1
127417 idouble: 1
127418 -ifloat: 1
127420 Function: Imaginary part of "ctan":
127421 double: 1
127422 -float: 1
127423 idouble: 1
127424 -ifloat: 1
127425 +ildouble: 2
127426 +ldouble: 2
127428 Function: Real part of "ctanh":
127429 -double: 2
127430 +double: 1
127431 float: 2
127432 -idouble: 2
127433 +idouble: 1
127434 ifloat: 2
127436 Function: Imaginary part of "ctanh":
127437 -double: 2
127438 float: 1
127439 -idouble: 2
127440 ifloat: 1
127442 +Function: "erf":
127443 +double: 1
127444 +idouble: 1
127446 Function: "erfc":
127447 -double: 24
127448 -float: 12
127449 -idouble: 24
127450 -ifloat: 12
127451 +double: 1
127452 +idouble: 1
127453 +ildouble: 1
127454 +ldouble: 1
127456 Function: "exp10":
127457 double: 6
127458 @@ -1190,19 +1135,15 @@
127459 float: 1
127460 idouble: 1
127461 ifloat: 1
127462 +ildouble: 1
127463 +ldouble: 1
127465 -Function: "fmod":
127466 -double: 2
127467 -float: 1
127468 -idouble: 2
127469 -ifloat: 1
127470 -ildouble: 2
127471 -ldouble: 2
127472 +Function: "gamma":
127473 +ildouble: 1
127474 +ldouble: 1
127476 Function: "hypot":
127477 -double: 1
127478 float: 1
127479 -idouble: 1
127480 ifloat: 1
127482 Function: "j0":
127483 @@ -1210,52 +1151,50 @@
127484 float: 2
127485 idouble: 2
127486 ifloat: 2
127487 +ildouble: 2
127488 +ldouble: 2
127490 Function: "j1":
127491 double: 1
127492 float: 2
127493 idouble: 1
127494 ifloat: 2
127495 +ildouble: 4
127496 +ldouble: 4
127498 Function: "jn":
127499 -double: 6
127500 +double: 4
127501 float: 4
127502 -idouble: 6
127503 +idouble: 4
127504 ifloat: 4
127505 +ildouble: 4
127506 +ldouble: 4
127508 Function: "lgamma":
127509 double: 1
127510 float: 2
127511 idouble: 1
127512 ifloat: 2
127514 -Function: "log":
127515 -double: 1
127516 -float: 1
127517 -idouble: 1
127518 -ifloat: 1
127519 ildouble: 1
127520 ldouble: 1
127522 Function: "log10":
127523 double: 1
127524 -float: 1
127525 +float: 2
127526 idouble: 1
127527 -ifloat: 1
127528 +ifloat: 2
127529 +ildouble: 1
127530 +ldouble: 1
127532 Function: "log1p":
127533 -double: 1
127534 float: 1
127535 -idouble: 1
127536 ifloat: 1
127537 ildouble: 1
127538 ldouble: 1
127540 Function: "log2":
127541 -double: 1
127542 -float: 1
127543 -idouble: 1
127544 -ifloat: 1
127545 +ildouble: 1
127546 +ldouble: 1
127548 Function: "sincos":
127549 double: 1
127550 @@ -1265,50 +1204,48 @@
127551 ildouble: 1
127552 ldouble: 1
127554 -Function: "sinh":
127555 -double: 1
127556 -float: 1
127557 -idouble: 1
127558 -ifloat: 1
127560 Function: "sqrt":
127561 ildouble: 1
127562 ldouble: 1
127564 Function: "tan":
127565 -double: 0.5
127566 -idouble: 0.5
127567 -ildouble: 1
127568 -ldouble: 1
127570 -Function: "tanh":
127571 double: 1
127572 -float: 1
127573 idouble: 1
127574 -ifloat: 1
127576 +Function: "tanh":
127577 +ildouble: 1
127578 +ldouble: 1
127580 Function: "tgamma":
127581 double: 1
127582 float: 1
127583 idouble: 1
127584 ifloat: 1
127585 +ildouble: 1
127586 +ldouble: 1
127588 Function: "y0":
127589 double: 2
127590 float: 1
127591 idouble: 2
127592 ifloat: 1
127593 +ildouble: 3
127594 +ldouble: 3
127596 Function: "y1":
127597 double: 3
127598 float: 2
127599 idouble: 3
127600 ifloat: 2
127601 +ildouble: 1
127602 +ldouble: 1
127604 Function: "yn":
127605 double: 3
127606 float: 2
127607 idouble: 3
127608 ifloat: 2
127609 +ildouble: 5
127610 +ldouble: 5
127612 # end of automatic generation
127613 diff -u -udbrN glibc-2.3.2/sysdeps/unix/Makefile glibc-2.3.2-200304020432/sysdeps/unix/Makefile
127614 --- glibc-2.3.2/sysdeps/unix/Makefile Thu Jan 16 01:47:25 2003
127615 +++ glibc-2.3.2-200304020432/sysdeps/unix/Makefile Thu Mar 27 10:47:16 2003
127616 @@ -1,4 +1,5 @@
127617 -# Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc.
127618 +# Copyright (C) 1991,1992,1993,1994,1995,1996,1997,1998,1999,2003
127619 +# Free Software Foundation, Inc.
127620 # This file is part of the GNU C Library.
127622 # The GNU C Library is free software; you can redistribute it and/or
127623 @@ -281,10 +282,47 @@
127625 ifeq (misc,$(subdir))
127626 sysdep_routines += $(unix-extra-syscalls)
127628 +ifdef unix-stub-syscalls
127629 +# The system call entry points in this list are supposed to be additional
127630 +# functions not overriding any other sysdeps/.../call.c implementation, but
127631 +# their system call numbers are unavailable in the kernel headers we're
127632 +# using. Instead of a system call stub, these get a function that fails
127633 +# with ENOSYS. We just generate a single module defining one function and
127634 +# making all these entry point names aliases for it.
127635 +sysdep_routines += stub-syscalls
127636 +$(objpfx)stub-syscalls.c: $(common-objpfx)sysd-syscalls \
127637 + $(..)sysdeps/unix/Makefile
127638 + (echo '#include <errno.h>'; \
127639 + echo 'long int _no_syscall (void)'; \
127640 + echo '{ __set_errno (ENOSYS); return -1L; }'; \
127641 + for call in $(unix-stub-syscalls); do \
127642 + case $$call in \
127643 + *@@*) ver=$${call##*@}; call=$${call%%*@}; \
127644 + echo "strong_alias (_no_syscall, $${call}_$${ver})"; \
127645 + echo "default_symbol_version \
127646 + ($${call}_$${ver}, $$call, $$ver);" ;; \
127647 + *@@*) ver=$${call##*@}; call=$${call%%*@}; \
127648 + echo "strong_alias (_no_syscall, $${call}_$${ver})"; \
127649 + echo "symbol_version ($${call}_$${ver}, $$call, $$ver);" ;; \
127650 + *) echo "weak_alias (_no_syscall, $$call)"; \
127651 + echo "stub_warning ($$call)"; \
127652 + echo "weak_alias (_no_syscall, __GI_$$call)" ;; \
127653 + esac; \
127654 + echo '#include <stub-tag.h>'; \
127655 + done) > $@T
127656 + mv -f $@T $@
127657 +generated += stub-syscalls.c
127658 +endif
127659 endif
127661 export sysdirs
127662 export asm_CPP := $(COMPILE.S) -E -x assembler-with-cpp
127664 +# This is the end of the pipeline for compiling the syscall stubs.
127665 +# The stdin in assembler with cpp using sysdep.h macros.
127666 +# Be sure to disable debugging info since it would all just say "<stdin>".
127667 +compile-syscall = $(filter-out -g%,$(COMPILE.S)) -x assembler-with-cpp -o $@ -
127669 ifndef avoid-generated
127670 $(common-objpfx)sysd-syscalls: $(..)sysdeps/unix/make-syscalls.sh \
127671 diff -u -udbrN glibc-2.3.2/sysdeps/unix/alpha/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/alpha/sysdep.h
127672 --- glibc-2.3.2/sysdeps/unix/alpha/sysdep.h Sun Jan 26 22:07:32 2003
127673 +++ glibc-2.3.2-200304020432/sysdeps/unix/alpha/sysdep.h Sun Mar 23 20:42:22 2003
127674 @@ -119,6 +119,21 @@
127675 END(sym)
127676 #endif
127678 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
127679 + .globl name; \
127680 + .align 4; \
127681 + .ent name,0; \
127682 +__LABEL(name) \
127683 + PSEUDO_PROLOGUE; \
127684 + PSEUDO_PREPARE_ARGS \
127685 + lda v0, SYS_ify(syscall_name); \
127686 + call_pal PAL_callsys;
127688 +#undef PSEUDO_END_NOERRNO
127689 +#define PSEUDO_END_NOERRNO(sym) END(sym)
127691 +#define ret_NOERRNO ret
127693 #define r0 v0
127694 #define r1 a4
127696 diff -u -udbrN glibc-2.3.2/sysdeps/unix/clock_gettime.c glibc-2.3.2-200304020432/sysdeps/unix/clock_gettime.c
127697 --- glibc-2.3.2/sysdeps/unix/clock_gettime.c Fri Feb 1 00:39:56 2002
127698 +++ glibc-2.3.2-200304020432/sysdeps/unix/clock_gettime.c Sun Mar 16 11:08:19 2003
127699 @@ -1,4 +1,4 @@
127700 -/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
127701 +/* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
127702 This file is part of the GNU C Library.
127704 The GNU C Library is free software; you can redistribute it and/or
127705 @@ -41,17 +41,28 @@
127707 clock_gettime (clockid_t clock_id, struct timespec *tp)
127709 - struct timeval tv;
127710 int retval = -1;
127712 switch (clock_id)
127714 +#define HANDLE_REALTIME \
127715 + do { \
127716 + struct timeval tv; \
127717 + retval = gettimeofday (&tv, NULL); \
127718 + if (retval == 0) \
127719 + /* Convert into `timespec'. */ \
127720 + TIMEVAL_TO_TIMESPEC (&tv, tp); \
127721 + } while (0)
127723 +#ifdef SYSDEP_GETTIME
127724 + SYSDEP_GETTIME;
127725 +#endif
127727 +#ifndef HANDLED_REALTIME
127728 case CLOCK_REALTIME:
127729 - retval = gettimeofday (&tv, NULL);
127730 - if (retval == 0)
127731 - /* Convert into `timespec'. */
127732 - TIMEVAL_TO_TIMESPEC (&tv, tp);
127733 + HANDLE_REALTIME;
127734 break;
127735 +#endif
127737 #if HP_TIMING_AVAIL
127738 case CLOCK_PROCESS_CPUTIME_ID:
127739 diff -u -udbrN glibc-2.3.2/sysdeps/unix/clock_nanosleep.c glibc-2.3.2-200304020432/sysdeps/unix/clock_nanosleep.c
127740 --- glibc-2.3.2/sysdeps/unix/clock_nanosleep.c Sat Jul 7 21:21:29 2001
127741 +++ glibc-2.3.2-200304020432/sysdeps/unix/clock_nanosleep.c Mon Mar 3 05:46:57 2003
127742 @@ -1,5 +1,5 @@
127743 /* High-resolution sleep with the specified clock.
127744 - Copyright (C) 2000, 2001 Free Software Foundation, Inc.
127745 + Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
127746 This file is part of the GNU C Library.
127748 The GNU C Library is free software; you can redistribute it and/or
127749 @@ -24,11 +24,16 @@
127752 #if HP_TIMING_AVAIL
127753 -# define CLOCK_P(clock) \
127754 - (clock) != CLOCK_PROCESS_CPUTIME_ID \
127755 - && (clock) != CLOCK_THREAD_CPUTIME_ID
127756 +# define CPUCLOCK_P(clock) \
127757 + ((clock) != CLOCK_PROCESS_CPUTIME_ID \
127758 + && (clock) != CLOCK_THREAD_CPUTIME_ID)
127759 #else
127760 -# define CLOCK_P(clock) 0
127761 +# define CPUCLOCK_P(clock) 0
127762 +#endif
127764 +#ifndef INVALID_CLOCK_P
127765 +# define INVALID_CLOCK_P(cl) \
127766 + ((cl) < CLOCK_REALTIME || (cl) > CLOCK_THREAD_CPUTIME_ID || CPUCLOCK_P (cl))
127767 #endif
127770 @@ -44,6 +49,16 @@
127771 || __builtin_expect (req->tv_nsec, 0) >= 1000000000)
127772 return EINVAL;
127774 + if (CPUCLOCK_P (clock_id))
127775 + return ENOTSUP;
127777 + if (INVALID_CLOCK_P (clock_id))
127778 + return EINVAL;
127780 +#ifdef SYSDEP_NANOSLEEP
127781 + SYSDEP_NANOSLEEP;
127782 +#endif
127784 /* If we got an absolute time, remap it. */
127785 if (flags == TIMER_ABSTIME)
127787 @@ -76,11 +91,8 @@
127788 else if (__builtin_expect (flags, 0) != 0)
127789 return EINVAL;
127790 else if (clock_id != CLOCK_REALTIME)
127792 - /* Make sure the clock ID is correct. */
127793 - if (__builtin_expect (! CLOCK_P (clock_id), 0))
127794 - return EINVAL;
127796 + /* Not supported. */
127797 + return ENOTSUP;
127799 return __builtin_expect (nanosleep (req, rem), 0) ? errno : 0;
127801 diff -u -udbrN glibc-2.3.2/sysdeps/unix/clock_settime.c glibc-2.3.2-200304020432/sysdeps/unix/clock_settime.c
127802 --- glibc-2.3.2/sysdeps/unix/clock_settime.c Fri Feb 1 00:40:41 2002
127803 +++ glibc-2.3.2-200304020432/sysdeps/unix/clock_settime.c Sun Mar 16 11:08:38 2003
127804 @@ -1,4 +1,4 @@
127805 -/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
127806 +/* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
127807 This file is part of the GNU C Library.
127809 The GNU C Library is free software; you can redistribute it and/or
127810 @@ -40,7 +40,6 @@
127812 clock_settime (clockid_t clock_id, const struct timespec *tp)
127814 - struct timeval tv;
127815 int retval;
127817 /* Make sure the time cvalue is OK. */
127818 @@ -52,11 +51,23 @@
127820 switch (clock_id)
127822 - case CLOCK_REALTIME:
127823 - TIMESPEC_TO_TIMEVAL (&tv, tp);
127824 +#define HANDLE_REALTIME \
127825 + do { \
127826 + struct timeval tv; \
127827 + TIMESPEC_TO_TIMEVAL (&tv, tp); \
127829 + retval = settimeofday (&tv, NULL); \
127830 + } while (0)
127832 - retval = settimeofday (&tv, NULL);
127833 +#ifdef SYSDEP_GETTIME
127834 + SYSDEP_GETTIME;
127835 +#endif
127837 +#ifndef HANDLED_REALTIME
127838 + case CLOCK_REALTIME:
127839 + HANDLE_REALTIME;
127840 break;
127841 +#endif
127843 #if HP_TIMING_AVAIL
127844 case CLOCK_PROCESS_CPUTIME_ID:
127845 diff -u -udbrN glibc-2.3.2/sysdeps/unix/make-syscalls.sh glibc-2.3.2-200304020432/sysdeps/unix/make-syscalls.sh
127846 --- glibc-2.3.2/sysdeps/unix/make-syscalls.sh Thu Jan 16 01:47:25 2003
127847 +++ glibc-2.3.2-200304020432/sysdeps/unix/make-syscalls.sh Wed Mar 26 23:49:15 2003
127848 @@ -84,8 +84,10 @@
127851 cancellable=
127852 + noerrno=
127853 case $args in
127854 C*) cancellable=-cancel; args=`echo $args | sed 's/C:\?//'`;;
127855 + E*) noerrno=_NOERRNO; args=`echo $args | sed 's/E:\?//'`;;
127858 # Derive the number of arguments from the argument signature
127859 @@ -109,6 +111,16 @@
127860 echo "#### CALL=$file NUMBER=$callnum ARGS=$args SOURCE=$srcfile"
127862 case x$srcfile"$callnum" in
127863 + x--)
127864 + # Undefined callnum for an extra syscall.
127865 + if [ x$caller != x- ]; then
127866 + if [ x$noerrno != x ]; then
127867 + echo >&2 "$0: no number for $fileno, no-error syscall ($strong $weak)"
127868 + exit 2
127870 + echo "unix-stub-syscalls += $strong $weak"
127873 x*-) ;; ### Do nothing for undefined callnum
127875 echo "ifeq (,\$(filter $file,\$(unix-syscalls)))"
127876 @@ -149,9 +161,9 @@
127877 echo "\
127878 \$(make-target-directory)
127879 (echo '#include <sysdep$cancellable.h>'; \\
127880 - echo 'PSEUDO ($strong, $syscall, $nargs)'; \\
127881 - echo ' ret'; \\
127882 - echo 'PSEUDO_END($strong)'; \\
127883 + echo 'PSEUDO$noerrno ($strong, $syscall, $nargs)'; \\
127884 + echo ' ret$noerrno'; \\
127885 + echo 'PSEUDO_END$noerrno($strong)'; \\
127886 echo 'libc_hidden_def ($strong)'; \\"
127889 @@ -198,7 +210,7 @@
127892 # And finally, pipe this all into the compiler.
127893 - echo ' ) | $(COMPILE.S) -x assembler-with-cpp -o $@ -'
127894 + echo ' ) | $(compile-syscall)'
127896 case $weak in
127898 diff -u -udbrN glibc-2.3.2/sysdeps/unix/mips/brk.S glibc-2.3.2-200304020432/sysdeps/unix/mips/brk.S
127899 --- glibc-2.3.2/sysdeps/unix/mips/brk.S Sun Jan 12 08:54:14 2003
127900 +++ glibc-2.3.2-200304020432/sysdeps/unix/mips/brk.S Mon Mar 17 16:47:12 2003
127901 @@ -1,4 +1,4 @@
127902 -/* Copyright (C) 1992, 1995, 1997 Free Software Foundation, Inc.
127903 +/* Copyright (C) 1992, 1995, 1997, 2002, 2003 Free Software Foundation, Inc.
127904 This file is part of the GNU C Library.
127905 Contributed by Brendan Kehoe (brendan@zen.org).
127907 @@ -18,6 +18,7 @@
127908 02111-1307 USA. */
127910 #include <sysdep.h>
127911 +#include <sys/asm.h>
127913 #ifndef SYS_brk
127914 #define SYS_brk 17
127915 @@ -37,9 +38,9 @@
127916 .set reorder
127917 /* Handle the query case. */
127918 bnez a0, 1f
127919 - move a0,v0
127920 + move a0, v0
127921 1: /* Update __curbrk and exit cleanly. */
127922 - sw a0, __curbrk
127923 + PTR_S a0, __curbrk
127924 move v0, zero
127925 jr ra
127926 PSEUDO_END(__brk)
127927 diff -u -udbrN glibc-2.3.2/sysdeps/unix/mips/mips32/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/mips/mips32/sysdep.h
127928 --- glibc-2.3.2/sysdeps/unix/mips/mips32/sysdep.h Thu Jan 1 01:00:00 1970
127929 +++ glibc-2.3.2-200304020432/sysdeps/unix/mips/mips32/sysdep.h Sat Mar 29 09:15:28 2003
127930 @@ -0,0 +1,52 @@
127931 +/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003
127932 + Free Software Foundation, Inc.
127933 + This file is part of the GNU C Library.
127934 + Contributed by Brendan Kehoe (brendan@zen.org).
127936 + The GNU C Library is free software; you can redistribute it and/or
127937 + modify it under the terms of the GNU Lesser General Public
127938 + License as published by the Free Software Foundation; either
127939 + version 2.1 of the License, or (at your option) any later version.
127941 + The GNU C Library is distributed in the hope that it will be useful,
127942 + but WITHOUT ANY WARRANTY; without even the implied warranty of
127943 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
127944 + Lesser General Public License for more details.
127946 + You should have received a copy of the GNU Lesser General Public
127947 + License along with the GNU C Library; if not, write to the Free
127948 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
127949 + 02111-1307 USA. */
127951 +#include <sysdeps/unix/mips/sysdep.h>
127953 +/* Note that while it's better structurally, going back to call __syscall_error
127954 + can make things confusing if you're debugging---it looks like it's jumping
127955 + backwards into the previous fn. */
127956 +#ifdef __PIC__
127957 +#define PSEUDO(name, syscall_name, args) \
127958 + .align 2; \
127959 + 99: la t9,__syscall_error; \
127960 + jr t9; \
127961 + ENTRY(name) \
127962 + .set noreorder; \
127963 + .cpload t9; \
127964 + li v0, SYS_ify(syscall_name); \
127965 + syscall; \
127966 + .set reorder; \
127967 + bne a3, zero, 99b; \
127968 +L(syse1):
127969 +#else
127970 +#define PSEUDO(name, syscall_name, args) \
127971 + .set noreorder; \
127972 + .align 2; \
127973 + 99: j __syscall_error; \
127974 + nop; \
127975 + ENTRY(name) \
127976 + .set noreorder; \
127977 + li v0, SYS_ify(syscall_name); \
127978 + syscall; \
127979 + .set reorder; \
127980 + bne a3, zero, 99b; \
127981 +L(syse1):
127982 +#endif
127983 diff -u -udbrN glibc-2.3.2/sysdeps/unix/mips/mips64/n32/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/mips/mips64/n32/sysdep.h
127984 --- glibc-2.3.2/sysdeps/unix/mips/mips64/n32/sysdep.h Thu Jan 1 01:00:00 1970
127985 +++ glibc-2.3.2-200304020432/sysdeps/unix/mips/mips64/n32/sysdep.h Sat Mar 29 09:15:28 2003
127986 @@ -0,0 +1,57 @@
127987 +/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003
127988 + Free Software Foundation, Inc.
127989 + This file is part of the GNU C Library.
127990 + Contributed by Alexandre Oliva <aoliva@redhat.com>.
127992 + The GNU C Library is free software; you can redistribute it and/or
127993 + modify it under the terms of the GNU Lesser General Public
127994 + License as published by the Free Software Foundation; either
127995 + version 2.1 of the License, or (at your option) any later version.
127997 + The GNU C Library is distributed in the hope that it will be useful,
127998 + but WITHOUT ANY WARRANTY; without even the implied warranty of
127999 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
128000 + Lesser General Public License for more details.
128002 + You should have received a copy of the GNU Lesser General Public
128003 + License along with the GNU C Library; if not, write to the Free
128004 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
128005 + 02111-1307 USA. */
128007 +#include <sysdeps/unix/mips/sysdep.h>
128009 +#ifdef __ASSEMBLER__
128011 +/* Note that while it's better structurally, going back to call __syscall_error
128012 + can make things confusing if you're debugging---it looks like it's jumping
128013 + backwards into the previous fn. */
128014 +#ifdef __PIC__
128015 +#define PSEUDO(name, syscall_name, args) \
128016 + .align 2; \
128017 + 99:; \
128018 + .set noat; \
128019 + .cpsetup t9, $1, name; \
128020 + .set at; \
128021 + la t9,__syscall_error; \
128022 + .cpreturn; \
128023 + jr t9; \
128024 + ENTRY(name) \
128025 + li v0, SYS_ify(syscall_name); \
128026 + syscall; \
128027 + bne a3, zero, 99b; \
128028 +L(syse1):
128029 +#else
128030 +#define PSEUDO(name, syscall_name, args) \
128031 + .set noreorder; \
128032 + .align 2; \
128033 + 99: j __syscall_error; \
128034 + ENTRY(name) \
128035 + .set noreorder; \
128036 + li v0, SYS_ify(syscall_name); \
128037 + syscall; \
128038 + .set reorder; \
128039 + bne a3, zero, 99b; \
128040 +L(syse1):
128041 +#endif
128043 +#endif
128044 diff -u -udbrN glibc-2.3.2/sysdeps/unix/mips/mips64/n64/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/mips/mips64/n64/sysdep.h
128045 --- glibc-2.3.2/sysdeps/unix/mips/mips64/n64/sysdep.h Thu Jan 1 01:00:00 1970
128046 +++ glibc-2.3.2-200304020432/sysdeps/unix/mips/mips64/n64/sysdep.h Sat Mar 29 09:15:28 2003
128047 @@ -0,0 +1,57 @@
128048 +/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003
128049 + Free Software Foundation, Inc.
128050 + This file is part of the GNU C Library.
128051 + Contributed by Alexandre Oliva <aoliva@redhat.com>.
128053 + The GNU C Library is free software; you can redistribute it and/or
128054 + modify it under the terms of the GNU Lesser General Public
128055 + License as published by the Free Software Foundation; either
128056 + version 2.1 of the License, or (at your option) any later version.
128058 + The GNU C Library is distributed in the hope that it will be useful,
128059 + but WITHOUT ANY WARRANTY; without even the implied warranty of
128060 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
128061 + Lesser General Public License for more details.
128063 + You should have received a copy of the GNU Lesser General Public
128064 + License along with the GNU C Library; if not, write to the Free
128065 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
128066 + 02111-1307 USA. */
128068 +#include <sysdeps/unix/mips/sysdep.h>
128070 +#ifdef __ASSEMBLER__
128072 +/* Note that while it's better structurally, going back to call __syscall_error
128073 + can make things confusing if you're debugging---it looks like it's jumping
128074 + backwards into the previous fn. */
128075 +#ifdef __PIC__
128076 +#define PSEUDO(name, syscall_name, args) \
128077 + .align 2; \
128078 + 99:; \
128079 + .set noat; \
128080 + .cpsetup t9, $1, name; \
128081 + .set at; \
128082 + dla t9,__syscall_error; \
128083 + .cpreturn; \
128084 + jr t9; \
128085 + ENTRY(name) \
128086 + li v0, SYS_ify(syscall_name); \
128087 + syscall; \
128088 + bne a3, zero, 99b; \
128089 +L(syse1):
128090 +#else
128091 +#define PSEUDO(name, syscall_name, args) \
128092 + .set noreorder; \
128093 + .align 2; \
128094 + 99: j __syscall_error; \
128095 + ENTRY(name) \
128096 + .set noreorder; \
128097 + li v0, SYS_ify(syscall_name); \
128098 + syscall; \
128099 + .set reorder; \
128100 + bne a3, zero, 99b; \
128101 +L(syse1):
128102 +#endif
128104 +#endif
128105 diff -u -udbrN glibc-2.3.2/sysdeps/unix/mips/sysdep.S glibc-2.3.2-200304020432/sysdeps/unix/mips/sysdep.S
128106 --- glibc-2.3.2/sysdeps/unix/mips/sysdep.S Mon Jan 27 19:55:20 2003
128107 +++ glibc-2.3.2-200304020432/sysdeps/unix/mips/sysdep.S Fri Mar 28 08:02:35 2003
128108 @@ -1,4 +1,5 @@
128109 -/* Copyright (C) 1992,93,94,97,98,99,2000 Free Software Foundation, Inc.
128110 +/* Copyright (C) 1992, 1993, 1994, 1997, 1998, 1999, 2000, 2002, 2003
128111 + Free Software Foundation, Inc.
128112 This file is part of the GNU C Library.
128113 Contributed by Brendan Kehoe (brendan@zen.org).
128115 @@ -20,47 +21,52 @@
128116 #include <sysdep.h>
128117 #define _ERRNO_H
128118 #include <bits/errno.h>
128119 +#include <sys/asm.h>
128121 #ifdef _LIBC_REENTRANT
128123 +LOCALSZ= 3
128124 +FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
128125 +RAOFF= FRAMESZ-(1*SZREG)
128126 +GPOFF= FRAMESZ-(2*SZREG)
128127 +V0OFF= FRAMESZ-(3*SZREG)
128129 ENTRY(__syscall_error)
128130 #ifdef __PIC__
128131 - .set noreorder
128132 .set noat
128133 - move AT, ra
128134 - bltzal zero, 0f
128135 - nop
128136 -0: .cpload ra
128137 - move ra, AT
128138 + SETUP_GPX (AT)
128139 .set at
128140 - .set reorder
128141 #endif
128142 - subu sp, 32
128143 + PTR_SUBU sp, FRAMESZ
128144 + .set noat
128145 + SETUP_GPX64(GPOFF,AT)
128146 + .set at
128147 #ifdef __PIC__
128148 - .cprestore 16
128149 + SAVE_GP(GPOFF)
128150 #endif
128151 - sw v0, 20(sp)
128152 - sw ra, 24(sp)
128153 + REG_S v0, V0OFF(sp)
128154 + REG_S ra, RAOFF(sp)
128156 #if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
128157 /* We translate the system's EWOULDBLOCK error into EAGAIN.
128158 The GNU C library always defines EWOULDBLOCK==EAGAIN.
128159 EWOULDBLOCK_sys is the original number. */
128160 - bne v0, EWOULDBLOCK_sys, skip
128161 + bne v0, EWOULDBLOCK_sys, L(skip)
128163 li v0, EAGAIN
128164 -skip:
128165 +L(skip):
128166 #endif
128167 /* Find our per-thread errno address */
128168 jal __errno_location
128170 /* Store the error value. */
128171 - lw t0, 20(sp)
128172 - sw t0, 0(v0)
128173 + REG_L t4, V0OFF(sp)
128174 + sw t4, 0(v0)
128176 /* And just kick back a -1. */
128177 - lw ra, 24(sp)
128178 - addiu sp, 32
128179 + REG_L ra, RAOFF(sp)
128180 + RESTORE_GP64
128181 + PTR_ADDU sp, FRAMESZ
128182 li v0, -1
128184 END(__syscall_error)
128185 @@ -70,29 +76,25 @@
128187 ENTRY(__syscall_error)
128188 #ifdef __PIC__
128189 - .set noreorder
128190 - .set noat
128191 - move AT, ra
128192 - bltzal zero, 0f
128193 - nop
128194 -0: .cpload ra
128195 - move ra, AT
128196 - .set at
128197 - .set reorder
128198 + SETUP_GPX (AT)
128199 #endif
128200 + SETUP_GPX64 (t9, AT)
128202 #if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
128203 /* We translate the system's EWOULDBLOCK error into EAGAIN.
128204 The GNU C library always defines EWOULDBLOCK==EAGAIN.
128205 EWOULDBLOCK_sys is the original number. */
128206 - bne v0, EWOULDBLOCK_sys, skip
128207 + bne v0, EWOULDBLOCK_sys, L(skip)
128208 li v0, EAGAIN
128209 -skip:
128210 +L(skip):
128211 #endif
128212 /* Store it in errno... */
128213 sw v0, errno
128215 /* And just kick back a -1. */
128216 li v0, -1
128218 + RESTORE_GP64
128220 END(__syscall_error)
128221 #endif /* _LIBC_REENTRANT */
128222 diff -u -udbrN glibc-2.3.2/sysdeps/unix/mips/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/mips/sysdep.h
128223 --- glibc-2.3.2/sysdeps/unix/mips/sysdep.h Wed Nov 6 19:22:28 2002
128224 +++ glibc-2.3.2-200304020432/sysdeps/unix/mips/sysdep.h Sat Mar 29 09:15:28 2003
128225 @@ -1,4 +1,5 @@
128226 -/* Copyright (C) 1992,95,97,99,2000 Free Software Foundation, Inc.
128227 +/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003
128228 + Free Software Foundation, Inc.
128229 This file is part of the GNU C Library.
128230 Contributed by Brendan Kehoe (brendan@zen.org).
128232 @@ -29,48 +30,36 @@
128233 .ent name,0; \
128234 name##:
128236 -/* Note that while it's better structurally, going back to call __syscall_error
128237 - can make things confusing if you're debugging---it looks like it's jumping
128238 - backwards into the previous fn. */
128239 -#ifdef __PIC__
128240 - #define PSEUDO(name, syscall_name, args) \
128241 - .align 2; \
128242 - 99: la t9,__syscall_error; \
128243 - jr t9; \
128244 - ENTRY(name) \
128245 - .set noreorder; \
128246 - .cpload t9; \
128247 - li v0, SYS_ify(syscall_name); \
128248 - syscall; \
128249 - .set reorder; \
128250 - bne a3, zero, 99b; \
128251 -syse1:
128252 -#else
128253 -#define PSEUDO(name, syscall_name, args) \
128254 - .set noreorder; \
128255 +#undef END
128256 +#define END(function) \
128257 + .end function; \
128258 + .size function,.-function
128260 +#define ret j ra ; nop
128262 +#define PSEUDO_END(sym) .end sym; .size sym,.-sym
128264 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
128265 .align 2; \
128266 - 99: j __syscall_error; \
128267 - nop; \
128268 ENTRY(name) \
128269 .set noreorder; \
128270 li v0, SYS_ify(syscall_name); \
128271 - syscall; \
128272 - .set reorder; \
128273 - bne a3, zero, 99b; \
128274 -syse1:
128275 -#endif
128277 -#undef PSEUDO_END
128278 -#define PSEUDO_END(sym) .end sym
128279 + syscall
128281 -#define ret j ra ; nop
128282 +#undef PSEUDO_END_NOERRNO
128283 +#define PSEUDO_END_NOERRNO(sym) .end sym; .size sym,.-sym
128285 -#undef END
128286 -#define END(sym) .end sym
128287 +#define ret_NOERRNO ret
128289 #define r0 v0
128290 #define r1 v1
128291 /* The mips move insn is d,s. */
128292 #define MOVE(x,y) move y , x
128294 +#if _MIPS_SIM == _MIPS_SIM_ABI32 || _MIPS_SIM == _MIPS_SIM_ABIO64
128295 +# define L(label) $L ## label
128296 +#else
128297 +# define L(label) .L ## label
128298 +#endif
128300 #endif
128301 diff -u -udbrN glibc-2.3.2/sysdeps/unix/mips/wait.S glibc-2.3.2-200304020432/sysdeps/unix/mips/wait.S
128302 --- glibc-2.3.2/sysdeps/unix/mips/wait.S Sat Jul 7 21:21:30 2001
128303 +++ glibc-2.3.2-200304020432/sysdeps/unix/mips/wait.S Fri Mar 14 04:59:37 2003
128304 @@ -1,4 +1,5 @@
128305 -/* Copyright (C) 1992, 1994, 1995, 1997 Free Software Foundation, Inc.
128306 +/* Copyright (C) 1992, 1994, 1995, 1997, 2002, 2003
128307 + Free Software Foundation, Inc.
128308 This file is part of the GNU C Library.
128309 Contributed by Brendan Kehoe (brendan@zen.org).
128311 @@ -28,18 +29,18 @@
128313 li v0, SYS_wait
128314 syscall
128315 - beqz a3, noerror
128316 + beqz a3, L(noerror)
128318 j __syscall_error
128321 -noerror:
128322 +L(noerror):
128323 /* If the arg is not NULL, store v1 there. */
128324 - beqz a0, noarg
128325 + beqz a0, L(noarg)
128327 sw v1, 0(a0)
128329 -noarg:
128330 +L(noarg):
128332 .end __wait
128334 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sparc/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sparc/sysdep.h
128335 --- glibc-2.3.2/sysdeps/unix/sparc/sysdep.h Sat Jul 7 21:21:30 2001
128336 +++ glibc-2.3.2-200304020432/sysdeps/unix/sparc/sysdep.h Sun Mar 23 20:42:22 2003
128337 @@ -1,4 +1,4 @@
128338 -/* Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
128339 +/* Copyright (C) 1993, 1994, 1995, 1997, 2003 Free Software Foundation, Inc.
128340 This file is part of the GNU C Library.
128342 The GNU C Library is free software; you can redistribute it and/or
128343 @@ -52,7 +52,14 @@
128344 jmp %g1 + %lo(syscall_error); nop; \
128347 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
128348 + .global syscall_error; \
128349 + ENTRY (name) \
128350 + mov SYS_ify(syscall_name), %g1; \
128351 + ta 0
128353 #define ret retl; nop
128354 +#define ret_NOERRNO retl; nop
128355 #define r0 %o0
128356 #define r1 %o1
128357 #define MOVE(x,y) mov x, y
128358 diff -u -udbrN glibc-2.3.2/sysdeps/unix/syscalls.list glibc-2.3.2-200304020432/sysdeps/unix/syscalls.list
128359 --- glibc-2.3.2/sysdeps/unix/syscalls.list Fri Jan 31 04:39:32 2003
128360 +++ glibc-2.3.2-200304020432/sysdeps/unix/syscalls.list Sun Mar 23 20:36:50 2003
128361 @@ -14,13 +14,13 @@
128362 fstatfs - fstatfs i:ip __fstatfs fstatfs
128363 fsync - fsync Ci:i __libc_fsync fsync
128364 getdomain - getdomainname i:si getdomainname
128365 -getgid - getgid i: __getgid getgid
128366 +getgid - getgid Ei: __getgid getgid
128367 getgroups - getgroups i:ip __getgroups getgroups
128368 getitimer - getitimer i:ip __getitimer getitimer
128369 -getpid - getpid i: __getpid getpid
128370 +getpid - getpid Ei: __getpid getpid
128371 getpriority - getpriority i:ii getpriority
128372 getrlimit - getrlimit i:ip __getrlimit getrlimit
128373 -getuid - getuid i: __getuid getuid
128374 +getuid - getuid Ei: __getuid getuid
128375 ioctl - ioctl i:iiI __ioctl ioctl
128376 kill - kill i:ii __kill kill
128377 link - link i:ss __link link
128378 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysdep.h
128379 --- glibc-2.3.2/sysdeps/unix/sysdep.h Sat Jul 7 21:21:29 2001
128380 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysdep.h Wed Mar 26 19:07:28 2003
128381 @@ -1,4 +1,4 @@
128382 -/* Copyright (C) 1991, 92, 93, 96, 98 Free Software Foundation, Inc.
128383 +/* Copyright (C) 1991, 92, 93, 96, 98, 2003 Free Software Foundation, Inc.
128384 This file is part of the GNU C Library.
128386 The GNU C Library is free software; you can redistribute it and/or
128387 @@ -46,6 +46,9 @@
128388 to generate correct debugging information. */
128389 #ifndef PSEUDO_END
128390 #define PSEUDO_END(sym)
128391 +#endif
128392 +#ifndef PSEUDO_END_NOERRNO
128393 +#define PSEUDO_END_NOERRNO(sym) PSEUDO_END(sym)
128394 #endif
128396 /* Wrappers around system calls should normally inline the system call code.
128397 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/Makefile glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/Makefile
128398 --- glibc-2.3.2/sysdeps/unix/sysv/linux/Makefile Tue Dec 17 00:36:52 2002
128399 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/Makefile Sat Mar 15 00:36:59 2003
128400 @@ -42,7 +42,7 @@
128401 sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \
128402 LC_ALL=C sort > $(@:.d=.h).new32; \
128403 SUNPRO_DEPENDENCIES='$(@:.h=.d)-t $@' \
128404 - $(CC) -E -x c $(sysincludes) $< $(addprefix -U,$(64bit-predefine)) \
128405 + $(CC) -E -x c $(sysincludes) $< $(addprefix -U,$(32bit-predefine)) \
128406 $(addprefix -D,$(64bit-predefine)) -D_LIBC -dM | \
128407 sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \
128408 LC_ALL=C sort > $(@:.d=.h).new64; \
128409 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/alpha/bits/mman.h
128410 --- glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/bits/mman.h Sat Jul 7 21:21:33 2001
128411 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/alpha/bits/mman.h Mon Mar 3 10:20:08 2003
128412 @@ -1,5 +1,5 @@
128413 /* Definitions for POSIX memory map interface. Linux/Alpha version.
128414 - Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
128415 + Copyright (C) 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
128416 This file is part of the GNU C Library.
128418 The GNU C Library is free software; you can redistribute it and/or
128419 @@ -60,11 +60,13 @@
128421 /* These are Linux-specific. */
128422 #ifdef __USE_MISC
128423 -# define MAP_GROWSDOWN 0x1000 /* Stack-like segment. */
128424 -# define MAP_DENYWRITE 0x2000 /* ETXTBSY */
128425 -# define MAP_EXECUTABLE 0x4000 /* Mark it as an executable. */
128426 -# define MAP_LOCKED 0x8000 /* Lock the mapping. */
128427 +# define MAP_GROWSDOWN 0x01000 /* Stack-like segment. */
128428 +# define MAP_DENYWRITE 0x02000 /* ETXTBSY */
128429 +# define MAP_EXECUTABLE 0x04000 /* Mark it as an executable. */
128430 +# define MAP_LOCKED 0x08000 /* Lock the mapping. */
128431 # define MAP_NORESERVE 0x10000 /* Don't check for reservations. */
128432 +# define MAP_POPULATE 0x20000 /* Populate (prefault) pagetables. */
128433 +# define MAP_NONBLOCK 0x40000 /* Do not block on IO. */
128434 #endif
128436 /* Flags to `msync'. */
128437 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h
128438 --- glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h Thu Dec 5 01:21:41 2002
128439 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h Thu Mar 27 00:41:57 2003
128440 @@ -1,5 +1,5 @@
128441 /* siginfo_t, sigevent and constants. Linux/Alpha version.
128442 - Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
128443 + Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
128444 This file is part of the GNU C Library.
128446 The GNU C Library is free software; you can redistribute it and/or
128447 @@ -22,8 +22,6 @@
128448 # error "Never include this file directly. Use <signal.h> instead"
128449 #endif
128451 -#include <bits/wordsize.h>
128453 #if (!defined __have_sigval_t \
128454 && (defined _SIGNAL_H || defined __need_siginfo_t \
128455 || defined __need_sigevent_t))
128456 @@ -42,11 +40,7 @@
128457 # define __have_siginfo_t 1
128459 # define __SI_MAX_SIZE 128
128460 -# if __WORDSIZE == 64
128461 # define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4)
128462 -# else
128463 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3)
128464 -# endif
128466 typedef struct siginfo
128468 @@ -69,8 +63,9 @@
128469 /* POSIX.1b timers. */
128470 struct
128472 - unsigned int _timer1;
128473 - unsigned int _timer2;
128474 + int si_tid; /* Timer ID. */
128475 + int si_overrun; /* Overrun count. */
128476 + sigval_t si_sigval; /* Signal value. */
128477 } _timer;
128479 /* POSIX.1b signals. */
128480 @@ -110,8 +105,8 @@
128481 /* X/Open requires some more fields with fixed names. */
128482 # define si_pid _sifields._kill.si_pid
128483 # define si_uid _sifields._kill.si_uid
128484 -# define si_timer1 _sifields._timer._timer1
128485 -# define si_timer2 _sifields._timer._timer2
128486 +# define si_timerid _sifields._timer.si_tid
128487 +# define si_overrun _sifields._timer.si_overrun
128488 # define si_status _sifields._sigchld.si_status
128489 # define si_utime _sifields._sigchld.si_utime
128490 # define si_stime _sifields._sigchld.si_stime
128491 @@ -261,14 +256,7 @@
128493 /* Structure to transport application-defined values with signals. */
128494 # define __SIGEV_MAX_SIZE 64
128495 -# if __WORDSIZE == 64
128496 # define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
128497 -# else
128498 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
128499 -# endif
128501 -/* Forward declaration of the `pthread_attr_t' type. */
128502 -struct __pthread_attr_s;
128504 typedef struct sigevent
128506 @@ -280,6 +268,10 @@
128508 int _pad[__SIGEV_PAD_SIZE];
128510 + /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
128511 + thread to receive the signal. */
128512 + __pid_t _tid;
128514 struct
128516 void (*_function) (sigval_t); /* Function to start. */
128517 @@ -299,8 +291,11 @@
128518 # define SIGEV_SIGNAL SIGEV_SIGNAL
128519 SIGEV_NONE, /* Other notification: meaningless. */
128520 # define SIGEV_NONE SIGEV_NONE
128521 - SIGEV_THREAD /* Deliver via thread creation. */
128522 + SIGEV_THREAD, /* Deliver via thread creation. */
128523 # define SIGEV_THREAD SIGEV_THREAD
128525 + SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */
128526 +#define SIGEV_THREAD_ID SIGEV_THREAD_ID
128529 #endif /* have _SIGNAL_H. */
128530 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/bits/signum.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/alpha/bits/signum.h
128531 --- glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/bits/signum.h Sat Jul 7 21:21:33 2001
128532 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/alpha/bits/signum.h Tue Apr 1 08:15:15 2003
128533 @@ -1,5 +1,5 @@
128534 /* Signal number definitions. Linux/Alpha version.
128535 - Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
128536 + Copyright (C) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
128537 This file is part of the GNU C Library.
128539 The GNU C Library is free software; you can redistribute it and/or
128540 @@ -69,7 +69,7 @@
128541 #define SIGPWR SIGINFO
128542 #define SIGIOT SIGABRT
128544 -#define _NSIG 64 /* Biggest signal number + 1. */
128545 +#define _NSIG 65 /* Biggest signal number + 1. */
128547 #define SIGRTMIN (__libc_current_sigrtmin ())
128548 #define SIGRTMAX (__libc_current_sigrtmax ())
128549 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
128550 --- glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h Thu Oct 24 01:48:49 2002
128551 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h Tue Mar 25 22:59:17 2003
128552 @@ -1,5 +1,5 @@
128553 /* bits/typesizes.h -- underlying types for *_t. Linux/Alpha version.
128554 - Copyright (C) 2002 Free Software Foundation, Inc.
128555 + Copyright (C) 2002, 2003 Free Software Foundation, Inc.
128556 This file is part of the GNU C Library.
128558 The GNU C Library is free software; you can redistribute it and/or
128559 @@ -54,7 +54,7 @@
128560 #define __SWBLK_T_TYPE __SLONGWORD_TYPE
128561 #define __KEY_T_TYPE __S32_TYPE
128562 #define __CLOCKID_T_TYPE __S32_TYPE
128563 -#define __TIMER_T_TYPE __S32_TYPE
128564 +#define __TIMER_T_TYPE void *
128565 #define __BLKSIZE_T_TYPE __U32_TYPE
128566 #define __FSID_T_TYPE struct { int __val[2]; }
128568 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/arm/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/bits/mman.h
128569 --- glibc-2.3.2/sysdeps/unix/sysv/linux/arm/bits/mman.h Sat Jul 7 21:21:34 2001
128570 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/bits/mman.h Mon Mar 3 10:57:38 2003
128571 @@ -1,5 +1,5 @@
128572 /* Definitions for POSIX memory map interface. Linux/ARM version.
128573 - Copyright (C) 1997, 2000 Free Software Foundation, Inc.
128574 + Copyright (C) 1997, 2000, 2003 Free Software Foundation, Inc.
128575 This file is part of the GNU C Library.
128577 The GNU C Library is free software; you can redistribute it and/or
128578 @@ -52,11 +52,13 @@
128580 /* These are Linux-specific. */
128581 #ifdef __USE_MISC
128582 -# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
128583 -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
128584 -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
128585 -# define MAP_LOCKED 0x2000 /* Lock the mapping. */
128586 -# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
128587 +# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
128588 +# define MAP_DENYWRITE 0x00800 /* ETXTBSY */
128589 +# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
128590 +# define MAP_LOCKED 0x02000 /* Lock the mapping. */
128591 +# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
128592 +# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
128593 +# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
128594 #endif
128596 /* Flags to `msync'. */
128597 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/arm/mmap64.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/mmap64.S
128598 --- glibc-2.3.2/sysdeps/unix/sysv/linux/arm/mmap64.S Sat Jul 7 21:21:33 2001
128599 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/mmap64.S Thu Mar 27 03:45:46 2003
128600 @@ -1,4 +1,4 @@
128601 -/* Copyright (C) 2000 Free Software Foundation, Inc.
128602 +/* Copyright (C) 2000, 2003 Free Software Foundation, Inc.
128603 This file is part of the GNU C Library.
128605 The GNU C Library is free software; you can redistribute it and/or
128606 @@ -21,6 +21,8 @@
128607 #define EINVAL 22
128608 #define ENOSYS 38
128610 +#include "kernel-features.h"
128612 /* The mmap2 system call takes six arguments, all in registers. */
128613 .text
128614 ENTRY (__mmap64)
128615 @@ -39,6 +41,10 @@
128616 swi SYS_ify (mmap2)
128617 cmn r0, $4096
128618 LOADREGS(ccfd, sp!, {r4, r5, pc})
128619 +# ifdef __ASSUME_MMAP2_SYSCALL
128620 + ldmfd sp!, {r4, r5, lr}
128621 + b PLTJMP(syscall_error)
128622 +# else
128623 cmn r0, $ENOSYS
128624 ldmnefd sp!, {r4, r5, lr}
128625 bne PLTJMP(syscall_error)
128626 @@ -49,6 +55,7 @@
128627 teq r5, $0
128628 ldmeqfd sp!, {r4, r5, lr}
128629 beq PLTJMP(__mmap)
128630 +# endif
128631 .Linval:
128632 mov r0, $-EINVAL
128633 ldmfd sp!, {r4, r5, lr}
128634 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/arm/sigaction.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/sigaction.c
128635 --- glibc-2.3.2/sysdeps/unix/sysv/linux/arm/sigaction.c Fri Jan 3 00:26:04 2003
128636 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/sigaction.c Thu Mar 27 03:45:46 2003
128637 @@ -22,6 +22,7 @@
128639 #include <sysdep.h>
128640 #include <sys/syscall.h>
128641 +#include <kernel-features.h>
128643 /* The difference here is that the sigaction structure used in the
128644 kernel is not the same as we use in the libc. Therefore we must
128645 @@ -60,15 +61,21 @@
128646 const struct sigaction *act;
128647 struct sigaction *oact;
128649 +#ifndef __ASSUME_REALTIME_SIGNALS
128650 struct old_kernel_sigaction k_sigact, k_osigact;
128651 +#endif
128652 int result;
128654 #ifdef __NR_rt_sigaction
128655 /* First try the RT signals. */
128656 +# ifndef __ASSUME_REALTIME_SIGNALS
128657 if (!__libc_missing_rt_sigs)
128658 +# endif
128660 struct kernel_sigaction kact, koact;
128661 +# ifndef __ASSUME_REALTIME_SIGNALS
128662 int saved_errno = errno;
128663 +# endif
128665 if (act)
128667 @@ -99,7 +106,9 @@
128668 act ? __ptrvalue (&kact) : NULL,
128669 oact ? __ptrvalue (&koact) : NULL, _NSIG / 8);
128671 +# ifndef __ASSUME_REALTIME_SIGNALS
128672 if (result >= 0 || errno != ENOSYS)
128673 +# endif
128675 if (oact && result >= 0)
128677 @@ -113,17 +122,20 @@
128678 return result;
128681 +# ifndef __ASSUME_REALTIME_SIGNALS
128682 __set_errno (saved_errno);
128683 __libc_missing_rt_sigs = 1;
128684 +# endif
128686 #endif
128688 +#ifndef __ASSUME_REALTIME_SIGNALS
128689 if (act)
128691 k_sigact.k_sa_handler = act->sa_handler;
128692 k_sigact.sa_mask = act->sa_mask.__val[0];
128693 k_sigact.sa_flags = act->sa_flags;
128694 -#ifdef HAVE_SA_RESTORER
128695 +# ifdef HAVE_SA_RESTORER
128696 /* See the comments above for why we test SA_ONSTACK. */
128697 if (k_sigact.sa_flags & (SA_RESTORER | SA_ONSTACK))
128698 k_sigact.sa_restorer = act->sa_restorer;
128699 @@ -132,7 +144,7 @@
128700 k_sigact.sa_restorer = choose_restorer (k_sigact.sa_flags);
128701 k_sigact.sa_flags |= SA_RESTORER;
128703 -#endif
128704 +# endif
128706 result = INLINE_SYSCALL (sigaction, 3, sig,
128707 act ? __ptrvalue (&k_sigact) : NULL,
128708 @@ -142,11 +154,12 @@
128709 oact->sa_handler = k_osigact.k_sa_handler;
128710 oact->sa_mask.__val[0] = k_osigact.sa_mask;
128711 oact->sa_flags = k_osigact.sa_flags;
128712 -#ifdef HAVE_SA_RESTORER
128713 +# ifdef HAVE_SA_RESTORER
128714 oact->sa_restorer = k_osigact.sa_restorer;
128715 -#endif
128716 +# endif
128718 return result;
128719 +#endif
128721 libc_hidden_def (__libc_sigaction)
128723 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/arm/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/sysdep.h
128724 --- glibc-2.3.2/sysdeps/unix/sysv/linux/arm/sysdep.h Thu Feb 20 21:22:10 2003
128725 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/sysdep.h Thu Mar 27 03:45:49 2003
128726 @@ -64,6 +64,22 @@
128727 SYSCALL_ERROR_HANDLER \
128728 END (name)
128730 +#undef PSEUDO_NOERRNO
128731 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
128732 + .text; \
128733 + ENTRY (name); \
128734 + DO_CALL (syscall_name, args);
128736 +#define PSEUDO_RET_NOERRNO \
128737 + RETINSTR(mov, pc, lr);
128739 +#undef ret_NOERRNO
128740 +#define ret_NOERRNO PSEUDO_RET_NOERRNO
128742 +#undef PSEUDO_END_NOERRNO
128743 +#define PSEUDO_END_NOERRNO(name) \
128744 + END (name)
128746 #if NOT_IN_libc
128747 # define SYSCALL_ERROR __local_syscall_error
128748 # define SYSCALL_ERROR_HANDLER \
128749 @@ -158,7 +174,7 @@
128750 asm volatile ("swi %1 @ syscall " #name \
128751 : "=r" (_a1) \
128752 : "i" (SYS_ify(name)) ASM_ARGS_##nr \
128753 - : "a1", "memory"); \
128754 + : "memory"); \
128755 _sys_result = _a1; \
128757 (int) _sys_result; })
128758 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/arm/vfork.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/vfork.S
128759 --- glibc-2.3.2/sysdeps/unix/sysv/linux/arm/vfork.S Tue Dec 31 20:13:28 2002
128760 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/arm/vfork.S Thu Mar 27 03:45:46 2003
128761 @@ -1,4 +1,4 @@
128762 -/* Copyright (C) 1999, 2002 Free Software Foundation, Inc.
128763 +/* Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
128764 This file is part of the GNU C Library.
128765 Contributed by Philip Blundell <philb@gnu.org>.
128767 @@ -20,6 +20,7 @@
128768 #include <sysdep.h>
128769 #define _ERRNO_H 1
128770 #include <bits/errno.h>
128771 +#include <kernel-features.h>
128773 /* Clone the calling process, but without copying the whole address space.
128774 The calling process is suspended until the new process exits or is
128775 @@ -33,17 +34,23 @@
128776 cmn a1, #4096
128777 RETINSTR(movcc, pc, lr)
128779 +# ifdef __ASSUME_VFORK_SYSCALL
128780 + b PLTJMP(C_SYMBOL_NAME(__syscall_error))
128781 +# else
128782 /* Check if vfork syscall is known at all. */
128783 ldr a2, =-ENOSYS
128784 teq a1, a2
128785 bne PLTJMP(C_SYMBOL_NAME(__syscall_error))
128786 +# endif
128787 #endif
128789 +#ifndef __ASSUME_VFORK_SYSCALL
128790 /* If we don't have vfork, fork is close enough. */
128791 swi __NR_fork
128792 cmn a1, #4096
128793 RETINSTR(movcc, pc, lr)
128794 b PLTJMP(C_SYMBOL_NAME(__syscall_error))
128795 +#endif
128797 PSEUDO_END (__vfork)
128798 libc_hidden_def (__vfork)
128799 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/bits/posix_opt.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/bits/posix_opt.h
128800 --- glibc-2.3.2/sysdeps/unix/sysv/linux/bits/posix_opt.h Fri Nov 29 02:32:18 2002
128801 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/bits/posix_opt.h Mon Mar 3 05:52:01 2003
128802 @@ -1,5 +1,5 @@
128803 /* Define POSIX options for Linux.
128804 - Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
128805 + Copyright (C) 1996,1997,1999,2000,2002,2003 Free Software Foundation, Inc.
128806 This file is part of the GNU C Library.
128808 The GNU C Library is free software; you can redistribute it and/or
128809 @@ -89,5 +89,8 @@
128811 /* The `spawn' function family is supported. */
128812 #define _POSIX_SPAWN 200112L
128814 +/* The monotonic clock might be available. */
128815 +#define _POSIX_MONOTONIC_CLOCK 0
128817 #endif /* bits/posix_opt.h */
128818 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/bits/siginfo.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/bits/siginfo.h
128819 --- glibc-2.3.2/sysdeps/unix/sysv/linux/bits/siginfo.h Thu Dec 5 01:09:55 2002
128820 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/bits/siginfo.h Thu Mar 27 00:41:57 2003
128821 @@ -1,5 +1,5 @@
128822 /* siginfo_t, sigevent and constants. Linux version.
128823 - Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
128824 + Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
128825 This file is part of the GNU C Library.
128827 The GNU C Library is free software; you can redistribute it and/or
128828 @@ -69,8 +69,9 @@
128829 /* POSIX.1b timers. */
128830 struct
128832 - unsigned int _timer1;
128833 - unsigned int _timer2;
128834 + int si_tid; /* Timer ID. */
128835 + int si_overrun; /* Overrun count. */
128836 + sigval_t si_sigval; /* Signal value. */
128837 } _timer;
128839 /* POSIX.1b signals. */
128840 @@ -110,8 +111,8 @@
128841 /* X/Open requires some more fields with fixed names. */
128842 # define si_pid _sifields._kill.si_pid
128843 # define si_uid _sifields._kill.si_uid
128844 -# define si_timer1 _sifields._timer._timer1
128845 -# define si_timer2 _sifields._timer._timer2
128846 +# define si_timerid _sifields._timer.si_tid
128847 +# define si_overrun _sifields._timer.si_overrun
128848 # define si_status _sifields._sigchld.si_status
128849 # define si_utime _sifields._sigchld.si_utime
128850 # define si_stime _sifields._sigchld.si_stime
128851 @@ -267,9 +268,6 @@
128852 # define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
128853 # endif
128855 -/* Forward declaration of the `pthread_attr_t' type. */
128856 -struct __pthread_attr_s;
128858 typedef struct sigevent
128860 sigval_t sigev_value;
128861 @@ -280,6 +278,10 @@
128863 int _pad[__SIGEV_PAD_SIZE];
128865 + /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
128866 + thread to receive the signal. */
128867 + __pid_t _tid;
128869 struct
128871 void (*_function) (sigval_t); /* Function to start. */
128872 @@ -299,8 +301,11 @@
128873 # define SIGEV_SIGNAL SIGEV_SIGNAL
128874 SIGEV_NONE, /* Other notification: meaningless. */
128875 # define SIGEV_NONE SIGEV_NONE
128876 - SIGEV_THREAD /* Deliver via thread creation. */
128877 + SIGEV_THREAD, /* Deliver via thread creation. */
128878 # define SIGEV_THREAD SIGEV_THREAD
128880 + SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */
128881 +#define SIGEV_THREAD_ID SIGEV_THREAD_ID
128884 #endif /* have _SIGNAL_H. */
128885 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/bits/signum.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/bits/signum.h
128886 --- glibc-2.3.2/sysdeps/unix/sysv/linux/bits/signum.h Sat Feb 22 01:01:06 2003
128887 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/bits/signum.h Tue Apr 1 07:51:57 2003
128888 @@ -66,7 +66,7 @@
128889 #define SIGSYS 31 /* Bad system call. */
128890 #define SIGUNUSED 31
128892 -#define _NSIG 64 /* Biggest signal number + 1
128893 +#define _NSIG 65 /* Biggest signal number + 1
128894 (including real-time signals). */
128896 #define SIGRTMIN (__libc_current_sigrtmin ())
128897 @@ -75,6 +75,6 @@
128898 /* These are the hard limits of the kernel. These values should not be
128899 used directly at user level. */
128900 #define __SIGRTMIN 32
128901 -#define __SIGRTMAX _NSIG
128902 +#define __SIGRTMAX (_NSIG - 1)
128904 #endif /* <signal.h> included. */
128905 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/clock_getres.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/clock_getres.c
128906 --- glibc-2.3.2/sysdeps/unix/sysv/linux/clock_getres.c Thu Jan 1 01:00:00 1970
128907 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/clock_getres.c Mon Mar 3 05:48:47 2003
128908 @@ -0,0 +1,76 @@
128909 +/* Copyright (C) 2003 Free Software Foundation, Inc.
128910 + This file is part of the GNU C Library.
128912 + The GNU C Library is free software; you can redistribute it and/or
128913 + modify it under the terms of the GNU Lesser General Public
128914 + License as published by the Free Software Foundation; either
128915 + version 2.1 of the License, or (at your option) any later version.
128917 + The GNU C Library is distributed in the hope that it will be useful,
128918 + but WITHOUT ANY WARRANTY; without even the implied warranty of
128919 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
128920 + Lesser General Public License for more details.
128922 + You should have received a copy of the GNU Lesser General Public
128923 + License along with the GNU C Library; if not, write to the Free
128924 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
128925 + 02111-1307 USA. */
128927 +#include <sysdep.h>
128929 +#include "kernel-features.h"
128932 +#ifdef __ASSUME_POSIX_TIMERS
128933 +/* This means the REALTIME and MONOTONIC clock are definitely
128934 + supported in the kernel. */
128935 +# define SYSDEP_GETRES \
128936 + case CLOCK_REALTIME: \
128937 + case CLOCK_MONOTONIC: \
128938 + retval = INLINE_SYSCALL (clock_getres, 2, clock_id, res); \
128939 + break
128940 +#elif defined __NR_clock_getres
128941 +/* Is the syscall known to exist? */
128942 +extern int __libc_missing_posix_timers attribute_hidden;
128944 +/* The REALTIME and MONOTONIC clock might be available. Try the
128945 + syscall first. */
128946 +# define SYSDEP_GETRES \
128947 + case CLOCK_REALTIME: \
128948 + case CLOCK_MONOTONIC: \
128949 + { \
128950 + int e = EINVAL; \
128952 + if (!__libc_missing_posix_timers) \
128953 + { \
128954 + INTERNAL_SYSCALL_DECL (err); \
128955 + int r = INTERNAL_SYSCALL (clock_getres, err, 2, clock_id, res); \
128956 + if (!INTERNAL_SYSCALL_ERROR_P (r, err)) \
128957 + { \
128958 + retval = 0; \
128959 + break; \
128960 + } \
128962 + e = INTERNAL_SYSCALL_ERRNO (r, err); \
128963 + if (e == ENOSYS) \
128964 + { \
128965 + __libc_missing_posix_timers = 1; \
128966 + e = EINVAL; \
128967 + } \
128968 + } \
128970 + /* Fallback code. */ \
128971 + if (e == EINVAL && clock_id == CLOCK_REALTIME) \
128972 + HANDLE_REALTIME; \
128973 + else \
128974 + __set_errno (e); \
128975 + } \
128976 + break
128977 +#endif
128979 +#ifdef __NR_clock_getres
128980 +/* We handled the REALTIME clock here. */
128981 +# define HANDLED_REALTIME 1
128982 +#endif
128984 +#include <sysdeps/posix/clock_getres.c>
128985 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/clock_gettime.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/clock_gettime.c
128986 --- glibc-2.3.2/sysdeps/unix/sysv/linux/clock_gettime.c Thu Jan 1 01:00:00 1970
128987 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/clock_gettime.c Mon Mar 3 05:49:06 2003
128988 @@ -0,0 +1,76 @@
128989 +/* Copyright (C) 2003 Free Software Foundation, Inc.
128990 + This file is part of the GNU C Library.
128992 + The GNU C Library is free software; you can redistribute it and/or
128993 + modify it under the terms of the GNU Lesser General Public
128994 + License as published by the Free Software Foundation; either
128995 + version 2.1 of the License, or (at your option) any later version.
128997 + The GNU C Library is distributed in the hope that it will be useful,
128998 + but WITHOUT ANY WARRANTY; without even the implied warranty of
128999 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
129000 + Lesser General Public License for more details.
129002 + You should have received a copy of the GNU Lesser General Public
129003 + License along with the GNU C Library; if not, write to the Free
129004 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
129005 + 02111-1307 USA. */
129007 +#include <sysdep.h>
129009 +#include "kernel-features.h"
129012 +#ifdef __ASSUME_POSIX_TIMERS
129013 +/* This means the REALTIME and MONOTONIC clock are definitely
129014 + supported in the kernel. */
129015 +# define SYSDEP_GETTIME \
129016 + case CLOCK_REALTIME: \
129017 + case CLOCK_MONOTONIC: \
129018 + retval = INLINE_SYSCALL (clock_gettime, 2, clock_id, tp); \
129019 + break
129020 +#elif defined __NR_clock_gettime
129021 +/* Is the syscall known to exist? */
129022 +int __libc_missing_posix_timers attribute_hidden;
129024 +/* The REALTIME and MONOTONIC clock might be available. Try the
129025 + syscall first. */
129026 +# define SYSDEP_GETTIME \
129027 + case CLOCK_REALTIME: \
129028 + case CLOCK_MONOTONIC: \
129029 + { \
129030 + int e = EINVAL; \
129032 + if (!__libc_missing_posix_timers) \
129033 + { \
129034 + INTERNAL_SYSCALL_DECL (err); \
129035 + int r = INTERNAL_SYSCALL (clock_gettime, err, 2, clock_id, tp); \
129036 + if (!INTERNAL_SYSCALL_ERROR_P (r, err)) \
129037 + { \
129038 + retval = 0; \
129039 + break; \
129040 + } \
129042 + e = INTERNAL_SYSCALL_ERRNO (r, err); \
129043 + if (e == ENOSYS) \
129044 + { \
129045 + __libc_missing_posix_timers = 1; \
129046 + e = EINVAL; \
129047 + } \
129048 + } \
129050 + /* Fallback code. */ \
129051 + if (e == EINVAL && clock_id == CLOCK_REALTIME) \
129052 + HANDLE_REALTIME; \
129053 + else \
129054 + __set_errno (e); \
129055 + } \
129056 + break
129057 +#endif
129059 +#ifdef __NR_clock_gettime
129060 +/* We handled the REALTIME clock here. */
129061 +# define HANDLED_REALTIME 1
129062 +#endif
129064 +#include <sysdeps/unix/clock_gettime.c>
129065 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/clock_nanosleep.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/clock_nanosleep.c
129066 --- glibc-2.3.2/sysdeps/unix/sysv/linux/clock_nanosleep.c Thu Jan 1 01:00:00 1970
129067 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/clock_nanosleep.c Mon Mar 3 05:49:43 2003
129068 @@ -0,0 +1,65 @@
129069 +/* Copyright (C) 2003 Free Software Foundation, Inc.
129070 + This file is part of the GNU C Library.
129072 + The GNU C Library is free software; you can redistribute it and/or
129073 + modify it under the terms of the GNU Lesser General Public
129074 + License as published by the Free Software Foundation; either
129075 + version 2.1 of the License, or (at your option) any later version.
129077 + The GNU C Library is distributed in the hope that it will be useful,
129078 + but WITHOUT ANY WARRANTY; without even the implied warranty of
129079 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
129080 + Lesser General Public License for more details.
129082 + You should have received a copy of the GNU Lesser General Public
129083 + License along with the GNU C Library; if not, write to the Free
129084 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
129085 + 02111-1307 USA. */
129087 +#include <time.h>
129089 +#include <sysdep.h>
129090 +#include "kernel-features.h"
129093 +#ifdef __ASSUME_POSIX_TIMERS
129094 +/* We can simply use the syscall. The CPU clocks are not supported
129095 + with this function. */
129097 +clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
129098 + struct timespec *rem)
129100 + INTERNAL_SYSCALL_DECL (err);
129101 + int r;
129103 + r = INTERNAL_SYSCALL (clock_nanosleep, err, 4, clock_id, flags, req, rem);
129104 + return (INTERNAL_SYSCALL_ERROR_P (r, err)
129105 + ? INTERNAL_SYSCALL_ERRNO (r, err) : 0);
129108 +#else
129109 +# ifdef __NR_clock_nanosleep
129110 +/* Is the syscall known to exist? */
129111 +extern int __libc_missing_posix_timers attribute_hidden;
129113 +/* The REALTIME and MONOTONIC clock might be available. Try the
129114 + syscall first. */
129115 +# define SYSDEP_NANOSLEEP \
129116 + if (!__libc_missing_posix_timers) \
129117 + { \
129118 + INTERNAL_SYSCALL_DECL (err); \
129119 + int r = INTERNAL_SYSCALL (clock_nanosleep, err, 4, clock_id, flags, \
129120 + req, rem); \
129122 + if (!INTERNAL_SYSCALL_ERROR_P (r, err)) \
129123 + return 0; \
129125 + if (INTERNAL_SYSCALL_ERRNO (r, err) != ENOSYS) \
129126 + return INTERNAL_SYSCALL_ERRNO (r, err); \
129128 + __libc_missing_posix_timers = 1; \
129130 +# endif
129132 +# include <sysdeps/unix/clock_nanosleep.c>
129133 +#endif
129134 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/clock_settime.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/clock_settime.c
129135 --- glibc-2.3.2/sysdeps/unix/sysv/linux/clock_settime.c Thu Jan 1 01:00:00 1970
129136 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/clock_settime.c Mon Mar 3 05:49:24 2003
129137 @@ -0,0 +1,73 @@
129138 +/* Copyright (C) 2003 Free Software Foundation, Inc.
129139 + This file is part of the GNU C Library.
129141 + The GNU C Library is free software; you can redistribute it and/or
129142 + modify it under the terms of the GNU Lesser General Public
129143 + License as published by the Free Software Foundation; either
129144 + version 2.1 of the License, or (at your option) any later version.
129146 + The GNU C Library is distributed in the hope that it will be useful,
129147 + but WITHOUT ANY WARRANTY; without even the implied warranty of
129148 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
129149 + Lesser General Public License for more details.
129151 + You should have received a copy of the GNU Lesser General Public
129152 + License along with the GNU C Library; if not, write to the Free
129153 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
129154 + 02111-1307 USA. */
129156 +#include <sysdep.h>
129158 +#include "kernel-features.h"
129161 +#ifdef __ASSUME_POSIX_TIMERS
129162 +/* This means the REALTIME clock is definitely supported in the
129163 + kernel. */
129164 +# define SYSDEP_SETTIME \
129165 + case CLOCK_REALTIME: \
129166 + retval = INLINE_SYSCALL (clock_settime, 2, clock_id, tp); \
129167 + break
129168 +#elif defined __NR_clock_settime
129169 +/* Is the syscall known to exist? */
129170 +extern int __libc_missing_posix_timers attribute_hidden;
129172 +/* The REALTIME clock might be available. Try the syscall first. */
129173 +# define SYSDEP_SETTIME \
129174 + case CLOCK_REALTIME: \
129175 + { \
129176 + int e = EINVAL; \
129178 + if (!__libc_missing_posix_timers) \
129179 + { \
129180 + INTERNAL_SYSCALL_DECL (err); \
129181 + int r = INTERNAL_SYSCALL (clock_settime, err, 2, clock_id, tp); \
129182 + if (!INTERNAL_SYSCALL_ERROR_P (r, err)) \
129183 + { \
129184 + retval = 0; \
129185 + break; \
129186 + } \
129188 + e = INTERNAL_SYSCALL_ERRNO (r, err); \
129189 + if (e == ENOSYS) \
129190 + { \
129191 + __libc_missing_posix_timers = 1; \
129192 + e = EINVAL; \
129193 + } \
129194 + } \
129196 + /* Fallback code. */ \
129197 + if (e == EINVAL && clock_id == CLOCK_REALTIME) \
129198 + HANDLE_REALTIME; \
129199 + else \
129200 + __set_errno (e); \
129201 + } \
129202 + break
129203 +#endif
129205 +#ifdef __NR_clock_settime
129206 +/* We handled the REALTIME clock here. */
129207 +# define HANDLED_REALTIME 1
129208 +#endif
129210 +#include <sysdeps/unix/clock_settime.c>
129211 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/configure glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/configure
129212 --- glibc-2.3.2/sysdeps/unix/sysv/linux/configure Wed Feb 26 02:07:12 2003
129213 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/configure Sun Mar 23 03:10:04 2003
129214 @@ -44,7 +44,11 @@
129216 cat >conftest.$ac_ext <<_ACEOF
129217 #line $LINENO "configure"
129218 -#include "confdefs.h"
129219 +/* confdefs.h. */
129220 +_ACEOF
129221 +cat confdefs.h >>conftest.$ac_ext
129222 +cat >>conftest.$ac_ext <<_ACEOF
129223 +/* end confdefs.h. */
129224 #include <linux/version.h>
129225 #if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < (2 *65536+ 0 *256+ 10) /* 2.0.10 */
129226 eat flaming death
129227 @@ -165,7 +169,11 @@
129228 abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
129229 cat >conftest.$ac_ext <<_ACEOF
129230 #line $LINENO "configure"
129231 -#include "confdefs.h"
129232 +/* confdefs.h. */
129233 +_ACEOF
129234 +cat confdefs.h >>conftest.$ac_ext
129235 +cat >>conftest.$ac_ext <<_ACEOF
129236 +/* end confdefs.h. */
129237 #include <linux/version.h>
129238 #if LINUX_VERSION_CODE < $decnum
129239 eat flaming death
129240 @@ -216,7 +224,8 @@
129241 /usr | /usr/)
129242 # 64-bit libraries on bi-arch platforms go in /lib64 instead of /lib
129243 case $machine in
129244 - sparc/sparc64 | x86_64 | powerpc/powerpc64 | s390/s390-64 )
129245 + sparc/sparc64 | x86_64 | powerpc/powerpc64 | s390/s390-64 | \
129246 + mips/mips64/n64/* )
129247 libc_cv_slibdir="/lib64"
129248 if test "$libdir" = '${exec_prefix}/lib'; then
129249 libdir='${exec_prefix}/lib64';
129250 @@ -224,6 +233,14 @@
129251 libc_cv_localedir='${exec_prefix}/lib/locale'
129254 + mips/mips64/n32/* )
129255 + libc_cv_slibdir="/lib32"
129256 + if test "$libdir" = '${exec_prefix}/lib'; then
129257 + libdir='${exec_prefix}/lib32';
129258 + # Locale data can be shared between 32bit and 64bit libraries
129259 + libc_cv_localedir='${exec_prefix}/lib/locale'
129263 libc_cv_slibdir="/lib"
129265 @@ -302,6 +319,9 @@
129267 ia64*)
129268 ldd_rewrite_script=../sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed
129270 + mips/*64*)
129271 + ldd_rewrite_script=../sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed
129273 s390*)
129274 ldd_rewrite_script=../sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed
129275 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/configure.in glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/configure.in
129276 --- glibc-2.3.2/sysdeps/unix/sysv/linux/configure.in Sat Feb 1 21:22:36 2003
129277 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/configure.in Sun Mar 23 03:10:04 2003
129278 @@ -157,7 +157,8 @@
129279 /usr | /usr/)
129280 # 64-bit libraries on bi-arch platforms go in /lib64 instead of /lib
129281 case $machine in
129282 - sparc/sparc64 | x86_64 | powerpc/powerpc64 | s390/s390-64 )
129283 + sparc/sparc64 | x86_64 | powerpc/powerpc64 | s390/s390-64 | \
129284 + mips/mips64/n64/* )
129285 libc_cv_slibdir="/lib64"
129286 if test "$libdir" = '${exec_prefix}/lib'; then
129287 libdir='${exec_prefix}/lib64';
129288 @@ -165,6 +166,14 @@
129289 libc_cv_localedir='${exec_prefix}/lib/locale'
129292 + mips/mips64/n32/* )
129293 + libc_cv_slibdir="/lib32"
129294 + if test "$libdir" = '${exec_prefix}/lib'; then
129295 + libdir='${exec_prefix}/lib32';
129296 + # Locale data can be shared between 32bit and 64bit libraries
129297 + libc_cv_localedir='${exec_prefix}/lib/locale'
129301 libc_cv_slibdir="/lib"
129303 @@ -243,6 +252,9 @@
129305 ia64*)
129306 ldd_rewrite_script=../sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed
129308 + mips/*64*)
129309 + ldd_rewrite_script=../sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed
129311 s390*)
129312 ldd_rewrite_script=../sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed
129313 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/cris/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/cris/sysdep.h
129314 --- glibc-2.3.2/sysdeps/unix/sysv/linux/cris/sysdep.h Sat Jul 7 21:21:34 2001
129315 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/cris/sysdep.h Sun Mar 23 20:42:22 2003
129316 @@ -1,5 +1,5 @@
129317 /* Assembler macros for CRIS.
129318 - Copyright (C) 1999, 2001 Free Software Foundation, Inc.
129319 + Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc.
129320 This file is part of the GNU C Library.
129322 The GNU C Library is free software; you can redistribute it and/or
129323 @@ -104,6 +104,18 @@
129324 0: @ \
129325 SETUP_PIC @ \
129326 PLTJUMP (syscall_error) @ \
129327 + END (name)
129329 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
129330 + ENTRY (name) @ \
129331 + DOARGS_##args @ \
129332 + movu.w SYS_ify (syscall_name),$r9 @ \
129333 + break 13 @ \
129334 + UNDOARGS_return_##args
129336 +#define ret_NOERRNO
129338 +#define PSEUDO_END_NOERRNO(name) \
129339 END (name)
129341 #define DOARGS_0
129342 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/fpathconf.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/fpathconf.c
129343 --- glibc-2.3.2/sysdeps/unix/sysv/linux/fpathconf.c Wed Oct 23 08:21:19 2002
129344 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/fpathconf.c Fri Mar 14 07:22:16 2003
129345 @@ -1,5 +1,5 @@
129346 /* Get file-specific information about descriptor FD. Linux version.
129347 - Copyright (C) 1991,95,96,98,99,2000,2001,2002 Free Software Foundation, Inc.
129348 + Copyright (C) 1991,1995,1996,1998-2002,2003 Free Software Foundation, Inc.
129349 This file is part of the GNU C Library.
129351 The GNU C Library is free software; you can redistribute it and/or
129352 @@ -38,8 +38,13 @@
129354 case _PC_LINK_MAX:
129355 return statfs_link_max (__fstatfs (fd, &fsbuf), &fsbuf);
129357 case _PC_FILESIZEBITS:
129358 return statfs_filesize_max (__fstatfs (fd, &fsbuf), &fsbuf);
129360 + case _PC_2_SYMLINKS:
129361 + return statfs_symlinks (__fstatfs (fd, &fsbuf), &fsbuf);
129363 default:
129364 return posix_fpathconf (fd, name);
129366 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/getsysstats.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/getsysstats.c
129367 --- glibc-2.3.2/sysdeps/unix/sysv/linux/getsysstats.c Sat Nov 2 03:16:02 2002
129368 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/getsysstats.c Fri Mar 21 08:45:55 2003
129369 @@ -1,5 +1,5 @@
129370 /* Determine various system internal values, Linux version.
129371 - Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
129372 + Copyright (C) 1996-2001, 2002, 2003 Free Software Foundation, Inc.
129373 This file is part of the GNU C Library.
129374 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
129376 @@ -31,7 +31,7 @@
129377 #include <unistd.h>
129378 #include <sys/sysinfo.h>
129380 -#include <atomicity.h>
129381 +#include <atomic.h>
129384 /* The default value for the /proc filesystem mount point. */
129385 @@ -85,8 +85,7 @@
129387 /* Now store the copied value. But do it atomically. */
129388 assert (sizeof (long int) == sizeof (void *__unbounded));
129389 - if (compare_and_swap ((long int *) &mount_proc, (long int) 0,
129390 - (long int) copy_result) == 0)
129391 + if (! atomic_compare_and_exchange_bool_acq (&mount_proc, copy_result, NULL))
129392 /* Replacing the value failed. This means another thread was
129393 faster and we don't need the copy anymore. */
129394 free (copy_result);
129395 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/hppa/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/hppa/bits/mman.h
129396 --- glibc-2.3.2/sysdeps/unix/sysv/linux/hppa/bits/mman.h Sun Oct 15 05:12:00 2000
129397 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/hppa/bits/mman.h Mon Mar 3 10:53:18 2003
129398 @@ -1,4 +1,21 @@
129399 -/* Definitions for POSIX memory map interface. Insert rest of disclaimer here */
129400 +/* Definitions for POSIX memory map interface. Linux/HPPA version.
129401 + Copyright (C) 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
129402 + This file is part of the GNU C Library.
129404 + The GNU C Library is free software; you can redistribute it and/or
129405 + modify it under the terms of the GNU Lesser General Public
129406 + License as published by the Free Software Foundation; either
129407 + version 2.1 of the License, or (at your option) any later version.
129409 + The GNU C Library is distributed in the hope that it will be useful,
129410 + but WITHOUT ANY WARRANTY; without even the implied warranty of
129411 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
129412 + Lesser General Public License for more details.
129414 + You should have received a copy of the GNU Lesser General Public
129415 + License along with the GNU C Library; if not, write to the Free
129416 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
129417 + 02111-1307 USA. */
129419 #ifndef _SYS_MMAN_H
129420 # error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
129421 @@ -22,6 +39,8 @@
129422 #define MAP_LOCKED 0x2000 /* pages are locked */
129423 #define MAP_NORESERVE 0x4000 /* don't check for reservations */
129424 #define MAP_GROWSDOWN 0x8000 /* stack-like segment */
129425 +#define MAP_POPULATE 0x10000 /* populate (prefault) pagetables */
129426 +#define MAP_NONBLOCK 0x20000 /* do not block on IO */
129428 #define MS_SYNC 1 /* synchronous memory sync */
129429 #define MS_ASYNC 2 /* sync memory asynchronously */
129430 @@ -58,4 +77,3 @@
129431 #ifdef __USE_GNU
129432 # define MREMAP_MAYMOVE 1
129433 #endif
129435 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/hppa/bits/signum.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/hppa/bits/signum.h
129436 --- glibc-2.3.2/sysdeps/unix/sysv/linux/hppa/bits/signum.h Sat Jul 7 21:21:34 2001
129437 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/hppa/bits/signum.h Tue Apr 1 08:16:53 2003
129438 @@ -1,5 +1,5 @@
129439 /* Signal number definitions. Linux/HPPA version.
129440 - Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
129441 + Copyright (C) 1995,1996,1997,1998,1999,2003 Free Software Foundation, Inc.
129442 This file is part of the GNU C Library.
129444 The GNU C Library is free software; you can redistribute it and/or
129445 @@ -68,7 +68,7 @@
129446 #define SIGXFSZ 34 /* File size limit exceeded (4.2 BSD). */
129447 #define SIGSTKFLT 36 /* Stack fault. */
129449 -#define _NSIG 64 /* Biggest signal number + 1
129450 +#define _NSIG 65 /* Biggest signal number + 1
129451 (including real-time signals). */
129453 #define SIGRTMIN (__libc_current_sigrtmin ())
129454 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/hppa/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/hppa/sysdep.h
129455 --- glibc-2.3.2/sysdeps/unix/sysv/linux/hppa/sysdep.h Mon Aug 26 23:16:19 2002
129456 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/hppa/sysdep.h Sun Mar 23 20:42:22 2003
129457 @@ -1,5 +1,5 @@
129458 /* Assembler macros for PA-RISC.
129459 - Copyright (C) 1999,2001,02 Free Software Foundation, Inc.
129460 + Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
129461 This file is part of the GNU C Library.
129462 Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999.
129463 Linux/PA-RISC changes by Philipp Rumpf, <prumpf@tux.org>, March 2000.
129464 @@ -84,6 +84,10 @@
129465 bv 0(2) ASM_LINE_SEP \
129468 +#define ret_NOERRNO \
129469 + bv 0(2) ASM_LINE_SEP \
129470 + nop
129472 #undef END
129473 #define END(name) \
129474 1: .size C_SYMBOL_NAME(name),1b-C_SYMBOL_NAME(name)
129475 @@ -113,6 +117,15 @@
129477 #undef PSEUDO_END
129478 #define PSEUDO_END(name) \
129479 + END (name)
129481 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
129482 + ENTRY (name) \
129483 + DO_CALL(syscall_name, args) ASM_LINE_SEP \
129484 + nop
129486 +#undef PSEUDO_END_NOERRNO
129487 +#define PSEUDO_END_NOERRNO(name) \
129488 END (name)
129490 #define JUMPTARGET(name) name
129491 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/i386/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/bits/mman.h
129492 --- glibc-2.3.2/sysdeps/unix/sysv/linux/i386/bits/mman.h Sat Jul 7 21:21:34 2001
129493 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/bits/mman.h Mon Mar 3 10:15:57 2003
129494 @@ -1,5 +1,5 @@
129495 /* Definitions for POSIX memory map interface. Linux/i386 version.
129496 - Copyright (C) 1997, 2000 Free Software Foundation, Inc.
129497 + Copyright (C) 1997, 2000, 2003 Free Software Foundation, Inc.
129498 This file is part of the GNU C Library.
129500 The GNU C Library is free software; you can redistribute it and/or
129501 @@ -52,11 +52,13 @@
129503 /* These are Linux-specific. */
129504 #ifdef __USE_MISC
129505 -# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
129506 -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
129507 -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
129508 -# define MAP_LOCKED 0x2000 /* Lock the mapping. */
129509 -# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
129510 +# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
129511 +# define MAP_DENYWRITE 0x00800 /* ETXTBSY */
129512 +# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
129513 +# define MAP_LOCKED 0x02000 /* Lock the mapping. */
129514 +# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
129515 +# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
129516 +# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
129517 #endif
129519 /* Flags to `msync'. */
129520 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/i386/chown.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/chown.c
129521 --- glibc-2.3.2/sysdeps/unix/sysv/linux/i386/chown.c Fri Aug 2 23:46:59 2002
129522 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/chown.c Wed Mar 26 04:44:17 2003
129523 @@ -148,20 +148,15 @@
129524 #endif
129526 #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
129527 -strong_alias (__chown_is_lchown, _chown_is_lchown)
129528 -compat_symbol (libc, __chown_is_lchown, __chown, GLIBC_2_0);
129529 -compat_symbol (libc, _chown_is_lchown, chown, GLIBC_2_0);
129530 +compat_symbol (libc, __chown_is_lchown, chown, GLIBC_2_0);
129531 #endif
129533 #ifdef __NR_lchown
129534 -strong_alias (__real_chown, _real_chown)
129535 -versioned_symbol (libc, __real_chown, __chown, GLIBC_2_1);
129536 -versioned_symbol (libc, _real_chown, chown, GLIBC_2_1);
129537 -libc_hidden_ver (__real_chown, __chown)
129538 +versioned_symbol (libc, __real_chown, chown, GLIBC_2_1);
129539 +strong_alias (__real_chown, __chown)
129540 #else
129541 strong_alias (__chown_is_lchown, __chown_is_lchown21)
129542 -strong_alias (__chown_is_lchown, _chown_is_lchown21)
129543 -versioned_symbol (libc, __chown_is_lchown21, __chown, GLIBC_2_1);
129544 -versioned_symbol (libc, _chown_is_lchown21, chown, GLIBC_2_1);
129545 -libc_hidden_ver (__chown_is_lchown, __chown)
129546 +versioned_symbol (libc, __chown_is_lchown21, chown, GLIBC_2_1);
129547 +strong_alias (__chown_is_lchown, __chown)
129548 #endif
129549 +libc_hidden_def (__chown)
129550 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/i386/clone.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/clone.S
129551 --- glibc-2.3.2/sysdeps/unix/sysv/linux/i386/clone.S Fri Nov 22 00:59:20 2002
129552 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/clone.S Tue Mar 11 10:30:18 2003
129553 @@ -1,4 +1,4 @@
129554 -/* Copyright (C) 1996, 1997,98,99,2000,02 Free Software Foundation, Inc.
129555 +/* Copyright (C) 1996,1997,98,99,2000,02,03 Free Software Foundation, Inc.
129556 This file is part of the GNU C Library.
129557 Contributed by Richard Henderson (rth@tamu.edu)
129559 @@ -28,7 +28,7 @@
129560 #include <bp-asm.h>
129562 /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
129563 - pid_t *tid, struct user_desc *tls); */
129564 + pid_t *ptid, struct user_desc *tls, pid_t *ctid); */
129566 #define PARMS LINKAGE /* no space for saved regs */
129567 #define FUNC PARMS
129568 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/i386/getgroups.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/getgroups.c
129569 --- glibc-2.3.2/sysdeps/unix/sysv/linux/i386/getgroups.c Sat Jul 7 21:21:34 2001
129570 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/getgroups.c Wed Mar 26 19:15:57 2003
129571 @@ -1,4 +1,4 @@
129572 -/* Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
129573 +/* Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
129574 This file is part of the GNU C Library.
129576 The GNU C Library is free software; you can redistribute it and/or
129577 @@ -36,7 +36,7 @@
129578 # if __ASSUME_32BITUIDS == 0
129579 /* This variable is shared with all files that need to check for 32bit
129580 uids. */
129581 -extern int __libc_missing_32bit_uids;
129582 +extern int __libc_missing_32bit_uids attribute_hidden;
129583 # endif
129584 #endif /* __NR_getgroups32 */
129586 @@ -64,7 +64,7 @@
129587 int saved_errno = errno;
129589 result = INLINE_SYSCALL (getgroups32, 2, n, CHECK_N (groups, n));
129590 - if (result == 0 || errno != ENOSYS)
129591 + if (result != -1 || errno != ENOSYS)
129592 return result;
129594 __set_errno (saved_errno);
129595 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/i386/setfsgid.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/setfsgid.c
129596 --- glibc-2.3.2/sysdeps/unix/sysv/linux/i386/setfsgid.c Sat Jul 7 21:21:34 2001
129597 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/setfsgid.c Thu Mar 27 10:47:49 2003
129598 @@ -1,4 +1,4 @@
129599 -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
129600 +/* Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
129601 This file is part of the GNU C Library.
129603 The GNU C Library is free software; you can redistribute it and/or
129604 @@ -35,27 +35,28 @@
129605 # if __ASSUME_32BITUIDS == 0
129606 /* This variable is shared with all files that need to check for 32bit
129607 uids. */
129608 -extern int __libc_missing_32bit_uids;
129609 +extern int __libc_missing_32bit_uids attribute_hidden;
129610 # endif
129611 # endif /* __NR_setfsgid32 */
129614 setfsgid (gid_t gid)
129616 + INTERNAL_SYSCALL_DECL (err);
129617 # if __ASSUME_32BITUIDS > 0
129618 - return INLINE_SYSCALL (setfsgid32, 1, gid);
129619 + /* No error checking. */
129620 + return INTERNAL_SYSCALL (setfsgid32, err, 1, gid);
129621 # else
129622 # ifdef __NR_setfsgid32
129623 if (__libc_missing_32bit_uids <= 0)
129625 int result;
129626 - int saved_errno = errno;
129628 - result = INLINE_SYSCALL (setfsgid32, 1, gid);
129629 - if (result == 0 || errno != ENOSYS)
129630 + result = INTERNAL_SYSCALL (setfsgid32, err, 1, gid);
129631 + if (! INTERNAL_SYSCALL_ERROR_P (result, err)
129632 + || INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS)
129633 return result;
129635 - __set_errno (saved_errno);
129636 __libc_missing_32bit_uids = 1;
129638 # endif /* __NR_setfsgid32 */
129639 @@ -65,7 +66,8 @@
129640 return -1;
129643 - return INLINE_SYSCALL (setfsgid, 1, gid);
129644 + /* No error checking. */
129645 + return INTERNAL_SYSCALL (setfsgid, err, 1, gid);
129646 # endif
129648 #endif
129649 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/i386/setfsuid.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/setfsuid.c
129650 --- glibc-2.3.2/sysdeps/unix/sysv/linux/i386/setfsuid.c Sat Jul 7 21:21:34 2001
129651 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/setfsuid.c Thu Mar 27 10:47:49 2003
129652 @@ -1,4 +1,4 @@
129653 -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
129654 +/* Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
129655 This file is part of the GNU C Library.
129657 The GNU C Library is free software; you can redistribute it and/or
129658 @@ -35,27 +35,28 @@
129659 # if __ASSUME_32BITUIDS == 0
129660 /* This variable is shared with all files that need to check for 32bit
129661 uids. */
129662 -extern int __libc_missing_32bit_uids;
129663 +extern int __libc_missing_32bit_uids attribute_hidden;
129664 # endif
129665 # endif /* __NR_setfsuid32 */
129668 setfsuid (uid_t uid)
129670 + INTERNAL_SYSCALL_DECL (err);
129671 # if __ASSUME_32BITUIDS > 0
129672 - return INLINE_SYSCALL (setfsuid32, 1, uid);
129673 + /* No error checking. */
129674 + return INTERNAL_SYSCALL (setfsuid32, err, 1, uid);
129675 # else
129676 # ifdef __NR_setfsuid32
129677 if (__libc_missing_32bit_uids <= 0)
129679 int result;
129680 - int saved_errno = errno;
129682 - result = INLINE_SYSCALL (setfsuid32, 1, uid);
129683 - if (result == 0 || errno != ENOSYS)
129684 + result = INTERNAL_SYSCALL (setfsuid32, err, 1, uid);
129685 + if (! INTERNAL_SYSCALL_ERROR_P (result, err)
129686 + || INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS)
129687 return result;
129689 - __set_errno (saved_errno);
129690 __libc_missing_32bit_uids = 1;
129692 # endif /* __NR_setfsuid32 */
129693 @@ -66,7 +67,8 @@
129694 return -1;
129697 - return INLINE_SYSCALL (setfsuid, 1, uid);
129698 + /* No error checking. */
129699 + return INTERNAL_SYSCALL (setfsuid, err, 1, uid);
129700 # endif
129702 #endif
129703 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/i386/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/sysdep.h
129704 --- glibc-2.3.2/sysdeps/unix/sysv/linux/i386/sysdep.h Thu Jan 9 03:54:57 2003
129705 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/sysdep.h Sun Mar 23 20:42:23 2003
129706 @@ -78,6 +78,18 @@
129707 SYSCALL_ERROR_HANDLER \
129708 END (name)
129710 +#undef PSEUDO_NOERRNO
129711 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
129712 + .text; \
129713 + ENTRY (name) \
129714 + DO_CALL (syscall_name, args)
129716 +#undef PSEUDO_END_NOERRNO
129717 +#define PSEUDO_END_NOERRNO(name) \
129718 + END (name)
129720 +#define ret_NOERRNO ret
129722 #ifndef PIC
129723 # define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
129724 #else
129725 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/i386/system.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/system.c
129726 --- glibc-2.3.2/sysdeps/unix/sysv/linux/i386/system.c Tue Jan 28 07:24:41 2003
129727 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/i386/system.c Thu Jan 1 01:00:00 1970
129728 @@ -1,73 +0,0 @@
129729 -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
129730 - This file is part of the GNU C Library.
129732 - The GNU C Library is free software; you can redistribute it and/or
129733 - modify it under the terms of the GNU Lesser General Public
129734 - License as published by the Free Software Foundation; either
129735 - version 2.1 of the License, or (at your option) any later version.
129737 - The GNU C Library is distributed in the hope that it will be useful,
129738 - but WITHOUT ANY WARRANTY; without even the implied warranty of
129739 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
129740 - Lesser General Public License for more details.
129742 - You should have received a copy of the GNU Lesser General Public
129743 - License along with the GNU C Library; if not, write to the Free
129744 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
129745 - 02111-1307 USA. */
129747 -#include <sched.h>
129748 -#include <signal.h>
129749 -#include <sysdep.h>
129750 -#include <unistd.h>
129751 -#include <sys/wait.h>
129752 -#include <bits/libc-lock.h>
129753 -#include <kernel-features.h>
129755 -/* We have to and actually can handle cancelable system(). The big
129756 - problem: we have to kill the child process if necessary. To do
129757 - this a cleanup handler has to be registered and is has to be able
129758 - to find the PID of the child. The main problem is to reliable have
129759 - the PID when needed. It is not necessary for the parent thread to
129760 - return. It might still be in the kernel when the cancellation
129761 - request comes. Therefore we have to use the clone() calls ability
129762 - to have the kernel write the PID into the user-level variable. */
129763 -#ifdef __ASSUME_CLONE_THREAD_FLAGS
129764 -# define FORK() \
129765 - INLINE_SYSCALL (clone, 3, CLONE_PARENT_SETTID | SIGCHLD, 0, &pid)
129766 -#endif
129768 -static void cancel_handler (void *arg);
129770 -#define CLEANUP_HANDLER \
129771 - __libc_cleanup_region_start (1, cancel_handler, &pid)
129773 -#define CLEANUP_RESET \
129774 - __libc_cleanup_region_end (0)
129777 -/* Linux has waitpid(), so override the generic unix version. */
129778 -#include <sysdeps/posix/system.c>
129781 -/* The cancellation handler. */
129782 -static void
129783 -cancel_handler (void *arg)
129785 - pid_t child = *(pid_t *) arg;
129787 - INTERNAL_SYSCALL_DECL (err);
129788 - INTERNAL_SYSCALL (kill, err, 2, child, SIGKILL);
129790 - TEMP_FAILURE_RETRY (__waitpid (child, NULL, 0));
129792 - DO_LOCK ();
129794 - if (SUB_REF () == 0)
129796 - (void) __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL);
129797 - (void) __sigaction (SIGINT, &intr, (struct sigaction *) NULL);
129800 - DO_UNLOCK ();
129802 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/bits/mman.h
129803 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/bits/mman.h Thu Jul 18 01:38:55 2002
129804 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/bits/mman.h Mon Mar 3 10:56:24 2003
129805 @@ -1,5 +1,5 @@
129806 /* Definitions for POSIX memory map interface. Linux/ia64 version.
129807 - Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
129808 + Copyright (C) 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
129809 This file is part of the GNU C Library.
129811 The GNU C Library is free software; you can redistribute it and/or
129812 @@ -52,12 +52,14 @@
129814 /* These are Linux-specific. */
129815 #ifdef __USE_MISC
129816 -# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
129817 -# define MAP_GROWSUP 0x0200 /* Register stack-like segment */
129818 -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
129819 -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
129820 -# define MAP_LOCKED 0x2000 /* Lock the mapping. */
129821 -# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
129822 +# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
129823 +# define MAP_GROWSUP 0x00200 /* Register stack-like segment */
129824 +# define MAP_DENYWRITE 0x00800 /* ETXTBSY */
129825 +# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
129826 +# define MAP_LOCKED 0x02000 /* Lock the mapping. */
129827 +# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
129828 +# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
129829 +# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
129830 #endif
129832 /* Flags to `msync'. */
129833 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
129834 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h Thu Dec 5 01:21:53 2002
129835 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h Tue Apr 1 21:01:17 2003
129836 @@ -1,5 +1,5 @@
129837 /* siginfo_t, sigevent and constants. Linux/ia64 version.
129838 - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
129839 + Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
129840 This file is part of the GNU C Library.
129841 Contributed by David Mosberger-Tang <davidm@hpl.hp.com>.
129843 @@ -65,8 +65,9 @@
129844 /* POSIX.1b timers. */
129845 struct
129847 - unsigned int _timer1;
129848 - unsigned int _timer2;
129849 + int si_tid; /* Timer ID. */
129850 + int si_overrun; /* Overrun count. */
129851 + sigval_t si_sigval; /* Signal value. */
129852 } _timer;
129854 /* POSIX.1b signals. */
129855 @@ -109,6 +110,8 @@
129856 /* X/Open requires some more fields with fixed names. */
129857 # define si_pid _sifields._kill.si_pid
129858 # define si_uid _sifields._kill.si_uid
129859 +# define si_timerid _sifields._timer.si_tid
129860 +# define si_overrun _sifields._timer.si_overrun
129861 # define si_status _sifields._sigchld.si_status
129862 # define si_utime _sifields._sigchld.si_utime
129863 # define si_stime _sifields._sigchld.si_stime
129864 @@ -294,9 +297,6 @@
129865 # define __SIGEV_MAX_SIZE 64
129866 # define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
129868 -/* Forward declaration of the `pthread_attr_t' type. */
129869 -struct __pthread_attr_s;
129871 typedef struct sigevent
129873 sigval_t sigev_value;
129874 @@ -326,8 +326,11 @@
129875 # define SIGEV_SIGNAL SIGEV_SIGNAL
129876 SIGEV_NONE, /* Other notification: meaningless. */
129877 # define SIGEV_NONE SIGEV_NONE
129878 - SIGEV_THREAD /* Deliver via thread creation. */
129879 + SIGEV_THREAD, /* Deliver via thread creation. */
129880 # define SIGEV_THREAD SIGEV_THREAD
129882 + SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */
129883 +#define SIGEV_THREAD_ID SIGEV_THREAD_ID
129886 #endif /* have _SIGNAL_H. */
129887 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/brk.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/brk.S
129888 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/brk.S Sat Jul 7 21:21:34 2001
129889 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/brk.S Mon Mar 3 08:11:46 2003
129890 @@ -1,5 +1,5 @@
129891 /* brk system call for Linux/ia64
129892 - Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
129893 + Copyright (C) 1999,2000,2001,2003 Free Software Foundation, Inc.
129894 This file is part of the GNU C Library.
129895 Written by Stephane Eranian <eranian@hpl.hp.com> and
129896 Jes Sorensen, <Jes.Sorensen@cern.ch>, April 1999.
129897 @@ -25,6 +25,8 @@
129898 #include <asm/errno.h>
129900 .global __curbrk
129901 + .type __curbrk,@object
129902 + .size __curbrk,8
129903 .data
129904 .align 8
129905 __curbrk:
129906 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/clone2.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/clone2.S
129907 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/clone2.S Sat Jul 7 21:21:34 2001
129908 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/clone2.S Thu Mar 13 05:36:59 2003
129909 @@ -1,4 +1,4 @@
129910 -/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
129911 +/* Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
129912 This file is part of the GNU C Library.
129914 The GNU C Library is free software; you can redistribute it and/or
129915 @@ -22,10 +22,11 @@
129918 /* int __clone2(int (*fn) (void *arg), void *child_stack_base, */
129919 -/* size_t child_stack_size, int flags, void *arg) */
129920 +/* size_t child_stack_size, int flags, void *arg, */
129921 +/* pid_t *parent_tid, void *tls, pid_t *child_tid) */
129923 ENTRY(__clone2)
129924 - alloc r2=ar.pfs,5,2,3,0
129925 + alloc r2=ar.pfs,8,2,6,0
129926 cmp.eq p6,p0=0,in0
129927 mov r8=EINVAL
129928 (p6) br.cond.spnt.few __syscall_error
129929 @@ -41,6 +42,9 @@
129930 mov out0=in3 /* Flags are first syscall argument. */
129931 mov out1=in1 /* Stack address. */
129932 mov out2=in2 /* Stack size. */
129933 + mov out3=in5 /* Parent TID Pointer */
129934 + mov out4=in7 /* Child TID Pointer */
129935 + mov out5=in6 /* TLS pointer */
129936 DO_CALL (SYS_ify (clone2))
129937 cmp.eq p6,p0=-1,r10
129939 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/fork.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/fork.S
129940 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/fork.S Tue Dec 31 20:13:28 2002
129941 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/fork.S Sat Mar 29 20:18:46 2003
129942 @@ -32,7 +32,6 @@
129944 DO_CALL (SYS_ify (clone))
129945 cmp.eq p6,p0=-1,r10
129947 (p6) br.cond.spnt.few __syscall_error
129949 PSEUDO_END(__libc_fork)
129950 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/getcontext.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/getcontext.S
129951 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/getcontext.S Wed Oct 9 11:57:31 2002
129952 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/getcontext.S Thu Mar 27 20:50:25 2003
129953 @@ -34,6 +34,7 @@
129954 other than the PRESERVED state. */
129956 ENTRY(__getcontext)
129957 + .prologue
129958 alloc r16 = ar.pfs, 1, 0, 3, 0
129960 // sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask):
129961 @@ -53,7 +54,9 @@
129962 add r2 = SC_GR+1*8, r32
129964 mov.m rBSP = ar.bsp
129965 + .save ar.unat, rUNAT
129966 mov.m rUNAT = ar.unat
129967 + .body
129968 add r3 = SC_GR+4*8, r32
129971 @@ -65,8 +68,8 @@
129972 .mem.offset 8,0; st8.spill [r3] = r6, 48
129973 and rTMP = ~0x3, rRSC
129975 - st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8))
129976 - st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8))
129977 +.mem.offset 0,0; st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8))
129978 +.mem.offset 8,0; st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8))
129980 mov.m ar.rsc = rTMP // put RSE into enforced lazy mode
129981 mov.m rNAT = ar.unat
129982 @@ -119,8 +122,8 @@
129983 stf.spill [r3] = f31, 32
129984 mov rB1 = b1
129986 + mov ar.unat = rUNAT // we're done spilling integer regs; restore caller's UNaT
129987 add r2 = SC_NAT, r32
129988 - nop 0
129989 add r3 = SC_BSP, r32
129991 st8 [r2] = rNAT, (SC_RNAT-SC_NAT)
129992 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/setjmp.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/setjmp.S
129993 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/setjmp.S Tue Dec 31 20:13:28 2002
129994 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/setjmp.S Thu Mar 27 20:50:25 2003
129995 @@ -87,21 +87,22 @@
129996 ENTRY(__sigsetjmp)
129997 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2)
129998 alloc loc1=ar.pfs,2,2,2,0
129999 + .save ar.unat, r16
130000 mov r16=ar.unat
130002 mov r17=ar.fpsr
130003 mov r2=in0
130004 add r3=8,in0
130006 - st8.spill.nta [r2]=sp,16 // r12 (sp)
130007 - st8.spill.nta [r3]=gp,16 // r1 (gp)
130008 +.mem.offset 8,0; st8.spill.nta [r2]=sp,16 // r12 (sp)
130009 +.mem.offset 0,0; st8.spill.nta [r3]=gp,16 // r1 (gp)
130011 st8.nta [r2]=r16,16 // save caller's unat
130012 st8.nta [r3]=r17,16 // save fpsr
130013 add r8=0xa0,in0
130015 - st8.spill.nta [r2]=r4,16 // r4
130016 - st8.spill.nta [r3]=r5,16 // r5
130017 +.mem.offset 8,0; st8.spill.nta [r2]=r4,16 // r4
130018 +.mem.offset 0,0; st8.spill.nta [r3]=r5,16 // r5
130019 add r9=0xb0,in0
130021 stf.spill.nta [r8]=f2,32
130022 @@ -143,8 +144,8 @@
130023 stf.spill.nta [r8]=f30
130024 stf.spill.nta [r9]=f31
130026 - st8.spill.nta [r2]=r6,16 // r6
130027 - st8.spill.nta [r3]=r7,16 // r7
130028 +.mem.offset 8,0; st8.spill.nta [r2]=r6,16 // r6
130029 +.mem.offset 0,0; st8.spill.nta [r3]=r7,16 // r7
130031 mov r23=ar.bsp
130032 mov r25=ar.unat
130033 @@ -170,9 +171,10 @@
130034 st8.nta [r3]=in0 // &__jmp_buf
130035 br.call.dpnt.few rp=__sigjmp_save
130036 .ret0: // force a new bundle ::q
130037 - mov r8=0
130038 + mov.m ar.unat=r16 // restore caller's unat
130039 mov rp=loc0
130040 mov ar.pfs=loc1
130041 + mov r8=0
130043 END(__sigsetjmp)
130045 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/sysdep.h
130046 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/sysdep.h Thu Jan 9 03:54:57 2003
130047 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/sysdep.h Mon Mar 24 08:54:28 2003
130048 @@ -96,15 +96,27 @@
130049 #undef PSEUDO_END
130050 #define PSEUDO_END(name) .endp C_SYMBOL_NAME(name);
130052 +#undef PSEUDO_NOERRNO
130053 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
130054 + ENTRY(name) \
130055 + DO_CALL (SYS_ify(syscall_name));
130057 +#undef PSEUDO_END_NOERRNO
130058 +#define PSEUDO_END_NOERRNO(name) .endp C_SYMBOL_NAME(name);
130060 #undef END
130061 #define END(name) \
130062 .size C_SYMBOL_NAME(name), . - C_SYMBOL_NAME(name) ; \
130063 .endp C_SYMBOL_NAME(name)
130065 #define ret br.ret.sptk.few b0
130066 +#define ret_NOERRNO ret
130068 #else /* not __ASSEMBLER__ */
130070 +#define BREAK_INSN_1(num) "break " #num ";;\n\t"
130071 +#define BREAK_INSN(num) BREAK_INSN_1(num)
130073 /* On IA-64 we have stacked registers for passing arguments. The
130074 "out" registers end up being the called function's "in"
130075 registers.
130076 @@ -121,10 +133,10 @@
130077 register long _r15 asm ("r15") = __NR_##name; \
130078 long _retval; \
130079 LOAD_ARGS_##nr (args); \
130080 - __asm __volatile ("break %3;;\n\t" \
130081 + __asm __volatile (BREAK_INSN (__BREAK_SYSCALL) \
130082 : "=r" (_r8), "=r" (_r10), "=r" (_r15) \
130083 - : "i" (__BREAK_SYSCALL), "2" (_r15) \
130084 - ASM_ARGS_##nr \
130085 + ASM_OUTARGS_##nr \
130086 + : "2" (_r15) ASM_ARGS_##nr \
130087 : "memory" ASM_CLOBBERS_##nr); \
130088 _retval = _r8; \
130089 if (_r10 == -1) \
130090 @@ -145,10 +157,10 @@
130091 register long _r15 asm ("r15") = __NR_##name; \
130092 long _retval; \
130093 LOAD_ARGS_##nr (args); \
130094 - __asm __volatile ("break %3;;\n\t" \
130095 + __asm __volatile (BREAK_INSN (__BREAK_SYSCALL) \
130096 : "=r" (_r8), "=r" (_r10), "=r" (_r15) \
130097 - : "i" (__BREAK_SYSCALL), "2" (_r15) \
130098 - ASM_ARGS_##nr \
130099 + ASM_OUTARGS_##nr \
130100 + : "2" (_r15) ASM_ARGS_##nr \
130101 : "memory" ASM_CLOBBERS_##nr); \
130102 _retval = _r8; \
130103 err = _r10; \
130104 @@ -176,20 +188,33 @@
130105 #define LOAD_ARGS_5(out0, out1, out2, out3, out4) \
130106 register long _out4 asm ("out4") = (long) (out4); \
130107 LOAD_ARGS_4 (out0, out1, out2, out3)
130108 +#define LOAD_ARGS_6(out0, out1, out2, out3, out4, out5) \
130109 + register long _out5 asm ("out5") = (long) (out5); \
130110 + LOAD_ARGS_5 (out0, out1, out2, out3, out4)
130112 +#define ASM_OUTARGS_0
130113 +#define ASM_OUTARGS_1 ASM_OUTARGS_0, "=r" (_out0)
130114 +#define ASM_OUTARGS_2 ASM_OUTARGS_1, "=r" (_out1)
130115 +#define ASM_OUTARGS_3 ASM_OUTARGS_2, "=r" (_out2)
130116 +#define ASM_OUTARGS_4 ASM_OUTARGS_3, "=r" (_out3)
130117 +#define ASM_OUTARGS_5 ASM_OUTARGS_4, "=r" (_out4)
130118 +#define ASM_OUTARGS_6 ASM_OUTARGS_5, "=r" (_out5)
130120 #define ASM_ARGS_0
130121 -#define ASM_ARGS_1 ASM_ARGS_0, "r" (_out0)
130122 -#define ASM_ARGS_2 ASM_ARGS_1, "r" (_out1)
130123 -#define ASM_ARGS_3 ASM_ARGS_2, "r" (_out2)
130124 -#define ASM_ARGS_4 ASM_ARGS_3, "r" (_out3)
130125 -#define ASM_ARGS_5 ASM_ARGS_4, "r" (_out4)
130126 +#define ASM_ARGS_1 ASM_ARGS_0, "3" (_out0)
130127 +#define ASM_ARGS_2 ASM_ARGS_1, "4" (_out1)
130128 +#define ASM_ARGS_3 ASM_ARGS_2, "5" (_out2)
130129 +#define ASM_ARGS_4 ASM_ARGS_3, "6" (_out3)
130130 +#define ASM_ARGS_5 ASM_ARGS_4, "7" (_out4)
130131 +#define ASM_ARGS_6 ASM_ARGS_5, "8" (_out5)
130133 #define ASM_CLOBBERS_0 ASM_CLOBBERS_1, "out0"
130134 #define ASM_CLOBBERS_1 ASM_CLOBBERS_2, "out1"
130135 #define ASM_CLOBBERS_2 ASM_CLOBBERS_3, "out2"
130136 #define ASM_CLOBBERS_3 ASM_CLOBBERS_4, "out3"
130137 #define ASM_CLOBBERS_4 ASM_CLOBBERS_5, "out4"
130138 -#define ASM_CLOBBERS_5 , "out5", "out6", "out7", \
130139 +#define ASM_CLOBBERS_5 ASM_CLOBBERS_6, "out5"
130140 +#define ASM_CLOBBERS_6 , "out6", "out7", \
130141 /* Non-stacked integer registers, minus r8, r10, r15. */ \
130142 "r2", "r3", "r9", "r11", "r12", "r13", "r14", "r16", "r17", "r18", \
130143 "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", \
130144 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/system.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/system.c
130145 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ia64/system.c Thu Jan 1 01:00:00 1970
130146 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ia64/system.c Sun Mar 16 00:47:44 2003
130147 @@ -0,0 +1,35 @@
130148 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
130149 + This file is part of the GNU C Library.
130151 + The GNU C Library is free software; you can redistribute it and/or
130152 + modify it under the terms of the GNU Lesser General Public
130153 + License as published by the Free Software Foundation; either
130154 + version 2.1 of the License, or (at your option) any later version.
130156 + The GNU C Library is distributed in the hope that it will be useful,
130157 + but WITHOUT ANY WARRANTY; without even the implied warranty of
130158 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
130159 + Lesser General Public License for more details.
130161 + You should have received a copy of the GNU Lesser General Public
130162 + License along with the GNU C Library; if not, write to the Free
130163 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
130164 + 02111-1307 USA. */
130166 +#include <kernel-features.h>
130168 +/* We have to and actually can handle cancelable system(). The big
130169 + problem: we have to kill the child process if necessary. To do
130170 + this a cleanup handler has to be registered and is has to be able
130171 + to find the PID of the child. The main problem is to reliable have
130172 + the PID when needed. It is not necessary for the parent thread to
130173 + return. It might still be in the kernel when the cancellation
130174 + request comes. Therefore we have to use the clone() calls ability
130175 + to have the kernel write the PID into the user-level variable. */
130176 +#ifdef __ASSUME_CLONE_THREAD_FLAGS
130177 +# define FORK() \
130178 + INLINE_SYSCALL (clone2, 6, CLONE_PARENT_SETTID | SIGCHLD, NULL, 0, \
130179 + &pid, NULL, NULL)
130180 +#endif
130182 +#include "../system.c"
130183 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/ifaddrs.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ifaddrs.c
130184 --- glibc-2.3.2/sysdeps/unix/sysv/linux/ifaddrs.c Thu Jan 1 01:00:00 1970
130185 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/ifaddrs.c Sat Mar 29 10:07:18 2003
130186 @@ -0,0 +1,774 @@
130187 +/* getifaddrs -- get names and addresses of all network interfaces
130188 + Copyright (C) 2003 Free Software Foundation, Inc.
130189 + This file is part of the GNU C Library.
130191 + The GNU C Library is free software; you can redistribute it and/or
130192 + modify it under the terms of the GNU Lesser General Public
130193 + License as published by the Free Software Foundation; either
130194 + version 2.1 of the License, or (at your option) any later version.
130196 + The GNU C Library is distributed in the hope that it will be useful,
130197 + but WITHOUT ANY WARRANTY; without even the implied warranty of
130198 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
130199 + Lesser General Public License for more details.
130201 + You should have received a copy of the GNU Lesser General Public
130202 + License along with the GNU C Library; if not, write to the Free
130203 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
130204 + 02111-1307 USA. */
130206 +#include <assert.h>
130207 +#include <errno.h>
130208 +#include <ifaddrs.h>
130209 +#include <net/if.h>
130210 +#include <netinet/in.h>
130211 +#include <netpacket/packet.h>
130212 +#include <stdbool.h>
130213 +#include <stdlib.h>
130214 +#include <string.h>
130215 +#include <sys/ioctl.h>
130216 +#include <sys/socket.h>
130217 +#include <sysdep.h>
130218 +#include <time.h>
130219 +#include <unistd.h>
130221 +#include <asm/types.h>
130222 +#include <linux/netlink.h>
130223 +#include <linux/rtnetlink.h>
130225 +#include "kernel-features.h"
130227 +/* We don't know if we have NETLINK support compiled in in our
130228 + Kernel, so include the old implementation as fallback. */
130229 +#if __ASSUME_NETLINK_SUPPORT == 0
130230 +static int no_netlink_support;
130232 +# define getifaddrs fallback_getifaddrs
130233 +# include "sysdeps/gnu/ifaddrs.c"
130234 +# undef getifaddrs
130236 +#else
130238 +# define no_netlink_support 0
130240 +#endif
130243 +struct netlink_res
130245 + struct netlink_res *next;
130246 + struct nlmsghdr *nlh;
130247 + size_t size; /* Size of response. */
130248 + uint32_t seq; /* sequential number we used. */
130252 +struct netlink_handle
130254 + int fd; /* Netlink file descriptor. */
130255 + pid_t pid; /* Process ID. */
130256 + uint32_t seq; /* The sequence number we use currently. */
130257 + struct netlink_res *nlm_list; /* Pointer to list of responses. */
130258 + struct netlink_res *end_ptr; /* For faster append of new entries. */
130262 +/* struct to hold the data for one ifaddrs entry, so we can allocate
130263 + everything at once. */
130264 +struct ifaddrs_storage
130266 + struct ifaddrs ifa;
130267 + union
130269 + /* Save space for the biggest of the four used sockaddr types and
130270 + avoid a lot of casts. */
130271 + struct sockaddr sa;
130272 + struct sockaddr_ll sl;
130273 + struct sockaddr_in s4;
130274 + struct sockaddr_in6 s6;
130275 + } addr, netmask, broadaddr;
130276 + char name[IF_NAMESIZE + 1];
130280 +static void
130281 +free_netlink_handle (struct netlink_handle *h)
130283 + struct netlink_res *ptr;
130284 + int saved_errno = errno;
130286 + ptr = h->nlm_list;
130287 + while (ptr != NULL)
130289 + struct netlink_res *tmpptr;
130291 + free (ptr->nlh);
130292 + tmpptr = ptr->next;
130293 + free (ptr);
130294 + ptr = tmpptr;
130297 + errno = saved_errno;
130301 +static int
130302 +netlink_sendreq (struct netlink_handle *h, int type)
130304 + struct
130306 + struct nlmsghdr nlh;
130307 + struct rtgenmsg g;
130308 + } req;
130309 + struct sockaddr_nl nladdr;
130311 + if (h->seq == 0)
130312 + h->seq = time (NULL);
130314 + req.nlh.nlmsg_len = sizeof (req);
130315 + req.nlh.nlmsg_type = type;
130316 + req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST;
130317 + req.nlh.nlmsg_pid = 0;
130318 + req.nlh.nlmsg_seq = h->seq;
130319 + req.g.rtgen_family = AF_UNSPEC;
130321 + memset (&nladdr, '\0', sizeof (nladdr));
130322 + nladdr.nl_family = AF_NETLINK;
130324 + return TEMP_FAILURE_RETRY (sendto (h->fd, (void *) &req, sizeof (req), 0,
130325 + (struct sockaddr *) &nladdr,
130326 + sizeof (nladdr)));
130330 +static int
130331 +netlink_receive (struct netlink_handle *h)
130333 + struct netlink_res *nlm_next;
130334 + char buf[4096];
130335 + struct iovec iov = { buf, sizeof (buf) };
130336 + struct sockaddr_nl nladdr;
130337 + struct nlmsghdr *nlmh;
130338 + int read_len;
130339 + bool done = false;
130341 + while (! done)
130343 + struct msghdr msg =
130345 + (void *) &nladdr, sizeof (nladdr),
130346 + &iov, 1,
130347 + NULL, 0,
130351 + read_len = TEMP_FAILURE_RETRY (recvmsg (h->fd, &msg, 0));
130352 + if (read_len < 0)
130353 + return -1;
130355 + if (msg.msg_flags & MSG_TRUNC)
130356 + return -1;
130358 + nlm_next = (struct netlink_res *) malloc (sizeof (struct netlink_res));
130359 + if (nlm_next == NULL)
130360 + return -1;
130361 + nlm_next->next = NULL;
130362 + nlm_next->nlh = (struct nlmsghdr *) malloc (read_len);
130363 + if (nlm_next->nlh == NULL)
130365 + free (nlm_next);
130366 + return -1;
130368 + memcpy (nlm_next->nlh, buf, read_len);
130369 + nlm_next->size = read_len;
130370 + nlm_next->seq = h->seq;
130371 + if (h->nlm_list == NULL)
130373 + h->nlm_list = nlm_next;
130374 + h->end_ptr = nlm_next;
130376 + else
130378 + h->end_ptr->next = nlm_next;
130379 + h->end_ptr = nlm_next;
130382 + for (nlmh = (struct nlmsghdr *) buf;
130383 + NLMSG_OK (nlmh, (size_t) read_len);
130384 + nlmh = (struct nlmsghdr *) NLMSG_NEXT (nlmh, read_len))
130386 + if ((pid_t) nlmh->nlmsg_pid != h->pid || nlmh->nlmsg_seq != h->seq)
130387 + continue;
130389 + if (nlmh->nlmsg_type == NLMSG_DONE)
130391 + /* we found the end, leave the loop. */
130392 + done = true;
130393 + break;
130395 + if (nlmh->nlmsg_type == NLMSG_ERROR)
130397 + struct nlmsgerr *nlerr = (struct nlmsgerr *) NLMSG_DATA (nlmh);
130398 + if (nlmh->nlmsg_len < NLMSG_LENGTH (sizeof (struct nlmsgerr)))
130399 + errno = EIO;
130400 + else
130401 + errno = -nlerr->error;
130402 + return -1;
130406 + return 0;
130410 +static void
130411 +netlink_close (struct netlink_handle *h)
130413 + /* Don't modify errno. */
130414 + INTERNAL_SYSCALL_DECL (err);
130415 + (void) INTERNAL_SYSCALL (close, err, 1, h->fd);
130419 +/* Open a NETLINK socket. */
130420 +static int
130421 +netlink_open (struct netlink_handle *h)
130423 + struct sockaddr_nl nladdr;
130425 + h->fd = socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
130426 + if (h->fd < 0)
130427 + return -1;
130429 + memset (&nladdr, '\0', sizeof (nladdr));
130430 + nladdr.nl_family = AF_NETLINK;
130431 + if (bind (h->fd, (struct sockaddr *) &nladdr, sizeof (nladdr)) < 0)
130433 + netlink_close (h);
130434 + return -1;
130436 + return 0;
130440 +/* We know the number of RTM_NEWLINK entries, so we reserve the first
130441 + # of entries for this type. All RTM_NEWADDR entries have an index
130442 + pointer to the RTM_NEWLINK entry. To find the entry, create
130443 + a table to map kernel index entries to our index numbers.
130444 + Since we get at first all RTM_NEWLINK entries, it can never happen
130445 + that a RTM_NEWADDR index is not known to this map. */
130446 +static int
130447 +map_newlink (int index, int *map, int max)
130449 + int i;
130451 + for (i = 0; i < max; i++)
130453 + if (map[i] == -1)
130455 + map[i] = index;
130456 + return i;
130458 + else if (map[i] == index)
130459 + return i;
130461 + /* This should never be reached. If this will be reached, we have
130462 + very big problem. */
130463 + abort ();
130467 +/* Create a linked list of `struct ifaddrs' structures, one for each
130468 + network interface on the host machine. If successful, store the
130469 + list in *IFAP and return 0. On errors, return -1 and set `errno'. */
130471 +getifaddrs (struct ifaddrs **ifap)
130473 + struct netlink_handle nh = { 0, 0, 0, NULL, NULL };
130474 + struct netlink_res *nlp;
130475 + struct ifaddrs_storage *ifas;
130476 + unsigned int i, newlink, newaddr, newaddr_idx;
130477 + int *map_newlink_data;
130478 + size_t ifa_data_size = 0; /* Size to allocate for all ifa_data. */
130479 + char *ifa_data_ptr; /* Pointer to the unused part of memory for
130480 + ifa_data. */
130482 + if (ifap)
130483 + *ifap = NULL;
130485 + if (! no_netlink_support && netlink_open (&nh) < 0)
130487 +#if __ASSUME_NETLINK_SUPPORT == 0
130488 + no_netlink_support = 1;
130489 +#else
130490 + return -1;
130491 +#endif
130494 +#if __ASSUME_NETLINK_SUPPORT == 0
130495 + if (no_netlink_support)
130496 + return fallback_getifaddrs (ifap);
130497 +#endif
130499 + nh.pid = getpid ();
130501 + /* Tell the kernel that we wish to get a list of all
130502 + active interfaces. */
130503 + if (netlink_sendreq (&nh, RTM_GETLINK) < 0)
130505 + netlink_close (&nh);
130506 + return -1;
130508 + /* Collect all data for every interface. */
130509 + if (netlink_receive (&nh) < 0)
130511 + free_netlink_handle (&nh);
130512 + netlink_close (&nh);
130513 + return -1;
130517 + /* Now ask the kernel for all addresses which are assigned
130518 + to an interface. Since we store the addresses after the
130519 + interfaces in the list, we will later always find the
130520 + interface before the corresponding addresses. */
130521 + ++nh.seq;
130522 + if (netlink_sendreq (&nh, RTM_GETADDR) < 0)
130524 + free_netlink_handle (&nh);
130525 + netlink_close (&nh);
130526 + return -1;
130528 + /* Collect all data for every inerface. */
130529 + if (netlink_receive (&nh) < 0)
130531 + free_netlink_handle (&nh);
130532 + netlink_close (&nh);
130533 + return -1;
130536 + /* Count all RTM_NEWLINK and RTM_NEWADDR entries to allocate
130537 + enough memory. */
130538 + newlink = newaddr = 0;
130539 + for (nlp = nh.nlm_list; nlp; nlp = nlp->next)
130541 + struct nlmsghdr *nlh;
130542 + size_t size = nlp->size;
130544 + if (nlp->nlh == NULL)
130545 + continue;
130547 + /* Walk through all entries we got from the kernel and look, which
130548 + message type they contain. */
130549 + for (nlh = nlp->nlh; NLMSG_OK (nlh, size); nlh = NLMSG_NEXT (nlh, size))
130551 + /* check if the message is what we want */
130552 + if ((pid_t) nlh->nlmsg_pid != nh.pid || nlh->nlmsg_seq != nlp->seq)
130553 + continue;
130555 + if (nlh->nlmsg_type == NLMSG_DONE)
130556 + break; /* ok */
130558 + if (nlh->nlmsg_type == RTM_NEWLINK)
130560 + /* A RTM_NEWLINK message can have IFLA_STATS data. We need to
130561 + know the size before creating the list to allocate enough
130562 + memory. */
130563 + struct ifinfomsg *ifim = (struct ifinfomsg *) NLMSG_DATA (nlh);
130564 + struct rtattr *rta = IFLA_RTA (ifim);
130565 + size_t rtasize = IFLA_PAYLOAD (nlh);
130567 + while (RTA_OK (rta, rtasize))
130569 + size_t rta_payload = RTA_PAYLOAD (rta);
130571 + if (rta->rta_type == IFLA_STATS)
130573 + ifa_data_size += rta_payload;
130574 + break;
130576 + else
130577 + rta = RTA_NEXT (rta, rtasize);
130579 + ++newlink;
130581 + else if (nlh->nlmsg_type == RTM_NEWADDR)
130582 + ++newaddr;
130586 + /* Return if no interface is up. */
130587 + if ((newlink + newaddr) == 0)
130589 + free_netlink_handle (&nh);
130590 + netlink_close (&nh);
130591 + return 0;
130594 + /* Table for mapping kernel index to entry in our list. */
130595 + map_newlink_data = alloca (newlink * sizeof (int));
130597 + /* Allocate memory for all entries we have and initialize next
130598 + pointer. */
130599 + ifas = (struct ifaddrs_storage *) calloc (1,
130600 + (newlink + newaddr)
130601 + * sizeof (struct ifaddrs_storage)
130602 + + ifa_data_size);
130603 + if (ifas == NULL)
130605 + free_netlink_handle (&nh);
130606 + netlink_close (&nh);
130607 + return -1;
130610 + for (i = 0; i < newlink + newaddr - 1; i++)
130612 + ifas[i].ifa.ifa_next = &ifas[i + 1].ifa;
130613 + map_newlink_data[i] = -1;
130615 + ifa_data_ptr = (char *)&ifas[newlink + newaddr];
130616 + newaddr_idx = 0; /* Counter for newaddr index. */
130618 + /* Walk through the list of data we got from the kernel. */
130619 + for (nlp = nh.nlm_list; nlp; nlp = nlp->next)
130621 + struct nlmsghdr *nlh;
130622 + size_t size = nlp->size;
130624 + if (nlp->nlh == NULL)
130625 + continue;
130627 + /* Walk through one message and look at the type: If it is our
130628 + message, we need RTM_NEWLINK/RTM_NEWADDR and stop if we reach
130629 + the end or we find the end marker (in this case we ignore the
130630 + following data. */
130631 + for (nlh = nlp->nlh; NLMSG_OK (nlh, size); nlh = NLMSG_NEXT (nlh, size))
130633 + int ifa_index = 0;
130635 + /* check if the message is the one we want */
130636 + if ((pid_t) nlh->nlmsg_pid != nh.pid || nlh->nlmsg_seq != nlp->seq)
130637 + continue;
130639 + if (nlh->nlmsg_type == NLMSG_DONE)
130640 + break; /* ok */
130641 + else if (nlh->nlmsg_type == RTM_NEWLINK)
130643 + /* We found a new interface. Now extract everything from the
130644 + interface data we got and need. */
130645 + struct ifinfomsg *ifim = (struct ifinfomsg *) NLMSG_DATA (nlh);
130646 + struct rtattr *rta = IFLA_RTA (ifim);
130647 + size_t rtasize = IFLA_PAYLOAD (nlh);
130649 + /* interfaces are stored in the first "newlink" entries
130650 + of our list, starting in the order as we got from the
130651 + kernel. */
130652 + ifa_index = map_newlink (ifim->ifi_index - 1,
130653 + map_newlink_data, newlink);
130654 + ifas[ifa_index].ifa.ifa_flags = ifim->ifi_flags;
130656 + while (RTA_OK (rta, rtasize))
130658 + char *rta_data = RTA_DATA (rta);
130659 + size_t rta_payload = RTA_PAYLOAD (rta);
130661 + switch (rta->rta_type)
130663 + case IFLA_ADDRESS:
130664 + ifas[ifa_index].addr.sl.sll_family = AF_PACKET;
130665 + memcpy (ifas[ifa_index].addr.sl.sll_addr,
130666 + (char *) rta_data, rta_payload);
130667 + ifas[ifa_index].addr.sl.sll_halen = rta_payload;
130668 + ifas[ifa_index].addr.sl.sll_ifindex = ifim->ifi_index;
130669 + ifas[ifa_index].addr.sl.sll_hatype = ifim->ifi_type;
130671 + ifas[ifa_index].ifa.ifa_addr = &ifas[ifa_index].addr.sa;
130672 + break;
130674 + case IFLA_BROADCAST:
130675 + ifas[ifa_index].broadaddr.sl.sll_family = AF_PACKET;
130676 + memcpy (ifas[ifa_index].broadaddr.sl.sll_addr,
130677 + (char *) rta_data, rta_payload);
130678 + ifas[ifa_index].broadaddr.sl.sll_halen = rta_payload;
130679 + ifas[ifa_index].broadaddr.sl.sll_ifindex
130680 + = ifim->ifi_index;
130681 + ifas[ifa_index].broadaddr.sl.sll_hatype = ifim->ifi_type;
130683 + ifas[ifa_index].ifa.ifa_broadaddr
130684 + = &ifas[ifa_index].broadaddr.sa;
130685 + break;
130687 + case IFLA_IFNAME: /* Name of Interface */
130688 + if ((rta_payload + 1) <= sizeof (ifas[ifa_index].name))
130690 + ifas[ifa_index].ifa.ifa_name = ifas[ifa_index].name;
130691 + strncpy (ifas[ifa_index].name, rta_data,
130692 + rta_payload);
130693 + ifas[ifa_index].name[rta_payload] = '\0';
130695 + break;
130697 + case IFLA_STATS: /* Statistics of Interface */
130698 + ifas[ifa_index].ifa.ifa_data = ifa_data_ptr;
130699 + ifa_data_ptr += rta_payload;
130700 + memcpy (ifas[ifa_index].ifa.ifa_data, rta_data,
130701 + rta_payload);
130702 + break;
130704 + case IFLA_UNSPEC:
130705 + break;
130706 + case IFLA_MTU:
130707 + break;
130708 + case IFLA_LINK:
130709 + break;
130710 + case IFLA_QDISC:
130711 + break;
130712 + default:
130713 + break;
130716 + rta = RTA_NEXT (rta, rtasize);
130719 + else if (nlh->nlmsg_type == RTM_NEWADDR)
130721 + struct ifaddrmsg *ifam = (struct ifaddrmsg *) NLMSG_DATA (nlh);
130722 + struct rtattr *rta = IFA_RTA (ifam);
130723 + size_t rtasize = IFA_PAYLOAD (nlh);
130725 + /* New Addresses are stored in the order we got them from
130726 + the kernel after interfaces. Theoretical it is possible
130727 + that we have holes in the interface part of the list,
130728 + but we always have already the interface for this address. */
130729 + ifa_index = newlink + newaddr_idx;
130730 + ifas[ifa_index].ifa.ifa_flags
130731 + = ifas[map_newlink (ifam->ifa_index - 1,
130732 + map_newlink_data, newlink)].ifa.ifa_flags;
130733 + ++newaddr_idx;
130735 + while (RTA_OK (rta, rtasize))
130737 + char *rta_data = RTA_DATA (rta);
130738 + size_t rta_payload = RTA_PAYLOAD (rta);
130740 + switch (rta->rta_type)
130742 + case IFA_ADDRESS:
130744 + struct sockaddr *sa;
130746 + if (ifas[ifa_index].ifa.ifa_addr != NULL)
130748 + /* In a point-to-poing network IFA_ADDRESS
130749 + contains the destination address, local
130750 + address is supplied in IFA_LOCAL attribute.
130751 + destination address and broadcast address
130752 + are stored in an union, so it doesn't matter
130753 + which name we use. */
130754 + ifas[ifa_index].ifa.ifa_broadaddr
130755 + = &ifas[ifa_index].broadaddr.sa;
130756 + sa = &ifas[ifa_index].broadaddr.sa;
130758 + else
130760 + ifas[ifa_index].ifa.ifa_addr
130761 + = &ifas[ifa_index].addr.sa;
130762 + sa = &ifas[ifa_index].addr.sa;
130765 + sa->sa_family = ifam->ifa_family;
130767 + switch (ifam->ifa_family)
130769 + case AF_INET:
130770 + memcpy (&((struct sockaddr_in *) sa)->sin_addr,
130771 + rta_data, rta_payload);
130772 + break;
130774 + case AF_INET6:
130775 + memcpy (&((struct sockaddr_in6 *) sa)->sin6_addr,
130776 + rta_data, rta_payload);
130777 + if (IN6_IS_ADDR_LINKLOCAL (rta_data) ||
130778 + IN6_IS_ADDR_MC_LINKLOCAL (rta_data))
130779 + ((struct sockaddr_in6 *) sa)->sin6_scope_id =
130780 + ifam->ifa_scope;
130781 + break;
130783 + default:
130784 + memcpy (sa->sa_data, rta_data, rta_payload);
130785 + break;
130788 + break;
130790 + case IFA_LOCAL:
130791 + if (ifas[ifa_index].ifa.ifa_addr != NULL)
130793 + /* If ifa_addr is set and we get IFA_LOCAL,
130794 + assume we have a point-to-point network.
130795 + Move address to correct field. */
130796 + ifas[ifa_index].broadaddr = ifas[ifa_index].addr;
130797 + ifas[ifa_index].ifa.ifa_broadaddr
130798 + = &ifas[ifa_index].broadaddr.sa;
130799 + memset (&ifas[ifa_index].addr, '\0',
130800 + sizeof (ifas[ifa_index].addr));
130803 + ifas[ifa_index].ifa.ifa_addr = &ifas[ifa_index].addr.sa;
130804 + ifas[ifa_index].ifa.ifa_addr->sa_family
130805 + = ifam->ifa_family;
130807 + switch (ifam->ifa_family)
130809 + case AF_INET:
130810 + memcpy (&ifas[ifa_index].addr.s4.sin_addr,
130811 + rta_data, rta_payload);
130812 + break;
130814 + case AF_INET6:
130815 + memcpy (&ifas[ifa_index].addr.s6.sin6_addr,
130816 + rta_data, rta_payload);
130817 + if (IN6_IS_ADDR_LINKLOCAL (rta_data) ||
130818 + IN6_IS_ADDR_MC_LINKLOCAL (rta_data))
130819 + ifas[ifa_index].addr.s6.sin6_scope_id =
130820 + ifam->ifa_scope;
130821 + break;
130823 + default:
130824 + memcpy (ifas[ifa_index].addr.sa.sa_data,
130825 + rta_data, rta_payload);
130826 + break;
130828 + break;
130830 + case IFA_BROADCAST:
130831 + /* We get IFA_BROADCAST, so IFA_LOCAL was too much. */
130832 + if (ifas[ifa_index].ifa.ifa_broadaddr != NULL)
130833 + memset (&ifas[ifa_index].broadaddr, '\0',
130834 + sizeof (ifas[ifa_index].broadaddr));
130836 + ifas[ifa_index].ifa.ifa_broadaddr
130837 + = &ifas[ifa_index].broadaddr.sa;
130838 + ifas[ifa_index].ifa.ifa_broadaddr->sa_family
130839 + = ifam->ifa_family;
130841 + switch (ifam->ifa_family)
130843 + case AF_INET:
130844 + memcpy (&ifas[ifa_index].broadaddr.s4.sin_addr,
130845 + rta_data, rta_payload);
130846 + break;
130848 + case AF_INET6:
130849 + memcpy (&ifas[ifa_index].broadaddr.s6.sin6_addr,
130850 + rta_data, rta_payload);
130851 + if (IN6_IS_ADDR_LINKLOCAL (rta_data) ||
130852 + IN6_IS_ADDR_MC_LINKLOCAL (rta_data))
130853 + ifas[ifa_index].broadaddr.s6.sin6_scope_id =
130854 + ifam->ifa_scope;
130855 + break;
130857 + default:
130858 + memcpy (&ifas[ifa_index].broadaddr.sa.sa_data,
130859 + rta_data, rta_payload);
130860 + break;
130862 + break;
130864 + case IFA_LABEL:
130865 + if (rta_payload + 1 <= sizeof (ifas[ifa_index].name))
130867 + ifas[ifa_index].ifa.ifa_name = ifas[ifa_index].name;
130868 + strncpy (ifas[ifa_index].name, rta_data,
130869 + rta_payload);
130870 + ifas[ifa_index].name[rta_payload] = '\0';
130872 + else
130873 + abort ();
130874 + break;
130876 + case IFA_UNSPEC:
130877 + break;
130878 + case IFA_CACHEINFO:
130879 + break;
130880 + default:
130881 + break;
130884 + rta = RTA_NEXT (rta, rtasize);
130887 + /* If we didn't get the interface name with the
130888 + address, use the name from the interface entry. */
130889 + if (ifas[ifa_index].ifa.ifa_name == NULL)
130890 + ifas[ifa_index].ifa.ifa_name
130891 + = ifas[map_newlink (ifam->ifa_index - 1,
130892 + map_newlink_data, newlink)].ifa.ifa_name;
130894 + /* Calculate the netmask. */
130895 + if (ifas[ifa_index].ifa.ifa_addr
130896 + && ifas[ifa_index].ifa.ifa_addr->sa_family != AF_UNSPEC
130897 + && ifas[ifa_index].ifa.ifa_addr->sa_family != AF_PACKET)
130899 + uint32_t max_prefixlen = 0;
130900 + char *cp = NULL;
130902 + ifas[ifa_index].ifa.ifa_netmask
130903 + = &ifas[ifa_index].netmask.sa;
130905 + switch (ifas[ifa_index].ifa.ifa_addr->sa_family)
130907 + case AF_INET:
130908 + cp = (char *) &ifas[ifa_index].netmask.s4.sin_addr;
130909 + max_prefixlen = 32;
130910 + break;
130912 + case AF_INET6:
130913 + cp = (char *) &ifas[ifa_index].netmask.s6.sin6_addr;
130914 + max_prefixlen = 128;
130915 + break;
130918 + ifas[ifa_index].ifa.ifa_netmask->sa_family
130919 + = ifas[ifa_index].ifa.ifa_addr->sa_family;
130921 + if (cp != NULL)
130923 + char c;
130924 + unsigned int preflen;
130926 + if ((max_prefixlen > 0) &&
130927 + (ifam->ifa_prefixlen > max_prefixlen))
130928 + preflen = max_prefixlen;
130929 + else
130930 + preflen = ifam->ifa_prefixlen;
130932 + for (i = 0; i < (preflen / 8); i++)
130933 + *cp++ = 0xff;
130934 + c = 0xff;
130935 + c <<= (8 - (preflen % 8));
130936 + *cp = c;
130943 + free_netlink_handle (&nh);
130945 + netlink_close (&nh);
130947 + if (ifap != NULL)
130948 + *ifap = &ifas[0].ifa;
130950 + return 0;
130954 +#if __ASSUME_NETLINK_SUPPORT != 0
130955 +void
130956 +freeifaddrs (struct ifaddrs *ifa)
130958 + free (ifa);
130960 +#endif
130961 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/kernel-features.h
130962 --- glibc-2.3.2/sysdeps/unix/sysv/linux/kernel-features.h Thu Feb 20 23:11:52 2003
130963 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/kernel-features.h Sat Mar 29 08:24:55 2003
130964 @@ -1,6 +1,6 @@
130965 /* Set flags signalling availability of kernel features based on given
130966 kernel version number.
130967 - Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
130968 + Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
130969 This file is part of the GNU C Library.
130971 The GNU C Library is free software; you can redistribute it and/or
130972 @@ -229,8 +229,8 @@
130973 # define __ASSUME_SET_THREAD_AREA_SYSCALL 1
130974 #endif
130976 -/* The vfork syscall on x86 was definitely available in 2.4. */
130977 -#if __LINUX_KERNEL_VERSION >= 132097 && defined __i386__
130978 +/* The vfork syscall on x86 and arm was definitely available in 2.4. */
130979 +#if __LINUX_KERNEL_VERSION >= 132097 && (defined __i386__ || defined __arm__)
130980 # define __ASSUME_VFORK_SYSCALL 1
130981 #endif
130983 @@ -264,3 +264,24 @@
130984 # define __ASSUME_FCNTL64 1
130985 # define __ASSUME_VFORK_SYSCALL 1
130986 #endif
130988 +/* Beginning with 2.5.63 support for realtime and monotonic clocks and
130989 + timers based on them is available. */
130990 +#if __LINUX_KERNEL_VERSION >= 132415
130991 +# define __ASSUME_POSIX_TIMERS 1
130992 +#endif
130994 +/* The late 2.5 kernels saw a lot of new CLONE_* flags. Summarize
130995 + their availability with one define. The changes were made first
130996 + for i386 and the have to be done separately for the other archs.
130997 + For ia64, s390*, PPC we pick 2.5.64 as the first version with support. */
130998 +#if __LINUX_KERNEL_VERSION >= 132416 \
130999 + && (defined __ia64__ || defined __s390__ || defined __powerpc__)
131000 +# define __ASSUME_CLONE_THREAD_FLAGS 1
131001 +#endif
131003 +/* With kernel 2.4.17 we always have netlink support. */
131004 +#if __LINUX_KERNEL_VERSION >= (132096+17)
131005 +# define __ASSUME_NETLINK_SUPPORT 1
131006 +#endif
131008 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/linux_fsinfo.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/linux_fsinfo.h
131009 --- glibc-2.3.2/sysdeps/unix/sysv/linux/linux_fsinfo.h Wed Oct 23 08:21:19 2002
131010 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/linux_fsinfo.h Fri Mar 14 07:25:31 2003
131011 @@ -1,5 +1,5 @@
131012 /* Constants from kernel header for various FSes.
131013 - Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
131014 + Copyright (C) 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc.
131015 This file is part of the GNU C Library.
131017 The GNU C Library is free software; you can redistribute it and/or
131018 @@ -40,6 +40,9 @@
131019 /* Constants that identify the `coherent' filesystem. */
131020 #define COH_SUPER_MAGIC 0x012ff7b7
131022 +/* Constant that identifies the `ramfs' filesystem. */
131023 +#define CRAMFS_MAGIC 0x28cd3d45
131025 /* Constant that identifies the `devfs' filesystem. */
131026 #define DEVFS_SUPER_MAGIC 0x1373
131028 @@ -48,6 +51,7 @@
131030 /* Constant that identifies the `efs' filesystem. */
131031 #define EFS_SUPER_MAGIC 0x414A53
131032 +#define EFS_MAGIC 0x072959
131034 /* Constant that identifies the `ext2' and `ext3' filesystems. */
131035 #define EXT2_SUPER_MAGIC 0xef53
131036 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/m68k/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/m68k/bits/mman.h
131037 --- glibc-2.3.2/sysdeps/unix/sysv/linux/m68k/bits/mman.h Thu Feb 20 21:33:25 2003
131038 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/m68k/bits/mman.h Mon Mar 3 10:58:55 2003
131039 @@ -52,11 +52,13 @@
131041 /* These are Linux-specific. */
131042 #ifdef __USE_MISC
131043 -# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
131044 -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
131045 -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
131046 -# define MAP_LOCKED 0x2000 /* Lock the mapping. */
131047 -# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
131048 +# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
131049 +# define MAP_DENYWRITE 0x00800 /* ETXTBSY */
131050 +# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
131051 +# define MAP_LOCKED 0x02000 /* Lock the mapping. */
131052 +# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
131053 +# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
131054 +# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
131055 #endif
131057 /* Flags to `msync'. */
131058 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/m68k/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/m68k/sysdep.h
131059 --- glibc-2.3.2/sysdeps/unix/sysv/linux/m68k/sysdep.h Thu Jan 9 03:54:57 2003
131060 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/m68k/sysdep.h Wed Mar 26 00:15:40 2003
131061 @@ -68,6 +68,18 @@
131062 SYSCALL_ERROR_HANDLER; \
131063 END (name)
131065 +#undef PSEUDO_NOERRNO
131066 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
131067 + .text; \
131068 + ENTRY (name) \
131069 + DO_CALL (syscall_name, args)
131071 +#undef PSEUDO_END_NOERRNO
131072 +#define PSEUDO_END_NOERRNO(name) \
131073 + END (name)
131075 +#define ret_NOERRNO ret
131077 #ifdef PIC
131078 # if RTLD_PRIVATE_ERRNO
131079 # define SYSCALL_ERROR_HANDLER \
131080 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/Makefile glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/Makefile
131081 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/Makefile Fri Mar 29 00:41:51 2002
131082 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/Makefile Mon Mar 17 16:50:05 2003
131083 @@ -8,4 +8,43 @@
131084 sysdep_routines += cachectl cacheflush sysmips _test_and_set
131086 sysdep_headers += sys/cachectl.h sys/sysmips.h sys/tas.h
131088 +no_syscall_list_h = 1
131090 +# Generate the list of SYS_* macros for the system calls (__NR_* macros).
131091 +# We generate not only SYS_<syscall>, pointing at SYS_<abi>_<syscall> if
131092 +# it exists, but also define SYS_<abi>_<syscall> for all ABIs.
131093 +$(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/mips/sys/syscall.h
131094 + rm -f $(@:.h=.d)-t
131095 + { \
131096 + echo '/* Generated at libc build time from kernel syscall list. */';\
131097 + echo ''; \
131098 + echo '#ifndef _SYSCALL_H'; \
131099 + echo '# error "Never use <bits/syscall.h> directly; include <sys/syscall.h> instead."'; \
131100 + echo '#endif'; \
131101 + echo ''; \
131102 + rm -f $(@:.d=.h).newt; \
131103 + SUNPRO_DEPENDENCIES='$(@:.h=.d)-t $@' \
131104 + $(CC) -E -x c -I $(common-objdir) $(sysincludes) $< -D_LIBC -dM | \
131105 + sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' > $(@:.d=.h).newt; \
131106 + if grep SYS_O32_ $(@:.d=.h).newt > /dev/null; then \
131107 + echo '#if defined _ABI64 && _MIPS_SIM == _ABI64'; \
131108 + sed -n 's/^\(#define SYS_\)N64_/\1/p' < $(@:.d=.h).newt; \
131109 + echo '#elif defined _ABIN32 && _MIPS_SIM == _ABIN32'; \
131110 + sed -n 's/^\(#define SYS_\)N32_/\1/p' < $(@:.d=.h).newt; \
131111 + echo '#else'; \
131112 + sed -n 's/^\(#define SYS_\)O32_/\1/p' < $(@:.d=.h).newt; \
131113 + echo '#endif'; \
131114 + sed -n '/^#define SYS_\([ON]32\|N64\)_/p' < $(@:.d=.h).newt; \
131115 + else \
131116 + cat $(@:.d=.h).newt; \
131117 + fi; \
131118 + rm $(@:.d=.h).newt; \
131119 + } > $(@:.d=.h).new
131120 + mv -f $(@:.d=.h).new $(@:.d=.h)
131121 + sed < $(@:.h=.d)-t > $(@:.h=.d)-t2 \
131122 + -e 's,$(subst .,\.,$@),$(patsubst $(objpfx)%,$$(objpfx)%,\
131123 + $(@:.d=.h) $(@:.h=.d)),'
131124 + rm -f $(@:.h=.d)-t
131125 + mv -f $(@:.h=.d)-t2 $(@:.h=.d)
131126 endif
131127 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/bits/mman.h
131128 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/bits/mman.h Sat Jul 7 21:21:35 2001
131129 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/bits/mman.h Fri Mar 7 10:46:33 2003
131130 @@ -1,5 +1,5 @@
131131 /* Definitions for POSIX memory map interface. Linux/MIPS version.
131132 - Copyright (C) 1997, 2000 Free Software Foundation, Inc.
131133 + Copyright (C) 1997, 2000, 2003 Free Software Foundation, Inc.
131134 This file is part of the GNU C Library.
131136 The GNU C Library is free software; you can redistribute it and/or
131137 @@ -59,6 +59,8 @@
131138 # define MAP_DENYWRITE 0x2000 /* ETXTBSY */
131139 # define MAP_EXECUTABLE 0x4000 /* mark it as an executable */
131140 # define MAP_LOCKED 0x8000 /* pages are locked */
131141 +# define MAP_POPULATE 0x10000 /* populate (prefault) pagetables */
131142 +# define MAP_NONBLOCK 0x20000 /* do not block on IO */
131143 #endif
131145 /* Flags to `msync'. */
131146 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/bits/sigaction.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/bits/sigaction.h
131147 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/bits/sigaction.h Sat Jul 7 21:21:35 2001
131148 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/bits/sigaction.h Tue Mar 25 22:51:52 2003
131149 @@ -1,5 +1,6 @@
131150 /* The proper definitions for Linux/MIPS's sigaction.
131151 - Copyright (C) 1993,94,95,97,98,99,2000 Free Software Foundation, Inc.
131152 + Copyright (C) 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2003
131153 + Free Software Foundation, Inc.
131154 This file is part of the GNU C Library.
131156 The GNU C Library is free software; you can redistribute it and/or
131157 @@ -49,7 +50,7 @@
131158 /* Restore handler. */
131159 void (*sa_restorer) (void);
131161 -#if _MIPS_ISA == _MIPS_ISA_MIPS1 || _MIPS_ISA == _MIPS_ISA_MIPS2
131162 +#if _MIPS_SZPTR < 64
131163 int sa_resv[1];
131164 #endif
131166 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/clone.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/clone.S
131167 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/clone.S Sat Jul 7 21:21:35 2001
131168 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/clone.S Sat Mar 29 09:01:57 2003
131169 @@ -1,6 +1,6 @@
131170 -/* Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
131171 +/* Copyright (C) 1996, 1997, 2000, 2003 Free Software Foundation, Inc.
131172 This file is part of the GNU C Library.
131173 - Contributed by Ralf Baechle <ralf@gnu.ai.mit.edu>, 1996.
131174 + Contributed by Ralf Baechle <ralf@linux-mips.org>, 1996.
131176 The GNU C Library is free software; you can redistribute it and/or
131177 modify it under the terms of the GNU Lesser General Public
131178 @@ -21,7 +21,6 @@
131179 and invokes a function in the right context after its all over. */
131181 #include <sys/asm.h>
131182 -#include <asm/unistd.h>
131183 #include <sysdep.h>
131184 #define _ERRNO_H 1
131185 #include <bits/errno.h>
131186 @@ -29,15 +28,17 @@
131187 /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) */
131189 .text
131190 +LOCALSZ= 1
131191 +FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
131192 +GPOFF= FRAMESZ-(1*SZREG)
131193 NESTED(__clone,4*SZREG,sp)
131194 #ifdef __PIC__
131195 - .set noreorder
131196 - .cpload $25
131197 - .set reorder
131198 - subu sp,32
131199 - .cprestore 16
131200 -#else
131201 - subu sp,32
131202 + SETUP_GP
131203 +#endif
131204 + PTR_SUBU sp, FRAMESZ
131205 + SETUP_GP64 (GPOFF, __clone)
131206 +#ifdef __PIC__
131207 + SAVE_GP (GPOFF)
131208 #endif
131209 #ifdef PROF
131210 .set noat
131211 @@ -49,12 +50,12 @@
131213 /* Sanity check arguments. */
131214 li v0,EINVAL
131215 - beqz a0,error /* No NULL function pointers. */
131216 - beqz a1,error /* No NULL stack pointers. */
131217 + beqz a0,L(error) /* No NULL function pointers. */
131218 + beqz a1,L(error) /* No NULL stack pointers. */
131220 - subu a1,32 /* Reserve argument save space. */
131221 - sw a0,0(a1) /* Save function pointer. */
131222 - sw a3,4(a1) /* Save argument pointer. */
131223 + PTR_SUBU a1,32 /* Reserve argument save space. */
131224 + PTR_S a0,0(a1) /* Save function pointer. */
131225 + PTR_S a3,PTRSIZE(a1) /* Save argument pointer. */
131228 /* Do the system call */
131229 @@ -62,20 +63,24 @@
131230 li v0,__NR_clone
131231 syscall
131233 - bnez a3,error
131234 - beqz v0,__thread_start
131235 + bnez a3,L(error)
131236 + beqz v0,L(thread_start)
131238 /* Successful return from the parent */
131239 - addiu sp,32
131240 + RESTORE_GP64
131241 + PTR_ADDU sp, FRAMESZ
131244 /* Something bad happened -- no child created */
131245 -error:
131246 - addiu sp,32
131247 +L(error):
131248 #ifdef __PIC__
131249 - la t9,__syscall_error
131250 + PTR_LA t9,__syscall_error
131251 + RESTORE_GP64
131252 + PTR_ADDU sp, FRAMESZ
131253 jr t9
131254 #else
131255 + RESTORE_GP64
131256 + PTR_ADDU sp, FRAMESZ
131257 j __syscall_error
131258 #endif
131259 END(__clone)
131260 @@ -85,20 +90,21 @@
131261 debug info. */
131263 ENTRY(__thread_start)
131264 +L(thread_start):
131265 /* cp is already loaded. */
131266 - .cprestore 16
131267 + SAVE_GP (GPOFF)
131268 /* The stackframe has been created on entry of clone(). */
131269 /* Restore the arg for user's function. */
131270 - lw t9,0(sp) /* Function pointer. */
131271 - lw a0,4(sp) /* Argument pointer. */
131272 + PTR_L t9,0(sp) /* Function pointer. */
131273 + PTR_L a0,PTRSIZE(sp) /* Argument pointer. */
131275 /* Call the user's function. */
131276 - jalr t9
131277 + jal t9
131279 /* Call _exit rather than doing it inline for breakpoint purposes. */
131280 move a0,v0
131281 #ifdef __PIC__
131282 - la t9,_exit
131283 + PTR_LA t9,_exit
131284 jalr t9
131285 #else
131286 jal _exit
131287 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/configure glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/configure
131288 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/configure Thu Jan 1 01:00:00 1970
131289 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/configure Fri Mar 28 07:11:03 2003
131290 @@ -0,0 +1,75 @@
131291 +# This file is generated from configure.in by Autoconf. DO NOT EDIT!
131292 + # Local configure fragment for sysdeps/unix/sysv/linux/mips.
131294 +case $machine in
131295 +mips*64*)
131296 + rm -f asm-unistd.h
131297 + asm_unistd_h=$sysheaders/asm/unistd.h
131298 + if test ! -f $asm_unistd_h; then
131299 + # Try to find asm/unistd.h in compiler header search path.
131300 + try_asm_unistd_h=`echo '#include <asm/unistd.h>' | $CPP - |
131301 + sed -n '/^# 1 "\(\/[^"]*\)".*/{s,,\1,p;q;}'`
131302 + if test -n "$try_asm_unistd_h" &&
131303 + test -f "$try_asm_unistd_h"; then
131304 + asm_unistd_h=$try_asm_unistd_h
131307 + if test ! -f "$asm_unistd_h"; then
131308 + { echo "$as_me:$LINENO: WARNING: *** asm/unistd.h not found, it will not be pre-processed" >&5
131309 +echo "$as_me: WARNING: *** asm/unistd.h not found, it will not be pre-processed" >&2;}
131310 + echo '#include <asm/unistd.h>' > asm-unistd.h
131311 + else
131312 + # The point of this preprocessing is to turn __NR_<syscall> into
131313 + # __NR_N64_<syscall>, as well as to define __NR_<syscall> to
131314 + # __NR_<abi>_<syscall>, if __NR_<abi>_<syscall> is defined
131315 + # and <abi> is the compiler-enabled ABI.
131316 + cat "$asm_unistd_h" |
131317 + sed -e 's,__NR_,__NR_N64_,g' \
131318 + -e 's,__NR_N64_##,__NR_##,g' \
131319 + -e 's,__NR_N64_O32_,__NR_O32_,g' \
131320 + -e 's,__NR_N64_N32_,__NR_N32_,g' \
131321 + -e 's,__NR_N64_N64_,__NR_N64_,g' \
131322 + | awk > asm-unistd.h '
131323 +/^#define __NR.*unused/ { print; next; }
131324 +/^#define __NR_N64__exit __NR_N64_exit/ {
131325 + print "#define __NR__exit __NR_exit";
131326 + print "#define __NR_O32__exit __NR_O32_exit";
131327 + print "#define __NR_N32__exit __NR_N32_exit";
131328 + print; next;
131330 +/^#define __NR_O32_/ {
131331 + name = $2;
131332 + sub (/_O32_/, "_", name);
131333 + print;
131334 + print "#if _MIPS_SIM == _MIPS_SIM_ABI32";
131335 + print "# define " name " " $2;
131336 + print "#endif";
131337 + next;
131339 +/^#define __NR_N32_/ {
131340 + name = $2;
131341 + sub (/_N32_/, "_", name);
131342 + print;
131343 + print "#if defined _ABIN32 && _MIPS_SIM == _ABIN32";
131344 + print "# define " name " " $2;
131345 + print "#endif";
131346 + next;
131348 +/^#define __NR_N64_/ {
131349 + name = $2;
131350 + sub (/_N64_/, "_", name);
131351 + print;
131352 + print "#if defined _ABI64 && _MIPS_SIM == _ABI64";
131353 + print "# define " name " " $2;
131354 + print "#endif";
131355 + next;
131358 + print;
131360 + fi ;;
131361 +mips*)
131362 + rm -f asm-unistd.h
131363 + echo '#include <asm/unistd.h>' > asm-unistd.h
131365 +esac
131366 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/configure.in glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/configure.in
131367 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/configure.in Thu Jan 1 01:00:00 1970
131368 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/configure.in Mon Mar 17 16:50:05 2003
131369 @@ -0,0 +1,75 @@
131370 +sinclude(./aclocal.m4)dnl Autoconf lossage
131371 +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
131372 +# Local configure fragment for sysdeps/unix/sysv/linux/mips.
131374 +case $machine in
131375 +mips*64*)
131376 + rm -f asm-unistd.h
131377 + asm_unistd_h=$sysheaders/asm/unistd.h
131378 + if test ! -f $asm_unistd_h; then
131379 + # Try to find asm/unistd.h in compiler header search path.
131380 + try_asm_unistd_h=`echo '#include <asm/unistd.h>' | $CPP - |
131381 + sed -n '/^# 1 "\(\/[^"]*\)".*/{s,,\1,p;q;}'`
131382 + if test -n "$try_asm_unistd_h" &&
131383 + test -f "$try_asm_unistd_h"; then
131384 + asm_unistd_h=$try_asm_unistd_h
131387 + if test ! -f "$asm_unistd_h"; then
131388 + AC_MSG_WARN([*** asm/unistd.h not found, it will not be pre-processed])
131389 + echo '#include <asm/unistd.h>' > asm-unistd.h
131390 + else
131391 + # The point of this preprocessing is to turn __NR_<syscall> into
131392 + # __NR_N64_<syscall>, as well as to define __NR_<syscall> to
131393 + # __NR_<abi>_<syscall>, if __NR_<abi>_<syscall> is defined
131394 + # and <abi> is the compiler-enabled ABI.
131395 + cat "$asm_unistd_h" |
131396 + sed -e 's,__NR_,__NR_N64_,g' \
131397 + -e 's,__NR_N64_##,__NR_##,g' \
131398 + -e 's,__NR_N64_O32_,__NR_O32_,g' \
131399 + -e 's,__NR_N64_N32_,__NR_N32_,g' \
131400 + -e 's,__NR_N64_N64_,__NR_N64_,g' \
131401 + | awk > asm-unistd.h '
131402 +/^#define __NR.*unused/ { print; next; }
131403 +/^#define __NR_N64__exit __NR_N64_exit/ {
131404 + print "#define __NR__exit __NR_exit";
131405 + print "#define __NR_O32__exit __NR_O32_exit";
131406 + print "#define __NR_N32__exit __NR_N32_exit";
131407 + print; next;
131409 +/^#define __NR_O32_/ {
131410 + name = $2;
131411 + sub (/_O32_/, "_", name);
131412 + print;
131413 + print "#if _MIPS_SIM == _MIPS_SIM_ABI32";
131414 + print "# define " name " " $2;
131415 + print "#endif";
131416 + next;
131418 +/^#define __NR_N32_/ {
131419 + name = $2;
131420 + sub (/_N32_/, "_", name);
131421 + print;
131422 + print "#if defined _ABIN32 && _MIPS_SIM == _ABIN32";
131423 + print "# define " name " " $2;
131424 + print "#endif";
131425 + next;
131427 +/^#define __NR_N64_/ {
131428 + name = $2;
131429 + sub (/_N64_/, "_", name);
131430 + print;
131431 + print "#if defined _ABI64 && _MIPS_SIM == _ABI64";
131432 + print "# define " name " " $2;
131433 + print "#endif";
131434 + next;
131437 + print;
131439 + fi ;;
131440 +mips*)
131441 + rm -f asm-unistd.h
131442 + echo '#include <asm/unistd.h>' > asm-unistd.h
131444 +esac
131445 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h
131446 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h Fri Dec 15 07:05:44 2000
131447 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h Tue Mar 25 22:51:53 2003
131448 @@ -12,7 +12,7 @@
131450 /* Abi says here follows reserved int[2] */
131451 void (*sa_restorer)(void);
131452 -#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2)
131453 +#if (_MIPS_SZPTR < 64)
131455 * For 32 bit code we have to pad struct sigaction to get
131456 * constant size for the ABI
131457 @@ -23,7 +23,7 @@
131460 #define _KERNEL_NSIG 128
131461 -#define _KERNEL_NSIG_BPW 32
131462 +#define _KERNEL_NSIG_BPW _MIPS_SZLONG
131463 #define _KERNEL_NSIG_WORDS (_KERNEL_NSIG / _KERNEL_NSIG_BPW)
131465 typedef struct {
131466 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/kernel_stat.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/kernel_stat.h
131467 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/kernel_stat.h Mon Nov 20 09:45:43 2000
131468 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/kernel_stat.h Mon Mar 17 16:47:13 2003
131469 @@ -1,4 +1,28 @@
131470 /* Definition of `struct stat' used in the kernel.. */
131471 +#if defined _ABI64 && _MIPS_SIM == _ABI64
131472 +struct kernel_stat
131474 + unsigned int st_dev;
131475 + unsigned int __pad1[3];
131476 + unsigned long st_ino;
131477 + unsigned int st_mode;
131478 + unsigned int st_nlink;
131479 + int st_uid;
131480 + int st_gid;
131481 + unsigned int st_rdev;
131482 + unsigned int __pad2[3];
131483 + long st_size;
131484 + unsigned int st_atime;
131485 + unsigned int __unused1;
131486 + unsigned int st_mtime;
131487 + unsigned int __unused2;
131488 + unsigned int st_ctime;
131489 + unsigned int __unused3;
131490 + unsigned int st_blksize;
131491 + unsigned int __pad3;
131492 + unsigned long st_blocks;
131494 +#else
131495 struct kernel_stat
131497 unsigned long int st_dev;
131498 @@ -26,3 +50,4 @@
131499 unsigned int st_flags;
131500 unsigned int st_gen;
131502 +#endif
131503 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h
131504 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h Thu Jan 1 01:00:00 1970
131505 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h Sat Mar 29 09:15:29 2003
131506 @@ -0,0 +1,36 @@
131507 +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
131508 + This file is part of the GNU C Library.
131510 + The GNU C Library is free software; you can redistribute it and/or
131511 + modify it under the terms of the GNU Lesser General Public
131512 + License as published by the Free Software Foundation; either
131513 + version 2.1 of the License, or (at your option) any later version.
131515 + The GNU C Library is distributed in the hope that it will be useful,
131516 + but WITHOUT ANY WARRANTY; without even the implied warranty of
131517 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
131518 + Lesser General Public License for more details.
131520 + You should have received a copy of the GNU Lesser General Public
131521 + License along with the GNU C Library; if not, write to the Free
131522 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
131523 + 02111-1307 USA. */
131525 +#ifndef _LINUX_MIPS_MIPS32_KERN64_SYSDEP_H
131526 +#define _LINUX_MIPS_MIPS32_KERN64_SYSDEP_H 1
131528 +/* There is some commonality. */
131529 +#include <sysdeps/unix/sysv/linux/mips/mips32/sysdep.h>
131531 +/* For Linux we can use the system call table in the header file
131532 + /usr/include/asm/unistd.h
131533 + of the kernel. But these symbols do not follow the SYS_* syntax
131534 + so we have to redefine the `SYS_ify' macro here. */
131535 +#undef SYS_ify
131536 +#ifdef __STDC__
131537 +# define SYS_ify(syscall_name) __NR_O32_##syscall_name
131538 +#else
131539 +# define SYS_ify(syscall_name) __NR_O32_/**/syscall_name
131540 +#endif
131542 +#endif /* linux/mips/mips32/kern64/sysdep.h */
131543 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
131544 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h Thu Jan 1 01:00:00 1970
131545 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h Sat Mar 29 09:15:29 2003
131546 @@ -0,0 +1,282 @@
131547 +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
131548 + This file is part of the GNU C Library.
131550 + The GNU C Library is free software; you can redistribute it and/or
131551 + modify it under the terms of the GNU Lesser General Public
131552 + License as published by the Free Software Foundation; either
131553 + version 2.1 of the License, or (at your option) any later version.
131555 + The GNU C Library is distributed in the hope that it will be useful,
131556 + but WITHOUT ANY WARRANTY; without even the implied warranty of
131557 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
131558 + Lesser General Public License for more details.
131560 + You should have received a copy of the GNU Lesser General Public
131561 + License along with the GNU C Library; if not, write to the Free
131562 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
131563 + 02111-1307 USA. */
131565 +#ifndef _LINUX_MIPS_MIPS32_SYSDEP_H
131566 +#define _LINUX_MIPS_MIPS32_SYSDEP_H 1
131568 +/* There is some commonality. */
131569 +#include <sysdeps/unix/mips/mips32/sysdep.h>
131571 +/* For Linux we can use the system call table in the header file
131572 + /usr/include/asm/unistd.h
131573 + of the kernel. But these symbols do not follow the SYS_* syntax
131574 + so we have to redefine the `SYS_ify' macro here. */
131575 +#undef SYS_ify
131576 +#ifdef __STDC__
131577 +# define SYS_ify(syscall_name) __NR_##syscall_name
131578 +#else
131579 +# define SYS_ify(syscall_name) __NR_/**/syscall_name
131580 +#endif
131582 +#ifdef __ASSEMBLER__
131584 +/* We don't want the label for the error handler to be visible in the symbol
131585 + table when we define it here. */
131586 +#ifdef __PIC__
131587 +# define SYSCALL_ERROR_LABEL 99b
131588 +#endif
131590 +#else /* ! __ASSEMBLER__ */
131592 +/* Define a macro which expands into the inline wrapper code for a system
131593 + call. */
131594 +#undef INLINE_SYSCALL
131595 +#define INLINE_SYSCALL(name, nr, args...) \
131596 + ({ INTERNAL_SYSCALL_DECL(err); \
131597 + long result_var = INTERNAL_SYSCALL (name, err, nr, args); \
131598 + if ( INTERNAL_SYSCALL_ERROR_P (result_var, err) ) \
131599 + { \
131600 + __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \
131601 + result_var = -1L; \
131602 + } \
131603 + result_var; })
131605 +#undef INTERNAL_SYSCALL_DECL
131606 +#define INTERNAL_SYSCALL_DECL(err) long err
131608 +#undef INTERNAL_SYSCALL_ERROR_P
131609 +#define INTERNAL_SYSCALL_ERROR_P(val, err) ((long) (err))
131611 +#undef INTERNAL_SYSCALL_ERRNO
131612 +#define INTERNAL_SYSCALL_ERRNO(val, err) (val)
131614 +#undef INTERNAL_SYSCALL
131615 +#define INTERNAL_SYSCALL(name, err, nr, args...) internal_syscall##nr(name, err, args)
131617 +#define internal_syscall0(name, err, dummy...) \
131618 +({ \
131619 + long _sys_result; \
131621 + { \
131622 + register long __v0 asm("$2"); \
131623 + register long __a3 asm("$7"); \
131624 + __asm__ volatile ( \
131625 + ".set\tnoreorder\n\t" \
131626 + "li\t$2, %2\t\t\t# " #name "\n\t" \
131627 + "syscall\n\t" \
131628 + ".set reorder" \
131629 + : "=r" (__v0), "=r" (__a3) \
131630 + : "i" (SYS_ify(name)) \
131631 + : __SYSCALL_CLOBBERS); \
131632 + err = __a3; \
131633 + _sys_result = __v0; \
131634 + } \
131635 + _sys_result; \
131638 +#define internal_syscall1(name, err, arg1) \
131639 +({ \
131640 + long _sys_result; \
131642 + { \
131643 + register long __v0 asm("$2"); \
131644 + register long __a0 asm("$4") = (long) arg1; \
131645 + register long __a3 asm("$7"); \
131646 + __asm__ volatile ( \
131647 + ".set\tnoreorder\n\t" \
131648 + "li\t$2, %3\t\t\t# " #name "\n\t" \
131649 + "syscall\n\t" \
131650 + ".set reorder" \
131651 + : "=r" (__v0), "=r" (__a3) \
131652 + : "r" (__a0), "i" (SYS_ify(name)) \
131653 + : __SYSCALL_CLOBBERS); \
131654 + err = __a3; \
131655 + _sys_result = __v0; \
131656 + } \
131657 + _sys_result; \
131660 +#define internal_syscall2(name, err, arg1, arg2) \
131661 +({ \
131662 + long _sys_result; \
131664 + { \
131665 + register long __v0 asm("$2"); \
131666 + register long __a0 asm("$4") = (long) arg1; \
131667 + register long __a1 asm("$5") = (long) arg2; \
131668 + register long __a3 asm("$7"); \
131669 + __asm__ volatile ( \
131670 + ".set\tnoreorder\n\t" \
131671 + "li\t$2, %4\t\t\t# " #name "\n\t" \
131672 + "syscall\n\t" \
131673 + ".set\treorder" \
131674 + : "=r" (__v0), "=r" (__a3) \
131675 + : "r" (__a0), "r" (__a1), "i" (SYS_ify(name)) \
131676 + : __SYSCALL_CLOBBERS); \
131677 + err = __a3; \
131678 + _sys_result = __v0; \
131679 + } \
131680 + _sys_result; \
131683 +#define internal_syscall3(name, err, arg1, arg2, arg3) \
131684 +({ \
131685 + long _sys_result; \
131687 + { \
131688 + register long __v0 asm("$2"); \
131689 + register long __a0 asm("$4") = (long) arg1; \
131690 + register long __a1 asm("$5") = (long) arg2; \
131691 + register long __a2 asm("$6") = (long) arg3; \
131692 + register long __a3 asm("$7"); \
131693 + __asm__ volatile ( \
131694 + ".set\tnoreorder\n\t" \
131695 + "li\t$2, %5\t\t\t# " #name "\n\t" \
131696 + "syscall\n\t" \
131697 + ".set\treorder" \
131698 + : "=r" (__v0), "=r" (__a3) \
131699 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
131700 + : __SYSCALL_CLOBBERS); \
131701 + err = __a3; \
131702 + _sys_result = __v0; \
131703 + } \
131704 + _sys_result; \
131707 +#define internal_syscall4(name, err, arg1, arg2, arg3, arg4) \
131708 +({ \
131709 + long _sys_result; \
131711 + { \
131712 + register long __v0 asm("$2"); \
131713 + register long __a0 asm("$4") = (long) arg1; \
131714 + register long __a1 asm("$5") = (long) arg2; \
131715 + register long __a2 asm("$6") = (long) arg3; \
131716 + register long __a3 asm("$7") = (long) arg4; \
131717 + __asm__ volatile ( \
131718 + ".set\tnoreorder\n\t" \
131719 + "li\t$2, %5\t\t\t# " #name "\n\t" \
131720 + "syscall\n\t" \
131721 + ".set\treorder" \
131722 + : "=r" (__v0), "+r" (__a3) \
131723 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
131724 + : __SYSCALL_CLOBBERS); \
131725 + err = __a3; \
131726 + _sys_result = __v0; \
131727 + } \
131728 + _sys_result; \
131731 +#define internal_syscall5(name, err, arg1, arg2, arg3, arg4, arg5) \
131732 +({ \
131733 + long _sys_result; \
131735 + { \
131736 + register long __v0 asm("$2"); \
131737 + register long __a0 asm("$4") = (long) arg1; \
131738 + register long __a1 asm("$5") = (long) arg2; \
131739 + register long __a2 asm("$6") = (long) arg3; \
131740 + register long __a3 asm("$7") = (long) arg4; \
131741 + __asm__ volatile ( \
131742 + ".set\tnoreorder\n\t" \
131743 + "lw\t$2, %6\n\t" \
131744 + "subu\t$29, 32\n\t" \
131745 + "sw\t$2, 16($29)\n\t" \
131746 + "li\t$2, %5\t\t\t# " #name "\n\t" \
131747 + "syscall\n\t" \
131748 + "addiu\t$29, 32\n\t" \
131749 + ".set\treorder" \
131750 + : "=r" (__v0), "+r" (__a3) \
131751 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
131752 + "m" ((long)arg5) \
131753 + : __SYSCALL_CLOBBERS); \
131754 + err = __a3; \
131755 + _sys_result = __v0; \
131756 + } \
131757 + _sys_result; \
131760 +#define internal_syscall6(name, err, arg1, arg2, arg3, arg4, arg5, arg6)\
131761 +({ \
131762 + long _sys_result; \
131764 + { \
131765 + register long __v0 asm("$2"); \
131766 + register long __a0 asm("$4") = (long) arg1; \
131767 + register long __a1 asm("$5") = (long) arg2; \
131768 + register long __a2 asm("$6") = (long) arg3; \
131769 + register long __a3 asm("$7") = (long) arg4; \
131770 + __asm__ volatile ( \
131771 + ".set\tnoreorder\n\t" \
131772 + "lw\t$2, %6\n\t" \
131773 + "lw\t$8, %7\n\t" \
131774 + "subu\t$29, 32\n\t" \
131775 + "sw\t$2, 16($29)\n\t" \
131776 + "sw\t$8, 20($29)\n\t" \
131777 + "li\t$2, %5\t\t\t# " #name "\n\t" \
131778 + "syscall\n\t" \
131779 + "addiu\t$29, 32\n\t" \
131780 + ".set\treorder" \
131781 + : "=r" (__v0), "+r" (__a3) \
131782 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
131783 + "m" ((long)arg5), "m" ((long)arg6) \
131784 + : __SYSCALL_CLOBBERS); \
131785 + err = __a3; \
131786 + _sys_result = __v0; \
131787 + } \
131788 + _sys_result; \
131791 +#define internal_syscall7(name, err, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\
131792 +({ \
131793 + long _sys_result; \
131795 + { \
131796 + register long __v0 asm("$2"); \
131797 + register long __a0 asm("$4") = (long) arg1; \
131798 + register long __a1 asm("$5") = (long) arg2; \
131799 + register long __a2 asm("$6") = (long) arg3; \
131800 + register long __a3 asm("$7") = (long) arg4; \
131801 + __asm__ volatile ( \
131802 + ".set\tnoreorder\n\t" \
131803 + "lw\t$2, %6\n\t" \
131804 + "lw\t$8, %7\n\t" \
131805 + "lw\t$9, %8\n\t" \
131806 + "subu\t$29, 32\n\t" \
131807 + "sw\t$2, 16($29)\n\t" \
131808 + "sw\t$8, 20($29)\n\t" \
131809 + "sw\t$9, 24($29)\n\t" \
131810 + "li\t$2, %5\t\t\t# " #name "\n\t" \
131811 + "syscall\n\t" \
131812 + "addiu\t$29, 32\n\t" \
131813 + ".set\treorder" \
131814 + : "=r" (__v0), "+r" (__a3) \
131815 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
131816 + "m" ((long)arg5), "m" ((long)arg6), "m" ((long)arg7) \
131817 + : __SYSCALL_CLOBBERS); \
131818 + err = __a3; \
131819 + _sys_result = __v0; \
131820 + } \
131821 + _sys_result; \
131824 +#define __SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25"
131826 +#endif /* __ASSEMBLER__ */
131828 +#endif /* linux/mips/mips32/sysdep.h */
131829 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/Dist glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/Dist
131830 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/Dist Thu Jan 1 01:00:00 1970
131831 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/Dist Mon Mar 17 16:57:19 2003
131832 @@ -0,0 +1 @@
131833 +ldd-rewrite.sed
131834 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h
131835 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h Thu Jan 1 01:00:00 1970
131836 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h Mon Mar 17 17:20:44 2003
131837 @@ -0,0 +1,26 @@
131838 +/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
131839 + This file is part of the GNU C Library.
131841 + The GNU C Library is free software; you can redistribute it and/or
131842 + modify it under the terms of the GNU Lesser General Public
131843 + License as published by the Free Software Foundation; either
131844 + version 2.1 of the License, or (at your option) any later version.
131846 + The GNU C Library is distributed in the hope that it will be useful,
131847 + but WITHOUT ANY WARRANTY; without even the implied warranty of
131848 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
131849 + Lesser General Public License for more details.
131851 + You should have received a copy of the GNU Lesser General Public
131852 + License along with the GNU C Library; if not, write to the Free
131853 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
131854 + 02111-1307 USA. */
131856 +#include <sysdeps/generic/ldconfig.h>
131858 +#define SYSDEP_KNOWN_INTERPRETER_NAMES \
131859 + { "/lib32/ld.so.1", FLAG_ELF_LIBC6 }, \
131860 + { "/lib64/ld.so.1", FLAG_ELF_LIBC6 },
131861 +#define SYSDEP_KNOWN_LIBRARY_NAMES \
131862 + { "libc.so.6", FLAG_ELF_LIBC6 }, \
131863 + { "libm.so.6", FLAG_ELF_LIBC6 },
131864 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed
131865 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed Thu Jan 1 01:00:00 1970
131866 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed Mon Mar 17 16:57:19 2003
131867 @@ -0,0 +1 @@
131868 +s_^\(RTLDLIST=\)\(.*lib\)\(\|32\|64\)\(/[^/]*\.so\.[0-9.]*\)[ ]*$_\1"\232\4 \264\4 \2\4"_
131869 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/llseek.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/llseek.c
131870 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/llseek.c Thu Jan 1 01:00:00 1970
131871 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/llseek.c Mon Mar 17 17:20:44 2003
131872 @@ -0,0 +1 @@
131873 +/* lseek() is 64-bit capable already. */
131874 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
131875 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h Thu Jan 1 01:00:00 1970
131876 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h Mon Mar 17 17:20:44 2003
131877 @@ -0,0 +1,263 @@
131878 +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
131879 + This file is part of the GNU C Library.
131881 + The GNU C Library is free software; you can redistribute it and/or
131882 + modify it under the terms of the GNU Lesser General Public
131883 + License as published by the Free Software Foundation; either
131884 + version 2.1 of the License, or (at your option) any later version.
131886 + The GNU C Library is distributed in the hope that it will be useful,
131887 + but WITHOUT ANY WARRANTY; without even the implied warranty of
131888 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
131889 + Lesser General Public License for more details.
131891 + You should have received a copy of the GNU Lesser General Public
131892 + License along with the GNU C Library; if not, write to the Free
131893 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
131894 + 02111-1307 USA. */
131896 +#ifndef _LINUX_MIPS_SYSDEP_H
131897 +#define _LINUX_MIPS_SYSDEP_H 1
131899 +/* There is some commonality. */
131900 +#include <sysdeps/unix/mips/mips64/n32/sysdep.h>
131902 +/* For Linux we can use the system call table in the header file
131903 + /usr/include/asm/unistd.h
131904 + of the kernel. But these symbols do not follow the SYS_* syntax
131905 + so we have to redefine the `SYS_ify' macro here. */
131906 +#undef SYS_ify
131907 +#ifdef __STDC__
131908 +# define SYS_ify(syscall_name) __NR_N32_##syscall_name
131909 +#else
131910 +# define SYS_ify(syscall_name) __NR_N32_/**/syscall_name
131911 +#endif
131914 +#ifndef __ASSEMBLER__
131915 +#if 0 /* untested */
131916 +/* Define a macro which expands into the inline wrapper code for a system
131917 + call. */
131918 +#undef INLINE_SYSCALL
131919 +#define INLINE_SYSCALL(name, nr, args...) \
131920 + ({ INTERNAL_SYSCALL_DECL(err); \
131921 + long result_var = INTERNAL_SYSCALL (name, err, nr, args); \
131922 + if ( INTERNAL_SYSCALL_ERROR_P (result_var, err) ) \
131923 + { \
131924 + __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \
131925 + result_var = -1L; \
131926 + } \
131927 + result_var; })
131929 +#undef INTERNAL_SYSCALL_DECL
131930 +#define INTERNAL_SYSCALL_DECL(err) long err
131932 +#undef INTERNAL_SYSCALL_ERROR_P
131933 +#define INTERNAL_SYSCALL_ERROR_P(val, err) ((long) (err))
131935 +#undef INTERNAL_SYSCALL_ERRNO
131936 +#define INTERNAL_SYSCALL_ERRNO(val, err) (val)
131938 +#undef INTERNAL_SYSCALL
131939 +#define INTERNAL_SYSCALL(name, err, nr, args...) internal_syscall##nr(name, err, args)
131941 +#define internal_syscall0(name, err, dummy...) \
131942 +({ \
131943 + long _sys_result; \
131945 + { \
131946 + register long __v0 asm("$2"); \
131947 + register long __a3 asm("$7"); \
131948 + __asm__ volatile ( \
131949 + ".set\tnoreorder\n\t" \
131950 + "li\t$2, %2\t\t\t# " #name "\n\t" \
131951 + "syscall\n\t" \
131952 + ".set reorder" \
131953 + : "=r" (__v0), "=r" (__a3) \
131954 + : "i" (SYS_ify(name)) \
131955 + : __SYSCALL_CLOBBERS); \
131956 + err = __a3; \
131957 + _sys_result = __v0; \
131958 + } \
131959 + _sys_result; \
131962 +#define internal_syscall1(name, err, arg1) \
131963 +({ \
131964 + long _sys_result; \
131966 + { \
131967 + register long long __v0 asm("$2"); \
131968 + register long long __a0 asm("$4") = (long long) arg1; \
131969 + register long long __a3 asm("$7"); \
131970 + __asm__ volatile ( \
131971 + ".set\tnoreorder\n\t" \
131972 + "li\t$2, %3\t\t\t# " #name "\n\t" \
131973 + "syscall\n\t" \
131974 + ".set reorder" \
131975 + : "=r" (__v0), "=r" (__a3) \
131976 + : "r" (__a0), "i" (SYS_ify(name)) \
131977 + : __SYSCALL_CLOBBERS); \
131978 + err = __a3; \
131979 + _sys_result = __v0; \
131980 + } \
131981 + _sys_result; \
131984 +#define internal_syscall2(name, err, arg1, arg2) \
131985 +({ \
131986 + long _sys_result; \
131988 + { \
131989 + register long long __v0 asm("$2"); \
131990 + register long long __a0 asm("$4") = (long long) arg1; \
131991 + register long long __a1 asm("$5") = (long long) arg2; \
131992 + register long long __a3 asm("$7"); \
131993 + __asm__ volatile ( \
131994 + ".set\tnoreorder\n\t" \
131995 + "li\t$2, %4\t\t\t# " #name "\n\t" \
131996 + "syscall\n\t" \
131997 + ".set\treorder" \
131998 + : "=r" (__v0), "=r" (__a3) \
131999 + : "r" (__a0), "r" (__a1), "i" (SYS_ify(name)) \
132000 + : __SYSCALL_CLOBBERS); \
132001 + err = __a3; \
132002 + _sys_result = __v0; \
132003 + } \
132004 + _sys_result; \
132007 +#define internal_syscall3(name, err, arg1, arg2, arg3) \
132008 +({ \
132009 + long _sys_result; \
132011 + { \
132012 + register long long __v0 asm("$2"); \
132013 + register long long __a0 asm("$4") = (long long) arg1; \
132014 + register long long __a1 asm("$5") = (long long) arg2; \
132015 + register long long __a2 asm("$6") = (long long) arg3; \
132016 + register long long __a3 asm("$7"); \
132017 + __asm__ volatile ( \
132018 + ".set\tnoreorder\n\t" \
132019 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132020 + "syscall\n\t" \
132021 + ".set\treorder" \
132022 + : "=r" (__v0), "=r" (__a3) \
132023 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
132024 + : __SYSCALL_CLOBBERS); \
132025 + err = __a3; \
132026 + _sys_result = __v0; \
132027 + } \
132028 + _sys_result; \
132031 +#define internal_syscall4(name, err, arg1, arg2, arg3, arg4) \
132032 +({ \
132033 + long _sys_result; \
132035 + { \
132036 + register long long __v0 asm("$2"); \
132037 + register long long __a0 asm("$4") = (long long) arg1; \
132038 + register long long __a1 asm("$5") = (long long) arg2; \
132039 + register long long __a2 asm("$6") = (long long) arg3; \
132040 + register long long __a3 asm("$7") = (long long) arg4; \
132041 + __asm__ volatile ( \
132042 + ".set\tnoreorder\n\t" \
132043 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132044 + "syscall\n\t" \
132045 + ".set\treorder" \
132046 + : "=r" (__v0), "+r" (__a3) \
132047 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
132048 + : __SYSCALL_CLOBBERS); \
132049 + err = __a3; \
132050 + _sys_result = __v0; \
132051 + } \
132052 + _sys_result; \
132055 +#define internal_syscall5(name, err, arg1, arg2, arg3, arg4, arg5) \
132056 +({ \
132057 + long _sys_result; \
132059 + { \
132060 + register long long __v0 asm("$2"); \
132061 + register long long __a0 asm("$4") = (long long) arg1; \
132062 + register long long __a1 asm("$5") = (long long) arg2; \
132063 + register long long __a2 asm("$6") = (long long) arg3; \
132064 + register long long __a3 asm("$7") = (long long) arg4; \
132065 + register long long __a4 asm("$8") = (long long) arg5; \
132066 + __asm__ volatile ( \
132067 + ".set\tnoreorder\n\t" \
132068 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132069 + "syscall\n\t" \
132070 + ".set\treorder" \
132071 + : "=r" (__v0), "+r" (__a3) \
132072 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
132073 + "r" (__a4) \
132074 + : __SYSCALL_CLOBBERS); \
132075 + err = __a3; \
132076 + _sys_result = __v0; \
132077 + } \
132078 + _sys_result; \
132081 +#define internal_syscall6(name, err, arg1, arg2, arg3, arg4, arg5, arg6)\
132082 +({ \
132083 + long _sys_result; \
132085 + { \
132086 + register long long __v0 asm("$2"); \
132087 + register long long __a0 asm("$4") = (long long) arg1; \
132088 + register long long __a1 asm("$5") = (long long) arg2; \
132089 + register long long __a2 asm("$6") = (long long) arg3; \
132090 + register long long __a3 asm("$7") = (long long) arg4; \
132091 + register long long __a4 asm("$8") = (long long) arg5; \
132092 + register long long __a5 asm("$9") = (long long) arg6; \
132093 + __asm__ volatile ( \
132094 + ".set\tnoreorder\n\t" \
132095 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132096 + "syscall\n\t" \
132097 + ".set\treorder" \
132098 + : "=r" (__v0), "+r" (__a3) \
132099 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
132100 + "r" (__a5), "r" (__a6) \
132101 + : __SYSCALL_CLOBBERS); \
132102 + err = __a3; \
132103 + _sys_result = __v0; \
132104 + } \
132105 + _sys_result; \
132108 +#define internal_syscall7(name, err, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\
132109 +({ \
132110 + long _sys_result; \
132112 + { \
132113 + register long long __v0 asm("$2"); \
132114 + register long long __a0 asm("$4") = (long long) arg1; \
132115 + register long long __a1 asm("$5") = (long long) arg2; \
132116 + register long long __a2 asm("$6") = (long long) arg3; \
132117 + register long long __a3 asm("$7") = (long long) arg4; \
132118 + register long long __a4 asm("$8") = (long long) arg5; \
132119 + register long long __a5 asm("$9") = (long long) arg6; \
132120 + register long long __a6 asm("$10") = (long long) arg7; \
132121 + __asm__ volatile ( \
132122 + ".set\tnoreorder\n\t" \
132123 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132124 + "syscall\n\t" \
132125 + ".set\treorder" \
132126 + : "=r" (__v0), "+r" (__a3) \
132127 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
132128 + "r" (__a5), "r" (__a6), "r" (__a7) \
132129 + : __SYSCALL_CLOBBERS); \
132130 + err = __a3; \
132131 + _sys_result = __v0; \
132132 + } \
132133 + _sys_result; \
132136 +#define __SYSCALL_CLOBBERS "$1", "$3", "$11", "$12", "$13", "$14", "$15", "$24", "$25"
132137 +#endif /* untested */
132138 +#endif /* __ASSEMBLER__ */
132140 +#endif /* linux/mips/sysdep.h */
132141 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c
132142 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c Thu Jan 1 01:00:00 1970
132143 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c Mon Mar 17 17:20:44 2003
132144 @@ -0,0 +1 @@
132145 +/* glob64 is in glob.c */
132146 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S
132147 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S Thu Jan 1 01:00:00 1970
132148 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S Thu Mar 20 08:54:56 2003
132149 @@ -0,0 +1,42 @@
132150 +/* Copyright 2003 Free Software Foundation, Inc.
132151 + This file is part of the GNU C Library.
132153 + The GNU C Library is free software; you can redistribute it and/or
132154 + modify it under the terms of the GNU Lesser General Public
132155 + License as published by the Free Software Foundation; either
132156 + version 2.1 of the License, or (at your option) any later version.
132158 + The GNU C Library is distributed in the hope that it will be useful,
132159 + but WITHOUT ANY WARRANTY; without even the implied warranty of
132160 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
132161 + Lesser General Public License for more details.
132163 + You should have received a copy of the GNU Lesser General Public
132164 + License along with the GNU C Library; if not, write to the Free
132165 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
132166 + 02111-1307 USA. */
132168 +#include <sysdep.h>
132170 +#include <sys/asm.h>
132172 +/* Sign-extend the ioctl number, since the kernel wants it as a
132173 + sign-extended 32-bit value, but our prototype is that of a long. */
132175 + .text
132176 +ENTRY (__ioctl)
132177 + li v0, __NR_ioctl
132178 + sll a1,a1,0
132179 + syscall /* Do the system call. */
132180 + bne a3, zero, L(error)
132181 + ret
132183 +L(error):
132184 + .cpsetup t9, a0, __ioctl
132185 + PTR_LA t9,__syscall_error
132186 + .cprestore
132187 + jr t9
132189 +PSEUDO_END (__ioctl)
132191 +weak_alias (__ioctl, ioctl)
132192 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
132193 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h Thu Jan 1 01:00:00 1970
132194 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h Mon Mar 17 17:20:44 2003
132195 @@ -0,0 +1,263 @@
132196 +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
132197 + This file is part of the GNU C Library.
132199 + The GNU C Library is free software; you can redistribute it and/or
132200 + modify it under the terms of the GNU Lesser General Public
132201 + License as published by the Free Software Foundation; either
132202 + version 2.1 of the License, or (at your option) any later version.
132204 + The GNU C Library is distributed in the hope that it will be useful,
132205 + but WITHOUT ANY WARRANTY; without even the implied warranty of
132206 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
132207 + Lesser General Public License for more details.
132209 + You should have received a copy of the GNU Lesser General Public
132210 + License along with the GNU C Library; if not, write to the Free
132211 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
132212 + 02111-1307 USA. */
132214 +#ifndef _LINUX_MIPS_SYSDEP_H
132215 +#define _LINUX_MIPS_SYSDEP_H 1
132217 +/* There is some commonality. */
132218 +#include <sysdeps/unix/mips/mips64/n64/sysdep.h>
132220 +/* For Linux we can use the system call table in the header file
132221 + /usr/include/asm/unistd.h
132222 + of the kernel. But these symbols do not follow the SYS_* syntax
132223 + so we have to redefine the `SYS_ify' macro here. */
132224 +#undef SYS_ify
132225 +#ifdef __STDC__
132226 +# define SYS_ify(syscall_name) __NR_N64_##syscall_name
132227 +#else
132228 +# define SYS_ify(syscall_name) __NR_N64_/**/syscall_name
132229 +#endif
132232 +#ifndef __ASSEMBLER__
132233 +#if 0 /* untested */
132234 +/* Define a macro which expands into the inline wrapper code for a system
132235 + call. */
132236 +#undef INLINE_SYSCALL
132237 +#define INLINE_SYSCALL(name, nr, args...) \
132238 + ({ INTERNAL_SYSCALL_DECL(err); \
132239 + long result_var = INTERNAL_SYSCALL (name, err, nr, args); \
132240 + if ( INTERNAL_SYSCALL_ERROR_P (result_var, err) ) \
132241 + { \
132242 + __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \
132243 + result_var = -1L; \
132244 + } \
132245 + result_var; })
132247 +#undef INTERNAL_SYSCALL_DECL
132248 +#define INTERNAL_SYSCALL_DECL(err) long err
132250 +#undef INTERNAL_SYSCALL_ERROR_P
132251 +#define INTERNAL_SYSCALL_ERROR_P(val, err) ((long) (err))
132253 +#undef INTERNAL_SYSCALL_ERRNO
132254 +#define INTERNAL_SYSCALL_ERRNO(val, err) (val)
132256 +#undef INTERNAL_SYSCALL
132257 +#define INTERNAL_SYSCALL(name, err, nr, args...) internal_syscall##nr(name, err, args)
132259 +#define internal_syscall0(name, err, dummy...) \
132260 +({ \
132261 + long _sys_result; \
132263 + { \
132264 + register long __v0 asm("$2"); \
132265 + register long __a3 asm("$7"); \
132266 + __asm__ volatile ( \
132267 + ".set\tnoreorder\n\t" \
132268 + "li\t$2, %2\t\t\t# " #name "\n\t" \
132269 + "syscall\n\t" \
132270 + ".set reorder" \
132271 + : "=r" (__v0), "=r" (__a3) \
132272 + : "i" (SYS_ify(name)) \
132273 + : __SYSCALL_CLOBBERS); \
132274 + err = __a3; \
132275 + _sys_result = __v0; \
132276 + } \
132277 + _sys_result; \
132280 +#define internal_syscall1(name, err, arg1) \
132281 +({ \
132282 + long _sys_result; \
132284 + { \
132285 + register long __v0 asm("$2"); \
132286 + register long __a0 asm("$4") = (long) arg1; \
132287 + register long __a3 asm("$7"); \
132288 + __asm__ volatile ( \
132289 + ".set\tnoreorder\n\t" \
132290 + "li\t$2, %3\t\t\t# " #name "\n\t" \
132291 + "syscall\n\t" \
132292 + ".set reorder" \
132293 + : "=r" (__v0), "=r" (__a3) \
132294 + : "r" (__a0), "i" (SYS_ify(name)) \
132295 + : __SYSCALL_CLOBBERS); \
132296 + err = __a3; \
132297 + _sys_result = __v0; \
132298 + } \
132299 + _sys_result; \
132302 +#define internal_syscall2(name, err, arg1, arg2) \
132303 +({ \
132304 + long _sys_result; \
132306 + { \
132307 + register long __v0 asm("$2"); \
132308 + register long __a0 asm("$4") = (long) arg1; \
132309 + register long __a1 asm("$5") = (long) arg2; \
132310 + register long __a3 asm("$7"); \
132311 + __asm__ volatile ( \
132312 + ".set\tnoreorder\n\t" \
132313 + "li\t$2, %4\t\t\t# " #name "\n\t" \
132314 + "syscall\n\t" \
132315 + ".set\treorder" \
132316 + : "=r" (__v0), "=r" (__a3) \
132317 + : "r" (__a0), "r" (__a1), "i" (SYS_ify(name)) \
132318 + : __SYSCALL_CLOBBERS); \
132319 + err = __a3; \
132320 + _sys_result = __v0; \
132321 + } \
132322 + _sys_result; \
132325 +#define internal_syscall3(name, err, arg1, arg2, arg3) \
132326 +({ \
132327 + long _sys_result; \
132329 + { \
132330 + register long __v0 asm("$2"); \
132331 + register long __a0 asm("$4") = (long) arg1; \
132332 + register long __a1 asm("$5") = (long) arg2; \
132333 + register long __a2 asm("$6") = (long) arg3; \
132334 + register long __a3 asm("$7"); \
132335 + __asm__ volatile ( \
132336 + ".set\tnoreorder\n\t" \
132337 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132338 + "syscall\n\t" \
132339 + ".set\treorder" \
132340 + : "=r" (__v0), "=r" (__a3) \
132341 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
132342 + : __SYSCALL_CLOBBERS); \
132343 + err = __a3; \
132344 + _sys_result = __v0; \
132345 + } \
132346 + _sys_result; \
132349 +#define internal_syscall4(name, err, arg1, arg2, arg3, arg4) \
132350 +({ \
132351 + long _sys_result; \
132353 + { \
132354 + register long __v0 asm("$2"); \
132355 + register long __a0 asm("$4") = (long) arg1; \
132356 + register long __a1 asm("$5") = (long) arg2; \
132357 + register long __a2 asm("$6") = (long) arg3; \
132358 + register long __a3 asm("$7") = (long) arg4; \
132359 + __asm__ volatile ( \
132360 + ".set\tnoreorder\n\t" \
132361 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132362 + "syscall\n\t" \
132363 + ".set\treorder" \
132364 + : "=r" (__v0), "+r" (__a3) \
132365 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
132366 + : __SYSCALL_CLOBBERS); \
132367 + err = __a3; \
132368 + _sys_result = __v0; \
132369 + } \
132370 + _sys_result; \
132373 +#define internal_syscall5(name, err, arg1, arg2, arg3, arg4, arg5) \
132374 +({ \
132375 + long _sys_result; \
132377 + { \
132378 + register long __v0 asm("$2"); \
132379 + register long __a0 asm("$4") = (long) arg1; \
132380 + register long __a1 asm("$5") = (long) arg2; \
132381 + register long __a2 asm("$6") = (long) arg3; \
132382 + register long __a3 asm("$7") = (long) arg4; \
132383 + register long __a4 asm("$8") = (long) arg5; \
132384 + __asm__ volatile ( \
132385 + ".set\tnoreorder\n\t" \
132386 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132387 + "syscall\n\t" \
132388 + ".set\treorder" \
132389 + : "=r" (__v0), "+r" (__a3) \
132390 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
132391 + "r" (__a4) \
132392 + : __SYSCALL_CLOBBERS); \
132393 + err = __a3; \
132394 + _sys_result = __v0; \
132395 + } \
132396 + _sys_result; \
132399 +#define internal_syscall6(name, err, arg1, arg2, arg3, arg4, arg5, arg6)\
132400 +({ \
132401 + long _sys_result; \
132403 + { \
132404 + register long __v0 asm("$2"); \
132405 + register long __a0 asm("$4") = (long) arg1; \
132406 + register long __a1 asm("$5") = (long) arg2; \
132407 + register long __a2 asm("$6") = (long) arg3; \
132408 + register long __a3 asm("$7") = (long) arg4; \
132409 + register long __a4 asm("$8") = (long) arg5; \
132410 + register long __a5 asm("$9") = (long) arg6; \
132411 + __asm__ volatile ( \
132412 + ".set\tnoreorder\n\t" \
132413 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132414 + "syscall\n\t" \
132415 + ".set\treorder" \
132416 + : "=r" (__v0), "+r" (__a3) \
132417 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
132418 + "r" (__a5), "r" (__a6) \
132419 + : __SYSCALL_CLOBBERS); \
132420 + err = __a3; \
132421 + _sys_result = __v0; \
132422 + } \
132423 + _sys_result; \
132426 +#define internal_syscall7(name, err, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\
132427 +({ \
132428 + long _sys_result; \
132430 + { \
132431 + register long __v0 asm("$2"); \
132432 + register long __a0 asm("$4") = (long) arg1; \
132433 + register long __a1 asm("$5") = (long) arg2; \
132434 + register long __a2 asm("$6") = (long) arg3; \
132435 + register long __a3 asm("$7") = (long) arg4; \
132436 + register long __a4 asm("$8") = (long) arg5; \
132437 + register long __a5 asm("$9") = (long) arg6; \
132438 + register long __a6 asm("$10") = (long) arg7; \
132439 + __asm__ volatile ( \
132440 + ".set\tnoreorder\n\t" \
132441 + "li\t$2, %5\t\t\t# " #name "\n\t" \
132442 + "syscall\n\t" \
132443 + ".set\treorder" \
132444 + : "=r" (__v0), "+r" (__a3) \
132445 + : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
132446 + "r" (__a5), "r" (__a6), "r" (__a7) \
132447 + : __SYSCALL_CLOBBERS); \
132448 + err = __a3; \
132449 + _sys_result = __v0; \
132450 + } \
132451 + _sys_result; \
132454 +#define __SYSCALL_CLOBBERS "$1", "$3", "$11", "$12", "$13", "$14", "$15", "$24", "$25"
132455 +#endif /* untested */
132456 +#endif /* __ASSEMBLER__ */
132458 +#endif /* linux/mips/sysdep.h */
132459 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/recv.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/recv.c
132460 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/recv.c Thu Jan 1 01:00:00 1970
132461 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/recv.c Mon Mar 17 17:20:44 2003
132462 @@ -0,0 +1 @@
132463 +#include <sysdeps/unix/sysv/linux/x86_64/recv.c>
132464 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/send.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/send.c
132465 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/send.c Thu Jan 1 01:00:00 1970
132466 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/send.c Mon Mar 17 17:20:44 2003
132467 @@ -0,0 +1 @@
132468 +#include <sysdeps/unix/sysv/linux/x86_64/send.c>
132469 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/syscall.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/syscall.S
132470 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/syscall.S Thu Jan 1 01:00:00 1970
132471 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/syscall.S Mon Mar 17 17:20:44 2003
132472 @@ -0,0 +1,53 @@
132473 +/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
132474 + This file is part of the GNU C Library.
132476 + The GNU C Library is free software; you can redistribute it and/or
132477 + modify it under the terms of the GNU Lesser General Public
132478 + License as published by the Free Software Foundation; either
132479 + version 2.1 of the License, or (at your option) any later version.
132481 + The GNU C Library is distributed in the hope that it will be useful,
132482 + but WITHOUT ANY WARRANTY; without even the implied warranty of
132483 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
132484 + Lesser General Public License for more details.
132486 + You should have received a copy of the GNU Lesser General Public
132487 + License along with the GNU C Library; if not, write to the Free
132488 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
132489 + 02111-1307 USA. */
132491 +#include <sysdep.h>
132493 +#include <sys/asm.h>
132495 +/* Please consult the file sysdeps/unix/sysv/linux/x86-64/sysdep.h for
132496 + more information about the value -4095 used below. */
132498 +/* Usage: long syscall (syscall_number, arg1, arg2, arg3, arg4, arg5)
132499 + We need to do some arg shifting, the syscall_number will be in
132500 + rax. */
132503 + .text
132504 +ENTRY (syscall)
132505 + move v0, a0 /* Syscall number -> v0 */
132506 + move a0, a1 /* shift arg1 - arg7. */
132507 + move a1, a2
132508 + move a2, a3
132509 + move a3, a4
132510 + move a4, a5
132511 + move a5, a6
132512 + move a6, a7
132514 + syscall /* Do the system call. */
132515 + bne a3, zero, L(error)
132517 + ret
132519 +L(error):
132520 + .cpsetup t9, a0, syscall
132521 + PTR_LA t9,__syscall_error
132522 + .cprestore
132523 + jr t9
132525 +PSEUDO_END (syscall)
132526 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
132527 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list Thu Jan 1 01:00:00 1970
132528 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list Mon Mar 17 17:20:44 2003
132529 @@ -0,0 +1,20 @@
132530 +# File name Caller Syscall name Args Strong name Weak names
132532 +lseek - lseek i:iii __libc_lseek __lseek lseek __llseek llseek __libc_lseek64 __lseek64 lseek64
132534 +# proper socket implementations:
132535 +recvfrom - recvfrom i:ibniBN __libc_recvfrom __recvfrom recvfrom __syscall_recvfrom
132536 +sendto - sendto i:ibnibn __libc_sendto __sendto sendto __syscall_sendto
132538 +# semaphore and shm system calls
132539 +msgctl - msgctl i:iip __msgctl msgctl
132540 +msgget - msgget i:ii __msgget msgget
132541 +msgrcv - msgrcv i:ibnii __msgrcv msgrcv
132542 +msgsnd - msgsnd i:ibni __msgsnd msgsnd
132543 +shmat - shmat i:ipi __shmat shmat
132544 +shmctl - shmctl i:iip __shmctl shmctl
132545 +shmdt - shmdt i:s __shmdt shmdt
132546 +shmget - shmget i:iii __shmget shmget
132547 +semop - semop i:ipi __semop semop
132548 +semget - semget i:iii __semget semget
132549 +semctl - semctl i:iiii __semctl semctl
132550 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/umount.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/umount.c
132551 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/mips64/umount.c Thu Jan 1 01:00:00 1970
132552 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/mips64/umount.c Mon Mar 17 17:20:44 2003
132553 @@ -0,0 +1 @@
132554 +#include <sysdeps/unix/sysv/linux/hppa/umount.c>
132555 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/pread.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/pread.c
132556 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/pread.c Mon Jan 27 19:55:20 2003
132557 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/pread.c Thu Mar 20 21:58:02 2003
132558 @@ -1,4 +1,4 @@
132559 -/* Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
132560 +/* Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
132561 This file is part of the GNU C Library.
132562 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
132564 @@ -42,7 +42,13 @@
132565 off_t offset) internal_function;
132566 # endif
132567 extern ssize_t __syscall_pread (int fd, void *__unbounded buf, size_t count,
132568 - int dummy, off_t offset_hi, off_t offset_lo);
132569 + int dummy,
132570 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132571 + off_t offset
132572 +#else
132573 + off_t offset_hi, off_t offset_lo
132574 +#endif
132579 @@ -59,8 +65,13 @@
132581 /* First try the syscall. */
132582 assert (sizeof (offset) == 4);
132583 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132584 + result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
132585 + offset);
132586 +#else
132587 result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
132588 __LONG_LONG_PAIR (offset >> 31, offset));
132589 +#endif
132590 # if __ASSUME_PREAD_SYSCALL == 0
132591 if (result == -1 && errno == ENOSYS)
132592 /* No system call available. Use the emulation. */
132593 @@ -73,8 +84,13 @@
132595 /* First try the syscall. */
132596 assert (sizeof (offset) == 4);
132597 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132598 + result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
132599 + offset);
132600 +#else
132601 result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
132602 __LONG_LONG_PAIR (offset >> 31, offset));
132603 +#endif
132604 # if __ASSUME_PREAD_SYSCALL == 0
132605 if (result == -1 && errno == ENOSYS)
132606 /* No system call available. Use the emulation. */
132607 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/pread64.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/pread64.c
132608 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/pread64.c Mon Jan 27 19:55:20 2003
132609 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/pread64.c Thu Mar 20 21:58:02 2003
132610 @@ -1,4 +1,4 @@
132611 -/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
132612 +/* Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
132613 This file is part of the GNU C Library.
132614 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
132616 @@ -42,7 +42,13 @@
132617 # endif
132619 extern ssize_t __syscall_pread (int fd, void *__unbounded buf, size_t count,
132620 - int dummy, off_t offset_hi, off_t offset_lo);
132621 + int dummy,
132622 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132623 + off_t offset
132624 +#else
132625 + off_t offset_hi, off_t offset_lo
132626 +#endif
132631 @@ -59,9 +65,14 @@
132632 if (SINGLE_THREAD_P)
132634 /* First try the syscall. */
132635 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132636 + result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
132637 + offset);
132638 +#else
132639 result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
132640 __LONG_LONG_PAIR ((off_t) (offset >> 32),
132641 (off_t) (offset & 0xffffffff)));
132642 +#endif
132643 # if __ASSUME_PREAD_SYSCALL == 0
132644 if (result == -1 && errno == ENOSYS)
132645 /* No system call available. Use the emulation. */
132646 @@ -73,9 +84,14 @@
132647 int oldtype = LIBC_CANCEL_ASYNC ();
132649 /* First try the syscall. */
132650 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132651 + result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
132652 + offset);
132653 +#else
132654 result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
132655 __LONG_LONG_PAIR ((off_t) (offset >> 32),
132656 (off_t) (offset & 0xffffffff)));
132657 +#endif
132658 # if __ASSUME_PREAD_SYSCALL == 0
132659 if (result == -1 && errno == ENOSYS)
132660 /* No system call available. Use the emulation. */
132661 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/ptrace.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/ptrace.c
132662 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/ptrace.c Thu Jan 1 01:00:00 1970
132663 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/ptrace.c Mon Mar 17 16:48:52 2003
132664 @@ -0,0 +1,112 @@
132665 +/* Copyright (C) 1995, 1996, 1997, 1998, 2000, 2002, 2003
132666 + Free Software Foundation, Inc.
132667 + This file is part of the GNU C Library.
132669 + The GNU C Library is free software; you can redistribute it and/or
132670 + modify it under the terms of the GNU Lesser General Public
132671 + License as published by the Free Software Foundation; either
132672 + version 2.1 of the License, or (at your option) any later version.
132674 + The GNU C Library is distributed in the hope that it will be useful,
132675 + but WITHOUT ANY WARRANTY; without even the implied warranty of
132676 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
132677 + Lesser General Public License for more details.
132679 + You should have received a copy of the GNU Lesser General Public
132680 + License along with the GNU C Library; if not, write to the Free
132681 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
132682 + 02111-1307 USA. */
132684 +#include <errno.h>
132685 +#include <sys/types.h>
132686 +#include <sys/ptrace.h>
132687 +#include <sys/user.h>
132688 +#include <stdarg.h>
132690 +#include <sysdep.h>
132691 +#include <sys/syscall.h>
132692 +#include <bp-checks.h>
132694 +#if defined _ABIN32 && _MIPS_SIM == _ABIN32
132695 +__extension__ typedef long long int reg_type;
132696 +#else
132697 +typedef long int reg_type;
132698 +#endif
132700 +extern reg_type __syscall_ptrace (int, pid_t, void *__unbounded,
132701 + reg_type __unbounded);
132703 +reg_type
132704 +ptrace (enum __ptrace_request request, ...)
132706 + reg_type res, ret;
132707 + va_list ap;
132708 + pid_t pid;
132709 + void *addr;
132710 + reg_type data;
132712 + va_start (ap, request);
132713 + pid = va_arg (ap, pid_t);
132714 + addr = va_arg (ap, void *);
132715 + data = va_arg (ap, reg_type);
132716 + va_end (ap);
132718 + if (request > 0 && request < 4)
132719 + data = &ret;
132721 +#if __BOUNDED_POINTERS__
132722 + switch (request)
132724 + case PTRACE_PEEKTEXT:
132725 + case PTRACE_PEEKDATA:
132726 + case PTRACE_PEEKUSER:
132727 + case PTRACE_POKETEXT:
132728 + case PTRACE_POKEDATA:
132729 + case PTRACE_POKEUSER:
132730 + (void) CHECK_1 ((int *) addr);
132731 + (void) CHECK_1 ((int *) data);
132732 + break;
132734 + case PTRACE_GETREGS:
132735 + case PTRACE_SETREGS:
132736 + /* We don't know the size of data, so the best we can do is ensure
132737 + that `data' is valid for at least one word. */
132738 + (void) CHECK_1 ((int *) data);
132739 + break;
132741 + case PTRACE_GETFPREGS:
132742 + case PTRACE_SETFPREGS:
132743 + /* We don't know the size of data, so the best we can do is ensure
132744 + that `data' is valid for at least one word. */
132745 + (void) CHECK_1 ((int *) data);
132746 + break;
132748 + case PTRACE_GETFPXREGS:
132749 + case PTRACE_SETFPXREGS:
132750 + /* We don't know the size of data, so the best we can do is ensure
132751 + that `data' is valid for at least one word. */
132752 + (void) CHECK_1 ((int *) data);
132753 + break;
132755 + case PTRACE_TRACEME:
132756 + case PTRACE_CONT:
132757 + case PTRACE_KILL:
132758 + case PTRACE_SINGLESTEP:
132759 + case PTRACE_ATTACH:
132760 + case PTRACE_DETACH:
132761 + case PTRACE_SYSCALL:
132762 + /* Neither `data' nor `addr' needs any checks. */
132763 + break;
132765 +#endif
132767 + res = INLINE_SYSCALL (ptrace, 4, request, pid,
132768 + __ptrvalue (addr), __ptrvalue (data));
132769 + if (res >= 0 && request > 0 && request < 4)
132771 + __set_errno (0);
132772 + return ret;
132775 + return res;
132777 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/pwrite.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/pwrite.c
132778 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/pwrite.c Mon Jan 27 19:55:20 2003
132779 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/pwrite.c Thu Mar 20 21:58:02 2003
132780 @@ -1,4 +1,4 @@
132781 -/* Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
132782 +/* Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
132783 This file is part of the GNU C Library.
132784 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
132786 @@ -38,7 +38,13 @@
132787 #if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
132789 extern ssize_t __syscall_pwrite (int fd, const void *__unbounded buf, size_t count,
132790 - int dummy, off_t offset_hi, off_t offset_lo);
132791 + int dummy,
132792 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132793 + off_t offset
132794 +#else
132795 + off_t offset_hi, off_t offset_lo
132796 +#endif
132799 # if __ASSUME_PWRITE_SYSCALL == 0
132800 static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
132801 @@ -58,8 +64,13 @@
132803 /* First try the syscall. */
132804 assert (sizeof (offset) == 4);
132805 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132806 + result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
132807 + offset);
132808 +#else
132809 result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
132810 __LONG_LONG_PAIR (offset >> 31, offset));
132811 +#endif
132812 # if __ASSUME_PWRITE_SYSCALL == 0
132813 if (result == -1 && errno == ENOSYS)
132814 /* No system call available. Use the emulation. */
132815 @@ -73,8 +84,13 @@
132817 /* First try the syscall. */
132818 assert (sizeof (offset) == 4);
132819 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132820 + result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
132821 + offset);
132822 +#else
132823 result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
132824 __LONG_LONG_PAIR (offset >> 31, offset));
132825 +#endif
132826 # if __ASSUME_PWRITE_SYSCALL == 0
132827 if (result == -1 && errno == ENOSYS)
132828 /* No system call available. Use the emulation. */
132829 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/pwrite64.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/pwrite64.c
132830 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/pwrite64.c Mon Jan 27 19:55:20 2003
132831 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/pwrite64.c Thu Mar 20 21:58:02 2003
132832 @@ -1,4 +1,4 @@
132833 -/* Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
132834 +/* Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
132835 This file is part of the GNU C Library.
132836 Contributed by Ralf Baechle <ralf@gnu.org>, 1998.
132838 @@ -37,7 +37,13 @@
132839 #if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
132841 extern ssize_t __syscall_pwrite (int fd, const void *__unbounded buf, size_t count,
132842 - int dummy, off_t offset_hi, off_t offset_lo);
132843 + int dummy,
132844 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132845 + off_t offset
132846 +#else
132847 + off_t offset_hi, off_t offset_lo
132848 +#endif
132851 # if __ASSUME_PWRITE_SYSCALL == 0
132852 static ssize_t __emulate_pwrite64 (int fd, const void *buf, size_t count,
132853 @@ -56,9 +62,14 @@
132854 if (SINGLE_THREAD_P)
132856 /* First try the syscall. */
132857 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132858 + result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
132859 + offset);
132860 +#else
132861 result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
132862 __LONG_LONG_PAIR ((off_t) (offset >> 32),
132863 (off_t) (offset & 0xffffffff)));
132864 +#endif
132865 # if __ASSUME_PWRITE_SYSCALL == 0
132866 if (result == -1 && errno == ENOSYS)
132867 /* No system call available. Use the emulation. */
132868 @@ -71,9 +82,14 @@
132869 int oldtype = LIBC_CANCEL_ASYNC ();
132871 /* First try the syscall. */
132872 +#if defined _ABI64 && _MIPS_SIM == _ABI64
132873 + result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
132874 + offset);
132875 +#else
132876 result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
132877 __LONG_LONG_PAIR ((off_t) (offset >> 32),
132878 (off_t) (offset & 0xffffffff)));
132879 +#endif
132880 # if __ASSUME_PWRITE_SYSCALL == 0
132881 if (result == -1 && errno == ENOSYS)
132882 /* No system call available. Use the emulation. */
132883 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/readelflib.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/readelflib.c
132884 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/readelflib.c Thu Jan 1 01:00:00 1970
132885 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/readelflib.c Fri Mar 14 08:52:05 2003
132886 @@ -0,0 +1,71 @@
132887 +/* Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
132888 + This file is part of the GNU C Library.
132889 + Contributed by Alexandre Oliva <aoliva@redhat.com>
132890 + Based on work ../x86_64/readelflib.c,
132891 + contributed by Andreas Jaeger <aj@suse.de>, 1999 and
132892 + Jakub Jelinek <jakub@redhat.com>, 1999.
132894 + The GNU C Library is free software; you can redistribute it and/or
132895 + modify it under the terms of the GNU Lesser General Public
132896 + License as published by the Free Software Foundation; either
132897 + version 2.1 of the License, or (at your option) any later version.
132899 + The GNU C Library is distributed in the hope that it will be useful,
132900 + but WITHOUT ANY WARRANTY; without even the implied warranty of
132901 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
132902 + Lesser General Public License for more details.
132904 + You should have received a copy of the GNU Lesser General Public
132905 + License along with the GNU C Library; if not, write to the Free
132906 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
132907 + 02111-1307 USA. */
132910 +int process_elf32_file (const char *file_name, const char *lib, int *flag,
132911 + unsigned int *osversion, char **soname,
132912 + void *file_contents, size_t file_length);
132913 +int process_elf64_file (const char *file_name, const char *lib, int *flag,
132914 + unsigned int *osversion, char **soname,
132915 + void *file_contents, size_t file_length);
132917 +/* Returns 0 if everything is ok, != 0 in case of error. */
132919 +process_elf_file (const char *file_name, const char *lib, int *flag,
132920 + unsigned int *osversion, char **soname, void *file_contents,
132921 + size_t file_length)
132923 + ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents;
132924 + int ret;
132926 + if (elf_header->e_ident [EI_CLASS] == ELFCLASS32)
132928 + ret = process_elf32_file (file_name, lib, flag, osversion, soname,
132929 + file_contents, file_length);
132931 + /* n32 libraries are always libc.so.6+. */
132932 + if (ret && (elf_header->e_flags & EF_MIPS_ABI2) != 0)
132933 + *flag = FLAG_MIPS64_LIBN32|FLAG_ELF_LIBC6;
132935 + else
132937 + ret = process_elf64_file (file_name, lib, flag, osversion, soname,
132938 + file_contents, file_length);
132939 + /* n64 libraries are always libc.so.6+. */
132940 + if (!ret)
132941 + *flag = FLAG_MIPS64_LIBN64|FLAG_ELF_LIBC6;
132944 + return ret;
132947 +#undef __ELF_NATIVE_CLASS
132948 +#undef process_elf_file
132949 +#define process_elf_file process_elf32_file
132950 +#define __ELF_NATIVE_CLASS 32
132951 +#include "sysdeps/generic/readelflib.c"
132953 +#undef __ELF_NATIVE_CLASS
132954 +#undef process_elf_file
132955 +#define process_elf_file process_elf64_file
132956 +#define __ELF_NATIVE_CLASS 64
132957 +#include "sysdeps/generic/readelflib.c"
132958 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sigaction.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sigaction.c
132959 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sigaction.c Fri Jan 3 00:26:04 2003
132960 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sigaction.c Fri Mar 14 08:49:05 2003
132961 @@ -41,6 +41,15 @@
132962 extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *__unbounded,
132963 struct kernel_sigaction *__unbounded, size_t);
132965 +#if _MIPS_SIM != _MIPS_SIM_ABI32
132967 +# ifdef __NR_rt_sigreturn
132968 +static void restore_rt (void) asm ("__restore_rt");
132969 +# endif
132970 +# ifdef __NR_sigreturn
132971 +static void restore (void) asm ("__restore");
132972 +# endif
132973 +#endif
132975 /* If ACT is not NULL, change the action for SIG to *ACT.
132976 If OACT is not NULL, put the old action for SIG in *OACT. */
132977 @@ -74,7 +83,11 @@
132978 memcpy (&kact.sa_mask, &act->sa_mask, sizeof (kernel_sigset_t));
132979 kact.sa_flags = act->sa_flags;
132980 # ifdef HAVE_SA_RESTORER
132981 +# if _MIPS_SIM == _MIPS_SIM_ABI32
132982 kact.sa_restorer = act->sa_restorer;
132983 +# else
132984 + kact.sa_restorer = &restore_rt;
132985 +# endif
132986 # endif
132989 @@ -128,7 +141,11 @@
132990 oact->sa_mask.__val[0] = k_osigact.sa_mask;
132991 oact->sa_flags = k_osigact.sa_flags;
132992 # ifdef HAVE_SA_RESTORER
132993 +# if _MIPS_SIM == _MIPS_SIM_ABI32
132994 oact->sa_restorer = k_osigact.sa_restorer;
132995 +# else
132996 + oact->sa_restorer = &restore;
132997 +# endif
132998 # endif
133000 return result;
133001 @@ -140,4 +157,32 @@
133002 weak_alias (__libc_sigaction, __sigaction)
133003 libc_hidden_weak (__sigaction)
133004 weak_alias (__libc_sigaction, sigaction)
133005 +#endif
133007 +/* NOTE: Please think twice before making any changes to the bits of
133008 + code below. GDB needs some intimate knowledge about it to
133009 + recognize them as signal trampolines, and make backtraces through
133010 + signal handlers work right. Important are both the names
133011 + (__restore_rt) and the exact instruction sequence.
133012 + If you ever feel the need to make any changes, please notify the
133013 + appropriate GDB maintainer. */
133015 +#define RESTORE(name, syscall) RESTORE2 (name, syscall)
133016 +#define RESTORE2(name, syscall) \
133017 +asm \
133018 + ( \
133019 + ".align 4\n" \
133020 + "__" #name ":\n" \
133021 + " li $2, " #syscall "\n" \
133022 + " syscall\n" \
133025 +/* The return code for realtime-signals. */
133026 +#if _MIPS_SIM != _MIPS_SIM_ABI32
133027 +# ifdef __NR_rt_sigreturn
133028 +RESTORE (restore_rt, __NR_rt_sigreturn)
133029 +# endif
133030 +# ifdef __NR_sigreturn
133031 +RESTORE (restore, __NR_sigreturn)
133032 +# endif
133033 #endif
133034 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/procfs.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/procfs.h
133035 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/procfs.h Sat Feb 9 02:19:07 2002
133036 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/procfs.h Mon Mar 17 16:47:13 2003
133037 @@ -1,4 +1,5 @@
133038 -/* Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
133039 +/* Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003
133040 + Free Software Foundation, Inc.
133041 This file is part of the GNU C Library.
133043 The GNU C Library is free software; you can redistribute it and/or
133044 @@ -32,7 +33,11 @@
133045 #define ELF_NGREG 45
133046 #define ELF_NFPREG 33
133048 +#if defined _ABIN32 && _MIPS_SIM == _ABIN32
133049 +__extension__ typedef unsigned long long elf_greg_t;
133050 +#else
133051 typedef unsigned long elf_greg_t;
133052 +#endif
133053 typedef elf_greg_t elf_gregset_t[ELF_NGREG];
133055 typedef double elf_fpreg_t;
133056 @@ -59,8 +64,13 @@
133058 struct elf_siginfo pr_info; /* Info associated with signal. */
133059 short int pr_cursig; /* Current signal. */
133060 +#if defined _ABIN32 && _MIPS_SIM == _ABIN32
133061 + __extension__ unsigned long long int pr_sigpend;
133062 + __extension__ unsigned long long int pr_sighold;
133063 +#else
133064 unsigned long int pr_sigpend; /* Set of pending signals. */
133065 unsigned long int pr_sighold; /* Set of held signals. */
133066 +#endif
133067 __pid_t pr_pid;
133068 __pid_t pr_ppid;
133069 __pid_t pr_pgrp;
133070 @@ -82,7 +92,11 @@
133071 char pr_sname; /* Char for pr_state. */
133072 char pr_zomb; /* Zombie. */
133073 char pr_nice; /* Nice val. */
133074 +#if defined _ABIN32 && _MIPS_SIM == _ABIN32
133075 + __extension__ unsigned long long int pr_flag;
133076 +#else
133077 unsigned long int pr_flag; /* Flags. */
133078 +#endif
133079 long pr_uid;
133080 long pr_gid;
133081 int pr_pid, pr_ppid, pr_pgrp, pr_sid;
133082 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/ptrace.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/ptrace.h
133083 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/ptrace.h Thu Jan 1 01:00:00 1970
133084 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/ptrace.h Mon Mar 17 16:48:52 2003
133085 @@ -0,0 +1,135 @@
133086 +/* `ptrace' debugger support interface. Linux version.
133087 + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003
133088 + Free Software Foundation, Inc.
133089 + This file is part of the GNU C Library.
133091 + The GNU C Library is free software; you can redistribute it and/or
133092 + modify it under the terms of the GNU Lesser General Public
133093 + License as published by the Free Software Foundation; either
133094 + version 2.1 of the License, or (at your option) any later version.
133096 + The GNU C Library is distributed in the hope that it will be useful,
133097 + but WITHOUT ANY WARRANTY; without even the implied warranty of
133098 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
133099 + Lesser General Public License for more details.
133101 + You should have received a copy of the GNU Lesser General Public
133102 + License along with the GNU C Library; if not, write to the Free
133103 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
133104 + 02111-1307 USA. */
133106 +#ifndef _SYS_PTRACE_H
133107 +#define _SYS_PTRACE_H 1
133109 +#include <features.h>
133111 +__BEGIN_DECLS
133113 +/* Type of the REQUEST argument to `ptrace.' */
133114 +enum __ptrace_request
133116 + /* Indicate that the process making this request should be traced.
133117 + All signals received by this process can be intercepted by its
133118 + parent, and its parent can use the other `ptrace' requests. */
133119 + PTRACE_TRACEME = 0,
133120 +#define PT_TRACE_ME PTRACE_TRACEME
133122 + /* Return the word in the process's text space at address ADDR. */
133123 + PTRACE_PEEKTEXT = 1,
133124 +#define PT_READ_I PTRACE_PEEKTEXT
133126 + /* Return the word in the process's data space at address ADDR. */
133127 + PTRACE_PEEKDATA = 2,
133128 +#define PT_READ_D PTRACE_PEEKDATA
133130 + /* Return the word in the process's user area at offset ADDR. */
133131 + PTRACE_PEEKUSER = 3,
133132 +#define PT_READ_U PTRACE_PEEKUSER
133134 + /* Write the word DATA into the process's text space at address ADDR. */
133135 + PTRACE_POKETEXT = 4,
133136 +#define PT_WRITE_I PTRACE_POKETEXT
133138 + /* Write the word DATA into the process's data space at address ADDR. */
133139 + PTRACE_POKEDATA = 5,
133140 +#define PT_WRITE_D PTRACE_POKEDATA
133142 + /* Write the word DATA into the process's user area at offset ADDR. */
133143 + PTRACE_POKEUSER = 6,
133144 +#define PT_WRITE_U PTRACE_POKEUSER
133146 + /* Continue the process. */
133147 + PTRACE_CONT = 7,
133148 +#define PT_CONTINUE PTRACE_CONT
133150 + /* Kill the process. */
133151 + PTRACE_KILL = 8,
133152 +#define PT_KILL PTRACE_KILL
133154 + /* Single step the process.
133155 + This is not supported on all machines. */
133156 + PTRACE_SINGLESTEP = 9,
133157 +#define PT_STEP PTRACE_SINGLESTEP
133159 + /* Get all general purpose registers used by a processes.
133160 + This is not supported on all machines. */
133161 + PTRACE_GETREGS = 12,
133162 +#define PT_GETREGS PTRACE_GETREGS
133164 + /* Set all general purpose registers used by a processes.
133165 + This is not supported on all machines. */
133166 + PTRACE_SETREGS = 13,
133167 +#define PT_SETREGS PTRACE_SETREGS
133169 + /* Get all floating point registers used by a processes.
133170 + This is not supported on all machines. */
133171 + PTRACE_GETFPREGS = 14,
133172 +#define PT_GETFPREGS PTRACE_GETFPREGS
133174 + /* Set all floating point registers used by a processes.
133175 + This is not supported on all machines. */
133176 + PTRACE_SETFPREGS = 15,
133177 +#define PT_SETFPREGS PTRACE_SETFPREGS
133179 + /* Attach to a process that is already running. */
133180 + PTRACE_ATTACH = 16,
133181 +#define PT_ATTACH PTRACE_ATTACH
133183 + /* Detach from a process attached to with PTRACE_ATTACH. */
133184 + PTRACE_DETACH = 17,
133185 +#define PT_DETACH PTRACE_DETACH
133187 + /* Get all extended floating point registers used by a processes.
133188 + This is not supported on all machines. */
133189 + PTRACE_GETFPXREGS = 18,
133190 +#define PT_GETFPXREGS PTRACE_GETFPXREGS
133192 + /* Set all extended floating point registers used by a processes.
133193 + This is not supported on all machines. */
133194 + PTRACE_SETFPXREGS = 19,
133195 +#define PT_SETFPXREGS PTRACE_SETFPXREGS
133197 + /* Continue and stop at the next (return from) syscall. */
133198 + PTRACE_SYSCALL = 24
133199 +#define PT_SYSCALL PTRACE_SYSCALL
133202 +/* Perform process tracing functions. REQUEST is one of the values
133203 + above, and determines the action to be taken.
133204 + For all requests except PTRACE_TRACEME, PID specifies the process to be
133205 + traced.
133207 + PID and the other arguments described above for the various requests should
133208 + appear (those that are used for the particular request) as:
133209 + pid_t PID, void *ADDR, int DATA, void *ADDR2
133210 + after REQUEST. */
133211 +#if defined _ABIN32 && _MIPS_SIM == _ABIN32
133212 +__extension__ extern long long int ptrace
133213 + (enum __ptrace_request __request, ...) __THROW;
133214 +#else
133215 +extern long int ptrace (enum __ptrace_request __request, ...) __THROW;
133216 +#endif
133218 +__END_DECLS
133220 +#endif /* _SYS_PTRACE_H */
133221 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/syscall.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/syscall.h
133222 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/syscall.h Thu Jan 1 01:00:00 1970
133223 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/syscall.h Mon Mar 17 16:50:05 2003
133224 @@ -0,0 +1,42 @@
133225 +/* Copyright (C) 1995, 1996, 1997, 2003 Free Software Foundation, Inc.
133226 + This file is part of the GNU C Library.
133228 + The GNU C Library is free software; you can redistribute it and/or
133229 + modify it under the terms of the GNU Lesser General Public
133230 + License as published by the Free Software Foundation; either
133231 + version 2.1 of the License, or (at your option) any later version.
133233 + The GNU C Library is distributed in the hope that it will be useful,
133234 + but WITHOUT ANY WARRANTY; without even the implied warranty of
133235 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
133236 + Lesser General Public License for more details.
133238 + You should have received a copy of the GNU Lesser General Public
133239 + License along with the GNU C Library; if not, write to the Free
133240 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
133241 + 02111-1307 USA. */
133243 +#ifndef _SYSCALL_H
133244 +#define _SYSCALL_H 1
133246 +/* This file should list the numbers of the system the system knows.
133247 + But instead of duplicating this we use the information available
133248 + from the kernel sources. */
133249 +#ifdef _LIBC
133250 +/* Since the kernel doesn't define macro names in a way usable for
133251 + glibc, we preprocess this header, and use it during the glibc build
133252 + process. */
133253 +# include <asm-unistd.h>
133254 +#else
133255 +# include <asm/unistd.h>
133256 +#endif
133258 +#ifndef _LIBC
133259 +/* The Linux kernel header file defines macros `__NR_<name>', but some
133260 + programs expect the traditional form `SYS_<name>'. So in building libc
133261 + we scan the kernel's list and produce <bits/syscall.h> with macros for
133262 + all the `SYS_' names. */
133263 +# include <bits/syscall.h>
133264 +#endif
133266 +#endif
133267 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/tas.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/tas.h
133268 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/tas.h Tue Jul 16 02:52:17 2002
133269 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/tas.h Fri Mar 14 08:03:36 2003
133270 @@ -1,4 +1,4 @@
133271 -/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
133272 +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
133273 This file is part of the GNU C Library.
133274 Contributed by Maciej W. Rozycki <macro@ds2.pg.gda.pl>, 2000.
133276 @@ -41,7 +41,9 @@
133277 ("/* Inline test and set */\n"
133278 "1:\n\t"
133279 ".set push\n\t"
133280 +#if _MIPS_SIM == _MIPS_SIM_ABI32
133281 ".set mips2\n\t"
133282 +#endif
133283 "ll %0,%3\n\t"
133284 "move %1,%4\n\t"
133285 "beq %0,%4,2f\n\t"
133286 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/ucontext.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/ucontext.h
133287 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sys/ucontext.h Sat Jul 7 21:21:35 2001
133288 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sys/ucontext.h Mon Mar 17 16:47:13 2003
133289 @@ -1,4 +1,4 @@
133290 -/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
133291 +/* Copyright (C) 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
133292 This file is part of the GNU C Library.
133294 The GNU C Library is free software; you can redistribute it and/or
133295 @@ -30,7 +30,11 @@
133298 /* Type for general register. */
133299 +#if defined _ABIN32 && _MIPS_SIM == _ABIN32
133300 +__extension__ typedef unsigned long long int greg_t;
133301 +#else
133302 typedef unsigned long int greg_t;
133303 +#endif
133305 /* Number of general registers. */
133306 #define NGREG 37
133307 @@ -70,7 +74,11 @@
133308 /* Userlevel context. */
133309 typedef struct ucontext
133311 +#if defined _ABIN32 && _MIPS_SIM == _ABIN32
133312 + __extension__ unsigned long long int uc_flags;
133313 +#else
133314 unsigned long int uc_flags;
133315 +#endif
133316 struct ucontext *uc_link;
133317 stack_t uc_stack;
133318 mcontext_t uc_mcontext;
133319 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/syscalls.list glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/syscalls.list
133320 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/syscalls.list Fri Jan 31 04:39:32 2003
133321 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/syscalls.list Fri Mar 7 10:46:27 2003
133322 @@ -32,14 +32,6 @@
133323 socket - socket i:iii __socket socket
133324 socketpair - socketpair i:iiif __socketpair socketpair
133327 -# These are defined locally because the caller is also defined in this dir.
133329 -s_llseek llseek _llseek i:iiipi __syscall__llseek
133330 -s_sigaction sigaction sigaction i:ipp __syscall_sigaction
133331 -s_ustat ustat ustat i:ip __syscall_ustat
133332 -sys_mknod xmknod mknod i:sii __syscall_mknod
133334 # System calls with wrappers.
133335 rt_sigaction - rt_sigaction i:ippi __syscall_rt_sigaction
133336 rt_sigpending - rt_sigpending i:pi __syscall_rt_sigpending
133337 @@ -47,35 +39,3 @@
133338 rt_sigqueueinfo - rt_sigqueueinfo i:iip __syscall_rt_sigqueueinfo
133339 rt_sigsuspend - rt_sigsuspend i:pi __syscall_rt_sigsuspend
133340 rt_sigtimedwait - rt_sigtimedwait i:pppi __syscall_rt_sigtimedwait
133341 -s_execve EXTRA execve i:spp __syscall_execve
133342 -s_exit _exit exit i:i __syscall_exit
133343 -s_fcntl fcntl fcntl i:iiF __syscall_fcntl
133344 -s_fcntl64 fcntl64 fcntl64 i:iiF __syscall_fcntl64
133345 -s_fstat64 fxstat64 fstat64 i:ip __syscall_fstat64
133346 -s_ftruncate64 ftruncate64 ftruncate64 i:iiii __syscall_ftruncate64
133347 -s_getcwd getcwd getcwd i:pi __syscall_getcwd
133348 -s_getdents getdents getdents i:ipi __syscall_getdents
133349 -s_getdents64 getdents getdents64 i:ipi __syscall_getdents64
133350 -s_getpriority getpriority getpriority i:ii __syscall_getpriority
133351 -s_ipc msgget ipc i:iiiip __syscall_ipc
133352 -s_lstat64 lxstat64 lstat64 i:sp __syscall_lstat64
133353 -s_mmap2 mmap64 mmap2 b:aniiii __syscall_mmap2
133354 -s_poll poll poll i:pii __syscall_poll
133355 -s_pread64 pread64 pread i:ibniii __syscall_pread
133356 -s_ptrace ptrace ptrace i:iipp __syscall_ptrace
133357 -s_pwrite64 pwrite64 pwrite i:ibniii __syscall_pwrite
133358 -s_readahead EXTRA readahead i:iiii __syscall_readahead
133359 -s_reboot reboot reboot i:iii __syscall_reboot
133360 -s_setrlimit setrlimit setrlimit i:ip __syscall_setrlimit
133361 -s_sigpending sigpending sigpending i:p __syscall_sigpending
133362 -s_sigprocmask sigprocmask sigprocmask i:ipp __syscall_sigprocmask
133363 -s_stat64 xstat64 stat64 i:sp __syscall_stat64
133364 -s_truncate64 truncate64 truncate64 i:siii __syscall_truncate64
133366 -# Todo: we can pass 6 args in registers, no need for the wrapper
133367 -sys_sysctl sysctl _sysctl i:p __syscall__sysctl
133368 -sys_fstat fxstat fstat i:ip __syscall_fstat
133369 -sys_lstat lxstat lstat i:sp __syscall_lstat
133370 -sys_readv readv readv i:ipi __syscall_readv
133371 -sys_stat xstat stat i:sp __syscall_stat
133372 -sys_writev writev writev i:ipi __syscall_writev
133373 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sysdep.h
133374 --- glibc-2.3.2/sysdeps/unix/sysv/linux/mips/sysdep.h Mon Jan 27 19:55:20 2003
133375 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/mips/sysdep.h Thu Jan 1 01:00:00 1970
133376 @@ -1,282 +0,0 @@
133377 -/* Copyright (C) 2000 Free Software Foundation, Inc.
133378 - This file is part of the GNU C Library.
133380 - The GNU C Library is free software; you can redistribute it and/or
133381 - modify it under the terms of the GNU Lesser General Public
133382 - License as published by the Free Software Foundation; either
133383 - version 2.1 of the License, or (at your option) any later version.
133385 - The GNU C Library is distributed in the hope that it will be useful,
133386 - but WITHOUT ANY WARRANTY; without even the implied warranty of
133387 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
133388 - Lesser General Public License for more details.
133390 - You should have received a copy of the GNU Lesser General Public
133391 - License along with the GNU C Library; if not, write to the Free
133392 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
133393 - 02111-1307 USA. */
133395 -#ifndef _LINUX_MIPS_SYSDEP_H
133396 -#define _LINUX_MIPS_SYSDEP_H 1
133398 -/* There is some commonality. */
133399 -#include <sysdeps/unix/mips/sysdep.h>
133401 -/* For Linux we can use the system call table in the header file
133402 - /usr/include/asm/unistd.h
133403 - of the kernel. But these symbols do not follow the SYS_* syntax
133404 - so we have to redefine the `SYS_ify' macro here. */
133405 -#undef SYS_ify
133406 -#ifdef __STDC__
133407 -# define SYS_ify(syscall_name) __NR_##syscall_name
133408 -#else
133409 -# define SYS_ify(syscall_name) __NR_/**/syscall_name
133410 -#endif
133412 -#ifdef __ASSEMBLER__
133414 -/* We don't want the label for the error handler to be visible in the symbol
133415 - table when we define it here. */
133416 -#ifdef __PIC__
133417 -# define SYSCALL_ERROR_LABEL 99b
133418 -#endif
133420 -#else /* ! __ASSEMBLER__ */
133422 -/* Define a macro which expands into the inline wrapper code for a system
133423 - call. */
133424 -#undef INLINE_SYSCALL
133425 -#define INLINE_SYSCALL(name, nr, args...) \
133426 - ({ INTERNAL_SYSCALL_DECL(err); \
133427 - long result_var = INTERNAL_SYSCALL (name, err, nr, args); \
133428 - if ( INTERNAL_SYSCALL_ERROR_P (result_var, err) ) \
133429 - { \
133430 - __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \
133431 - result_var = -1L; \
133432 - } \
133433 - result_var; })
133435 -#undef INTERNAL_SYSCALL_DECL
133436 -#define INTERNAL_SYSCALL_DECL(err) long err
133438 -#undef INTERNAL_SYSCALL_ERROR_P
133439 -#define INTERNAL_SYSCALL_ERROR_P(val, err) ((long) (err))
133441 -#undef INTERNAL_SYSCALL_ERRNO
133442 -#define INTERNAL_SYSCALL_ERRNO(val, err) (val)
133444 -#undef INTERNAL_SYSCALL
133445 -#define INTERNAL_SYSCALL(name, err, nr, args...) internal_syscall##nr(name, err, args)
133447 -#define internal_syscall0(name, err, dummy...) \
133448 -({ \
133449 - long _sys_result; \
133451 - { \
133452 - register long __v0 asm("$2"); \
133453 - register long __a3 asm("$7"); \
133454 - __asm__ volatile ( \
133455 - ".set\tnoreorder\n\t" \
133456 - "li\t$2, %2\t\t\t# " #name "\n\t" \
133457 - "syscall\n\t" \
133458 - ".set reorder" \
133459 - : "=r" (__v0), "=r" (__a3) \
133460 - : "i" (SYS_ify(name)) \
133461 - : __SYSCALL_CLOBBERS); \
133462 - err = __a3; \
133463 - _sys_result = __v0; \
133464 - } \
133465 - _sys_result; \
133468 -#define internal_syscall1(name, err, arg1) \
133469 -({ \
133470 - long _sys_result; \
133472 - { \
133473 - register long __v0 asm("$2"); \
133474 - register long __a0 asm("$4") = (long) arg1; \
133475 - register long __a3 asm("$7"); \
133476 - __asm__ volatile ( \
133477 - ".set\tnoreorder\n\t" \
133478 - "li\t$2, %3\t\t\t# " #name "\n\t" \
133479 - "syscall\n\t" \
133480 - ".set reorder" \
133481 - : "=r" (__v0), "=r" (__a3) \
133482 - : "r" (__a0), "i" (SYS_ify(name)) \
133483 - : __SYSCALL_CLOBBERS); \
133484 - err = __a3; \
133485 - _sys_result = __v0; \
133486 - } \
133487 - _sys_result; \
133490 -#define internal_syscall2(name, err, arg1, arg2) \
133491 -({ \
133492 - long _sys_result; \
133494 - { \
133495 - register long __v0 asm("$2"); \
133496 - register long __a0 asm("$4") = (long) arg1; \
133497 - register long __a1 asm("$5") = (long) arg2; \
133498 - register long __a3 asm("$7"); \
133499 - __asm__ volatile ( \
133500 - ".set\tnoreorder\n\t" \
133501 - "li\t$2, %4\t\t\t# " #name "\n\t" \
133502 - "syscall\n\t" \
133503 - ".set\treorder" \
133504 - : "=r" (__v0), "=r" (__a3) \
133505 - : "r" (__a0), "r" (__a1), "i" (SYS_ify(name)) \
133506 - : __SYSCALL_CLOBBERS); \
133507 - err = __a3; \
133508 - _sys_result = __v0; \
133509 - } \
133510 - _sys_result; \
133513 -#define internal_syscall3(name, err, arg1, arg2, arg3) \
133514 -({ \
133515 - long _sys_result; \
133517 - { \
133518 - register long __v0 asm("$2"); \
133519 - register long __a0 asm("$4") = (long) arg1; \
133520 - register long __a1 asm("$5") = (long) arg2; \
133521 - register long __a2 asm("$6") = (long) arg3; \
133522 - register long __a3 asm("$7"); \
133523 - __asm__ volatile ( \
133524 - ".set\tnoreorder\n\t" \
133525 - "li\t$2, %5\t\t\t# " #name "\n\t" \
133526 - "syscall\n\t" \
133527 - ".set\treorder" \
133528 - : "=r" (__v0), "=r" (__a3) \
133529 - : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
133530 - : __SYSCALL_CLOBBERS); \
133531 - err = __a3; \
133532 - _sys_result = __v0; \
133533 - } \
133534 - _sys_result; \
133537 -#define internal_syscall4(name, err, arg1, arg2, arg3, arg4) \
133538 -({ \
133539 - long _sys_result; \
133541 - { \
133542 - register long __v0 asm("$2"); \
133543 - register long __a0 asm("$4") = (long) arg1; \
133544 - register long __a1 asm("$5") = (long) arg2; \
133545 - register long __a2 asm("$6") = (long) arg3; \
133546 - register long __a3 asm("$7") = (long) arg4; \
133547 - __asm__ volatile ( \
133548 - ".set\tnoreorder\n\t" \
133549 - "li\t$2, %5\t\t\t# " #name "\n\t" \
133550 - "syscall\n\t" \
133551 - ".set\treorder" \
133552 - : "=r" (__v0), "+r" (__a3) \
133553 - : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
133554 - : __SYSCALL_CLOBBERS); \
133555 - err = __a3; \
133556 - _sys_result = __v0; \
133557 - } \
133558 - _sys_result; \
133561 -#define internal_syscall5(name, err, arg1, arg2, arg3, arg4, arg5) \
133562 -({ \
133563 - long _sys_result; \
133565 - { \
133566 - register long __v0 asm("$2"); \
133567 - register long __a0 asm("$4") = (long) arg1; \
133568 - register long __a1 asm("$5") = (long) arg2; \
133569 - register long __a2 asm("$6") = (long) arg3; \
133570 - register long __a3 asm("$7") = (long) arg4; \
133571 - __asm__ volatile ( \
133572 - ".set\tnoreorder\n\t" \
133573 - "lw\t$2, %6\n\t" \
133574 - "subu\t$29, 32\n\t" \
133575 - "sw\t$2, 16($29)\n\t" \
133576 - "li\t$2, %5\t\t\t# " #name "\n\t" \
133577 - "syscall\n\t" \
133578 - "addiu\t$29, 32\n\t" \
133579 - ".set\treorder" \
133580 - : "=r" (__v0), "+r" (__a3) \
133581 - : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
133582 - "m" ((long)arg5) \
133583 - : __SYSCALL_CLOBBERS); \
133584 - err = __a3; \
133585 - _sys_result = __v0; \
133586 - } \
133587 - _sys_result; \
133590 -#define internal_syscall6(name, err, arg1, arg2, arg3, arg4, arg5, arg6)\
133591 -({ \
133592 - long _sys_result; \
133594 - { \
133595 - register long __v0 asm("$2"); \
133596 - register long __a0 asm("$4") = (long) arg1; \
133597 - register long __a1 asm("$5") = (long) arg2; \
133598 - register long __a2 asm("$6") = (long) arg3; \
133599 - register long __a3 asm("$7") = (long) arg4; \
133600 - __asm__ volatile ( \
133601 - ".set\tnoreorder\n\t" \
133602 - "lw\t$2, %6\n\t" \
133603 - "lw\t$8, %7\n\t" \
133604 - "subu\t$29, 32\n\t" \
133605 - "sw\t$2, 16($29)\n\t" \
133606 - "sw\t$8, 20($29)\n\t" \
133607 - "li\t$2, %5\t\t\t# " #name "\n\t" \
133608 - "syscall\n\t" \
133609 - "addiu\t$29, 32\n\t" \
133610 - ".set\treorder" \
133611 - : "=r" (__v0), "+r" (__a3) \
133612 - : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
133613 - "m" ((long)arg5), "m" ((long)arg6) \
133614 - : __SYSCALL_CLOBBERS); \
133615 - err = __a3; \
133616 - _sys_result = __v0; \
133617 - } \
133618 - _sys_result; \
133621 -#define internal_syscall7(name, err, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\
133622 -({ \
133623 - long _sys_result; \
133625 - { \
133626 - register long __v0 asm("$2"); \
133627 - register long __a0 asm("$4") = (long) arg1; \
133628 - register long __a1 asm("$5") = (long) arg2; \
133629 - register long __a2 asm("$6") = (long) arg3; \
133630 - register long __a3 asm("$7") = (long) arg4; \
133631 - __asm__ volatile ( \
133632 - ".set\tnoreorder\n\t" \
133633 - "lw\t$2, %6\n\t" \
133634 - "lw\t$8, %7\n\t" \
133635 - "lw\t$9, %8\n\t" \
133636 - "subu\t$29, 32\n\t" \
133637 - "sw\t$2, 16($29)\n\t" \
133638 - "sw\t$8, 20($29)\n\t" \
133639 - "sw\t$9, 24($29)\n\t" \
133640 - "li\t$2, %5\t\t\t# " #name "\n\t" \
133641 - "syscall\n\t" \
133642 - "addiu\t$29, 32\n\t" \
133643 - ".set\treorder" \
133644 - : "=r" (__v0), "+r" (__a3) \
133645 - : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
133646 - "m" ((long)arg5), "m" ((long)arg6), "m" ((long)arg7) \
133647 - : __SYSCALL_CLOBBERS); \
133648 - err = __a3; \
133649 - _sys_result = __v0; \
133650 - } \
133651 - _sys_result; \
133654 -#define __SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25"
133656 -#endif /* __ASSEMBLER__ */
133658 -#endif /* linux/mips/sysdep.h */
133659 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/pathconf.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/pathconf.c
133660 --- glibc-2.3.2/sysdeps/unix/sysv/linux/pathconf.c Wed Oct 23 08:21:19 2002
133661 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/pathconf.c Fri Mar 14 07:22:16 2003
133662 @@ -1,5 +1,5 @@
133663 /* Get file-specific information about a file. Linux version.
133664 - Copyright (C) 1991,95,96,98,99,2000,2001,2002 Free Software Foundation, Inc.
133665 + Copyright (C) 1991,1995,1996,1998-2002,2003 Free Software Foundation, Inc.
133666 This file is part of the GNU C Library.
133668 The GNU C Library is free software; you can redistribute it and/or
133669 @@ -36,8 +36,13 @@
133671 case _PC_LINK_MAX:
133672 return statfs_link_max (__statfs (file, &fsbuf), &fsbuf);
133674 case _PC_FILESIZEBITS:
133675 return statfs_filesize_max (__statfs (file, &fsbuf), &fsbuf);
133677 + case _PC_2_SYMLINKS:
133678 + return statfs_symlinks (__statfs (file, &fsbuf), &fsbuf);
133680 default:
133681 return posix_pathconf (file, name);
133683 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/pathconf.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/pathconf.h
133684 --- glibc-2.3.2/sysdeps/unix/sysv/linux/pathconf.h Wed Oct 23 08:21:19 2002
133685 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/pathconf.h Fri Mar 14 07:26:16 2003
133686 @@ -1,5 +1,5 @@
133687 /* Common parts of Linux implementation of pathconf and fpathconf.
133688 - Copyright (C) 1991,95,96,98,99,2000,2001,2002 Free Software Foundation, Inc.
133689 + Copyright (C) 1991,1995,1996,1998-2002,2003 Free Software Foundation, Inc.
133690 This file is part of the GNU C Library.
133692 The GNU C Library is free software; you can redistribute it and/or
133693 @@ -22,8 +22,8 @@
133694 #include <sys/statfs.h>
133695 #include "linux_fsinfo.h"
133697 -/* Used like: return statfs_link_max (__statfs (name, &buf), &buf); */
133699 +/* Used like: return statfs_link_max (__statfs (name, &buf), &buf); */
133700 static inline long int
133701 statfs_link_max (int result, const struct statfs *fsbuf)
133703 @@ -75,8 +75,8 @@
133707 -/* Used like: return statfs_filesize_max (__statfs (name, &buf), &buf); */
133709 +/* Used like: return statfs_filesize_max (__statfs (name, &buf), &buf); */
133710 static inline long int
133711 statfs_filesize_max (int result, const struct statfs *fsbuf)
133713 @@ -112,5 +112,40 @@
133715 default:
133716 return 32;
133721 +/* Used like: return statfs_link_max (__statfs (name, &buf), &buf); */
133722 +static inline long int
133723 +statfs_symlinks (int result, const struct statfs *fsbuf)
133725 + if (result < 0)
133727 + if (errno == ENOSYS)
133728 + /* Not possible, return the default value. */
133729 + return 1;
133731 + /* Some error occured. */
133732 + return -1;
133735 + switch (fsbuf->f_type)
133737 + case ADFS_SUPER_MAGIC:
133738 + case BFS_MAGIC:
133739 + case CRAMFS_MAGIC:
133740 + case DEVPTS_SUPER_MAGIC:
133741 + case EFS_SUPER_MAGIC:
133742 + case EFS_MAGIC:
133743 + case MSDOS_SUPER_MAGIC:
133744 + case NTFS_SUPER_MAGIC:
133745 + case QNX4_SUPER_MAGIC:
133746 + case ROMFS_SUPER_MAGIC:
133747 + /* No symlink support. */
133748 + return 0;
133750 + default:
133751 + return 1;
133754 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h
133755 --- glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h Sat Mar 1 01:07:36 2003
133756 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h Sat Mar 1 23:31:54 2003
133757 @@ -45,7 +45,6 @@
133758 # define O_DIRECT 0400000 /* Direct disk access. */
133759 # define O_DIRECTORY 040000 /* Must be a directory. */
133760 # define O_NOFOLLOW 0100000 /* Do not follow links. */
133761 -# define O_DIRECT 0400000 /* Direct disk access. */
133762 #endif
133764 #ifdef __USE_LARGEFILE64
133765 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
133766 --- glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/bits/mman.h Sat Jul 7 21:21:35 2001
133767 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/bits/mman.h Mon Mar 3 11:00:51 2003
133768 @@ -1,5 +1,5 @@
133769 /* Definitions for POSIX memory map interface. Linux/PowerPC version.
133770 - Copyright (C) 1997, 2000 Free Software Foundation, Inc.
133771 + Copyright (C) 1997, 2000, 2003 Free Software Foundation, Inc.
133772 This file is part of the GNU C Library.
133774 The GNU C Library is free software; you can redistribute it and/or
133775 @@ -52,11 +52,13 @@
133777 /* These are Linux-specific. */
133778 #ifdef __USE_MISC
133779 -# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
133780 -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
133781 -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
133782 -# define MAP_LOCKED 0x0080 /* Lock the mapping. */
133783 -# define MAP_NORESERVE 0x0040 /* Don't check for reservations. */
133784 +# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
133785 +# define MAP_DENYWRITE 0x00800 /* ETXTBSY */
133786 +# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
133787 +# define MAP_LOCKED 0x00080 /* Lock the mapping. */
133788 +# define MAP_NORESERVE 0x00040 /* Don't check for reservations. */
133789 +# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
133790 +# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
133791 #endif
133793 /* Flags to `msync'. */
133794 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/chown.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/chown.c
133795 --- glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/chown.c Tue Nov 5 09:13:00 2002
133796 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/chown.c Sun Mar 16 02:03:52 2003
133797 @@ -1,5 +1,5 @@
133798 /* chown() compatibility.
133799 - Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
133800 + Copyright (C) 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
133801 This file is part of the GNU C Library.
133803 The GNU C Library is free software; you can redistribute it and/or
133804 @@ -42,7 +42,7 @@
133805 char link[PATH_MAX+2];
133806 char path[2*PATH_MAX+4];
133807 int loopct;
133808 - int filelen;
133809 + size_t filelen;
133810 static int libc_old_chown = 0 /* -1=old linux, 1=new linux, 0=unknown */;
133812 if (libc_old_chown == 1)
133813 @@ -82,7 +82,7 @@
133814 ENAMETOOLONG before this, usually. */
133815 for (loopct = 0; loopct < 128; loopct++)
133817 - int linklen;
133818 + size_t linklen;
133820 if (err >= PATH_MAX+1)
133822 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c
133823 --- glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c Fri Aug 23 21:47:00 2002
133824 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c Sun Mar 16 01:40:44 2003
133825 @@ -1,5 +1,5 @@
133826 /* Operating system support for run-time dynamic linker. Linux/PPC version.
133827 - Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc.
133828 + Copyright (C) 1997, 1998, 2001, 2003 Free Software Foundation, Inc.
133829 This file is part of the GNU C Library.
133831 The GNU C Library is free software; you can redistribute it and/or
133832 @@ -25,27 +25,18 @@
133833 extern int __cache_line_size;
133834 weak_extern (__cache_line_size)
133836 -#define DL_PLATFORM_INIT __aux_init_cache(_dl_auxv)
133838 /* Scan the Aux Vector for the "Data Cache Block Size" entry. If found
133839 verify that the static extern __cache_line_size is defined by checking
133840 for not NULL. If it is defined then assign the cache block size
133841 value to __cache_line_size. */
133842 -static inline void
133843 -__aux_init_cache (ElfW(auxv_t) *av)
133845 - for (; av->a_type != AT_NULL; ++av)
133846 - switch (av->a_type)
133848 - case AT_DCACHEBSIZE:
133850 - int *cls = & __cache_line_size;
133851 - if (cls != NULL)
133852 - *cls = av->a_un.a_val;
133854 +#define DL_PLATFORM_AUXV \
133855 + case AT_DCACHEBSIZE: \
133856 + { \
133857 + int *cls = & __cache_line_size; \
133858 + if (cls != NULL) \
133859 + *cls = av->a_un.a_val; \
133860 + } \
133861 break;
133865 #ifndef __ASSUME_STD_AUXV
133867 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S
133868 --- glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S Sun Aug 4 04:20:06 2002
133869 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S Mon Mar 10 09:52:31 2003
133870 @@ -28,7 +28,8 @@
133871 all the freaky stuff we have to do to make the call useful. */
133873 /* int [r3] clone(int (*fn)(void *arg) [r3], void *child_stack [r4],
133874 - int flags [r5], void *arg [r6]); */
133875 + int flags [r5], void *arg [r6], void *parent_tid [r7],
133876 + void *tls [r8], void *child_tid [r9]); */
133878 ENTRY (BP_SYM (__clone))
133879 /* GKM FIXME: add bounds checks, where sensible. */
133880 @@ -58,6 +59,11 @@
133881 /* 'flags' argument is first parameter to clone syscall. (The other
133882 argument is the stack pointer, already in r4.) */
133883 mr r3,r5
133885 + /* Move the parent_tid, child_tid and tls arguments. */
133886 + mr r5,r7
133887 + mr r6,r8
133888 + mr r7,r9
133890 /* Do the call. */
133891 DO_CALL(SYS_ify(clone))
133892 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S
133893 --- glibc-2.3.2/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S Wed Sep 18 01:50:03 2002
133894 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S Mon Mar 10 22:04:29 2003
133895 @@ -28,7 +28,8 @@
133896 all the freaky stuff we have to do to make the call useful. */
133898 /* int [r3] clone(int (*fn)(void *arg) [r3], void *child_stack [r4],
133899 - int flags [r5], void *arg [r6]); */
133900 + int flags [r5], void *arg [r6], void *parent_tid [r7],
133901 + void *tls [r8], void *child_tid [r9]); */
133903 ENTRY (BP_SYM (__clone))
133904 /* GKM FIXME: add bounds checks, where sensible. */
133905 @@ -37,8 +38,8 @@
133907 /* Check for child_stack == NULL || fn == NULL. */
133908 cmpdi cr0,r4,0
133909 - ld r7,0(r3)
133910 - cmpdi cr1,r7,0
133911 + ld r0,0(r3)
133912 + cmpdi cr1,r0,0
133913 cror cr0*4+eq,cr1*4+eq,cr0*4+eq
133914 beq- cr0,L(badargs)
133916 @@ -61,6 +62,10 @@
133917 /* 'flags' argument is first parameter to clone syscall. (The other
133918 argument is the stack pointer, already in r4.) */
133919 mr r3,r5
133920 + /* Move the parent_tid, child_tid and tls arguments. */
133921 + mr r5,r7
133922 + mr r6,r8
133923 + mr r7,r9
133925 /* Do the call. */
133926 DO_CALL(SYS_ify(clone))
133927 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/s390/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/bits/mman.h
133928 --- glibc-2.3.2/sysdeps/unix/sysv/linux/s390/bits/mman.h Thu Jul 11 23:39:44 2002
133929 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/bits/mman.h Mon Mar 3 11:02:34 2003
133930 @@ -1,5 +1,5 @@
133931 /* Definitions for POSIX memory map interface. Linux/s390 version.
133932 - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
133933 + Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
133934 This file is part of the GNU C Library.
133936 The GNU C Library is free software; you can redistribute it and/or
133937 @@ -52,12 +52,14 @@
133939 /* These are Linux-specific. */
133940 #ifdef __USE_MISC
133941 -# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
133942 -# define MAP_GROWSUP 0x0200 /* Register stack-like segment */
133943 -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
133944 -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
133945 -# define MAP_LOCKED 0x2000 /* Lock the mapping. */
133946 -# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
133947 +# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
133948 +# define MAP_GROWSUP 0x00200 /* Register stack-like segment */
133949 +# define MAP_DENYWRITE 0x00800 /* ETXTBSY */
133950 +# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
133951 +# define MAP_LOCKED 0x02000 /* Lock the mapping. */
133952 +# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
133953 +# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
133954 +# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
133955 #endif
133957 /* Flags to `msync'. */
133958 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/s390/bits/siginfo.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/bits/siginfo.h
133959 --- glibc-2.3.2/sysdeps/unix/sysv/linux/s390/bits/siginfo.h Thu Dec 5 01:23:11 2002
133960 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/bits/siginfo.h Thu Mar 27 00:41:58 2003
133961 @@ -1,5 +1,5 @@
133962 /* siginfo_t, sigevent and constants. S/390 version.
133963 - Copyright (C) 2001, 2002 Free Software Foundation, Inc.
133964 + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
133965 This file is part of the GNU C Library.
133967 The GNU C Library is free software; you can redistribute it and/or
133968 @@ -69,8 +69,9 @@
133969 /* POSIX.1b timers. */
133970 struct
133972 - unsigned int _timer1;
133973 - unsigned int _timer2;
133974 + int si_tid; /* Timer ID. */
133975 + int si_overrun; /* Overrun count. */
133976 + sigval_t si_sigval; /* Signal value. */
133977 } _timer;
133979 /* POSIX.1b signals. */
133980 @@ -111,8 +112,8 @@
133981 /* X/Open requires some more fields with fixed names. */
133982 # define si_pid _sifields._kill.si_pid
133983 # define si_uid _sifields._kill.si_uid
133984 -# define si_timer1 _sifields._timer._timer1
133985 -# define si_timer2 _sifields._timer._timer2
133986 +# define si_timerid _sifields._timer.si_tid
133987 +# define si_overrun _sifields._timer.si_overrun
133988 # define si_status _sifields._sigchld.si_status
133989 # define si_utime _sifields._sigchld.si_utime
133990 # define si_stime _sifields._sigchld.si_stime
133991 @@ -269,9 +270,6 @@
133992 # define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
133993 # endif
133995 -/* Forward declaration of the `pthread_attr_t' type. */
133996 -struct __pthread_attr_s;
133998 typedef struct sigevent
134000 sigval_t sigev_value;
134001 @@ -301,8 +299,11 @@
134002 # define SIGEV_SIGNAL SIGEV_SIGNAL
134003 SIGEV_NONE, /* Other notification: meaningless. */
134004 # define SIGEV_NONE SIGEV_NONE
134005 - SIGEV_THREAD /* Deliver via thread creation. */
134006 + SIGEV_THREAD, /* Deliver via thread creation. */
134007 # define SIGEV_THREAD SIGEV_THREAD
134009 + SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */
134010 +#define SIGEV_THREAD_ID SIGEV_THREAD_ID
134013 #endif /* have _SIGNAL_H. */
134014 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S
134015 --- glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S Sat Jul 7 21:21:35 2001
134016 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S Mon Mar 3 19:17:44 2003
134017 @@ -37,15 +37,19 @@
134018 lr %r4,%r5 /* third parameter */
134019 lr %r5,%r6 /* fourth parameter */
134020 l %r6,192(%r15) /* fifth parameter */
134021 - basr %r7,0
134022 -.L0: ex %r1,.L1-.L0(%r7) /* lsb of R1 is subsituted as SVC number */
134024 - l %r15,0(0,%r15) /* load back chain */
134025 + basr %r7,0
134026 +0: cl %r1,4f-0b(%r7) /* svc number < 256? */
134027 + jl 2f
134028 +1: svc 0
134029 + j 3f
134030 +2: ex %r1,1b-0b(%r7) /* lsb of R1 is subsituted as SVC number */
134031 +3: l %r15,0(%r15) /* load back chain */
134032 lm %r6,15,24(%r15) /* load registers */
134034 lhi %r0,-4095
134035 clr %r2,%r0 /* check R2 for error */
134036 jnl SYSCALL_ERROR_LABEL
134037 br %r14 /* return to caller */
134038 -.L1: .word 0x0A00 /* opcode for SVC 0 */
134039 +4: .long 256
134040 PSEUDO_END (syscall)
134041 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
134042 --- glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h Tue Jan 28 11:20:09 2003
134043 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h Wed Mar 26 19:04:22 2003
134044 @@ -59,6 +59,16 @@
134045 SYSCALL_ERROR_HANDLER; \
134046 END (name)
134048 +#undef PSEUDO_NOERRNO
134049 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
134050 + .text; \
134051 + ENTRY (name) \
134052 + DO_CALL (syscall_name, args)
134054 +#undef PSEUDO_END_NOERRNO
134055 +#define PSEUDO_END_NOERRNO(name) \
134056 + END (name)
134058 #ifndef PIC
134059 # define SYSCALL_ERROR_LABEL 0f
134060 # define SYSCALL_ERROR_HANDLER \
134061 @@ -133,11 +143,19 @@
134064 #define DO_CALL(syscall, args) \
134065 - svc SYS_ify (syscall)
134066 + .if SYS_ify (syscall) < 256; \
134067 + svc SYS_ify (syscall); \
134068 + .else; \
134069 + lhi %r1,SYS_ify (syscall); \
134070 + svc 0; \
134071 + .endif
134073 #define ret \
134074 br 14
134076 +#define ret_NOERRNO \
134077 + br 14
134079 #endif /* __ASSEMBLER__ */
134081 #undef INLINE_SYSCALL
134082 @@ -154,8 +172,8 @@
134083 #undef INTERNAL_SYSCALL_DECL
134084 #define INTERNAL_SYSCALL_DECL(err) do { } while (0)
134086 -#undef INTERNAL_SYSCALL
134087 -#define INTERNAL_SYSCALL(name, err, nr, args...) \
134088 +#undef INTERNAL_SYSCALL_DIRECT
134089 +#define INTERNAL_SYSCALL_DIRECT(name, err, nr, args...) \
134091 DECLARGS_##nr(args) \
134092 register int _ret asm("2"); \
134093 @@ -165,6 +183,25 @@
134094 : "i" (__NR_##name) ASMFMT_##nr \
134095 : "memory" ); \
134096 _ret; })
134098 +#undef INTERNAL_SYSCALL_SVC0
134099 +#define INTERNAL_SYSCALL_SVC0(name, err, nr, args...) \
134100 + ({ \
134101 + DECLARGS_##nr(args) \
134102 + register unsigned long _nr asm("1") = (unsigned long)(__NR_##name); \
134103 + register int _ret asm("2"); \
134104 + asm volatile ( \
134105 + "svc 0\n\t" \
134106 + : "=d" (_ret) \
134107 + : "d" (_nr), "i" (__NR_##name) ASMFMT_##nr \
134108 + : "memory" ); \
134109 + _ret; })
134111 +#undef INTERNAL_SYSCALL
134112 +#define INTERNAL_SYSCALL(name, err, nr, args...) \
134113 + (((__NR_##name) < 256) ? \
134114 + INTERNAL_SYSCALL_DIRECT(name, err, nr, args) : \
134115 + INTERNAL_SYSCALL_SVC0(name, err,nr, args))
134117 #undef INTERNAL_SYSCALL_ERROR_P
134118 #define INTERNAL_SYSCALL_ERROR_P(val, err) \
134119 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
134120 --- glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S Tue Jan 28 11:20:09 2003
134121 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S Mon Mar 3 19:17:44 2003
134122 @@ -37,16 +37,20 @@
134123 lgr %r4,%r5 /* Third parameter. */
134124 lgr %r5,%r6 /* Fourth parameter. */
134125 lg %r6,320(%r15) /* Fifth parameter. */
134126 - basr %r7,0
134127 -.L0: ex %r1,.L1-.L0(%r7) /* Lsb of R1 is subsituted as SVC number. */
134129 - lg %r15,0(%r15) /* Load back chain. */
134130 + basr %r7,0
134131 +0: clg %r1,4f-0b(%r7) /* svc number < 256? */
134132 + jl 2f
134133 +1: svc 0
134134 + j 3f
134135 +2: ex %r1,1b-0b(%r7) /* lsb of R1 is subsituted as SVC number */
134136 +3: lg %r15,0(%r15) /* load back chain */
134137 lmg %r6,15,48(%r15) /* Load registers. */
134139 lghi %r0,-4095
134140 clgr %r2,%r0 /* Check R2 for error. */
134141 jgnl SYSCALL_ERROR_LABEL
134142 br %r14 /* Return to caller. */
134143 -.L1: .word 0x0A00 /* Opcode for SVC 0. */
134144 +4: .quad 256
134145 PSEUDO_END (syscall)
134147 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list
134148 --- glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list Wed Feb 5 22:42:21 2003
134149 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list Mon Mar 10 20:21:15 2003
134150 @@ -2,8 +2,8 @@
134152 llseek EXTRA lseek C:3 __libc_lseek __lseek lseek __libc_lseek64 __llseek llseek __lseek64 lseek64
134153 lseek llseek -
134154 -pread - pread C:4 __libc_pread __libc_pread64 __pread pread __pread64 pread64
134155 -pwrite - pwrite C:4 __libc_pwrite __libc_pwrite64 __pwrite pwrite __pwrite64 pwrite64
134156 +pread - pread64 C:4 __libc_pread __libc_pread64 __pread pread __pread64 pread64
134157 +pwrite - pwrite64 C:4 __libc_pwrite __libc_pwrite64 __pwrite pwrite __pwrite64 pwrite64
134158 fstatfs - fstatfs i:ip __fstatfs fstatfs fstatfs64 __fstatfs64
134159 statfs - statfs i:sp __statfs statfs statfs64
134160 getpeername - getpeername i:ipp __getpeername getpeername
134161 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
134162 --- glibc-2.3.2/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h Tue Jan 28 11:20:09 2003
134163 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h Sun Mar 23 20:42:23 2003
134164 @@ -1,5 +1,5 @@
134165 /* Assembler macros for 64 bit S/390.
134166 - Copyright (C) 2001,02 Free Software Foundation, Inc.
134167 + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
134168 Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
134169 This file is part of the GNU C Library.
134171 @@ -31,6 +31,18 @@
134172 /* In newer 2.1 kernels __NR_syscall is missing so we define it here. */
134173 #define __NR_syscall 0
134176 + * Newer kernel versions redefined __NR_pread and __NR_pwrite to
134177 + * __NR_pread64 and __NR_pwrite64. We use the new names but have
134178 + * to define them on our own for compiling against older kernels.
134180 +#ifndef __NR_pread64
134181 +# define __NR_pread64 __NR_pread
134182 +#endif
134183 +#ifndef __NR_pwrite64
134184 +# define __NR_pwrite64 __NR_pwrite
134185 +#endif
134187 #undef SYS_ify
134188 #define SYS_ify(syscall_name) __NR_##syscall_name
134190 @@ -60,6 +72,17 @@
134191 SYSCALL_ERROR_HANDLER; \
134192 END (name)
134194 +#undef PSEUDO_NOERRNO
134195 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
134196 + .text; \
134197 + ENTRY (name) \
134198 + DO_CALL (syscall_name, args)
134200 +#undef PSEUDO_END_NOERRNO
134201 +#define PSEUDO_END_NOERRNO(name) \
134202 + SYSCALL_ERROR_HANDLER; \
134203 + END (name)
134205 #ifndef PIC
134206 # define SYSCALL_ERROR_LABEL syscall_error
134207 # define SYSCALL_ERROR_HANDLER
134208 @@ -122,11 +145,19 @@
134211 #define DO_CALL(syscall, args) \
134212 - svc SYS_ify (syscall)
134213 + .if SYS_ify (syscall) < 256; \
134214 + svc SYS_ify (syscall); \
134215 + .else; \
134216 + lghi %r1,SYS_ify (syscall); \
134217 + svc 0; \
134218 + .endif
134220 #define ret \
134221 br 14
134223 +#define ret_NOERRNO \
134224 + br 14
134226 #endif /* __ASSEMBLER__ */
134228 #undef INLINE_SYSCALL
134229 @@ -143,8 +174,8 @@
134230 #undef INTERNAL_SYSCALL_DECL
134231 #define INTERNAL_SYSCALL_DECL(err) do { } while (0)
134233 -#undef INTERNAL_SYSCALL
134234 -#define INTERNAL_SYSCALL(name, err, nr, args...) \
134235 +#undef INTERNAL_SYSCALL_DIRECT
134236 +#define INTERNAL_SYSCALL_DIRECT(name, err, nr, args...) \
134238 DECLARGS_##nr(args) \
134239 register int _ret asm("2"); \
134240 @@ -154,6 +185,25 @@
134241 : "i" (__NR_##name) ASMFMT_##nr \
134242 : "memory" ); \
134243 _ret; })
134245 +#undef INTERNAL_SYSCALL_SVC0
134246 +#define INTERNAL_SYSCALL_SVC0(name, err, nr, args...) \
134247 + ({ \
134248 + DECLARGS_##nr(args) \
134249 + register unsigned long _nr asm("1") = (unsigned long)(__NR_##name); \
134250 + register int _ret asm("2"); \
134251 + asm volatile ( \
134252 + "svc 0\n\t" \
134253 + : "=d" (_ret) \
134254 + : "d" (_nr), "i" (__NR_##name) ASMFMT_##nr \
134255 + : "memory" ); \
134256 + _ret; })
134258 +#undef INTERNAL_SYSCALL
134259 +#define INTERNAL_SYSCALL(name, err, nr, args...) \
134260 + (((__NR_##name) < 256) ? \
134261 + INTERNAL_SYSCALL_DIRECT(name, err, nr, args) : \
134262 + INTERNAL_SYSCALL_SVC0(name, err,nr, args))
134264 #undef INTERNAL_SYSCALL_ERROR_P
134265 #define INTERNAL_SYSCALL_ERROR_P(val, err) \
134266 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/s390/system.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/system.c
134267 --- glibc-2.3.2/sysdeps/unix/sysv/linux/s390/system.c Tue Feb 4 19:35:28 2003
134268 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/s390/system.c Thu Jan 1 01:00:00 1970
134269 @@ -1 +0,0 @@
134270 -#include <sysdeps/unix/sysv/linux/i386/system.c>
134271 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sh/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sh/sysdep.h
134272 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sh/sysdep.h Sat Feb 8 03:29:54 2003
134273 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sh/sysdep.h Sun Mar 23 20:42:23 2003
134274 @@ -65,6 +65,18 @@
134275 #define PSEUDO_END(name) \
134276 END (name)
134278 +#undef PSEUDO_NOERRNO
134279 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
134280 + .text; \
134281 + ENTRY (name); \
134282 + DO_CALL (syscall_name, args)
134284 +#undef PSEUDO_END_NOERRNO
134285 +#define PSEUDO_END_NOERRNO(name) \
134286 + END (name)
134288 +#define ret_NOERRNO ret
134290 #ifndef PIC
134291 # define SYSCALL_ERROR_HANDLER \
134292 mov.l 0f,r1; \
134293 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/siglist.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/siglist.h
134294 --- glibc-2.3.2/sysdeps/unix/sysv/linux/siglist.h Sat Nov 2 03:16:02 2002
134295 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/siglist.h Tue Apr 1 07:50:08 2003
134296 @@ -1,4 +1,4 @@
134297 -/* Copyright (C) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
134298 +/* Copyright (C) 1996,1997,1998,1999,2002,2003 Free Software Foundation, Inc.
134299 This file is part of the GNU C Library.
134301 The GNU C Library is free software; you can redistribute it and/or
134302 @@ -21,3 +21,5 @@
134303 #include_next <siglist.h> /* Get the canonical list. */
134305 #define OLD_SIGLIST_SIZE 32 /* For GLIBC_2.0 binary compatibility. */
134307 +#define OLD2_SIGLIST_SIZE 64 /* For GLIBC_2.1 binary compatibility. */
134308 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
134309 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h Thu Dec 5 01:22:51 2002
134310 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h Thu Mar 27 00:41:58 2003
134311 @@ -1,5 +1,5 @@
134312 /* siginfo_t, sigevent and constants. Linux/SPARC version.
134313 - Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
134314 + Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
134315 This file is part of the GNU C Library.
134317 The GNU C Library is free software; you can redistribute it and/or
134318 @@ -69,8 +69,9 @@
134319 /* POSIX.1b timers. */
134320 struct
134322 - unsigned int _timer1;
134323 - unsigned int _timer2;
134324 + int si_tid; /* Timer ID. */
134325 + int si_overrun; /* Overrun count. */
134326 + sigval_t si_sigval; /* Signal value. */
134327 } _timer;
134329 /* POSIX.1b signals. */
134330 @@ -111,8 +112,8 @@
134331 /* X/Open requires some more fields with fixed names. */
134332 # define si_pid _sifields._kill.si_pid
134333 # define si_uid _sifields._kill.si_uid
134334 -# define si_timer1 _sifields._timer._timer1
134335 -# define si_timer2 _sifields._timer._timer2
134336 +# define si_timerid _sifields._timer.si_tid
134337 +# define si_overrun _sifields._timer.si_overrun
134338 # define si_status _sifields._sigchld.si_status
134339 # define si_utime _sifields._sigchld.si_utime
134340 # define si_stime _sifields._sigchld.si_stime
134341 @@ -276,9 +277,6 @@
134342 # define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
134343 # endif
134345 -/* Forward declaration of the `pthread_attr_t' type. */
134346 -struct __pthread_attr_s;
134348 typedef struct sigevent
134350 sigval_t sigev_value;
134351 @@ -308,8 +306,11 @@
134352 # define SIGEV_SIGNAL SIGEV_SIGNAL
134353 SIGEV_NONE, /* Other notification: meaningless. */
134354 # define SIGEV_NONE SIGEV_NONE
134355 - SIGEV_THREAD /* Deliver via thread creation. */
134356 + SIGEV_THREAD, /* Deliver via thread creation. */
134357 # define SIGEV_THREAD SIGEV_THREAD
134359 + SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */
134360 +#define SIGEV_THREAD_ID SIGEV_THREAD_ID
134363 #endif /* have _SIGNAL_H. */
134364 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/bits/signum.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/bits/signum.h
134365 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/bits/signum.h Sat Jul 7 21:21:36 2001
134366 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/bits/signum.h Tue Apr 1 08:17:51 2003
134367 @@ -1,5 +1,5 @@
134368 /* Signal number definitions. Linux/SPARC version.
134369 - Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
134370 + Copyright (C) 1996, 1997, 1998, 2003 Free Software Foundation, Inc.
134371 This file is part of the GNU C Library.
134373 The GNU C Library is free software; you can redistribute it and/or
134374 @@ -70,7 +70,7 @@
134375 #define SIGUSR1 30
134376 #define SIGUSR2 31
134378 -#define _NSIG 64 /* Biggest signal number + 1
134379 +#define _NSIG 65 /* Biggest signal number + 1
134380 (including real-time signals). */
134382 #define SIGRTMIN (__libc_current_sigrtmin ())
134383 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
134384 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h Thu Oct 24 01:48:46 2002
134385 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h Tue Mar 25 23:00:07 2003
134386 @@ -1,5 +1,5 @@
134387 /* bits/typesizes.h -- underlying types for *_t. Linux/SPARC version.
134388 - Copyright (C) 2002 Free Software Foundation, Inc.
134389 + Copyright (C) 2002, 2003 Free Software Foundation, Inc.
134390 This file is part of the GNU C Library.
134392 The GNU C Library is free software; you can redistribute it and/or
134393 @@ -54,7 +54,7 @@
134394 #define __SWBLK_T_TYPE __SLONGWORD_TYPE
134395 #define __KEY_T_TYPE __S32_TYPE
134396 #define __CLOCKID_T_TYPE __S32_TYPE
134397 -#define __TIMER_T_TYPE __S32_TYPE
134398 +#define __TIMER_T_TYPE void *
134399 #define __BLKSIZE_T_TYPE __SLONGWORD_TYPE
134400 #define __FSID_T_TYPE struct { int __val[2]; }
134402 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
134403 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h Mon Jan 27 21:47:54 2003
134404 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h Sun Mar 23 20:42:23 2003
134405 @@ -35,6 +35,7 @@
134407 /* Linux/SPARC uses a different trap number */
134408 #undef PSEUDO
134409 +#undef PSEUDO_NOERRNO
134410 #undef ENTRY
134411 #undef END
134412 #undef LOC
134413 @@ -107,6 +108,12 @@
134414 bcs __syscall_error_handler; \
134415 nop; \
134416 SYSCALL_ERROR_HANDLER
134418 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
134419 + .text; \
134420 + ENTRY(name); \
134421 + LOADSYSCALL(syscall_name); \
134422 + ta 0x10
134424 #else /* __ASSEMBLER__ */
134426 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/sparc64/pause.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/sparc64/pause.c
134427 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/sparc64/pause.c Wed Jun 2 13:10:10 1999
134428 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/sparc64/pause.c Sat Mar 15 00:37:01 2003
134429 @@ -1 +1 @@
134430 -#include <sysdeps/unix/common/pause.c>
134431 +#include <sysdeps/posix/pause.c>
134432 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/sparc64/sigsuspend.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/sparc64/sigsuspend.c
134433 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/sparc64/sigsuspend.c Tue Dec 10 21:31:58 2002
134434 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/sparc64/sigsuspend.c Wed Apr 2 02:06:44 2003
134435 @@ -1,41 +1 @@
134436 -/* Copyright (C) 1996,1997,1998,1999,2000,2002 Free Software Foundation, Inc.
134437 - This file is part of the GNU C Library.
134439 - The GNU C Library is free software; you can redistribute it and/or
134440 - modify it under the terms of the GNU Lesser General Public
134441 - License as published by the Free Software Foundation; either
134442 - version 2.1 of the License, or (at your option) any later version.
134444 - The GNU C Library is distributed in the hope that it will be useful,
134445 - but WITHOUT ANY WARRANTY; without even the implied warranty of
134446 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
134447 - Lesser General Public License for more details.
134449 - You should have received a copy of the GNU Lesser General Public
134450 - License along with the GNU C Library; if not, write to the Free
134451 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
134452 - 02111-1307 USA. */
134454 -#include <errno.h>
134455 -#include <signal.h>
134456 -#include <unistd.h>
134458 -#include <sysdep.h>
134459 -#include <sys/syscall.h>
134460 -#include <bp-checks.h>
134462 -extern int __syscall_rt_sigsuspend (const sigset_t *__unbounded, size_t);
134464 -/* Change the set of blocked signals to SET,
134465 - wait until a signal arrives, and restore the set of blocked signals. */
134467 -__sigsuspend (set)
134468 - const sigset_t *set;
134470 - /* XXX The size argument hopefully will have to be changed to the
134471 - real size of the user-level sigset_t. */
134472 - return INLINE_SYSCALL (rt_sigsuspend, 2, CHECK_SIGSET (set), _NSIG / 8);
134474 -libc_hidden_def (__sigsuspend)
134475 -weak_alias (__sigsuspend, sigsuspend)
134476 -strong_alias (__sigsuspend, __libc_sigsuspend)
134477 +#include "../../ia64/sigsuspend.c"
134478 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
134479 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h Mon Jan 27 21:47:54 2003
134480 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h Wed Mar 26 19:06:28 2003
134481 @@ -35,6 +35,7 @@
134483 /* Linux/SPARC uses a different trap number */
134484 #undef PSEUDO
134485 +#undef PSEUDO_NOERRNO
134486 #undef ENTRY
134488 #define ENTRY(name) \
134489 @@ -101,8 +102,18 @@
134490 nop; \
134491 SYSCALL_ERROR_HANDLER
134493 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
134494 + .text; \
134495 + ENTRY(name); \
134496 + LOADSYSCALL(syscall_name); \
134497 + ta 0x6d
134499 #undef PSEUDO_END
134500 #define PSEUDO_END(name) \
134501 + .size name,.-name
134503 +#undef PSEUDO_END_NOERRNO
134504 +#define PSEUDO_END_NOERRNO(name) \
134505 .size name,.-name
134507 #undef END
134508 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sys/epoll.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sys/epoll.h
134509 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sys/epoll.h Tue Dec 17 00:24:21 2002
134510 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sys/epoll.h Tue Mar 25 00:50:25 2003
134511 @@ -1,4 +1,4 @@
134512 -/* Copyright (C) 2002 Free Software Foundation, Inc.
134513 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
134514 This file is part of the GNU C Library.
134516 The GNU C Library is free software; you can redistribute it and/or
134517 @@ -42,8 +42,10 @@
134518 #define EPOLLMSG EPOLLMSG
134519 EPOLLERR = 0x008,
134520 #define EPOLLERR EPOLLERR
134521 - EPOLLHUP = 0x010
134522 + EPOLLHUP = 0x010,
134523 #define EPOLLHUP EPOLLHUP
134524 + EPOLLET = (1 << 31)
134525 +#define EPOLLET EPOLLET
134529 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/syscalls.list glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/syscalls.list
134530 --- glibc-2.3.2/sysdeps/unix/sysv/linux/syscalls.list Wed Feb 5 22:04:09 2003
134531 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/syscalls.list Thu Mar 27 10:47:19 2003
134532 @@ -14,12 +14,12 @@
134533 flock - flock i:ii __flock flock
134534 fork - fork i: __libc_fork __fork fork
134535 get_kernel_syms EXTRA get_kernel_syms i:p get_kernel_syms
134536 -getegid - getegid i: __getegid getegid
134537 -geteuid - geteuid i: __geteuid geteuid
134538 +getegid - getegid Ei: __getegid getegid
134539 +geteuid - geteuid Ei: __geteuid geteuid
134540 getpgid - getpgid i:i __getpgid getpgid
134541 -getpgrp - getpgrp i: getpgrp
134542 +getpgrp - getpgrp Ei: getpgrp
134543 getpmsg - getpmsg i:ipppp getpmsg
134544 -getppid - getppid i: __getppid getppid
134545 +getppid - getppid Ei: __getppid getppid
134546 getresuid - getresuid i:ppp getresuid
134547 getresgid - getresgid i:ppp getresgid
134548 getsid - getsid i:i getsid
134549 @@ -43,11 +43,12 @@
134550 personality init-first personality i:i __personality personality
134551 pipe - pipe i:f __pipe pipe
134552 pivot_root EXTRA pivot_root i:ss pivot_root
134553 -posix_fadvise64 - fadvise64 i:iiiii posix_advise64
134554 +posix_fadvise64 - fadvise64 i:iiiii posix_fadvise64
134555 prctl EXTRA prctl i:iiiii __prctl prctl
134556 putpmsg - putpmsg i:ippii putpmsg
134557 query_module EXTRA query_module i:sipip query_module
134558 quotactl EXTRA quotactl i:isip quotactl
134559 +remap_file_pages - remap_file_pages i:piiii __remap_file_pages remap_file_pages
134560 sched_getaffinity - sched_getaffinity i:iip sched_getaffinity
134561 sched_getp - sched_getparam i:ip __sched_getparam sched_getparam
134562 sched_gets - sched_getscheduler i:i __sched_getscheduler sched_getscheduler
134563 @@ -76,15 +77,15 @@
134564 chown - chown i:sii __libc_chown __chown chown
134565 fcntl - fcntl Ci:iiF __libc_fcntl __fcntl fcntl
134567 -setxattr EXTRA setxattr i:sspii setxattr
134568 -lsetxattr EXTRA lsetxattr i:sspii lsetxattr
134569 -fsetxattr EXTRA fsetxattr i:ispii fsetxattr
134570 -getxattr EXTRA getxattr i:sspi getxattr
134571 -lgetxattr EXTRA lgetxattr i:sspi lgetxattr
134572 -fgetxattr EXTRA fgetxattr i:ispi fgetxattr
134573 -listxattr EXTRA listxattr i:ssi listxattr
134574 -llistxattr EXTRA llistxattr i:ssi llistxattr
134575 -flistxattr EXTRA flistxattr i:isi flistxattr
134576 -removexattr EXTRA removexattr i:ss removexattr
134577 -lremovexattr EXTRA lremovexattr i:ss lremovexattr
134578 -fremovexattr EXTRA fremovexattr i:is fremovexattr
134579 +setxattr - setxattr i:sspii setxattr
134580 +lsetxattr - lsetxattr i:sspii lsetxattr
134581 +fsetxattr - fsetxattr i:ispii fsetxattr
134582 +getxattr - getxattr i:sspi getxattr
134583 +lgetxattr - lgetxattr i:sspi lgetxattr
134584 +fgetxattr - fgetxattr i:ispi fgetxattr
134585 +listxattr - listxattr i:ssi listxattr
134586 +llistxattr - llistxattr i:ssi llistxattr
134587 +flistxattr - flistxattr i:isi flistxattr
134588 +removexattr - removexattr i:ss removexattr
134589 +lremovexattr - lremovexattr i:ss lremovexattr
134590 +fremovexattr - fremovexattr i:is fremovexattr
134591 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/sysconf.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sysconf.c
134592 --- glibc-2.3.2/sysdeps/unix/sysv/linux/sysconf.c Thu Jan 1 01:00:00 1970
134593 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/sysconf.c Thu Mar 27 18:55:08 2003
134594 @@ -0,0 +1,52 @@
134595 +/* Get file-specific information about a file. Linux version.
134596 + Copyright (C) 2003 Free Software Foundation, Inc.
134597 + This file is part of the GNU C Library.
134599 + The GNU C Library is free software; you can redistribute it and/or
134600 + modify it under the terms of the GNU Lesser General Public
134601 + License as published by the Free Software Foundation; either
134602 + version 2.1 of the License, or (at your option) any later version.
134604 + The GNU C Library is distributed in the hope that it will be useful,
134605 + but WITHOUT ANY WARRANTY; without even the implied warranty of
134606 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
134607 + Lesser General Public License for more details.
134609 + You should have received a copy of the GNU Lesser General Public
134610 + License along with the GNU C Library; if not, write to the Free
134611 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
134612 + 02111-1307 USA. */
134614 +#include <sysdep.h>
134615 +#include <time.h>
134616 +#include <unistd.h>
134618 +static long int posix_sysconf (int name);
134620 +/* Define this first, so it can be inlined. */
134621 +#define __sysconf static posix_sysconf
134622 +#include <sysdeps/posix/sysconf.c>
134625 +/* Get the value of the system variable NAME. */
134626 +long int
134627 +__sysconf (int name)
134629 + switch (name)
134631 +#ifdef __NR_clock_getres
134632 + case _SC_MONOTONIC_CLOCK:
134633 + /* Check using the clock_getres system call. */
134635 + struct timespec ts;
134636 + INTERNAL_SYSCALL_DECL (err);
134637 + int r;
134638 + r = INTERNAL_SYSCALL (clock_getres, err, 2, CLOCK_MONOTONIC, &ts);
134639 + return INTERNAL_SYSCALL_ERROR_P (r, err) ? -1 : 1;
134641 +#endif
134643 + default:
134644 + return posix_sysconf (name);
134647 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/system.c glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/system.c
134648 --- glibc-2.3.2/sysdeps/unix/sysv/linux/system.c Thu Sep 12 20:29:32 1996
134649 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/system.c Sun Mar 16 00:43:51 2003
134650 @@ -1,2 +1,73 @@
134651 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
134652 + This file is part of the GNU C Library.
134654 + The GNU C Library is free software; you can redistribute it and/or
134655 + modify it under the terms of the GNU Lesser General Public
134656 + License as published by the Free Software Foundation; either
134657 + version 2.1 of the License, or (at your option) any later version.
134659 + The GNU C Library is distributed in the hope that it will be useful,
134660 + but WITHOUT ANY WARRANTY; without even the implied warranty of
134661 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
134662 + Lesser General Public License for more details.
134664 + You should have received a copy of the GNU Lesser General Public
134665 + License along with the GNU C Library; if not, write to the Free
134666 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
134667 + 02111-1307 USA. */
134669 +#include <sched.h>
134670 +#include <signal.h>
134671 +#include <sysdep.h>
134672 +#include <unistd.h>
134673 +#include <sys/wait.h>
134674 +#include <bits/libc-lock.h>
134675 +#include <kernel-features.h>
134677 +/* We have to and actually can handle cancelable system(). The big
134678 + problem: we have to kill the child process if necessary. To do
134679 + this a cleanup handler has to be registered and is has to be able
134680 + to find the PID of the child. The main problem is to reliable have
134681 + the PID when needed. It is not necessary for the parent thread to
134682 + return. It might still be in the kernel when the cancellation
134683 + request comes. Therefore we have to use the clone() calls ability
134684 + to have the kernel write the PID into the user-level variable. */
134685 +#if defined __ASSUME_CLONE_THREAD_FLAGS && !defined FORK
134686 +# define FORK() \
134687 + INLINE_SYSCALL (clone, 3, CLONE_PARENT_SETTID | SIGCHLD, 0, &pid)
134688 +#endif
134690 +static void cancel_handler (void *arg);
134692 +#define CLEANUP_HANDLER \
134693 + __libc_cleanup_region_start (1, cancel_handler, &pid)
134695 +#define CLEANUP_RESET \
134696 + __libc_cleanup_region_end (0)
134699 /* Linux has waitpid(), so override the generic unix version. */
134700 #include <sysdeps/posix/system.c>
134703 +/* The cancellation handler. */
134704 +static void
134705 +cancel_handler (void *arg)
134707 + pid_t child = *(pid_t *) arg;
134709 + INTERNAL_SYSCALL_DECL (err);
134710 + INTERNAL_SYSCALL (kill, err, 2, child, SIGKILL);
134712 + TEMP_FAILURE_RETRY (__waitpid (child, NULL, 0));
134714 + DO_LOCK ();
134716 + if (SUB_REF () == 0)
134718 + (void) __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL);
134719 + (void) __sigaction (SIGINT, &intr, (struct sigaction *) NULL);
134722 + DO_UNLOCK ();
134724 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/x86_64/bits/mman.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/x86_64/bits/mman.h
134725 --- glibc-2.3.2/sysdeps/unix/sysv/linux/x86_64/bits/mman.h Wed Sep 19 12:30:39 2001
134726 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/x86_64/bits/mman.h Mon Mar 3 11:03:36 2003
134727 @@ -1,5 +1,5 @@
134728 /* Definitions for POSIX memory map interface. Linux/x86_64 version.
134729 - Copyright (C) 2001 Free Software Foundation, Inc.
134730 + Copyright (C) 2001, 2003 Free Software Foundation, Inc.
134731 This file is part of the GNU C Library.
134733 The GNU C Library is free software; you can redistribute it and/or
134734 @@ -53,11 +53,13 @@
134736 /* These are Linux-specific. */
134737 #ifdef __USE_MISC
134738 -# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
134739 -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
134740 -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
134741 -# define MAP_LOCKED 0x2000 /* Lock the mapping. */
134742 -# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
134743 +# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
134744 +# define MAP_DENYWRITE 0x00800 /* ETXTBSY */
134745 +# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
134746 +# define MAP_LOCKED 0x02000 /* Lock the mapping. */
134747 +# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
134748 +# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
134749 +# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
134750 #endif
134752 /* Flags to `msync'. */
134753 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/x86_64/clone.S glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/x86_64/clone.S
134754 --- glibc-2.3.2/sysdeps/unix/sysv/linux/x86_64/clone.S Sun Aug 4 04:20:07 2002
134755 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/x86_64/clone.S Tue Mar 4 20:45:35 2003
134756 @@ -1,4 +1,4 @@
134757 -/* Copyright (C) 2001,02 Free Software Foundation, Inc.
134758 +/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
134759 This file is part of the GNU C Library.
134761 The GNU C Library is free software; you can redistribute it and/or
134762 @@ -31,16 +31,22 @@
134763 the kernel entry is:
134764 int clone (long flags, void *child_stack).
134766 - The parameters are passed in register from userland:
134767 + The parameters are passed in register and on the stack from userland:
134768 rdi: fn
134769 rsi: child_stack
134770 rdx: flags
134771 rcx: arg
134772 + r8d: TID field in parent
134773 + r9d: thread pointer
134774 +%esp+8: TID field in child
134776 The kernel expects:
134777 rax: system call number
134778 rdi: flags
134779 - rsi: child_stack */
134780 + rsi: child_stack
134781 + rdx: TID field in parent
134782 + r10: TID field in child
134783 + r8: thread pointer */
134786 .text
134787 @@ -62,6 +68,9 @@
134789 /* Do the system call. */
134790 movq %rdx, %rdi
134791 + movq %r8, %rdx
134792 + movq %r9, %r8
134793 + movq 8(%rsp), %r10
134794 movq $SYS_ify(clone),%rax
134795 syscall
134797 diff -u -udbrN glibc-2.3.2/sysdeps/unix/sysv/linux/x86_64/sysdep.h glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/x86_64/sysdep.h
134798 --- glibc-2.3.2/sysdeps/unix/sysv/linux/x86_64/sysdep.h Thu Jan 9 03:54:57 2003
134799 +++ glibc-2.3.2-200304020432/sysdeps/unix/sysv/linux/x86_64/sysdep.h Sun Mar 23 20:42:23 2003
134800 @@ -81,6 +81,18 @@
134801 SYSCALL_ERROR_HANDLER \
134802 END (name)
134804 +#undef PSEUDO_NOERRNO
134805 +#define PSEUDO_NOERRNO(name, syscall_name, args) \
134806 + .text; \
134807 + ENTRY (name) \
134808 + DO_CALL (syscall_name, args)
134810 +#undef PSEUDO_END_NOERRNO
134811 +#define PSEUDO_END_NOERRNO(name) \
134812 + END (name)
134814 +#define ret_NOERRNO ret
134816 #ifndef PIC
134817 #define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
134818 #elif RTLD_PRIVATE_ERRNO
134819 @@ -134,36 +146,41 @@
134820 jmp L(pseudo_end);
134821 #endif /* PIC */
134823 -/* Linux/x86-64 takes system call arguments in registers:
134824 +/* The Linux/x86-64 kernel expects the system call parameters in
134825 + registers according to the following table:
134827 - Register setup:
134828 - system call number rax
134829 + syscall number rax
134830 arg 1 rdi
134831 arg 2 rsi
134832 arg 3 rdx
134833 - arg 4 rcx
134834 + arg 4 r10
134835 arg 5 r8
134836 arg 6 r9
134838 + The Linux kernel uses and destroys internally these registers:
134839 return address from
134840 syscall rcx
134841 additionally clobered: r12-r15,rbx,rbp
134842 eflags from syscall r11
134844 - The compiler is going to form a call by coming here, through PSEUDO, with arguments:
134845 + Normal function call, including calls to the system call stub
134846 + functions in the libc, get the first six parameters passed in
134847 + registers and the seventh parameter and later on the stack. The
134848 + register use is as follows:
134850 - syscall number in the DO_CALL macro
134851 + system call number in the DO_CALL macro
134852 arg 1 rdi
134853 arg 2 rsi
134854 arg 3 rdx
134855 - arg 4 r10
134856 + arg 4 rcx
134857 arg 5 r8
134858 arg 6 r9
134860 - We have to take care that the stack is alignedto 16 bytes. When
134861 + We have to take care that the stack is aligned to 16 bytes. When
134862 called the stack is not aligned since the return address has just
134863 been pushed.
134866 Syscalls of more than 6 arguments are not supported. */
134868 #undef DO_CALL
134869 diff -u -udbrN glibc-2.3.2/sysdeps/wordsize-32/Versions glibc-2.3.2-200304020432/sysdeps/wordsize-32/Versions
134870 --- glibc-2.3.2/sysdeps/wordsize-32/Versions Thu Jan 1 01:00:00 1970
134871 +++ glibc-2.3.2-200304020432/sysdeps/wordsize-32/Versions Mon Mar 3 10:45:12 2003
134872 @@ -0,0 +1,7 @@
134873 +libc {
134874 + GLIBC_2.3 {
134875 + # These were erroneously omitted for 64-bit platforms in 2.3
134876 + # and so we don't put them in locale/Versions.
134877 + strtoll_l; strtoull_l;
134880 diff -u -udbrN glibc-2.3.2/sysdeps/wordsize-64/Versions glibc-2.3.2-200304020432/sysdeps/wordsize-64/Versions
134881 --- glibc-2.3.2/sysdeps/wordsize-64/Versions Thu Jan 1 01:00:00 1970
134882 +++ glibc-2.3.2-200304020432/sysdeps/wordsize-64/Versions Mon Mar 3 10:45:12 2003
134883 @@ -0,0 +1,6 @@
134884 +libc {
134885 + GLIBC_2.3.3 {
134886 + # These were erroneously omitted for 64-bit platforms in 2.3.
134887 + strtoll_l; strtoull_l;
134890 diff -u -udbrN glibc-2.3.2/sysdeps/wordsize-64/strtol_l.c glibc-2.3.2-200304020432/sysdeps/wordsize-64/strtol_l.c
134891 --- glibc-2.3.2/sysdeps/wordsize-64/strtol_l.c Mon Aug 5 02:30:03 2002
134892 +++ glibc-2.3.2-200304020432/sysdeps/wordsize-64/strtol_l.c Mon Mar 3 10:45:12 2003
134893 @@ -1,11 +1,14 @@
134894 /* We have to irritate the compiler a bit. */
134895 #define ____strtoll_l_internal ____strtoll_l_internal_XXX
134896 #define __strtoll_l __strtoll_l_XXX
134897 +#define strtoll_l strtoll_l_XXX
134899 #include <sysdeps/generic/strtol_l.c>
134901 #undef ____strtoll_l_internal
134902 #undef __strtoll_l
134903 +#undef strtoll_l
134904 strong_alias (____strtol_l_internal, ____strtoll_l_internal)
134905 libc_hidden_ver (____strtol_l_internal, ____strtoll_l_internal)
134906 weak_alias (__strtol_l, __strtoll_l)
134907 +weak_alias (__strtol_l, strtoll_l)
134908 diff -u -udbrN glibc-2.3.2/sysdeps/wordsize-64/strtoul_l.c glibc-2.3.2-200304020432/sysdeps/wordsize-64/strtoul_l.c
134909 --- glibc-2.3.2/sysdeps/wordsize-64/strtoul_l.c Mon Aug 5 02:30:03 2002
134910 +++ glibc-2.3.2-200304020432/sysdeps/wordsize-64/strtoul_l.c Mon Mar 3 10:45:12 2003
134911 @@ -1,11 +1,14 @@
134912 /* We have to irritate the compiler a bit. */
134913 #define ____strtoull_l_internal ____strtoull_l_internal_XXX
134914 #define __strtoull_l __strtoull_l_XXX
134915 +#define strtoull_l strtoull_l_XXX
134917 #include <sysdeps/generic/strtoul_l.c>
134919 #undef ____strtoull_l_internal
134920 #undef __strtoull_l
134921 +#undef strtoull_l
134922 strong_alias (____strtoul_l_internal, ____strtoull_l_internal)
134923 libc_hidden_ver (____strtoul_l_internal, ____strtoull_l_internal)
134924 weak_alias (__strtoul_l, __strtoull_l)
134925 +weak_alias (__strtoul_l, strtoull_l)
134926 diff -u -udbrN glibc-2.3.2/sysdeps/x86_64/atomicity.h glibc-2.3.2-200304020432/sysdeps/x86_64/atomicity.h
134927 --- glibc-2.3.2/sysdeps/x86_64/atomicity.h Wed Sep 19 12:12:07 2001
134928 +++ glibc-2.3.2-200304020432/sysdeps/x86_64/atomicity.h Thu Jan 1 01:00:00 1970
134929 @@ -1,57 +0,0 @@
134930 -/* Low-level functions for atomic operations. x86-64 version.
134931 - Copyright (C) 1997, 2000, 2001 Free Software Foundation, Inc.
134932 - This file is part of the GNU C Library.
134934 - The GNU C Library is free software; you can redistribute it and/or
134935 - modify it under the terms of the GNU Lesser General Public
134936 - License as published by the Free Software Foundation; either
134937 - version 2.1 of the License, or (at your option) any later version.
134939 - The GNU C Library is distributed in the hope that it will be useful,
134940 - but WITHOUT ANY WARRANTY; without even the implied warranty of
134941 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
134942 - Lesser General Public License for more details.
134944 - You should have received a copy of the GNU Lesser General Public
134945 - License along with the GNU C Library; if not, write to the Free
134946 - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
134947 - 02111-1307 USA. */
134949 -#ifndef _ATOMICITY_H
134950 -#define _ATOMICITY_H 1
134952 -#include <inttypes.h>
134955 -static inline uint32_t
134956 -__attribute__ ((unused))
134957 -exchange_and_add (volatile uint32_t *mem, uint32_t val)
134959 - register uint32_t result;
134960 - __asm__ __volatile__ ("lock; xaddl %0,%1"
134961 - : "=r" (result), "=m" (*mem) : "0" (val), "1" (*mem));
134962 - return result;
134965 -static inline void
134966 -__attribute__ ((unused))
134967 -atomic_add (volatile uint32_t *mem, int val)
134969 - __asm__ __volatile__ ("lock; addl %1,%0"
134970 - : "=m" (*mem) : "er" (val), "0" (*mem));
134973 -static inline char
134974 -__attribute__ ((unused))
134975 -compare_and_swap (volatile long int *p, long int oldval, long int newval)
134977 - char ret;
134978 - long int readval;
134980 - __asm__ __volatile__ ("lock; cmpxchgq %3, %1; sete %0"
134981 - : "=q" (ret), "=m" (*p), "=a" (readval)
134982 - : "r" (newval), "1" (*p), "a" (oldval));
134983 - return ret;
134986 -#endif /* atomicity.h */
134987 diff -u -udbrN glibc-2.3.2/sysdeps/x86_64/bits/atomic.h glibc-2.3.2-200304020432/sysdeps/x86_64/bits/atomic.h
134988 --- glibc-2.3.2/sysdeps/x86_64/bits/atomic.h Thu Jan 1 01:00:00 1970
134989 +++ glibc-2.3.2-200304020432/sysdeps/x86_64/bits/atomic.h Wed Mar 26 05:01:47 2003
134990 @@ -0,0 +1,321 @@
134991 +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
134992 + This file is part of the GNU C Library.
134993 + Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
134995 + The GNU C Library is free software; you can redistribute it and/or
134996 + modify it under the terms of the GNU Lesser General Public
134997 + License as published by the Free Software Foundation; either
134998 + version 2.1 of the License, or (at your option) any later version.
135000 + The GNU C Library is distributed in the hope that it will be useful,
135001 + but WITHOUT ANY WARRANTY; without even the implied warranty of
135002 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
135003 + Lesser General Public License for more details.
135005 + You should have received a copy of the GNU Lesser General Public
135006 + License along with the GNU C Library; if not, write to the Free
135007 + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
135008 + 02111-1307 USA. */
135010 +#include <stdint.h>
135013 +typedef int8_t atomic8_t;
135014 +typedef uint8_t uatomic8_t;
135015 +typedef int_fast8_t atomic_fast8_t;
135016 +typedef uint_fast8_t uatomic_fast8_t;
135018 +typedef int16_t atomic16_t;
135019 +typedef uint16_t uatomic16_t;
135020 +typedef int_fast16_t atomic_fast16_t;
135021 +typedef uint_fast16_t uatomic_fast16_t;
135023 +typedef int32_t atomic32_t;
135024 +typedef uint32_t uatomic32_t;
135025 +typedef int_fast32_t atomic_fast32_t;
135026 +typedef uint_fast32_t uatomic_fast32_t;
135028 +typedef int64_t atomic64_t;
135029 +typedef uint64_t uatomic64_t;
135030 +typedef int_fast64_t atomic_fast64_t;
135031 +typedef uint_fast64_t uatomic_fast64_t;
135033 +typedef intptr_t atomicptr_t;
135034 +typedef uintptr_t uatomicptr_t;
135035 +typedef intmax_t atomic_max_t;
135036 +typedef uintmax_t uatomic_max_t;
135039 +#ifndef LOCK
135040 +# ifdef UP
135041 +# define LOCK /* nothing */
135042 +# else
135043 +# define LOCK "lock;"
135044 +# endif
135045 +#endif
135048 +#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
135049 + ({ __typeof (*mem) ret; \
135050 + __asm __volatile (LOCK "cmpxchgb %b2, %1" \
135051 + : "=a" (ret), "=m" (*mem) \
135052 + : "q" (newval), "m" (*mem), "0" (oldval)); \
135053 + ret; })
135055 +#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
135056 + ({ __typeof (*mem) ret; \
135057 + __asm __volatile (LOCK "cmpxchgw %w2, %1" \
135058 + : "=a" (ret), "=m" (*mem) \
135059 + : "r" (newval), "m" (*mem), "0" (oldval)); \
135060 + ret; })
135062 +#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
135063 + ({ __typeof (*mem) ret; \
135064 + __asm __volatile (LOCK "cmpxchgl %2, %1" \
135065 + : "=a" (ret), "=m" (*mem) \
135066 + : "r" (newval), "m" (*mem), "0" (oldval)); \
135067 + ret; })
135069 +#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
135070 + ({ __typeof (*mem) ret; \
135071 + __asm __volatile (LOCK "cmpxchgq %q2, %1" \
135072 + : "=a" (ret), "=m" (*mem) \
135073 + : "r" ((long) (newval)), "m" (*mem), \
135074 + "0" ((long) (oldval))); \
135075 + ret; })
135078 +/* Note that we need no lock prefix. */
135079 +#define atomic_exchange(mem, newvalue) \
135080 + ({ __typeof (*mem) result; \
135081 + if (sizeof (*mem) == 1) \
135082 + __asm __volatile ("xchgb %b0, %1" \
135083 + : "=r" (result), "=m" (*mem) \
135084 + : "0" (newvalue), "m" (*mem)); \
135085 + else if (sizeof (*mem) == 2) \
135086 + __asm __volatile ("xchgw %w0, %1" \
135087 + : "=r" (result), "=m" (*mem) \
135088 + : "0" (newvalue), "m" (*mem)); \
135089 + else if (sizeof (*mem) == 4) \
135090 + __asm __volatile ("xchgl %0, %1" \
135091 + : "=r" (result), "=m" (*mem) \
135092 + : "0" (newvalue), "m" (*mem)); \
135093 + else \
135094 + __asm __volatile ("xchgq %q0, %1" \
135095 + : "=r" (result), "=m" (*mem) \
135096 + : "0" ((long) (newvalue)), "m" (*mem)); \
135097 + result; })
135100 +#define atomic_exchange_and_add(mem, value) \
135101 + ({ __typeof (*mem) result; \
135102 + if (sizeof (*mem) == 1) \
135103 + __asm __volatile (LOCK "xaddb %b0, %1" \
135104 + : "=r" (result), "=m" (*mem) \
135105 + : "0" (value), "m" (*mem)); \
135106 + else if (sizeof (*mem) == 2) \
135107 + __asm __volatile (LOCK "xaddw %w0, %1" \
135108 + : "=r" (result), "=m" (*mem) \
135109 + : "0" (value), "m" (*mem)); \
135110 + else if (sizeof (*mem) == 4) \
135111 + __asm __volatile (LOCK "xaddl %0, %1" \
135112 + : "=r" (result), "=m" (*mem) \
135113 + : "0" (value), "m" (*mem)); \
135114 + else \
135115 + __asm __volatile (LOCK "xaddq %q0, %1" \
135116 + : "=r" (result), "=m" (*mem) \
135117 + : "0" ((long) (value)), "m" (*mem)); \
135118 + result; })
135121 +#define atomic_add(mem, value) \
135122 + (void) ({ if (__builtin_constant_p (value) && (value) == 1) \
135123 + atomic_increment (mem); \
135124 + else if (__builtin_constant_p (value) && (value) == 1) \
135125 + atomic_decrement (mem); \
135126 + else if (sizeof (*mem) == 1) \
135127 + __asm __volatile (LOCK "addb %b1, %0" \
135128 + : "=m" (*mem) \
135129 + : "ir" (value), "m" (*mem)); \
135130 + else if (sizeof (*mem) == 2) \
135131 + __asm __volatile (LOCK "addw %w1, %0" \
135132 + : "=m" (*mem) \
135133 + : "ir" (value), "m" (*mem)); \
135134 + else if (sizeof (*mem) == 4) \
135135 + __asm __volatile (LOCK "addl %1, %0" \
135136 + : "=m" (*mem) \
135137 + : "ir" (value), "m" (*mem)); \
135138 + else \
135139 + __asm __volatile (LOCK "addq %q1, %0" \
135140 + : "=m" (*mem) \
135141 + : "ir" ((long) (value)), "m" (*mem)); \
135145 +#define atomic_add_negative(mem, value) \
135146 + ({ unsigned char __result; \
135147 + if (sizeof (*mem) == 1) \
135148 + __asm __volatile (LOCK "addb %b2, %0; sets %1" \
135149 + : "=m" (*mem), "=qm" (__result) \
135150 + : "ir" (value), "m" (*mem)); \
135151 + else if (sizeof (*mem) == 2) \
135152 + __asm __volatile (LOCK "addw %w2, %0; sets %1" \
135153 + : "=m" (*mem), "=qm" (__result) \
135154 + : "ir" (value), "m" (*mem)); \
135155 + else if (sizeof (*mem) == 4) \
135156 + __asm __volatile (LOCK "addl %2, %0; sets %1" \
135157 + : "=m" (*mem), "=qm" (__result) \
135158 + : "ir" (value), "m" (*mem)); \
135159 + else \
135160 + __asm __volatile (LOCK "addq %q2, %0; sets %1" \
135161 + : "=m" (*mem), "=qm" (__result) \
135162 + : "ir" ((long) (value)), "m" (*mem)); \
135163 + __result; })
135166 +#define atomic_add_zero(mem, value) \
135167 + ({ unsigned char __result; \
135168 + if (sizeof (*mem) == 1) \
135169 + __asm __volatile (LOCK "addb %b2, %0; setz %1" \
135170 + : "=m" (*mem), "=qm" (__result) \
135171 + : "ir" (value), "m" (*mem)); \
135172 + else if (sizeof (*mem) == 2) \
135173 + __asm __volatile (LOCK "addw %w2, %0; setz %1" \
135174 + : "=m" (*mem), "=qm" (__result) \
135175 + : "ir" (value), "m" (*mem)); \
135176 + else if (sizeof (*mem) == 4) \
135177 + __asm __volatile (LOCK "addl %2, %0; setz %1" \
135178 + : "=m" (*mem), "=qm" (__result) \
135179 + : "ir" (value), "m" (*mem)); \
135180 + else \
135181 + __asm __volatile (LOCK "addq %q2, %0; setz %1" \
135182 + : "=m" (*mem), "=qm" (__result) \
135183 + : "ir" ((long) (value)), "m" (*mem)); \
135184 + __result; })
135187 +#define atomic_increment(mem) \
135188 + (void) ({ if (sizeof (*mem) == 1) \
135189 + __asm __volatile (LOCK "incb %b0" \
135190 + : "=m" (*mem) \
135191 + : "m" (*mem)); \
135192 + else if (sizeof (*mem) == 2) \
135193 + __asm __volatile (LOCK "incw %w0" \
135194 + : "=m" (*mem) \
135195 + : "m" (*mem)); \
135196 + else if (sizeof (*mem) == 4) \
135197 + __asm __volatile (LOCK "incl %0" \
135198 + : "=m" (*mem) \
135199 + : "m" (*mem)); \
135200 + else \
135201 + __asm __volatile (LOCK "incq %q0" \
135202 + : "=m" (*mem) \
135203 + : "m" (*mem)); \
135207 +#define atomic_increment_and_test(mem) \
135208 + ({ unsigned char __result; \
135209 + if (sizeof (*mem) == 1) \
135210 + __asm __volatile (LOCK "incb %b0; sete %1" \
135211 + : "=m" (*mem), "=qm" (__result) \
135212 + : "m" (*mem)); \
135213 + else if (sizeof (*mem) == 2) \
135214 + __asm __volatile (LOCK "incw %w0; sete %1" \
135215 + : "=m" (*mem), "=qm" (__result) \
135216 + : "m" (*mem)); \
135217 + else if (sizeof (*mem) == 4) \
135218 + __asm __volatile (LOCK "incl %0; sete %1" \
135219 + : "=m" (*mem), "=qm" (__result) \
135220 + : "m" (*mem)); \
135221 + else \
135222 + __asm __volatile (LOCK "incq %q0; sete %1" \
135223 + : "=m" (*mem), "=qm" (__result) \
135224 + : "m" (*mem)); \
135225 + __result; })
135228 +#define atomic_decrement(mem) \
135229 + (void) ({ if (sizeof (*mem) == 1) \
135230 + __asm __volatile (LOCK "decb %b0" \
135231 + : "=m" (*mem) \
135232 + : "m" (*mem)); \
135233 + else if (sizeof (*mem) == 2) \
135234 + __asm __volatile (LOCK "decw %w0" \
135235 + : "=m" (*mem) \
135236 + : "m" (*mem)); \
135237 + else if (sizeof (*mem) == 4) \
135238 + __asm __volatile (LOCK "decl %0" \
135239 + : "=m" (*mem) \
135240 + : "m" (*mem)); \
135241 + else \
135242 + __asm __volatile (LOCK "decq %q0" \
135243 + : "=m" (*mem) \
135244 + : "m" (*mem)); \
135248 +#define atomic_decrement_and_test(mem) \
135249 + ({ unsigned char __result; \
135250 + if (sizeof (*mem) == 1) \
135251 + __asm __volatile (LOCK "decb %b0; sete %1" \
135252 + : "=m" (*mem), "=qm" (__result) \
135253 + : "m" (*mem)); \
135254 + else if (sizeof (*mem) == 2) \
135255 + __asm __volatile (LOCK "decw %w0; sete %1" \
135256 + : "=m" (*mem), "=qm" (__result) \
135257 + : "m" (*mem)); \
135258 + else if (sizeof (*mem) == 4) \
135259 + __asm __volatile (LOCK "decl %0; sete %1" \
135260 + : "=m" (*mem), "=qm" (__result) \
135261 + : "m" (*mem)); \
135262 + else \
135263 + __asm __volatile (LOCK "decq %q0; sete %1" \
135264 + : "=m" (*mem), "=qm" (__result) \
135265 + : "m" (*mem)); \
135266 + __result; })
135269 +#define atomic_bit_set(mem, bit) \
135270 + (void) ({ if (sizeof (*mem) == 1) \
135271 + __asm __volatile (LOCK "orb %b2, %0" \
135272 + : "=m" (*mem) \
135273 + : "m" (*mem), "ir" (1L << (bit))); \
135274 + else if (sizeof (*mem) == 2) \
135275 + __asm __volatile (LOCK "orw %w2, %0" \
135276 + : "=m" (*mem) \
135277 + : "m" (*mem), "ir" (1L << (bit))); \
135278 + else if (sizeof (*mem) == 4) \
135279 + __asm __volatile (LOCK "orl %2, %0" \
135280 + : "=m" (*mem) \
135281 + : "m" (*mem), "ir" (1L << (bit))); \
135282 + else if (__builtin_constant_p (bit) && (bit) < 32) \
135283 + __asm __volatile (LOCK "orq %2, %0" \
135284 + : "=m" (*mem) \
135285 + : "m" (*mem), "i" (1L << (bit))); \
135286 + else \
135287 + __asm __volatile (LOCK "orq %q2, %0" \
135288 + : "=m" (*mem) \
135289 + : "m" (*mem), "r" (1UL << (bit))); \
135293 +#define atomic_bit_test_set(mem, bit) \
135294 + ({ unsigned char __result; \
135295 + if (sizeof (*mem) == 1) \
135296 + __asm __volatile (LOCK "btsb %3, %1; setc %0" \
135297 + : "=q" (__result), "=m" (*mem) \
135298 + : "m" (*mem), "ir" (bit)); \
135299 + else if (sizeof (*mem) == 2) \
135300 + __asm __volatile (LOCK "btsw %3, %1; setc %0" \
135301 + : "=q" (__result), "=m" (*mem) \
135302 + : "m" (*mem), "ir" (bit)); \
135303 + else if (sizeof (*mem) == 4) \
135304 + __asm __volatile (LOCK "btsl %3, %1; setc %0" \
135305 + : "=q" (__result), "=m" (*mem) \
135306 + : "m" (*mem), "ir" (bit)); \
135307 + else \
135308 + __asm __volatile (LOCK "btsq %3, %1; setc %0" \
135309 + : "=q" (__result), "=m" (*mem) \
135310 + : "m" (*mem), "ir" (bit)); \
135311 + __result; })
135312 diff -u -udbrN glibc-2.3.2/sysdeps/x86_64/fpu/libm-test-ulps glibc-2.3.2-200304020432/sysdeps/x86_64/fpu/libm-test-ulps
135313 --- glibc-2.3.2/sysdeps/x86_64/fpu/libm-test-ulps Fri Dec 6 23:25:36 2002
135314 +++ glibc-2.3.2-200304020432/sysdeps/x86_64/fpu/libm-test-ulps Sun Mar 23 01:52:10 2003
135315 @@ -145,7 +145,7 @@
135316 ldouble: 1
135318 # ccos
135319 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
135320 +Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
135321 float: 1
135322 ifloat: 1
135323 ildouble: 1
135324 @@ -164,10 +164,10 @@
135325 ifloat: 1
135327 # ccosh
135328 -Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
135329 +Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
135330 float: 1
135331 ifloat: 1
135332 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
135333 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
135334 double: 1
135335 float: 1
135336 idouble: 1
135337 @@ -215,7 +215,7 @@
135338 float: 1
135339 idouble: 1
135340 ifloat: 1
135341 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
135342 +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
135343 double: 1
135344 float: 5
135345 idouble: 1
135346 @@ -373,10 +373,10 @@
135347 ifloat: 1
135349 # csinh
135350 -Test "Real part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
135351 +Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
135352 double: 1
135353 idouble: 1
135354 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
135355 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
135356 double: 1
135357 idouble: 1
135358 ildouble: 2
135359 @@ -399,12 +399,12 @@
135360 ifloat: 1
135362 # ctan
135363 -Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
135364 +Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
135365 double: 1
135366 idouble: 1
135367 ildouble: 439
135368 ldouble: 439
135369 -Test "Imaginary part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
135370 +Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
135371 float: 1
135372 ifloat: 1
135373 ildouble: 2
135374 @@ -421,14 +421,14 @@
135375 ldouble: 3
135377 # ctanh
135378 -Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
135379 +Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
135380 float: 2
135381 ifloat: 2
135382 ildouble: 5
135383 ldouble: 5
135384 double: 1
135385 idouble: 1
135386 -Test "Imaginary part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
135387 +Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
135388 ildouble: 25
135389 ldouble: 25
135390 Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
135391 @@ -677,12 +677,12 @@
135392 Test "lgamma (-0.5) == log(2*sqrt(pi))":
135393 ildouble: 1
135394 ldouble: 1
135395 -Test "lgamma (0.7) == 0.26086724653166651439":
135396 +Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
135397 double: 1
135398 float: 1
135399 idouble: 1
135400 ifloat: 1
135401 -Test "lgamma (1.2) == -0.853740900033158497197e-1":
135402 +Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
135403 double: 1
135404 float: 2
135405 idouble: 1
135406 @@ -749,7 +749,7 @@
135407 Test "tgamma (0.5) == sqrt (pi)":
135408 float: 1
135409 ifloat: 1
135410 -Test "tgamma (0.7) == 1.29805533264755778568":
135411 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
135412 double: 1
135413 float: 1
135414 idouble: 1
135415 diff -u -udbrN glibc-2.3.2/timezone/antarctica glibc-2.3.2-200304020432/timezone/antarctica
135416 --- glibc-2.3.2/timezone/antarctica Sat Jun 9 22:29:18 2001
135417 +++ glibc-2.3.2-200304020432/timezone/antarctica Mon Mar 24 20:00:03 2003
135418 @@ -1,4 +1,4 @@
135419 -# @(#)antarctica 7.22
135420 +# @(#)antarctica 7.23
135422 # From Paul Eggert (1999-11-15):
135423 # To keep things manageable, we list only locations occupied year-round; see
135424 @@ -255,6 +255,13 @@
135425 # Halley is on a moving ice shelf and is periodically relocated
135426 # so that it is never more than 10km from its nominal location.
135427 # Rothera, Adelaide Island, -6734-6808, since 1976-12-01
135429 +# From Paul Eggert (2002-10-22)
135430 +# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year.
135432 +# Zone NAME GMTOFF RULES FORMAT [UNTIL]
135433 +Zone Antarctica/Rothera 0 - zzz 1976 Dec 1
135434 + -3:00 - ROTT # Rothera time
135436 # Uruguay - year round base
135437 # Artigas, King George Island, -621104-0585107
135438 diff -u -udbrN glibc-2.3.2/timezone/asia glibc-2.3.2-200304020432/timezone/asia
135439 --- glibc-2.3.2/timezone/asia Tue Oct 15 18:59:28 2002
135440 +++ glibc-2.3.2-200304020432/timezone/asia Mon Mar 24 20:00:03 2003
135441 @@ -1,4 +1,4 @@
135442 -# @(#)asia 7.68
135443 +# @(#)asia 7.71
135445 # This data is by no means authoritative; if you think you know better,
135446 # go ahead and edit the file (and please send any changes to
135447 @@ -34,6 +34,7 @@
135448 # 2:00 EET EEST Eastern European Time
135449 # 2:00 IST IDT Israel
135450 # 3:00 AST ADT Arabia*
135451 +# 3:30 IRST IRDT Iran
135452 # 4:00 GST Gulf*
135453 # 5:30 IST India
135454 # 7:00 ICT Indochina*
135455 @@ -430,89 +431,97 @@
135456 9:00 - EIT
135458 # Iran
135459 -# From Paul Eggert (2000-06-12), following up a suggestion by Rich Wales:
135460 -# Ahmea Alavi in
135461 -# <a href="http://www.persia.org/Iran_Lib/Calendar/taghveem.txt">
135462 -# TAGHVEEM (1993-07-12)
135463 -# </a>
135464 -# writes ``Daylight saving time in Iran starts from the first day
135465 -# of Farvardin and ends the first day of Mehr.'' This disagrees with the SSIM:
135467 +# From Roozbeh Pournader (2003-03-15):
135468 +# This is an English translation of what I just found (originally in Persian).
135469 +# The Gregorian dates in brackets are mine:
135471 -# DST start DST end
135472 -# year SSIM Alavi SSIM Alavi
135473 -# 1991 05-03!= 03-21 09-20!= 09-23
135474 -# 1992 03-22!= 03-21 09-23 09-23
135475 -# 1993 03-21 03-21 09-23 09-23
135476 -# 1994 03-21 03-21 09-22!= 09-23
135477 -# 1995 03-21 03-21 09-22!= 09-23
135478 -# 1996 03-21!= 03-20 09-22 09-22
135479 -# 1997 03-22!= 03-21 09-22!= 09-23
135480 -# 1998 03-21 03-21 09-21!= 09-23
135481 -# 1999 03-22!= 03-21 09-22!= 09-23
135482 -# 2000 03-21!= 03-20 09-21!= 09-22
135483 -# 2001 03-19!= 03-21 09-19!= 09-23
135484 -# 2002 03-18!= 03-21 09-18!= 09-23
135485 +# Official Newspaper No. 13548-1370/6/25 [1991-09-16]
135486 +# No. 16760/T233 H 1370/6/10 [1991-09-01]
135488 -# Go with Alavi starting with 1992.
135489 -# I used Ed Reingold's cal-persia in GNU Emacs 19.34 to compute Persian dates.
135490 +# The Rule About Change of the Official Time of the Country
135492 +# The Board of Ministers, in the meeting dated 1370/5/23 [1991-08-14],
135493 +# based on the suggestion number 2221/D dated 1370/4/22 [1991-07-13]
135494 +# of the Country's Organization for Official and Employment Affairs,
135495 +# and referring to the law for equating the working hours of workers
135496 +# and officers in the whole country dated 1359/4/23 [1980-07-14], and
135497 +# for synchronizing the official times of the country, agreed that:
135499 +# The official time of the country will should move forward one hour
135500 +# at the 24[:00] hours of the first day of Farvardin and should return
135501 +# to its previous state at the 24[:00] hours of the 30th day of
135502 +# Shahrivar.
135504 +# First Deputy to the President - Hassan Habibi
135506 +# From personal experience, that agrees with what has been followed
135507 +# for at least the last 5 years. Before that, for a few years, the
135508 +# date used was the first Thursday night of Farvardin and the last
135509 +# Thursday night of Shahrivar, but I can't give exact dates....
135510 +# I have also changed the abbreviations to what is considered correct
135511 +# here in Iran, IRST for regular time and IRDT for daylight saving time.
135513 +# From Paul Eggert (2003-03-15)
135514 +# Go with Shanks before September 1991, and with Pournader thereafter.
135515 +# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates.
135516 # The Persian calendar is based on the sun, and dates after around 2050
135517 # are approximate; stop after 2037 when 32-bit time_t's overflow.
135519 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
135520 -Rule Iran 1978 1980 - Mar 21 0:00 1:00 S
135521 -Rule Iran 1978 only - Oct 21 0:00 0 -
135522 -Rule Iran 1979 only - Sep 19 0:00 0 -
135523 -Rule Iran 1980 only - Sep 23 0:00 0 -
135524 -Rule Iran 1991 only - May 3 0:00s 1:00 S
135525 -Rule Iran 1991 only - Sep 20 0:00s 0 -
135526 -Rule Iran 1992 1995 - Mar 21 0:00 1:00 S
135527 -Rule Iran 1992 1995 - Sep 23 0:00 0 -
135528 -Rule Iran 1996 only - Mar 20 0:00 1:00 S
135529 -Rule Iran 1996 only - Sep 22 0:00 0 -
135530 -Rule Iran 1997 1999 - Mar 21 0:00 1:00 S
135531 -Rule Iran 1997 1999 - Sep 23 0:00 0 -
135532 -Rule Iran 2000 only - Mar 20 0:00 1:00 S
135533 -Rule Iran 2000 only - Sep 22 0:00 0 -
135534 -Rule Iran 2001 2003 - Mar 21 0:00 1:00 S
135535 -Rule Iran 2001 2003 - Sep 23 0:00 0 -
135536 -Rule Iran 2004 only - Mar 20 0:00 1:00 S
135537 -Rule Iran 2004 only - Sep 22 0:00 0 -
135538 -Rule Iran 2005 2007 - Mar 21 0:00 1:00 S
135539 -Rule Iran 2005 2007 - Sep 23 0:00 0 -
135540 -Rule Iran 2008 only - Mar 20 0:00 1:00 S
135541 -Rule Iran 2008 only - Sep 22 0:00 0 -
135542 -Rule Iran 2009 2011 - Mar 21 0:00 1:00 S
135543 -Rule Iran 2009 2011 - Sep 23 0:00 0 -
135544 -Rule Iran 2012 only - Mar 20 0:00 1:00 S
135545 -Rule Iran 2012 only - Sep 22 0:00 0 -
135546 -Rule Iran 2013 2015 - Mar 21 0:00 1:00 S
135547 -Rule Iran 2013 2015 - Sep 23 0:00 0 -
135548 -Rule Iran 2016 only - Mar 20 0:00 1:00 S
135549 -Rule Iran 2016 only - Sep 22 0:00 0 -
135550 -Rule Iran 2017 2019 - Mar 21 0:00 1:00 S
135551 -Rule Iran 2017 2019 - Sep 23 0:00 0 -
135552 -Rule Iran 2020 only - Mar 20 0:00 1:00 S
135553 -Rule Iran 2020 only - Sep 22 0:00 0 -
135554 -Rule Iran 2021 2023 - Mar 21 0:00 1:00 S
135555 -Rule Iran 2021 2023 - Sep 23 0:00 0 -
135556 -Rule Iran 2024 2025 - Mar 20 0:00 1:00 S
135557 -Rule Iran 2024 2025 - Sep 22 0:00 0 -
135558 -Rule Iran 2026 2027 - Mar 21 0:00 1:00 S
135559 -Rule Iran 2026 2027 - Sep 23 0:00 0 -
135560 -Rule Iran 2028 2029 - Mar 20 0:00 1:00 S
135561 -Rule Iran 2028 2029 - Sep 22 0:00 0 -
135562 -Rule Iran 2030 2031 - Mar 21 0:00 1:00 S
135563 -Rule Iran 2030 2031 - Sep 23 0:00 0 -
135564 -Rule Iran 2032 2033 - Mar 20 0:00 1:00 S
135565 -Rule Iran 2032 2033 - Sep 22 0:00 0 -
135566 -Rule Iran 2034 2035 - Mar 21 0:00 1:00 S
135567 -Rule Iran 2034 2035 - Sep 23 0:00 0 -
135568 -Rule Iran 2036 2037 - Mar 20 0:00 1:00 S
135569 -Rule Iran 2036 2037 - Sep 22 0:00 0 -
135570 +Rule Iran 1978 1980 - Mar 21 0:00 1:00 D
135571 +Rule Iran 1978 only - Oct 21 0:00 0 S
135572 +Rule Iran 1979 only - Sep 19 0:00 0 S
135573 +Rule Iran 1980 only - Sep 23 0:00 0 S
135574 +Rule Iran 1991 only - May 3 0:00 1:00 D
135575 +Rule Iran 1992 1995 - Mar 22 0:00 1:00 D
135576 +Rule Iran 1991 1995 - Sep 22 0:00 0 S
135577 +Rule Iran 1996 only - Mar 21 0:00 1:00 D
135578 +Rule Iran 1996 only - Sep 21 0:00 0 S
135579 +Rule Iran 1997 1999 - Mar 22 0:00 1:00 D
135580 +Rule Iran 1997 1999 - Sep 22 0:00 0 S
135581 +Rule Iran 2000 only - Mar 21 0:00 1:00 D
135582 +Rule Iran 2000 only - Sep 21 0:00 0 S
135583 +Rule Iran 2001 2003 - Mar 22 0:00 1:00 D
135584 +Rule Iran 2001 2003 - Sep 22 0:00 0 S
135585 +Rule Iran 2004 only - Mar 21 0:00 1:00 D
135586 +Rule Iran 2004 only - Sep 21 0:00 0 S
135587 +Rule Iran 2005 2007 - Mar 22 0:00 1:00 D
135588 +Rule Iran 2005 2007 - Sep 22 0:00 0 S
135589 +Rule Iran 2008 only - Mar 21 0:00 1:00 D
135590 +Rule Iran 2008 only - Sep 21 0:00 0 S
135591 +Rule Iran 2009 2011 - Mar 22 0:00 1:00 D
135592 +Rule Iran 2009 2011 - Sep 22 0:00 0 S
135593 +Rule Iran 2012 only - Mar 21 0:00 1:00 D
135594 +Rule Iran 2012 only - Sep 21 0:00 0 S
135595 +Rule Iran 2013 2015 - Mar 22 0:00 1:00 D
135596 +Rule Iran 2013 2015 - Sep 22 0:00 0 S
135597 +Rule Iran 2016 only - Mar 21 0:00 1:00 D
135598 +Rule Iran 2016 only - Sep 21 0:00 0 S
135599 +Rule Iran 2017 2019 - Mar 22 0:00 1:00 D
135600 +Rule Iran 2017 2019 - Sep 22 0:00 0 S
135601 +Rule Iran 2020 only - Mar 21 0:00 1:00 D
135602 +Rule Iran 2020 only - Sep 21 0:00 0 S
135603 +Rule Iran 2021 2023 - Mar 22 0:00 1:00 D
135604 +Rule Iran 2021 2023 - Sep 22 0:00 0 S
135605 +Rule Iran 2024 2025 - Mar 21 0:00 1:00 D
135606 +Rule Iran 2024 2025 - Sep 21 0:00 0 S
135607 +Rule Iran 2026 2027 - Mar 22 0:00 1:00 D
135608 +Rule Iran 2026 2027 - Sep 22 0:00 0 S
135609 +Rule Iran 2028 2029 - Mar 21 0:00 1:00 D
135610 +Rule Iran 2028 2029 - Sep 21 0:00 0 S
135611 +Rule Iran 2030 2031 - Mar 22 0:00 1:00 D
135612 +Rule Iran 2030 2031 - Sep 22 0:00 0 S
135613 +Rule Iran 2032 2033 - Mar 21 0:00 1:00 D
135614 +Rule Iran 2032 2033 - Sep 21 0:00 0 S
135615 +Rule Iran 2034 2035 - Mar 22 0:00 1:00 D
135616 +Rule Iran 2034 2035 - Sep 22 0:00 0 S
135617 +Rule Iran 2036 2037 - Mar 21 0:00 1:00 D
135618 +Rule Iran 2036 2037 - Sep 21 0:00 0 S
135619 # Zone NAME GMTOFF RULES FORMAT [UNTIL]
135620 Zone Asia/Tehran 3:25:44 - LMT 1916
135621 3:25:44 - TMT 1946 # Tehran Mean Time
135622 - 3:30 - IRT 1977 Nov
135623 + 3:30 - IRST 1977 Nov
135624 4:00 Iran IR%sT 1979
135625 3:30 Iran IR%sT
135627 @@ -1154,9 +1163,26 @@
135628 # and Sunday of April" phrase, if taken literally, means that the
135629 # transition takes place at 00:00 on the first Sunday on or after 04-02.
135631 +# From Paul Eggert (2003-02-09):
135632 +# DAWN <http://www.dawn.com/2002/10/06/top13.htm> reported on 2002-10-05
135633 +# that 2002 DST ended that day at midnight. Go with McDow for now.
135635 +# From Steffen Thorsen (2003-03-14):
135636 +# According to http://www.dawn.com/2003/03/07/top15.htm
135637 +# there will be no DST in Pakistan this year:
135639 +# ISLAMABAD, March 6: Information and Media Development Minister Sheikh
135640 +# Rashid Ahmed on Thursday said the cabinet had reversed a previous
135641 +# decision to advance clocks by one hour in summer and put them back by
135642 +# one hour in winter with the aim of saving light hours and energy.
135644 +# The minister told a news conference that the experiment had rather
135645 +# shown 8 per cent higher consumption of electricity.
135648 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
135649 -Rule Pakistan 2002 max - Apr Sun>=2 0:00 1:00 S
135650 -Rule Pakistan 2002 max - Oct 15 0:00 0 -
135651 +Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S
135652 +Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 -
135653 # Zone NAME GMTOFF RULES FORMAT [UNTIL]
135654 Zone Asia/Karachi 4:28:12 - LMT 1907
135655 5:30 - IST 1942 Sep
135656 diff -u -udbrN glibc-2.3.2/timezone/australasia glibc-2.3.2-200304020432/timezone/australasia
135657 --- glibc-2.3.2/timezone/australasia Tue Oct 15 18:59:28 2002
135658 +++ glibc-2.3.2-200304020432/timezone/australasia Mon Mar 24 20:00:03 2003
135659 @@ -1,4 +1,4 @@
135660 -# @(#)australasia 7.67
135661 +# @(#)australasia 7.68
135662 # This file also includes Pacific islands.
135664 # Notes are at the end of this file
135665 @@ -297,6 +297,17 @@
135666 ###############################################################################
135668 # New Zealand
135670 +# From Paul Eggert (2002-10-23):
135671 +# The Department of Internal Affairs (DIA) maintains a brief history;
135672 +# see tz-link.htm for the full reference.
135674 +# Shanks gives 1868 for the introduction of standard time; go with the
135675 +# DIA's more-precise 1868-11-02. The DIA says that clocks were
135676 +# advanced by half an hour in 1941; go with Shanks's more-precise
135677 +# 1940-09-29 02:00. The DIA says that starting in 1933 DST began the
135678 +# first Sunday in September; go with Shanks's last Sunday starting in
135679 +# 1934.
135681 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
135682 # Shanks gives 1927 Nov 6 - 1928 Mar 4, 1928 Oct 14 - 1929 Mar 17,
135683 @@ -311,17 +322,17 @@
135684 # didn't change until 1945 Apr 30; go with Shanks.
135685 Rule NZ 1934 1940 - Apr lastSun 2:00 0 S
135686 Rule NZ 1934 1939 - Sep lastSun 2:00 0:30 HD
135687 -Rule NZ 1974 only - Nov 3 2:00s 1:00 D
135688 +Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D
135689 +Rule NZ 1975 only - Feb lastSun 2:00s 0 S
135690 Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D
135691 -Rule NZ 1989 only - Oct 8 2:00s 1:00 D
135692 -Rule NZ 1990 max - Oct Sun>=1 2:00s 1:00 D
135693 -Rule NZ 1975 only - Feb 23 2:00s 0 S
135694 Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S
135695 +Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
135696 +Rule NZ 1990 max - Oct Sun>=1 2:00s 1:00 D
135697 Rule NZ 1990 max - Mar Sun>=15 2:00s 0 S
135698 Rule Chatham 1990 max - Oct Sun>=1 2:45s 1:00 D
135699 Rule Chatham 1991 max - Mar Sun>=15 2:45s 0 S
135700 # Zone NAME GMTOFF RULES FORMAT [UNTIL]
135701 -Zone Pacific/Auckland 11:39:04 - LMT 1868
135702 +Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
135703 11:30 NZ NZ%sT 1940 Sep 29 2:00
135704 12:00 NZ NZ%sT
135705 Zone Pacific/Chatham 12:45 Chatham CHA%sT
135706 @@ -399,8 +410,8 @@
135707 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
135708 Rule Tonga 1999 only - Oct 7 2:00s 1:00 S
135709 Rule Tonga 2000 only - Mar 19 2:00s 0 -
135710 -Rule Tonga 2000 max - Nov Sun>=1 2:00 1:00 S
135711 -Rule Tonga 2001 max - Jan lastSun 2:00 0 -
135712 +Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S
135713 +Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
135714 # Zone NAME GMTOFF RULES FORMAT [UNTIL]
135715 Zone Pacific/Tongatapu 12:19:20 - LMT 1901
135716 12:20 - TOT 1941 # Tonga Time
135717 @@ -1263,6 +1274,8 @@
135718 # of January the standard time in the Kingdom shall be moved backward by one
135719 # hour to 1:00am.
135721 +# From Pulu 'Anau (2002-11-05):
135722 +# The law was for 3 years, supposedly to get renewed. It wasn't.
135724 ###############################################################################
135726 diff -u -udbrN glibc-2.3.2/timezone/europe glibc-2.3.2-200304020432/timezone/europe
135727 --- glibc-2.3.2/timezone/europe Sat Apr 6 05:40:00 2002
135728 +++ glibc-2.3.2-200304020432/timezone/europe Mon Mar 24 20:00:03 2003
135729 @@ -1,4 +1,4 @@
135730 -# @(#)europe 7.82
135731 +# @(#)europe 7.83
135733 # This data is by no means authoritative; if you think you know better,
135734 # go ahead and edit the file (and please send any changes to
135735 @@ -33,17 +33,17 @@
135736 # I invented the abbreviations marked `*' in the following table;
135737 # the rest are from earlier versions of this file, or from other sources.
135738 # Corrections are welcome!
135739 -# std dst
135740 +# std dst 2dst
135741 # LMT Local Mean Time
135742 -# -4:00 AST Atlantic
135743 +# -4:00 AST ADT Atlantic
135744 # -3:00 WGT WGST Western Greenland*
135745 # -1:00 EGT EGST Eastern Greenland*
135746 -# 0:00 GMT BST Greenwich, British Summer
135747 +# 0:00 GMT BST BDST Greenwich, British Summer
135748 # 0:00 GMT IST Greenwich, Irish Summer
135749 -# 0:00 WET WEST Western Europe
135750 -# 0:19:32 AMT NST Amsterdam, Netherlands Summer (1835-1937)*
135751 +# 0:00 WET WEST WEMT Western Europe
135752 +# 0:19:32.13 AMT NST Amsterdam, Netherlands Summer (1835-1937)*
135753 # 0:20 NET NEST Netherlands (1937-1940)*
135754 -# 1:00 CET CEST Central Europe
135755 +# 1:00 CET CEST CEMT Central Europe
135756 # 1:00:14 SET Swedish (1879-1899)*
135757 # 2:00 EET EEST Eastern Europe
135758 # 3:00 MSK MSD Moscow
135759 @@ -558,20 +558,30 @@
135760 1:00 EU CE%sT
135762 # Austria
135764 +# From Paul Eggert (2003-02-28): Shanks gives 1918-06-16 and
135765 +# 1945-11-18, but the Austrian Federal Office of Metrology and
135766 +# Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
135767 +# date of 1945-04-12 with no time. For the 1980-04-06 transition
135768 +# Shanks gives 02:00, the BEV 00:00. Go with the BEV, and guess 02:00
135769 +# for 1945-04-12.
135771 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
135772 Rule Austria 1920 only - Apr 5 2:00s 1:00 S
135773 Rule Austria 1920 only - Sep 13 2:00s 0 -
135774 -Rule Austria 1945 only - Apr 2 2:00s 1:00 S
135775 -Rule Austria 1945 only - Nov 18 2:00s 0 -
135776 Rule Austria 1946 only - Apr 14 2:00s 1:00 S
135777 Rule Austria 1946 1948 - Oct Sun>=1 2:00s 0 -
135778 Rule Austria 1947 only - Apr 6 2:00s 1:00 S
135779 Rule Austria 1948 only - Apr 18 2:00s 1:00 S
135780 +Rule Austria 1980 only - Apr 6 0:00 1:00 S
135781 +Rule Austria 1980 only - Sep 28 0:00 0 -
135782 # Zone NAME GMTOFF RULES FORMAT [UNTIL]
135783 Zone Europe/Vienna 1:05:20 - LMT 1893 Apr
135784 - 1:00 C-Eur CE%sT 1918 Jun 16 3:00
135785 - 1:00 Austria CE%sT 1940 Apr 1 2:00
135786 - 1:00 C-Eur CE%sT 1945 Apr 2 2:00
135787 + 1:00 C-Eur CE%sT 1920
135788 + 1:00 Austria CE%sT 1940 Apr 1 2:00s
135789 + 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
135790 + 1:00 1:00 CEST 1945 Apr 12 2:00s
135791 + 1:00 - CET 1946
135792 1:00 Austria CE%sT 1981
135793 1:00 EU CE%sT
135795 @@ -654,7 +664,7 @@
135796 1:00 EU CE%sT
135798 # Bosnia and Herzegovina
135799 -# see Yugoslavia
135800 +# see Serbia and Montenegro
135802 # Bulgaria
135804 @@ -681,7 +691,7 @@
135805 2:00 EU EE%sT
135807 # Croatia
135808 -# see Yugosloavia
135809 +# see Serbia and Montenegro
135811 # Czech Republic
135812 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
135813 @@ -991,25 +1001,29 @@
135814 # From Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk> (1998-09-29):
135815 # The German time zone web site by the Physikalisch-Technische
135816 # Bundesanstalt contains DST information back to 1916.
135818 -# <a href="http://www.ptb.de/english/org/4/43/432/lega.htm">
135819 -# Realisation of Legal Time in Germany
135820 -# </a>
135821 +# [See tz-link.htm for the URL.]
135823 +# From Joerg Schilling (2002-10-23):
135824 +# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by <a
135825 +# href="http://www.dhm.de/lemo/html/biografien/BersarinNikolai/">
135826 +# General [Nikolai] Bersarin</a>.
135828 +# From Paul Eggert (2003-03-08):
135829 +# <a href="http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf">
135830 +# says that Bersarin issued an order to use Moscow time on May 20.
135831 +# However, Moscow did not observe daylight saving in 1945, so
135832 +# this was equivalent to CEMT (GMT+3), not GMT+4.
135835 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
135836 Rule Germany 1945 only - Apr 2 2:00s 1:00 S
135837 -# Shanks says 05-24 2:00 to 09-24 3:00 for DDST; go with the PTB, who quotes
135838 -# the Archiv fuer publizist. Arbeit (Munzinger-Archiv) 652 (Zeitsystem)
135839 -# (1961-11-25), which gives dates only. Guess 3:00 transition times.
135840 -Rule Germany 1945 only - May 31 3:00 2:00 M # Midsummer
135841 -Rule Germany 1945 only - Sep 23 3:00 1:00 S
135842 +Rule Germany 1945 only - May 24 2:00 2:00 M # Midsummer
135843 +Rule Germany 1945 only - Sep 24 3:00 1:00 S
135844 Rule Germany 1945 only - Nov 18 2:00s 0 -
135845 Rule Germany 1946 only - Apr 14 2:00s 1:00 S
135846 Rule Germany 1946 only - Oct 7 2:00s 0 -
135847 Rule Germany 1947 1949 - Oct Sun>=1 2:00s 0 -
135848 Rule Germany 1947 only - Apr 6 2:00s 1:00 S
135849 -# The PTB gives 3:00 CET and 3:00 CEST for the midsummer transition times;
135850 -# go with Shanks.
135851 Rule Germany 1947 only - May 11 2:00s 2:00 M
135852 Rule Germany 1947 only - Jun 29 3:00 1:00 S
135853 Rule Germany 1948 only - Apr 18 2:00s 1:00 S
135854 @@ -1341,6 +1355,15 @@
135855 # Fact File, Lithuanian State Department of Tourism
135856 # </a> (2000-03-27): Local time is GMT+2 hours ..., no daylight saving.
135858 +# From a user via Klaus Marten (2003-02-07):
135859 +# As a candidate for membership of the European Union, Lithuania will
135860 +# observe Summer Time in 2003, changing its clocks at the times laid
135861 +# down in EU Directive 2000/84 of 19.I.01 (i.e. at the same times as its
135862 +# neighbour Latvia). The text of the Lithuanian government Order of
135863 +# 7.XI.02 to this effect can be found at
135864 +# http://www.lrvk.lt/nut/11/n1749.htm
135867 # Zone NAME GMTOFF RULES FORMAT [UNTIL]
135868 Zone Europe/Vilnius 1:41:16 - LMT 1880
135869 1:24:00 - WMT 1917 # Warsaw Mean Time
135870 @@ -1355,7 +1378,8 @@
135871 2:00 C-Eur EE%sT 1998
135872 2:00 - EET 1998 Mar 29 1:00u
135873 1:00 EU CE%sT 1999 Oct 31 1:00u
135874 - 2:00 - EET
135875 + 2:00 - EET 2003 Jan 1
135876 + 2:00 EU EE%sT
135878 # Luxembourg
135879 # Whitman disagrees with most of these dates in minor ways; go with Shanks.
135880 @@ -1393,7 +1417,7 @@
135881 1:00 EU CE%sT
135883 # Macedonia
135884 -# see Yugoslavia
135885 +# see Serbia and Montenegro
135887 # Malta
135888 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
135889 @@ -1979,11 +2003,27 @@
135890 11:00 Russia ANA%sT 1992 Jan 19 2:00s
135891 12:00 Russia ANA%sT
135893 +# Serbia and Montenegro
135894 +# Zone NAME GMTOFF RULES FORMAT [UNTIL]
135895 +Zone Europe/Belgrade 1:22:00 - LMT 1884
135896 + 1:00 - CET 1941 Apr 18 23:00
135897 + 1:00 C-Eur CE%sT 1945 May 8 2:00s
135898 + 1:00 1:00 CEST 1945 Sep 16 2:00s
135899 +# Metod Kozelj <metod.kozelj@rzs-hm.si> reports that the legal date of
135900 +# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
135901 +# Shanks doesn't give as much detail, so go with Kozelj.
135902 + 1:00 - CET 1982 Nov 27
135903 + 1:00 EU CE%sT
135904 +Link Europe/Belgrade Europe/Ljubljana # Slovenia
135905 +Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina
135906 +Link Europe/Belgrade Europe/Skopje # Macedonia
135907 +Link Europe/Belgrade Europe/Zagreb # Croatia
135909 # Slovakia
135910 Link Europe/Prague Europe/Bratislava
135912 # Slovenia
135913 -# see Yugoslavia
135914 +# see Serbia and Montenegro
135916 # Spain
135917 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
135918 @@ -2191,6 +2231,15 @@
135919 Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
135921 # Ukraine
135923 +# From Igor Karpov, who works for the Ukranian Ministry of Justice,
135924 +# via Garrett Wollman (2003-01-27):
135925 +# BTW, I've found the official document on this matter. It's goverment
135926 +# regulations number 509, May 13, 1996. In my poor translation it says:
135927 +# "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday
135928 +# of March at 3am the time is changing to 4am and each last Sunday of
135929 +# October the time at 4am is changing to 3am"
135931 # Zone NAME GMTOFF RULES FORMAT [UNTIL]
135932 # Most of Ukraine since 1970 has been like Kiev.
135933 Zone Europe/Kiev 2:02:04 - LMT 1880
135934 @@ -2248,22 +2297,6 @@
135935 3:00 Russia MSK/MSD 1997
135936 3:00 - MSK 1997 Mar lastSun 1:00u
135937 2:00 EU EE%sT
135939 -# Yugoslavia
135940 -# Zone NAME GMTOFF RULES FORMAT [UNTIL]
135941 -Zone Europe/Belgrade 1:22:00 - LMT 1884
135942 - 1:00 - CET 1941 Apr 18 23:00
135943 - 1:00 C-Eur CE%sT 1945 May 8 2:00s
135944 - 1:00 1:00 CEST 1945 Sep 16 2:00s
135945 -# Metod Kozelj <metod.kozelj@rzs-hm.si> reports that the legal date of
135946 -# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
135947 -# Shanks doesn't give as much detail, so go with Kozelj.
135948 - 1:00 - CET 1982 Nov 27
135949 - 1:00 EU CE%sT
135950 -Link Europe/Belgrade Europe/Ljubljana # Slovenia
135951 -Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina
135952 -Link Europe/Belgrade Europe/Skopje # Macedonia
135953 -Link Europe/Belgrade Europe/Zagreb # Croatia
135955 ###############################################################################
135957 diff -u -udbrN glibc-2.3.2/timezone/iso3166.tab glibc-2.3.2-200304020432/timezone/iso3166.tab
135958 --- glibc-2.3.2/timezone/iso3166.tab Tue Oct 15 19:12:42 2002
135959 +++ glibc-2.3.2-200304020432/timezone/iso3166.tab Mon Mar 24 20:00:03 2003
135960 @@ -2,11 +2,11 @@
135962 # @(#)iso3166.tab 1.9
135964 -# From Paul Eggert <eggert@twinsun.com> (2002-05-28):
135965 +# From Paul Eggert <eggert@twinsun.com> (2003-02-04):
135967 # This file contains a table with the following columns:
135968 # 1. ISO 3166-1 alpha-2 country code, current as of
135969 -# ISO 3166-1 Newsletter No. V-5 (2002-05-20). See:
135970 +# ISO 3166-1 Newsletter No. V-7 (2003-01-14). See:
135971 # <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/index.html">
135972 # ISO 3166 Maintenance agency (ISO 3166/MA)
135973 # </a>.
135974 @@ -256,7 +256,7 @@
135975 WS Samoa (Western)
135976 YE Yemen
135977 YT Mayotte
135978 -YU Yugoslavia
135979 +YU Serbia and Montenegro
135980 ZA South Africa
135981 ZM Zambia
135982 ZW Zimbabwe
135983 diff -u -udbrN glibc-2.3.2/timezone/northamerica glibc-2.3.2-200304020432/timezone/northamerica
135984 --- glibc-2.3.2/timezone/northamerica Sat Apr 6 05:40:00 2002
135985 +++ glibc-2.3.2-200304020432/timezone/northamerica Mon Mar 24 20:00:03 2003
135986 @@ -1,4 +1,4 @@
135987 -# @(#)northamerica 7.61
135988 +# @(#)northamerica 7.62
135989 # also includes Central America and the Caribbean
135991 # This data is by no means authoritative; if you think you know better,
135992 @@ -88,6 +88,23 @@
135993 # of surrender, all of whom interrupting the bells of Big Ben in
135994 # London which were to precede Mr. Attlee's speech.
135996 +# From Paul Eggert (2003-02-09): It was Robert St John, not Bob Trout. From
135997 +# Myrna Oliver's obituary of St John on page B16 of today's Los Angeles Times:
135999 +# ... a war-weary U.S. clung to radios, awaiting word of Japan's surrender.
136000 +# Any announcement from Asia would reach St. John's New York newsroom on a
136001 +# wire service teletype machine, which had prescribed signals for major news.
136002 +# Associated Press, for example, would ring five bells before spewing out
136003 +# typed copy of an important story, and 10 bells for news "of transcendental
136004 +# importance."
136006 +# On Aug. 14, stalling while talking steadily into the NBC networks' open
136007 +# microphone, St. John heard five bells and waited only to hear a sixth bell,
136008 +# before announcing confidently: "Ladies and gentlemen, World War II is over.
136009 +# The Japanese have agreed to our surrender terms."
136011 +# He had scored a 20-second scoop on other broadcasters.
136013 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
136014 Rule US 1918 1919 - Mar lastSun 2:00 1:00 D
136015 Rule US 1918 1919 - Oct lastSun 2:00 0 S
136016 @@ -189,10 +206,11 @@
136017 # US eastern time, represented by New York
136019 # Connecticut, Delaware, District of Columbia, most of Florida,
136020 -# Georgia, far southeastern Indiana, eastern Kentucky, Maine,
136021 -# Maryland, Massachusetts, New Hampshire, New Jersey, New York, North
136022 -# Carolina, Ohio, Pennsylvania, Rhode Island, South Carolina, eastern
136023 -# Tennessee, Vermont, Virginia, West Virginia
136024 +# Georgia, southeast Indiana (Clark, Dearborn, Floyd, Harrison, and
136025 +# Ohio counties), eastern Kentucky, Maine, Maryland, Massachusetts,
136026 +# New Hampshire, New Jersey, New York, North Carolina, Ohio,
136027 +# Pennsylvania, Rhode Island, South Carolina, eastern Tennessee,
136028 +# Vermont, Virginia, West Virginia
136030 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
136031 Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
136032 @@ -211,10 +229,11 @@
136033 # US central time, represented by Chicago
136035 # Alabama, Arkansas, Florida panhandle, Illinois, western Indiana
136036 -# corners, Iowa, most of Kansas, western Kentucky, Louisiana,
136037 -# Minnesota, Mississippi, Missouri, eastern Nebraska, eastern North
136038 -# Dakota, Oklahoma, eastern South Dakota, western Tennessee, most of
136039 -# Texas, Wisconsin
136040 +# (Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
136041 +# Vanderburgh, and Warrick counties), Iowa, most of Kansas, western
136042 +# Kentucky, Louisiana, Minnesota, Mississippi, Missouri, eastern
136043 +# Nebraska, eastern North Dakota, Oklahoma, eastern South Dakota,
136044 +# western Tennessee, most of Texas, Wisconsin
136046 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
136047 Rule Chicago 1920 only - Jun 13 2:00 1:00 D
136048 @@ -357,12 +376,32 @@
136049 # Now we turn to US areas that have diverged from the consensus since 1970.
136051 # Arizona mostly uses MST.
136053 +# From Paul Eggert (2002-10-20):
136055 +# The information in the rest of this paragraph is derived from the
136056 +# <a href="http://www.dlapr.lib.az.us/links/daylight.htm">
136057 +# Daylight Saving Time web page (2002-01-23)</a> maintained by the
136058 +# Arizona State Library, Archives and Public Records.
136059 +# Between 1944-01-01 and 1944-04-01 the State of Arizona used standard
136060 +# time, but by federal law railroads, airlines, bus lines, military
136061 +# personnel, and some engaged in interstate commerce continued to
136062 +# observe war (i.e., daylight saving) time. The 1944-03-17 Phoenix
136063 +# Gazette says that was the date the law changed, and that 04-01 was
136064 +# the date the state's clocks would change. In 1945 the State of
136065 +# Arizona used standard time all year, again with exceptions only as
136066 +# mandated by federal law. Arizona observed DST in 1967, but Arizona
136067 +# Laws 1968, ch. 183 (effective 1968-03-21) repealed DST.
136069 +# Shanks says the 1944 experiment came to an end on 1944-03-17.
136070 +# Go with the Arizona State Library instead.
136072 Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 12:00
136073 -7:00 US M%sT 1944 Jan 1 00:01
136074 - -7:00 - MST 1944 Mar 17 00:01
136075 + -7:00 - MST 1944 Apr 1 00:01
136076 -7:00 US M%sT 1944 Oct 1 00:01
136077 -7:00 - MST 1967
136078 - -7:00 US M%sT 1968
136079 + -7:00 US M%sT 1968 Mar 21
136080 -7:00 - MST
136081 # From Arthur David Olson (1988-02-13):
136082 # A writer from the Inter Tribal Council of Arizona, Inc.,
136083 diff -u -udbrN glibc-2.3.2/timezone/southamerica glibc-2.3.2-200304020432/timezone/southamerica
136084 --- glibc-2.3.2/timezone/southamerica Tue Oct 15 19:03:12 2002
136085 +++ glibc-2.3.2-200304020432/timezone/southamerica Mon Mar 24 20:00:03 2003
136086 @@ -1,4 +1,4 @@
136087 -# @(#)southamerica 7.45
136088 +# @(#)southamerica 7.46
136090 # This data is by no means authoritative; if you think you know better,
136091 # go ahead and edit the file (and please send any changes to
136092 @@ -583,6 +583,10 @@
136093 # From Paul Eggert (2001-05-04):
136094 # Go with this article in preference to Shanks's 1969 date for modern DST.
136095 # Assume this rule has been used since DST was introduced in the islands.
136097 +# From Paul Eggert (2002-10-24):
136098 +# <http://www.shoa.cl/shoa/faqhoraoficial.htm> gives many details that
136099 +# disagree with the following table, but we haven't had time to compare them.
136101 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
136102 Rule Chile 1918 only - Sep 1 0:00 1:00 S
136103 diff -u -udbrN glibc-2.3.2/timezone/zone.tab glibc-2.3.2-200304020432/timezone/zone.tab
136104 --- glibc-2.3.2/timezone/zone.tab Tue Oct 15 19:00:59 2002
136105 +++ glibc-2.3.2-200304020432/timezone/zone.tab Mon Mar 24 20:00:03 2003
136106 @@ -1,4 +1,4 @@
136107 -# @(#)zone.tab 1.27
136108 +# @(#)zone.tab 1.28
136110 # TZ zone descriptions
136112 @@ -33,6 +33,7 @@
136113 AO -0848+01314 Africa/Luanda
136114 AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island
136115 AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole
136116 +AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island
136117 AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island
136118 AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
136119 AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
136120 diff -u -udbrN glibc-2.3.2/tls.make.c glibc-2.3.2-200304020432/tls.make.c
136121 --- glibc-2.3.2/tls.make.c Fri Nov 15 04:36:55 2002
136122 +++ glibc-2.3.2-200304020432/tls.make.c Wed Mar 26 23:49:17 2003
136123 @@ -2,6 +2,12 @@
136125 #include <tls.h>
136127 +#if USE_TLS
136128 +@@@ use-tls = yes @@@
136129 +#else
136130 +@@@ use-tls = no @@@
136131 +#endif
136133 #if USE___THREAD
136134 @@@ use-thread = yes @@@
136135 #else