aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-07-17 12:36:43 +0000
committerUlrich Drepper <drepper@redhat.com>1998-07-17 12:36:43 +0000
commit07435eb48c6acb0313a8957257af4771e9e55030 (patch)
tree18150741adde33705ec19becfb988a8053cf9ca0
parentaf553418323e7afc30e5e1333d1a82592cd3888b (diff)
downloadglibc-07435eb48c6acb0313a8957257af4771e9e55030.zip
glibc-07435eb48c6acb0313a8957257af4771e9e55030.tar.gz
glibc-07435eb48c6acb0313a8957257af4771e9e55030.tar.bz2
Update.
1998-07-17 Ulrich Drepper <drepper@cygnus.com> * debug/catchsegv.sh: Fix several stupid bugs. * shlib-versions: Define version for libSegFault. * debug/Makefile: Replace shared lib version number while rewriting. 1998-07-17 Mark Kettenis <kettenis@phys.uva.nl> * sysdeps/mach/hurd/dl-sysdep.c (__mmap): Add sanity check. Suggested by Roland McGrath. 1998-07-15 Andreas Jaeger <aj@arthur.rhein-neckar.de> * timezone/Makefile: Remove '-L (leapseconds)' for testdata generation to control environment. 1998-07-17 09:21 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/sysv4/solaris2/bits/signum.h: Define SIG_HOLD. Patch by John Tobey <jtobey@banta-im.com>. * manual/llio.texi: Document readv/writev and mmap functions. Patch by Michael Deutschmann <michael@talamasca.wkpowerlink.com>. 1998-07-16 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * manual/Makefile (texis): Depend on texis.awk. (nonexamples): Filter out add-on chapters. (chapters.% top-menu.%): Depend on libc-texinfo.sh. (stamp-summary): Depend on $(texis) except summary.texi. ($(inst_infodir)/libc.info): Simplify command. * manual/libc-texinfo.sh: Cleaned up to use less temporary files. Fix the generation of the detailed node listing to make it complete again. * manual/math.texi: Fix signature of lgamma_r.
-rw-r--r--ChangeLog37
-rw-r--r--debug/Makefile3
-rwxr-xr-xdebug/catchsegv.sh16
-rw-r--r--manual/.cvsignore2
-rw-r--r--manual/Makefile35
-rw-r--r--manual/libc-texinfo.sh147
-rw-r--r--manual/llio.texi429
-rw-r--r--manual/math.texi6
-rw-r--r--manual/top-menu.texi671
-rw-r--r--shlib-versions3
-rw-r--r--sysdeps/generic/abort.c2
-rw-r--r--sysdeps/mach/hurd/dl-sysdep.c3
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/bits/signum.h5
-rw-r--r--timezone/Makefile4
14 files changed, 1224 insertions, 139 deletions
diff --git a/ChangeLog b/ChangeLog
index fa257cf..04cb9ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,40 @@
+1998-07-17 Ulrich Drepper <drepper@cygnus.com>
+
+ * debug/catchsegv.sh: Fix several stupid bugs.
+
+ * shlib-versions: Define version for libSegFault.
+ * debug/Makefile: Replace shared lib version number while rewriting.
+
+1998-07-17 Mark Kettenis <kettenis@phys.uva.nl>
+
+ * sysdeps/mach/hurd/dl-sysdep.c (__mmap): Add sanity check.
+ Suggested by Roland McGrath.
+
+1998-07-15 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * timezone/Makefile: Remove '-L (leapseconds)' for testdata
+ generation to control environment.
+
+1998-07-17 09:21 Ulrich Drepper <drepper@cygnus.com>
+
+ * sysdeps/unix/sysv/sysv4/solaris2/bits/signum.h: Define SIG_HOLD.
+ Patch by John Tobey <jtobey@banta-im.com>.
+
+ * manual/llio.texi: Document readv/writev and mmap functions.
+ Patch by Michael Deutschmann <michael@talamasca.wkpowerlink.com>.
+
+1998-07-16 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * manual/Makefile (texis): Depend on texis.awk.
+ (nonexamples): Filter out add-on chapters.
+ (chapters.% top-menu.%): Depend on libc-texinfo.sh.
+ (stamp-summary): Depend on $(texis) except summary.texi.
+ ($(inst_infodir)/libc.info): Simplify command.
+ * manual/libc-texinfo.sh: Cleaned up to use less temporary files.
+ Fix the generation of the detailed node listing to make it
+ complete again.
+ * manual/math.texi: Fix signature of lgamma_r.
+
1998-07-16 23:06 Ulrich Drepper <drepper@cygnus.com>
* debug/Makefile (distribute): Add sigcontextinfo.h.
diff --git a/debug/Makefile b/debug/Makefile
index 0826b99..ada992e 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -44,7 +44,8 @@ include ../Rules
$(objpfx)catchsegv: catchsegv.sh $(common-objpfx)soversions.mk \
$(common-objpfx)config.make
- sed 's/@VERSION@/$(version)/;s/@SLIB@/$(slibdir)/' $< > $@.new
+ sed -e 's|@VERSION@|$(version)|' -e 's|@SLIB@|$(slibdir)|' \
+ -e 's|@SOVER@|$(libSegFault.so-version)|' $< > $@.new
chmod 555 $@.new
mv -f $@.new $@
diff --git a/debug/catchsegv.sh b/debug/catchsegv.sh
index 765242e..26407a7 100755
--- a/debug/catchsegv.sh
+++ b/debug/catchsegv.sh
@@ -24,7 +24,7 @@ shift
args="$*"
if test $# -eq 0; then
- case "$args" in
+ case "$prog" in
--h | --he | --hel | --help)
echo 'Usage: catchsegv PROGRAM ARGS...'
echo ' --help print this help, then exit'
@@ -45,18 +45,18 @@ Written by Ulrich Drepper.'
esac
fi
-LD_PRELOAD="${LD_PRELOAD:+${LD_PRELOAD}:}@SLIB@/libSegFault.so"
+LD_PRELOAD="${LD_PRELOAD:+${LD_PRELOAD}:}@SLIB@/libSegFault.so@SOVER@"
export LD_PRELOAD
SEGFAULT_USE_ALTSTACK=1
export SEGFAULT_USE_ALTSTACK
-SEGFAULT_OUTPUT_NAME="$prog.segv.$$"
+SEGFAULT_OUTPUT_NAME="${TMPDIR:-/tmp}/`basename $prog`.segv.$$"
export SEGFAULT_OUTPUT_NAME
$prog $args
exval=$?
unset LD_PRELOAD
-# Check for an segmentation fault.
+# Check for an segmentation error.
if test $exval -eq 139; then
# We caught a segmentation error. The output is in the file with the
# name we have in SEGFAULT_OUTPUT_NAME. In the output the names of
@@ -66,10 +66,10 @@ if test $exval -eq 139; then
read line; echo "$line"
while read line; do
case "$line" in
- [*) addr="`echo $line | sed 's/^[\(.*\)]$/\1/'`"
- complete="`addr2line -f -e $prog $addr 2>/dev/null|`"
- if $? -eq 0; then
- echo "`echo $complete|sed 'N;s/\(.*\)\n\(.*\)/\2(\1)/;'`$line"
+ [*) addr="`echo $line | sed 's/^\[\(.*\)\]$/\1/'`"
+ complete="`addr2line -f -e $prog $addr 2>/dev/null`"
+ if test $? -eq 0; then
+ echo "`echo $complete|sed 's/\(.*\) \(.*\)/\2(\1)/;'`$line"
else
echo "$line"
fi
diff --git a/manual/.cvsignore b/manual/.cvsignore
index 01f8968..1d23d99 100644
--- a/manual/.cvsignore
+++ b/manual/.cvsignore
@@ -8,5 +8,5 @@ glibc-*
*.toc *.aux *.log *.tmp
*.cp *.cps *.fn *.fns *.vr *.vrs *.tp *.tps *.ky *.kys *.pg *.pgs
-chapters chapters-incl1 chapters-incl2 summary.texi stamp-*
+texis top-menu.texi chapters.texi summary.texi stamp-*
distinfo dir-add.texinfo
diff --git a/manual/Makefile b/manual/Makefile
index 8af1d6c..47656c6 100644
--- a/manual/Makefile
+++ b/manual/Makefile
@@ -48,35 +48,32 @@ endif
mkinstalldirs = $(..)scripts/mkinstalldirs
chapters = $(addsuffix .texi, \
- intro errno memory ctype string mbyte locale message search \
- pattern io stdio llio filesys pipe socket terminal math \
- arith time setjmp signal startup process job nss users \
- sysinfo conf)
-add-chapters = $(wildcard $(patsubst %, ../%.texi, \
- $(join $(add-ons:=/),$(add-ons))))
+ intro errno memory ctype string mbyte locale \
+ message search pattern io stdio llio filesys \
+ pipe socket terminal math arith time setjmp \
+ signal startup process job nss users sysinfo conf)
+add-chapters = $(wildcard $(foreach d, $(add-ons), ../$d/$d.texi))
appendices = lang.texi header.texi install.texi maint.texi contrib.texi
-include texis
-texis: $(chapters) $(add-chapters) $(appendices) lgpl.texinfo
- $(AWK) -f texis.awk $^ > $@.T
+texis: texis.awk $(chapters) $(add-chapters) $(appendices) lgpl.texinfo
+ $(AWK) -f $^ > $@.T
mv -f $@.T $@
-nonexamples = $(filter-out %.c.texi, $(texis))
+nonexamples = $(filter-out $(add-chapters) %.c.texi, $(texis))
examples = $(filter %.c.texi, $(texis))
# Kludge: implicit rule so Make knows the one command does it all.
-chapters.% top-menu.%: $(texis)
- AWK=$(AWK) $(SHELL) libc-texinfo.sh \
- '$(chapters)' '$(add-chapters)' '$(appendices)'
+chapters.% top-menu.%: libc-texinfo.sh $(texis)
+ AWK=$(AWK) $(SHELL) $< '$(chapters)' '$(add-chapters)' '$(appendices)'
libc.dvi libc.info: chapters.texi top-menu.texi
libc.dvi: texinfo.tex
# Generate the summary from the Texinfo source files for each chapter.
summary.texi: stamp-summary ;
-stamp-summary: summary.awk $(chapters) $(chapters-incl)
- $(AWK) -f $^ \
- | sort -df +1 -2 | tr '\014' '\012' > summary-tmp
+stamp-summary: summary.awk $(filter-out summary.texi, $(texis))
+ $(AWK) -f $^ | sort -df +1 -2 | tr '\014' '\012' > summary-tmp
$(move-if-change) summary-tmp summary.texi
touch $@
@@ -106,8 +103,8 @@ dir-add.texinfo: xtract-typefun.awk $(texis)
$(TEXI2DVI) $<
# Distribution.
-minimal-dist = summary.awk texis.awk libc-texinfo.sh libc.texinfo \
- $(filter-out summary.texi, $(nonexamples)) \
+minimal-dist = summary.awk texis.awk libc-texinfo.sh libc.texinfo \
+ $(filter-out summary.texi, $(nonexamples)) \
$(patsubst %.c.texi,examples/%.c, $(examples))
doc-only-dist = Makefile COPYING.LIB
@@ -170,9 +167,7 @@ install-%: ;
$(inst_infodir)/libc.info: libc.info installdirs
for file in $<*; do \
- name=`basename $$file`; \
- $(INSTALL_DATA) $$file \
- `echo $@ | sed "s,$<\$$,$$name,"`; \
+ $(INSTALL_DATA) $$file $(@D)/$$file; \
done
installdirs:
diff --git a/manual/libc-texinfo.sh b/manual/libc-texinfo.sh
index 88733cb..7f26f8e 100644
--- a/manual/libc-texinfo.sh
+++ b/manual/libc-texinfo.sh
@@ -2,98 +2,71 @@
# Create libc.texinfo from the chapter files.
-grep '^@node.*Top' $1 | cut -d, -f-2 |
- sed 's/, /:/; s/:@node /:/; s/ /_/g; s/:/ /g' >cnodes.$$
-
-$AWK '{ file[$2] = $1; nnode[$2] = $3 }
-END { for(x in file)
- if(file[x] != "")
- print file[x] ":" x, file[nnode[x]] ":" nnode[x] }' \
- cnodes.$$ | tsort | sed 's/_/ /g; $d' >corder.$$
-
-[ -z "$2" ] || grep '^@node.*Top' `echo $2 /dev/null | tr ' ' '\n' | sort` |
- cut -d, -f1 | sed 's/@node //' >xorder.$$
-
-grep '^@node.*Top' $3 | cut -d, -f-2 |
- sed 's/, /:/; s/:@node /:/; s/ /_/g; s/:/ /g' >anodes.$$
-
-$AWK '{ file[$2] = $1; nnode[$2] = $3 }
-END { for(x in file)
- if(file[x] != "")
- print file[x] ":" x, file[nnode[x]] ":" nnode[x] }' \
- anodes.$$ | tsort | sed 's/_/ /g; $d' >aorder.$$
-
-IFS=:
-
->incl.$$
->smenu.$$
->lmenu.$$
-
-while read file node; do
- echo "@include $file" >>incl.$$
- echo "* $node:: `sed -n 's/^@c %MENU% //p' $file`" >>smenu.$$
- lmenu=`sed -n '/^@menu/,/^@end menu/p; /^@end menu/q' $file |
- sed '/^@menu/d; /^@end menu/d'`
- [ -z "$lmenu" ] || (
- echo; echo "$node"; echo
- echo "$lmenu"
- ) >>lmenu.$$
-done <corder.$$
-
-if [ -f xorder.$$ ]; then
-
- (echo; echo 'Add-ons'; echo) >>smenu.$$
-
- while read file node; do
- echo "@include $file" >>incl.$$
- echo "* $node:: `sed -n 's/^@c %MENU% //p' $file`" >>smenu.$$
- lmenu=`sed -n '/^@menu/,/^@end menu/p; /^@end menu/q' $file |
- sed '/^@menu/d; /^@end menu/d'`
- [ -z "$lmenu" ] || (
- echo; echo "$node"; echo
- echo "$lmenu"
- ) >>lmenu.$$
- done <xorder.$$
-fi
+trap "rm -f *.$$; exit 1" 1 2 15
+
+exec 3>incl.$$ 4>smenu.$$ 5>lmenu.$$
+
+build_menu () {
+ while IFS=: read file node; do
+ echo "@include $file" >&3
+ echo "* $node:: `sed -n 's/^@c %MENU% //p' $file`" >&4
+ $AWK 'BEGIN { do_menu = 0 }
+ /^@node / { sub(/^@node /, ""); sub(/,.*$/, ""); node = $0 }
+ /^@menu/ { printf "\n%s\n\n", node; do_menu = 1; next }
+ /^@end menu/ { do_menu = 0 }
+ do_menu { print }' $file >&5
+ done
+}
-(echo; echo 'Appendices'; echo) >>smenu.$$
-
-while read file node; do
- echo "@include $file" >>incl.$$
- echo "* $node:: `sed -n 's/^@c %MENU% //p' $file`" >>smenu.$$
- lmenu=`sed -n '/^@menu/,/^@end menu/p; /^@end menu/q' $file |
- sed '/^@menu/d; /^@end menu/d'`
- [ -z "$lmenu" ] || (
- echo; echo "$node"; echo
- echo "$lmenu"
- ) >>lmenu.$$
-done <aorder.$$
-
-$AWK '
-BEGIN { FS=":" }
-
-/^\*/ {
- printf("%-32s", $1 "::");
- x = split($3, word, " ");
- hpos = 34;
- for(i = 1; i <= x; i++) {
- hpos += length(word[i]) + 1;
- if(hpos > 78) {
- printf("\n%34s", "");
- hpos = 35 + length(word[i]);
- }
- printf(" %s", word[i]);
- }
- print ".";
+collect_nodes () {
+ grep '^@node.*Top' "$@" /dev/null | cut -d, -f-2 |
+ sed 's/, /:/; s/:@node /:/; s/ /_/g; s/:/ /g' |
+ $AWK '{ file[$2] = $1; nnode[$2] = $3 }
+ END { for (x in file)
+ if (file[x] != "")
+ print file[x] ":" x, file[nnode[x]] ":" nnode[x] }' |
+ tsort | sed 's/_/ /g; $d'
}
-!/^\*/ { print; }
-' smenu.$$ >smenux.$$
+collect_nodes $1 | build_menu
+
+if [ -n "$2" ]; then
+
+ { echo; echo 'Add-ons'; echo; } >&4
+
+ grep '^@node.*Top' `echo $2 /dev/null | tr ' ' '\n' | sort` |
+ cut -d, -f1 | sed 's/@node //' | build_menu
+
+fi
+
+{ echo; echo 'Appendices'; echo; } >&4
+
+collect_nodes $3 | build_menu
+
+exec 3>&- 4>&- 5>&-
mv -f incl.$$ chapters.texi
-(echo '@menu'
- cat smenux.$$
+{
+ echo '@menu'
+ $AWK -F: '
+ /^\*/ {
+ printf("%-32s", $1 "::");
+ x = split($3, word, " ");
+ hpos = 34;
+ for (i = 1; i <= x; i++) {
+ hpos += length(word[i]) + 1;
+ if (hpos > 78) {
+ printf("\n%34s", "");
+ hpos = 35 + length(word[i]);
+ }
+ printf(" %s", word[i]);
+ }
+ print ".";
+ }
+
+ !/^\*/ { print; }
+ ' smenu.$$
cat <<EOF
* Copying:: The GNU Library General Public License says
how you can copy and share the GNU C Library.
@@ -109,7 +82,7 @@ Indices
--- The Detailed Node Listing ---
EOF
cat lmenu.$$
- echo '@end menu' ) >top-menu.texi.$$
+ echo '@end menu'; } >top-menu.texi.$$
mv -f top-menu.texi.$$ top-menu.texi
rm -f *.$$
diff --git a/manual/llio.texi b/manual/llio.texi
index 459032e..cf3e1a7 100644
--- a/manual/llio.texi
+++ b/manual/llio.texi
@@ -41,6 +41,8 @@ directly.)
or vice-versa.
* Stream/Descriptor Precautions:: Precautions needed if you use both
descriptors and streams.
+* Scatter-Gather:: Fast I/O to discontinous buffers.
+* Memory-mapped I/O:: Using files like memory.
* Waiting for I/O:: How to check for input or output
on multiple file descriptors.
* Synchronizing I/O:: Making sure all I/O actions completed.
@@ -58,6 +60,7 @@ directly.)
file locking.
* Interrupt Input:: Getting an asynchronous signal when
input arrives.
+* IOCTLs:: Generic I/O Control operations.
@end menu
@@ -88,7 +91,7 @@ parameters (using the @samp{|} operator in C).
@xref{File Status Flags}, for the parameters available.
The normal return value from @code{open} is a non-negative integer file
-descriptor. In the case of an error, a value of @code{-1} is returned
+descriptor. In the case of an error, a value of @math{-1} is returned
instead. In addition to the usual file name errors (@pxref{File
Name Errors}), the following @code{errno} error conditions are defined
for this function:
@@ -240,7 +243,7 @@ until the program ends. To avoid this calls to @code{close} should be
protected using cancelation handlers.
@c ref pthread_cleanup_push / pthread_cleanup_pop
-The normal return value from @code{close} is @code{0}; a value of @code{-1}
+The normal return value from @code{close} is @math{0}; a value of @math{-1}
is returned in case of failure. The following @code{errno} error
conditions are defined for this function:
@@ -422,7 +425,7 @@ If @code{read} returns at least one character, there is no way you can
tell whether end-of-file was reached. But if you did reach the end, the
next read will return zero.
-In case of an error, @code{read} returns @code{-1}. The following
+In case of an error, @code{read} returns @math{-1}. The following
@code{errno} error conditions are defined for this function:
@table @code
@@ -564,7 +567,7 @@ is therefore faster.
You can use the @code{O_FSYNC} open mode to make @code{write} always
store the data to disk before returning; @pxref{Operating Modes}.
-In the case of an error, @code{write} returns @code{-1}. The following
+In the case of an error, @code{write} returns @math{-1}. The following
@code{errno} error conditions are defined for this function:
@table @code
@@ -761,7 +764,7 @@ file takes up less space than it appears so; it is then called a
@cindex holes in files
If the file position cannot be changed, or the operation is in some way
-invalid, @code{lseek} returns a value of @code{-1}. The following
+invalid, @code{lseek} returns a value of @math{-1}. The following
@code{errno} error conditions are defined for this function:
@table @code
@@ -944,7 +947,7 @@ see @ref{Creating a Pipe}.
This function returns the file descriptor associated with the stream
@var{stream}. If an error is detected (for example, if the @var{stream}
is not valid) or if @var{stream} does not do I/O to a file,
-@code{fileno} returns @code{-1}.
+@code{fileno} returns @math{-1}.
@end deftypefun
@cindex standard file descriptors
@@ -1122,6 +1125,341 @@ terminal settings that were in effect at the time, flush the output
streams for that terminal before setting the modes. @xref{Terminal
Modes}.
+@node Scatter-Gather
+@section Fast Scatter-Gather I/O
+@cindex scatter-gather
+
+Some applications may need to read or write data to multiple buffers,
+which are seperated in memory. Although this can be done easily enough
+with multiple calls to @code{read} and @code{write}, it is inefficent
+because there is overhead associated with each kernel call.
+
+Instead, many platforms provide special high-speed primitives to perform
+these @dfn{scatter-gather} operations in a single kernel call. The GNU C
+library will provide an emulation on any system that lacks these
+primitives, so they are not a portability threat. They are defined in
+@code{sys/uio.h}.
+
+These functions are controlled with arrays of @code{iovec} structures,
+which describe the location and size of each buffer.
+
+@deftp {Data Type} {struct iovec}
+
+The @code{iovec} structure describes a buffer. It contains two fields:
+
+@table @code
+
+@item void *iov_base
+Contains the address of a buffer.
+
+@item size_t iov_len
+Contains the length of the buffer.
+
+@end table
+@end deftp
+
+@deftypefun ssize_t readv (int @var{filedes}, const struct iovec *@var{vector}, int @var{count})
+
+The @code{readv} function reads data from @var{filedes} and scatters it
+into the buffers described in @var{vector}, which is taken to be
+@var{count} structures long. As each buffer is filled, data is sent to the
+next.
+
+Note that @code{readv} is not guaranteed to fill all the buffers.
+It may stop at any point, for the same reasons @code{read} would.
+
+The return value is a count of bytes (@emph{not} buffers) read, @math{0}
+indicating end-of-file, or @math{-1} indicating an error. The possible
+errors are the same as in @code{read}.
+
+@end deftypefun
+
+@deftypefun ssize_t writev (int @var{filedes}, const struct iovec *@var{vector}, int @var{count})
+
+The @code{writev} function gathers data from the buffers described in
+@var{vector}, which is taken to be @var{count} structures long, and writes
+them to @code{filedes}. As each buffer is written, it moves on to the
+next.
+
+Like @code{readv}, @code{writev} may stop midstream under the same
+conditions @code{write} would.
+
+The return value is a count of bytes written, or @math{-1} indicating an
+error. The possible errors are the same as in @code{write}.
+
+@end deftypefun
+
+@c Note - I haven't read this anywhere. I surmised it from my knowledge
+@c of computer science. Thus, there could be subtleties I'm missing.
+
+Note that if the buffers are small (under about 1kB), high-level streams
+may be easier to use than these functions. However, @code{readv} and
+@code{writev} are more efficient when the individual buffers themselves
+(as opposed to the total output), are large. In that case, a high-level
+stream would not be able to cache the data effectively.
+
+@node Memory-mapped I/O
+@section Memory-mapped I/O
+
+On modern operating systems, it is possible to @dfn{mmap} (pronounced
+``em-map'') a file to a region of memory. When this is done, the file can
+be accessed just like an array in the program.
+
+This is more efficent than @code{read} or @code{write}, as only regions
+of the file a program actually accesses are loaded. Accesses to
+not-yet-loaded parts of the mmapped region are handled in the same way as
+swapped out pages.
+
+Since mmapped pages can be stored back to their file when physical memory
+is low, it is possible to mmap files orders of magnitude larger than both
+the physical memory @emph{and} swap space. The only limit is address
+space. The theoretical limit is 4GB on a 32-bit machine - however, the
+actual limit will be smaller since some areas will be reserved for other
+purposes.
+
+Memory mapping only works on entire pages of memory. Thus, addresses
+for mapping must be page-aligned, and length values will be rounded up.
+To determine the size of a page the machine uses one should use
+
+@smallexample
+size_t page_size = (size_t) sysconf (_SC_PAGESIZE);
+@end smallexample
+
+These functions are declared in @file{sys/mman.h}.
+
+@deftypefun {void *} mmap (void *@var{address}, size_t @var{length},int @var{protect}, int @var{flags}, int @var{filedes}, off_t @var{offset})
+
+The @code{mmap} function creates a new mapping, connected to bytes
+(@var{offset}) to (@var{offset} + @var{length}) in the file open on
+@var{filedes}.
+
+@var{address} gives a preferred starting address for the mapping.
+@code{NULL} expresses no preference. Any previous mapping at that
+address is automatically removed. The address you give may still be
+changed, unless you use the @code{MAP_FIXED} flag.
+
+@vindex PROT_READ
+@vindex PROT_WRITE
+@vindex PROT_EXEC
+@var{protect} contains flags that control what kind of access is
+permitted. They include @code{PROT_READ}, @code{PROT_WRITE}, and
+@code{PROT_EXEC}, which permit reading, writing, and execution,
+respectively. Inappropriate access will cause a segfault (@pxref{Program
+Error Signals}).
+
+Note that most hardware designs cannot support write permission without
+read permission, and many do not distinguish read and execute permission.
+Thus, you may recieve wider permissions than you ask for, and mappings of
+write-only files may be denied even if you do not use @code{PROT_READ}.
+
+@var{flags} contains flags that control the nature of the map.
+One of @code{MAP_SHARED} or @code{MAP_PRIVATE} must be specified.
+
+They include:
+
+@vtable @code
+@item MAP_PRIVATE
+This specifies that writes to the region should never be written back
+to the attached file. Instead, a copy is made for the process, and the
+region will be swapped normally if memory runs low. No other process will
+see the changes.
+
+Since private mappings effectively revert to ordinary memory
+when written to, you must have enough virtual memory for a copy of
+the entire mmapped region if you use this mode with @code{PROT_WRITE}.
+
+@item MAP_SHARED
+This specifies that writes to the region will be written back to the
+file. Changes made will be shared immediately with other processes
+mmaping the same file.
+
+Note that actual writing may take place at any time. You need to use
+@code{msync}, described below, if it is important that other processes
+using conventional I/O get a consistent view of the file.
+
+@item MAP_FIXED
+This forces the system to use the exact mapping address specified in
+@var{address} and fail if it can't.
+
+@c One of these is official - the other is obviously an obsolete synonym
+@c Which is which?
+@item MAP_ANONYMOUS
+@itemx MAP_ANON
+This flag tells the system to create an anonymous mapping, not connected
+to a file. @var{filedes} and @var{off} are ignored, and the region is
+initialized with zeros.
+
+Anonymous maps are used as the basic primitive to extend the heap on some
+systems. They are also useful to share data between multiple tasks
+without creating a file.
+
+On some systems using private anonymous mmaps is more efficent than using
+@code{malloc} for large blocks. This is not an issue with the GNU C library,
+as the included @code{malloc} automatically uses @code{mmap} where appropriate.
+
+@c Linux has some other MAP_ options, which I have not discussed here.
+@c MAP_DENYWRITE, MAP_EXECUTABLE and MAP_GROWSDOWN don't seem applicable to
+@c user programs (and I don't understand the last two). MAP_LOCKED does
+@c not appear to be implemented.
+
+@end vtable
+
+@code{mmap} returns the address of the new mapping, or @math{-1} for an
+error.
+
+Possible errors include:
+
+@table @code
+
+@item EINVAL
+
+Either @var{address} was unusable, or inconsistent @var{flags} were
+given.
+
+@item EACCES
+
+@var{filedes} was not open for the type of access specified in @var{protect}.
+
+@item ENOMEM
+
+Either there is not enough memory for the operation, or the process is
+out of address space.
+
+@item ENODEV
+
+This file is of a type that doesn't support mapping.
+
+@item ENOEXEC
+
+The file is on a filesystem that doesn't support mapping.
+
+@c On Linux, EAGAIN will appear if the file has a conflicting mandatory lock.
+@c However mandatory locks are not discussed in this manual.
+@c
+@c Similarly, ETXTBSY will occur if the MAP_DENYWRITE flag (not documented
+@c here) is used and the file is already open for writing.
+
+@end table
+
+@end deftypefun
+
+@deftypefun int munmap (void *@var{addr}, size_t @var{length})
+
+@code{munmap} removes any memory maps from (@var{addr}) to (@var{addr} +
+@var{length}). @var{length} should be the length of the mapping.
+
+It is safe to un-map multiple mappings in one command, or include unmapped
+space in the range. It is also possible to unmap only part of an existing
+mapping, however only entire pages can be removed. If @var{length} is not
+an even number of pages, it will be rounded up.
+
+It returns @math{0} for success and @math{-1} for an error.
+
+One error is possible:
+
+@table @code
+
+@item EINVAL
+The memory range given was outside the user mmap range, or wasn't page
+aligned.
+
+@end table
+
+@end deftypefun
+
+@deftypefun int msync (void *@var{address}, size_t @var{length}, int @var{flags})
+
+When using shared mappings, the kernel can write the file at any time
+before the mapping is removed. To be certain data has actually been
+written to the file and will be accessable to non-memory-mapped I/O, it
+is neccessary to use this function.
+
+It operates on the region @var{address} to (@var{address} + @var{length}).
+It may be used on part of a mapping or multiple mappings, however the
+region given should not contain any unmapped space.
+
+@var{flags} can contain some options:
+
+@vtable @code
+
+@item MS_SYNC
+
+This flag makes sure the data is actually written @emph{to disk}.
+Normally @code{msync} only makes sure that accesses to a file with
+conventional I/O reflect the recent changes.
+
+@item MS_ASYNC
+
+This tells @code{msync} to begin the synchronization, but not to wait for
+it to complete.
+
+@c Linux also has MS_INVALIDATE, which I don't understand.
+
+@end vtable
+
+@code{msync} returns @math{0} for success and @math{-1} for
+error. Errors include:
+
+@table @code
+
+@item EINVAL
+An invalid region was given, or the @var{flags} were invalid.
+
+@item EFAULT
+There is no existing mapping in at least part of the given region.
+
+@end table
+
+@end deftypefun
+
+@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag})
+
+This function can be used to change the size of an existing memory
+area. @var{address} and @var{length} must cover a region entirely mapped
+in the same @code{mmap} statement. A new mapping with the same
+characteristics will be returned, but a with the length @var{new_length}
+instead.
+
+One option is possible, @code{MREMAP_MAYMOVE}. If it is given in
+@var{flags}, the system may remove the existing mapping and create a new
+one of the desired length in another location.
+
+The address of the resulting mapping is returned, or @math{-1}. Possible
+error codes include:
+
+This function is only available on a few systems. Except for performing
+optional optimizations one should not rely on this function.
+@table @code
+
+@item EFAULT
+There is no existing mapping in at least part of the original region, or
+the region covers two or more distinct mappings.
+
+@item EINVAL
+The address given is misaligned or inappropriate.
+
+@item EAGAIN
+The region has pages locked, and if extended it would exceed the
+process's resource limit for locked pages. @xref{Limits on Resources}.
+
+@item ENOMEM
+The region is private writable, and insufficent virtual memory is
+available to extend it. Also, this error will occur if
+@code{MREMAP_MAYMOVE} is not given and the extension would collide with
+another mapped region.
+
+@end table
+@end deftypefun
+
+Not all file descriptors may be mapped. Sockets, pipes, and most devices
+only allow sequential access and do not fit into the mapping abstraction.
+In addition, some regular files may not be mmapable, and older kernels may
+not support mapping at all. Thus, programs using @code{mmap} should
+have a fallback method to use should it fail. @xref{Mmap,,,standards,GNU
+Coding Standards}.
+
+@c XXX madvice documentation missing
+
@node Waiting for I/O
@section Waiting for Input or Output
@cindex waiting for input or output
@@ -2336,7 +2674,7 @@ the file descriptor returned should be the next available one greater
than or equal to this value.
The return value from @code{fcntl} with this command is normally the value
-of the new file descriptor. A return value of @code{-1} indicates an
+of the new file descriptor. A return value of @math{-1} indicates an
error. The following @code{errno} error conditions are defined for
this command:
@@ -2420,7 +2758,7 @@ The normal return value from @code{fcntl} with this command is a
nonnegative number which can be interpreted as the bitwise OR of the
individual flags (except that currently there is only one flag to use).
-In case of an error, @code{fcntl} returns @code{-1}. The following
+In case of an error, @code{fcntl} returns @math{-1}. The following
@code{errno} error conditions are defined for this command:
@table @code
@@ -2443,7 +2781,7 @@ fcntl (@var{filedes}, F_SETFD, @var{new-flags})
@end smallexample
The normal return value from @code{fcntl} with this command is an
-unspecified value other than @code{-1}, which indicates an error.
+unspecified value other than @math{-1}, which indicates an error.
The flags and error conditions are the same as for the @code{F_GETFD}
command.
@end deftypevr
@@ -2848,7 +3186,7 @@ individual flags. Since the file access modes are not single-bit values,
you can mask off other bits in the returned flags with @code{O_ACCMODE}
to compare them.
-In case of an error, @code{fcntl} returns @code{-1}. The following
+In case of an error, @code{fcntl} returns @math{-1}. The following
@code{errno} error conditions are defined for this command:
@table @code
@@ -2873,7 +3211,7 @@ You can't change the access mode for the file in this way; that is,
whether the file descriptor was opened for reading or writing.
The normal return value from @code{fcntl} with this command is an
-unspecified value other than @code{-1}, which indicates an error. The
+unspecified value other than @math{-1}, which indicates an error. The
error conditions are the same as for the @code{F_GETFL} command.
@end deftypevr
@@ -3012,7 +3350,7 @@ If no lock applies, the only change to the @var{lockp} structure is to
update the @code{l_type} to a value of @code{F_UNLCK}.
The normal return value from @code{fcntl} with this command is an
-unspecified value other than @code{-1}, which is reserved to indicate an
+unspecified value other than @math{-1}, which is reserved to indicate an
error. The following @code{errno} error conditions are defined for
this command:
@@ -3043,9 +3381,9 @@ on that part is replaced with the new lock. You can remove a lock
by specifying a lock type of @code{F_UNLCK}.
If the lock cannot be set, @code{fcntl} returns immediately with a value
-of @code{-1}. This function does not block waiting for other processes
+of @math{-1}. This function does not block waiting for other processes
to release locks. If @code{fcntl} succeeds, it return a value other
-than @code{-1}.
+than @math{-1}.
The following @code{errno} error conditions are defined for this
function:
@@ -3213,7 +3551,7 @@ fcntl (@var{filedes}, F_SETOWN, @var{pid})
The @var{pid} argument should be a process ID. You can also pass a
negative number whose absolute value is a process group ID.
-The return value from @code{fcntl} with this command is @code{-1}
+The return value from @code{fcntl} with this command is @math{-1}
in case of error and some other value if successful. The following
@code{errno} error conditions are defined for this command:
@@ -3227,3 +3565,64 @@ There is no process or process group corresponding to @var{pid}.
@end deftypevr
@c ??? This section could use an example program.
+
+@node IOCTLs
+@section Generic I/O Control operations
+@cindex generic i/o control operations
+@cindex IOCTLs
+
+The GNU system can handle most input/output operations on many different
+devices and objects in terms of a few file primitives - @code{read},
+@code{write} and @code{lseek}. However, most devices also have a few
+peculiar operations which do not fit into this model. Such as:
+
+@itemize @bullet
+
+@item
+Changing the character font used on a terminal.
+
+@item
+Telling a magnetic tape system to rewind or fast forward. (Since they
+cannot move in byte increments, @code{lseek} is inapplicable).
+
+@item
+Ejecting a disk from a drive.
+
+@item
+Playing an audio track from a CD-ROM drive.
+
+@item
+Maintaining routing tables for a network.
+
+@end itemize
+
+Although some such objects such as sockets and terminals
+@footnote{Actually, the terminal-specific functions are implemented with
+IOCTLs on many platforms.} have special functions of their own, it would
+not be practical to create functions for all these cases.
+
+Instead these minor operations, known as @dfn{IOCTL}s, are assigned code
+numbers and multiplexed through the @code{ioctl} function, defined in
+@code{sys/ioctl.h}. The code numbers themselves are defined in many
+different headers.
+
+@deftypefun int ioctl (int @var{filedes}, int @var{command}, @dots{})
+
+The @code{ioctl} function performs the generic I/O operation
+@var{command} on @var{filedes}.
+
+A third argument is usually present, either a single number or a pointer
+to a structure. The meaning of this argument, the returned value, and
+any error codes depends upon the command used. Often @math{-1} is
+returned for a failure.
+
+@end deftypefun
+
+On some systems, IOCTLs used by different devices share the same numbers.
+Thus, although use of an inappropriate IOCTL @emph{usually} only produces
+an error, you should not attempt to use device-specific IOCTLs on an
+unknown device.
+
+Most IOCTLs are OS-specific and/or only used in special system utilities,
+and are thus beyond the scope of this document. For an example of the use
+of an IOCTL, @xref{Out-of-Band Data}.
diff --git a/manual/math.texi b/manual/math.texi
index 10b3262..4386c2f 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -870,9 +870,9 @@ singularity.
@comment math.h
@comment XPG
-@deftypefun double lgamma_r (double @var{x})
-@deftypefunx float lgammaf_r (float @var{x})
-@deftypefunx {long double} lgammal_r (long double @var{x})
+@deftypefun double lgamma_r (double @var{x}, int *@var{signp})
+@deftypefunx float lgammaf_r (float @var{x}, int *@var{signp})
+@deftypefunx {long double} lgammal_r (long double @var{x}, int *@var{signp})
@code{lgamma_r} is just like @code{lgamma}, but it stores the sign of
the intermediate result in the variable pointed to by @var{signp}
instead of in the @var{signgam} global.
diff --git a/manual/top-menu.texi b/manual/top-menu.texi
index 2ad64ae..6ff8bd6 100644
--- a/manual/top-menu.texi
+++ b/manual/top-menu.texi
@@ -77,6 +77,26 @@ Introduction
* Roadmap to the Manual:: Overview of the remaining chapters in
this manual.
+Standards and Portability
+
+* ISO C:: The international standard for the C
+ programming language.
+* POSIX:: The ISO/IEC 9945 (aka IEEE 1003) standards
+ for operating systems.
+* Berkeley Unix:: BSD and SunOS.
+* SVID:: The System V Interface Description.
+* XPG:: The X/Open Portability Guide.
+
+Using the Library
+
+* Header Files:: How to include the header files in your
+ programs.
+* Macro Definitions:: Some functions in the library may really
+ be implemented as macros.
+* Reserved Names:: The C standard reserves some names for
+ the library, and some for users.
+* Feature Test Macros:: How to control what names are defined.
+
Error Reporting
* Checking for Errors:: How errors are reported by library functions.
@@ -99,6 +119,68 @@ Memory Allocation
* Relocating Allocator:: Waste less memory, if you can tolerate
automatic relocation of the blocks you get.
+Unconstrained Allocation
+
+* Basic Allocation:: Simple use of @code{malloc}.
+* Malloc Examples:: Examples of @code{malloc}. @code{xmalloc}.
+* Freeing after Malloc:: Use @code{free} to free a block you
+ got with @code{malloc}.
+* Changing Block Size:: Use @code{realloc} to make a block
+ bigger or smaller.
+* Allocating Cleared Space:: Use @code{calloc} to allocate a
+ block and clear it.
+* Efficiency and Malloc:: Efficiency considerations in use of
+ these functions.
+* Aligned Memory Blocks:: Allocating specially aligned memory:
+ @code{memalign} and @code{valloc}.
+* Malloc Tunable Parameters:: Use @code{mallopt} to adjust allocation
+ parameters.
+* Heap Consistency Checking:: Automatic checking for errors.
+* Hooks for Malloc:: You can use these hooks for debugging
+ programs that use @code{malloc}.
+* Statistics of Malloc:: Getting information about how much
+ memory your program is using.
+* Summary of Malloc:: Summary of @code{malloc} and related functions.
+
+Allocation Debugging
+
+* Tracing malloc:: How to install the tracing functionality.
+* Using the Memory Debugger:: Example programs excerpts.
+* Tips for the Memory Debugger:: Some more or less clever ideas.
+* Interpreting the traces:: What do all these lines mean?
+
+Obstacks
+
+* Creating Obstacks:: How to declare an obstack in your program.
+* Preparing for Obstacks:: Preparations needed before you can
+ use obstacks.
+* Allocation in an Obstack:: Allocating objects in an obstack.
+* Freeing Obstack Objects:: Freeing objects in an obstack.
+* Obstack Functions:: The obstack functions are both
+ functions and macros.
+* Growing Objects:: Making an object bigger by stages.
+* Extra Fast Growing:: Extra-high-efficiency (though more
+ complicated) growing objects.
+* Status of an Obstack:: Inquiries about the status of an obstack.
+* Obstacks Data Alignment:: Controlling alignment of objects in obstacks.
+* Obstack Chunks:: How obstacks obtain and release chunks;
+ efficiency considerations.
+* Summary of Obstacks::
+
+Variable Size Automatic
+
+* Alloca Example:: Example of using @code{alloca}.
+* Advantages of Alloca:: Reasons to use @code{alloca}.
+* Disadvantages of Alloca:: Reasons to avoid @code{alloca}.
+* GNU C Variable-Size Arrays:: Only in GNU C, here is an alternative
+ method of allocating dynamically and
+ freeing automatically.
+
+Relocating Allocator
+
+* Relocator Concepts:: How to understand relocating allocation.
+* Using Relocator:: Functions for relocating allocation.
+
Character Handling
* Classification of Characters:: Testing whether characters are
@@ -123,6 +205,11 @@ String and Array Utilities
* Encode Binary Data:: Encoding and Decoding of Binary Data.
* Argz and Envz Vectors:: Null-separated string vectors.
+Argz and Envz Vectors
+
+* Argz Functions:: Operations on argz vectors.
+* Envz Functions:: Additional operations on environment vectors.
+
Extended Characters
* Extended Char Intro:: Multibyte codes versus wide characters.
@@ -150,11 +237,41 @@ Locales
* Numeric Formatting:: How to format numbers according to the
chosen locale.
+Numeric Formatting
+
+* General Numeric:: Parameters for formatting numbers and
+ currency amounts.
+* Currency Symbol:: How to print the symbol that identifies an
+ amount of money (e.g. @samp{$}).
+* Sign of Money Amount:: How to print the (positive or negative) sign
+ for a monetary amount, if one exists.
+
Message Translation
* Message catalogs a la X/Open:: The @code{catgets} family of functions.
* The Uniforum approach:: The @code{gettext} family of functions.
+Message catalogs a la X/Open
+
+* The catgets Functions:: The @code{catgets} function family.
+* The message catalog files:: Format of the message catalog files.
+* The gencat program:: How to generate message catalogs files which
+ can be used by the functions.
+* Common Usage:: How to use the @code{catgets} interface.
+
+The Uniforum approach
+
+* Message catalogs with gettext:: The @code{gettext} family of functions.
+* Helper programs for gettext:: Programs to handle message catalogs
+ for @code{gettext}.
+
+Message catalogs with gettext
+
+* Translation with gettext:: What has to be done to translate a message.
+* Locating gettext catalog:: How to determine which catalog to be used.
+* Using gettextized software:: The possibilities of the user to influence
+ the way @code{gettext} works.
+
Searching and Sorting
* Comparison Functions:: Defining how to compare two objects.
@@ -176,11 +293,48 @@ Pattern Matching
arithmetic, and wildcards.
This is what the shell does with shell commands.
+Globbing
+
+* Calling Glob:: Basic use of @code{glob}.
+* Flags for Globbing:: Flags that enable various options in @code{glob}.
+* More Flags for Globbing:: GNU specific extensions to @code{glob}.
+
+Regular Expressions
+
+* POSIX Regexp Compilation:: Using @code{regcomp} to prepare to match.
+* Flags for POSIX Regexps:: Syntax variations for @code{regcomp}.
+* Matching POSIX Regexps:: Using @code{regexec} to match the compiled
+ pattern that you get from @code{regcomp}.
+* Regexp Subexpressions:: Finding which parts of the string were matched.
+* Subexpression Complications:: Find points of which parts were matched.
+* Regexp Cleanup:: Freeing storage; reporting errors.
+
+Word Expansion
+
+* Expansion Stages:: What word expansion does to a string.
+* Calling Wordexp:: How to call @code{wordexp}.
+* Flags for Wordexp:: Options you can enable in @code{wordexp}.
+* Wordexp Example:: A sample program that does word expansion.
+
I/O Overview
* I/O Concepts:: Some basic information and terminology.
* File Names:: How to refer to a file.
+I/O Concepts
+
+* Streams and File Descriptors:: The GNU Library provides two ways
+ to access the contents of files.
+* File Position:: The number of bytes from the
+ beginning of the file.
+
+File Names
+
+* Directories:: Directories contain entries for files.
+* File Name Resolution:: A file name specifies how to look up a file.
+* File Name Errors:: Error conditions relating to file names.
+* File Name Portability:: File name portability and syntax issues.
+
I/O on Streams
* Streams:: About the data type representing a stream.
@@ -207,6 +361,83 @@ I/O on Streams
to an open file.
* Formatted Messages:: Print strictly formatted messages.
+Unreading
+
+* Unreading Idea:: An explanation of unreading with pictures.
+* How Unread:: How to call @code{ungetc} to do unreading.
+
+Formatted Output
+
+* Formatted Output Basics:: Some examples to get you started.
+* Output Conversion Syntax:: General syntax of conversion
+ specifications.
+* Table of Output Conversions:: Summary of output conversions and
+ what they do.
+* Integer Conversions:: Details about formatting of integers.
+* Floating-Point Conversions:: Details about formatting of
+ floating-point numbers.
+* Other Output Conversions:: Details about formatting of strings,
+ characters, pointers, and the like.
+* Formatted Output Functions:: Descriptions of the actual functions.
+* Dynamic Output:: Functions that allocate memory for the output.
+* Variable Arguments Output:: @code{vprintf} and friends.
+* Parsing a Template String:: What kinds of args does a given template
+ call for?
+* Example of Parsing:: Sample program using @code{parse_printf_format}.
+
+Customizing Printf
+
+* Registering New Conversions:: Using @code{register_printf_function}
+ to register a new output conversion.
+* Conversion Specifier Options:: The handler must be able to get
+ the options specified in the
+ template when it is called.
+* Defining the Output Handler:: Defining the handler and arginfo
+ functions that are passed as arguments
+ to @code{register_printf_function}.
+* Printf Extension Example:: How to define a @code{printf}
+ handler function.
+* Predefined Printf Handlers:: Predefined @code{printf} handlers.
+
+Formatted Input
+
+* Formatted Input Basics:: Some basics to get you started.
+* Input Conversion Syntax:: Syntax of conversion specifications.
+* Table of Input Conversions:: Summary of input conversions and what they do.
+* Numeric Input Conversions:: Details of conversions for reading numbers.
+* String Input Conversions:: Details of conversions for reading strings.
+* Dynamic String Input:: String conversions that @code{malloc} the buffer.
+* Other Input Conversions:: Details of miscellaneous other conversions.
+* Formatted Input Functions:: Descriptions of the actual functions.
+* Variable Arguments Input:: @code{vscanf} and friends.
+
+Stream Buffering
+
+* Buffering Concepts:: Terminology is defined here.
+* Flushing Buffers:: How to ensure that output buffers are flushed.
+* Controlling Buffering:: How to specify what kind of buffering to use.
+
+Other Kinds of Streams
+
+* String Streams:: Streams that get data from or put data in
+ a string or memory buffer.
+* Obstack Streams:: Streams that store data in an obstack.
+* Custom Streams:: Defining your own streams with an arbitrary
+ input data source and/or output data sink.
+
+Custom Streams
+
+* Streams and Cookies:: The @dfn{cookie} records where to fetch or
+ store data that is read or written.
+* Hook Functions:: How you should define the four @dfn{hook
+ functions} that a custom stream needs.
+
+Formatted Messages
+
+* Printing Formatted Messages:: The @code{fmtmsg} function.
+* Adding Severity Classes:: Add more severity classes.
+* Example:: How to use @code{fmtmsg} and @code{addseverity}.
+
Low-Level I/O
* Opening and Closing Files:: How to open and close file
@@ -219,6 +450,8 @@ Low-Level I/O
or vice-versa.
* Stream/Descriptor Precautions:: Precautions needed if you use both
descriptors and streams.
+* Scatter-Gather:: Fast I/O to discontinous buffers.
+* Memory-mapped I/O:: Using files like memory.
* Waiting for I/O:: How to check for input or output
on multiple file descriptors.
* Synchronizing I/O:: Making sure all I/O actions completed.
@@ -236,6 +469,29 @@ Low-Level I/O
file locking.
* Interrupt Input:: Getting an asynchronous signal when
input arrives.
+* IOCTLs:: Generic I/O Control operations.
+
+Stream/Descriptor Precautions
+
+* Linked Channels:: Dealing with channels sharing a file position.
+* Independent Channels:: Dealing with separately opened, unlinked channels.
+* Cleaning Streams:: Cleaning a stream makes it safe to use
+ another channel.
+
+Asynchronous I/O
+
+* Asynchronous Reads/Writes:: Asynchronous Read and Write Operations.
+* Status of AIO Operations:: Getting the Status of AIO Operations.
+* Synchronizing AIO Operations:: Getting into a consistent state.
+* Cancel AIO Operations:: Cancelation of AIO Operations.
+* Configuration of AIO:: How to optimize the AIO implementation.
+
+File Status Flags
+
+* Access Modes:: Whether the descriptor can read or write.
+* Open-time Flags:: Details of @code{open}.
+* Operating Modes:: Special modes to control I/O operations.
+* Getting File Status Flags:: Fetching and changing these flags.
File System Interface
@@ -254,6 +510,36 @@ File System Interface
* Making Special Files:: How to create special files.
* Temporary Files:: Naming and creating temporary files.
+Accessing Directories
+
+* Directory Entries:: Format of one directory entry.
+* Opening a Directory:: How to open a directory stream.
+* Reading/Closing Directory:: How to read directory entries from the stream.
+* Simple Directory Lister:: A very simple directory listing program.
+* Random Access Directory:: Rereading part of the directory
+ already read with the same stream.
+* Scanning Directory Content:: Get entries for user selected subset of
+ contents in given directory.
+* Simple Directory Lister Mark II:: Revised version of the program.
+
+File Attributes
+
+* Attribute Meanings:: The names of the file attributes,
+ and what their values mean.
+* Reading Attributes:: How to read the attributes of a file.
+* Testing File Type:: Distinguishing ordinary files,
+ directories, links...
+* File Owner:: How ownership for new files is determined,
+ and how to change it.
+* Permission Bits:: How information about a file's access
+ mode is stored.
+* Access Permission:: How the system decides who can access a file.
+* Setting Permissions:: How permissions for new files are assigned,
+ and how to change them.
+* Testing File Access:: How to find out if your process can
+ access a file.
+* File Times:: About the time attributes of a file.
+
Pipes and FIFOs
* Creating a Pipe:: Making a pipe with the @code{pipe} function.
@@ -280,6 +566,82 @@ Sockets
* Socket Options:: Miscellaneous low-level socket options.
* Networks Database:: Accessing the database of network names.
+Socket Addresses
+
+* Address Formats:: About @code{struct sockaddr}.
+* Setting Address:: Binding an address to a socket.
+* Reading Address:: Reading the address of a socket.
+
+Local Namespace
+
+* Concepts: Local Namespace Concepts. What you need to understand.
+* Details: Local Namespace Details. Address format, symbolic names, etc.
+* Example: Local Socket Example. Example of creating a socket.
+
+Internet Namespace
+
+* Internet Address Formats:: How socket addresses are specified in the
+ Internet namespace.
+* Host Addresses:: All about host addresses of internet host.
+* Protocols Database:: Referring to protocols by name.
+* Ports:: Internet port numbers.
+* Services Database:: Ports may have symbolic names.
+* Byte Order:: Different hosts may use different byte
+ ordering conventions; you need to
+ canonicalize host address and port number.
+* Inet Example:: Putting it all together.
+
+Host Addresses
+
+* Abstract Host Addresses:: What a host number consists of.
+* Data type: Host Address Data Type. Data type for a host number.
+* Functions: Host Address Functions. Functions to operate on them.
+* Names: Host Names. Translating host names to host numbers.
+
+Open/Close Sockets
+
+* Creating a Socket:: How to open a socket.
+* Closing a Socket:: How to close a socket.
+* Socket Pairs:: These are created like pipes.
+
+Connections
+
+* Connecting:: What the client program must do.
+* Listening:: How a server program waits for requests.
+* Accepting Connections:: What the server does when it gets a request.
+* Who is Connected:: Getting the address of the
+ other side of a connection.
+* Transferring Data:: How to send and receive data.
+* Byte Stream Example:: An example program: a client for communicating
+ over a byte stream socket in the Internet namespace.
+* Server Example:: A corresponding server program.
+* Out-of-Band Data:: This is an advanced feature.
+
+Transferring Data
+
+* Sending Data:: Sending data with @code{send}.
+* Receiving Data:: Reading data with @code{recv}.
+* Socket Data Options:: Using @code{send} and @code{recv}.
+
+Datagrams
+
+* Sending Datagrams:: Sending packets on a datagram socket.
+* Receiving Datagrams:: Receiving packets on a datagram socket.
+* Datagram Example:: An example program: packets sent over a
+ datagram socket in the local namespace.
+* Example Receiver:: Another program, that receives those packets.
+
+Inetd
+
+* Inetd Servers::
+* Configuring Inetd::
+
+Socket Options
+
+* Socket Option Functions:: The basic functions for setting and getting
+ socket options.
+* Socket-Level Options:: Details of the options at the socket level.
+
Low-Level Terminal Interface
* Is It a Terminal:: How to determine if a file is a terminal
@@ -294,6 +656,40 @@ Low-Level Terminal Interface
* Noncanon Example:: How to read single characters without echo.
* Pseudo-Terminals:: How to open a pseudo-terminal.
+Terminal Modes
+
+* Mode Data Types:: The data type @code{struct termios} and
+ related types.
+* Mode Functions:: Functions to read and set the terminal
+ attributes.
+* Setting Modes:: The right way to set terminal attributes
+ reliably.
+* Input Modes:: Flags controlling low-level input handling.
+* Output Modes:: Flags controlling low-level output handling.
+* Control Modes:: Flags controlling serial port behavior.
+* Local Modes:: Flags controlling high-level input handling.
+* Line Speed:: How to read and set the terminal line speed.
+* Special Characters:: Characters that have special effects,
+ and how to change them.
+* Noncanonical Input:: Controlling how long to wait for input.
+
+Special Characters
+
+* Editing Characters:: Special characters that terminate lines and
+ delete text, and other editing functions.
+* Signal Characters:: Special characters that send or raise signals
+ to or for certain classes of processes.
+* Start/Stop Characters:: Special characters that suspend or resume
+ suspended output.
+* Other Special:: Other special characters for BSD systems:
+ they can discard output, and print status.
+
+Pseudo-Terminals
+
+* Allocation:: Allocating a pseudo terminal.
+* Pseudo-Terminal Pairs:: How to open both sides of a
+ pseudo-terminal in a single operation.
+
Mathematics
* Mathematical Constants:: Precise numeric values for often-used
@@ -307,6 +703,12 @@ Mathematics
numbers.
* FP Function Optimizations:: Fast code or small code.
+Pseudo-Random Numbers
+
+* ISO Random:: @code{rand} and friends.
+* BSD Random:: @code{random} and friends.
+* SVID Random:: @code{drand48} and friends.
+
Arithmetic
* Floating Point Numbers:: Basic concepts. IEEE 754.
@@ -321,6 +723,29 @@ Arithmetic
* Parsing of Numbers:: Converting strings to numbers.
* System V Number Conversion:: An archaic way to convert numbers to strings.
+Floating Point Errors
+
+* FP Exceptions:: IEEE 754 math exceptions and how to detect them.
+* Infinity and NaN:: Special values returned by calculations.
+* Status bit operations:: Checking for exceptions after the fact.
+* Math Error Reporting:: How the math functions report errors.
+
+Arithmetic Functions
+
+* Absolute Value:: Absolute values of integers and floats.
+* Normalization Functions:: Extracting exponents and putting them back.
+* Rounding Functions:: Rounding floats to integers.
+* Remainder Functions:: Remainders on division, precisely defined.
+* FP Bit Twiddling:: Sign bit adjustment. Adding epsilon.
+* FP Comparison Functions:: Comparisons without risk of exceptions.
+* Misc FP Arithmetic:: Max, min, positive difference, multiply-add.
+
+Parsing of Numbers
+
+* Parsing of Integers:: Functions for conversion of integer values.
+* Parsing of Floats:: Functions for conversion of floating-point
+ values.
+
Date and Time
* Processor Time:: Measures processor time used by a program.
@@ -331,6 +756,22 @@ Date and Time
* Limits on Resources:: Specifying limits on resource usage.
* Priority:: Reading or setting process run priority.
+Processor Time
+
+* Basic CPU Time:: The @code{clock} function.
+* Detailed CPU Time:: The @code{times} function.
+
+Calendar Time
+
+* Simple Calendar Time:: Facilities for manipulating calendar time.
+* High-Resolution Calendar:: A time representation with greater precision.
+* Broken-down Time:: Facilities for manipulating local time.
+* Formatting Date and Time:: Converting times to strings.
+* TZ Variable:: How users specify the time zone.
+* Time Zone Functions:: Functions to examine or specify the time zone.
+* Time Functions Example:: An example program showing use of some of
+ the time functions.
+
Non-Local Exits
* Intro: Non-Local Intro. When and how to use these facilities.
@@ -355,6 +796,91 @@ Signal Handling
* BSD Signal Handling:: Additional functions for backward
compatibility with BSD.
+Concepts of Signals
+
+* Kinds of Signals:: Some examples of what can cause a signal.
+* Signal Generation:: Concepts of why and how signals occur.
+* Delivery of Signal:: Concepts of what a signal does to the
+ process.
+
+Standard Signals
+
+* Program Error Signals:: Used to report serious program errors.
+* Termination Signals:: Used to interrupt and/or terminate the
+ program.
+* Alarm Signals:: Used to indicate expiration of timers.
+* Asynchronous I/O Signals:: Used to indicate input is available.
+* Job Control Signals:: Signals used to support job control.
+* Operation Error Signals:: Used to report operational system errors.
+* Miscellaneous Signals:: Miscellaneous Signals.
+* Signal Messages:: Printing a message describing a signal.
+
+Signal Actions
+
+* Basic Signal Handling:: The simple @code{signal} function.
+* Advanced Signal Handling:: The more powerful @code{sigaction} function.
+* Signal and Sigaction:: How those two functions interact.
+* Sigaction Function Example:: An example of using the sigaction function.
+* Flags for Sigaction:: Specifying options for signal handling.
+* Initial Signal Actions:: How programs inherit signal actions.
+
+Defining Handlers
+
+* Handler Returns:: Handlers that return normally, and what
+ this means.
+* Termination in Handler:: How handler functions terminate a program.
+* Longjmp in Handler:: Nonlocal transfer of control out of a
+ signal handler.
+* Signals in Handler:: What happens when signals arrive while
+ the handler is already occupied.
+* Merged Signals:: When a second signal arrives before the
+ first is handled.
+* Nonreentrancy:: Do not call any functions unless you know they
+ are reentrant with respect to signals.
+* Atomic Data Access:: A single handler can run in the middle of
+ reading or writing a single object.
+
+Atomic Data Access
+
+* Non-atomic Example:: A program illustrating interrupted access.
+* Types: Atomic Types. Data types that guarantee no interruption.
+* Usage: Atomic Usage. Proving that interruption is harmless.
+
+Generating Signals
+
+* Signaling Yourself:: A process can send a signal to itself.
+* Signaling Another Process:: Send a signal to another process.
+* Permission for kill:: Permission for using @code{kill}.
+* Kill Example:: Using @code{kill} for Communication.
+
+Blocking Signals
+
+* Why Block:: The purpose of blocking signals.
+* Signal Sets:: How to specify which signals to
+ block.
+* Process Signal Mask:: Blocking delivery of signals to your
+ process during normal execution.
+* Testing for Delivery:: Blocking to Test for Delivery of
+ a Signal.
+* Blocking for Handler:: Blocking additional signals while a
+ handler is being run.
+* Checking for Pending Signals:: Checking for Pending Signals
+* Remembering a Signal:: How you can get almost the same
+ effect as blocking a signal, by
+ handling it and setting a flag
+ to be tested later.
+
+Waiting for a Signal
+
+* Using Pause:: The simple way, using @code{pause}.
+* Pause Problems:: Why the simple way is often not very good.
+* Sigsuspend:: Reliably waiting for a specific signal.
+
+BSD Signal Handling
+
+* BSD Handler:: BSD Function to Establish a Handler.
+* Blocking in BSD:: BSD Functions for Blocking Signals.
+
Process Startup
* Program Arguments:: Parsing your program's command-line arguments.
@@ -363,6 +889,37 @@ Process Startup
* Program Termination:: How to cause a process to terminate and
return status information to its parent.
+Program Arguments
+
+* Argument Syntax:: By convention, options start with a hyphen.
+* Parsing Program Arguments:: Ways to parse program options and arguments.
+
+Parsing Program Arguments
+
+* Getopt:: Parsing program options using @code{getopt}.
+* Argp:: Parsing program options using @code{argp_parse}.
+* Suboptions:: Some programs need more detailed options.
+* Suboptions Example:: This shows how it could be done for @code{mount}.
+
+Environment Variables
+
+* Environment Access:: How to get and set the values of
+ environment variables.
+* Standard Environment:: These environment variables have
+ standard interpretations.
+
+Program Termination
+
+* Normal Termination:: If a program calls @code{exit}, a
+ process terminates normally.
+* Exit Status:: The @code{exit status} provides information
+ about why the process terminated.
+* Cleanups on Exit:: A process can run its own cleanup
+ functions upon normal termination.
+* Aborting a Program:: The @code{abort} function causes
+ abnormal program termination.
+* Termination Internals:: What happens when a process terminates.
+
Processes
* Running a Command:: The easy way to run another program.
@@ -386,6 +943,24 @@ Job Control
* Implementing a Shell:: What a shell must do to implement job control.
* Functions for Job Control:: Functions to control process groups.
+Implementing a Shell
+
+* Data Structures:: Introduction to the sample shell.
+* Initializing the Shell:: What the shell must do to take
+ responsibility for job control.
+* Launching Jobs:: Creating jobs to execute commands.
+* Foreground and Background:: Putting a job in foreground of background.
+* Stopped and Terminated Jobs:: Reporting job status.
+* Continuing Stopped Jobs:: How to continue a stopped job in
+ the foreground or background.
+* Missing Pieces:: Other parts of the shell.
+
+Functions for Job Control
+
+* Identifying the Terminal:: Determining the controlling terminal's name.
+* Process Group Functions:: Functions for manipulating process groups.
+* Terminal Access Functions:: Functions for controlling terminal access.
+
Name Service Switch
* NSS Basics:: What is this NSS good for.
@@ -393,6 +968,26 @@ Name Service Switch
* NSS Module Internals:: How does it work internally.
* Extending NSS:: What to do to add services or databases.
+NSS Configuration File
+
+* Services in the NSS configuration:: Service names in the NSS configuration.
+* Actions in the NSS configuration:: React appropriately to the lookup result.
+* Notes on NSS Configuration File:: Things to take care about while
+ configuring NSS.
+
+NSS Module Internals
+
+* NSS Module Names:: Construction of the interface function of
+ the NSS modules.
+* NSS Modules Interface:: Programming interface in the NSS module
+ functions.
+
+Extending NSS
+
+* Adding another Service to NSS:: What is to do to add a new service.
+* NSS Module Function Internals:: Guidelines for writing new NSS
+ service functions.
+
Users and Groups
* User and Group IDs:: Each user has a unique numeric ID;
@@ -424,6 +1019,34 @@ Users and Groups
inquiry functions.
* Netgroup Database:: Functions for accessing the netgroup database.
+User Accounting Database
+
+* Manipulating the Database:: Scanning and modifying the user
+ accounting database.
+* XPG Functions:: A standardized way for doing the same thing.
+* Logging In and Out:: Functions from BSD that modify the user
+ accounting database.
+
+User Database
+
+* User Data Structure:: What each user record contains.
+* Lookup User:: How to look for a particular user.
+* Scanning All Users:: Scanning the list of all users, one by one.
+* Writing a User Entry:: How a program can rewrite a user's record.
+
+Group Database
+
+* Group Data Structure:: What each group record contains.
+* Lookup Group:: How to look for a particular group.
+* Scanning All Groups:: Scanning the list of all groups.
+
+Netgroup Database
+
+* Netgroup Data:: Data in the Netgroup database and where
+ it comes from.
+* Lookup Netgroup:: How to look for a particular netgroup.
+* Netgroup Membership:: How to test for netgroup membership.
+
System Information
* Host Identification:: Determining the name of the machine.
@@ -455,6 +1078,13 @@ System Configuration
* String Parameters:: Getting the default search path.
+Sysconf
+
+* Sysconf Definition:: Detailed specifications of @code{sysconf}.
+* Constants for Sysconf:: The list of parameters @code{sysconf} can read.
+* Examples of Sysconf:: How to use @code{sysconf} and the parameter
+ macros properly together.
+
POSIX Threads
* Basic Thread Operations:: Creating, terminating, and waiting for threads.
@@ -481,6 +1111,41 @@ Language Features
* Important Data Types:: Data types for object sizes.
* Data Type Measurements:: Parameters of data type representations.
+Variadic Functions
+
+* Why Variadic:: Reasons for making functions take
+ variable arguments.
+* How Variadic:: How to define and call variadic functions.
+* Variadic Example:: A complete example.
+
+How Variadic
+
+* Variadic Prototypes:: How to make a prototype for a function
+ with variable arguments.
+* Receiving Arguments:: Steps you must follow to access the
+ optional argument values.
+* How Many Arguments:: How to decide whether there are more arguments.
+* Calling Variadics:: Things you need to know about calling
+ variable arguments functions.
+* Argument Macros:: Detailed specification of the macros
+ for accessing variable arguments.
+* Old Varargs:: The pre-ISO way of defining variadic functions.
+
+Data Type Measurements
+
+* Width of Type:: How many bits does an integer type hold?
+* Range of Type:: What are the largest and smallest values
+ that an integer type can hold?
+* Floating Type Macros:: Parameters that measure the floating point types.
+* Structure Measurement:: Getting measurements on structure types.
+
+Floating Type Macros
+
+* Floating Point Concepts:: Definitions of terminology.
+* Floating Point Parameters:: Details of specific macros.
+* IEEE Floating Point:: The measurements for one common
+ representation.
+
Installation
* Tools for Installation:: We recommend using these tools to build.
@@ -496,4 +1161,10 @@ Maintenance
to the GNU C library.
* Porting:: How to port the GNU C library to
a new machine or operating system.
+
+Porting
+
+* Hierarchy Conventions:: The layout of the @file{sysdeps} hierarchy.
+* Porting to Unix:: Porting the library to an average
+ Unix-like system.
@end menu
diff --git a/shlib-versions b/shlib-versions
index 2745152..eccb027 100644
--- a/shlib-versions
+++ b/shlib-versions
@@ -82,3 +82,6 @@ alpha.*-.*-linux.* libBrokenLocale=1.1
# The real-time library from POSIX.1b.
.*-.*-.* librt=1
+
+# Preloading modules.
+.*-.*-.* libSegFault=1
diff --git a/sysdeps/generic/abort.c b/sysdeps/generic/abort.c
index e8157dd..817260b 100644
--- a/sysdeps/generic/abort.c
+++ b/sysdeps/generic/abort.c
@@ -32,7 +32,7 @@
#endif
#ifdef USE_IN_LIBIO
-# include <libo/iolibio.h>
+# include <libio/iolibio.h>
# define fflush(s) _IO_fflush (s)
#endif
diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c
index ba8a12b..44049ce 100644
--- a/sysdeps/mach/hurd/dl-sysdep.c
+++ b/sysdeps/mach/hurd/dl-sysdep.c
@@ -54,7 +54,7 @@ int __libc_multiple_libcs; /* Defining this here avoids the inclusion
/* This variable containts the lowest stack address ever used. */
void *__libc_stack_end;
unsigned long int _dl_hwcap_mask = HWCAP_IMPORTANT;
-
+
struct hurd_startup_data *_dl_hurd_data;
@@ -518,6 +518,7 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
memobj_rd = MACH_PORT_NULL;
else
{
+ assert (!(flags & MAP_SHARED));
err = __io_map ((mach_port_t) fd, &memobj_rd, &memobj_wr);
if (err)
return (__ptr_t) __hurd_fail (err);
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/bits/signum.h b/sysdeps/unix/sysv/sysv4/solaris2/bits/signum.h
index 4e55764..33a040b 100644
--- a/sysdeps/unix/sysv/sysv4/solaris2/bits/signum.h
+++ b/sysdeps/unix/sysv/sysv4/solaris2/bits/signum.h
@@ -1,5 +1,5 @@
/* Signal number definitions. Solaris 2 version.
- Copyright (C) 1994, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1996, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -23,6 +23,9 @@
#define SIG_ERR ((__sighandler_t) -1) /* Error return. */
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */
#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */
+#ifdef __USE_UNIX98
+# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */
+#endif
/* Signals. */
diff --git a/timezone/Makefile b/timezone/Makefile
index 410d383..23d50b1 100644
--- a/timezone/Makefile
+++ b/timezone/Makefile
@@ -167,9 +167,11 @@ CFLAGS-ialloc.c = -Wno-strict-prototypes -DNOID
CFLAGS-scheck.c = -Wno-strict-prototypes -DNOID
# We have to make sure the data for testing the tz functions is available.
+# Don't add leapseconds here since test-tz made checks that work only without
+# leapseconds.
testdata = $(objpfx)testdata
define build-testdata
-$(built-program-cmd) -d $(testdata) -L $(leapseconds) -y ./yearistype $<
+$(built-program-cmd) -d $(testdata) -y ./yearistype $<
endef
$(objpfx)test-tz.out: $(addprefix $(testdata)/, America/New_York Etc/UTC UTC)