From 9b95d5951c970650301f293ed03285226b04a2df Mon Sep 17 00:00:00 2001 From: Andrea Mazzoleni Date: Fri, 23 Nov 2012 00:09:50 +0100 Subject: [PATCH] Merges the two filtering operation to keep valid verbose output. --- snapraid.c | 6 ++---- state.c | 21 ++++++++++++++++----- state.h | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/snapraid.c b/snapraid.c index 161b5404..72ac9836 100644 --- a/snapraid.c +++ b/snapraid.c @@ -376,8 +376,7 @@ int main(int argc, char* argv[]) state_read(&state); /* apply the command line filter */ - state_filter(&state, &filterlist_file); - state_filter(&state, &filterlist_disk); + state_filter(&state, &filterlist_file, &filterlist_disk); /* intercept Ctrl+C */ signal(SIGINT, &signal_handler); @@ -391,8 +390,7 @@ int main(int argc, char* argv[]) state_read(&state); /* apply the command line filter */ - state_filter(&state, &filterlist_file); - state_filter(&state, &filterlist_disk); + state_filter(&state, &filterlist_file, &filterlist_disk); /* intercept Ctrl+C */ signal(SIGINT, &signal_handler); diff --git a/state.c b/state.c index 2af763a9..0eb3b15e 100644 --- a/state.c +++ b/state.c @@ -1517,19 +1517,26 @@ void state_write(struct snapraid_state* state) state->need_write = 0; /* no write needed anymore */ } -void state_filter(struct snapraid_state* state, tommy_list* filterlist) +void state_filter(struct snapraid_state* state, tommy_list* filterlist_file, tommy_list* filterlist_disk) { tommy_node* i; /* if no filter, include all */ - if (tommy_list_empty(filterlist)) + if (tommy_list_empty(filterlist_file) && tommy_list_empty(filterlist_disk)) return; printf("Filtering...\n"); if (state->verbose) { tommy_node* k; - for(k=tommy_list_head(filterlist);k!=0;k=k->next) { + for(k=tommy_list_head(filterlist_disk);k!=0;k=k->next) { + struct snapraid_filter* filter = k->data; + printf("\t%s", filter->pattern); + if (filter->is_disk) + printf("//"); + printf("\n"); + } + for(k=tommy_list_head(filterlist_file);k!=0;k=k->next) { struct snapraid_filter* filter = k->data; printf("\t%s", filter->pattern); if (filter->is_dir) @@ -1547,7 +1554,9 @@ void state_filter(struct snapraid_state* state, tommy_list* filterlist) for(j=tommy_list_head(&disk->filelist);j!=0;j=j->next) { struct snapraid_file* file = j->data; - if (filter_path(filterlist, disk->name, file->sub) != 0) { + if (filter_path(filterlist_disk, disk->name, file->sub) != 0 + || filter_path(filterlist_file, disk->name, file->sub) != 0 + ) { file_flag_set(file, FILE_IS_EXCLUDED); } @@ -1560,7 +1569,9 @@ void state_filter(struct snapraid_state* state, tommy_list* filterlist) for(j=tommy_list_head(&disk->linklist);j!=0;j=j->next) { struct snapraid_link* link = j->data; - if (filter_path(filterlist, disk->name, link->sub) != 0) { + if (filter_path(filterlist_disk, disk->name, link->sub) != 0 + || filter_path(filterlist_file, disk->name, link->sub) != 0 + ) { link_flag_set(link, FILE_IS_EXCLUDED); } diff --git a/state.h b/state.h index f4e88aa8..8b21dcb8 100644 --- a/state.h +++ b/state.h @@ -111,7 +111,7 @@ void state_dup(struct snapraid_state* state); * Filter files. * Apply and additional filter to list of file currently loaded. */ -void state_filter(struct snapraid_state* state, tommy_list* filterlist); +void state_filter(struct snapraid_state* state, tommy_list* filterlist_file, tommy_list* filterlist_disk); /** * Begins the progress visualization.