Imported Upstream version 3.3.1
[debian/amanda] / application-src / amgtar.c
index fd13a6c9f66a1c0a5ab110b5a538d2db23c93eb8..7cf28a1ffce292a70c68b0bd3a31d4f1036eb130 100644 (file)
@@ -296,6 +296,7 @@ main(
 #else
     gnutar_path = NULL;
 #endif
+    gnutar_listdir = NULL;
     gnutar_directory = NULL;
     gnutar_onefilesystem = 1;
     gnutar_atimepreserve = 1;
@@ -357,6 +358,7 @@ main(
     /* parse argument */
     command = argv[1];
 
+    gnutar_listdir = stralloc(getconf_str(CNF_GNUTAR_LIST_DIR));
     argument.config     = NULL;
     argument.host       = NULL;
     argument.message    = 0;
@@ -369,6 +371,7 @@ main(
     argument.exclude_list_glob = NULL;
     argument.verbose = 0;
     init_dle(&argument.dle);
+    argument.dle.record = 0;
 
     while (1) {
        int option_index = 0;
@@ -546,7 +549,6 @@ main(
        }
     }
 
-    gnutar_listdir = getconf_str(CNF_GNUTAR_LIST_DIR);
     if (strlen(gnutar_listdir) == 0)
        gnutar_listdir = NULL;
 
@@ -636,11 +638,37 @@ static void
 amgtar_selfcheck(
     application_argument_t *argument)
 {
+    if (argument->dle.disk) {
+       char *qdisk = quote_string(argument->dle.disk);
+       fprintf(stdout, "OK disk %s\n", qdisk);
+       amfree(qdisk);
+    }
+
+    printf("OK amgtar version %s\n", VERSION);
     amgtar_build_exinclude(&argument->dle, 1, NULL, NULL, NULL, NULL);
 
     printf("OK amgtar\n");
     if (gnutar_path) {
-       check_file(gnutar_path, X_OK);
+       if (check_file(gnutar_path, X_OK)) {
+           char *gtar_version;
+           GPtrArray *argv_ptr = g_ptr_array_new();
+
+           g_ptr_array_add(argv_ptr, gnutar_path);
+           g_ptr_array_add(argv_ptr, "--version");
+           g_ptr_array_add(argv_ptr, NULL);
+
+           gtar_version = get_first_line(argv_ptr);
+           if (gtar_version) {
+               char *gv;
+               for (gv = gtar_version; *gv && !g_ascii_isdigit(*gv); gv++);
+               printf("OK amgtar gtar-version %s\n", gv);
+           } else {
+               printf(_("ERROR [Can't get %s version]\n"), gnutar_path);
+           }
+
+           g_ptr_array_free(argv_ptr, TRUE);
+           amfree(gtar_version);
+       }
     } else {
        printf(_("ERROR [GNUTAR program not available]\n"));
     }
@@ -654,11 +682,6 @@ amgtar_selfcheck(
        printf(_("ERROR [No GNUTAR-LISTDIR]\n"));
     }
 
-    if (argument->dle.disk) {
-       char *qdisk = quote_string(argument->dle.disk);
-       fprintf(stdout, "OK %s\n", qdisk);
-       amfree(qdisk);
-    }
     if (gnutar_directory) {
        check_dir(gnutar_directory, R_OK);
     } else if (argument->dle.device) {
@@ -1022,16 +1045,25 @@ amgtar_backup(
     }
 
     if (!errmsg && incrname && strlen(incrname) > 4) {
-       char *nodotnew;
-       nodotnew = stralloc(incrname);
-       nodotnew[strlen(nodotnew)-4] = '\0';
-       if (rename(incrname, nodotnew)) {
-           dbprintf(_("%s: warning [renaming %s to %s: %s]\n"),
-                    get_pname(), incrname, nodotnew, strerror(errno));
-           g_fprintf(mesgstream, _("? warning [renaming %s to %s: %s]\n"),
-                     incrname, nodotnew, strerror(errno));
+       if (argument->dle.record) {
+           char *nodotnew;
+           nodotnew = stralloc(incrname);
+           nodotnew[strlen(nodotnew)-4] = '\0';
+           if (rename(incrname, nodotnew)) {
+               dbprintf(_("%s: warning [renaming %s to %s: %s]\n"),
+                        get_pname(), incrname, nodotnew, strerror(errno));
+               g_fprintf(mesgstream, _("? warning [renaming %s to %s: %s]\n"),
+                         incrname, nodotnew, strerror(errno));
+           }
+           amfree(nodotnew);
+       } else {
+           if (unlink(incrname) == -1) {
+               dbprintf(_("%s: warning [unlink %s: %s]\n"),
+                        get_pname(), incrname, strerror(errno));
+               g_fprintf(mesgstream, _("? warning [unlink %s: %s]\n"),
+                         incrname, strerror(errno));
+           }
        }
-       amfree(nodotnew);
     }
 
     dbprintf("sendbackup: size %lld\n", (long long)dump_size);