Sync from coreutils.
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 15 May 2005 04:45:43 +0000 (04:45 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 15 May 2005 04:45:43 +0000 (04:45 +0000)
* modules/yesno (Depends-on): Add getline.
* gethrxtime.c, gethrxtime.h, getpass.h, mountlist.h, path-concat.c,
regex.h, strtoll.c, unlocked-io.h, xtime.h:
White space changes only.
* makepath.c (make_path): Port to hosts where leading "//" is special.
* yesno.c: Include getline.h, not ctype.h.
(yesno): Don't remove leading white space; POSIX doesn't allow it.
Use getline to remove arbitrary restriction on response length.

14 files changed:
ChangeLog
lib/ChangeLog
lib/gethrxtime.c
lib/gethrxtime.h
lib/getpass.h
lib/makepath.c
lib/mountlist.h
lib/path-concat.c
lib/regex.h
lib/strtoll.c
lib/unlocked-io.h
lib/xtime.h
lib/yesno.c
modules/yesno

index 8bd5e6cbc5d8e978ac00954c6cc6809c906e4dc8..5982c7a563a9cc80737607a65720a39dd1561fe7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-05-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * modules/yesno (Depends-on): Add getline.
+
 2005-05-13  Paul Eggert  <eggert@cs.ucla.edu>
 
        * MODULES.html.sh, README, gnulib-tool, tests/test-base64.c,
index 538f0f038f1f3db8c5185ac3827413e0975efe72..51c1d8c3ef599aa2606af6a213e1518917736751 100644 (file)
@@ -1,3 +1,14 @@
+2005-05-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Sync from coreutils.
+       * gethrxtime.c, gethrxtime.h, getpass.h, mountlist.h, path-concat.c,
+       regex.h, strtoll.c, unlocked-io.h, xtime.h:
+       White space changes only.
+       * makepath.c (make_path): Port to hosts where leading "//" is special.
+       * yesno.c: Include getline.h, not ctype.h.
+       (yesno): Don't remove leading white space; POSIX doesn't allow it.
+       Use getline to remove arbitrary restriction on response length.
+
 2005-05-13  Bruno Haible  <bruno@clisp.org>
 
        * stdint_.h (int64_t, uint64_t, int_least64_t, uint_least64_t,
index a316314d8300d611c31d329d21b8640503123bbc..2c985789dcfd49e191250014c51faa037b5084b5 100644 (file)
@@ -58,7 +58,7 @@ gethrxtime (void)
   }
 # endif
 
-#if HAVE_MICROUPTIME
+# if HAVE_MICROUPTIME
   {
     struct timeval tv;
     microuptime (&tv);
index 4de3a9b3ef24ca31030d6261856ca70b88673e00..ecbd505d5048f61b0607cbdead836f16d72f9fde 100644 (file)
 /* Written by Paul Eggert.  */
 
 #ifndef GETHRXTIME_H_
-#define GETHRXTIME_H_ 1
+# define GETHRXTIME_H_ 1
 
-#include "xtime.h"
+# include "xtime.h"
 
 /* Get the current time, as a count of the number of nanoseconds since
    an arbitrary epoch (e.g., the system boot time).  This clock can't
    be set, is always increasing, and is nearly linear.  */
 
-#if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME
-# include <time.h>
+# if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME
+#  include <time.h>
 static inline xtime_t gethrxtime (void) { return gethrtime (); }
-#else
+# else
 xtime_t gethrxtime (void);
-#endif
+# endif
 
 #endif
index 6018e07261d3fc917e343e6ce7cbf9a6003c1c00..bdff8754d445cbc6fcc8707f6579ac735548da2d 100644 (file)
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef GETPASS_H
-#define GETPASS_H
+# define GETPASS_H
 
 /* Get getpass declaration, if available.  */
-#include <unistd.h>
+# include <unistd.h>
 
-#if defined HAVE_DECL_GETPASS && !HAVE_DECL_GETPASS
+# if defined HAVE_DECL_GETPASS && !HAVE_DECL_GETPASS
 /* Read a password of arbitrary length from /dev/tty or stdin.  */
 char *getpass (const char *prompt);
 
-#endif
+# endif
 
 #endif /* GETPASS_H */
index 5c24773e5bd59193a5946b46ecedf18a7c647071..19ad1f4a8a5baa10c08ed5f7468d175a93a91b36 100644 (file)
@@ -1,7 +1,7 @@
 /* makepath.c -- Ensure that a directory path exists.
 
-   Copyright (C) 1990, 1997, 1998, 1999, 2000, 2002, 2003, 2004 Free
-   Software Foundation, Inc.
+   Copyright (C) 1990, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005
+   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
@@ -207,8 +207,14 @@ make_path (const char *argpath,
       /* If we've saved the cwd and DIRPATH is an absolute pathname,
         we must chdir to `/' in order to enable the chdir optimization.
          So if chdir ("/") fails, turn off the optimization.  */
-      if (do_chdir && *dirpath == '/' && chdir ("/") < 0)
-       do_chdir = false;
+      if (do_chdir && dirpath[0] == '/')
+       {
+         /* POSIX says "//" might be special, so chdir to "//" if the
+            file name starts with exactly two slashes.  */
+         char const *root = "//" + (dirpath[1] != '/' || dirpath[2] == '/');
+         if (chdir (root) != 0)
+           do_chdir = false;
+       }
 
       slash = dirpath;
 
index 48d04341ba72dfdd116e216e3d95a9375487994e..cacfe45cd50e4cb0ebdc1e487d16f36b7212f355 100644 (file)
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef MOUNTLIST_H_
-#define MOUNTLIST_H_
+# define MOUNTLIST_H_
 
-#include <stdbool.h>
-#include <sys/types.h>
+# include <stdbool.h>
+# include <sys/types.h>
 
 /* A mount table entry. */
 struct mount_entry
index 1643aa99af6c0e2d0f6b3b67b58c31b71025ada5..364081f157e51dfb7f3a33a78ece9ae6f53b57d1 100644 (file)
@@ -89,8 +89,8 @@ path_concat (char const *dir, char const *abase, char **base_in_result)
 }
 
 #ifdef TEST_PATH_CONCAT
-#include <stdlib.h>
-#include <stdio.h>
+# include <stdlib.h>
+# include <stdio.h>
 int
 main ()
 {
index 73f9d7277e4d6f78492b701758fc4a6a9e284ced..df46ce05a3bfe69e87e3c517b52223e26cfcd5d0 100644 (file)
@@ -193,7 +193,7 @@ extern reg_syntax_t re_syntax_options;
    & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS           \
        | RE_CONTEXT_INVALID_OPS ))
 
-#define RE_SYNTAX_POSIX_AWK                                            \
+#define RE_SYNTAX_POSIX_AWK                                            \
   (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS             \
    | RE_INTERVALS          | RE_NO_GNU_OPS)
 
index f61f5ada64d2c403702086b44e9fdc0b58d40215..44f0970cf7ed8c9e6b8c9991d75f30b3c9dcb51c 100644 (file)
@@ -16,7 +16,7 @@
    with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
-#define        QUAD    1
+#define QUAD   1
 
 #include <strtol.c>
 
index 816ed3de5f9987d547b1a03f9ddbf089a20ed27a..d00930361c26cb5bdd7a41ef2bce80a9414921a6 100644 (file)
@@ -19,7 +19,7 @@
 /* Written by Jim Meyering.  */
 
 #ifndef UNLOCKED_IO_H
-#define UNLOCKED_IO_H 1
+# define UNLOCKED_IO_H 1
 
 /* These are wrappers for functions/macros from the GNU C library, and
    from other C libraries supporting POSIX's optional thread-safe functions.
    the *_unlocked functions directly.  On hosts that lack those
    functions, invoke the non-thread-safe versions instead.  */
 
-#include <stdio.h>
-
-#if HAVE_DECL_CLEARERR_UNLOCKED
-# undef clearerr
-# define clearerr(x) clearerr_unlocked (x)
-#else
-# define clearerr_unlocked(x) clearerr (x)
-#endif
-
-#if HAVE_DECL_FEOF_UNLOCKED
-# undef feof
-# define feof(x) feof_unlocked (x)
-#else
-# define feof_unlocked(x) feof (x)
-#endif
-
-#if HAVE_DECL_FERROR_UNLOCKED
-# undef ferror
-# define ferror(x) ferror_unlocked (x)
-#else
-# define ferror_unlocked(x) ferror (x)
-#endif
-
-#if HAVE_DECL_FFLUSH_UNLOCKED
-# undef fflush
-# define fflush(x) fflush_unlocked (x)
-#else
-# define fflush_unlocked(x) fflush (x)
-#endif
-
-#if HAVE_DECL_FGETS_UNLOCKED
-# undef fgets
-# define fgets(x,y,z) fgets_unlocked (x,y,z)
-#else
-# define fgets_unlocked(x,y,z) fgets (x,y,z)
-#endif
-
-#if HAVE_DECL_FPUTC_UNLOCKED
-# undef fputc
-# define fputc(x,y) fputc_unlocked (x,y)
-#else
-# define fputc_unlocked(x,y) fputc (x,y)
-#endif
-
-#if HAVE_DECL_FPUTS_UNLOCKED
-# undef fputs
-# define fputs(x,y) fputs_unlocked (x,y)
-#else
-# define fputs_unlocked(x,y) fputs (x,y)
-#endif
-
-#if HAVE_DECL_FREAD_UNLOCKED
-# undef fread
-# define fread(w,x,y,z) fread_unlocked (w,x,y,z)
-#else
-# define fread_unlocked(w,x,y,z) fread (w,x,y,z)
-#endif
-
-#if HAVE_DECL_FWRITE_UNLOCKED
-# undef fwrite
-# define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
-#else
-# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z)
-#endif
-
-#if HAVE_DECL_GETC_UNLOCKED
-# undef getc
-# define getc(x) getc_unlocked (x)
-#else
-# define getc_unlocked(x) getc (x)
-#endif
-
-#if HAVE_DECL_GETCHAR_UNLOCKED
-# undef getchar
-# define getchar() getchar_unlocked ()
-#else
-# define getchar_unlocked() getchar ()
-#endif
-
-#if HAVE_DECL_PUTC_UNLOCKED
-# undef putc
-# define putc(x,y) putc_unlocked (x,y)
-#else
-# define putc_unlocked(x,y) putc (x,y)
-#endif
-
-#if HAVE_DECL_PUTCHAR_UNLOCKED
-# undef putchar
-# define putchar(x) putchar_unlocked (x)
-#else
-# define putchar_unlocked(x) putchar (x)
-#endif
-
-#undef flockfile
-#define flockfile(x) ((void) 0)
-
-#undef ftrylockfile
-#define ftrylockfile(x) 0
-
-#undef funlockfile
-#define funlockfile(x) ((void) 0)
+# include <stdio.h>
+
+# if HAVE_DECL_CLEARERR_UNLOCKED
+#  undef clearerr
+#  define clearerr(x) clearerr_unlocked (x)
+# else
+#  define clearerr_unlocked(x) clearerr (x)
+# endif
+
+# if HAVE_DECL_FEOF_UNLOCKED
+#  undef feof
+#  define feof(x) feof_unlocked (x)
+# else
+#  define feof_unlocked(x) feof (x)
+# endif
+
+# if HAVE_DECL_FERROR_UNLOCKED
+#  undef ferror
+#  define ferror(x) ferror_unlocked (x)
+# else
+#  define ferror_unlocked(x) ferror (x)
+# endif
+
+# if HAVE_DECL_FFLUSH_UNLOCKED
+#  undef fflush
+#  define fflush(x) fflush_unlocked (x)
+# else
+#  define fflush_unlocked(x) fflush (x)
+# endif
+
+# if HAVE_DECL_FGETS_UNLOCKED
+#  undef fgets
+#  define fgets(x,y,z) fgets_unlocked (x,y,z)
+# else
+#  define fgets_unlocked(x,y,z) fgets (x,y,z)
+# endif
+
+# if HAVE_DECL_FPUTC_UNLOCKED
+#  undef fputc
+#  define fputc(x,y) fputc_unlocked (x,y)
+# else
+#  define fputc_unlocked(x,y) fputc (x,y)
+# endif
+
+# if HAVE_DECL_FPUTS_UNLOCKED
+#  undef fputs
+#  define fputs(x,y) fputs_unlocked (x,y)
+# else
+#  define fputs_unlocked(x,y) fputs (x,y)
+# endif
+
+# if HAVE_DECL_FREAD_UNLOCKED
+#  undef fread
+#  define fread(w,x,y,z) fread_unlocked (w,x,y,z)
+# else
+#  define fread_unlocked(w,x,y,z) fread (w,x,y,z)
+# endif
+
+# if HAVE_DECL_FWRITE_UNLOCKED
+#  undef fwrite
+#  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
+# else
+#  define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z)
+# endif
+
+# if HAVE_DECL_GETC_UNLOCKED
+#  undef getc
+#  define getc(x) getc_unlocked (x)
+# else
+#  define getc_unlocked(x) getc (x)
+# endif
+
+# if HAVE_DECL_GETCHAR_UNLOCKED
+#  undef getchar
+#  define getchar() getchar_unlocked ()
+# else
+#  define getchar_unlocked() getchar ()
+# endif
+
+# if HAVE_DECL_PUTC_UNLOCKED
+#  undef putc
+#  define putc(x,y) putc_unlocked (x,y)
+# else
+#  define putc_unlocked(x,y) putc (x,y)
+# endif
+
+# if HAVE_DECL_PUTCHAR_UNLOCKED
+#  undef putchar
+#  define putchar(x) putchar_unlocked (x)
+# else
+#  define putchar_unlocked(x) putchar (x)
+# endif
+
+# undef flockfile
+# define flockfile(x) ((void) 0)
+
+# undef ftrylockfile
+# define ftrylockfile(x) 0
+
+# undef funlockfile
+# define funlockfile(x) ((void) 0)
 
 #endif /* UNLOCKED_IO_H */
index 8da1f20f9e48fa2e3b26aaf8875fb959716304e8..1d5f70b0d89b7cd8355ca863ca9373430b5179a9 100644 (file)
 /* Written by Paul Eggert.  */
 
 #ifndef XTIME_H_
-#define XTIME_H_ 1
+# define XTIME_H_ 1
 
 /* xtime_t is a signed type used for time stamps.  It is an integer
    type that is a count of nanoseconds -- except for obsolescent hosts
    without sufficiently-wide integers, where it is a count of
    seconds.  */
-#if HAVE_LONG_LONG
+# if HAVE_LONG_LONG
 typedef long long int xtime_t;
-# define XTIME_PRECISION 1000000000LL
-#else
-# include <limits.h>
-typedef long int xtime_t;
-# if LONG_MAX >> 31 >> 31 == 0
-#  define XTIME_PRECISION 1L
+#  define XTIME_PRECISION 1000000000LL
 # else
-#  define XTIME_PRECISION 1000000000L
+#  include <limits.h>
+typedef long int xtime_t;
+#  if LONG_MAX >> 31 >> 31 == 0
+#   define XTIME_PRECISION 1L
+#  else
+#   define XTIME_PRECISION 1000000000L
+#  endif
 # endif
-#endif
 
 /* Return an extended time value that contains S seconds and NS
    nanoseconds, without any overflow checking.  */
index e45fed99e2f38c2793df4029d4e0480185235228..e4b945838ebc247aebb40616f0842b257f46d56c 100644 (file)
@@ -1,5 +1,7 @@
 /* yesno.c -- read a yes/no response from stdin
-   Copyright (C) 1990, 1998, 2001, 2003, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 1990, 1998, 2001, 2003, 2004, 2005 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
 
 #include "yesno.h"
 
-#include <ctype.h>
 #include <stdlib.h>
 #include <stdio.h>
 
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-#endif
+#include "getline.h"
 
-/* Read one line from standard input
-   and return nonzero if that line begins with y or Y,
-   otherwise return 0. */
+/* Return true if we read an affirmative line from standard input.  */
 
 extern int rpmatch (char const *response);
 
 bool
 yesno (void)
 {
-  /* We make some assumptions here:
-     a) leading white space in the response are not vital
-     b) the first 128 characters of the answer are enough (the rest can
-       be ignored)
-     I cannot think for a situation where this is not ok.  --drepper@gnu  */
-  char buf[128];
-  int len = 0;
-  int c;
-
-  while ((c = getchar ()) != EOF && c != '\n')
-    if ((len > 0 && len < 127) || (len == 0 && !isspace (c)))
-      buf[len++] = c;
-  buf[len] = '\0';
-
-  return rpmatch (buf) == 1;
+  char *response = NULL;
+  size_t response_size = 0;
+  ssize_t response_len = getline (&response, &response_size, stdin);
+  bool yes;
+
+  if (response_len <= 0)
+    yes = false;
+  else
+    {
+      response[response_len - 1] = '\0';
+      yes = (0 < rpmatch (response));
+    }
+
+  free (response);
+  return yes;
 }
index e0bd2902b7055a0cfd49312eaee0a0f8767d53d0..2b9584579d7d4c725511caea65cf466b0fc0ea06 100644 (file)
@@ -8,6 +8,7 @@ lib/yesno.h
 m4/yesno.m4
 
 Depends-on:
+getline
 rpmatch
 stdbool