-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I noticed these minor issues today, so I'm pushing this. I'm now heavily entrenched in trying to write utimensat, and it's turning into quite a project.
- -- Don't work too hard, make some time for fun as well! Eric Blake e...@byu.net -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (Cygwin) Comment: Public key at home.comcast.net/~ericblake/eblake.gpg Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkrNPkAACgkQ84KuGfSFAYCqOQCgiifQZnda9eoxJFHIR6Jf0XeG 6D0An3MrVCPl12al5rlhAlvvHANOvNmh =q5YU -----END PGP SIGNATURE-----
>From 4cfdc2ad7312588b038a55c6ecb1c89064e65d7d Mon Sep 17 00:00:00 2001 From: Eric Blake <e...@byu.net> Date: Wed, 7 Oct 2009 08:17:36 -0600 Subject: [PATCH 1/2] openat, utimens: whitespace cleanup * lib/openat.c: Prefer space throughout, rather than mix of 8 spaces vs. tabs. * lib/at-func.c: Likewise. * lib/utimens.c: Likewise. Signed-off-by: Eric Blake <e...@byu.net> --- ChangeLog | 8 +++++ lib/at-func.c | 28 +++++++++--------- lib/openat.c | 92 ++++++++++++++++++++++++++++---------------------------- lib/utimens.c | 78 ++++++++++++++++++++++++------------------------ 4 files changed, 107 insertions(+), 99 deletions(-) diff --git a/ChangeLog b/ChangeLog index c120c09..8e4f204 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2009-10-07 Eric Blake <e...@byu.net> + openat, utimens: whitespace cleanup + * lib/openat.c: Prefer space throughout, rather than mix of 8 + spaces vs. tabs. + * lib/at-func.c: Likewise. + * lib/utimens.c: Likewise. + +2009-10-07 Eric Blake <e...@byu.net> + openat: avoid using wrong fd * lib/openat.c (openat_permissive): Reject user's fd if saving the working directory chooses same fd. diff --git a/lib/at-func.c b/lib/at-func.c index 4e5ba2f..373b5f6 100644 --- a/lib/at-func.c +++ b/lib/at-func.c @@ -70,20 +70,20 @@ AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS) char *proc_file = openat_proc_name (proc_buf, fd, file); if (proc_file) { - FUNC_RESULT proc_result = CALL_FUNC (proc_file); - int proc_errno = errno; - if (proc_file != proc_buf) - free (proc_file); - /* If the syscall succeeds, or if it fails with an unexpected - errno value, then return right away. Otherwise, fall through - and resort to using save_cwd/restore_cwd. */ - if (0 <= proc_result) - return proc_result; - if (! EXPECTED_ERRNO (proc_errno)) - { - errno = proc_errno; - return proc_result; - } + FUNC_RESULT proc_result = CALL_FUNC (proc_file); + int proc_errno = errno; + if (proc_file != proc_buf) + free (proc_file); + /* If the syscall succeeds, or if it fails with an unexpected + errno value, then return right away. Otherwise, fall through + and resort to using save_cwd/restore_cwd. */ + if (0 <= proc_result) + return proc_result; + if (! EXPECTED_ERRNO (proc_errno)) + { + errno = proc_errno; + return proc_result; + } } } diff --git a/lib/openat.c b/lib/openat.c index aae7782..2b15bb5 100644 --- a/lib/openat.c +++ b/lib/openat.c @@ -47,7 +47,7 @@ rpl_openat (int dfd, char const *filename, int flags, ...) va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 - creates crashing code when 'mode_t' is smaller than 'int'. */ + creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); @@ -79,10 +79,10 @@ rpl_openat (int dfd, char const *filename, int flags, ...) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') - { - errno = EISDIR; - return -1; - } + { + errno = EISDIR; + return -1; + } } #endif @@ -106,16 +106,16 @@ rpl_openat (int dfd, char const *filename, int flags, ...) /* We know len is positive, since open did not fail with ENOENT. */ size_t len = strlen (filename); if (filename[len - 1] == '/') - { - struct stat statbuf; - - if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) - { - close (fd); - errno = ENOTDIR; - return -1; - } - } + { + struct stat statbuf; + + if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) + { + close (fd); + errno = ENOTDIR; + return -1; + } + } } #endif @@ -143,7 +143,7 @@ openat (int fd, char const *file, int flags, ...) va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 - creates crashing code when 'mode_t' is smaller than 'int'. */ + creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); @@ -165,7 +165,7 @@ openat (int fd, char const *file, int flags, ...) int openat_permissive (int fd, char const *file, int flags, mode_t mode, - int *cwd_errno) + int *cwd_errno) { struct saved_cwd saved_cwd; int saved_errno; @@ -180,18 +180,18 @@ openat_permissive (int fd, char const *file, int flags, mode_t mode, char *proc_file = openat_proc_name (buf, fd, file); if (proc_file) { - int open_result = open (proc_file, flags, mode); - int open_errno = errno; - if (proc_file != buf) - free (proc_file); - /* If the syscall succeeds, or if it fails with an unexpected - errno value, then return right away. Otherwise, fall through - and resort to using save_cwd/restore_cwd. */ - if (0 <= open_result || ! EXPECTED_ERRNO (open_errno)) - { - errno = open_errno; - return open_result; - } + int open_result = open (proc_file, flags, mode); + int open_errno = errno; + if (proc_file != buf) + free (proc_file); + /* If the syscall succeeds, or if it fails with an unexpected + errno value, then return right away. Otherwise, fall through + and resort to using save_cwd/restore_cwd. */ + if (0 <= open_result || ! EXPECTED_ERRNO (open_errno)) + { + errno = open_errno; + return open_result; + } } } @@ -199,7 +199,7 @@ openat_permissive (int fd, char const *file, int flags, mode_t mode, if (! save_ok) { if (! cwd_errno) - openat_save_fail (errno); + openat_save_fail (errno); *cwd_errno = errno; } if (0 <= fd && fd == saved_cwd.desc) @@ -220,17 +220,17 @@ openat_permissive (int fd, char const *file, int flags, mode_t mode, err = open (file, flags, mode); saved_errno = errno; if (save_ok && restore_cwd (&saved_cwd) != 0) - { - if (! cwd_errno) - { - /* Don't write a message to just-created fd 2. */ - saved_errno = errno; - if (err == STDERR_FILENO) - close (err); - openat_restore_fail (saved_errno); - } - *cwd_errno = errno; - } + { + if (! cwd_errno) + { + /* Don't write a message to just-created fd 2. */ + saved_errno = errno; + if (err == STDERR_FILENO) + close (err); + openat_restore_fail (saved_errno); + } + *cwd_errno = errno; + } } free_cwd (&saved_cwd); @@ -251,11 +251,11 @@ openat_needs_fchdir (void) char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, "."); if (proc_file) - { - needs_fchdir = false; - if (proc_file != buf) - free (proc_file); - } + { + needs_fchdir = false; + if (proc_file != buf) + free (proc_file); + } close (fd); } diff --git a/lib/utimens.c b/lib/utimens.c index f7bc75e..86c1c5a 100644 --- a/lib/utimens.c +++ b/lib/utimens.c @@ -66,7 +66,7 @@ struct utimbuf int gl_futimens (int fd ATTRIBUTE_UNUSED, - char const *file, struct timespec const timespec[2]) + char const *file, struct timespec const timespec[2]) { /* Some Linux-based NFS clients are buggy, and mishandle time stamps of files in NFS file systems in some cases. We have no @@ -131,11 +131,11 @@ gl_futimens (int fd ATTRIBUTE_UNUSED, struct timeval const *t; if (timespec) { - timeval[0].tv_sec = timespec[0].tv_sec; - timeval[0].tv_usec = timespec[0].tv_nsec / 1000; - timeval[1].tv_sec = timespec[1].tv_sec; - timeval[1].tv_usec = timespec[1].tv_nsec / 1000; - t = timeval; + timeval[0].tv_sec = timespec[0].tv_sec; + timeval[0].tv_usec = timespec[0].tv_nsec / 1000; + timeval[1].tv_sec = timespec[1].tv_sec; + timeval[1].tv_usec = timespec[1].tv_nsec / 1000; + t = timeval; } else t = NULL; @@ -143,27 +143,27 @@ gl_futimens (int fd ATTRIBUTE_UNUSED, if (fd < 0) { # if HAVE_FUTIMESAT - return futimesat (AT_FDCWD, file, t); + return futimesat (AT_FDCWD, file, t); # endif } else { - /* If futimesat or futimes fails here, don't try to speed things - up by returning right away. glibc can incorrectly fail with - errno == ENOENT if /proc isn't mounted. Also, Mandrake 10.0 - in high security mode doesn't allow ordinary users to read - /proc/self, so glibc incorrectly fails with errno == EACCES. - If errno == EIO, EPERM, or EROFS, it's probably safe to fail - right away, but these cases are rare enough that they're not - worth optimizing, and who knows what other messed-up systems - are out there? So play it safe and fall back on the code - below. */ + /* If futimesat or futimes fails here, don't try to speed things + up by returning right away. glibc can incorrectly fail with + errno == ENOENT if /proc isn't mounted. Also, Mandrake 10.0 + in high security mode doesn't allow ordinary users to read + /proc/self, so glibc incorrectly fails with errno == EACCES. + If errno == EIO, EPERM, or EROFS, it's probably safe to fail + right away, but these cases are rare enough that they're not + worth optimizing, and who knows what other messed-up systems + are out there? So play it safe and fall back on the code + below. */ # if HAVE_FUTIMESAT - if (futimesat (fd, NULL, t) == 0) - return 0; + if (futimesat (fd, NULL, t) == 0) + return 0; # elif HAVE_FUTIMES - if (futimes (fd, t) == 0) - return 0; + if (futimes (fd, t) == 0) + return 0; # endif } #endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */ @@ -171,20 +171,20 @@ gl_futimens (int fd ATTRIBUTE_UNUSED, if (!file) { #if ! (HAVE_FUTIMESAT || (HAVE_WORKING_UTIMES && HAVE_FUTIMES)) - errno = ENOSYS; + errno = ENOSYS; #endif - /* Prefer EBADF to ENOSYS if both error numbers apply. */ - if (errno == ENOSYS) - { - int fd2 = dup (fd); - int dup_errno = errno; - if (0 <= fd2) - close (fd2); - errno = (fd2 < 0 && dup_errno == EBADF ? EBADF : ENOSYS); - } - - return -1; + /* Prefer EBADF to ENOSYS if both error numbers apply. */ + if (errno == ENOSYS) + { + int fd2 = dup (fd); + int dup_errno = errno; + if (0 <= fd2) + close (fd2); + errno = (fd2 < 0 && dup_errno == EBADF ? EBADF : ENOSYS); + } + + return -1; } #if HAVE_WORKING_UTIMES @@ -194,13 +194,13 @@ gl_futimens (int fd ATTRIBUTE_UNUSED, struct utimbuf utimbuf; struct utimbuf const *ut; if (timespec) - { - utimbuf.actime = timespec[0].tv_sec; - utimbuf.modtime = timespec[1].tv_sec; - ut = &utimbuf; - } + { + utimbuf.actime = timespec[0].tv_sec; + utimbuf.modtime = timespec[1].tv_sec; + ut = &utimbuf; + } else - ut = NULL; + ut = NULL; return utime (file, ut); } -- 1.6.5.rc1 >From be6ecdb426dd16eb475d3f869a3c27bd2271cca5 Mon Sep 17 00:00:00 2001 From: Eric Blake <e...@byu.net> Date: Wed, 7 Oct 2009 14:49:38 -0600 Subject: [PATCH 2/2] maint: minor cleanups * lib/fts.c (ATTRIBUTE_UNUSED): Delete; use gnulib-guaranteed _ATTRIBUTE_UNUSED instead. * lib/getdate.y (ATTRIBUTE_UNUSED): Likewise. * lib/utimens.c (ATTRIBUTE_UNUSED): Likewise. * modules/linkat-tests (Files): Distribute test-link.h. Signed-off-by: Eric Blake <e...@byu.net> --- ChangeLog | 7 +++++++ lib/fts.c | 16 +++------------- lib/getdate.y | 14 ++------------ lib/utimens.c | 12 +----------- modules/linkat-tests | 1 + 5 files changed, 14 insertions(+), 36 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8e4f204..e1b6ca8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2009-10-07 Eric Blake <e...@byu.net> + maint: minor cleanups + * lib/fts.c (ATTRIBUTE_UNUSED): Delete; use gnulib-guaranteed + _UNUSED_PARAMETER_ instead. + * lib/getdate.y (ATTRIBUTE_UNUSED): Likewise. + * lib/utimens.c (ATTRIBUTE_UNUSED): Likewise. + * modules/linkat-tests (Files): Distribute test-link.h. + openat, utimens: whitespace cleanup * lib/openat.c: Prefer space throughout, rather than mix of 8 spaces vs. tabs. diff --git a/lib/fts.c b/lib/fts.c index 041f9f0..40a837e 100644 --- a/lib/fts.c +++ b/lib/fts.c @@ -173,16 +173,6 @@ enum Fts_stat # define __set_errno(Val) errno = (Val) #endif -#ifndef __attribute__ -# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) -# define __attribute__(x) /* empty */ -# endif -#endif - -#ifndef ATTRIBUTE_UNUSED -# define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -#endif - /* If this host provides the openat function, then we can avoid attempting to open "." in some initialization code below. */ #ifdef HAVE_OPENAT @@ -727,9 +717,9 @@ leaf_optimization_applies (int dir_fd) #else static bool -dirent_inode_sort_may_be_useful (int dir_fd ATTRIBUTE_UNUSED) { return true; } +dirent_inode_sort_may_be_useful (int dir_fd _UNUSED_PARAMETER_) { return true; } static bool -leaf_optimization_applies (int dir_fd ATTRIBUTE_UNUSED) { return false; } +leaf_optimization_applies (int dir_fd _UNUSED_PARAMETER_) { return false; } #endif #if GNULIB_FTS @@ -1079,7 +1069,7 @@ check_for_dir: */ /* ARGSUSED */ int -fts_set(FTS *sp ATTRIBUTE_UNUSED, FTSENT *p, int instr) +fts_set(FTS *sp _UNUSED_PARAMETER_, FTSENT *p, int instr) { if (instr != 0 && instr != FTS_AGAIN && instr != FTS_FOLLOW && instr != FTS_NOINSTR && instr != FTS_SKIP) { diff --git a/lib/getdate.y b/lib/getdate.y index f022710..94160b2 100644 --- a/lib/getdate.y +++ b/lib/getdate.y @@ -78,16 +78,6 @@ of `digit' even when the host does not conform to POSIX. */ #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) -#ifndef __attribute__ -# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__ -# define __attribute__(x) -# endif -#endif - -#ifndef ATTRIBUTE_UNUSED -# define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -#endif - /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. A and B should be free of side effects, and B should be in the range 0 <= B <= INT_BITS - 2, where @@ -1155,8 +1145,8 @@ yylex (YYSTYPE *lvalp, parser_control *pc) /* Do nothing if the parser reports an error. */ static int -yyerror (parser_control const *pc ATTRIBUTE_UNUSED, - char const *s ATTRIBUTE_UNUSED) +yyerror (parser_control const *pc _UNUSED_PARAMETER_, + char const *s _UNUSED_PARAMETER_) { return 0; } diff --git a/lib/utimens.c b/lib/utimens.c index 86c1c5a..10d2c82 100644 --- a/lib/utimens.c +++ b/lib/utimens.c @@ -44,16 +44,6 @@ struct utimbuf }; #endif -#ifndef __attribute__ -# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) -# define __attribute__(x) -# endif -#endif - -#ifndef ATTRIBUTE_UNUSED -# define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -#endif - /* Set the access and modification time stamps of FD (a.k.a. FILE) to be TIMESPEC[0] and TIMESPEC[1], respectively. FD must be either negative -- in which case it is ignored -- @@ -65,7 +55,7 @@ struct utimbuf Return 0 on success, -1 (setting errno) on failure. */ int -gl_futimens (int fd ATTRIBUTE_UNUSED, +gl_futimens (int fd _UNUSED_PARAMETER_, char const *file, struct timespec const timespec[2]) { /* Some Linux-based NFS clients are buggy, and mishandle time stamps diff --git a/modules/linkat-tests b/modules/linkat-tests index 9fb6505..1f9aafa 100644 --- a/modules/linkat-tests +++ b/modules/linkat-tests @@ -1,4 +1,5 @@ Files: +tests/test-link.h tests/test-linkat.c Depends-on: -- 1.6.5.rc1