Avoid consuming too much seekable input when yesno is used.
authorEric Blake <ebb9@byu.net>
Mon, 20 Aug 2007 15:01:18 +0000 (17:01 +0200)
committerJim Meyering <jim@meyering.net>
Mon, 20 Aug 2007 15:03:45 +0000 (17:03 +0200)
* bootstrap.conf (gnulib_modules): Grab closein.
* src/system.h (includes): Also include closein.h.
* src/mv.c (main): Use close_stdin, not close_stdout.
* src/cp.c (main): Likewise.
* src/ln.c (main): Likewise.
* src/rm.c (main): Likewise.
* src/install.c (main): Likewise.
* NEWS: Document the fix.

15 files changed:
ChangeLog
NEWS
bootstrap.conf
lib/.cvsignore
lib/.gitignore
m4/.cvsignore
m4/.gitignore
po/ChangeLog
po/POTFILES.in
src/cp.c
src/install.c
src/ln.c
src/mv.c
src/rm.c
src/system.h

index a477f3d..6462d9e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2007-08-19  Eric Blake  <ebb9@byu.net>
+
+       Avoid consuming too much seekable input when yesno is used.
+       * bootstrap.conf (gnulib_modules): Add closein.
+       * src/system.h (includes): Also include closein.h.
+       * src/mv.c (main): Use close_stdin, not close_stdout.
+       * src/cp.c (main): Likewise.
+       * src/ln.c (main): Likewise.
+       * src/rm.c (main): Likewise.
+       * src/install.c (main): Likewise.
+       * NEWS: Document the fix.
+
 2007-08-18  Jim Meyering  <jim@meyering.net>
 
        Use new "idcache.h" header.
diff --git a/NEWS b/NEWS
index 91149eb..edbf3b4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -72,6 +72,9 @@ GNU coreutils NEWS                                    -*- outline -*-
 
   "cp -i --update older newer" no longer prompts; same for mv
 
+  "cp -i" now detects read errors on standard input, and no longer consumes
+  too much seekable input; same for ln, install, mv, and rm.
+
   cut now diagnoses a range starting with zero (e.g., -f 0-2) as invalid;
   before, it would treat it as if it started with 1 (-f 1-2).
 
index 58a3257..68896c7 100644 (file)
@@ -40,7 +40,7 @@ gnulib_modules="
        c-strcase c-strtod
        c-strtold calloc canon-host canonicalize chown cloexec
        config-h configmake
-       closeout
+       closein closeout
        crypto/md5 crypto/sha1
        cycle-check
        d-ino d-type diacrit dirfd dirname dup2
index ae85b19..fd17849 100644 (file)
@@ -42,6 +42,8 @@ cloexec.c
 cloexec.h
 close-stream.c
 close-stream.h
+closein.c
+closein.h
 closeout.c
 closeout.h
 concatpath.c
@@ -83,6 +85,7 @@ fcntl-safer.h
 fcntl.h
 fcntl_.h
 fd-safer.c
+fflush.c
 file-has-acl.c
 file-type.c
 file-type.h
@@ -103,6 +106,10 @@ fnmatch_loop.c
 fopen-safer.c
 fprintftime.c
 fprintftime.h
+fpurge.c
+fpurge.h
+freading.c
+freading.h
 free.c
 fseeko.c
 fstatat.c
index b716aa8..f44081d 100644 (file)
@@ -39,6 +39,8 @@ cloexec.c
 cloexec.h
 close-stream.c
 close-stream.h
+closein.c
+closein.h
 closeout.c
 closeout.h
 concatpath.c
@@ -78,6 +80,7 @@ fcntl-safer.h
 fcntl.h
 fcntl_.h
 fd-safer.c
+fflush.c
 file-has-acl.c
 file-type.c
 file-type.h
@@ -98,6 +101,10 @@ fnmatch_loop.c
 fopen-safer.c
 fprintftime.c
 fprintftime.h
+fpurge.c
+fpurge.h
+freading.c
+freading.h
 free.c
 fseeko.c
 fstatat.c
index 88f1d88..648715b 100644 (file)
@@ -19,6 +19,7 @@ chown.m4
 clock_time.m4
 cloexec.m4
 close-stream.m4
+closein.m4
 closeout.m4
 codeset.m4
 config-h.m4
@@ -41,6 +42,7 @@ extensions.m4
 fchdir.m4
 fcntl-safer.m4
 fcntl_h.m4
+fflush.m4
 file-type.m4
 fileblocks.m4
 filemode.m4
@@ -51,6 +53,8 @@ float_h.m4
 fnmatch.m4
 fpending.m4
 fprintftime.m4
+fpurge.m4
+freading.m4
 free.m4
 fseeko.m4
 fstypename.m4
index 17ff100..1052407 100644 (file)
@@ -18,6 +18,7 @@ chown.m4
 clock_time.m4
 cloexec.m4
 close-stream.m4
+closein.m4
 closeout.m4
 codeset.m4
 config-h.m4
@@ -40,6 +41,7 @@ extensions.m4
 fchdir.m4
 fcntl-safer.m4
 fcntl_h.m4
+fflush.m4
 file-type.m4
 fileblocks.m4
 filemode.m4
@@ -50,6 +52,8 @@ float_h.m4
 fnmatch.m4
 fpending.m4
 fprintftime.m4
+fpurge.m4
+freading.m4
 free.m4
 fseeko.m4
 fstypename.m4
index 366ca74..247a76a 100644 (file)
@@ -1,3 +1,7 @@
+2007-08-19  Eric Blake  <ebb9@byu.net>
+
+       * POTFILES.in: Add lib/closein.c.
+
 2007-08-08  Jim Meyering  <jim@meyering.net>
 
        Adapt to gnulib's latest xstrtol change.
 
        -----
 
-       Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software
+       Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software
        Foundation, Inc.
 
        Copying and distribution of this file, with or without
index 61f6501..7f4d5c2 100644 (file)
@@ -4,6 +4,7 @@
 # These are nominally temporary...
 lib/acl.c
 lib/argmatch.c
+lib/closein.c
 lib/closeout.c
 lib/error.c
 lib/euidaccess-stat.c
index 2ea74cd..2549237 100644 (file)
--- a/src/cp.c
+++ b/src/cp.c
@@ -867,7 +867,7 @@ main (int argc, char **argv)
   bindtextdomain (PACKAGE, LOCALEDIR);
   textdomain (PACKAGE);
 
-  atexit (close_stdout);
+  atexit (close_stdin);
 
   selinux_enabled = (0 < is_selinux_enabled ());
   cp_option_init (&x);
index 28e2dd5..34f61ff 100644 (file)
@@ -290,7 +290,7 @@ main (int argc, char **argv)
   bindtextdomain (PACKAGE, LOCALEDIR);
   textdomain (PACKAGE);
 
-  atexit (close_stdout);
+  atexit (close_stdin);
 
   cp_option_init (&x);
 
index aec8b36..3ddcfdf 100644 (file)
--- a/src/ln.c
+++ b/src/ln.c
@@ -1,5 +1,5 @@
 /* `ln' program to create links between files.
-   Copyright (C) 1986, 1989-1991, 1995-2006 Free Software Foundation, Inc.
+   Copyright (C) 1986, 1989-1991, 1995-2007 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -398,7 +398,7 @@ main (int argc, char **argv)
   bindtextdomain (PACKAGE, LOCALEDIR);
   textdomain (PACKAGE);
 
-  atexit (close_stdout);
+  atexit (close_stdin);
 
   /* FIXME: consider not calling getenv for SIMPLE_BACKUP_SUFFIX unless
      we'll actually use backup_suffix_string.  */
index fdf3283..1834f4c 100644 (file)
--- a/src/mv.c
+++ b/src/mv.c
@@ -357,7 +357,7 @@ main (int argc, char **argv)
   bindtextdomain (PACKAGE, LOCALEDIR);
   textdomain (PACKAGE);
 
-  atexit (close_stdout);
+  atexit (close_stdin);
 
   cp_option_init (&x);
 
index 1749329..820646f 100644 (file)
--- a/src/rm.c
+++ b/src/rm.c
@@ -238,7 +238,7 @@ main (int argc, char **argv)
   bindtextdomain (PACKAGE, LOCALEDIR);
   textdomain (PACKAGE);
 
-  atexit (close_stdout);
+  atexit (close_stdin);
 
   rm_option_init (&x);
 
index 3c7f49d..2c4bfd3 100644 (file)
@@ -419,6 +419,7 @@ enum
 #define VERSION_OPTION_DESCRIPTION \
   _("      --version  output version information and exit\n")
 
+#include "closein.h"
 #include "closeout.h"
 #include "version-etc.h"