From feed02af9d09527745d10138cc08da9ed0702b7e Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 20 Aug 2007 17:01:18 +0200 Subject: [PATCH] Avoid consuming too much seekable input when yesno is used. * 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. --- ChangeLog | 12 ++++++++++++ NEWS | 3 +++ bootstrap.conf | 2 +- lib/.cvsignore | 7 +++++++ lib/.gitignore | 7 +++++++ m4/.cvsignore | 4 ++++ m4/.gitignore | 4 ++++ po/ChangeLog | 6 +++++- po/POTFILES.in | 1 + src/cp.c | 2 +- src/install.c | 2 +- src/ln.c | 4 ++-- src/mv.c | 2 +- src/rm.c | 2 +- src/system.h | 1 + 15 files changed, 51 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index a477f3d108..6462d9e0c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-08-19 Eric Blake + + 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 Use new "idcache.h" header. diff --git a/NEWS b/NEWS index 91149ebb6e..edbf3b49da 100644 --- 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). diff --git a/bootstrap.conf b/bootstrap.conf index 58a3257380..68896c77be 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -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 diff --git a/lib/.cvsignore b/lib/.cvsignore index ae85b19f61..fd17849ffc 100644 --- a/lib/.cvsignore +++ b/lib/.cvsignore @@ -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 diff --git a/lib/.gitignore b/lib/.gitignore index b716aa8e9f..f44081dea9 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -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 diff --git a/m4/.cvsignore b/m4/.cvsignore index 88f1d88aa8..648715ba50 100644 --- a/m4/.cvsignore +++ b/m4/.cvsignore @@ -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 diff --git a/m4/.gitignore b/m4/.gitignore index 17ff10048e..1052407847 100644 --- a/m4/.gitignore +++ b/m4/.gitignore @@ -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 diff --git a/po/ChangeLog b/po/ChangeLog index 366ca74891..247a76a2a0 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,7 @@ +2007-08-19 Eric Blake + + * POTFILES.in: Add lib/closein.c. + 2007-08-08 Jim Meyering Adapt to gnulib's latest xstrtol change. @@ -238,7 +242,7 @@ ----- - 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 diff --git a/po/POTFILES.in b/po/POTFILES.in index 61f6501f78..7f4d5c2a53 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -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 diff --git a/src/cp.c b/src/cp.c index 2ea74cd14f..254923759a 100644 --- 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); diff --git a/src/install.c b/src/install.c index 28e2dd50a2..34f61ffba3 100644 --- a/src/install.c +++ b/src/install.c @@ -290,7 +290,7 @@ main (int argc, char **argv) bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); - atexit (close_stdout); + atexit (close_stdin); cp_option_init (&x); diff --git a/src/ln.c b/src/ln.c index aec8b36b32..3ddcfdfff0 100644 --- 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. */ diff --git a/src/mv.c b/src/mv.c index fdf328393b..1834f4c648 100644 --- 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); diff --git a/src/rm.c b/src/rm.c index 1749329872..820646f36a 100644 --- 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); diff --git a/src/system.h b/src/system.h index 3c7f49d101..2c4bfd3451 100644 --- a/src/system.h +++ b/src/system.h @@ -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" -- 2.47.2