# HG changeset patch # User Paul Eggert # Date 1358994009 28800 # Node ID d536543d59a6ae71f4c5f01c7559bf35f982fe05 # Parent 80f2d531cd96f2115a54371d945c40595615c008 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. diff -r 80f2d531cd96 -r d536543d59a6 ChangeLog --- a/ChangeLog Wed Jan 23 08:08:47 2013 -0800 +++ b/ChangeLog Wed Jan 23 18:20:09 2013 -0800 @@ -1,3 +1,20 @@ +2013-01-23 Paul Eggert + + 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 tests: don't assume fd 99 is closed diff -r 80f2d531cd96 -r d536543d59a6 lib/openat.h --- a/lib/openat.h Wed Jan 23 08:08:47 2013 -0800 +++ b/lib/openat.h Wed Jan 23 18:20:09 2013 -0800 @@ -89,19 +89,19 @@ #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 -r 80f2d531cd96 -r d536543d59a6 lib/statat.c --- a/lib/statat.c Wed Jan 23 08:08:47 2013 -0800 +++ b/lib/statat.c Wed Jan 23 18:20:09 2013 -0800 @@ -1,3 +1,3 @@ #include -#define FSTATAT_INLINE _GL_EXTERN_INLINE +#define STATAT_INLINE _GL_EXTERN_INLINE #include "openat.h" diff -r 80f2d531cd96 -r d536543d59a6 modules/fstatat --- a/modules/fstatat Wed Jan 23 08:08:47 2013 -0800 +++ b/modules/fstatat Wed Jan 23 18:20:09 2013 -0800 @@ -3,7 +3,6 @@ Files: lib/fstatat.c -lib/statat.c lib/at-func.c m4/fstatat.m4 m4/lstat.m4 @@ -27,11 +26,9 @@ 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: @@ -40,4 +37,4 @@ GPL Maintainer: -Jim Meyering, Eric Blake +Jim Meyering, Eric Blake, Paul Eggert diff -r 80f2d531cd96 -r d536543d59a6 modules/statat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/statat Wed Jan 23 18:20:09 2013 -0800 @@ -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 -r 80f2d531cd96 -r d536543d59a6 modules/statat-tests --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/statat-tests Wed Jan 23 18:20:09 2013 -0800 @@ -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 -r 80f2d531cd96 -r d536543d59a6 tests/test-fstatat.c --- a/tests/test-fstatat.c Wed Jan 23 08:08:47 2013 -0800 +++ b/tests/test-fstatat.c Wed Jan 23 18:20:09 2013 -0800 @@ -36,7 +36,9 @@ #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 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 -r 80f2d531cd96 -r d536543d59a6 tests/test-statat.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-statat.c Wed Jan 23 18:20:09 2013 -0800 @@ -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 . */ + +#include + +#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"