gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, non-fatal-io-2, created. gawk-4.1.0-1097


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, non-fatal-io-2, created. gawk-4.1.0-1097-g0e38201
Date: Sun, 08 Feb 2015 17:56:08 +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, non-fatal-io-2 has been created
        at  0e38201f5879cc91c90876b2b9b219a308e3a2d2 (commit)

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

commit 0e38201f5879cc91c90876b2b9b219a308e3a2d2
Merge: 34c33ee 7306300
Author: Arnold D. Robbins <address@hidden>
Date:   Sun Feb 8 19:55:45 2015 +0200

    Merge branch 'master' into non-fatal-io-2

diff --cc ChangeLog
index c61e8ee,f116265..61362b7
--- a/ChangeLog
+++ b/ChangeLog
@@@ -1,21 -1,104 +1,125 @@@
++<<<<<<< HEAD
 +2015-02-08         Andrew J. Schorr     <address@hidden>
 +
 +      * awk.h (RED_NON_FATAL): Removed.
 +      (redirect): Add new failure_fatal parameter.
 +      (is_non_fatal_redirect): Add declaration.
 +      * builtin.c (efwrite): Rework check for non-fatal.
 +      (do_printf): Adjust calls to redirect.
 +      (do_print_rec): Ditto. Move check for redirection error up.
 +      * io.c (redflags2str): Remove RED_NON_FATAL.
 +      (redirect): Add new failure_fatal parameter. Simplify the code.
 +      (is_non_fatal_redirect): New function.
 +      (do_getline_redir): Adjust calls to redirect.
 +
 +2014-12-27         Arnold D. Robbins     <address@hidden>
 +
 +      * awk.h (is_non_fatal_std): Declare new function.
 +      * io.c (is_non_fatal_std): New function.
 +      * builtin.c (efwrite): Call it.
++=======
+ 2015-02-07         Arnold D. Robbins     <address@hidden>
+ 
+       * regcomp.c, regex.c, regex.h, regex_internal.c, regex_internal.h,
+       regexec.c: Sync with GLIBC. Mostly copyright date updates.
+ 
+ 2015-02-05         Andrew J. Schorr     <address@hidden>
+ 
+       * eval.c (set_IGNORECASE): If IGNORECASE has a numeric value, try
+       using that before treating it as a string.  This fixes a problem
+       where setting -v IGNORECASE=0 on the command line was not working
+       properly.
+ 
+ 2015-02-01         Arnold D. Robbins     <address@hidden>
+ 
+       Move POSIX requirement for disallowing paramater names with the
+       same name as a function into --posix.
+ 
+       * NEWS: Document it.
+       * awkgram.y (parse_program): Check do_posix before calling
+       check_param_names().
+       * symbol.c (check_param_names): Set up a fake node and call
+       in_array() for function parameter names instead of linear
+       searching the function list a second time. Thanks to Andrew
+       Schorr for the motivation.
+ 
+ 2015-01-30         Arnold D. Robbins     <address@hidden>
+ 
+       Don't allow function parameter names to be the same as function
+       names - required by POSIX. Bug first reported in comp.lang.awk.
+ 
+       In addition, don't allow use of a parameter as a function name
+       in a call (but it's ok in indirect calls).
+ 
+       * NEWS: Updated.
+       * awk.h (check_param_names): Add declaration.
+       * awkgram.y (at_seen): New variable. Communicates between
+       yylex() and the parser.
+       (FUNC_CALL production): Check at_seen and check that the identifier
+       is a function name.
+       (parse_program): Call check_param_names() and set errcount.
+       (yylex): Set at_seen after seeing an at-sign.
+       * symbol.c (check_param_names): New function.
+ 
+ 2015-01-24         Arnold D. Robbins     <address@hidden>
+ 
+       Infrastructure updates.
+ 
+       Bison 3.0.4. Automake 1.15. Gettext 0.19.4.
+ 
+ 2015-01-20         Arnold D. Robbins     <address@hidden>
+ 
+       * gawkapi.c (api_set_array_element): Remove useless call to
+       make_aname.
+       * symbol.c (load_symbols): Ditto.
+       Thanks to Andrew Schorr for pointing out the problem.
+ 
+ 2015-01-19         Arnold D. Robbins     <address@hidden>
+ 
+       * awkgram.c: Update to bison 3.0.3.
+       * command.c: Ditto.
+       * NEWS: Note same.
+ 
+ 2015-01-16         Stephen Davies        <address@hidden>
+ 
+       * awkgram.y (rule): Set first_rule to false. Catches more cases
+       for gathering comments. Thanks to Hermann Peifer for the test case.
+ 
+ 2015-01-15         Arnold D. Robbins     <address@hidden>
+ 
+       * dfa.h, dfa.c: Sync with grep. Mainly copyright updates.
+       * getopt.c, getopt.h, getopt1.c getopt_int.h: Sync with GLIBC.
+       Mainly copyright updates, one minor code fix.
+ 
+ 2015-01-14         Arnold D. Robbins     <address@hidden>
+ 
+       Remove deferred variables.
+ 
+       * awk.h (register_deferred_variable): Remove declaration.
+       * awkgram.y (is_deferred_variable, process_deferred,
+       symtab_used, extensions_used, deferred_variables,
+       process_deferred): Remove declarations, bodies, and uses.
+       * builtin.c (do_length): Update comment.
+       * main.c (init_vars): Just call load_procinfo() and `load_environ()'.
+ 
+ 2015-01-07         Arnold D. Robbins     <address@hidden>
+ 
+       * configure.ac: Update debug flags if developing.
+       * awkgram.y (yylex): Regex parsing bug fix for bracket expressions.
+       Thanks to Mike Brennan for the report.
+       * builtin.c (format_tree): Catch non-use of count$ for dynamic
+       field width or precision.
+ 
+       Unrelated:
+ 
+       Load deferred variables if extensions are used; they might
+       want to access PROCINFO and/or ENVIRON. Thanks to Andrew Schorr
+       for pointing out the issue.
+ 
+       * awkgram.y (extensions_used): New variable. Set it on @load.
+       (do_add_scrfile): Set it on -l.
+       (process_deferred): Check it also.
++>>>>>>> master
  
  2014-12-24         Arnold D. Robbins     <address@hidden>
  
diff --cc doc/ChangeLog
index ba47316,bfb0dbe..5d8c4a5
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@@ -1,8 -1,66 +1,71 @@@
+ 2015-02-08         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: O'Reilly fixes.
+ 
+ 2015-02-06         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: O'Reilly fixes.
+ 
+ 2015-02-04         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: O'Reilly fixes.
+       * gawktexi.in: Update various version-related bits of info.
+ 
+ 2015-02-02         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: O'Reilly fixes.
+ 
+ 2015-02-01         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: POSIX requirement that function parameters cannot
+       have the same name as a function is now --posix.
+       Restore indirectcall example.
+ 
+       More O'Reilly fixes.
+ 
+ 2015-01-30         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: Document POSIX requirement that function parameters
+       cannot have the same name as a function. Fix indirectcall example.
+ 
+ 2015-01-27         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: O'Reilly fixes.
+       And still more. Also, fix @code --> @command in a number of places.
+ 
+ 2015-01-26         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: O'Reilly fixes.
+ 
+ 2015-01-25         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: Fix a bad URL. And another one.
+       More O'Reilly fixes.
+ 
+ 2015-01-23         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: O'Reilly fixes.
+       (Glossary): Many new entries from Antonio Giovanni Columbo.
+ 
+ 2015-01-21         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: O'Reilly fixes.
+       Remove obsolete start/end of range indexing comments.
+ 
+ 2015-01-20         Arnold D. Robbins     <address@hidden>
+ 
+       * gawktexi.in: O'Reilly fixes.
+ 
+ 2015-01-19         Arnold D. Robbins     <address@hidden>
+ 
+       * gawkinet.texi: Fix capitalization in document title.
+       * gawktexi.in: Here we go again: Starting on more O'Reilly fixes.
+ 
 +2014-12-27         Arnold D. Robbins     <address@hidden>
 +
 +      * gawktexi.in: Add info that nonfatal I/O works with stdout and
 +      stderr.  Revise version info and what was added when.
 +
  2014-12-26         Antonio Giovanni Colombo   <address@hidden>
  
        * gawktexi.in (Glossary): Really sort the items.
diff --cc doc/gawk.info
index 08ec445,21e8fd3..d83370e
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -34543,561 -34656,560 +34720,561 @@@ Inde
  
  Tag Table:
  Node: Top1204
 -Node: Foreword342225
 -Node: Foreword446669
 -Node: Preface48200
 -Ref: Preface-Footnote-151071
 -Ref: Preface-Footnote-251178
 -Ref: Preface-Footnote-351411
 -Node: History51553
 -Node: Names53904
 -Ref: Names-Footnote-154997
 -Node: This Manual55143
 -Ref: This Manual-Footnote-161643
 -Node: Conventions61743
 -Node: Manual History64080
 -Ref: Manual History-Footnote-167073
 -Ref: Manual History-Footnote-267114
 -Node: How To Contribute67188
 -Node: Acknowledgments68317
 -Node: Getting Started73134
 -Node: Running gawk75573
 -Node: One-shot76763
 -Node: Read Terminal78027
 -Node: Long80058
 -Node: Executable Scripts81571
 -Ref: Executable Scripts-Footnote-184360
 -Node: Comments84463
 -Node: Quoting86945
 -Node: DOS Quoting92463
 -Node: Sample Data Files93138
 -Node: Very Simple95733
 -Node: Two Rules100632
 -Node: More Complex102518
 -Node: Statements/Lines105380
 -Ref: Statements/Lines-Footnote-1109835
 -Node: Other Features110100
 -Node: When111036
 -Ref: When-Footnote-1112790
 -Node: Intro Summary112855
 -Node: Invoking Gawk113739
 -Node: Command Line115253
 -Node: Options116051
 -Ref: Options-Footnote-1131846
 -Ref: Options-Footnote-2132075
 -Node: Other Arguments132100
 -Node: Naming Standard Input135048
 -Node: Environment Variables136141
 -Node: AWKPATH Variable136699
 -Ref: AWKPATH Variable-Footnote-1140106
 -Ref: AWKPATH Variable-Footnote-2140151
 -Node: AWKLIBPATH Variable140411
 -Node: Other Environment Variables141667
 -Node: Exit Status145185
 -Node: Include Files145861
 -Node: Loading Shared Libraries149450
 -Node: Obsolete150877
 -Node: Undocumented151569
 -Node: Invoking Summary151836
 -Node: Regexp153499
 -Node: Regexp Usage154953
 -Node: Escape Sequences156990
 -Node: Regexp Operators163219
 -Ref: Regexp Operators-Footnote-1170629
 -Ref: Regexp Operators-Footnote-2170776
 -Node: Bracket Expressions170874
 -Ref: table-char-classes172889
 -Node: Leftmost Longest175831
 -Node: Computed Regexps177133
 -Node: GNU Regexp Operators180562
 -Node: Case-sensitivity184234
 -Ref: Case-sensitivity-Footnote-1187119
 -Ref: Case-sensitivity-Footnote-2187354
 -Node: Regexp Summary187462
 -Node: Reading Files188929
 -Node: Records191022
 -Node: awk split records191755
 -Node: gawk split records196684
 -Ref: gawk split records-Footnote-1201223
 -Node: Fields201260
 -Ref: Fields-Footnote-1204038
 -Node: Nonconstant Fields204124
 -Ref: Nonconstant Fields-Footnote-1206362
 -Node: Changing Fields206565
 -Node: Field Separators212496
 -Node: Default Field Splitting215200
 -Node: Regexp Field Splitting216317
 -Node: Single Character Fields219667
 -Node: Command Line Field Separator220726
 -Node: Full Line Fields223943
 -Ref: Full Line Fields-Footnote-1225464
 -Ref: Full Line Fields-Footnote-2225510
 -Node: Field Splitting Summary225611
 -Node: Constant Size227685
 -Node: Splitting By Content232268
 -Ref: Splitting By Content-Footnote-1236233
 -Node: Multiple Line236396
 -Ref: Multiple Line-Footnote-1242277
 -Node: Getline242456
 -Node: Plain Getline244663
 -Node: Getline/Variable247303
 -Node: Getline/File248452
 -Node: Getline/Variable/File249837
 -Ref: Getline/Variable/File-Footnote-1251440
 -Node: Getline/Pipe251527
 -Node: Getline/Variable/Pipe254205
 -Node: Getline/Coprocess255336
 -Node: Getline/Variable/Coprocess256600
 -Node: Getline Notes257339
 -Node: Getline Summary260133
 -Ref: table-getline-variants260545
 -Node: Read Timeout261374
 -Ref: Read Timeout-Footnote-1265211
 -Node: Command-line directories265269
 -Node: Input Summary266174
 -Node: Input Exercises269559
 -Node: Printing270287
 -Node: Print272064
 -Node: Print Examples273521
 -Node: Output Separators276300
 -Node: OFMT278318
 -Node: Printf279673
 -Node: Basic Printf280458
 -Node: Control Letters282030
 -Node: Format Modifiers286015
 -Node: Printf Examples292025
 -Node: Redirection294511
 -Node: Special FD301349
 -Ref: Special FD-Footnote-1304515
 -Node: Special Files304589
 -Node: Other Inherited Files305206
 -Node: Special Network306206
 -Node: Special Caveats307068
 -Node: Close Files And Pipes308017
 -Ref: Close Files And Pipes-Footnote-1315208
 -Ref: Close Files And Pipes-Footnote-2315356
 -Node: Output Summary315506
 -Node: Output Exercises316504
 -Node: Expressions317184
 -Node: Values318373
 -Node: Constants319050
 -Node: Scalar Constants319741
 -Ref: Scalar Constants-Footnote-1320603
 -Node: Nondecimal-numbers320853
 -Node: Regexp Constants323863
 -Node: Using Constant Regexps324389
 -Node: Variables327552
 -Node: Using Variables328209
 -Node: Assignment Options330120
 -Node: Conversion331995
 -Node: Strings And Numbers332519
 -Ref: Strings And Numbers-Footnote-1335584
 -Node: Locale influences conversions335693
 -Ref: table-locale-affects338439
 -Node: All Operators339031
 -Node: Arithmetic Ops339660
 -Node: Concatenation342165
 -Ref: Concatenation-Footnote-1344984
 -Node: Assignment Ops345091
 -Ref: table-assign-ops350070
 -Node: Increment Ops351380
 -Node: Truth Values and Conditions354811
 -Node: Truth Values355894
 -Node: Typing and Comparison356943
 -Node: Variable Typing357759
 -Node: Comparison Operators361426
 -Ref: table-relational-ops361836
 -Node: POSIX String Comparison365331
 -Ref: POSIX String Comparison-Footnote-1366403
 -Node: Boolean Ops366542
 -Ref: Boolean Ops-Footnote-1371020
 -Node: Conditional Exp371111
 -Node: Function Calls372849
 -Node: Precedence376729
 -Node: Locales380389
 -Node: Expressions Summary382021
 -Node: Patterns and Actions384592
 -Node: Pattern Overview385712
 -Node: Regexp Patterns387391
 -Node: Expression Patterns387934
 -Node: Ranges391643
 -Node: BEGIN/END394750
 -Node: Using BEGIN/END395511
 -Ref: Using BEGIN/END-Footnote-1398247
 -Node: I/O And BEGIN/END398353
 -Node: BEGINFILE/ENDFILE400668
 -Node: Empty403565
 -Node: Using Shell Variables403882
 -Node: Action Overview406155
 -Node: Statements408481
 -Node: If Statement410329
 -Node: While Statement411824
 -Node: Do Statement413852
 -Node: For Statement415000
 -Node: Switch Statement418158
 -Node: Break Statement420540
 -Node: Continue Statement422581
 -Node: Next Statement424408
 -Node: Nextfile Statement426789
 -Node: Exit Statement429417
 -Node: Built-in Variables431828
 -Node: User-modified432961
 -Ref: User-modified-Footnote-1440664
 -Node: Auto-set440726
 -Ref: Auto-set-Footnote-1454435
 -Ref: Auto-set-Footnote-2454640
 -Node: ARGC and ARGV454696
 -Node: Pattern Action Summary458914
 -Node: Arrays461347
 -Node: Array Basics462676
 -Node: Array Intro463520
 -Ref: figure-array-elements465454
 -Ref: Array Intro-Footnote-1468074
 -Node: Reference to Elements468202
 -Node: Assigning Elements470664
 -Node: Array Example471155
 -Node: Scanning an Array472914
 -Node: Controlling Scanning475934
 -Ref: Controlling Scanning-Footnote-1481328
 -Node: Numeric Array Subscripts481644
 -Node: Uninitialized Subscripts483829
 -Node: Delete485446
 -Ref: Delete-Footnote-1488195
 -Node: Multidimensional488252
 -Node: Multiscanning491349
 -Node: Arrays of Arrays492938
 -Node: Arrays Summary497692
 -Node: Functions499783
 -Node: Built-in500822
 -Node: Calling Built-in501900
 -Node: Numeric Functions503895
 -Ref: Numeric Functions-Footnote-1508713
 -Ref: Numeric Functions-Footnote-2509070
 -Ref: Numeric Functions-Footnote-3509118
 -Node: String Functions509390
 -Ref: String Functions-Footnote-1532891
 -Ref: String Functions-Footnote-2533020
 -Ref: String Functions-Footnote-3533268
 -Node: Gory Details533355
 -Ref: table-sub-escapes535136
 -Ref: table-sub-proposed536651
 -Ref: table-posix-sub538013
 -Ref: table-gensub-escapes539550
 -Ref: Gory Details-Footnote-1540383
 -Node: I/O Functions540534
 -Ref: I/O Functions-Footnote-1547770
 -Node: Time Functions547917
 -Ref: Time Functions-Footnote-1558426
 -Ref: Time Functions-Footnote-2558494
 -Ref: Time Functions-Footnote-3558652
 -Ref: Time Functions-Footnote-4558763
 -Ref: Time Functions-Footnote-5558875
 -Ref: Time Functions-Footnote-6559102
 -Node: Bitwise Functions559368
 -Ref: table-bitwise-ops559930
 -Ref: Bitwise Functions-Footnote-1564258
 -Node: Type Functions564430
 -Node: I18N Functions565582
 -Node: User-defined567229
 -Node: Definition Syntax568034
 -Ref: Definition Syntax-Footnote-1573693
 -Node: Function Example573764
 -Ref: Function Example-Footnote-1576685
 -Node: Function Caveats576707
 -Node: Calling A Function577225
 -Node: Variable Scope578183
 -Node: Pass By Value/Reference581176
 -Node: Return Statement584673
 -Node: Dynamic Typing587652
 -Node: Indirect Calls588581
 -Ref: Indirect Calls-Footnote-1599887
 -Node: Functions Summary600015
 -Node: Library Functions602717
 -Ref: Library Functions-Footnote-1606325
 -Ref: Library Functions-Footnote-2606468
 -Node: Library Names606639
 -Ref: Library Names-Footnote-1610097
 -Ref: Library Names-Footnote-2610320
 -Node: General Functions610406
 -Node: Strtonum Function611509
 -Node: Assert Function614531
 -Node: Round Function617855
 -Node: Cliff Random Function619396
 -Node: Ordinal Functions620412
 -Ref: Ordinal Functions-Footnote-1623475
 -Ref: Ordinal Functions-Footnote-2623727
 -Node: Join Function623938
 -Ref: Join Function-Footnote-1625708
 -Node: Getlocaltime Function625908
 -Node: Readfile Function629652
 -Node: Shell Quoting631624
 -Node: Data File Management633025
 -Node: Filetrans Function633657
 -Node: Rewind Function637753
 -Node: File Checking639139
 -Ref: File Checking-Footnote-1640472
 -Node: Empty Files640673
 -Node: Ignoring Assigns642652
 -Node: Getopt Function644202
 -Ref: Getopt Function-Footnote-1655666
 -Node: Passwd Functions655866
 -Ref: Passwd Functions-Footnote-1664706
 -Node: Group Functions664794
 -Ref: Group Functions-Footnote-1672691
 -Node: Walking Arrays672896
 -Node: Library Functions Summary674496
 -Node: Library Exercises675900
 -Node: Sample Programs677180
 -Node: Running Examples677950
 -Node: Clones678678
 -Node: Cut Program679902
 -Node: Egrep Program689622
 -Ref: Egrep Program-Footnote-1697125
 -Node: Id Program697235
 -Node: Split Program700911
 -Ref: Split Program-Footnote-1704365
 -Node: Tee Program704493
 -Node: Uniq Program707282
 -Node: Wc Program714701
 -Ref: Wc Program-Footnote-1718951
 -Node: Miscellaneous Programs719045
 -Node: Dupword Program720258
 -Node: Alarm Program722289
 -Node: Translate Program727094
 -Ref: Translate Program-Footnote-1731657
 -Node: Labels Program731927
 -Ref: Labels Program-Footnote-1735278
 -Node: Word Sorting735362
 -Node: History Sorting739432
 -Node: Extract Program741267
 -Node: Simple Sed748791
 -Node: Igawk Program751861
 -Ref: Igawk Program-Footnote-1766187
 -Ref: Igawk Program-Footnote-2766388
 -Ref: Igawk Program-Footnote-3766510
 -Node: Anagram Program766625
 -Node: Signature Program769686
 -Node: Programs Summary770933
 -Node: Programs Exercises772154
 -Ref: Programs Exercises-Footnote-1776285
 -Node: Advanced Features776376
 -Node: Nondecimal Data778358
 -Node: Array Sorting779948
 -Node: Controlling Array Traversal780648
 -Ref: Controlling Array Traversal-Footnote-1789014
 -Node: Array Sorting Functions789132
 -Ref: Array Sorting Functions-Footnote-1793018
 -Node: Two-way I/O793214
 -Ref: Two-way I/O-Footnote-1798159
 -Ref: Two-way I/O-Footnote-2798345
 -Node: TCP/IP Networking798427
 -Node: Profiling801299
 -Node: Advanced Features Summary809570
 -Node: Internationalization811503
 -Node: I18N and L10N812983
 -Node: Explaining gettext813669
 -Ref: Explaining gettext-Footnote-1818694
 -Ref: Explaining gettext-Footnote-2818878
 -Node: Programmer i18n819043
 -Ref: Programmer i18n-Footnote-1823919
 -Node: Translator i18n823968
 -Node: String Extraction824762
 -Ref: String Extraction-Footnote-1825893
 -Node: Printf Ordering825979
 -Ref: Printf Ordering-Footnote-1828765
 -Node: I18N Portability828829
 -Ref: I18N Portability-Footnote-1831285
 -Node: I18N Example831348
 -Ref: I18N Example-Footnote-1834151
 -Node: Gawk I18N834223
 -Node: I18N Summary834867
 -Node: Debugger836207
 -Node: Debugging837229
 -Node: Debugging Concepts837670
 -Node: Debugging Terms839480
 -Node: Awk Debugging842052
 -Node: Sample Debugging Session842958
 -Node: Debugger Invocation843492
 -Node: Finding The Bug844877
 -Node: List of Debugger Commands851356
 -Node: Breakpoint Control852688
 -Node: Debugger Execution Control856365
 -Node: Viewing And Changing Data859724
 -Node: Execution Stack863100
 -Node: Debugger Info864735
 -Node: Miscellaneous Debugger Commands868780
 -Node: Readline Support873781
 -Node: Limitations874675
 -Node: Debugging Summary876790
 -Node: Arbitrary Precision Arithmetic877964
 -Node: Computer Arithmetic879380
 -Ref: table-numeric-ranges882978
 -Ref: Computer Arithmetic-Footnote-1883837
 -Node: Math Definitions883894
 -Ref: table-ieee-formats887182
 -Ref: Math Definitions-Footnote-1887786
 -Node: MPFR features887891
 -Node: FP Math Caution889562
 -Ref: FP Math Caution-Footnote-1890612
 -Node: Inexactness of computations890981
 -Node: Inexact representation891940
 -Node: Comparing FP Values893297
 -Node: Errors accumulate894379
 -Node: Getting Accuracy895812
 -Node: Try To Round898474
 -Node: Setting precision899373
 -Ref: table-predefined-precision-strings900057
 -Node: Setting the rounding mode901846
 -Ref: table-gawk-rounding-modes902210
 -Ref: Setting the rounding mode-Footnote-1905665
 -Node: Arbitrary Precision Integers905844
 -Ref: Arbitrary Precision Integers-Footnote-1910744
 -Node: POSIX Floating Point Problems910893
 -Ref: POSIX Floating Point Problems-Footnote-1914766
 -Node: Floating point summary914804
 -Node: Dynamic Extensions916998
 -Node: Extension Intro918550
 -Node: Plugin License919816
 -Node: Extension Mechanism Outline920613
 -Ref: figure-load-extension921041
 -Ref: figure-register-new-function922521
 -Ref: figure-call-new-function923525
 -Node: Extension API Description925511
 -Node: Extension API Functions Introduction926961
 -Node: General Data Types931785
 -Ref: General Data Types-Footnote-1937524
 -Node: Memory Allocation Functions937823
 -Ref: Memory Allocation Functions-Footnote-1940662
 -Node: Constructor Functions940758
 -Node: Registration Functions942492
 -Node: Extension Functions943177
 -Node: Exit Callback Functions945474
 -Node: Extension Version String946722
 -Node: Input Parsers947387
 -Node: Output Wrappers957266
 -Node: Two-way processors961781
 -Node: Printing Messages963985
 -Ref: Printing Messages-Footnote-1965061
 -Node: Updating `ERRNO'965213
 -Node: Requesting Values965953
 -Ref: table-value-types-returned966681
 -Node: Accessing Parameters967638
 -Node: Symbol Table Access968869
 -Node: Symbol table by name969383
 -Node: Symbol table by cookie971364
 -Ref: Symbol table by cookie-Footnote-1975508
 -Node: Cached values975571
 -Ref: Cached values-Footnote-1979070
 -Node: Array Manipulation979161
 -Ref: Array Manipulation-Footnote-1980259
 -Node: Array Data Types980296
 -Ref: Array Data Types-Footnote-1982951
 -Node: Array Functions983043
 -Node: Flattening Arrays986897
 -Node: Creating Arrays993789
 -Node: Extension API Variables998560
 -Node: Extension Versioning999196
 -Node: Extension API Informational Variables1001097
 -Node: Extension API Boilerplate1002162
 -Node: Finding Extensions1005971
 -Node: Extension Example1006531
 -Node: Internal File Description1007303
 -Node: Internal File Ops1011370
 -Ref: Internal File Ops-Footnote-11023040
 -Node: Using Internal File Ops1023180
 -Ref: Using Internal File Ops-Footnote-11025563
 -Node: Extension Samples1025836
 -Node: Extension Sample File Functions1027362
 -Node: Extension Sample Fnmatch1035000
 -Node: Extension Sample Fork1036491
 -Node: Extension Sample Inplace1037706
 -Node: Extension Sample Ord1039381
 -Node: Extension Sample Readdir1040217
 -Ref: table-readdir-file-types1041093
 -Node: Extension Sample Revout1041904
 -Node: Extension Sample Rev2way1042494
 -Node: Extension Sample Read write array1043234
 -Node: Extension Sample Readfile1045174
 -Node: Extension Sample Time1046269
 -Node: Extension Sample API Tests1047618
 -Node: gawkextlib1048109
 -Node: Extension summary1050767
 -Node: Extension Exercises1054456
 -Node: Language History1055178
 -Node: V7/SVR3.11056834
 -Node: SVR41059015
 -Node: POSIX1060460
 -Node: BTL1061849
 -Node: POSIX/GNU1062583
 -Node: Feature History1068372
 -Node: Common Extensions1082098
 -Node: Ranges and Locales1083422
 -Ref: Ranges and Locales-Footnote-11088040
 -Ref: Ranges and Locales-Footnote-21088067
 -Ref: Ranges and Locales-Footnote-31088301
 -Node: Contributors1088522
 -Node: History summary1094063
 -Node: Installation1095433
 -Node: Gawk Distribution1096379
 -Node: Getting1096863
 -Node: Extracting1097686
 -Node: Distribution contents1099321
 -Node: Unix Installation1105386
 -Node: Quick Installation1106069
 -Node: Shell Startup Files1108480
 -Node: Additional Configuration Options1109559
 -Node: Configuration Philosophy1111298
 -Node: Non-Unix Installation1113667
 -Node: PC Installation1114125
 -Node: PC Binary Installation1115444
 -Node: PC Compiling1117292
 -Ref: PC Compiling-Footnote-11120313
 -Node: PC Testing1120422
 -Node: PC Using1121598
 -Node: Cygwin1125713
 -Node: MSYS1126536
 -Node: VMS Installation1127036
 -Node: VMS Compilation1127828
 -Ref: VMS Compilation-Footnote-11129050
 -Node: VMS Dynamic Extensions1129108
 -Node: VMS Installation Details1130792
 -Node: VMS Running1133044
 -Node: VMS GNV1135880
 -Node: VMS Old Gawk1136614
 -Node: Bugs1137084
 -Node: Other Versions1140967
 -Node: Installation summary1147391
 -Node: Notes1148447
 -Node: Compatibility Mode1149312
 -Node: Additions1150094
 -Node: Accessing The Source1151019
 -Node: Adding Code1152454
 -Node: New Ports1158611
 -Node: Derived Files1163093
 -Ref: Derived Files-Footnote-11168568
 -Ref: Derived Files-Footnote-21168602
 -Ref: Derived Files-Footnote-31169198
 -Node: Future Extensions1169312
 -Node: Implementation Limitations1169918
 -Node: Extension Design1171166
 -Node: Old Extension Problems1172320
 -Ref: Old Extension Problems-Footnote-11173837
 -Node: Extension New Mechanism Goals1173894
 -Ref: Extension New Mechanism Goals-Footnote-11177254
 -Node: Extension Other Design Decisions1177443
 -Node: Extension Future Growth1179551
 -Node: Old Extension Mechanism1180387
 -Node: Notes summary1182149
 -Node: Basic Concepts1183335
 -Node: Basic High Level1184016
 -Ref: figure-general-flow1184288
 -Ref: figure-process-flow1184887
 -Ref: Basic High Level-Footnote-11188116
 -Node: Basic Data Typing1188301
 -Node: Glossary1191629
 -Node: Copying1223558
 -Node: GNU Free Documentation License1261114
 -Node: Index1286250
 +Node: Foreword342291
- Node: Foreword446733
- Node: Preface48255
- Ref: Preface-Footnote-151126
- Ref: Preface-Footnote-251233
- Ref: Preface-Footnote-351466
- Node: History51608
- Node: Names53954
- Ref: Names-Footnote-155048
- Node: This Manual55194
- Ref: This Manual-Footnote-161681
- Node: Conventions61781
- Node: Manual History64119
- Ref: Manual History-Footnote-167101
- Ref: Manual History-Footnote-267142
- Node: How To Contribute67216
- Node: Acknowledgments68345
- Node: Getting Started73150
- Node: Running gawk75583
- Node: One-shot76773
- Node: Read Terminal78021
- Node: Long80048
- Node: Executable Scripts81564
- Ref: Executable Scripts-Footnote-184353
- Node: Comments84456
- Node: Quoting86938
- Node: DOS Quoting92462
- Node: Sample Data Files93137
- Node: Very Simple95732
- Node: Two Rules100630
- Node: More Complex102516
- Node: Statements/Lines105378
- Ref: Statements/Lines-Footnote-1109833
- Node: Other Features110098
- Node: When111029
- Ref: When-Footnote-1112783
- Node: Intro Summary112848
- Node: Invoking Gawk113731
- Node: Command Line115245
- Node: Options116043
- Ref: Options-Footnote-1131847
- Ref: Options-Footnote-2132076
- Node: Other Arguments132101
- Node: Naming Standard Input135049
- Node: Environment Variables136142
- Node: AWKPATH Variable136700
- Ref: AWKPATH Variable-Footnote-1140113
- Ref: AWKPATH Variable-Footnote-2140158
- Node: AWKLIBPATH Variable140418
- Node: Other Environment Variables141674
- Node: Exit Status145162
- Node: Include Files145838
- Node: Loading Shared Libraries149435
- Node: Obsolete150862
- Node: Undocumented151559
- Node: Invoking Summary151826
- Node: Regexp153490
- Node: Regexp Usage154944
- Node: Escape Sequences156981
- Node: Regexp Operators163211
- Ref: Regexp Operators-Footnote-1170637
- Ref: Regexp Operators-Footnote-2170784
- Node: Bracket Expressions170882
- Ref: table-char-classes172897
- Node: Leftmost Longest175821
- Node: Computed Regexps177123
- Node: GNU Regexp Operators180520
- Node: Case-sensitivity184193
- Ref: Case-sensitivity-Footnote-1187078
- Ref: Case-sensitivity-Footnote-2187313
- Node: Regexp Summary187421
- Node: Reading Files188888
- Node: Records190982
- Node: awk split records191715
- Node: gawk split records196630
- Ref: gawk split records-Footnote-1201174
- Node: Fields201211
- Ref: Fields-Footnote-1203987
- Node: Nonconstant Fields204073
- Ref: Nonconstant Fields-Footnote-1206316
- Node: Changing Fields206520
- Node: Field Separators212449
- Node: Default Field Splitting215154
- Node: Regexp Field Splitting216271
- Node: Single Character Fields219621
- Node: Command Line Field Separator220680
- Node: Full Line Fields223892
- Ref: Full Line Fields-Footnote-1225409
- Ref: Full Line Fields-Footnote-2225455
- Node: Field Splitting Summary225556
- Node: Constant Size227630
- Node: Splitting By Content232219
- Ref: Splitting By Content-Footnote-1236213
- Node: Multiple Line236376
- Ref: Multiple Line-Footnote-1242262
- Node: Getline242441
- Node: Plain Getline244653
- Node: Getline/Variable247293
- Node: Getline/File248441
- Node: Getline/Variable/File249825
- Ref: Getline/Variable/File-Footnote-1251428
- Node: Getline/Pipe251515
- Node: Getline/Variable/Pipe254198
- Node: Getline/Coprocess255329
- Node: Getline/Variable/Coprocess256581
- Node: Getline Notes257320
- Node: Getline Summary260112
- Ref: table-getline-variants260524
- Node: Read Timeout261353
- Ref: Read Timeout-Footnote-1265178
- Node: Command-line directories265236
- Node: Input Summary266141
- Node: Input Exercises269442
- Node: Printing270170
- Node: Print272005
- Node: Print Examples273462
- Node: Output Separators276241
- Node: OFMT278259
- Node: Printf279613
- Node: Basic Printf280398
- Node: Control Letters281968
- Node: Format Modifiers285951
- Node: Printf Examples291960
- Node: Redirection294446
- Node: Special FD301287
- Ref: Special FD-Footnote-1304447
- Node: Special Files304521
- Node: Other Inherited Files305138
- Node: Special Network306138
- Node: Special Caveats307000
- Node: Close Files And Pipes307951
- Ref: Close Files And Pipes-Footnote-1315127
- Ref: Close Files And Pipes-Footnote-2315275
- Node: Nonfatal315425
- Node: Output Summary317348
- Node: Output Exercises318569
- Node: Expressions319249
- Node: Values320434
- Node: Constants321112
- Node: Scalar Constants321803
- Ref: Scalar Constants-Footnote-1322662
- Node: Nondecimal-numbers322912
- Node: Regexp Constants325930
- Node: Using Constant Regexps326455
- Node: Variables329598
- Node: Using Variables330253
- Node: Assignment Options332164
- Node: Conversion334039
- Node: Strings And Numbers334563
- Ref: Strings And Numbers-Footnote-1337628
- Node: Locale influences conversions337737
- Ref: table-locale-affects340484
- Node: All Operators341072
- Node: Arithmetic Ops341702
- Node: Concatenation344207
- Ref: Concatenation-Footnote-1347026
- Node: Assignment Ops347132
- Ref: table-assign-ops352111
- Node: Increment Ops353383
- Node: Truth Values and Conditions356821
- Node: Truth Values357906
- Node: Typing and Comparison358955
- Node: Variable Typing359765
- Node: Comparison Operators363418
- Ref: table-relational-ops363828
- Node: POSIX String Comparison367323
- Ref: POSIX String Comparison-Footnote-1368395
- Node: Boolean Ops368533
- Ref: Boolean Ops-Footnote-1373012
- Node: Conditional Exp373103
- Node: Function Calls374830
- Node: Precedence378710
- Node: Locales382371
- Node: Expressions Summary384003
- Node: Patterns and Actions386563
- Node: Pattern Overview387683
- Node: Regexp Patterns389362
- Node: Expression Patterns389905
- Node: Ranges393615
- Node: BEGIN/END396721
- Node: Using BEGIN/END397482
- Ref: Using BEGIN/END-Footnote-1400216
- Node: I/O And BEGIN/END400322
- Node: BEGINFILE/ENDFILE402636
- Node: Empty405537
- Node: Using Shell Variables405854
- Node: Action Overview408127
- Node: Statements410453
- Node: If Statement412301
- Node: While Statement413796
- Node: Do Statement415825
- Node: For Statement416969
- Node: Switch Statement420126
- Node: Break Statement422508
- Node: Continue Statement424549
- Node: Next Statement426376
- Node: Nextfile Statement428757
- Node: Exit Statement431387
- Node: Built-in Variables433790
- Node: User-modified434923
- Ref: User-modified-Footnote-1442604
- Node: Auto-set442666
- Ref: Auto-set-Footnote-1456358
- Ref: Auto-set-Footnote-2456563
- Node: ARGC and ARGV456619
- Node: Pattern Action Summary460837
- Node: Arrays463264
- Node: Array Basics464593
- Node: Array Intro465437
- Ref: figure-array-elements467401
- Ref: Array Intro-Footnote-1469927
- Node: Reference to Elements470055
- Node: Assigning Elements472507
- Node: Array Example472998
- Node: Scanning an Array474756
- Node: Controlling Scanning477772
- Ref: Controlling Scanning-Footnote-1482968
- Node: Numeric Array Subscripts483284
- Node: Uninitialized Subscripts485469
- Node: Delete487086
- Ref: Delete-Footnote-1489829
- Node: Multidimensional489886
- Node: Multiscanning492983
- Node: Arrays of Arrays494572
- Node: Arrays Summary499331
- Node: Functions501423
- Node: Built-in502322
- Node: Calling Built-in503400
- Node: Numeric Functions505391
- Ref: Numeric Functions-Footnote-1510210
- Ref: Numeric Functions-Footnote-2510567
- Ref: Numeric Functions-Footnote-3510615
- Node: String Functions510887
- Ref: String Functions-Footnote-1534362
- Ref: String Functions-Footnote-2534491
- Ref: String Functions-Footnote-3534739
- Node: Gory Details534826
- Ref: table-sub-escapes536607
- Ref: table-sub-proposed538127
- Ref: table-posix-sub539491
- Ref: table-gensub-escapes541027
- Ref: Gory Details-Footnote-1541859
- Node: I/O Functions542010
- Ref: I/O Functions-Footnote-1549228
- Node: Time Functions549375
- Ref: Time Functions-Footnote-1559863
- Ref: Time Functions-Footnote-2559931
- Ref: Time Functions-Footnote-3560089
- Ref: Time Functions-Footnote-4560200
- Ref: Time Functions-Footnote-5560312
- Ref: Time Functions-Footnote-6560539
- Node: Bitwise Functions560805
- Ref: table-bitwise-ops561367
- Ref: Bitwise Functions-Footnote-1565676
- Node: Type Functions565845
- Node: I18N Functions566996
- Node: User-defined568641
- Node: Definition Syntax569446
- Ref: Definition Syntax-Footnote-1574853
- Node: Function Example574924
- Ref: Function Example-Footnote-1577843
- Node: Function Caveats577865
- Node: Calling A Function578383
- Node: Variable Scope579341
- Node: Pass By Value/Reference582329
- Node: Return Statement585824
- Node: Dynamic Typing588805
- Node: Indirect Calls589734
- Ref: Indirect Calls-Footnote-1601036
- Node: Functions Summary601164
- Node: Library Functions603866
- Ref: Library Functions-Footnote-1607475
- Ref: Library Functions-Footnote-2607618
- Node: Library Names607789
- Ref: Library Names-Footnote-1611243
- Ref: Library Names-Footnote-2611466
- Node: General Functions611552
- Node: Strtonum Function612655
- Node: Assert Function615677
- Node: Round Function619001
- Node: Cliff Random Function620542
- Node: Ordinal Functions621558
- Ref: Ordinal Functions-Footnote-1624621
- Ref: Ordinal Functions-Footnote-2624873
- Node: Join Function625084
- Ref: Join Function-Footnote-1626853
- Node: Getlocaltime Function627053
- Node: Readfile Function630797
- Node: Shell Quoting632767
- Node: Data File Management634168
- Node: Filetrans Function634800
- Node: Rewind Function638856
- Node: File Checking640243
- Ref: File Checking-Footnote-1641575
- Node: Empty Files641776
- Node: Ignoring Assigns643755
- Node: Getopt Function645306
- Ref: Getopt Function-Footnote-1656768
- Node: Passwd Functions656968
- Ref: Passwd Functions-Footnote-1665805
- Node: Group Functions665893
- Ref: Group Functions-Footnote-1673787
- Node: Walking Arrays674000
- Node: Library Functions Summary675603
- Node: Library Exercises677004
- Node: Sample Programs678284
- Node: Running Examples679054
- Node: Clones679782
- Node: Cut Program681006
- Node: Egrep Program690725
- Ref: Egrep Program-Footnote-1698223
- Node: Id Program698333
- Node: Split Program701978
- Ref: Split Program-Footnote-1705426
- Node: Tee Program705554
- Node: Uniq Program708343
- Node: Wc Program715762
- Ref: Wc Program-Footnote-1720012
- Node: Miscellaneous Programs720106
- Node: Dupword Program721319
- Node: Alarm Program723350
- Node: Translate Program728154
- Ref: Translate Program-Footnote-1732719
- Node: Labels Program732989
- Ref: Labels Program-Footnote-1736340
- Node: Word Sorting736424
- Node: History Sorting740495
- Node: Extract Program742331
- Node: Simple Sed749856
- Node: Igawk Program752924
- Ref: Igawk Program-Footnote-1767248
- Ref: Igawk Program-Footnote-2767449
- Ref: Igawk Program-Footnote-3767571
- Node: Anagram Program767686
- Node: Signature Program770743
- Node: Programs Summary771990
- Node: Programs Exercises773183
- Ref: Programs Exercises-Footnote-1777314
- Node: Advanced Features777405
- Node: Nondecimal Data779353
- Node: Array Sorting780943
- Node: Controlling Array Traversal781640
- Ref: Controlling Array Traversal-Footnote-1789973
- Node: Array Sorting Functions790091
- Ref: Array Sorting Functions-Footnote-1793980
- Node: Two-way I/O794176
- Ref: Two-way I/O-Footnote-1799121
- Ref: Two-way I/O-Footnote-2799307
- Node: TCP/IP Networking799389
- Node: Profiling802262
- Node: Advanced Features Summary810539
- Node: Internationalization812472
- Node: I18N and L10N813952
- Node: Explaining gettext814638
- Ref: Explaining gettext-Footnote-1819663
- Ref: Explaining gettext-Footnote-2819847
- Node: Programmer i18n820012
- Ref: Programmer i18n-Footnote-1824878
- Node: Translator i18n824927
- Node: String Extraction825721
- Ref: String Extraction-Footnote-1826852
- Node: Printf Ordering826938
- Ref: Printf Ordering-Footnote-1829724
- Node: I18N Portability829788
- Ref: I18N Portability-Footnote-1832243
- Node: I18N Example832306
- Ref: I18N Example-Footnote-1835109
- Node: Gawk I18N835181
- Node: I18N Summary835819
- Node: Debugger837158
- Node: Debugging838180
- Node: Debugging Concepts838621
- Node: Debugging Terms840474
- Node: Awk Debugging843046
- Node: Sample Debugging Session843940
- Node: Debugger Invocation844460
- Node: Finding The Bug845844
- Node: List of Debugger Commands852319
- Node: Breakpoint Control853652
- Node: Debugger Execution Control857348
- Node: Viewing And Changing Data860712
- Node: Execution Stack864090
- Node: Debugger Info865727
- Node: Miscellaneous Debugger Commands869744
- Node: Readline Support874773
- Node: Limitations875665
- Node: Debugging Summary877779
- Node: Arbitrary Precision Arithmetic878947
- Node: Computer Arithmetic880363
- Ref: table-numeric-ranges883961
- Ref: Computer Arithmetic-Footnote-1884820
- Node: Math Definitions884877
- Ref: table-ieee-formats888165
- Ref: Math Definitions-Footnote-1888769
- Node: MPFR features888874
- Node: FP Math Caution890545
- Ref: FP Math Caution-Footnote-1891595
- Node: Inexactness of computations891964
- Node: Inexact representation892923
- Node: Comparing FP Values894280
- Node: Errors accumulate895362
- Node: Getting Accuracy896795
- Node: Try To Round899457
- Node: Setting precision900356
- Ref: table-predefined-precision-strings901040
- Node: Setting the rounding mode902829
- Ref: table-gawk-rounding-modes903193
- Ref: Setting the rounding mode-Footnote-1906648
- Node: Arbitrary Precision Integers906827
- Ref: Arbitrary Precision Integers-Footnote-1911726
- Node: POSIX Floating Point Problems911875
- Ref: POSIX Floating Point Problems-Footnote-1915748
- Node: Floating point summary915786
- Node: Dynamic Extensions917980
- Node: Extension Intro919532
- Node: Plugin License920798
- Node: Extension Mechanism Outline921595
- Ref: figure-load-extension922023
- Ref: figure-register-new-function923503
- Ref: figure-call-new-function924507
- Node: Extension API Description926493
- Node: Extension API Functions Introduction927943
- Node: General Data Types932767
- Ref: General Data Types-Footnote-1938506
- Node: Memory Allocation Functions938805
- Ref: Memory Allocation Functions-Footnote-1941644
- Node: Constructor Functions941740
- Node: Registration Functions943474
- Node: Extension Functions944159
- Node: Exit Callback Functions946456
- Node: Extension Version String947704
- Node: Input Parsers948369
- Node: Output Wrappers958248
- Node: Two-way processors962763
- Node: Printing Messages964967
- Ref: Printing Messages-Footnote-1966043
- Node: Updating `ERRNO'966195
- Node: Requesting Values966935
- Ref: table-value-types-returned967663
- Node: Accessing Parameters968620
- Node: Symbol Table Access969851
- Node: Symbol table by name970365
- Node: Symbol table by cookie972346
- Ref: Symbol table by cookie-Footnote-1976490
- Node: Cached values976553
- Ref: Cached values-Footnote-1980052
- Node: Array Manipulation980143
- Ref: Array Manipulation-Footnote-1981241
- Node: Array Data Types981278
- Ref: Array Data Types-Footnote-1983933
- Node: Array Functions984025
- Node: Flattening Arrays987879
- Node: Creating Arrays994771
- Node: Extension API Variables999542
- Node: Extension Versioning1000178
- Node: Extension API Informational Variables1002079
- Node: Extension API Boilerplate1003144
- Node: Finding Extensions1006953
- Node: Extension Example1007513
- Node: Internal File Description1008285
- Node: Internal File Ops1012352
- Ref: Internal File Ops-Footnote-11024022
- Node: Using Internal File Ops1024162
- Ref: Using Internal File Ops-Footnote-11026545
- Node: Extension Samples1026818
- Node: Extension Sample File Functions1028344
- Node: Extension Sample Fnmatch1035982
- Node: Extension Sample Fork1037473
- Node: Extension Sample Inplace1038688
- Node: Extension Sample Ord1040363
- Node: Extension Sample Readdir1041199
- Ref: table-readdir-file-types1042075
- Node: Extension Sample Revout1042886
- Node: Extension Sample Rev2way1043476
- Node: Extension Sample Read write array1044216
- Node: Extension Sample Readfile1046156
- Node: Extension Sample Time1047251
- Node: Extension Sample API Tests1048600
- Node: gawkextlib1049091
- Node: Extension summary1051749
- Node: Extension Exercises1055438
- Node: Language History1056160
- Node: V7/SVR3.11057816
- Node: SVR41059997
- Node: POSIX1061442
- Node: BTL1062831
- Node: POSIX/GNU1063565
- Node: Feature History1069446
- Node: Common Extensions1083240
- Node: Ranges and Locales1084564
- Ref: Ranges and Locales-Footnote-11089182
- Ref: Ranges and Locales-Footnote-21089209
- Ref: Ranges and Locales-Footnote-31089443
- Node: Contributors1089664
- Node: History summary1095205
- Node: Installation1096575
- Node: Gawk Distribution1097521
- Node: Getting1098005
- Node: Extracting1098828
- Node: Distribution contents1100463
- Node: Unix Installation1106528
- Node: Quick Installation1107211
- Node: Shell Startup Files1109622
- Node: Additional Configuration Options1110701
- Node: Configuration Philosophy1112440
- Node: Non-Unix Installation1114809
- Node: PC Installation1115267
- Node: PC Binary Installation1116586
- Node: PC Compiling1118434
- Ref: PC Compiling-Footnote-11121455
- Node: PC Testing1121564
- Node: PC Using1122740
- Node: Cygwin1126855
- Node: MSYS1127678
- Node: VMS Installation1128178
- Node: VMS Compilation1128970
- Ref: VMS Compilation-Footnote-11130192
- Node: VMS Dynamic Extensions1130250
- Node: VMS Installation Details1131934
- Node: VMS Running1134186
- Node: VMS GNV1137022
- Node: VMS Old Gawk1137756
- Node: Bugs1138226
- Node: Other Versions1142109
- Node: Installation summary1148537
- Node: Notes1149593
- Node: Compatibility Mode1150458
- Node: Additions1151240
- Node: Accessing The Source1152165
- Node: Adding Code1153601
- Node: New Ports1159766
- Node: Derived Files1164248
- Ref: Derived Files-Footnote-11169723
- Ref: Derived Files-Footnote-21169757
- Ref: Derived Files-Footnote-31170353
- Node: Future Extensions1170467
- Node: Implementation Limitations1171073
- Node: Extension Design1172321
- Node: Old Extension Problems1173475
- Ref: Old Extension Problems-Footnote-11174992
- Node: Extension New Mechanism Goals1175049
- Ref: Extension New Mechanism Goals-Footnote-11178409
- Node: Extension Other Design Decisions1178598
- Node: Extension Future Growth1180706
- Node: Old Extension Mechanism1181542
- Node: Notes summary1183304
- Node: Basic Concepts1184490
- Node: Basic High Level1185171
- Ref: figure-general-flow1185443
- Ref: figure-process-flow1186042
- Ref: Basic High Level-Footnote-11189271
- Node: Basic Data Typing1189456
- Node: Glossary1192784
- Node: Copying1217942
- Node: GNU Free Documentation License1255498
- Node: Index1280634
++Node: Foreword446735
++Node: Preface48266
++Ref: Preface-Footnote-151137
++Ref: Preface-Footnote-251244
++Ref: Preface-Footnote-351477
++Node: History51619
++Node: Names53970
++Ref: Names-Footnote-155063
++Node: This Manual55209
++Ref: This Manual-Footnote-161709
++Node: Conventions61809
++Node: Manual History64146
++Ref: Manual History-Footnote-167139
++Ref: Manual History-Footnote-267180
++Node: How To Contribute67254
++Node: Acknowledgments68383
++Node: Getting Started73200
++Node: Running gawk75639
++Node: One-shot76829
++Node: Read Terminal78093
++Node: Long80124
++Node: Executable Scripts81637
++Ref: Executable Scripts-Footnote-184426
++Node: Comments84529
++Node: Quoting87011
++Node: DOS Quoting92529
++Node: Sample Data Files93204
++Node: Very Simple95799
++Node: Two Rules100698
++Node: More Complex102584
++Node: Statements/Lines105446
++Ref: Statements/Lines-Footnote-1109901
++Node: Other Features110166
++Node: When111102
++Ref: When-Footnote-1112856
++Node: Intro Summary112921
++Node: Invoking Gawk113805
++Node: Command Line115319
++Node: Options116117
++Ref: Options-Footnote-1131912
++Ref: Options-Footnote-2132141
++Node: Other Arguments132166
++Node: Naming Standard Input135114
++Node: Environment Variables136207
++Node: AWKPATH Variable136765
++Ref: AWKPATH Variable-Footnote-1140172
++Ref: AWKPATH Variable-Footnote-2140217
++Node: AWKLIBPATH Variable140477
++Node: Other Environment Variables141733
++Node: Exit Status145251
++Node: Include Files145927
++Node: Loading Shared Libraries149516
++Node: Obsolete150943
++Node: Undocumented151635
++Node: Invoking Summary151902
++Node: Regexp153565
++Node: Regexp Usage155019
++Node: Escape Sequences157056
++Node: Regexp Operators163285
++Ref: Regexp Operators-Footnote-1170695
++Ref: Regexp Operators-Footnote-2170842
++Node: Bracket Expressions170940
++Ref: table-char-classes172955
++Node: Leftmost Longest175897
++Node: Computed Regexps177199
++Node: GNU Regexp Operators180628
++Node: Case-sensitivity184300
++Ref: Case-sensitivity-Footnote-1187185
++Ref: Case-sensitivity-Footnote-2187420
++Node: Regexp Summary187528
++Node: Reading Files188995
++Node: Records191088
++Node: awk split records191821
++Node: gawk split records196750
++Ref: gawk split records-Footnote-1201289
++Node: Fields201326
++Ref: Fields-Footnote-1204104
++Node: Nonconstant Fields204190
++Ref: Nonconstant Fields-Footnote-1206428
++Node: Changing Fields206631
++Node: Field Separators212562
++Node: Default Field Splitting215266
++Node: Regexp Field Splitting216383
++Node: Single Character Fields219733
++Node: Command Line Field Separator220792
++Node: Full Line Fields224009
++Ref: Full Line Fields-Footnote-1225530
++Ref: Full Line Fields-Footnote-2225576
++Node: Field Splitting Summary225677
++Node: Constant Size227751
++Node: Splitting By Content232334
++Ref: Splitting By Content-Footnote-1236299
++Node: Multiple Line236462
++Ref: Multiple Line-Footnote-1242343
++Node: Getline242522
++Node: Plain Getline244729
++Node: Getline/Variable247369
++Node: Getline/File248518
++Node: Getline/Variable/File249903
++Ref: Getline/Variable/File-Footnote-1251506
++Node: Getline/Pipe251593
++Node: Getline/Variable/Pipe254271
++Node: Getline/Coprocess255402
++Node: Getline/Variable/Coprocess256666
++Node: Getline Notes257405
++Node: Getline Summary260199
++Ref: table-getline-variants260611
++Node: Read Timeout261440
++Ref: Read Timeout-Footnote-1265277
++Node: Command-line directories265335
++Node: Input Summary266240
++Node: Input Exercises269625
++Node: Printing270353
++Node: Print272188
++Node: Print Examples273645
++Node: Output Separators276424
++Node: OFMT278442
++Node: Printf279797
++Node: Basic Printf280582
++Node: Control Letters282154
++Node: Format Modifiers286139
++Node: Printf Examples292149
++Node: Redirection294635
++Node: Special FD301473
++Ref: Special FD-Footnote-1304639
++Node: Special Files304713
++Node: Other Inherited Files305330
++Node: Special Network306330
++Node: Special Caveats307192
++Node: Close Files And Pipes308141
++Ref: Close Files And Pipes-Footnote-1315326
++Ref: Close Files And Pipes-Footnote-2315474
++Node: Nonfatal315624
++Node: Output Summary317547
++Node: Output Exercises318768
++Node: Expressions319448
++Node: Values320637
++Node: Constants321314
++Node: Scalar Constants322005
++Ref: Scalar Constants-Footnote-1322867
++Node: Nondecimal-numbers323117
++Node: Regexp Constants326127
++Node: Using Constant Regexps326653
++Node: Variables329816
++Node: Using Variables330473
++Node: Assignment Options332384
++Node: Conversion334259
++Node: Strings And Numbers334783
++Ref: Strings And Numbers-Footnote-1337848
++Node: Locale influences conversions337957
++Ref: table-locale-affects340703
++Node: All Operators341295
++Node: Arithmetic Ops341924
++Node: Concatenation344429
++Ref: Concatenation-Footnote-1347248
++Node: Assignment Ops347355
++Ref: table-assign-ops352334
++Node: Increment Ops353644
++Node: Truth Values and Conditions357075
++Node: Truth Values358158
++Node: Typing and Comparison359207
++Node: Variable Typing360023
++Node: Comparison Operators363690
++Ref: table-relational-ops364100
++Node: POSIX String Comparison367595
++Ref: POSIX String Comparison-Footnote-1368667
++Node: Boolean Ops368806
++Ref: Boolean Ops-Footnote-1373284
++Node: Conditional Exp373375
++Node: Function Calls375113
++Node: Precedence378993
++Node: Locales382653
++Node: Expressions Summary384285
++Node: Patterns and Actions386856
++Node: Pattern Overview387976
++Node: Regexp Patterns389655
++Node: Expression Patterns390198
++Node: Ranges393907
++Node: BEGIN/END397014
++Node: Using BEGIN/END397775
++Ref: Using BEGIN/END-Footnote-1400511
++Node: I/O And BEGIN/END400617
++Node: BEGINFILE/ENDFILE402932
++Node: Empty405829
++Node: Using Shell Variables406146
++Node: Action Overview408419
++Node: Statements410745
++Node: If Statement412593
++Node: While Statement414088
++Node: Do Statement416116
++Node: For Statement417264
++Node: Switch Statement420422
++Node: Break Statement422804
++Node: Continue Statement424845
++Node: Next Statement426672
++Node: Nextfile Statement429053
++Node: Exit Statement431681
++Node: Built-in Variables434092
++Node: User-modified435225
++Ref: User-modified-Footnote-1442928
++Node: Auto-set442990
++Ref: Auto-set-Footnote-1456699
++Ref: Auto-set-Footnote-2456904
++Node: ARGC and ARGV456960
++Node: Pattern Action Summary461178
++Node: Arrays463611
++Node: Array Basics464940
++Node: Array Intro465784
++Ref: figure-array-elements467718
++Ref: Array Intro-Footnote-1470338
++Node: Reference to Elements470466
++Node: Assigning Elements472928
++Node: Array Example473419
++Node: Scanning an Array475178
++Node: Controlling Scanning478198
++Ref: Controlling Scanning-Footnote-1483592
++Node: Numeric Array Subscripts483908
++Node: Uninitialized Subscripts486093
++Node: Delete487710
++Ref: Delete-Footnote-1490459
++Node: Multidimensional490516
++Node: Multiscanning493613
++Node: Arrays of Arrays495202
++Node: Arrays Summary499956
++Node: Functions502047
++Node: Built-in503086
++Node: Calling Built-in504164
++Node: Numeric Functions506159
++Ref: Numeric Functions-Footnote-1510977
++Ref: Numeric Functions-Footnote-2511334
++Ref: Numeric Functions-Footnote-3511382
++Node: String Functions511654
++Ref: String Functions-Footnote-1535155
++Ref: String Functions-Footnote-2535284
++Ref: String Functions-Footnote-3535532
++Node: Gory Details535619
++Ref: table-sub-escapes537400
++Ref: table-sub-proposed538915
++Ref: table-posix-sub540277
++Ref: table-gensub-escapes541814
++Ref: Gory Details-Footnote-1542647
++Node: I/O Functions542798
++Ref: I/O Functions-Footnote-1550034
++Node: Time Functions550181
++Ref: Time Functions-Footnote-1560690
++Ref: Time Functions-Footnote-2560758
++Ref: Time Functions-Footnote-3560916
++Ref: Time Functions-Footnote-4561027
++Ref: Time Functions-Footnote-5561139
++Ref: Time Functions-Footnote-6561366
++Node: Bitwise Functions561632
++Ref: table-bitwise-ops562194
++Ref: Bitwise Functions-Footnote-1566522
++Node: Type Functions566694
++Node: I18N Functions567846
++Node: User-defined569493
++Node: Definition Syntax570298
++Ref: Definition Syntax-Footnote-1575957
++Node: Function Example576028
++Ref: Function Example-Footnote-1578949
++Node: Function Caveats578971
++Node: Calling A Function579489
++Node: Variable Scope580447
++Node: Pass By Value/Reference583440
++Node: Return Statement586937
++Node: Dynamic Typing589916
++Node: Indirect Calls590845
++Ref: Indirect Calls-Footnote-1602151
++Node: Functions Summary602279
++Node: Library Functions604981
++Ref: Library Functions-Footnote-1608589
++Ref: Library Functions-Footnote-2608732
++Node: Library Names608903
++Ref: Library Names-Footnote-1612361
++Ref: Library Names-Footnote-2612584
++Node: General Functions612670
++Node: Strtonum Function613773
++Node: Assert Function616795
++Node: Round Function620119
++Node: Cliff Random Function621660
++Node: Ordinal Functions622676
++Ref: Ordinal Functions-Footnote-1625739
++Ref: Ordinal Functions-Footnote-2625991
++Node: Join Function626202
++Ref: Join Function-Footnote-1627972
++Node: Getlocaltime Function628172
++Node: Readfile Function631916
++Node: Shell Quoting633888
++Node: Data File Management635289
++Node: Filetrans Function635921
++Node: Rewind Function640017
++Node: File Checking641403
++Ref: File Checking-Footnote-1642736
++Node: Empty Files642937
++Node: Ignoring Assigns644916
++Node: Getopt Function646466
++Ref: Getopt Function-Footnote-1657930
++Node: Passwd Functions658130
++Ref: Passwd Functions-Footnote-1666970
++Node: Group Functions667058
++Ref: Group Functions-Footnote-1674955
++Node: Walking Arrays675160
++Node: Library Functions Summary676760
++Node: Library Exercises678164
++Node: Sample Programs679444
++Node: Running Examples680214
++Node: Clones680942
++Node: Cut Program682166
++Node: Egrep Program691886
++Ref: Egrep Program-Footnote-1699389
++Node: Id Program699499
++Node: Split Program703175
++Ref: Split Program-Footnote-1706629
++Node: Tee Program706757
++Node: Uniq Program709546
++Node: Wc Program716965
++Ref: Wc Program-Footnote-1721215
++Node: Miscellaneous Programs721309
++Node: Dupword Program722522
++Node: Alarm Program724553
++Node: Translate Program729358
++Ref: Translate Program-Footnote-1733921
++Node: Labels Program734191
++Ref: Labels Program-Footnote-1737542
++Node: Word Sorting737626
++Node: History Sorting741696
++Node: Extract Program743531
++Node: Simple Sed751055
++Node: Igawk Program754125
++Ref: Igawk Program-Footnote-1768451
++Ref: Igawk Program-Footnote-2768652
++Ref: Igawk Program-Footnote-3768774
++Node: Anagram Program768889
++Node: Signature Program771950
++Node: Programs Summary773197
++Node: Programs Exercises774418
++Ref: Programs Exercises-Footnote-1778549
++Node: Advanced Features778640
++Node: Nondecimal Data780622
++Node: Array Sorting782212
++Node: Controlling Array Traversal782912
++Ref: Controlling Array Traversal-Footnote-1791278
++Node: Array Sorting Functions791396
++Ref: Array Sorting Functions-Footnote-1795282
++Node: Two-way I/O795478
++Ref: Two-way I/O-Footnote-1800423
++Ref: Two-way I/O-Footnote-2800609
++Node: TCP/IP Networking800691
++Node: Profiling803563
++Node: Advanced Features Summary811834
++Node: Internationalization813767
++Node: I18N and L10N815247
++Node: Explaining gettext815933
++Ref: Explaining gettext-Footnote-1820958
++Ref: Explaining gettext-Footnote-2821142
++Node: Programmer i18n821307
++Ref: Programmer i18n-Footnote-1826183
++Node: Translator i18n826232
++Node: String Extraction827026
++Ref: String Extraction-Footnote-1828157
++Node: Printf Ordering828243
++Ref: Printf Ordering-Footnote-1831029
++Node: I18N Portability831093
++Ref: I18N Portability-Footnote-1833549
++Node: I18N Example833612
++Ref: I18N Example-Footnote-1836415
++Node: Gawk I18N836487
++Node: I18N Summary837131
++Node: Debugger838471
++Node: Debugging839493
++Node: Debugging Concepts839934
++Node: Debugging Terms841744
++Node: Awk Debugging844316
++Node: Sample Debugging Session845222
++Node: Debugger Invocation845756
++Node: Finding The Bug847141
++Node: List of Debugger Commands853620
++Node: Breakpoint Control854952
++Node: Debugger Execution Control858629
++Node: Viewing And Changing Data861988
++Node: Execution Stack865364
++Node: Debugger Info866999
++Node: Miscellaneous Debugger Commands871044
++Node: Readline Support876045
++Node: Limitations876939
++Node: Debugging Summary879054
++Node: Arbitrary Precision Arithmetic880228
++Node: Computer Arithmetic881644
++Ref: table-numeric-ranges885242
++Ref: Computer Arithmetic-Footnote-1886101
++Node: Math Definitions886158
++Ref: table-ieee-formats889446
++Ref: Math Definitions-Footnote-1890050
++Node: MPFR features890155
++Node: FP Math Caution891826
++Ref: FP Math Caution-Footnote-1892876
++Node: Inexactness of computations893245
++Node: Inexact representation894204
++Node: Comparing FP Values895561
++Node: Errors accumulate896643
++Node: Getting Accuracy898076
++Node: Try To Round900738
++Node: Setting precision901637
++Ref: table-predefined-precision-strings902321
++Node: Setting the rounding mode904110
++Ref: table-gawk-rounding-modes904474
++Ref: Setting the rounding mode-Footnote-1907929
++Node: Arbitrary Precision Integers908108
++Ref: Arbitrary Precision Integers-Footnote-1913008
++Node: POSIX Floating Point Problems913157
++Ref: POSIX Floating Point Problems-Footnote-1917030
++Node: Floating point summary917068
++Node: Dynamic Extensions919262
++Node: Extension Intro920814
++Node: Plugin License922080
++Node: Extension Mechanism Outline922877
++Ref: figure-load-extension923305
++Ref: figure-register-new-function924785
++Ref: figure-call-new-function925789
++Node: Extension API Description927775
++Node: Extension API Functions Introduction929225
++Node: General Data Types934049
++Ref: General Data Types-Footnote-1939788
++Node: Memory Allocation Functions940087
++Ref: Memory Allocation Functions-Footnote-1942926
++Node: Constructor Functions943022
++Node: Registration Functions944756
++Node: Extension Functions945441
++Node: Exit Callback Functions947738
++Node: Extension Version String948986
++Node: Input Parsers949651
++Node: Output Wrappers959530
++Node: Two-way processors964045
++Node: Printing Messages966249
++Ref: Printing Messages-Footnote-1967325
++Node: Updating `ERRNO'967477
++Node: Requesting Values968217
++Ref: table-value-types-returned968945
++Node: Accessing Parameters969902
++Node: Symbol Table Access971133
++Node: Symbol table by name971647
++Node: Symbol table by cookie973628
++Ref: Symbol table by cookie-Footnote-1977772
++Node: Cached values977835
++Ref: Cached values-Footnote-1981334
++Node: Array Manipulation981425
++Ref: Array Manipulation-Footnote-1982523
++Node: Array Data Types982560
++Ref: Array Data Types-Footnote-1985215
++Node: Array Functions985307
++Node: Flattening Arrays989161
++Node: Creating Arrays996053
++Node: Extension API Variables1000824
++Node: Extension Versioning1001460
++Node: Extension API Informational Variables1003361
++Node: Extension API Boilerplate1004426
++Node: Finding Extensions1008235
++Node: Extension Example1008795
++Node: Internal File Description1009567
++Node: Internal File Ops1013634
++Ref: Internal File Ops-Footnote-11025304
++Node: Using Internal File Ops1025444
++Ref: Using Internal File Ops-Footnote-11027827
++Node: Extension Samples1028100
++Node: Extension Sample File Functions1029626
++Node: Extension Sample Fnmatch1037264
++Node: Extension Sample Fork1038755
++Node: Extension Sample Inplace1039970
++Node: Extension Sample Ord1041645
++Node: Extension Sample Readdir1042481
++Ref: table-readdir-file-types1043357
++Node: Extension Sample Revout1044168
++Node: Extension Sample Rev2way1044758
++Node: Extension Sample Read write array1045498
++Node: Extension Sample Readfile1047438
++Node: Extension Sample Time1048533
++Node: Extension Sample API Tests1049882
++Node: gawkextlib1050373
++Node: Extension summary1053031
++Node: Extension Exercises1056720
++Node: Language History1057442
++Node: V7/SVR3.11059098
++Node: SVR41061279
++Node: POSIX1062724
++Node: BTL1064113
++Node: POSIX/GNU1064847
++Node: Feature History1070728
++Node: Common Extensions1084522
++Node: Ranges and Locales1085846
++Ref: Ranges and Locales-Footnote-11090464
++Ref: Ranges and Locales-Footnote-21090491
++Ref: Ranges and Locales-Footnote-31090725
++Node: Contributors1090946
++Node: History summary1096487
++Node: Installation1097857
++Node: Gawk Distribution1098803
++Node: Getting1099287
++Node: Extracting1100110
++Node: Distribution contents1101745
++Node: Unix Installation1107810
++Node: Quick Installation1108493
++Node: Shell Startup Files1110904
++Node: Additional Configuration Options1111983
++Node: Configuration Philosophy1113722
++Node: Non-Unix Installation1116091
++Node: PC Installation1116549
++Node: PC Binary Installation1117868
++Node: PC Compiling1119716
++Ref: PC Compiling-Footnote-11122737
++Node: PC Testing1122846
++Node: PC Using1124022
++Node: Cygwin1128137
++Node: MSYS1128960
++Node: VMS Installation1129460
++Node: VMS Compilation1130252
++Ref: VMS Compilation-Footnote-11131474
++Node: VMS Dynamic Extensions1131532
++Node: VMS Installation Details1133216
++Node: VMS Running1135468
++Node: VMS GNV1138304
++Node: VMS Old Gawk1139038
++Node: Bugs1139508
++Node: Other Versions1143391
++Node: Installation summary1149815
++Node: Notes1150871
++Node: Compatibility Mode1151736
++Node: Additions1152518
++Node: Accessing The Source1153443
++Node: Adding Code1154878
++Node: New Ports1161035
++Node: Derived Files1165517
++Ref: Derived Files-Footnote-11170992
++Ref: Derived Files-Footnote-21171026
++Ref: Derived Files-Footnote-31171622
++Node: Future Extensions1171736
++Node: Implementation Limitations1172342
++Node: Extension Design1173590
++Node: Old Extension Problems1174744
++Ref: Old Extension Problems-Footnote-11176261
++Node: Extension New Mechanism Goals1176318
++Ref: Extension New Mechanism Goals-Footnote-11179678
++Node: Extension Other Design Decisions1179867
++Node: Extension Future Growth1181975
++Node: Old Extension Mechanism1182811
++Node: Notes summary1184573
++Node: Basic Concepts1185759
++Node: Basic High Level1186440
++Ref: figure-general-flow1186712
++Ref: figure-process-flow1187311
++Ref: Basic High Level-Footnote-11190540
++Node: Basic Data Typing1190725
++Node: Glossary1194053
++Node: Copying1225982
++Node: GNU Free Documentation License1263538
++Node: Index1288674
  
  End Tag Table
diff --cc doc/gawk.texi
index e002324,1f0fd2a..81568fe
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@@ -10480,68 -10434,7 +10436,64 @@@ when closing a pipe
  @end cartouche
  @end ifnotdocbook
  
- @c ENDOFRANGE ifc
- @c ENDOFRANGE ofc
- @c ENDOFRANGE pc
- @c ENDOFRANGE cc
  
 address@hidden Nonfatal
 address@hidden Enabling Nonfatal Output
 +
 +This @value{SECTION} describes a @command{gawk}-specific feature.
 +
 +In standard @command{awk}, output with @code{print} or @code{printf}
 +to a nonexistent file, or some other I/O error (such as filling up the
 +disk) is a fatal error.
 +
 address@hidden
 +$ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file" @}'}
 address@hidden gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No 
such file or directory)
 address@hidden example
 +
 address@hidden makes it possible to detect that an error has
 +occurred, allowing you to possibly recover from the error, or
 +at least print an error message of your choosing before exiting.
 +You can do this in one of two ways:
 +
 address@hidden @bullet
 address@hidden
 +For all output files, by assigning any value to @code{PROCINFO["nonfatal"]}.
 +
 address@hidden
 +On a per-file basis, by assigning any value to
 address@hidden@var{filename}, "nonfatal"]}.
 +Here, @var{filename} is the name of the file to which
 +you wish output to be nonfatal.
 address@hidden itemize
 +
 +Once you have enabled nonfatal output, you must check @code{ERRNO}
 +after every relevant @code{print} or @code{printf} statement to
 +see if something went wrong.  It is also a good idea to initialize
 address@hidden to zero before attempting the output. For example:
 +
 address@hidden
 +$ @kbd{gawk '}
 +> @kbd{BEGIN @{}
 +> @kbd{    PROCINFO["nonfatal"] = 1}
 +> @kbd{    ERRNO = 0}
 +> @kbd{    print "hi" > "/no/such/file"}
 +> @kbd{    if (ERRNO) @{}
 +> @kbd{        print("Output failed:", ERRNO) > "/dev/stderr"}
 +> @kbd{        exit 1}
 +> @kbd{    @}}
 +> @address@hidden'}
 address@hidden Output failed: No such file or directory
 address@hidden example
 +
 +Here, @command{gawk} did not produce a fatal error; instead
 +it let the @command{awk} program code detect the problem and handle it.
 +
 +This mechanism works also for standard output and standard error.
 +For standard output, you may use @code{PROCINFO["-", "nonfatal"]}
 +or @code{PROCINFO["/dev/stdout", "nonfatal"]}.  For standard error, use
 address@hidden"/dev/stderr", "nonfatal"]}.
 +
  @node Output Summary
  @section Summary
  
diff --cc doc/gawktexi.in
index 87fa41c,38e741e..e127f42
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@@ -9977,68 -9930,7 +9932,64 @@@ In POSIX mode (@pxref{Options}), @comma
  when closing a pipe.
  @end sidebar
  
- @c ENDOFRANGE ifc
- @c ENDOFRANGE ofc
- @c ENDOFRANGE pc
- @c ENDOFRANGE cc
  
 address@hidden Nonfatal
 address@hidden Enabling Nonfatal Output
 +
 +This @value{SECTION} describes a @command{gawk}-specific feature.
 +
 +In standard @command{awk}, output with @code{print} or @code{printf}
 +to a nonexistent file, or some other I/O error (such as filling up the
 +disk) is a fatal error.
 +
 address@hidden
 +$ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file" @}'}
 address@hidden gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No 
such file or directory)
 address@hidden example
 +
 address@hidden makes it possible to detect that an error has
 +occurred, allowing you to possibly recover from the error, or
 +at least print an error message of your choosing before exiting.
 +You can do this in one of two ways:
 +
 address@hidden @bullet
 address@hidden
 +For all output files, by assigning any value to @code{PROCINFO["nonfatal"]}.
 +
 address@hidden
 +On a per-file basis, by assigning any value to
 address@hidden@var{filename}, "nonfatal"]}.
 +Here, @var{filename} is the name of the file to which
 +you wish output to be nonfatal.
 address@hidden itemize
 +
 +Once you have enabled nonfatal output, you must check @code{ERRNO}
 +after every relevant @code{print} or @code{printf} statement to
 +see if something went wrong.  It is also a good idea to initialize
 address@hidden to zero before attempting the output. For example:
 +
 address@hidden
 +$ @kbd{gawk '}
 +> @kbd{BEGIN @{}
 +> @kbd{    PROCINFO["nonfatal"] = 1}
 +> @kbd{    ERRNO = 0}
 +> @kbd{    print "hi" > "/no/such/file"}
 +> @kbd{    if (ERRNO) @{}
 +> @kbd{        print("Output failed:", ERRNO) > "/dev/stderr"}
 +> @kbd{        exit 1}
 +> @kbd{    @}}
 +> @address@hidden'}
 address@hidden Output failed: No such file or directory
 address@hidden example
 +
 +Here, @command{gawk} did not produce a fatal error; instead
 +it let the @command{awk} program code detect the problem and handle it.
 +
 +This mechanism works also for standard output and standard error.
 +For standard output, you may use @code{PROCINFO["-", "nonfatal"]}
 +or @code{PROCINFO["/dev/stdout", "nonfatal"]}.  For standard error, use
 address@hidden"/dev/stderr", "nonfatal"]}.
 +
  @node Output Summary
  @section Summary
  
diff --cc test/ChangeLog
index bff1d80,e9d5620..b0979d8
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@@ -1,9 -1,46 +1,52 @@@
 +2015-02-06         Arnold D. Robbins     <address@hidden>
 +
 +      * Makefile.am (nonfatal1, nonfatal2): New tests.
 +      * nonfatal1.awk, nonfatal1.ok: New files.
 +      * nonfatal2.awk, nonfatal2.ok: New files.
 +
+ 2015-02-01         Arnold D. Robbins     <address@hidden>
+ 
+       * Makefile.am (paramasfunc1, paramasfunc2): Now need --posix.
+       * indirectcall.awk: Restore after code change.
+ 
+ 2015-01-30         Arnold D. Robbins     <address@hidden>
+ 
+       * Makefile.am (callparam, paramasfunc1, paramasfunc2): New tests.
+       * callparam.awk, callparam.ok: New files.
+       * paramasfunc1.awk, paramasfunc1.ok: New files.
+       * paramasfunc2.awk, paramasfunc2.ok: New files.
+       * exit.sh, indirectcall.awk: Update after code change.
+ 
+ 2015-01-19         Arnold D. Robbins     <address@hidden>
+ 
+       * Makefile.am (profile8): Actually add the test and the files.
+       Thanks to Hermann Peifer for the report.
+ 
+ 2015-01-16         Arnold D. Robbins     <address@hidden>
+ 
+       * Makefile.am (profile8): New test.
+       * profile8.awk, profile8.ok: New files.
+ 
+ 2015-01-14         Arnold D. Robbins     <address@hidden>
+ 
+       * Makefile.am (dumpvars): Grep out ENVIRON and PROCINFO since
+       those can be different depending on who runs the test.
+       * dumpvars.ok, id.ok: Updated after code changes.
+ 
+ 2015-01-07         Arnold D. Robbins     <address@hidden>
+ 
+       * Makefile.am (regexpbrack): New test.
+       * regexpbrack.awk, regexpbrack.in, regexpbrack.ok: New files.
+ 
+       Unrelated:
+ 
+       * Makefile.am (printfbad4): New test.
+       * printfbad4.awk, printfbad4.ok: New files.
+ 
+       Unrelated:
+ 
+       * testext.ok: Adjust for code changes.
+ 
  2014-12-24         Arnold D. Robbins     <address@hidden>
  
        * Makefile.am (badbuild): New test.
diff --cc test/Makefile.am
index 802a355,c4c0b8b..053f89f
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@@ -1032,9 -1042,9 +1046,10 @@@ GAWK_EXT_TESTS = 
        lint lintold lintwarn \
        manyfiles match1 match2 match3 mbstr1 \
        nastyparm next nondec nondec2 \
 +      nonfatal1 nonfatal2 \
-       patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
-       profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
+       patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge 
procinfs \
+       profile1 profile2 profile3 profile4 profile5 profile6 profile7 \
+       profile8 pty1 \
        rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline 
rsglstdin rsstart1 \
        rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \
        splitarg4 strftime \
diff --cc test/Makefile.in
index 70dd1f4,212cb77..25ea167
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@@ -1278,9 -1298,9 +1302,10 @@@ GAWK_EXT_TESTS = 
        lint lintold lintwarn \
        manyfiles match1 match2 match3 mbstr1 \
        nastyparm next nondec nondec2 \
 +      nonfatal1 nonfatal2 \
-       patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
-       profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
+       patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge 
procinfs \
+       profile1 profile2 profile3 profile4 profile5 profile6 profile7 \
+       profile8 pty1 \
        rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline 
rsglstdin rsstart1 \
        rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \
        splitarg4 strftime \

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=34c33ee0f9d3863f9ef381e499e396c9f447a941

commit 34c33ee0f9d3863f9ef381e499e396c9f447a941
Author: Arnold D. Robbins <address@hidden>
Date:   Sun Feb 8 19:50:27 2015 +0200

    Add tests for non fatal i/o.

diff --git a/test/ChangeLog b/test/ChangeLog
index 2787b90..bff1d80 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-06         Arnold D. Robbins     <address@hidden>
+
+       * Makefile.am (nonfatal1, nonfatal2): New tests.
+       * nonfatal1.awk, nonfatal1.ok: New files.
+       * nonfatal2.awk, nonfatal2.ok: New files.
+
 2014-12-24         Arnold D. Robbins     <address@hidden>
 
        * Makefile.am (badbuild): New test.
diff --git a/test/Makefile.am b/test/Makefile.am
index 7335da3..802a355 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -595,6 +595,10 @@ EXTRA_DIST = \
        nondec.ok \
        nondec2.awk \
        nondec2.ok \
+       nonfatal1.awk \
+       nonfatal1.ok \
+       nonfatal2.awk \
+       nonfatal2.ok \
        nonl.awk \
        nonl.ok \
        noparms.awk \
@@ -1028,6 +1032,7 @@ GAWK_EXT_TESTS = \
        lint lintold lintwarn \
        manyfiles match1 match2 match3 mbstr1 \
        nastyparm next nondec nondec2 \
+       nonfatal1 nonfatal2 \
        patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
        profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
        rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline 
rsglstdin rsstart1 \
diff --git a/test/Makefile.in b/test/Makefile.in
index fa86fc7..70dd1f4 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -842,6 +842,10 @@ EXTRA_DIST = \
        nondec.ok \
        nondec2.awk \
        nondec2.ok \
+       nonfatal1.awk \
+       nonfatal1.ok \
+       nonfatal2.awk \
+       nonfatal2.ok \
        nonl.awk \
        nonl.ok \
        noparms.awk \
@@ -1274,6 +1278,7 @@ GAWK_EXT_TESTS = \
        lint lintold lintwarn \
        manyfiles match1 match2 match3 mbstr1 \
        nastyparm next nondec nondec2 \
+       nonfatal1 nonfatal2 \
        patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
        profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
        rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline 
rsglstdin rsstart1 \
@@ -3568,6 +3573,16 @@ nondec:
        @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
 
+nonfatal1:
+       @echo $@
+       @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
+nonfatal2:
+       @echo $@
+       @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
 patsplit:
        @echo $@
        @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index e1b92bf..08085a0 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1137,6 +1137,16 @@ nondec:
        @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
 
+nonfatal1:
+       @echo $@
+       @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
+nonfatal2:
+       @echo $@
+       @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
 patsplit:
        @echo $@
        @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
diff --git a/test/nonfatal1.awk b/test/nonfatal1.awk
new file mode 100644
index 0000000..8366128
--- /dev/null
+++ b/test/nonfatal1.awk
@@ -0,0 +1,5 @@
+BEGIN {
+       PROCINFO["nonfatal"]
+       print |& "/inet/tcp/0/ti10/357"
+       print ERRNO
+}
diff --git a/test/nonfatal1.ok b/test/nonfatal1.ok
new file mode 100644
index 0000000..b96b8e2
--- /dev/null
+++ b/test/nonfatal1.ok
@@ -0,0 +1,2 @@
+gawk: nonfatal1.awk:3: fatal: remote host and port information (ti10, 357) 
invalid
+EXIT CODE: 2
diff --git a/test/nonfatal2.awk b/test/nonfatal2.awk
new file mode 100644
index 0000000..f5db71c
--- /dev/null
+++ b/test/nonfatal2.awk
@@ -0,0 +1,5 @@
+BEGIN {
+       PROCINFO["nonfatal"] = 1
+       print > "/dev/no/such/file"
+       print ERRNO
+}
diff --git a/test/nonfatal2.ok b/test/nonfatal2.ok
new file mode 100644
index 0000000..ddc8869
--- /dev/null
+++ b/test/nonfatal2.ok
@@ -0,0 +1 @@
+No such file or directory

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=2f9c84e82632cbce017a6d342acb3dede5e59e12

commit 2f9c84e82632cbce017a6d342acb3dede5e59e12
Author: Arnold D. Robbins <address@hidden>
Date:   Sun Feb 8 19:45:44 2015 +0200

    Reset non-fatal-io to 31 December, add fixes from Andrew Schorr.

diff --git a/ChangeLog b/ChangeLog
index 0ee6bf2..c61e8ee 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2015-02-08         Andrew J. Schorr     <address@hidden>
+
+       * awk.h (RED_NON_FATAL): Removed.
+       (redirect): Add new failure_fatal parameter.
+       (is_non_fatal_redirect): Add declaration.
+       * builtin.c (efwrite): Rework check for non-fatal.
+       (do_printf): Adjust calls to redirect.
+       (do_print_rec): Ditto. Move check for redirection error up.
+       * io.c (redflags2str): Remove RED_NON_FATAL.
+       (redirect): Add new failure_fatal parameter. Simplify the code.
+       (is_non_fatal_redirect): New function.
+       (do_getline_redir): Adjust calls to redirect.
+
 2014-12-27         Arnold D. Robbins     <address@hidden>
 
        * awk.h (is_non_fatal_std): Declare new function.
diff --git a/awk.h b/awk.h
index 81a0e91..b1272ad 100644
--- a/awk.h
+++ b/awk.h
@@ -918,7 +918,6 @@ struct redirect {
 #              define  RED_PTY         512
 #              define  RED_SOCKET      1024
 #              define  RED_TCP         2048
-#              define  RED_NON_FATAL   4096
        char *value;
        FILE *ifp;      /* input fp, needed for PIPES_SIMULATED */
        IOBUF *iop;
@@ -1484,7 +1483,7 @@ extern void 
register_two_way_processor(awk_two_way_processor_t *processor);
 extern void set_FNR(void);
 extern void set_NR(void);
 
-extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg);
+extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg, 
bool failure_fatal);
 extern NODE *do_close(int nargs);
 extern int flush_io(void);
 extern int close_io(bool *stdio_problem);
@@ -1497,6 +1496,7 @@ extern struct redirect *getredirect(const char *str, int 
len);
 extern bool inrec(IOBUF *iop, int *errcode);
 extern int nextfile(IOBUF **curfile, bool skipping);
 extern bool is_non_fatal_std(FILE *fp);
+extern bool is_non_fatal_redirect(const char *str);
 /* main.c */
 extern int arg_assign(char *arg, bool initing);
 extern int is_std_var(const char *var);
diff --git a/builtin.c b/builtin.c
index e80d46d..aa8caf0 100644
--- a/builtin.c
+++ b/builtin.c
@@ -131,10 +131,9 @@ wrerror:
 
 
        /* otherwise die verbosely */
-       if (   (rp != NULL && (rp->flag & RED_NON_FATAL) != 0)
-           || is_non_fatal_std(fp)) {
+       if ((rp != NULL) ? is_non_fatal_redirect(rp->value) : 
is_non_fatal_std(fp))
                update_ERRNO_int(errno);
-       } else
+       else
                fatal(_("%s to \"%s\" failed (%s)"), from,
                        rp ? rp->value : _("standard output"),
                        errno ? strerror(errno) : _("reason unknown"));
@@ -1649,7 +1648,7 @@ do_printf(int nargs, int redirtype)
                                redir_exp = TOP();
                                if (redir_exp->type != Node_val)
                                        fatal(_("attempt to use array `%s' in a 
scalar context"), array_vname(redir_exp));
-                               rp = redirect(redir_exp, redirtype, & errflg);
+                               rp = redirect(redir_exp, redirtype, & errflg, 
true);
                                DEREF(redir_exp);
                                decr_sp();
                        }
@@ -1662,7 +1661,7 @@ do_printf(int nargs, int redirtype)
                redir_exp = PEEK(nargs);
                if (redir_exp->type != Node_val)
                        fatal(_("attempt to use array `%s' in a scalar 
context"), array_vname(redir_exp));
-               rp = redirect(redir_exp, redirtype, & errflg);
+               rp = redirect(redir_exp, redirtype, & errflg, true);
                if (rp != NULL)
                        fp = rp->output.fp;
                else if (errflg) {
@@ -2093,7 +2092,7 @@ do_print(int nargs, int redirtype)
                redir_exp = PEEK(nargs);
                if (redir_exp->type != Node_val)
                        fatal(_("attempt to use array `%s' in a scalar 
context"), array_vname(redir_exp));
-               rp = redirect(redir_exp, redirtype, & errflg);
+               rp = redirect(redir_exp, redirtype, & errflg, true);
                if (rp != NULL)
                        fp = rp->output.fp;
                else if (errflg) {
@@ -2161,7 +2160,7 @@ do_print_rec(int nargs, int redirtype)
        assert(nargs == 0);
        if (redirtype != 0) {
                redir_exp = TOP();
-               rp = redirect(redir_exp, redirtype, & errflg);
+               rp = redirect(redir_exp, redirtype, & errflg, true);
                if (rp != NULL)
                        fp = rp->output.fp;
                DEREF(redir_exp);
@@ -2169,17 +2168,17 @@ do_print_rec(int nargs, int redirtype)
        } else
                fp = output_fp;
 
+       if (errflg) {
+               update_ERRNO_int(errflg);
+               return;
+       }
+
        if (fp == NULL)
                return;
 
        if (! field0_valid)
                (void) get_field(0L, NULL);     /* rebuild record */
 
-       if (errflg) {
-               update_ERRNO_int(errflg);
-               return;
-       }
-
        f0 = fields_arr[0];
 
        if (do_lint && (f0->flags & NULL_FIELD) != 0)
diff --git a/io.c b/io.c
index b3819c0..db8a0a2 100644
--- a/io.c
+++ b/io.c
@@ -261,7 +261,6 @@ struct recmatch {
 
 
 static int iop_close(IOBUF *iop);
-struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg);
 static void close_one(void);
 static int close_redir(struct redirect *rp, bool exitwarn, two_way_close_type 
how);
 #ifndef PIPES_SIMULATED
@@ -718,7 +717,6 @@ redflags2str(int flags)
                { RED_PTY,      "RED_PTY" },
                { RED_SOCKET,   "RED_SOCKET" },
                { RED_TCP,      "RED_TCP" },
-               { RED_NON_FATAL,        "RED_NON_FATAL" },
                { 0, NULL }
        };
 
@@ -728,7 +726,7 @@ redflags2str(int flags)
 /* redirect --- Redirection for printf and print commands */
 
 struct redirect *
-redirect(NODE *redir_exp, int redirtype, int *errflg)
+redirect(NODE *redir_exp, int redirtype, int *errflg, bool failure_fatal)
 {
        struct redirect *rp;
        char *str;
@@ -745,8 +743,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
        static struct redirect *save_rp = NULL; /* hold onto rp that should
                                                 * be freed for reuse
                                                 */
-       bool is_output = false;
-       bool is_non_fatal = false;
 
        if (do_sandbox)
                fatal(_("redirection not allowed in sandbox mode"));
@@ -756,7 +752,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
                tflag = RED_APPEND;
                /* FALL THROUGH */
        case redirect_output:
-               is_output = true;
                outflag = (RED_FILE|RED_WRITE);
                tflag |= outflag;
                if (redirtype == redirect_output)
@@ -765,7 +760,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
                        what = ">>";
                break;
        case redirect_pipe:
-               is_output = true;
                tflag = (RED_PIPE|RED_WRITE);
                what = "|";
                break;
@@ -778,7 +772,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
                what = "<";
                break;
        case redirect_twoway:
-               is_output = true;
                tflag = (RED_READ|RED_WRITE|RED_TWOWAY);
                what = "|&";
                break;
@@ -800,14 +793,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
                lintwarn(_("filename `%s' for `%s' redirection may be result of 
logical expression"),
                                str, what);
 
-       /* input files/pipes are automatically nonfatal */
-       if (is_output) {
-               is_non_fatal = (in_PROCINFO("nonfatal", NULL, NULL) != NULL
-                               || in_PROCINFO(str, "nonfatal", NULL) != NULL);
-               if (is_non_fatal)
-                       tflag |= RED_NON_FATAL;
-       }
-
 #ifdef HAVE_SOCKETS
        /*
         * Use /inet4 to force IPv4, /inet6 to force IPv6, and plain
@@ -907,7 +892,7 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
 
                        os_restore_mode(fileno(stdin));
                        /*
-                        * Don't check is_non_fatal; see input pipe below.
+                        * Don't check failure_fatal; see input pipe below.
                         * Note that the failure happens upon failure to fork,
                         * using a non-existant program will still succeed the
                         * popen().
@@ -947,17 +932,11 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
                case redirect_twoway:
                        direction = "to/from";
                        if (! two_way_open(str, rp)) {
-#ifdef HAVE_SOCKETS
-                               if (inetfile(str, NULL)) {
-                                       *errflg = errno;
-                                       /* do not free rp, saving it for reuse 
(save_rp = rp) */
-                                       return NULL;
-                               } else if (is_non_fatal) {
+                               if (! failure_fatal || 
is_non_fatal_redirect(str)) {
                                        *errflg = errno;
                                        /* do not free rp, saving it for reuse 
(save_rp = rp) */
                                        return NULL;
                                } else
-#endif
                                        fatal(_("can't open two way pipe `%s' 
for input/output (%s)"),
                                                        str, strerror(errno));
                        }
@@ -1038,7 +1017,7 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
                                 */
                                if (errflg != NULL)
                                        *errflg = errno;
-                               if (! is_non_fatal &&
+                               if (failure_fatal && ! 
is_non_fatal_redirect(str) &&
                                    (redirtype == redirect_output
                                     || redirtype == redirect_append)) {
                                        /* multiple messages make life easier 
for translators */
@@ -1104,6 +1083,15 @@ is_non_fatal_std(FILE *fp)
        return false;
 }
 
+/* is_non_fatal_redirect --- return true if redirected I/O should be nonfatal 
*/
+
+bool
+is_non_fatal_redirect(const char *str)
+{
+       return in_PROCINFO("nonfatal", NULL, NULL) != NULL
+              || in_PROCINFO(str, "nonfatal", NULL) != NULL;
+}
+
 /* close_one --- temporarily close an open file to re-use the fd */
 
 static void
@@ -2467,7 +2455,7 @@ do_getline_redir(int into_variable, enum redirval 
redirtype)
 
        assert(redirtype != redirect_none);
        redir_exp = TOP();
-       rp = redirect(redir_exp, redirtype, & redir_error);
+       rp = redirect(redir_exp, redirtype, & redir_error, false);
        DEREF(redir_exp);
        decr_sp();
        if (rp == NULL) {

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


hooks/post-receive
-- 
gawk



reply via email to

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