On 1/6/21 10:06 AM, Paul Eggert wrote:

These fallbacks could be concentrated in libc-config.h, rather than
duplicating them in argp, fnmatch, glob, regex, obstack, etc.

It would be helpful if we arranged for argp etc. to use libc-config.h and so removed the need for those fallbacks in argp.h etc.; that would decrease the distance between them and glibc.  This is true regardless of whether the fallbacks are in libc-config.h or in cdefs.h. I'll take a look into doing that.

I took a look at glob and found it was already using libc-config.h.

Looking at one glob file, glob-libc.h could be merged with glibc glob.h by installing the attached. The only real change in this patch is changing __GLOB_GNULIB to __BEGIN_DECLS. This patch reverts to glibc whitespace conventions to simplify merging, so I thought I'd post it here before installing, in case someone really cares about whitespace.
diff --git a/lib/glob-libc.h b/lib/glob-libc.h
index b3a48d377..bc1194929 100644
--- a/lib/glob-libc.h
+++ b/lib/glob-libc.h
@@ -15,10 +15,10 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#ifndef _GLOB_H
-#define _GLOB_H 1
+#ifndef	_GLOB_H
+#define	_GLOB_H	1
 
-#ifndef __GLOB_GNULIB
+#ifndef __BEGIN_DECLS
 # include <sys/cdefs.h>
 #endif
 
@@ -28,39 +28,39 @@ __BEGIN_DECLS
 #include <stddef.h>
 
 /* 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.  */
+#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_MISC
-# define GLOB_MAGCHAR    (1 << 8)/* Set in gl_flags if any metachars seen.  */
+# 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_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)
+				      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)
+# 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.  */
+#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.  */
@@ -73,10 +73,10 @@ 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.  */
+    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.  */
@@ -136,24 +136,24 @@ typedef struct
    Otherwise, 'glob' returns zero.  */
 #if !defined __USE_FILE_OFFSET64 || defined __GLOB_GNULIB
 extern int glob (const char *__restrict __pattern, int __flags,
-                 int (*__errfunc) (const char *, int),
-                 glob_t *__restrict __pglob) __THROW;
+		 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);
+				  int __flags,
+				  int (*__errfunc) (const char *, int),
+				  glob_t *__restrict __pglob), glob64);
 
 extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
 #endif
 
 #ifdef __USE_LARGEFILE64
 extern int glob64 (const char *__restrict __pattern, int __flags,
-                   int (*__errfunc) (const char *, int),
-                   glob64_t *__restrict __pglob) __THROW;
+		   int (*__errfunc) (const char *, int),
+		   glob64_t *__restrict __pglob) __THROW;
 
 extern void globfree64 (glob64_t *__pglob) __THROW;
 #endif

Reply via email to