Changeset 1770 in MondoRescue for branches/stable/mindi-busybox/archival/libunarchive/find_list_entry.c
- Timestamp:
- Nov 6, 2007, 11:01:53 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mindi-busybox/archival/libunarchive/find_list_entry.c
r902 r1770 7 7 8 8 #include <fnmatch.h> 9 #include <stdlib.h>9 #include "libbb.h" 10 10 #include "unarchive.h" 11 11 12 /* Find a string in a list */12 /* Find a string in a shell pattern list */ 13 13 const llist_t *find_list_entry(const llist_t *list, const char *filename) 14 14 { 15 15 while (list) { 16 if (fnmatch(list->data, filename, FNM_LEADING_DIR) == 0) {17 return (list);16 if (fnmatch(list->data, filename, 0) == 0) { 17 return list; 18 18 } 19 19 list = list->link; 20 20 } 21 return (NULL);21 return NULL; 22 22 } 23 24 /* Same, but compares only path components present in pattern 25 * (extra trailing path components in filename are assumed to match) 26 */ 27 const llist_t *find_list_entry2(const llist_t *list, const char *filename) 28 { 29 char buf[PATH_MAX]; 30 int pattern_slash_cnt; 31 const char *c; 32 char *d; 33 34 while (list) { 35 c = list->data; 36 pattern_slash_cnt = 0; 37 while (*c) 38 if (*c++ == '/') pattern_slash_cnt++; 39 c = filename; 40 d = buf; 41 /* paranoia is better that buffer overflows */ 42 while (*c && d != buf + sizeof(buf)-1) { 43 if (*c == '/' && --pattern_slash_cnt < 0) 44 break; 45 *d++ = *c++; 46 } 47 *d = '\0'; 48 if (fnmatch(list->data, buf, 0) == 0) { 49 return list; 50 } 51 list = list->link; 52 } 53 return NULL; 54 }
Note:
See TracChangeset
for help on using the changeset viewer.