libprelude/master: Update GnuLib code (fixes stat module inclusion)
[email protected] Mon, 11 Jan 2010 12:55:00 +0100 (CET)
| Newsgroups | gmane.comp.security.ids.prelude.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit f4315ae81a779f222b916924cafc4acf43d6e141 Author: Yoann Vandoorselaere <[email protected]> Date: Mon Jan 11 12:54:55 2010 +0100 Update GnuLib code (fixes stat module inclusion) ======================================== libmissing/Makefile.am | 9 ++++ libmissing/ftw.c | 1 + libmissing/m4/gnulib-comp.m4 | 6 +- libmissing/tests/Makefile.am | 9 ---- libmissing/tests/stat.c | 104 ------------------------------------------ 5 files changed, 13 insertions(+), 116 deletions(-) ======================================== diff --git a/libmissing/Makefile.am b/libmissing/Makefile.am index 7ad284f..61b7774 100644 --- a/libmissing/Makefile.am +++ b/libmissing/Makefile.am @@ -904,6 +904,15 @@ EXTRA_DIST += w32sock.h ## end gnulib module sockets +## begin gnulib module stat + + +EXTRA_DIST += stat.c + +EXTRA_libmissing_la_SOURCES += stat.c + +## end gnulib module stat + ## begin gnulib module stdbool BUILT_SOURCES += $(STDBOOL_H) diff --git a/libmissing/ftw.c b/libmissing/ftw.c index 4b86fb3..3736aaf 100644 --- a/libmissing/ftw.c +++ b/libmissing/ftw.c @@ -24,6 +24,7 @@ #include <stdio.h> #include <string.h> #include <sys/types.h> +#include <sys/stat.h> #include <dirent.h> #include <errno.h> diff --git a/libmissing/m4/gnulib-comp.m4 b/libmissing/m4/gnulib-comp.m4 index 2578185..06b9f79 100644 --- a/libmissing/m4/gnulib-comp.m4 +++ b/libmissing/m4/gnulib-comp.m4 @@ -188,6 +188,8 @@ AC_SUBST([LTALLOCA]) gl_SOCKETS gl_TYPE_SOCKLEN_T gt_TYPE_SSIZE_T + gl_FUNC_STAT + gl_SYS_STAT_MODULE_INDICATOR([stat]) AM_STDBOOL_H gl_STDDEF_H gl_STDINT_H @@ -311,8 +313,6 @@ AC_SUBST([LTALLOCA]) AC_CHECK_HEADERS_ONCE([unistd.h sys/wait.h]) AC_CHECK_HEADERS_ONCE([unistd.h sys/wait.h]) AC_CHECK_DECLS_ONCE([alarm]) - gl_FUNC_STAT - gl_SYS_STAT_MODULE_INDICATOR([stat]) gt_TYPE_WCHAR_T gt_TYPE_WINT_T AC_CHECK_DECLS_ONCE([alarm]) @@ -514,6 +514,7 @@ AC_DEFUN([gl_FILE_LIST], [ lib/socket.c lib/sockets.c lib/sockets.h + lib/stat.c lib/stdbool.in.h lib/stddef.in.h lib/stdint.in.h @@ -783,7 +784,6 @@ AC_DEFUN([gl_FILE_LIST], [ tests=lib/lstat.c tests=lib/open.c tests=lib/same-inode.h - tests=lib/stat.c tests=lib/symlink.c tests=lib/wctob.c ]) diff --git a/libmissing/tests/Makefile.am b/libmissing/tests/Makefile.am index bbfc36b..3137c72 100644 --- a/libmissing/tests/Makefile.am +++ b/libmissing/tests/Makefile.am @@ -521,15 +521,6 @@ EXTRA_DIST += test-sockets.c ## end gnulib module sockets-tests -## begin gnulib module stat - - -EXTRA_DIST += stat.c - -EXTRA_libtests_a_SOURCES += stat.c - -## end gnulib module stat - ## begin gnulib module stat-tests TESTS += test-stat diff --git a/libmissing/tests/stat.c b/libmissing/tests/stat.c deleted file mode 100644 index 875317b..0000000 --- a/libmissing/tests/stat.c +++ /dev/null @@ -1,104 +0,0 @@ -/* Work around platform bugs in stat. - Copyright (C) 2009, 2010 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/>. */ - -/* written by Eric Blake */ - -#include <config.h> - -/* Get the original definition of stat. It might be defined as a macro. */ -#define __need_system_sys_stat_h -#include <sys/types.h> -#include <sys/stat.h> -#undef __need_system_sys_stat_h - -static inline int -orig_stat (const char *filename, struct stat *buf) -{ - return stat (filename, buf); -} - -/* Specification. */ -#include <sys/stat.h> - -#include <errno.h> -#include <limits.h> -#include <stdbool.h> -#include <string.h> - -/* Store information about NAME into ST. Work around bugs with - trailing slashes. Mingw has other bugs (such as st_ino always - being 0 on success) which this wrapper does not work around. But - at least this implementation provides the ability to emulate fchdir - correctly. */ - -int -rpl_stat (char const *name, struct stat *st) -{ - int result = orig_stat (name, st); -#if REPLACE_FUNC_STAT_FILE - /* Solaris 9 mistakenly succeeds when given a non-directory with a - trailing slash. */ - if (result == 0 && !S_ISDIR (st->st_mode)) - { - size_t len = strlen (name); - if (ISSLASH (name[len - 1])) - { - errno = ENOTDIR; - return -1; - } - } -#endif /* REPLACE_FUNC_STAT_FILE */ -#if REPLACE_FUNC_STAT_DIR - if (result == -1 && errno == ENOENT) - { - /* Due to mingw's oddities, there are some directories (like - c:\) where stat() only succeeds with a trailing slash, and - other directories (like c:\windows) where stat() only - succeeds without a trailing slash. But we want the two to be - synonymous, since chdir() manages either style. Likewise, Mingw also - reports ENOENT for names longer than PATH_MAX, when we want - ENAMETOOLONG, and for stat("file/"), when we want ENOTDIR. - Fortunately, mingw PATH_MAX is small enough for stack - allocation. */ - char fixed_name[PATH_MAX + 1] = {0}; - size_t len = strlen (name); - bool check_dir = false; - if (PATH_MAX <= len) - errno = ENAMETOOLONG; - else if (len) - { - strcpy (fixed_name, name); - if (ISSLASH (fixed_name[len - 1])) - { - check_dir = true; - while (len && ISSLASH (fixed_name[len - 1])) - fixed_name[--len] = '\0'; - if (!len) - fixed_name[0] = '/'; - } - else - fixed_name[len++] = '/'; - result = orig_stat (fixed_name, st); - if (result == 0 && check_dir && !S_ISDIR (st->st_mode)) - { - result = -1; - errno = ENOTDIR; - } - } - } -#endif /* REPLACE_FUNC_STAT_DIR */ - return result; -} _______________________________________________ Prelude-cvslog site list [email protected] http://lists.prelude-ids.org/mailman/listinfo/prelude-cvslog