1
0
mirror of https://https.git.savannah.gnu.org/git/gnulib.git synced 2026-09-01 02:34:55 +00:00

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.
This commit is contained in:
Paul Eggert
2013-01-23 18:20:09 -08:00
parent 2bf79a9ca7
commit 26b7d0370e
8 changed files with 97 additions and 11 deletions
+17
View File
@@ -1,3 +1,20 @@
2013-01-23 Paul Eggert <eggert@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 <eggert@cs.ucla.edu>
tests: don't assume fd 99 is closed
+5 -5
View File
@@ -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);
+1 -1
View File
@@ -1,3 +1,3 @@
#include <config.h>
#define FSTATAT_INLINE _GL_EXTERN_INLINE
#define STATAT_INLINE _GL_EXTERN_INLINE
#include "openat.h"
+1 -4
View File
@@ -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
+23
View File
@@ -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
+12
View File
@@ -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@
+11 -1
View File
@@ -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
+27
View File
@@ -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"