It's late, I'm tired. Patches actually attached now. 2005-09-08 Derek Price <[EMAIL PROTECTED]>
* m4/glob.m4 (gl_GLOB_SUBSTITUTE): AC_LIBSOURCE C files. * lib/glob_.h: Move most code forked from glibc here, then include... * lib/glob-glibc.h: ...this new file, which is the original glibc header minus a few unavoidable changes. * modules/glob (Files): Add glob-glibc.h. (Makefile.am [EXTRA_DIST]): Remove macro. 2005-09-08 Derek Price <[EMAIL PROTECTED]> * posix/glob.h: Avoid a header and some largefile support when compiled as part of GNULIB. Use struct direct when necessary. Regards, Derek Derek Price wrote: >Paul Eggert wrote: > > > >>Hmm, actually they provisionally accepted the bug-1060 changes except >>for the part about using prototypes when defining external functions. >> >> >> >> > >Oh, that's what that meant. I was hoping someone else would say >something if it was important. Thanks. :) > > > >>where glob-libc.h is an unmodified copy of the glibc glob.h. >> >>Or perhaps the "...define our own stuff..." could all be in config.h, >>which would mean we wouldn't need two files. >> >> >> >> > >Well, there were 3 #include statements that needed to be in glob_.h, >before including glob-glibc.h, so I went with the extra include file. >I've attached a gnulib patch for review. It compiles here, in Linux CVS. > >There was also a small subset of changes that I can't see how to remove >from glob-glibc.h. I've attached the new glibc->gnulib patch. It is >much smaller now, so perhaps Roland will find it acceptable. (Actually, >4 lines, the dirent/direct change, might also be avoidable with >something like a global "#define dirent direct". It would be a small >GNULIB module, but a module that did this, included a few header files, >and defined a few macros like D_NAMLEN could replace 10-15 lines in each >of five or six modules.) > > > >>Could you please follow up on this in bug-gnulib first? I'd rather >>not burden Roland with gnulib issues more than I can help it. Thanks. >> >> >> >> > >That's why I started this thread on bug-gnulib in the first place. :) > >Regards, > >Derek > > -- Derek R. Price CVS Solutions Architect Ximbiot <http://ximbiot.com> v: +1 717.579.6168 f: +1 717.234.3125 <mailto:[EMAIL PROTECTED]>
Index: m4/glob.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/glob.m4,v retrieving revision 1.4 diff -u -p -r1.4 glob.m4 --- m4/glob.m4 14 Jul 2005 15:53:30 -0000 1.4 +++ m4/glob.m4 9 Sep 2005 03:39:14 -0000 @@ -1,4 +1,4 @@ -# glob.m4 serial 2 +# glob.m4 serial 3 dnl Copyright (C) 2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -13,6 +13,7 @@ AC_DEFUN([gl_GLOB_SUBSTITUTE], gl_PREREQ_GLOB GLOB_H=glob.h + AC_LIBSOURCES([glob.c, glob_.h, glob-glibc.h]) AC_LIBOBJ([glob]) AC_DEFINE([GLOB_PREFIX], [[rpl_]], [Define to rpl_ if the glob replacement functions and variables Index: lib/glob_.h =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/glob_.h,v retrieving revision 1.3 diff -u -p -r1.3 glob_.h --- lib/glob_.h 7 Jun 2005 14:58:46 -0000 1.3 +++ lib/glob_.h 9 Sep 2005 03:39:14 -0000 @@ -1,73 +1,46 @@ -/* Copyright (C) 1991,92,95-98,2000,2001,2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. +/* glob_.h -- Find a path matching a pattern. - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + Copyright (C) 2005 Free Software Foundation, Inc. - The GNU C Library is distributed in the hope that it will be useful, + Written by Derek Price <[EMAIL PROTECTED]> & Paul Eggert <[EMAIL PROTECTED]> + + 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 2, 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 - Lesser General Public License for more details. + 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef GLOB_H +# define GLOB_H - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _GLOB_H -#define _GLOB_H 1 - -/* Note the reversal of the common HAVE_SYS_CDEFS_H idiom below. In this - way, #ifndef _SYS_CDEFS_H may be used to include <sys/cdefs.h> both when - it has been checked for via the GNULIB configure test and found and when - it has not been checked for, which we can presume means that the <glob.h> - GNULIB shares with GLIBC is being included as a system header and not as - part of GNULIB, in which case <sys/cdefs.h> may be assumed. */ -#ifndef _SYS_CDEFS_H -# include <sys/cdefs.h> -#endif -#ifndef __BEGIN_DECLS -# define __BEGIN_DECLS -# define __END_DECLS -#endif -#ifndef __THROW -# define __THROW -#endif - -__BEGIN_DECLS - -/* We need `size_t' for the following definitions. */ -#ifndef GLOB_PREFIX -# ifndef __size_t -# if defined __GNUC__ && __GNUC__ >= 2 -typedef __SIZE_TYPE__ __size_t; -# ifdef __USE_XOPEN -typedef __SIZE_TYPE__ size_t; -# endif -# else -# include <stddef.h> -# ifndef __size_t -# define __size_t size_t -# endif -# endif -# else -/* The GNU CC stddef.h version defines __size_t as empty. We need a real - definition. */ -# undef __size_t -# define __size_t size_t +# ifdef HAVE_SYS_CDEFS_H +# include <sys/cdefs.h> # endif -#else /* GLOB_PREFIX */ + # include <stddef.h> -# undef __size_t -# define __size_t size_t -#endif /* !GLOB_PREFIX */ -#ifdef GLOB_PREFIX -/* get struct stat */ +/* Get struct stat. */ # include <sys/stat.h> +# ifndef __BEGIN_DECLS +# define __BEGIN_DECLS +# define __END_DECLS +# endif +# ifndef __THROW +# define __THROW +# endif + +# undef __size_t +# define __size_t size_t + /* The following are necessary with MSVC and who knows where else. */ # ifndef __const # define __const const @@ -78,167 +51,14 @@ typedef __SIZE_TYPE__ size_t; # ifndef __USE_GNU # define __USE_GNU 1 # endif -#endif /* GLOB_PREFIX */ - -/* Bits set in the FLAGS argument to `glob'. */ -#define GLOB_ERR (1 << 0)/* Return on read errors. */ -#define GLOB_MARK (1 << 1)/* Append a slash to each name. */ -#define GLOB_NOSORT (1 << 2)/* Don't sort the names. */ -#define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */ -#define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */ -#define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */ -#define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ -#define GLOB_PERIOD (1 << 7)/* Leading `.' can be matched by metachars. */ - -#if !defined __USE_POSIX2 || defined __USE_BSD || defined __USE_GNU -# define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ -# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ -# define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ -# define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */ -# define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */ -# define GLOB_ONLYDIR (1 << 13)/* Match only directories. */ -# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error - if the user name is not available. */ -# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ - GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ - GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \ - GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK) -#else -# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ - GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ - GLOB_PERIOD) -#endif - -/* Error returns from `glob'. */ -#define GLOB_NOSPACE 1 /* Ran out of memory. */ -#define GLOB_ABORTED 2 /* Read error. */ -#define GLOB_NOMATCH 3 /* No matches found. */ -#define GLOB_NOSYS 4 /* Not implemented. */ -#ifdef __USE_GNU -/* Previous versions of this file defined GLOB_ABEND instead of - GLOB_ABORTED. Provide a compatibility definition here. */ -# define GLOB_ABEND GLOB_ABORTED -#endif - -/* Structure describing a globbing run. */ -#ifdef __USE_GNU -struct stat; -#endif -typedef struct - { - __size_t gl_pathc; /* Count of paths matched by the pattern. */ - char **gl_pathv; /* List of matched pathnames. */ - __size_t gl_offs; /* Slots to reserve in `gl_pathv'. */ - int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ - - /* If the GLOB_ALTDIRFUNC flag is set, the following functions - are used instead of the normal file access functions. */ - void (*gl_closedir) (void *); -#ifdef __USE_GNU -# if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__ - struct dirent *(*gl_readdir) (void *); -# else - struct direct *(*gl_readdir) (void *); -# endif -#else - void *(*gl_readdir) (void *); -#endif - void *(*gl_opendir) (__const char *); -#ifdef __USE_GNU - int (*gl_lstat) (__const char *__restrict, struct stat *__restrict); - int (*gl_stat) (__const char *__restrict, struct stat *__restrict); -#else - int (*gl_lstat) (__const char *__restrict, void *__restrict); - int (*gl_stat) (__const char *__restrict, void *__restrict); -#endif - } glob_t; - -#if !defined GLOB_PREFIX && defined __USE_LARGEFILE64 -# ifdef __USE_GNU -struct stat64; -# endif -typedef struct - { - __size_t gl_pathc; - char **gl_pathv; - __size_t gl_offs; - int gl_flags; - - /* If the GLOB_ALTDIRFUNC flag is set, the following functions - are used instead of the normal file access functions. */ - void (*gl_closedir) (void *); -# ifdef __USE_GNU - struct dirent64 *(*gl_readdir) (void *); -# else - void *(*gl_readdir) (void *); -# endif - void *(*gl_opendir) (__const char *); -# ifdef __USE_GNU - int (*gl_lstat) (__const char *__restrict, struct stat64 *__restrict); - int (*gl_stat) (__const char *__restrict, struct stat64 *__restrict); -# else - int (*gl_lstat) (__const char *__restrict, void *__restrict); - int (*gl_stat) (__const char *__restrict, void *__restrict); -# endif - } glob64_t; -#endif -#ifdef GLOB_PREFIX # define __GLOB_CONCAT(x, y) x ## y # define __GLOB_XCONCAT(x, y) __GLOB_CONCAT (x, y) # define __GLOB_ID(y) __GLOB_XCONCAT (GLOB_PREFIX, y) # define glob __GLOB_ID (glob) # define globfree __GLOB_ID (globfree) # define glob_pattern_p __GLOB_ID (glob_pattern_p) -#else -# if __USE_FILE_OFFSET64 && __GNUC__ < 2 -# define glob glob64 -# define globfree globfree64 -# endif -#endif - -/* Do glob searching for PATTERN, placing results in PGLOB. - The bits defined above may be set in FLAGS. - If a directory cannot be opened or read and ERRFUNC is not nil, - it is called with the pathname that caused the error, and the - `errno' value from the failing call; if it returns non-zero - `glob' returns GLOB_ABEND; if it returns zero, the error is ignored. - If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. - Otherwise, `glob' returns zero. */ -#if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2 || defined GLOB_PREFIX -extern int glob (__const char *__restrict __pattern, int __flags, - int (*__errfunc) (__const char *, int), - glob_t *__restrict __pglob) __THROW; - -/* Free storage allocated in PGLOB by a previous `glob' call. */ -extern void globfree (glob_t *__pglob) __THROW; -#else -extern int __REDIRECT_NTH (glob, (__const char *__restrict __pattern, - int __flags, - int (*__errfunc) (__const char *, int), - glob_t *__restrict __pglob), glob64); - -extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64); -#endif - -#if !defined GLOB_PREFIX && defined __USE_LARGEFILE64 -extern int glob64 (__const char *__restrict __pattern, int __flags, - int (*__errfunc) (__const char *, int), - glob64_t *__restrict __pglob) __THROW; - -extern void globfree64 (glob64_t *__pglob) __THROW; -#endif - - -#ifdef __USE_GNU -/* Return nonzero if PATTERN contains any metacharacters. - Metacharacters can be quoted with backslashes if QUOTE is nonzero. - - This function is not part of the interface specified by POSIX.2 - but several programs want to use it. */ -extern int glob_pattern_p (__const char *__pattern, int __quote) __THROW; -#endif - -__END_DECLS -#endif /* glob.h */ +/* Now the standard header from glibc should work. */ +# include "glob-glibc.h" +#endif /* GLOB_H */ Index: lib/glob-glibc.h =================================================================== RCS file: lib/glob-glibc.h diff -N lib/glob-glibc.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lib/glob-glibc.h 9 Sep 2005 03:39:14 -0000 @@ -0,0 +1,206 @@ +/* Copyright (C) 1991,92,95-98,2000,2001,2004 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _GLOB_H +#define _GLOB_H 1 + +/* Note the reversal of the common HAVE_SYS_CDEFS_H idiom below. In this + way, #ifndef _SYS_CDEFS_H may be used to include <sys/cdefs.h> both when + it has been checked for via the GNULIB configure test and found and when + it has not been checked for, which we can presume means that the <glob.h> + GNULIB shares with GLIBC is being included as a system header and not as + part of GNULIB, in which case <sys/cdefs.h> may be assumed. */ +#ifndef _SYS_CDEFS_H +# include <sys/cdefs.h> +#endif + +__BEGIN_DECLS + +/* We need `size_t' for the following definitions. */ +#ifndef __size_t +# if defined __GNUC__ && __GNUC__ >= 2 +typedef __SIZE_TYPE__ __size_t; +# ifdef __USE_XOPEN +typedef __SIZE_TYPE__ size_t; +# endif +# else +# include <stddef.h> +# ifndef __size_t +# define __size_t size_t +# endif +# endif +#else +/* The GNU CC stddef.h version defines __size_t as empty. We need a real + definition. */ +# undef __size_t +# define __size_t size_t +#endif + +/* Bits set in the FLAGS argument to `glob'. */ +#define GLOB_ERR (1 << 0)/* Return on read errors. */ +#define GLOB_MARK (1 << 1)/* Append a slash to each name. */ +#define GLOB_NOSORT (1 << 2)/* Don't sort the names. */ +#define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */ +#define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */ +#define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */ +#define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ +#define GLOB_PERIOD (1 << 7)/* Leading `.' can be matched by metachars. */ + +#if !defined __USE_POSIX2 || defined __USE_BSD || defined __USE_GNU +# define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ +# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ +# define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ +# define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */ +# define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */ +# define GLOB_ONLYDIR (1 << 13)/* Match only directories. */ +# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error + if the user name is not available. */ +# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ + GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ + GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \ + GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK) +#else +# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ + GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ + GLOB_PERIOD) +#endif + +/* Error returns from `glob'. */ +#define GLOB_NOSPACE 1 /* Ran out of memory. */ +#define GLOB_ABORTED 2 /* Read error. */ +#define GLOB_NOMATCH 3 /* No matches found. */ +#define GLOB_NOSYS 4 /* Not implemented. */ +#ifdef __USE_GNU +/* Previous versions of this file defined GLOB_ABEND instead of + GLOB_ABORTED. Provide a compatibility definition here. */ +# define GLOB_ABEND GLOB_ABORTED +#endif + +/* Structure describing a globbing run. */ +#ifdef __USE_GNU +struct stat; +#endif +typedef struct + { + __size_t gl_pathc; /* Count of paths matched by the pattern. */ + char **gl_pathv; /* List of matched pathnames. */ + __size_t gl_offs; /* Slots to reserve in `gl_pathv'. */ + int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ + + /* If the GLOB_ALTDIRFUNC flag is set, the following functions + are used instead of the normal file access functions. */ + void (*gl_closedir) (void *); +#ifdef __USE_GNU +# if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__ + struct dirent *(*gl_readdir) (void *); +# else + struct direct *(*gl_readdir) (void *); +# endif +#else + void *(*gl_readdir) (void *); +#endif + void *(*gl_opendir) (__const char *); +#ifdef __USE_GNU + int (*gl_lstat) (__const char *__restrict, struct stat *__restrict); + int (*gl_stat) (__const char *__restrict, struct stat *__restrict); +#else + int (*gl_lstat) (__const char *__restrict, void *__restrict); + int (*gl_stat) (__const char *__restrict, void *__restrict); +#endif + } glob_t; + +#if defined __USE_LARGEFILE64 && !defined GLOB_PREFIX +# ifdef __USE_GNU +struct stat64; +# endif +typedef struct + { + __size_t gl_pathc; + char **gl_pathv; + __size_t gl_offs; + int gl_flags; + + /* If the GLOB_ALTDIRFUNC flag is set, the following functions + are used instead of the normal file access functions. */ + void (*gl_closedir) (void *); +# ifdef __USE_GNU + struct dirent64 *(*gl_readdir) (void *); +# else + void *(*gl_readdir) (void *); +# endif + void *(*gl_opendir) (__const char *); +# ifdef __USE_GNU + int (*gl_lstat) (__const char *__restrict, struct stat64 *__restrict); + int (*gl_stat) (__const char *__restrict, struct stat64 *__restrict); +# else + int (*gl_lstat) (__const char *__restrict, void *__restrict); + int (*gl_stat) (__const char *__restrict, void *__restrict); +# endif + } glob64_t; +#endif + +#if __USE_FILE_OFFSET64 && __GNUC__ < 2 && !defined GLOB_PREFIX +# define glob glob64 +# define globfree globfree64 +#endif + +/* Do glob searching for PATTERN, placing results in PGLOB. + The bits defined above may be set in FLAGS. + If a directory cannot be opened or read and ERRFUNC is not nil, + it is called with the pathname that caused the error, and the + `errno' value from the failing call; if it returns non-zero + `glob' returns GLOB_ABEND; if it returns zero, the error is ignored. + If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. + Otherwise, `glob' returns zero. */ +#if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2 || defined GLOB_PREFIX +extern int glob (__const char *__restrict __pattern, int __flags, + int (*__errfunc) (__const char *, int), + glob_t *__restrict __pglob) __THROW; + +/* Free storage allocated in PGLOB by a previous `glob' call. */ +extern void globfree (glob_t *__pglob) __THROW; +#else +extern int __REDIRECT_NTH (glob, (__const char *__restrict __pattern, + int __flags, + int (*__errfunc) (__const char *, int), + glob_t *__restrict __pglob), glob64); + +extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64); +#endif + +#if defined __USE_LARGEFILE64 && !defined GLOB_PREFIX +extern int glob64 (__const char *__restrict __pattern, int __flags, + int (*__errfunc) (__const char *, int), + glob64_t *__restrict __pglob) __THROW; + +extern void globfree64 (glob64_t *__pglob) __THROW; +#endif + + +#ifdef __USE_GNU +/* Return nonzero if PATTERN contains any metacharacters. + Metacharacters can be quoted with backslashes if QUOTE is nonzero. + + This function is not part of the interface specified by POSIX.2 + but several programs want to use it. */ +extern int glob_pattern_p (__const char *__pattern, int __quote) __THROW; +#endif + +__END_DECLS + +#endif /* glob.h */ Index: modules/glob =================================================================== RCS file: /cvsroot/gnulib/gnulib/modules/glob,v retrieving revision 1.2 diff -u -p -r1.2 glob --- modules/glob 22 Jul 2005 22:04:12 -0000 1.2 +++ modules/glob 9 Sep 2005 03:39:14 -0000 @@ -4,6 +4,7 @@ pattern, with GNU extensions. Files: lib/glob_.h +lib/glob-glibc.h lib/glob.c m4/d-type.m4 m4/glob.m4 @@ -24,7 +25,6 @@ gl_GLOB Makefile.am: BUILT_SOURCES += $(GLOB_H) -EXTRA_DIST += glob_.h # We need the following in order to create <glob.h> when the system # doesn't have one that works with the given compiler.
--- lib/glob-glibc.h.orig 2005-09-08 22:28:05.000000000 -0400 +++ lib/glob-glibc.h 2005-09-08 23:32:05.000000000 -0400 @@ -19,7 +19,15 @@ #ifndef _GLOB_H #define _GLOB_H 1 -#include <sys/cdefs.h> +/* Note the reversal of the common HAVE_SYS_CDEFS_H idiom below. In this + way, #ifndef _SYS_CDEFS_H may be used to include <sys/cdefs.h> both when + it has been checked for via the GNULIB configure test and found and when + it has not been checked for, which we can presume means that the <glob.h> + GNULIB shares with GLIBC is being included as a system header and not as + part of GNULIB, in which case <sys/cdefs.h> may be assumed. */ +#ifndef _SYS_CDEFS_H +# include <sys/cdefs.h> +#endif __BEGIN_DECLS @@ -98,7 +106,11 @@ are used instead of the normal file access functions. */ void (*gl_closedir) (void *); #ifdef __USE_GNU +# if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__ struct dirent *(*gl_readdir) (void *); +# else + struct direct *(*gl_readdir) (void *); +# endif #else void *(*gl_readdir) (void *); #endif @@ -112,7 +124,7 @@ #endif } glob_t; -#ifdef __USE_LARGEFILE64 +#if defined __USE_LARGEFILE64 && !defined GLOB_PREFIX # ifdef __USE_GNU struct stat64; # endif @@ -142,7 +154,7 @@ } glob64_t; #endif -#if __USE_FILE_OFFSET64 && __GNUC__ < 2 +#if __USE_FILE_OFFSET64 && __GNUC__ < 2 && !defined GLOB_PREFIX # define glob glob64 # define globfree globfree64 #endif @@ -155,7 +167,7 @@ `glob' returns GLOB_ABEND; if it returns zero, the error is ignored. If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. Otherwise, `glob' returns zero. */ -#if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2 +#if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2 || defined GLOB_PREFIX extern int glob (__const char *__restrict __pattern, int __flags, int (*__errfunc) (__const char *, int), glob_t *__restrict __pglob) __THROW; @@ -171,7 +183,7 @@ extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64); #endif -#ifdef __USE_LARGEFILE64 +#if defined __USE_LARGEFILE64 && !defined GLOB_PREFIX extern int glob64 (__const char *__restrict __pattern, int __flags, int (*__errfunc) (__const char *, int), glob64_t *__restrict __pglob) __THROW;
_______________________________________________ bug-gnulib mailing list bug-gnulib@gnu.org http://lists.gnu.org/mailman/listinfo/bug-gnulib