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