From 6ef9a07334fff72a0f4ae8e548c303fdcc27eee8 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 15 May 2005 04:45:43 +0000 Subject: [PATCH] Sync from coreutils. * 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. --- ChangeLog | 4 ++ lib/ChangeLog | 11 +++ lib/gethrxtime.c | 2 +- lib/gethrxtime.h | 12 ++-- lib/getpass.h | 8 +-- lib/makepath.c | 14 ++-- lib/mountlist.h | 6 +- lib/path-concat.c | 4 +- lib/regex.h | 2 +- lib/strtoll.c | 2 +- lib/unlocked-io.h | 204 +++++++++++++++++++++++++++--------------------------- lib/xtime.h | 20 +++--- lib/yesno.c | 43 ++++++------ modules/yesno | 1 + 14 files changed, 176 insertions(+), 157 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8bd5e6cbc..5982c7a56 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2005-05-14 Paul Eggert + + * modules/yesno (Depends-on): Add getline. + 2005-05-13 Paul Eggert * MODULES.html.sh, README, gnulib-tool, tests/test-base64.c, diff --git a/lib/ChangeLog b/lib/ChangeLog index 538f0f038..51c1d8c3e 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,14 @@ +2005-05-14 Paul Eggert + + 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 * stdint_.h (int64_t, uint64_t, int_least64_t, uint_least64_t, diff --git a/lib/gethrxtime.c b/lib/gethrxtime.c index a316314d8..2c985789d 100644 --- a/lib/gethrxtime.c +++ b/lib/gethrxtime.c @@ -58,7 +58,7 @@ gethrxtime (void) } # endif -#if HAVE_MICROUPTIME +# if HAVE_MICROUPTIME { struct timeval tv; microuptime (&tv); diff --git a/lib/gethrxtime.h b/lib/gethrxtime.h index 4de3a9b3e..ecbd505d5 100644 --- a/lib/gethrxtime.h +++ b/lib/gethrxtime.h @@ -19,19 +19,19 @@ /* 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 +# if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME +# include static inline xtime_t gethrxtime (void) { return gethrtime (); } -#else +# else xtime_t gethrxtime (void); -#endif +# endif #endif diff --git a/lib/getpass.h b/lib/getpass.h index 6018e0726..bdff8754d 100644 --- a/lib/getpass.h +++ b/lib/getpass.h @@ -17,15 +17,15 @@ 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 +# include -#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 */ diff --git a/lib/makepath.c b/lib/makepath.c index 5c24773e5..19ad1f4a8 100644 --- a/lib/makepath.c +++ b/lib/makepath.c @@ -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; diff --git a/lib/mountlist.h b/lib/mountlist.h index 48d04341b..cacfe45cd 100644 --- a/lib/mountlist.h +++ b/lib/mountlist.h @@ -18,10 +18,10 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef MOUNTLIST_H_ -#define MOUNTLIST_H_ +# define MOUNTLIST_H_ -#include -#include +# include +# include /* A mount table entry. */ struct mount_entry diff --git a/lib/path-concat.c b/lib/path-concat.c index 1643aa99a..364081f15 100644 --- a/lib/path-concat.c +++ b/lib/path-concat.c @@ -89,8 +89,8 @@ path_concat (char const *dir, char const *abase, char **base_in_result) } #ifdef TEST_PATH_CONCAT -#include -#include +# include +# include int main () { diff --git a/lib/regex.h b/lib/regex.h index 73f9d7277..df46ce05a 100644 --- a/lib/regex.h +++ b/lib/regex.h @@ -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) diff --git a/lib/strtoll.c b/lib/strtoll.c index f61f5ada6..44f0970cf 100644 --- a/lib/strtoll.c +++ b/lib/strtoll.c @@ -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 diff --git a/lib/unlocked-io.h b/lib/unlocked-io.h index 816ed3de5..d00930361 100644 --- a/lib/unlocked-io.h +++ b/lib/unlocked-io.h @@ -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. @@ -32,106 +32,106 @@ the *_unlocked functions directly. On hosts that lack those functions, invoke the non-thread-safe versions instead. */ -#include - -#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 + +# 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 */ diff --git a/lib/xtime.h b/lib/xtime.h index 8da1f20f9..1d5f70b0d 100644 --- a/lib/xtime.h +++ b/lib/xtime.h @@ -19,24 +19,24 @@ /* 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 -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 +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. */ diff --git a/lib/yesno.c b/lib/yesno.c index e45fed99e..e4b945838 100644 --- a/lib/yesno.c +++ b/lib/yesno.c @@ -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 @@ -21,36 +23,31 @@ #include "yesno.h" -#include #include #include -#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; } diff --git a/modules/yesno b/modules/yesno index e0bd2902b..2b9584579 100644 --- a/modules/yesno +++ b/modules/yesno @@ -8,6 +8,7 @@ lib/yesno.h m4/yesno.m4 Depends-on: +getline rpmatch stdbool -- 2.11.0