bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] statat: new module, split out from fstatat


From: Paul Eggert
Subject: [PATCH] statat: new module, split out from fstatat
Date: Wed, 23 Jan 2013 19:39:45 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2

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  <address@hidden>
+
+       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  <address@hidden>
 
        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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]