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)
{