summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--manual/stdio.texi50
-rw-r--r--posix/regex.c3
3 files changed, 46 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 806c648219..2c57fc412e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2000-03-08  H.J. Lu  <hjl@gnu.org>
+
+	* posix/regex.c (regex_compile): Correctly handle "\{" when
+	the RE_INTERVALS is set and the RE_NO_BK_BRACES bit is not set.
+
 2000-04-20  Ulrich Drepper  <drepper@redhat.com>
 
 	* manual/stdio.texi: Give advise about handling error when using
diff --git a/manual/stdio.texi b/manual/stdio.texi
index 4764003443..5c37698fc6 100644
--- a/manual/stdio.texi
+++ b/manual/stdio.texi
@@ -27,6 +27,7 @@ representing a communications channel to a file, device, or process.
                                  @code{printf} and friends.
 * Formatted Input::             @code{scanf} and related functions.
 * EOF and Errors::              How you can tell if an I/O error happens.
+* Error Recovery::		What you can do about errors.
 * Binary Streams::              Some systems distinguish between text files
                                  and binary files.
 * File Positioning::            About random-access streams.
@@ -3055,16 +3056,6 @@ value may be some other negative number.
 
 @comment stdio.h
 @comment ISO
-@deftypefun void clearerr (FILE *@var{stream})
-This function clears the end-of-file and error indicators for the
-stream @var{stream}.
-
-The file positioning functions (@pxref{File Positioning}) also clear the
-end-of-file indicator for the stream.
-@end deftypefun
-
-@comment stdio.h
-@comment ISO
 @deftypefun int feof (FILE *@var{stream})
 The @code{feof} function returns nonzero if and only if the end-of-file
 indicator for the stream @var{stream} is set.
@@ -3088,6 +3079,45 @@ conditions defined for @code{write} are meaningful for these functions.
 For more information about the descriptor-level I/O functions, see
 @ref{Low-Level I/O}.
 
+@node Error Recovery
+@section Recovering from errors
+
+You may explicitly clear the error and EOF flags with the @code{clearerr} 
+function.
+
+@comment stdio.h
+@comment ISO
+@deftypefun void clearerr (FILE *@var{stream})
+This function clears the end-of-file and error indicators for the
+stream @var{stream}.
+
+The file positioning functions (@pxref{File Positioning}) also clear the
+end-of-file indicator for the stream.
+@end deftypefun
+
+Note that it is @emph{not} correct to just clear the error flag and retry
+a failed stream operation.  After a failed write, any number of
+characters since the last buffer flush may have been committed to the
+file, while some buffered data may have been discarded.  Merely retrying
+can thus cause lost or repeated data.
+
+A failed read may leave the file pointer in an inappropriate position for
+a second try.  In both cases, you should seek to a known position before
+retrying.
+
+Most errors that can happen are not recoverable --- a second try will
+always fail again in the same way.  So usually it is best to give up and
+report the error to the user, rather than install complicated recovery
+logic.
+
+One important exception is @code{EINTR} (@pxref{Interrupted Primitives}). 
+Many stream I/O implementations will treat it as an ordinary error, which
+can be quite inconvenient.  You can avoid this hassle by installing all
+signals with the @code{SA_RESTART} flag.
+
+For similar reasons, setting nonblocking I/O on a stream's file
+descriptor is not usually advisable.
+
 @node Binary Streams
 @section Text and Binary Streams
 
diff --git a/posix/regex.c b/posix/regex.c
index 3e942d41f5..eb5a6b3d47 100644
--- a/posix/regex.c
+++ b/posix/regex.c
@@ -2950,8 +2950,7 @@ regex_compile (pattern, size, syntax, bufp)
               if (!(syntax & RE_INTERVALS)
                      /* If we're at `\{' and it's not the open-interval
                         operator.  */
-                  || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
-                  || (p - 2 == pattern  &&  p == pend))
+		  || (syntax & RE_NO_BK_BRACES))
                 goto normal_backslash;
 
             handle_interval: