Module Name:    src
Committed By:   christos
Date:           Wed Apr  8 16:28:51 UTC 2009

Modified Files:
        src/include: glob.h
        src/lib/libc/gen: glob.3 glob.c

Log Message:
add glob_pattern_p for glibc because cvs needs it and it is a huge mess
to compile in the gnu glob code.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/include/glob.h
cvs rdiff -u -r1.32 -r1.33 src/lib/libc/gen/glob.3
cvs rdiff -u -r1.23 -r1.24 src/lib/libc/gen/glob.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/include/glob.h
diff -u src/include/glob.h:1.24 src/include/glob.h:1.25
--- src/include/glob.h:1.24	Sat Sep 13 13:05:07 2008
+++ src/include/glob.h	Wed Apr  8 12:28:50 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: glob.h,v 1.24 2008/09/13 17:05:07 christos Exp $	*/
+/*	$NetBSD: glob.h,v 1.25 2009/04/08 16:28:50 christos Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -104,6 +104,9 @@
     int (*)(const char *, int), glob_t * __restrict)	 __RENAME(__glob30);
 void	globfree(glob_t *)				 __RENAME(__globfree30);
 #endif
+#ifdef _NETBSD_SOURCE
+int	glob_pattern_p(const char *, int);
+#endif
 __END_DECLS
 
 #endif /* !_GLOB_H_ */

Index: src/lib/libc/gen/glob.3
diff -u src/lib/libc/gen/glob.3:1.32 src/lib/libc/gen/glob.3:1.33
--- src/lib/libc/gen/glob.3:1.32	Fri Feb 22 13:33:51 2008
+++ src/lib/libc/gen/glob.3	Wed Apr  8 12:28:50 2009
@@ -1,4 +1,4 @@
-.\"	$NetBSD: glob.3,v 1.32 2008/02/22 18:33:51 christos Exp $
+.\"	$NetBSD: glob.3,v 1.33 2009/04/08 16:28:50 christos Exp $
 .\"
 .\" Copyright (c) 1989, 1991, 1993, 1994
 .\"	The Regents of the University of California.  All rights reserved.
@@ -31,7 +31,7 @@
 .\"
 .\"     @(#)glob.3	8.3 (Berkeley) 4/16/94
 .\"
-.Dd February 22, 2008
+.Dd April 8, 2009
 .Dt GLOB 3
 .Os
 .Sh NAME
@@ -46,6 +46,8 @@
 .Fn glob "const char * restrict pattern" "int flags" "const int (*errfunc)(const char *, int)" "glob_t * restrict pglob"
 .Ft void
 .Fn globfree "glob_t *pglob"
+.Ft int
+.Fn glob_pattern_p "const char *pattern" "int quote"
 .Sh DESCRIPTION
 The
 .Fn glob
@@ -333,6 +335,21 @@
 from a previous call(s) to
 .Fn glob .
 .Pp
+The
+.Fn glob_pattern_p
+returns
+.Dv 1
+if the
+.Fa pattern
+has any special characters that
+.Fn glob
+will interpret and
+.Dv 0
+otherwise.
+If the
+.Fa quote
+argument is non-zero, then backslash quoted characters are ignored.
+.Pp
 The historical
 .Dv GLOB_QUOTE
 flag is no longer supported.
@@ -474,6 +491,9 @@
 .Fn globfree
 functions first appeared in
 .Bx 4.4 .
+.The
+.Fn glob_pattern_p
+function is modelled after the one found in glibc.
 .Sh BUGS
 Patterns longer than
 .Dv MAXPATHLEN

Index: src/lib/libc/gen/glob.c
diff -u src/lib/libc/gen/glob.c:1.23 src/lib/libc/gen/glob.c:1.24
--- src/lib/libc/gen/glob.c:1.23	Mon May 26 09:06:38 2008
+++ src/lib/libc/gen/glob.c	Wed Apr  8 12:28:50 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: glob.c,v 1.23 2008/05/26 13:06:38 ad Exp $	*/
+/*	$NetBSD: glob.c,v 1.24 2009/04/08 16:28:50 christos Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)glob.c	8.3 (Berkeley) 10/13/93";
 #else
-__RCSID("$NetBSD: glob.c,v 1.23 2008/05/26 13:06:38 ad Exp $");
+__RCSID("$NetBSD: glob.c,v 1.24 2009/04/08 16:28:50 christos Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -927,6 +927,39 @@
 	}
 }
 
+#ifndef __LIBC12_SOURCE__
+int
+glob_pattern_p(const char *pattern, int quote)
+{
+	int range = 0;
+
+	for (; *pattern; pattern++)
+		switch (*pattern) {
+		case QUESTION:
+		case STAR:
+			return 1;
+
+		case QUOTE:
+			if (quote && pattern[1] != '\0')
+			      ++pattern;
+			break;
+
+		case LBRACKET:
+			range = 1;
+			break;
+
+		case RBRACKET:
+			if (range)
+			      return 1;
+			break;
+		default:
+			break;
+		}
+
+	  return 0;
+}
+#endif
+
 static DIR *
 g_opendir(Char *str, glob_t *pglob)
 {

Reply via email to