Mercurial > hg > octave-nkf > gnulib-hg
changeset 9160:3ba41f99309f
Optimization: no need to flush stdin if we can determine quickly that stdin's
input buffer is empty.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Mon, 20 Aug 2007 22:09:08 +0000 |
parents | e21121c06cf2 |
children | c5cedfcd0db0 |
files | ChangeLog lib/closein.c modules/closein |
diffstat | 3 files changed, 19 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-08-19 Bruno Haible <bruno@clisp.org> + + * modules/closein (Depends-on): Add freadahead. + * lib/closein.c: Include freadahead.h. + (close_stdin): Skip the fseeko and fflush calls if freadahead(stdin) + is zero. + 2007-08-19 Bruno Haible <bruno@clisp.org> * modules/freadahead-tests: New file.
--- a/lib/closein.c +++ b/lib/closein.c @@ -32,6 +32,7 @@ #include "closeout.h" #include "error.h" #include "exitfail.h" +#include "freadahead.h" #include "quotearg.h" static const char *file_name; @@ -80,10 +81,16 @@ { bool fail = false; - /* Only attempt flush if stdin is seekable, as fflush is entitled to - fail on non-seekable streams. */ - if (fseeko (stdin, 0, SEEK_CUR) == 0 && fflush (stdin) != 0) - fail = true; + /* There is no need to flush stdin if we can determine quickly that stdin's + input buffer is empty; in this case we know that if stdin is seekable, + fseeko (stdin, 0, SEEK_CUR) == lseek (0, 0, SEEK_CUR). */ + if (freadahead (stdin) > 0) + { + /* Only attempt flush if stdin is seekable, as fflush is entitled to + fail on non-seekable streams. */ + if (fseeko (stdin, 0, SEEK_CUR) == 0 && fflush (stdin) != 0) + fail = true; + } if (close_stream (stdin) != 0) fail = true; if (fail)