lintian doesn't like orphan packages with uploaders...
[debian/amanda] / client-src / sendsize.c
index 3c2815a89100fce4e47fde302858b0f05b9c4374..d005fe0dc1872f82525aa4aac561c1a667855944 100644 (file)
@@ -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
@@ -122,6 +123,7 @@ main(
     disk_estimates_t *est;
     disk_estimates_t *est1;
     disk_estimates_t *est_prev;
+    disk_estimates_t *est_next;
     char *line = NULL;
     char *s, *fp;
     int ch;
@@ -134,11 +136,16 @@ main(
     char *qamdevice = NULL;
     dle_t *dle;
     GSList *errlist;
-    level_t *alevel;
+    am_level_t *alevel;
 
     (void)argc;        /* Quiet unused parameter warning */
     (void)argv;        /* Quiet unused parameter warning */
 
+    if (argc > 1 && argv && argv[1] && g_str_equal(argv[1], "--version")) {
+       printf("sendsize-%s\n", VERSION);
+       return (0);
+    }
+
     /* initialize */
 
     /*
@@ -316,7 +323,7 @@ main(
            goto err;
        }
        skip_integer(s, ch);
-       alevel = g_new0(level_t, 1);
+       alevel = g_new0(am_level_t, 1);
        alevel->level = level;
        dle->levellist = g_slist_append(dle->levellist, alevel);
 
@@ -413,6 +420,20 @@ main(
        amandates_started = FALSE;
     }
 
+    est_prev = NULL;
+    for(est = est_list; est != NULL; est = est_next) {
+       int good = merge_dles_properties(est->dle, 0);
+       est_next = est->next;
+       if (!good) {
+           if (est == est_list) {
+               est_list = est_next;
+           } else {
+               est_prev->next = est_next;
+           }
+       } else {
+           est_prev = est;
+       }
+    }
     for(est = est_list; est != NULL; est = est->next) {
        run_client_scripts(EXECUTE_ON_PRE_HOST_ESTIMATE, g_options, est->dle,
                           stdout);
@@ -617,7 +638,7 @@ dle_add_diskest(
 
     levellist = dle->levellist;
     while (levellist != NULL) {
-       level_t *alevel = (level_t *)levellist->data;
+       am_level_t *alevel = (am_level_t *)levellist->data;
        if (alevel->level < 0)
            alevel->level = 0;
        if (alevel->level >= DUMP_LEVELS)
@@ -630,7 +651,7 @@ dle_add_diskest(
            /* already have disk info, just note the level request */
            levellist = dle->levellist;
            while (levellist != NULL) {
-               level_t *alevel = (level_t *)levellist->data;
+               am_level_t *alevel = (am_level_t *)levellist->data;
                int      level  = alevel->level;
                curp->est[level].needestimate = 1;
                curp->est[level].server = alevel->server;
@@ -657,7 +678,7 @@ dle_add_diskest(
     }
     levellist = dle->levellist;
     while (levellist != NULL) {
-       level_t *alevel = (level_t *)levellist->data;
+       am_level_t *alevel = (am_level_t *)levellist->data;
        newp->est[alevel->level].needestimate = 1;
        newp->est[alevel->level].server = alevel->server;
        levellist = g_slist_next(levellist);
@@ -693,8 +714,8 @@ free_estimates(
     amfree(est->qamdevice);
     amfree(est->dirname);
     amfree(est->qdirname);
-    if(est->dle) {
-/* free DLE */
+    if (est->dle) {
+       free_dle(est->dle);
     }
 }
 
@@ -864,11 +885,13 @@ application_api_calc_estimate(
     if (est->dle->data_path == DATA_PATH_AMANDA &&
        (bsu->data_path_set & DATA_PATH_AMANDA)==0) {
        g_printf("%s %d ERROR application %s doesn't support amanda data-path\n", est->qamname, 0, est->dle->program);
+       amfree(bsu);
        return;
     }
     if (est->dle->data_path == DATA_PATH_DIRECTTCP &&
        (bsu->data_path_set & DATA_PATH_DIRECTTCP)==0) {
        g_printf("%s %d ERROR application %s doesn't support directtcp data-path\n", est->qamname, 0, est->dle->program);
+       amfree(bsu);
        return;
     }
 
@@ -943,8 +966,10 @@ application_api_calc_estimate(
        }
     }
 
-    if (nb_level == 0)
+    if (nb_level == 0) {
+       amfree(bsu);
        return;
+    }
 
     if (bsu->multi_estimate) {
        for (i=0;i<nb_level;i++) {
@@ -964,6 +989,8 @@ application_api_calc_estimate(
            }
        }
     }
+
+    amfree(bsu);
 }
 
 
@@ -986,7 +1013,6 @@ generic_calc_estimates(
     char *file_include = NULL;
     times_t start_time;
     FILE *dumpout = NULL;
-    off_t size = (off_t)1;
     char *line = NULL;
     char *match_expr;
     amwait_t wait_status;
@@ -1076,7 +1102,7 @@ generic_calc_estimates(
     }
     match_expr = vstralloc(" %d SIZE %lld", NULL);
     len = strlen(est->qamname);
-    for(size = (off_t)-1; (line = agets(dumpout)) != NULL; free(line)) {
+    for(; (line = agets(dumpout)) != NULL; free(line)) {
        long long size_ = (long long)0;
        if (line[0] == '\0' || (int)strlen(line) <= len)
            continue;
@@ -1089,7 +1115,6 @@ generic_calc_estimates(
                      level,
                      size_);
        }
-       size = (off_t)size_;
     }
     amfree(match_expr);