X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Famflush.c;h=481ff289966e4fe495da10b5d423bea40290b9de;hb=HEAD;hp=4d28e44755118821311cffa1a934d9a8234fa689;hpb=42ff24f2a525d5965e1841b2ebe3ee0f4b918ac6;p=debian%2Famanda diff --git a/server-src/amflush.c b/server-src/amflush.c index 4d28e44..481ff28 100644 --- a/server-src/amflush.c +++ b/server-src/amflush.c @@ -1,6 +1,7 @@ /* * Amanda, The Advanced Maryland Automatic Network Disk Archiver * Copyright (c) 1991-1998 University of Maryland at College Park + * Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved. * All Rights Reserved. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -40,6 +41,13 @@ #include "holding.h" #include "server_util.h" #include "timestamp.h" +#include "getopt.h" + +static struct option long_options[] = { + {"version" , 0, NULL, 1}, + {"exact-match" , 0, NULL, 2}, + {NULL, 0, NULL, 0} +}; static char *conf_logdir; FILE *driver_stream; @@ -94,6 +102,7 @@ main( char **config_options; find_result_t *holding_files; disklist_t holding_disklist = { NULL, NULL }; + gboolean exact_match = FALSE; /* * Configure program for internationalization: @@ -122,8 +131,13 @@ main( /* process arguments */ cfg_ovr = new_config_overrides(argc/2); - while((opt = getopt(argc, argv, "bfso:D:")) != EOF) { + while((opt = getopt_long(argc, argv, "bfso:D:", long_options, NULL)) != EOF) { switch(opt) { + case 1 : printf("amflush-%s\n", VERSION); + return(0); + break; + case 2 : exact_match = TRUE; + break; case 'b': batch = 1; break; case 'f': foreground = 1; @@ -151,7 +165,7 @@ main( } if(argc < 1) { - error(_("Usage: amflush [-b] [-f] [-s] [-D date]* [-o configoption]* [host [disk]* ]*")); + error(_("Usage: amflush [-b] [-f] [-s] [-D date]* [--exact-match] [-o configoption]* [host [disk]* ]*")); /*NOTREACHED*/ } @@ -181,7 +195,7 @@ main( * dumps will be filtered properly by match_disklist, setting the dp->todo * flag appropriately. */ - errstr = match_disklist(&diskq, argc-1, argv+1); + errstr = match_disklist(&diskq, exact_match, argc-1, argv+1); if (errstr) { g_printf(_("%s"),errstr); amfree(errstr); @@ -245,7 +259,7 @@ main( stralloc((char *)datestamp->data), g_compare_strings); } - g_slist_free_full(all_datestamps); + slist_free_full(all_datestamps, g_free); } else { /* otherwise, in batch mode, use all datestamps */ @@ -280,10 +294,19 @@ main( for(dp = diskq.head; dp != NULL; dp = dp->next) { if(dp->todo) { - char *qname; - qname = quote_string(dp->name); - log_add(L_DISK, "%s %s", dp->host->hostname, qname); - amfree(qname); + /* is it holding_list */ + for (holding_file=holding_list; holding_file != NULL; + holding_file = holding_file->next) { + dumpfile_t file; + holding_file_get_dumpfile((char *)holding_file->data, &file); + if (g_str_equal(dp->host->hostname, file.name) && + g_str_equal(dp->name, file.disk)) { + char *qname; + qname = quote_string(dp->name); + log_add(L_DISK, "%s %s", dp->host->hostname, qname); + amfree(qname); + } + } } } @@ -405,9 +428,9 @@ main( } } - g_slist_free_full(datestamp_list); + slist_free_full(datestamp_list, g_free); datestamp_list = NULL; - g_slist_free_full(holding_list); + slist_free_full(holding_list, g_free); holding_list = NULL; if(redirect) { /* rename errfile */ @@ -599,7 +622,7 @@ pick_datestamp(void) } chupper = (char)toupper(ch); if (chupper < 'A' || chupper > max_char) { - g_slist_free_full(r_datestamp_list); + slist_free_full(r_datestamp_list, g_free); r_datestamp_list = NULL; break; } @@ -607,7 +630,7 @@ pick_datestamp(void) stralloc(datestamps[chupper - 'A'])); } while ((ch = *a++) != '\0'); if (r_datestamp_list && ch == '\0') { - g_slist_free_full(datestamp_list); + slist_free_full(datestamp_list, g_free); datestamp_list = r_datestamp_list; break; } @@ -681,7 +704,7 @@ redirect_stderr(void) fflush(stdout); fflush(stderr); errfile = vstralloc(conf_logdir, "/amflush", NULL); - if((fderr = open(errfile, O_WRONLY| O_CREAT | O_TRUNC, 0600)) == -1) { + if((fderr = open(errfile, O_WRONLY| O_APPEND | O_CREAT | O_TRUNC, 0600)) == -1) { error(_("could not open %s: %s"), errfile, strerror(errno)); /*NOTREACHED*/ }