gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, select, updated. gawk-4.1.0-1058-g903e54


From: Andrew J. Schorr
Subject: [gawk-diffs] [SCM] gawk branch, select, updated. gawk-4.1.0-1058-g903e540
Date: Sun, 04 Jan 2015 23:26:38 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, select has been updated
       via  903e540568e70f71e0a2911cb5998ac2d82ebbb4 (commit)
      from  e36300be4deb7bbdeff17c8e896ac2f727e1477e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=903e540568e70f71e0a2911cb5998ac2d82ebbb4

commit 903e540568e70f71e0a2911cb5998ac2d82ebbb4
Author: Andrew J. Schorr <address@hidden>
Date:   Sun Jan 4 18:24:25 2015 -0500

    Document new user-visible features in gawk.1 and gawktexi.in.

diff --git a/ChangeLog b/ChangeLog
index baa7c00..c93bd63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-04         Andrew J. Schorr     <address@hidden>
+
+       * gawkapi.h: Fix typo in comment.
+
 2015-01-02         Andrew J. Schorr     <address@hidden>
 
        * gawkapi.h (gawk_api): Modify api_get_file to remove the typelen
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 1927866..31bcecc 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-04         Andrew J. Schorr     <address@hidden>
+
+       * gawk.1: Document new features PROCINFO["errno"] and
+       PROCINFO["input", "RETRY"], and new getline return value of -2.
+       * gawktexi.in: Ditto.
+
 2014-12-26         Antonio Giovanni Colombo   <address@hidden>
 
        * gawktexi.in (Glossary): Really sort the items.
diff --git a/doc/gawk.1 b/doc/gawk.1
index 3d5d181..b425c24 100644
--- a/doc/gawk.1
+++ b/doc/gawk.1
@@ -942,6 +942,15 @@ then
 will contain
 a string describing the error.
 The value is subject to translation in non-English locales.
+If the string in
+.B ERRNO
+corresponds to a system error in the
+.IR errno (3)
+variable, then the numeric value can be found in
+.B PROCINFO["errno"].
+For non-system errors,
+.B PROCINFO["errno"]
+will be zero.
 .TP
 .B FIELDWIDTHS
 A whitespace separated list of field widths.  When set,
@@ -1103,6 +1112,13 @@ system call.
 The default time format string for
 .BR strftime() .
 .TP
+\fBPROCINFO["errno"]\fP
+The value of
+.IR errno (3)
+when
+.BR ERRNO
+is set to the associated error message.
+.TP
 \fBPROCINFO["euid"]\fP
 The value of the
 .IR geteuid (2)
@@ -1221,6 +1237,28 @@ where
 is a redirection string or a filename. A value of zero or
 less than zero means no timeout.
 .TP
+\fBPROCINFO["input", "RETRY"]\fP
+If an I/O error that may be retried occurs when reading data from
+.IR input ,
+and this array entry exists, then
+.BR getline
+will return -2 instead of following the default behavior of returning -1
+and configuring
+.IR input
+to return no further data.
+An I/O error that may be retried is one where
+.IR errno (3)
+has the value
+.IR EAGAIN ,
+.IR EWOULDBLOCK ,
+.IR EINTR ,
+or
+.IR ETIMEDOUT .
+This may be useful in conjunction with
+\fBPROCINFO["input", "READ_TIMEOUT"]\fP
+or situations where a file descriptor has been configured to behave in a
+non-blocking fashion.
+.TP
 \fBPROCINFO["mpfr_version"]\fP
 The version of the GNU MPFR library used for arbitrary precision
 number support in
@@ -2289,6 +2327,13 @@ below.)
 The
 .B getline
 command returns 1 on success, 0 on end of file, and \-1 on an error.
+If the
+.IR errno (3)
+value indicates that the I/O operation may be retried,
+and \fBPROCINFO["input", "RETRY"]\fP
+is set, then \-2 will be returned instead of \-1, and further calls to
+.B getline
+may be attempted.
 Upon an error,
 .B ERRNO
 is set to a string describing the problem.
diff --git a/doc/gawk.info b/doc/gawk.info
index e501b29..02b59b9 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -217,6 +217,7 @@ entitled "GNU Free Documentation License".
                                         `getline'.
 * Getline Summary::                     Summary of `getline' Variants.
 * Read Timeout::                        Reading input with a timeout.
+* Retrying I/O::                        Retrying I/O after certain errors.
 * Command-line directories::            What happens if you put a directory on
                                         the command line.
 * Input Summary::                       Input summary.
@@ -4168,6 +4169,7 @@ have to be named on the `awk' command line (*note 
Getline::).
 * Getline::                     Reading files under explicit program control
                                 using the `getline' function.
 * Read Timeout::                Reading input with a timeout.
+* Retrying I/O::                Retrying I/O after certain errors.
 * Command-line directories::    What happens if you put a directory on the
                                 command line.
 * Input Summary::               Input summary.
@@ -5439,7 +5441,11 @@ how `awk' works.
 encounters the end of the file.  If there is some error in getting a
 record, such as a file that cannot be opened, then `getline' returns
 -1.  In this case, `gawk' sets the variable `ERRNO' to a string
-describing the error that occurred.
+describing the error that occurred.  If the `errno' variable indicates
+that the I/O operation may be retried, and `PROCINFO["input", "RETRY"]'
+is set, then -2 will be returned instead of -1, and further calls to
+`getline' may be attemped.  *Note Retrying I/O::, for further
+information about this feature.
 
    In the following examples, COMMAND stands for a string value that
 represents a shell command.
@@ -5876,7 +5882,7 @@ VAR
 Table 4.1: `getline' variants and what they set
 
 
-File: gawk.info,  Node: Read Timeout,  Next: Command-line directories,  Prev: 
Getline,  Up: Reading Files
+File: gawk.info,  Node: Read Timeout,  Next: Retrying I/O,  Prev: Getline,  
Up: Reading Files
 
 4.10 Reading Input with a Timeout
 =================================
@@ -5955,7 +5961,8 @@ a per command or connection basis.
    `gawk' considers a timeout event to be an error even though the
 attempt to read from the underlying device may succeed in a later
 attempt. This is a limitation, and it also means that you cannot use
-this to multiplex input from two or more sources.
+this to multiplex input from two or more sources.  *Note Retrying
+I/O::, for a way to enable later I/O attempts to succeed.
 
    Assigning a timeout value prevents read operations from blocking
 indefinitely. But bear in mind that there are other ways `gawk' can
@@ -5970,9 +5977,36 @@ writing.
    (1) This assumes that standard input is the keyboard.
 
 
-File: gawk.info,  Node: Command-line directories,  Next: Input Summary,  Prev: 
Read Timeout,  Up: Reading Files
+File: gawk.info,  Node: Retrying I/O,  Next: Command-line directories,  Prev: 
Read Timeout,  Up: Reading Files
 
-4.11 Directories on the Command Line
+4.11 Retrying I/O on Certain Input Errors
+=========================================
+
+This minor node describes a feature that is specific to `gawk'.
+
+   When `gawk' encounters an error while reading input, it will by
+default return -1 from getline, and subsequent attempts to read from
+that file will result in an end-of-file indication.  However, you may
+optionally instruct `gawk' to allow I/O to be retried when certain
+errors are encountered by setting setting a special element in the
+`PROCINFO' array (*note Auto-set::):
+
+     PROCINFO["input_name", "RETRY"]
+
+   When set, this causes `gawk' to check the value of the system
+`errno' variable when an I/O error occurs.  If `errno' indicates a
+subsequent I/O attempt may succeed, `getline' will instead return -2 and
+further calls to `getline' may succeed.  This applies to `errno' values
+EAGAIN, EWOULDBLOCK, EINTR, or ETIMEDOUT.
+
+   This feature is useful in conjunction with `PROCINFO["input_name",
+"READ_TIMEOUT"]' or situations where a file descriptor has been
+configured to behave in a non-blocking fashion.
+
+
+File: gawk.info,  Node: Command-line directories,  Next: Input Summary,  Prev: 
Retrying I/O,  Up: Reading Files
+
+4.12 Directories on the Command Line
 ====================================
 
 According to the POSIX standard, files named on the `awk' command line
@@ -5995,7 +6029,7 @@ usable data from an `awk' program.
 
 File: gawk.info,  Node: Input Summary,  Next: Input Exercises,  Prev: 
Command-line directories,  Up: Reading Files
 
-4.12 Summary
+4.13 Summary
 ============
 
    * Input is split into records based on the value of `RS'.  The
@@ -6068,7 +6102,7 @@ File: gawk.info,  Node: Input Summary,  Next: Input 
Exercises,  Prev: Command-li
 
 File: gawk.info,  Node: Input Exercises,  Prev: Input Summary,  Up: Reading 
Files
 
-4.13 Exercises
+4.14 Exercises
 ==============
 
   1. Using the `FIELDWIDTHS' variable (*note Constant Size::), write a
@@ -10363,6 +10397,11 @@ Options::), they are not special:
      `getline' returning -1.  You are, of course, free to clear it
      yourself before doing an I/O operation.
 
+     If the value of `ERRNO' corresponds to a system error in the C
+     `errno' variable, then `PROCINFO["errno"]' will be set to the value
+     of `errno'.  For non-system errors, `PROCINFO["errno"]' will be
+     zero.
+
 `FILENAME'
      The name of the current input file.  When no data files are listed
      on the command line, `awk' reads from the standard input and
@@ -10411,6 +10450,10 @@ Options::), they are not special:
     `PROCINFO["egid"]'
           The value of the `getegid()' system call.
 
+    `PROCINFO["errno"]'
+          The value of the C `errno' variable when `ERRNO' is set to
+          the associated error message.
+
     `PROCINFO["euid"]'
           The value of the `geteuid()' system call.
 
@@ -10521,6 +10564,10 @@ Options::), they are not special:
           open input file, pipe, or coprocess.  *Note Read Timeout::,
           for more information.
 
+        * It may be used to indicate that I/O may be retried when it
+          fails due to certain errors.  *Note Retrying I/O::, for more
+          information.
+
         * It may be used to cause coprocesses to communicate over
           pseudo-ttys instead of through two-way pipes; this is
           discussed further in *note Two-way I/O::.
@@ -32246,9 +32293,9 @@ Index
                                                               (line 143)
 * dark corner, exit statement:           Exit Statement.      (line  30)
 * dark corner, field separators:         Full Line Fields.    (line  22)
-* dark corner, FILENAME variable <1>:    Auto-set.            (line 104)
+* dark corner, FILENAME variable <1>:    Auto-set.            (line 109)
 * dark corner, FILENAME variable:        Getline Notes.       (line  19)
-* dark corner, FNR/NR variables:         Auto-set.            (line 328)
+* dark corner, FNR/NR variables:         Auto-set.            (line 341)
 * dark corner, format-control characters: Control Letters.    (line  18)
 * dark corner, FS as null string:        Single Character Fields.
                                                               (line  20)
@@ -32442,7 +32489,7 @@ Index
 * differences in awk and gawk, FIELDWIDTHS variable: User-modified.
                                                               (line  37)
 * differences in awk and gawk, FPAT variable: User-modified.  (line  43)
-* differences in awk and gawk, FUNCTAB variable: Auto-set.    (line 130)
+* differences in awk and gawk, FUNCTAB variable: Auto-set.    (line 135)
 * differences in awk and gawk, function arguments (gawk): Calling Built-in.
                                                               (line  16)
 * differences in awk and gawk, getline command: Getline.      (line  19)
@@ -32465,7 +32512,7 @@ Index
                                                               (line 263)
 * differences in awk and gawk, print/printf statements: Format Modifiers.
                                                               (line  13)
-* differences in awk and gawk, PROCINFO array: Auto-set.      (line 144)
+* differences in awk and gawk, PROCINFO array: Auto-set.      (line 149)
 * differences in awk and gawk, read timeouts: Read Timeout.   (line   6)
 * differences in awk and gawk, record separators: awk split records.
                                                               (line 125)
@@ -32473,9 +32520,10 @@ Index
                                                               (line  43)
 * differences in awk and gawk, regular expressions: Case-sensitivity.
                                                               (line  26)
+* differences in awk and gawk, retrying I/O: Retrying I/O.    (line   6)
 * differences in awk and gawk, RS/RT variables: gawk split records.
                                                               (line  58)
-* differences in awk and gawk, RT variable: Auto-set.         (line 279)
+* differences in awk and gawk, RT variable: Auto-set.         (line 292)
 * differences in awk and gawk, single-character fields: Single Character 
Fields.
                                                               (line   6)
 * differences in awk and gawk, split() function: String Functions.
@@ -32483,7 +32531,7 @@ Index
 * differences in awk and gawk, strings:  Scalar Constants.    (line  20)
 * differences in awk and gawk, strings, storing: gawk split records.
                                                               (line  77)
-* differences in awk and gawk, SYMTAB variable: Auto-set.     (line 283)
+* differences in awk and gawk, SYMTAB variable: Auto-set.     (line 296)
 * differences in awk and gawk, TEXTDOMAIN variable: User-modified.
                                                               (line 151)
 * differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
@@ -32524,8 +32572,8 @@ Index
 * dynamically loaded extensions:         Dynamic Extensions.  (line   6)
 * e debugger command (alias for enable): Breakpoint Control.  (line  73)
 * EBCDIC:                                Ordinal Functions.   (line  45)
-* effective group ID of gawk user:       Auto-set.            (line 149)
-* effective user ID of gawk user:        Auto-set.            (line 153)
+* effective group ID of gawk user:       Auto-set.            (line 154)
+* effective user ID of gawk user:        Auto-set.            (line 162)
 * egrep utility <1>:                     Egrep Program.       (line   6)
 * egrep utility:                         Bracket Expressions. (line  26)
 * egrep.awk program:                     Egrep Program.       (line  54)
@@ -32640,7 +32688,7 @@ Index
                                                               (line   6)
 * extension API version:                 Extension Versioning.
                                                               (line   6)
-* extension API, version number:         Auto-set.            (line 246)
+* extension API, version number:         Auto-set.            (line 255)
 * extension example:                     Extension Example.   (line   6)
 * extension registration:                Registration Functions.
                                                               (line   6)
@@ -32721,7 +32769,7 @@ Index
 * file names, distinguishing:            Auto-set.            (line  56)
 * file names, in compatibility mode:     Special Caveats.     (line   9)
 * file names, standard streams in gawk:  Special FD.          (line  48)
-* FILENAME variable <1>:                 Auto-set.            (line 104)
+* FILENAME variable <1>:                 Auto-set.            (line 109)
 * FILENAME variable:                     Reading Files.       (line   6)
 * FILENAME variable, getline, setting with: Getline Notes.    (line  19)
 * filenames, assignments as:             Ignoring Assigns.    (line   6)
@@ -32789,9 +32837,9 @@ Index
 * flush buffered output:                 I/O Functions.       (line  28)
 * fnmatch() extension function:          Extension Sample Fnmatch.
                                                               (line  12)
-* FNR variable <1>:                      Auto-set.            (line 114)
+* FNR variable <1>:                      Auto-set.            (line 119)
 * FNR variable:                          Records.             (line   6)
-* FNR variable, changing:                Auto-set.            (line 328)
+* FNR variable, changing:                Auto-set.            (line 341)
 * for statement:                         For Statement.       (line   6)
 * for statement, looping over arrays:    Scanning an Array.   (line  20)
 * fork() extension function:             Extension Sample Fork.
@@ -32841,7 +32889,7 @@ Index
 * FSF (Free Software Foundation):        Manual History.      (line   6)
 * fts() extension function:              Extension Sample File Functions.
                                                               (line  61)
-* FUNCTAB array:                         Auto-set.            (line 130)
+* FUNCTAB array:                         Auto-set.            (line 135)
 * function calls:                        Function Calls.      (line   6)
 * function calls, indirect:              Indirect Calls.      (line   6)
 * function calls, indirect, @-notation for: Indirect Calls.   (line  47)
@@ -32891,7 +32939,7 @@ Index
 * G-d:                                   Acknowledgments.     (line  94)
 * Garfinkle, Scott:                      Contributors.        (line  34)
 * gawk program, dynamic profiling:       Profiling.           (line 178)
-* gawk version:                          Auto-set.            (line 221)
+* gawk version:                          Auto-set.            (line 230)
 * gawk, ARGIND variable in:              Other Arguments.     (line  15)
 * gawk, awk and <1>:                     This Manual.         (line  14)
 * gawk, awk and:                         Preface.             (line  21)
@@ -32926,7 +32974,7 @@ Index
 * gawk, FPAT variable in <1>:            User-modified.       (line  43)
 * gawk, FPAT variable in:                Splitting By Content.
                                                               (line  25)
-* gawk, FUNCTAB array in:                Auto-set.            (line 130)
+* gawk, FUNCTAB array in:                Auto-set.            (line 135)
 * gawk, function arguments and:          Calling Built-in.    (line  16)
 * gawk, hexadecimal numbers and:         Nondecimal-numbers.  (line  42)
 * gawk, IGNORECASE variable in <1>:      Array Sorting Functions.
@@ -32958,7 +33006,7 @@ Index
 * gawk, predefined variables and:        Built-in Variables.  (line  14)
 * gawk, PROCINFO array in <1>:           Two-way I/O.         (line  99)
 * gawk, PROCINFO array in <2>:           Time Functions.      (line  47)
-* gawk, PROCINFO array in:               Auto-set.            (line 144)
+* gawk, PROCINFO array in:               Auto-set.            (line 149)
 * gawk, regexp constants and:            Using Constant Regexps.
                                                               (line  28)
 * gawk, regular expressions, case sensitivity: Case-sensitivity.
@@ -32966,14 +33014,14 @@ Index
 * gawk, regular expressions, operators:  GNU Regexp Operators.
                                                               (line   6)
 * gawk, regular expressions, precedence: Regexp Operators.    (line 161)
-* gawk, RT variable in <1>:              Auto-set.            (line 279)
+* gawk, RT variable in <1>:              Auto-set.            (line 292)
 * gawk, RT variable in <2>:              Multiple Line.       (line 129)
 * gawk, RT variable in:                  awk split records.   (line 125)
 * gawk, See Also awk:                    Preface.             (line  34)
 * gawk, source code, obtaining:          Getting.             (line   6)
 * gawk, splitting fields and:            Constant Size.       (line  87)
 * gawk, string-translation functions:    I18N Functions.      (line   6)
-* gawk, SYMTAB array in:                 Auto-set.            (line 283)
+* gawk, SYMTAB array in:                 Auto-set.            (line 296)
 * gawk, TEXTDOMAIN variable in:          User-modified.       (line 151)
 * gawk, timestamps:                      Time Functions.      (line   6)
 * gawk, uses for:                        Preface.             (line  34)
@@ -33065,7 +33113,7 @@ Index
 * Grigera, Juan:                         Contributors.        (line  57)
 * group database, reading:               Group Functions.     (line   6)
 * group file:                            Group Functions.     (line   6)
-* group ID of gawk user:                 Auto-set.            (line 194)
+* group ID of gawk user:                 Auto-set.            (line 203)
 * groups, information about:             Group Functions.     (line   6)
 * gsub <1>:                              String Functions.    (line 140)
 * gsub:                                  Using Constant Regexps.
@@ -33360,7 +33408,7 @@ Index
 * mawk utility <3>:                      Concatenation.       (line  36)
 * mawk utility <4>:                      Getline/Pipe.        (line  62)
 * mawk utility:                          Escape Sequences.    (line 120)
-* maximum precision supported by MPFR library: Auto-set.      (line 235)
+* maximum precision supported by MPFR library: Auto-set.      (line 244)
 * McIlroy, Doug:                         Glossary.            (line 177)
 * McPhee, Patrick:                       Contributors.        (line 100)
 * message object files:                  Explaining gettext.  (line  42)
@@ -33373,7 +33421,7 @@ Index
 * messages from extensions:              Printing Messages.   (line   6)
 * metacharacters in regular expressions: Regexp Operators.    (line   6)
 * metacharacters, escape sequences for:  Escape Sequences.    (line 139)
-* minimum precision supported by MPFR library: Auto-set.      (line 238)
+* minimum precision supported by MPFR library: Auto-set.      (line 247)
 * mktime:                                Time Functions.      (line  25)
 * modifiers, in format specifiers:       Format Modifiers.    (line   6)
 * monetary information, localization:    Explaining gettext.  (line 104)
@@ -33422,7 +33470,7 @@ Index
                                                               (line  47)
 * nexti debugger command:                Debugger Execution Control.
                                                               (line  49)
-* NF variable <1>:                       Auto-set.            (line 119)
+* NF variable <1>:                       Auto-set.            (line 124)
 * NF variable:                           Fields.              (line  33)
 * NF variable, decrementing:             Changing Fields.     (line 107)
 * ni debugger command (alias for nexti): Debugger Execution Control.
@@ -33431,9 +33479,9 @@ Index
 * non-existent array elements:           Reference to Elements.
                                                               (line  23)
 * not Boolean-logic operator:            Boolean Ops.         (line   6)
-* NR variable <1>:                       Auto-set.            (line 139)
+* NR variable <1>:                       Auto-set.            (line 144)
 * NR variable:                           Records.             (line   6)
-* NR variable, changing:                 Auto-set.            (line 328)
+* NR variable, changing:                 Auto-set.            (line 341)
 * null strings <1>:                      Basic Data Typing.   (line  26)
 * null strings <2>:                      Truth Values.        (line   6)
 * null strings <3>:                      Regexp Field Splitting.
@@ -33547,7 +33595,7 @@ Index
 * p debugger command (alias for print):  Viewing And Changing Data.
                                                               (line  36)
 * Papadopoulos, Panos:                   Contributors.        (line 128)
-* parent process ID of gawk process:     Auto-set.            (line 203)
+* parent process ID of gawk process:     Auto-set.            (line 212)
 * parentheses (), in a profile:          Profiling.           (line 146)
 * parentheses (), regexp operator:       Regexp Operators.    (line  81)
 * password file:                         Passwd Functions.    (line  16)
@@ -33713,24 +33761,24 @@ Index
 * printing, unduplicated lines of text:  Uniq Program.        (line   6)
 * printing, user information:            Id Program.          (line   6)
 * private variables:                     Library Names.       (line  11)
-* process group idIDof gawk process:     Auto-set.            (line 197)
-* process ID of gawk process:            Auto-set.            (line 200)
+* process group idIDof gawk process:     Auto-set.            (line 206)
+* process ID of gawk process:            Auto-set.            (line 209)
 * processes, two-way communications with: Two-way I/O.        (line   6)
 * processing data:                       Basic High Level.    (line   6)
 * PROCINFO array <1>:                    Passwd Functions.    (line   6)
 * PROCINFO array <2>:                    Time Functions.      (line  47)
-* PROCINFO array:                        Auto-set.            (line 144)
+* PROCINFO array:                        Auto-set.            (line 149)
 * PROCINFO array, and communications via ptys: Two-way I/O.   (line  99)
 * PROCINFO array, and group membership:  Group Functions.     (line   6)
 * PROCINFO array, and user and group ID numbers: Id Program.  (line  15)
 * PROCINFO array, testing the field splitting: Passwd Functions.
                                                               (line 154)
-* PROCINFO array, uses:                  Auto-set.            (line 256)
+* PROCINFO array, uses:                  Auto-set.            (line 265)
 * PROCINFO, values of sorted_in:         Controlling Scanning.
                                                               (line  26)
 * profiling awk programs:                Profiling.           (line   6)
 * profiling awk programs, dynamically:   Profiling.           (line 178)
-* program identifiers:                   Auto-set.            (line 162)
+* program identifiers:                   Auto-set.            (line 171)
 * program, definition of:                Getting Started.     (line  21)
 * programming conventions, --non-decimal-data option: Nondecimal Data.
                                                               (line  35)
@@ -33865,6 +33913,7 @@ Index
 * relational operators, See comparison operators: Typing and Comparison.
                                                               (line   9)
 * replace in string:                     String Functions.    (line 408)
+* retrying I/O:                          Retrying I/O.        (line   6)
 * return debugger command:               Debugger Execution Control.
                                                               (line  54)
 * return statement, user-defined functions: Return Statement. (line   6)
@@ -33888,7 +33937,7 @@ Index
 * right shift:                           Bitwise Functions.   (line  53)
 * right shift, bitwise:                  Bitwise Functions.   (line  32)
 * Ritchie, Dennis:                       Basic Data Typing.   (line  54)
-* RLENGTH variable:                      Auto-set.            (line 266)
+* RLENGTH variable:                      Auto-set.            (line 279)
 * RLENGTH variable, match() function and: String Functions.   (line 228)
 * Robbins, Arnold <1>:                   Future Extensions.   (line   6)
 * Robbins, Arnold <2>:                   Bugs.                (line  70)
@@ -33914,9 +33963,9 @@ Index
 * RS variable:                           awk split records.   (line  12)
 * RS variable, multiline records and:    Multiple Line.       (line  17)
 * rshift:                                Bitwise Functions.   (line  53)
-* RSTART variable:                       Auto-set.            (line 272)
+* RSTART variable:                       Auto-set.            (line 285)
 * RSTART variable, match() function and: String Functions.    (line 228)
-* RT variable <1>:                       Auto-set.            (line 279)
+* RT variable <1>:                       Auto-set.            (line 292)
 * RT variable <2>:                       Multiple Line.       (line 129)
 * RT variable:                           awk split records.   (line 125)
 * Rubin, Paul <1>:                       Contributors.        (line  15)
@@ -33936,7 +33985,7 @@ Index
 * scanning arrays:                       Scanning an Array.   (line   6)
 * scanning multidimensional arrays:      Multiscanning.       (line  11)
 * Schorr, Andrew <1>:                    Contributors.        (line 133)
-* Schorr, Andrew <2>:                    Auto-set.            (line 311)
+* Schorr, Andrew <2>:                    Auto-set.            (line 324)
 * Schorr, Andrew:                        Acknowledgments.     (line  60)
 * Schreiber, Bert:                       Acknowledgments.     (line  38)
 * Schreiber, Rita:                       Acknowledgments.     (line  38)
@@ -34019,7 +34068,7 @@ Index
                                                               (line 106)
 * sidebar, Changing FS Does Not Affect the Fields: Full Line Fields.
                                                               (line  14)
-* sidebar, Changing NR and FNR:          Auto-set.            (line 326)
+* sidebar, Changing NR and FNR:          Auto-set.            (line 339)
 * sidebar, Controlling Output Buffering with system(): I/O Functions.
                                                               (line 138)
 * sidebar, Escape Sequences for Metacharacters: Escape Sequences.
@@ -34181,9 +34230,9 @@ Index
 * substr:                                String Functions.    (line 481)
 * substring:                             String Functions.    (line 481)
 * Sumner, Andrew:                        Other Versions.      (line  68)
-* supplementary groups of gawk process:  Auto-set.            (line 251)
+* supplementary groups of gawk process:  Auto-set.            (line 260)
 * switch statement:                      Switch Statement.    (line   6)
-* SYMTAB array:                          Auto-set.            (line 283)
+* SYMTAB array:                          Auto-set.            (line 296)
 * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops.
                                                               (line 148)
 * system:                                I/O Functions.       (line 106)
@@ -34360,10 +34409,10 @@ Index
 * variables, uninitialized, as array subscripts: Uninitialized Subscripts.
                                                               (line   6)
 * variables, user-defined:               Variables.           (line   6)
-* version of gawk:                       Auto-set.            (line 221)
-* version of gawk extension API:         Auto-set.            (line 246)
-* version of GNU MP library:             Auto-set.            (line 232)
-* version of GNU MPFR library:           Auto-set.            (line 228)
+* version of gawk:                       Auto-set.            (line 230)
+* version of gawk extension API:         Auto-set.            (line 255)
+* version of GNU MP library:             Auto-set.            (line 241)
+* version of GNU MPFR library:           Auto-set.            (line 237)
 * vertical bar (|):                      Regexp Operators.    (line  70)
 * vertical bar (|), | operator (I/O) <1>: Precedence.         (line  65)
 * vertical bar (|), | operator (I/O):    Getline/Pipe.        (line   9)
@@ -34453,560 +34502,561 @@ Index
 
 Tag Table:
 Node: Top1204
-Node: Foreword342225
-Node: Foreword446667
-Node: Preface48189
-Ref: Preface-Footnote-151060
-Ref: Preface-Footnote-251167
-Ref: Preface-Footnote-351400
-Node: History51542
-Node: Names53888
-Ref: Names-Footnote-154982
-Node: This Manual55128
-Ref: This Manual-Footnote-161615
-Node: Conventions61715
-Node: Manual History64053
-Ref: Manual History-Footnote-167035
-Ref: Manual History-Footnote-267076
-Node: How To Contribute67150
-Node: Acknowledgments68279
-Node: Getting Started73084
-Node: Running gawk75517
-Node: One-shot76707
-Node: Read Terminal77955
-Node: Long79982
-Node: Executable Scripts81498
-Ref: Executable Scripts-Footnote-184287
-Node: Comments84390
-Node: Quoting86872
-Node: DOS Quoting92396
-Node: Sample Data Files93071
-Node: Very Simple95666
-Node: Two Rules100564
-Node: More Complex102450
-Node: Statements/Lines105312
-Ref: Statements/Lines-Footnote-1109767
-Node: Other Features110032
-Node: When110963
-Ref: When-Footnote-1112717
-Node: Intro Summary112782
-Node: Invoking Gawk113665
-Node: Command Line115179
-Node: Options115977
-Ref: Options-Footnote-1131781
-Ref: Options-Footnote-2132010
-Node: Other Arguments132035
-Node: Naming Standard Input134983
-Node: Environment Variables136076
-Node: AWKPATH Variable136634
-Ref: AWKPATH Variable-Footnote-1140047
-Ref: AWKPATH Variable-Footnote-2140092
-Node: AWKLIBPATH Variable140352
-Node: Other Environment Variables141608
-Node: Exit Status145096
-Node: Include Files145772
-Node: Loading Shared Libraries149369
-Node: Obsolete150796
-Node: Undocumented151493
-Node: Invoking Summary151760
-Node: Regexp153424
-Node: Regexp Usage154878
-Node: Escape Sequences156915
-Node: Regexp Operators163156
-Ref: Regexp Operators-Footnote-1170582
-Ref: Regexp Operators-Footnote-2170729
-Node: Bracket Expressions170827
-Ref: table-char-classes172842
-Node: Leftmost Longest175766
-Node: Computed Regexps177068
-Node: GNU Regexp Operators180465
-Node: Case-sensitivity184138
-Ref: Case-sensitivity-Footnote-1187023
-Ref: Case-sensitivity-Footnote-2187258
-Node: Regexp Summary187366
-Node: Reading Files188833
-Node: Records190927
-Node: awk split records191660
-Node: gawk split records196575
-Ref: gawk split records-Footnote-1201119
-Node: Fields201156
-Ref: Fields-Footnote-1203932
-Node: Nonconstant Fields204018
-Ref: Nonconstant Fields-Footnote-1206261
-Node: Changing Fields206465
-Node: Field Separators212394
-Node: Default Field Splitting215099
-Node: Regexp Field Splitting216216
-Node: Single Character Fields219566
-Node: Command Line Field Separator220625
-Node: Full Line Fields223837
-Ref: Full Line Fields-Footnote-1225354
-Ref: Full Line Fields-Footnote-2225400
-Node: Field Splitting Summary225501
-Node: Constant Size227575
-Node: Splitting By Content232164
-Ref: Splitting By Content-Footnote-1236158
-Node: Multiple Line236321
-Ref: Multiple Line-Footnote-1242207
-Node: Getline242386
-Node: Plain Getline244598
-Node: Getline/Variable247238
-Node: Getline/File248386
-Node: Getline/Variable/File249770
-Ref: Getline/Variable/File-Footnote-1251373
-Node: Getline/Pipe251460
-Node: Getline/Variable/Pipe254143
-Node: Getline/Coprocess255274
-Node: Getline/Variable/Coprocess256526
-Node: Getline Notes257265
-Node: Getline Summary260057
-Ref: table-getline-variants260469
-Node: Read Timeout261298
-Ref: Read Timeout-Footnote-1265123
-Node: Command-line directories265181
-Node: Input Summary266086
-Node: Input Exercises269387
-Node: Printing270115
-Node: Print271892
-Node: Print Examples273349
-Node: Output Separators276128
-Node: OFMT278146
-Node: Printf279500
-Node: Basic Printf280285
-Node: Control Letters281855
-Node: Format Modifiers285838
-Node: Printf Examples291847
-Node: Redirection294333
-Node: Special FD301174
-Ref: Special FD-Footnote-1304334
-Node: Special Files304408
-Node: Other Inherited Files305025
-Node: Special Network306025
-Node: Special Caveats306887
-Node: Close Files And Pipes307838
-Ref: Close Files And Pipes-Footnote-1315020
-Ref: Close Files And Pipes-Footnote-2315168
-Node: Output Summary315318
-Node: Output Exercises316316
-Node: Expressions316996
-Node: Values318181
-Node: Constants318859
-Node: Scalar Constants319550
-Ref: Scalar Constants-Footnote-1320409
-Node: Nondecimal-numbers320659
-Node: Regexp Constants323677
-Node: Using Constant Regexps324202
-Node: Variables327345
-Node: Using Variables328000
-Node: Assignment Options329911
-Node: Conversion331786
-Node: Strings And Numbers332310
-Ref: Strings And Numbers-Footnote-1335375
-Node: Locale influences conversions335484
-Ref: table-locale-affects338231
-Node: All Operators338819
-Node: Arithmetic Ops339449
-Node: Concatenation341954
-Ref: Concatenation-Footnote-1344773
-Node: Assignment Ops344879
-Ref: table-assign-ops349858
-Node: Increment Ops351130
-Node: Truth Values and Conditions354568
-Node: Truth Values355653
-Node: Typing and Comparison356702
-Node: Variable Typing357512
-Node: Comparison Operators361165
-Ref: table-relational-ops361575
-Node: POSIX String Comparison365070
-Ref: POSIX String Comparison-Footnote-1366142
-Node: Boolean Ops366280
-Ref: Boolean Ops-Footnote-1370759
-Node: Conditional Exp370850
-Node: Function Calls372577
-Node: Precedence376457
-Node: Locales380118
-Node: Expressions Summary381750
-Node: Patterns and Actions384310
-Node: Pattern Overview385430
-Node: Regexp Patterns387109
-Node: Expression Patterns387652
-Node: Ranges391362
-Node: BEGIN/END394468
-Node: Using BEGIN/END395229
-Ref: Using BEGIN/END-Footnote-1397963
-Node: I/O And BEGIN/END398069
-Node: BEGINFILE/ENDFILE400383
-Node: Empty403284
-Node: Using Shell Variables403601
-Node: Action Overview405874
-Node: Statements408200
-Node: If Statement410048
-Node: While Statement411543
-Node: Do Statement413572
-Node: For Statement414716
-Node: Switch Statement417873
-Node: Break Statement420255
-Node: Continue Statement422296
-Node: Next Statement424123
-Node: Nextfile Statement426504
-Node: Exit Statement429134
-Node: Built-in Variables431537
-Node: User-modified432670
-Ref: User-modified-Footnote-1440351
-Node: Auto-set440413
-Ref: Auto-set-Footnote-1454105
-Ref: Auto-set-Footnote-2454310
-Node: ARGC and ARGV454366
-Node: Pattern Action Summary458584
-Node: Arrays461011
-Node: Array Basics462340
-Node: Array Intro463184
-Ref: figure-array-elements465148
-Ref: Array Intro-Footnote-1467674
-Node: Reference to Elements467802
-Node: Assigning Elements470254
-Node: Array Example470745
-Node: Scanning an Array472503
-Node: Controlling Scanning475519
-Ref: Controlling Scanning-Footnote-1480715
-Node: Numeric Array Subscripts481031
-Node: Uninitialized Subscripts483216
-Node: Delete484833
-Ref: Delete-Footnote-1487576
-Node: Multidimensional487633
-Node: Multiscanning490730
-Node: Arrays of Arrays492319
-Node: Arrays Summary497078
-Node: Functions499170
-Node: Built-in500069
-Node: Calling Built-in501147
-Node: Numeric Functions503138
-Ref: Numeric Functions-Footnote-1507957
-Ref: Numeric Functions-Footnote-2508314
-Ref: Numeric Functions-Footnote-3508362
-Node: String Functions508634
-Ref: String Functions-Footnote-1532109
-Ref: String Functions-Footnote-2532238
-Ref: String Functions-Footnote-3532486
-Node: Gory Details532573
-Ref: table-sub-escapes534354
-Ref: table-sub-proposed535874
-Ref: table-posix-sub537238
-Ref: table-gensub-escapes538774
-Ref: Gory Details-Footnote-1539606
-Node: I/O Functions539757
-Ref: I/O Functions-Footnote-1546975
-Node: Time Functions547122
-Ref: Time Functions-Footnote-1557610
-Ref: Time Functions-Footnote-2557678
-Ref: Time Functions-Footnote-3557836
-Ref: Time Functions-Footnote-4557947
-Ref: Time Functions-Footnote-5558059
-Ref: Time Functions-Footnote-6558286
-Node: Bitwise Functions558552
-Ref: table-bitwise-ops559114
-Ref: Bitwise Functions-Footnote-1563423
-Node: Type Functions563592
-Node: I18N Functions564743
-Node: User-defined566388
-Node: Definition Syntax567193
-Ref: Definition Syntax-Footnote-1572600
-Node: Function Example572671
-Ref: Function Example-Footnote-1575590
-Node: Function Caveats575612
-Node: Calling A Function576130
-Node: Variable Scope577088
-Node: Pass By Value/Reference580076
-Node: Return Statement583571
-Node: Dynamic Typing586552
-Node: Indirect Calls587481
-Ref: Indirect Calls-Footnote-1598783
-Node: Functions Summary598911
-Node: Library Functions601613
-Ref: Library Functions-Footnote-1605222
-Ref: Library Functions-Footnote-2605365
-Node: Library Names605536
-Ref: Library Names-Footnote-1608990
-Ref: Library Names-Footnote-2609213
-Node: General Functions609299
-Node: Strtonum Function610402
-Node: Assert Function613424
-Node: Round Function616748
-Node: Cliff Random Function618289
-Node: Ordinal Functions619305
-Ref: Ordinal Functions-Footnote-1622368
-Ref: Ordinal Functions-Footnote-2622620
-Node: Join Function622831
-Ref: Join Function-Footnote-1624600
-Node: Getlocaltime Function624800
-Node: Readfile Function628544
-Node: Shell Quoting630514
-Node: Data File Management631915
-Node: Filetrans Function632547
-Node: Rewind Function636603
-Node: File Checking637990
-Ref: File Checking-Footnote-1639322
-Node: Empty Files639523
-Node: Ignoring Assigns641502
-Node: Getopt Function643053
-Ref: Getopt Function-Footnote-1654515
-Node: Passwd Functions654715
-Ref: Passwd Functions-Footnote-1663552
-Node: Group Functions663640
-Ref: Group Functions-Footnote-1671534
-Node: Walking Arrays671747
-Node: Library Functions Summary673350
-Node: Library Exercises674751
-Node: Sample Programs676031
-Node: Running Examples676801
-Node: Clones677529
-Node: Cut Program678753
-Node: Egrep Program688472
-Ref: Egrep Program-Footnote-1695970
-Node: Id Program696080
-Node: Split Program699725
-Ref: Split Program-Footnote-1703173
-Node: Tee Program703301
-Node: Uniq Program706090
-Node: Wc Program713509
-Ref: Wc Program-Footnote-1717759
-Node: Miscellaneous Programs717853
-Node: Dupword Program719066
-Node: Alarm Program721097
-Node: Translate Program725901
-Ref: Translate Program-Footnote-1730466
-Node: Labels Program730736
-Ref: Labels Program-Footnote-1734087
-Node: Word Sorting734171
-Node: History Sorting738242
-Node: Extract Program740078
-Node: Simple Sed747603
-Node: Igawk Program750671
-Ref: Igawk Program-Footnote-1764995
-Ref: Igawk Program-Footnote-2765196
-Ref: Igawk Program-Footnote-3765318
-Node: Anagram Program765433
-Node: Signature Program768490
-Node: Programs Summary769737
-Node: Programs Exercises770930
-Ref: Programs Exercises-Footnote-1775061
-Node: Advanced Features775152
-Node: Nondecimal Data777100
-Node: Array Sorting778690
-Node: Controlling Array Traversal779387
-Ref: Controlling Array Traversal-Footnote-1787720
-Node: Array Sorting Functions787838
-Ref: Array Sorting Functions-Footnote-1791727
-Node: Two-way I/O791923
-Ref: Two-way I/O-Footnote-1796868
-Ref: Two-way I/O-Footnote-2797054
-Node: TCP/IP Networking797136
-Node: Profiling800009
-Node: Advanced Features Summary808286
-Node: Internationalization810219
-Node: I18N and L10N811699
-Node: Explaining gettext812385
-Ref: Explaining gettext-Footnote-1817410
-Ref: Explaining gettext-Footnote-2817594
-Node: Programmer i18n817759
-Ref: Programmer i18n-Footnote-1822625
-Node: Translator i18n822674
-Node: String Extraction823468
-Ref: String Extraction-Footnote-1824599
-Node: Printf Ordering824685
-Ref: Printf Ordering-Footnote-1827471
-Node: I18N Portability827535
-Ref: I18N Portability-Footnote-1829990
-Node: I18N Example830053
-Ref: I18N Example-Footnote-1832856
-Node: Gawk I18N832928
-Node: I18N Summary833566
-Node: Debugger834905
-Node: Debugging835927
-Node: Debugging Concepts836368
-Node: Debugging Terms838221
-Node: Awk Debugging840793
-Node: Sample Debugging Session841687
-Node: Debugger Invocation842207
-Node: Finding The Bug843591
-Node: List of Debugger Commands850066
-Node: Breakpoint Control851399
-Node: Debugger Execution Control855095
-Node: Viewing And Changing Data858459
-Node: Execution Stack861837
-Node: Debugger Info863474
-Node: Miscellaneous Debugger Commands867491
-Node: Readline Support872520
-Node: Limitations873412
-Node: Debugging Summary875526
-Node: Arbitrary Precision Arithmetic876694
-Node: Computer Arithmetic878110
-Ref: table-numeric-ranges881708
-Ref: Computer Arithmetic-Footnote-1882567
-Node: Math Definitions882624
-Ref: table-ieee-formats885912
-Ref: Math Definitions-Footnote-1886516
-Node: MPFR features886621
-Node: FP Math Caution888292
-Ref: FP Math Caution-Footnote-1889342
-Node: Inexactness of computations889711
-Node: Inexact representation890670
-Node: Comparing FP Values892027
-Node: Errors accumulate893109
-Node: Getting Accuracy894542
-Node: Try To Round897204
-Node: Setting precision898103
-Ref: table-predefined-precision-strings898787
-Node: Setting the rounding mode900576
-Ref: table-gawk-rounding-modes900940
-Ref: Setting the rounding mode-Footnote-1904395
-Node: Arbitrary Precision Integers904574
-Ref: Arbitrary Precision Integers-Footnote-1909473
-Node: POSIX Floating Point Problems909622
-Ref: POSIX Floating Point Problems-Footnote-1913495
-Node: Floating point summary913533
-Node: Dynamic Extensions915727
-Node: Extension Intro917279
-Node: Plugin License918545
-Node: Extension Mechanism Outline919342
-Ref: figure-load-extension919770
-Ref: figure-register-new-function921250
-Ref: figure-call-new-function922254
-Node: Extension API Description924240
-Node: Extension API Functions Introduction925690
-Node: General Data Types930514
-Ref: General Data Types-Footnote-1936253
-Node: Memory Allocation Functions936552
-Ref: Memory Allocation Functions-Footnote-1939391
-Node: Constructor Functions939487
-Node: Registration Functions941221
-Node: Extension Functions941906
-Node: Exit Callback Functions944203
-Node: Extension Version String945451
-Node: Input Parsers946116
-Node: Output Wrappers955995
-Node: Two-way processors960510
-Node: Printing Messages962714
-Ref: Printing Messages-Footnote-1963790
-Node: Updating `ERRNO'963942
-Node: Requesting Values964682
-Ref: table-value-types-returned965410
-Node: Accessing Parameters966367
-Node: Symbol Table Access967598
-Node: Symbol table by name968112
-Node: Symbol table by cookie970093
-Ref: Symbol table by cookie-Footnote-1974237
-Node: Cached values974300
-Ref: Cached values-Footnote-1977799
-Node: Array Manipulation977890
-Ref: Array Manipulation-Footnote-1978988
-Node: Array Data Types979025
-Ref: Array Data Types-Footnote-1981680
-Node: Array Functions981772
-Node: Flattening Arrays985626
-Node: Creating Arrays992518
-Node: Extension API Variables997289
-Node: Extension Versioning997925
-Node: Extension API Informational Variables999826
-Node: Extension API Boilerplate1000891
-Node: Finding Extensions1004700
-Node: Extension Example1005260
-Node: Internal File Description1006032
-Node: Internal File Ops1010099
-Ref: Internal File Ops-Footnote-11021769
-Node: Using Internal File Ops1021909
-Ref: Using Internal File Ops-Footnote-11024292
-Node: Extension Samples1024565
-Node: Extension Sample File Functions1026091
-Node: Extension Sample Fnmatch1033729
-Node: Extension Sample Fork1035220
-Node: Extension Sample Inplace1036435
-Node: Extension Sample Ord1038110
-Node: Extension Sample Readdir1038946
-Ref: table-readdir-file-types1039822
-Node: Extension Sample Revout1040633
-Node: Extension Sample Rev2way1041223
-Node: Extension Sample Read write array1041963
-Node: Extension Sample Readfile1043903
-Node: Extension Sample Time1044998
-Node: Extension Sample API Tests1046347
-Node: gawkextlib1046838
-Node: Extension summary1049496
-Node: Extension Exercises1053185
-Node: Language History1053907
-Node: V7/SVR3.11055563
-Node: SVR41057744
-Node: POSIX1059189
-Node: BTL1060578
-Node: POSIX/GNU1061312
-Node: Feature History1066936
-Node: Common Extensions1080034
-Node: Ranges and Locales1081358
-Ref: Ranges and Locales-Footnote-11085976
-Ref: Ranges and Locales-Footnote-21086003
-Ref: Ranges and Locales-Footnote-31086237
-Node: Contributors1086458
-Node: History summary1091999
-Node: Installation1093369
-Node: Gawk Distribution1094315
-Node: Getting1094799
-Node: Extracting1095622
-Node: Distribution contents1097257
-Node: Unix Installation1103322
-Node: Quick Installation1104005
-Node: Shell Startup Files1106416
-Node: Additional Configuration Options1107495
-Node: Configuration Philosophy1109234
-Node: Non-Unix Installation1111603
-Node: PC Installation1112061
-Node: PC Binary Installation1113380
-Node: PC Compiling1115228
-Ref: PC Compiling-Footnote-11118249
-Node: PC Testing1118358
-Node: PC Using1119534
-Node: Cygwin1123649
-Node: MSYS1124472
-Node: VMS Installation1124972
-Node: VMS Compilation1125764
-Ref: VMS Compilation-Footnote-11126986
-Node: VMS Dynamic Extensions1127044
-Node: VMS Installation Details1128728
-Node: VMS Running1130980
-Node: VMS GNV1133816
-Node: VMS Old Gawk1134550
-Node: Bugs1135020
-Node: Other Versions1138903
-Node: Installation summary1145331
-Node: Notes1146387
-Node: Compatibility Mode1147252
-Node: Additions1148034
-Node: Accessing The Source1148959
-Node: Adding Code1150395
-Node: New Ports1156560
-Node: Derived Files1161042
-Ref: Derived Files-Footnote-11166517
-Ref: Derived Files-Footnote-21166551
-Ref: Derived Files-Footnote-31167147
-Node: Future Extensions1167261
-Node: Implementation Limitations1167867
-Node: Extension Design1169115
-Node: Old Extension Problems1170269
-Ref: Old Extension Problems-Footnote-11171786
-Node: Extension New Mechanism Goals1171843
-Ref: Extension New Mechanism Goals-Footnote-11175203
-Node: Extension Other Design Decisions1175392
-Node: Extension Future Growth1177500
-Node: Old Extension Mechanism1178336
-Node: Notes summary1180098
-Node: Basic Concepts1181284
-Node: Basic High Level1181965
-Ref: figure-general-flow1182237
-Ref: figure-process-flow1182836
-Ref: Basic High Level-Footnote-11186065
-Node: Basic Data Typing1186250
-Node: Glossary1189578
-Node: Copying1214736
-Node: GNU Free Documentation License1252292
-Node: Index1277428
+Node: Foreword342300
+Node: Foreword446742
+Node: Preface48264
+Ref: Preface-Footnote-151135
+Ref: Preface-Footnote-251242
+Ref: Preface-Footnote-351475
+Node: History51617
+Node: Names53963
+Ref: Names-Footnote-155057
+Node: This Manual55203
+Ref: This Manual-Footnote-161690
+Node: Conventions61790
+Node: Manual History64128
+Ref: Manual History-Footnote-167110
+Ref: Manual History-Footnote-267151
+Node: How To Contribute67225
+Node: Acknowledgments68354
+Node: Getting Started73159
+Node: Running gawk75592
+Node: One-shot76782
+Node: Read Terminal78030
+Node: Long80057
+Node: Executable Scripts81573
+Ref: Executable Scripts-Footnote-184362
+Node: Comments84465
+Node: Quoting86947
+Node: DOS Quoting92471
+Node: Sample Data Files93146
+Node: Very Simple95741
+Node: Two Rules100639
+Node: More Complex102525
+Node: Statements/Lines105387
+Ref: Statements/Lines-Footnote-1109842
+Node: Other Features110107
+Node: When111038
+Ref: When-Footnote-1112792
+Node: Intro Summary112857
+Node: Invoking Gawk113740
+Node: Command Line115254
+Node: Options116052
+Ref: Options-Footnote-1131856
+Ref: Options-Footnote-2132085
+Node: Other Arguments132110
+Node: Naming Standard Input135058
+Node: Environment Variables136151
+Node: AWKPATH Variable136709
+Ref: AWKPATH Variable-Footnote-1140122
+Ref: AWKPATH Variable-Footnote-2140167
+Node: AWKLIBPATH Variable140427
+Node: Other Environment Variables141683
+Node: Exit Status145171
+Node: Include Files145847
+Node: Loading Shared Libraries149444
+Node: Obsolete150871
+Node: Undocumented151568
+Node: Invoking Summary151835
+Node: Regexp153499
+Node: Regexp Usage154953
+Node: Escape Sequences156990
+Node: Regexp Operators163231
+Ref: Regexp Operators-Footnote-1170657
+Ref: Regexp Operators-Footnote-2170804
+Node: Bracket Expressions170902
+Ref: table-char-classes172917
+Node: Leftmost Longest175841
+Node: Computed Regexps177143
+Node: GNU Regexp Operators180540
+Node: Case-sensitivity184213
+Ref: Case-sensitivity-Footnote-1187098
+Ref: Case-sensitivity-Footnote-2187333
+Node: Regexp Summary187441
+Node: Reading Files188908
+Node: Records191069
+Node: awk split records191802
+Node: gawk split records196717
+Ref: gawk split records-Footnote-1201261
+Node: Fields201298
+Ref: Fields-Footnote-1204074
+Node: Nonconstant Fields204160
+Ref: Nonconstant Fields-Footnote-1206403
+Node: Changing Fields206607
+Node: Field Separators212536
+Node: Default Field Splitting215241
+Node: Regexp Field Splitting216358
+Node: Single Character Fields219708
+Node: Command Line Field Separator220767
+Node: Full Line Fields223979
+Ref: Full Line Fields-Footnote-1225496
+Ref: Full Line Fields-Footnote-2225542
+Node: Field Splitting Summary225643
+Node: Constant Size227717
+Node: Splitting By Content232306
+Ref: Splitting By Content-Footnote-1236300
+Node: Multiple Line236463
+Ref: Multiple Line-Footnote-1242349
+Node: Getline242528
+Node: Plain Getline245010
+Node: Getline/Variable247650
+Node: Getline/File248798
+Node: Getline/Variable/File250182
+Ref: Getline/Variable/File-Footnote-1251785
+Node: Getline/Pipe251872
+Node: Getline/Variable/Pipe254555
+Node: Getline/Coprocess255686
+Node: Getline/Variable/Coprocess256938
+Node: Getline Notes257677
+Node: Getline Summary260469
+Ref: table-getline-variants260881
+Node: Read Timeout261710
+Ref: Read Timeout-Footnote-1265597
+Node: Retrying I/O265655
+Node: Command-line directories266838
+Node: Input Summary267743
+Node: Input Exercises271044
+Node: Printing271772
+Node: Print273549
+Node: Print Examples275006
+Node: Output Separators277785
+Node: OFMT279803
+Node: Printf281157
+Node: Basic Printf281942
+Node: Control Letters283512
+Node: Format Modifiers287495
+Node: Printf Examples293504
+Node: Redirection295990
+Node: Special FD302831
+Ref: Special FD-Footnote-1305991
+Node: Special Files306065
+Node: Other Inherited Files306682
+Node: Special Network307682
+Node: Special Caveats308544
+Node: Close Files And Pipes309495
+Ref: Close Files And Pipes-Footnote-1316677
+Ref: Close Files And Pipes-Footnote-2316825
+Node: Output Summary316975
+Node: Output Exercises317973
+Node: Expressions318653
+Node: Values319838
+Node: Constants320516
+Node: Scalar Constants321207
+Ref: Scalar Constants-Footnote-1322066
+Node: Nondecimal-numbers322316
+Node: Regexp Constants325334
+Node: Using Constant Regexps325859
+Node: Variables329002
+Node: Using Variables329657
+Node: Assignment Options331568
+Node: Conversion333443
+Node: Strings And Numbers333967
+Ref: Strings And Numbers-Footnote-1337032
+Node: Locale influences conversions337141
+Ref: table-locale-affects339888
+Node: All Operators340476
+Node: Arithmetic Ops341106
+Node: Concatenation343611
+Ref: Concatenation-Footnote-1346430
+Node: Assignment Ops346536
+Ref: table-assign-ops351515
+Node: Increment Ops352787
+Node: Truth Values and Conditions356225
+Node: Truth Values357310
+Node: Typing and Comparison358359
+Node: Variable Typing359169
+Node: Comparison Operators362822
+Ref: table-relational-ops363232
+Node: POSIX String Comparison366727
+Ref: POSIX String Comparison-Footnote-1367799
+Node: Boolean Ops367937
+Ref: Boolean Ops-Footnote-1372416
+Node: Conditional Exp372507
+Node: Function Calls374234
+Node: Precedence378114
+Node: Locales381775
+Node: Expressions Summary383407
+Node: Patterns and Actions385967
+Node: Pattern Overview387087
+Node: Regexp Patterns388766
+Node: Expression Patterns389309
+Node: Ranges393019
+Node: BEGIN/END396125
+Node: Using BEGIN/END396886
+Ref: Using BEGIN/END-Footnote-1399620
+Node: I/O And BEGIN/END399726
+Node: BEGINFILE/ENDFILE402040
+Node: Empty404941
+Node: Using Shell Variables405258
+Node: Action Overview407531
+Node: Statements409857
+Node: If Statement411705
+Node: While Statement413200
+Node: Do Statement415229
+Node: For Statement416373
+Node: Switch Statement419530
+Node: Break Statement421912
+Node: Continue Statement423953
+Node: Next Statement425780
+Node: Nextfile Statement428161
+Node: Exit Statement430791
+Node: Built-in Variables433194
+Node: User-modified434327
+Ref: User-modified-Footnote-1442008
+Node: Auto-set442070
+Ref: Auto-set-Footnote-1456282
+Ref: Auto-set-Footnote-2456487
+Node: ARGC and ARGV456543
+Node: Pattern Action Summary460761
+Node: Arrays463188
+Node: Array Basics464517
+Node: Array Intro465361
+Ref: figure-array-elements467325
+Ref: Array Intro-Footnote-1469851
+Node: Reference to Elements469979
+Node: Assigning Elements472431
+Node: Array Example472922
+Node: Scanning an Array474680
+Node: Controlling Scanning477696
+Ref: Controlling Scanning-Footnote-1482892
+Node: Numeric Array Subscripts483208
+Node: Uninitialized Subscripts485393
+Node: Delete487010
+Ref: Delete-Footnote-1489753
+Node: Multidimensional489810
+Node: Multiscanning492907
+Node: Arrays of Arrays494496
+Node: Arrays Summary499255
+Node: Functions501347
+Node: Built-in502246
+Node: Calling Built-in503324
+Node: Numeric Functions505315
+Ref: Numeric Functions-Footnote-1510134
+Ref: Numeric Functions-Footnote-2510491
+Ref: Numeric Functions-Footnote-3510539
+Node: String Functions510811
+Ref: String Functions-Footnote-1534286
+Ref: String Functions-Footnote-2534415
+Ref: String Functions-Footnote-3534663
+Node: Gory Details534750
+Ref: table-sub-escapes536531
+Ref: table-sub-proposed538051
+Ref: table-posix-sub539415
+Ref: table-gensub-escapes540951
+Ref: Gory Details-Footnote-1541783
+Node: I/O Functions541934
+Ref: I/O Functions-Footnote-1549152
+Node: Time Functions549299
+Ref: Time Functions-Footnote-1559787
+Ref: Time Functions-Footnote-2559855
+Ref: Time Functions-Footnote-3560013
+Ref: Time Functions-Footnote-4560124
+Ref: Time Functions-Footnote-5560236
+Ref: Time Functions-Footnote-6560463
+Node: Bitwise Functions560729
+Ref: table-bitwise-ops561291
+Ref: Bitwise Functions-Footnote-1565600
+Node: Type Functions565769
+Node: I18N Functions566920
+Node: User-defined568565
+Node: Definition Syntax569370
+Ref: Definition Syntax-Footnote-1574777
+Node: Function Example574848
+Ref: Function Example-Footnote-1577767
+Node: Function Caveats577789
+Node: Calling A Function578307
+Node: Variable Scope579265
+Node: Pass By Value/Reference582253
+Node: Return Statement585748
+Node: Dynamic Typing588729
+Node: Indirect Calls589658
+Ref: Indirect Calls-Footnote-1600960
+Node: Functions Summary601088
+Node: Library Functions603790
+Ref: Library Functions-Footnote-1607399
+Ref: Library Functions-Footnote-2607542
+Node: Library Names607713
+Ref: Library Names-Footnote-1611167
+Ref: Library Names-Footnote-2611390
+Node: General Functions611476
+Node: Strtonum Function612579
+Node: Assert Function615601
+Node: Round Function618925
+Node: Cliff Random Function620466
+Node: Ordinal Functions621482
+Ref: Ordinal Functions-Footnote-1624545
+Ref: Ordinal Functions-Footnote-2624797
+Node: Join Function625008
+Ref: Join Function-Footnote-1626777
+Node: Getlocaltime Function626977
+Node: Readfile Function630721
+Node: Shell Quoting632691
+Node: Data File Management634092
+Node: Filetrans Function634724
+Node: Rewind Function638780
+Node: File Checking640167
+Ref: File Checking-Footnote-1641499
+Node: Empty Files641700
+Node: Ignoring Assigns643679
+Node: Getopt Function645230
+Ref: Getopt Function-Footnote-1656692
+Node: Passwd Functions656892
+Ref: Passwd Functions-Footnote-1665729
+Node: Group Functions665817
+Ref: Group Functions-Footnote-1673711
+Node: Walking Arrays673924
+Node: Library Functions Summary675527
+Node: Library Exercises676928
+Node: Sample Programs678208
+Node: Running Examples678978
+Node: Clones679706
+Node: Cut Program680930
+Node: Egrep Program690649
+Ref: Egrep Program-Footnote-1698147
+Node: Id Program698257
+Node: Split Program701902
+Ref: Split Program-Footnote-1705350
+Node: Tee Program705478
+Node: Uniq Program708267
+Node: Wc Program715686
+Ref: Wc Program-Footnote-1719936
+Node: Miscellaneous Programs720030
+Node: Dupword Program721243
+Node: Alarm Program723274
+Node: Translate Program728078
+Ref: Translate Program-Footnote-1732643
+Node: Labels Program732913
+Ref: Labels Program-Footnote-1736264
+Node: Word Sorting736348
+Node: History Sorting740419
+Node: Extract Program742255
+Node: Simple Sed749780
+Node: Igawk Program752848
+Ref: Igawk Program-Footnote-1767172
+Ref: Igawk Program-Footnote-2767373
+Ref: Igawk Program-Footnote-3767495
+Node: Anagram Program767610
+Node: Signature Program770667
+Node: Programs Summary771914
+Node: Programs Exercises773107
+Ref: Programs Exercises-Footnote-1777238
+Node: Advanced Features777329
+Node: Nondecimal Data779277
+Node: Array Sorting780867
+Node: Controlling Array Traversal781564
+Ref: Controlling Array Traversal-Footnote-1789897
+Node: Array Sorting Functions790015
+Ref: Array Sorting Functions-Footnote-1793904
+Node: Two-way I/O794100
+Ref: Two-way I/O-Footnote-1799045
+Ref: Two-way I/O-Footnote-2799231
+Node: TCP/IP Networking799313
+Node: Profiling802186
+Node: Advanced Features Summary810463
+Node: Internationalization812396
+Node: I18N and L10N813876
+Node: Explaining gettext814562
+Ref: Explaining gettext-Footnote-1819587
+Ref: Explaining gettext-Footnote-2819771
+Node: Programmer i18n819936
+Ref: Programmer i18n-Footnote-1824802
+Node: Translator i18n824851
+Node: String Extraction825645
+Ref: String Extraction-Footnote-1826776
+Node: Printf Ordering826862
+Ref: Printf Ordering-Footnote-1829648
+Node: I18N Portability829712
+Ref: I18N Portability-Footnote-1832167
+Node: I18N Example832230
+Ref: I18N Example-Footnote-1835033
+Node: Gawk I18N835105
+Node: I18N Summary835743
+Node: Debugger837082
+Node: Debugging838104
+Node: Debugging Concepts838545
+Node: Debugging Terms840398
+Node: Awk Debugging842970
+Node: Sample Debugging Session843864
+Node: Debugger Invocation844384
+Node: Finding The Bug845768
+Node: List of Debugger Commands852243
+Node: Breakpoint Control853576
+Node: Debugger Execution Control857272
+Node: Viewing And Changing Data860636
+Node: Execution Stack864014
+Node: Debugger Info865651
+Node: Miscellaneous Debugger Commands869668
+Node: Readline Support874697
+Node: Limitations875589
+Node: Debugging Summary877703
+Node: Arbitrary Precision Arithmetic878871
+Node: Computer Arithmetic880287
+Ref: table-numeric-ranges883885
+Ref: Computer Arithmetic-Footnote-1884744
+Node: Math Definitions884801
+Ref: table-ieee-formats888089
+Ref: Math Definitions-Footnote-1888693
+Node: MPFR features888798
+Node: FP Math Caution890469
+Ref: FP Math Caution-Footnote-1891519
+Node: Inexactness of computations891888
+Node: Inexact representation892847
+Node: Comparing FP Values894204
+Node: Errors accumulate895286
+Node: Getting Accuracy896719
+Node: Try To Round899381
+Node: Setting precision900280
+Ref: table-predefined-precision-strings900964
+Node: Setting the rounding mode902753
+Ref: table-gawk-rounding-modes903117
+Ref: Setting the rounding mode-Footnote-1906572
+Node: Arbitrary Precision Integers906751
+Ref: Arbitrary Precision Integers-Footnote-1911650
+Node: POSIX Floating Point Problems911799
+Ref: POSIX Floating Point Problems-Footnote-1915672
+Node: Floating point summary915710
+Node: Dynamic Extensions917904
+Node: Extension Intro919456
+Node: Plugin License920722
+Node: Extension Mechanism Outline921519
+Ref: figure-load-extension921947
+Ref: figure-register-new-function923427
+Ref: figure-call-new-function924431
+Node: Extension API Description926417
+Node: Extension API Functions Introduction927867
+Node: General Data Types932691
+Ref: General Data Types-Footnote-1938430
+Node: Memory Allocation Functions938729
+Ref: Memory Allocation Functions-Footnote-1941568
+Node: Constructor Functions941664
+Node: Registration Functions943398
+Node: Extension Functions944083
+Node: Exit Callback Functions946380
+Node: Extension Version String947628
+Node: Input Parsers948293
+Node: Output Wrappers958172
+Node: Two-way processors962687
+Node: Printing Messages964891
+Ref: Printing Messages-Footnote-1965967
+Node: Updating `ERRNO'966119
+Node: Requesting Values966859
+Ref: table-value-types-returned967587
+Node: Accessing Parameters968544
+Node: Symbol Table Access969775
+Node: Symbol table by name970289
+Node: Symbol table by cookie972270
+Ref: Symbol table by cookie-Footnote-1976414
+Node: Cached values976477
+Ref: Cached values-Footnote-1979976
+Node: Array Manipulation980067
+Ref: Array Manipulation-Footnote-1981165
+Node: Array Data Types981202
+Ref: Array Data Types-Footnote-1983857
+Node: Array Functions983949
+Node: Flattening Arrays987803
+Node: Creating Arrays994695
+Node: Extension API Variables999466
+Node: Extension Versioning1000102
+Node: Extension API Informational Variables1002003
+Node: Extension API Boilerplate1003068
+Node: Finding Extensions1006877
+Node: Extension Example1007437
+Node: Internal File Description1008209
+Node: Internal File Ops1012276
+Ref: Internal File Ops-Footnote-11023946
+Node: Using Internal File Ops1024086
+Ref: Using Internal File Ops-Footnote-11026469
+Node: Extension Samples1026742
+Node: Extension Sample File Functions1028268
+Node: Extension Sample Fnmatch1035906
+Node: Extension Sample Fork1037397
+Node: Extension Sample Inplace1038612
+Node: Extension Sample Ord1040287
+Node: Extension Sample Readdir1041123
+Ref: table-readdir-file-types1041999
+Node: Extension Sample Revout1042810
+Node: Extension Sample Rev2way1043400
+Node: Extension Sample Read write array1044140
+Node: Extension Sample Readfile1046080
+Node: Extension Sample Time1047175
+Node: Extension Sample API Tests1048524
+Node: gawkextlib1049015
+Node: Extension summary1051673
+Node: Extension Exercises1055362
+Node: Language History1056084
+Node: V7/SVR3.11057740
+Node: SVR41059921
+Node: POSIX1061366
+Node: BTL1062755
+Node: POSIX/GNU1063489
+Node: Feature History1069113
+Node: Common Extensions1082211
+Node: Ranges and Locales1083535
+Ref: Ranges and Locales-Footnote-11088153
+Ref: Ranges and Locales-Footnote-21088180
+Ref: Ranges and Locales-Footnote-31088414
+Node: Contributors1088635
+Node: History summary1094176
+Node: Installation1095546
+Node: Gawk Distribution1096492
+Node: Getting1096976
+Node: Extracting1097799
+Node: Distribution contents1099434
+Node: Unix Installation1105499
+Node: Quick Installation1106182
+Node: Shell Startup Files1108593
+Node: Additional Configuration Options1109672
+Node: Configuration Philosophy1111411
+Node: Non-Unix Installation1113780
+Node: PC Installation1114238
+Node: PC Binary Installation1115557
+Node: PC Compiling1117405
+Ref: PC Compiling-Footnote-11120426
+Node: PC Testing1120535
+Node: PC Using1121711
+Node: Cygwin1125826
+Node: MSYS1126649
+Node: VMS Installation1127149
+Node: VMS Compilation1127941
+Ref: VMS Compilation-Footnote-11129163
+Node: VMS Dynamic Extensions1129221
+Node: VMS Installation Details1130905
+Node: VMS Running1133157
+Node: VMS GNV1135993
+Node: VMS Old Gawk1136727
+Node: Bugs1137197
+Node: Other Versions1141080
+Node: Installation summary1147508
+Node: Notes1148564
+Node: Compatibility Mode1149429
+Node: Additions1150211
+Node: Accessing The Source1151136
+Node: Adding Code1152572
+Node: New Ports1158737
+Node: Derived Files1163219
+Ref: Derived Files-Footnote-11168694
+Ref: Derived Files-Footnote-21168728
+Ref: Derived Files-Footnote-31169324
+Node: Future Extensions1169438
+Node: Implementation Limitations1170044
+Node: Extension Design1171292
+Node: Old Extension Problems1172446
+Ref: Old Extension Problems-Footnote-11173963
+Node: Extension New Mechanism Goals1174020
+Ref: Extension New Mechanism Goals-Footnote-11177380
+Node: Extension Other Design Decisions1177569
+Node: Extension Future Growth1179677
+Node: Old Extension Mechanism1180513
+Node: Notes summary1182275
+Node: Basic Concepts1183461
+Node: Basic High Level1184142
+Ref: figure-general-flow1184414
+Ref: figure-process-flow1185013
+Ref: Basic High Level-Footnote-11188242
+Node: Basic Data Typing1188427
+Node: Glossary1191755
+Node: Copying1216913
+Node: GNU Free Documentation License1254469
+Node: Index1279605
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 57c3774..f0e1760 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -603,6 +603,7 @@ particular records in a file and perform operations upon 
them.
                                         @code{getline}.
 * Getline Summary::                     Summary of @code{getline} Variants.
 * Read Timeout::                        Reading input with a timeout.
+* Retrying I/O::                        Retrying I/O after certain errors.
 * Command-line directories::            What happens if you put a directory on
                                         the command line.
 * Input Summary::                       Input summary.
@@ -6335,6 +6336,7 @@ used with it do not have to be named on the @command{awk} 
command line
 * Getline::                     Reading files under explicit program control
                                 using the @code{getline} function.
 * Read Timeout::                Reading input with a timeout.
+* Retrying I/O::                Retrying I/O after certain errors.
 * Command-line directories::    What happens if you put a directory on the
                                 command line.
 * Input Summary::               Input summary.
@@ -8142,6 +8144,11 @@ it encounters the end of the file.  If there is some 
error in getting
 a record, such as a file that cannot be opened, then @code{getline}
 returns @minus{}1.  In this case, @command{gawk} sets the variable
 @code{ERRNO} to a string describing the error that occurred.
+If the @code{errno} variable indicates that the I/O operation may be
+retried, and @code{PROCINFO["input", "RETRY"]} is set, then @minus{}2
+will be returned instead of @minus{}1, and further calls to @code{getline}
+may be attemped.  @DBXREF{Retrying I/O} for further information about
+this feature.
 
 In the following examples, @var{command} stands for a string value that
 represents a shell command.
@@ -8794,7 +8801,8 @@ on a per command or connection basis.
 the attempt to read from the underlying device may
 succeed in a later attempt. This is a limitation, and it also
 means that you cannot use this to multiplex input from
-two or more sources.
+two or more sources.  @DBXREF{Retrying I/O} for a way to enable 
+later I/O attempts to succeed.
 
 Assigning a timeout value prevents read operations from
 blocking indefinitely. But bear in mind that there are other ways
@@ -8804,6 +8812,35 @@ a connection before it can start reading any data,
 or the attempt to open a FIFO special file for reading can block
 indefinitely until some other process opens it for writing.
 
address@hidden Retrying I/O
address@hidden Retrying I/O on Certain Input Errors
address@hidden retrying I/O
+
address@hidden differences in @command{awk} and @command{gawk}, retrying I/O
+This @value{SECTION} describes a feature that is specific to @command{gawk}.
+
+When @command{gawk} encounters an error while reading input, it will by default
+return @minus{}1 from getline, and subsequent attempts to read from that file
+will result in an end-of-file indication.  However, you may optionally instruct
address@hidden to allow I/O to be retried when certain errors are encountered
+by setting setting a special element
+in the @code{PROCINFO} array (@pxref{Auto-set}):
+
address@hidden
+PROCINFO["input_name", "RETRY"]
address@hidden example
+
+When set, this causes @command{gawk} to check the value of the system
address@hidden variable when an I/O error occurs.  If @code{errno} indicates
+a subsequent I/O attempt may succeed, @code{getline} will instead return
address@hidden and
+further calls to @code{getline} may succeed.  This applies to @code{errno}
+values EAGAIN, EWOULDBLOCK, EINTR, or ETIMEDOUT.
+
+This feature is useful in conjunction with
address@hidden"input_name", "READ_TIMEOUT"]} or situations where a file
+descriptor has been configured to behave in a non-blocking fashion.
+
 @node Command-line directories
 @section Directories on the Command Line
 @cindex differences in @command{awk} and @command{gawk}, command-line 
directories
@@ -14942,6 +14979,11 @@ value to be meaningful when an I/O operation returns a 
failure value,
 such as @code{getline} returning @minus{}1.  You are, of course, free
 to clear it yourself before doing an I/O operation.
 
+If the value of @code{ERRNO} corresponds to a system error in the C
address@hidden variable, then @code{PROCINFO["errno"]} will be set to the value
+of @code{errno}.  For non-system errors, @code{PROCINFO["errno"]} will
+be zero.
+
 @cindex @code{FILENAME} variable
 @cindex dark corner, @code{FILENAME} variable
 @item @code{FILENAME}
@@ -15010,6 +15052,10 @@ are guaranteed to be available:
 @item PROCINFO["egid"]
 The value of the @code{getegid()} system call.
 
address@hidden PROCINFO["errno"]
+The value of the C @code{errno} variable when @code{ERRNO} is set to
+the associated error message.
+
 @item PROCINFO["euid"]
 @cindex effective user ID of @command{gawk} user
 The value of the @code{geteuid()} system call.
@@ -15149,6 +15195,11 @@ open input file, pipe, or coprocess.
 @DBXREF{Read Timeout} for more information.
 
 @item
+It may be used to indicate that I/O may be retried when it fails due to
+certain errors.
address@hidden I/O} for more information.
+
address@hidden
 It may be used to cause coprocesses to communicate over pseudo-ttys
 instead of through two-way pipes; this is discussed further in
 @ref{Two-way I/O}.
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index b850dd1..638bb90 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -598,6 +598,7 @@ particular records in a file and perform operations upon 
them.
                                         @code{getline}.
 * Getline Summary::                     Summary of @code{getline} Variants.
 * Read Timeout::                        Reading input with a timeout.
+* Retrying I/O::                        Retrying I/O after certain errors.
 * Command-line directories::            What happens if you put a directory on
                                         the command line.
 * Input Summary::                       Input summary.
@@ -6119,6 +6120,7 @@ used with it do not have to be named on the @command{awk} 
command line
 * Getline::                     Reading files under explicit program control
                                 using the @code{getline} function.
 * Read Timeout::                Reading input with a timeout.
+* Retrying I/O::                Retrying I/O after certain errors.
 * Command-line directories::    What happens if you put a directory on the
                                 command line.
 * Input Summary::               Input summary.
@@ -7743,6 +7745,11 @@ it encounters the end of the file.  If there is some 
error in getting
 a record, such as a file that cannot be opened, then @code{getline}
 returns @minus{}1.  In this case, @command{gawk} sets the variable
 @code{ERRNO} to a string describing the error that occurred.
+If the @code{errno} variable indicates that the I/O operation may be
+retried, and @code{PROCINFO["input", "RETRY"]} is set, then @minus{}2
+will be returned instead of @minus{}1, and further calls to @code{getline}
+may be attemped.  @DBXREF{Retrying I/O} for further information about
+this feature.
 
 In the following examples, @var{command} stands for a string value that
 represents a shell command.
@@ -8395,7 +8402,8 @@ on a per command or connection basis.
 the attempt to read from the underlying device may
 succeed in a later attempt. This is a limitation, and it also
 means that you cannot use this to multiplex input from
-two or more sources.
+two or more sources.  @DBXREF{Retrying I/O} for a way to enable 
+later I/O attempts to succeed.
 
 Assigning a timeout value prevents read operations from
 blocking indefinitely. But bear in mind that there are other ways
@@ -8405,6 +8413,35 @@ a connection before it can start reading any data,
 or the attempt to open a FIFO special file for reading can block
 indefinitely until some other process opens it for writing.
 
address@hidden Retrying I/O
address@hidden Retrying I/O on Certain Input Errors
address@hidden retrying I/O
+
address@hidden differences in @command{awk} and @command{gawk}, retrying I/O
+This @value{SECTION} describes a feature that is specific to @command{gawk}.
+
+When @command{gawk} encounters an error while reading input, it will by default
+return @minus{}1 from getline, and subsequent attempts to read from that file
+will result in an end-of-file indication.  However, you may optionally instruct
address@hidden to allow I/O to be retried when certain errors are encountered
+by setting setting a special element
+in the @code{PROCINFO} array (@pxref{Auto-set}):
+
address@hidden
+PROCINFO["input_name", "RETRY"]
address@hidden example
+
+When set, this causes @command{gawk} to check the value of the system
address@hidden variable when an I/O error occurs.  If @code{errno} indicates
+a subsequent I/O attempt may succeed, @code{getline} will instead return
address@hidden and
+further calls to @code{getline} may succeed.  This applies to @code{errno}
+values EAGAIN, EWOULDBLOCK, EINTR, or ETIMEDOUT.
+
+This feature is useful in conjunction with
address@hidden"input_name", "READ_TIMEOUT"]} or situations where a file
+descriptor has been configured to behave in a non-blocking fashion.
+
 @node Command-line directories
 @section Directories on the Command Line
 @cindex differences in @command{awk} and @command{gawk}, command-line 
directories
@@ -14271,6 +14308,11 @@ value to be meaningful when an I/O operation returns a 
failure value,
 such as @code{getline} returning @minus{}1.  You are, of course, free
 to clear it yourself before doing an I/O operation.
 
+If the value of @code{ERRNO} corresponds to a system error in the C
address@hidden variable, then @code{PROCINFO["errno"]} will be set to the value
+of @code{errno}.  For non-system errors, @code{PROCINFO["errno"]} will
+be zero.
+
 @cindex @code{FILENAME} variable
 @cindex dark corner, @code{FILENAME} variable
 @item @code{FILENAME}
@@ -14339,6 +14381,10 @@ are guaranteed to be available:
 @item PROCINFO["egid"]
 The value of the @code{getegid()} system call.
 
address@hidden PROCINFO["errno"]
+The value of the C @code{errno} variable when @code{ERRNO} is set to
+the associated error message.
+
 @item PROCINFO["euid"]
 @cindex effective user ID of @command{gawk} user
 The value of the @code{geteuid()} system call.
@@ -14478,6 +14524,11 @@ open input file, pipe, or coprocess.
 @DBXREF{Read Timeout} for more information.
 
 @item
+It may be used to indicate that I/O may be retried when it fails due to
+certain errors.
address@hidden I/O} for more information.
+
address@hidden
 It may be used to cause coprocesses to communicate over pseudo-ttys
 instead of through two-way pipes; this is discussed further in
 @ref{Two-way I/O}.
diff --git a/gawkapi.h b/gawkapi.h
index 22b3be3..6893fda 100644
--- a/gawkapi.h
+++ b/gawkapi.h
@@ -504,7 +504,7 @@ typedef struct gawk_api {
                                          awk_value_t *result);
 
        /*
-        * Convert a paramter that was undefined into an array
+        * Convert a parameter that was undefined into an array
         * (provide call-by-reference for arrays).  Returns false
         * if count is too big, or if the argument's type is
         * not undefined.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog       |    4 +
 doc/ChangeLog   |    6 +
 doc/gawk.1      |   45 ++
 doc/gawk.info   | 1256 +++++++++++++++++++++++++++++--------------------------
 doc/gawk.texi   |   53 +++-
 doc/gawktexi.in |   53 +++-
 gawkapi.h       |    2 +-
 7 files changed, 813 insertions(+), 606 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]