Fix exclude list handling
authorGlenn L McGrath <bug1@ihug.co.nz>
Sat, 4 Aug 2001 05:28:29 +0000 (05:28 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Sat, 4 Aug 2001 05:28:29 +0000 (05:28 -0000)
libbb/unarchive.c

index 91db2e3b19eb7c735d6a4485be9dd70e17309e29..0d414a3a8535919d9e990640943db9b90a5d6a99 100644 (file)
@@ -230,24 +230,35 @@ char *unarchive(FILE *src_stream, FILE *out_stream, file_header_t *(*get_headers
        const int extract_function, const char *prefix, char **extract_names)
 {
        file_header_t *file_entry;
-       int found;
+       int extract_flag;
        int i;
        char *buffer = NULL;
 
        archive_offset = 0;
        while ((file_entry = get_headers(src_stream)) != NULL) {
-               found = FALSE;
-               if (extract_names == NULL) {
-                       found = TRUE;
-               } else {
+               extract_flag = TRUE;
+               if (extract_names != NULL) {
+                       int found_flag = FALSE;
                        for(i = 0; extract_names[i] != 0; i++) {
                                if (strcmp(extract_names[i], file_entry->name) == 0) {
-                                       found = TRUE;
+                                       found_flag = TRUE;
+                                       break;
+                               }
+                       }
+                       if (extract_function & extract_exclude_list) {
+                               if (found_flag == TRUE) {
+                                       extract_flag = FALSE;
+                               }
+                       } else {
+                               /* If its not found in the include list dont extract it */
+                               if (found_flag == FALSE) {
+                                       extract_flag = FALSE;
                                }
                        }
+
                }
 
-               if (found) {
+               if (extract_flag == TRUE) {
                        buffer = extract_archive(src_stream, out_stream, file_entry, extract_function, prefix);
                } else {
                        /* seek past the data entry */