GNU Emacs needs the POSIX-specified fstatat, but not the gnulib-specified statat and lstat. Split the latter two into a new module 'statat'. * lib/openat.h: Depend on GNULIB_STATAT, not GNULIB_FSTATAT. * lib/openat.h, lib/statat.c (STATAT_INLINE): Rename from FSTATAT_INLINE. All uses changed. * modules/fstatat (Files): Remove lib/statat.c. (gl_MODULE_INDICATOR([fstatat])): Remove. (lib_SOURCES): Remove. (Maintainer): Add self. * modules/statat, modules/statat-tests, tests/test-statat.c: New files. * tests/test-fstatat.c (BASE): Don't define if already defined. (do_stat, do_lstat) [!TEST_STATAT]: Test fstatat instead. --- ChangeLog | 17 +++++++++++++++++ lib/openat.h | 10 +++++----- lib/statat.c | 2 +- modules/fstatat | 5 +---- modules/statat | 23 +++++++++++++++++++++++ modules/statat-tests | 12 ++++++++++++ tests/test-fstatat.c | 12 +++++++++++- tests/test-statat.c | 27 +++++++++++++++++++++++++++ 8 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 modules/statat create mode 100644 modules/statat-tests create mode 100644 tests/test-statat.c
diff --git a/ChangeLog b/ChangeLog index 61b629e..16f8af0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2013-01-23 Paul Eggert <egg...@cs.ucla.edu> + + statat: new module, split out from fstatat + GNU Emacs needs the POSIX-specified fstatat, but not the + gnulib-specified statat and lstat. Split the latter two into a + new module 'statat'. + * lib/openat.h: Depend on GNULIB_STATAT, not GNULIB_FSTATAT. + * lib/openat.h, lib/statat.c (STATAT_INLINE): + Rename from FSTATAT_INLINE. All uses changed. + * modules/fstatat (Files): Remove lib/statat.c. + (gl_MODULE_INDICATOR([fstatat])): Remove. + (lib_SOURCES): Remove. + (Maintainer): Add self. + * modules/statat, modules/statat-tests, tests/test-statat.c: New files. + * tests/test-fstatat.c (BASE): Don't define if already defined. + (do_stat, do_lstat) [!TEST_STATAT]: Test fstatat instead. + 2013-01-22 Paul Eggert <egg...@cs.ucla.edu> tests: don't assume fd 99 is closed diff --git a/lib/openat.h b/lib/openat.h index bf1e893..eb90990 100644 --- a/lib/openat.h +++ b/lib/openat.h @@ -89,19 +89,19 @@ lchmodat (int fd, char const *file, mode_t mode) #endif -#if GNULIB_FSTATAT +#if GNULIB_STATAT -# ifndef FSTATAT_INLINE -# define FSTATAT_INLINE _GL_INLINE +# ifndef STATAT_INLINE +# define STATAT_INLINE _GL_INLINE # endif -FSTATAT_INLINE int +STATAT_INLINE int statat (int fd, char const *name, struct stat *st) { return fstatat (fd, name, st, 0); } -FSTATAT_INLINE int +STATAT_INLINE int lstatat (int fd, char const *name, struct stat *st) { return fstatat (fd, name, st, AT_SYMLINK_NOFOLLOW); diff --git a/lib/statat.c b/lib/statat.c index 28e21fe..8cdb17e 100644 --- a/lib/statat.c +++ b/lib/statat.c @@ -1,3 +1,3 @@ #include <config.h> -#define FSTATAT_INLINE _GL_EXTERN_INLINE +#define STATAT_INLINE _GL_EXTERN_INLINE #include "openat.h" diff --git a/modules/fstatat b/modules/fstatat index 7aa99b8..3d25cc8 100644 --- a/modules/fstatat +++ b/modules/fstatat @@ -3,7 +3,6 @@ fstatat() function: Return information about a file at a directory. Files: lib/fstatat.c -lib/statat.c lib/at-func.c m4/fstatat.m4 m4/lstat.m4 @@ -27,11 +26,9 @@ gl_FUNC_FSTATAT if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then AC_LIBOBJ([fstatat]) fi -gl_MODULE_INDICATOR([fstatat]) dnl for lib/openat.h gl_SYS_STAT_MODULE_INDICATOR([fstatat]) Makefile.am: -lib_SOURCES += statat.c Include: <sys/stat.h> @@ -40,4 +37,4 @@ License: GPL Maintainer: -Jim Meyering, Eric Blake +Jim Meyering, Eric Blake, Paul Eggert diff --git a/modules/statat b/modules/statat new file mode 100644 index 0000000..074d342 --- /dev/null +++ b/modules/statat @@ -0,0 +1,23 @@ +Description: +statat() and lstatat() functions: Return info about a file at a directory. + +Files: +lib/statat.c + +Depends-on: +fstatat + +configure.ac: +gl_MODULE_INDICATOR([statat]) dnl for lib/openat.h + +Makefile.am: +lib_SOURCES += statat.c + +Include: +"openat.h" + +License: +GPL + +Maintainer: +Jim Meyering, Eric Blake, Paul Eggert diff --git a/modules/statat-tests b/modules/statat-tests new file mode 100644 index 0000000..3264dd2 --- /dev/null +++ b/modules/statat-tests @@ -0,0 +1,12 @@ +Files: +tests/test-statat.c + +Depends-on: +fstatat-tests + +configure.ac: + +Makefile.am: +TESTS += test-statat +check_PROGRAMS += test-statat +test_statat_LDADD = $(LDADD) @LIBINTL@ diff --git a/tests/test-fstatat.c b/tests/test-fstatat.c index 83e184f..9fdbe2e 100644 --- a/tests/test-fstatat.c +++ b/tests/test-fstatat.c @@ -36,7 +36,9 @@ SIGNATURE_CHECK (fstatat, int, (int, char const *, struct stat *, int)); #include "ignore-value.h" #include "macros.h" -#define BASE "test-fstatat.t" +#ifndef BASE +# define BASE "test-fstatat.t" +#endif #include "test-lstat.h" #include "test-stat.h" @@ -47,14 +49,22 @@ static int dfd = AT_FDCWD; static int do_stat (char const *name, struct stat *st) { +#ifdef TEST_STATAT return statat (dfd, name, st); +#else + return fstatat (dfd, name, st, 0); +#endif } /* Wrapper around fstatat to test lstat behavior. */ static int do_lstat (char const *name, struct stat *st) { +#ifdef TEST_STATAT return lstatat (dfd, name, st); +#else + return fstatat (dfd, name, st, AT_SYMLINK_NOFOLLOW); +#endif } int diff --git a/tests/test-statat.c b/tests/test-statat.c new file mode 100644 index 0000000..4adb3ab --- /dev/null +++ b/tests/test-statat.c @@ -0,0 +1,27 @@ +/* Tests of statat and lstatat. + Copyright (C) 2009-2013 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 + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "openat.h" + +#include "signature.h" +SIGNATURE_CHECK (statat, int, (int, char const *, struct stat *)); +SIGNATURE_CHECK (lstatat, int, (int, char const *, struct stat *)); + +#define BASE "test-statat.t" +#define TEST_STATAT +#include "test-fstatat.c" -- 1.7.11.7