| version 1.20, 2008/01/18 16:20:00 |
version 1.21, 2008/02/01 23:29:54 |
| Line 76 __RCSID("$NetBSD$"); |
|
| Line 76 __RCSID("$NetBSD$"); |
|
| #include <glob.h> |
#include <glob.h> |
| #include <pwd.h> |
#include <pwd.h> |
| #include <stdio.h> |
#include <stdio.h> |
| |
#include <stddef.h> |
| #include <stdlib.h> |
#include <stdlib.h> |
| #include <string.h> |
#include <string.h> |
| #include <unistd.h> |
#include <unistd.h> |
| Line 584 glob2(Char *pathbuf, Char *pathend, Char |
|
| Line 585 glob2(Char *pathbuf, Char *pathend, Char |
|
| __gl_stat_t sb; |
__gl_stat_t sb; |
| Char *p, *q; |
Char *p, *q; |
| int anymeta; |
int anymeta; |
| |
Char *pend; |
| |
ptrdiff_t diff; |
| |
|
| _DIAGASSERT(pathbuf != NULL); |
_DIAGASSERT(pathbuf != NULL); |
| _DIAGASSERT(pathend != NULL); |
_DIAGASSERT(pathend != NULL); |
| Line 626 glob2(Char *pathbuf, Char *pathend, Char |
|
| Line 629 glob2(Char *pathbuf, Char *pathend, Char |
|
| } |
} |
| |
|
| /* |
/* |
| * No expansion, or path ends in dot-slash or dot-dot-slash, |
* No expansion, or path ends in slash-dot shash-dot-dot, |
| * do next segment. |
* do next segment. |
| */ |
*/ |
| if ((!anymeta) || |
if (pglob->gl_flags & GLOB_PERIOD) { |
| (((pathend-pathbuf) > 1) && |
for (pend = pathend; pend > pathbuf && pend[-1] == '/'; |
| (((*(pathend-1) == SEP) && (*(pathend-2) == DOT)) && |
pend--) |
| ((((pathend-pathbuf) < 3) || (*(pathend-3) == SEP)) || |
continue; |
| (((pathend-pathbuf) < 4) || |
diff = pend - pathbuf; |
| ((*(pathend-3) == DOT) && (*(pathend-4) == SEP))))))) { |
} else { |
| |
/* XXX: GCC */ |
| |
diff = 0; |
| |
pend = pathend; |
| |
} |
| |
|
| |
if ((!anymeta) || |
| |
((pglob->gl_flags & GLOB_PERIOD) && |
| |
(diff >= 1 && pend[-1] == DOT) && |
| |
(diff >= 2 && (pend[-2] == SLASH || pend[-2] == DOT)) && |
| |
(diff < 3 || pend[-3] == SLASH))) { |
| pathend = q; |
pathend = q; |
| pattern = p; |
pattern = p; |
| while (*pattern == SEP) { |
while (*pattern == SEP) { |