diff options
| author | Maxim Sobolev <sobomax@FreeBSD.org> | 2001-03-14 19:46:43 +0000 |
|---|---|---|
| committer | Maxim Sobolev <sobomax@FreeBSD.org> | 2001-03-14 19:46:43 +0000 |
| commit | 6f8e863b0fc713dc0d10839db8efca0eb7534da1 (patch) | |
| tree | 9650e50c02fbee2a6357e9cd6b42be9d83b962d7 /usr.sbin/pkg_install/lib | |
| parent | 57d4db4bc5ffdb5f05bd12489735607e1ba7abe9 (diff) | |
Notes
Diffstat (limited to 'usr.sbin/pkg_install/lib')
| -rw-r--r-- | usr.sbin/pkg_install/lib/match.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/usr.sbin/pkg_install/lib/match.c b/usr.sbin/pkg_install/lib/match.c index 917ef6755d13..2bcae2a34fca 100644 --- a/usr.sbin/pkg_install/lib/match.c +++ b/usr.sbin/pkg_install/lib/match.c @@ -58,12 +58,13 @@ static int fname_cmp(const FTSENT **, const FTSENT **); char ** matchinstalled(match_t MatchType, char **patterns, int *retval) { - int i, errcode; + int i, errcode, len; char *tmp, *matched; char *paths[2]; static struct store *store = NULL; FTS *ftsp; FTSENT *f; + Boolean *lmatched; if (store == NULL) { store = malloc(sizeof *store); @@ -95,6 +96,18 @@ matchinstalled(match_t MatchType, char **patterns, int *retval) /* Not reached */ } + /* Count number of patterns */ + for (len = 0; patterns[len]; len++) {} + lmatched = alloca(sizeof(*lmatched) * len); + if (lmatched == NULL) { + warnx("%s(): alloca() failed", __FUNCTION__); + if (retval != NULL) + *retval = 1; + return NULL; + } + for (i = 0; i < len; i++) + lmatched[i] = FALSE; + paths[0] = tmp; paths[1] = NULL; ftsp = fts_open(paths, FTS_LOGICAL | FTS_NOCHDIR | FTS_NOSTAT, fname_cmp); @@ -117,8 +130,10 @@ matchinstalled(match_t MatchType, char **patterns, int *retval) } break; case MATCH_GLOB: - if (fnmatch(patterns[i], f->fts_name, 0) == 0) + if (fnmatch(patterns[i], f->fts_name, 0) == 0) { matched = f->fts_name; + lmatched[i] = TRUE; + } break; default: break; @@ -139,6 +154,12 @@ matchinstalled(match_t MatchType, char **patterns, int *retval) fts_close(ftsp); } + if (MatchType == MATCH_GLOB) { + for (i = 0; i < len; i++) + if (lmatched[i] == FALSE) + storeappend(store, patterns[i]); + } + if (store->used == 0) return NULL; else |
