Imported Upstream version 2.5.1
[debian/amanda] / server-src / amtape.c
index c52cfdd5f7044ceebf2d285de052530caba23d46..72dcf17125de2fa3d960bbc72163e08bf9f72c16 100644 (file)
@@ -24,7 +24,7 @@
  * file named AUTHORS, in the root directory of this distribution.
  */
 /*
- * $Id: amtape.c,v 1.40.2.1 2006/04/14 11:32:07 martinea Exp $
+ * $Id: amtape.c,v 1.47 2006/07/25 18:27:57 martinea Exp $
  *
  * tape changer interface program
  */
 #include "version.h"
 
 /* local functions */
-void usage P((void));
-int main P((int argc, char **argv));
-void reset_changer P((int argc, char **argv));
-void eject_tape P((int argc, char **argv));
-void clean_tape P((int argc, char **argv));
-void load_slot P((int argc, char **argv));
-void load_label P((int argc, char **argv));
-void show_slots P((int argc, char **argv));
-void show_current P((int argc, char **argv));
-void update_labeldb P((int argc, char **argv));
-void amtape_taper_scan P((int argc, char **argv));
-void show_device P((int argc, char **argv));
-int update_one_slot P((void *ud, int rc, char *slotstr, char *device));
-int loadlabel_slot P((void *ud, int rc, char *slotstr, char *device));
-int show_init P((void *ud, int rc, int ns, int bk, int s));
-int show_init_all P((void *ud, int rc, int ns, int bk, int s));
-int show_init_current P((void *ud, int rc, int ns, int bk, int s));
-int show_slot P((void *ud, int rc, char *slotstr, char *device));
+void usage(void);
+int main(int argc, char **argv);
+void reset_changer(int argc, char **argv);
+void eject_tape(int argc, char **argv);
+void clean_tape(int argc, char **argv);
+void load_slot(int argc, char **argv);
+void load_label(int argc, char **argv);
+void show_slots(int argc, char **argv);
+void show_current(int argc, char **argv);
+void update_labeldb (int argc, char **argv);
+void amtape_taper_scan(int argc, char **argv);
+void show_device(int argc, char **argv);
+int update_one_slot (void *ud, int rc, char *slotstr, char *device);
+int loadlabel_slot(void *ud, int rc, char *slotstr, char *device);
+int show_init(void *ud, int rc, int ns, int bk, int s);
+int show_init_all(void *ud, int rc, int ns, int bk, int s);
+int show_init_current(void *ud, int rc, int ns, int bk, int s);
+int show_slot(void *ud, int rc, char *slotstr, char *device);
 
 static const struct {
     const char *name;
-    void (*fn) P((int, char **));
+    void (*fn)(int, char **);
     const char *usage;
 } cmdtab[] = {
     { "reset", reset_changer,
@@ -95,9 +95,10 @@ static const struct {
     { "update", update_labeldb,
        "update               update the label matchingdatabase"},
 };
-#define        NCMDS   (sizeof(cmdtab) / sizeof(cmdtab[0]))
+#define        NCMDS   (int)(sizeof(cmdtab) / sizeof(cmdtab[0]))
 
-void usage()
+void
+usage(void)
 {
     int i;
 
@@ -108,9 +109,10 @@ void usage()
     exit(1);
 }
 
-int main(argc, argv)
-int argc;
-char **argv;
+int
+main(
+    int                argc,
+    char **    argv)
 {
     char *conffile;
     char *conf_tapelist;
@@ -132,6 +134,8 @@ char **argv;
     /* Don't die when child closes pipe */
     signal(SIGPIPE, SIG_IGN);
 
+    dbopen(DBG_SUBDIR_SERVER);
+
     malloc_size_1 = malloc_inuse(&malloc_hist_1);
 
     erroutput_type = ERR_INTERACTIVE;
@@ -144,8 +148,11 @@ char **argv;
     conffile = stralloc2(config_dir, CONFFILE_NAME);
     if (read_conffile(conffile)) {
        error("errors processing config file \"%s\"", conffile);
+       /*NOTREACHED*/
     }
 
+    dbrename(config_name, DBG_SUBDIR_SERVER);
+
     conf_tapelist = getconf_str(CNF_TAPELIST);
     if (*conf_tapelist == '/') {
        conf_tapelist = stralloc(conf_tapelist);
@@ -154,6 +161,7 @@ char **argv;
     }
     if (read_tapelist(conf_tapelist)) {
        error("could not load tapelist \"%s\"", conf_tapelist);
+       /*NOTREACHED*/
     }
     amfree(conf_tapelist);
 
@@ -163,23 +171,25 @@ char **argv;
 
     if ((pw = getpwnam(dumpuser)) == NULL) {
        error("cannot look up dump user \"%s\"", dumpuser);
-       /* NOTREACHED */
+       /*NOTREACHED*/
     }
     uid_dumpuser = pw->pw_uid;
     if ((pw = getpwuid(uid_me)) == NULL) {
        error("cannot look up my own uid %ld", (long)uid_me);
-       /* NOTREACHED */
+       /*NOTREACHED*/
     }
     if (uid_me != uid_dumpuser) {
        error("running as user \"%s\" instead of \"%s\"",
              pw->pw_name, dumpuser);
-       /* NOTREACHED */
+       /*NOTREACHED*/
     }
 
     if((have_changer = changer_init()) == 0) {
        error("no tpchanger specified in \"%s\"", conffile);
+       /*NOTREACHED*/
     } else if (have_changer != 1) {
        error("changer initialization failed: %s", strerror(errno));
+       /*NOTREACHED*/
     }
 
     /* switch on command name */
@@ -205,17 +215,22 @@ char **argv;
        malloc_list(fileno(stderr), malloc_hist_1, malloc_hist_2);
     }
 
+    dbclose();
     return 0;
 }
 
 /* ---------------------------- */
 
-void reset_changer(argc, argv)
-int argc;
-char **argv;
+void
+reset_changer(
+    int                argc,
+    char **    argv)
 {
     char *slotstr = NULL;
 
+    (void)argc;        /* Quiet unused parameter warning */
+    (void)argv;        /* Quiet unused parameter warning */
+
     switch(changer_reset(&slotstr)) {
     case 0:
        fprintf(stderr, "%s: changer is reset, slot %s is loaded.\n",
@@ -227,18 +242,23 @@ char **argv;
        break;
     default:
        error("could not reset changer: %s", changer_resultstr);
+       /*NOTREACHED*/
     }
     amfree(slotstr);
 }
 
 
 /* ---------------------------- */
-void clean_tape(argc, argv)
-int argc;
-char **argv;
+void
+clean_tape(
+    int                argc,
+    char **    argv)
 {
     char *devstr = NULL;
 
+    (void)argc;        /* Quiet unused parameter warning */
+    (void)argv;        /* Quiet unused parameter warning */
+
     if(changer_clean(&devstr) == 0) {
        fprintf(stderr, "%s: device %s is clean.\n", get_pname(), devstr);
     } else {
@@ -250,12 +270,16 @@ char **argv;
 
 
 /* ---------------------------- */
-void eject_tape(argc, argv)
-int argc;
-char **argv;
+void
+eject_tape(
+    int                argc,
+    char **    argv)
 {
     char *slotstr = NULL;
 
+    (void)argc;        /* Quiet unused parameter warning */
+    (void)argv;        /* Quiet unused parameter warning */
+
     if(changer_eject(&slotstr) == 0) {
        fprintf(stderr, "%s: slot %s is ejected.\n", get_pname(), slotstr);
     } else {
@@ -268,9 +292,10 @@ char **argv;
 
 /* ---------------------------- */
 
-void load_slot(argc, argv)
-int argc;
-char **argv;
+void
+load_slot(
+    int                argc,
+    char **    argv)
 {
     char *slotstr = NULL, *devicename = NULL;
     char *errstr;
@@ -282,6 +307,7 @@ char **argv;
     is_advance = (strcmp(argv[1], "advance") == 0);
     if(changer_loadslot(argv[1], &slotstr, &devicename)) {
        error("could not load slot %s: %s", slotstr, changer_resultstr);
+       /*NOTREACHED*/
     }
     if(! is_advance && (errstr = tape_rewind(devicename)) != NULL) {
        fprintf(stderr,
@@ -306,14 +332,23 @@ char *datestamp;
 char *label = NULL, *first_match_label = NULL, *first_match = NULL;
 char *searchlabel, *labelstr;
 tape_t *tp;
+static int scan_init(void *ud, int rc, int ns, int bk, int s);
 
 static int 
-scan_init(ud, rc, ns, bk, s)
-     void *ud;
-     int rc, ns, bk, s;
+scan_init(
+    void *     ud,
+    int                rc,
+    int                ns,
+    int                bk,
+    int                s)
 {
-    if(rc)
+    (void)ud;  /* Quiet unused parameter warning */
+    (void)s;   /* Quiet unused parameter warning */
+
+    if(rc) {
        error("could not get changer info: %s", changer_resultstr);
+       /*NOTREACHED*/
+    }
 
     nslots = ns;
     backwards = bk;
@@ -321,16 +356,21 @@ scan_init(ud, rc, ns, bk, s)
     return 0;
 }
 
-int loadlabel_slot(ud, rc, slotstr, device)
-     void *ud;
-int rc;
-char *slotstr;
-char *device;
+int
+loadlabel_slot(
+    void *     ud,
+    int                rc,
+    char *     slotstr,
+    char *     device)
 {
     char *errstr;
 
-    if(rc > 1)
+    (void)ud;  /* Quiet unused parameter warning */
+
+    if(rc > 1) {
        error("could not load slot %s: %s", slotstr, changer_resultstr);
+       /*NOTREACHED*/
+    }
     else if(rc == 1)
        fprintf(stderr, "%s: slot %s: %s\n",
                get_pname(), slotstr, changer_resultstr);
@@ -361,9 +401,10 @@ char *device;
     return 0;
 }
 
-void load_label(argc, argv)
-int argc;
-char **argv;
+void
+load_label(
+    int                argc,
+    char **    argv)
 {
     if(argc != 2)
        usage();
@@ -388,52 +429,83 @@ char **argv;
 
 /* ---------------------------- */
 
-int show_init(ud, rc, ns, bk, s)
-     void *ud;
-int rc, ns, bk, s;
+int
+show_init(
+    void *     ud,
+    int                rc,
+    int                ns,
+    int                bk,
+    int                s)
 {
-    if(rc)
+    (void)ud;  /* Quiet unused parameter warning */
+    (void)s;   /* Quiet unused parameter warning */
+
+    if(rc) {
        error("could not get changer info: %s", changer_resultstr);
+       /*NOTREACHED*/
+    }
 
     nslots = ns;
     backwards = bk;
     return 0;
 }
 
-int show_init_all(ud, rc, ns, bk, s)
-     void *ud;
-int rc, ns, bk, s;
+int
+show_init_all(
+    void *     ud,
+    int                rc,
+    int                ns,
+    int                bk,
+    int                s)
 {
     int ret = show_init(NULL, rc, ns, bk, s);
+
+    (void)ud;  /* Quiet unused parameter warning */
+
     fprintf(stderr, "%s: scanning all %d slots in tape-changer rack:\n",
            get_pname(), nslots);
     return ret;
 }
 
-int show_init_current(ud, rc, ns, bk, s)
-     void *ud;
-int rc, ns, bk, s;
+int
+show_init_current(
+    void *     ud,
+    int                rc,
+    int                ns,
+    int                bk,
+    int                s)
 {
     int ret = show_init(NULL, rc, ns, bk, s);
+
+    (void)ud;  /* Quiet unused parameter warning */
+
     fprintf(stderr, "%s: scanning current slot in tape-changer rack:\n",
            get_pname());
     return ret;
 }
 
-int show_slot(ud, rc, slotstr, device)
-     void *ud;
-int rc;
-char *slotstr, *device;
+int
+show_slot(
+    void *     ud,
+    int                rc,
+    char *     slotstr,
+    char *     device)
 {
     char *errstr;
 
-    if(rc > 1)
+    (void)ud;  /* Quiet unused parameter warning */
+
+    if(rc > 1) {
        error("could not load slot %s: %s", slotstr, changer_resultstr);
-    else if(rc == 1)
+       /*NOTREACHED*/
+    }
+    else if(rc == 1) {
        fprintf(stderr, "slot %s: %s\n", slotstr, changer_resultstr);
-    else if((errstr = tape_rdlabel(device, &datestamp, &label)) != NULL)
+    }
+    else if((errstr = tape_rdlabel(device, &datestamp, &label)) != NULL) {
        fprintf(stderr, "slot %s: %s\n", slotstr, errstr);
-    else {
+       amfree(errstr);
+    } else {
        fprintf(stderr, "slot %s: date %-8s label %s\n",
                slotstr, datestamp, label);
     }
@@ -442,20 +514,26 @@ char *slotstr, *device;
     return 0;
 }
 
-void show_current(argc, argv)
-int argc;
-char **argv;
+void
+show_current(
+    int                argc,
+    char **    argv)
 {
+    (void)argv;        /* Quiet unused parameter warning */
+
     if(argc != 1)
        usage();
 
     changer_current(NULL, show_init_current, show_slot);
 }
 
-void show_slots(argc, argv)
-int argc;
-char **argv;
+void
+show_slots(
+    int                argc,
+    char **    argv)
 {
+    (void)argv;        /* Quiet unused parameter warning */
+
     if(argc != 1)
        usage();
 
@@ -464,12 +542,17 @@ char **argv;
 
 
 /* ---------------------------- */
-void amtape_taper_scan(argc, argv)
-int argc;
-char **argv;
+
+void
+amtape_taper_scan(
+    int                argc,
+    char **    argv)
 {
     char *device = NULL;
-    char *label = NULL, *errmsg = NULL;
+    char *label = NULL;
+
+    (void)argc;        /* Quiet unused parameter warning */
+    (void)argv;        /* Quiet unused parameter warning */
 
     if((tp = lookup_last_reusable_tape(0)) == NULL)
        searchlabel = NULL;
@@ -485,29 +568,32 @@ char **argv;
     if(searchlabel) fprintf(stderr, "tape label %s or ", searchlabel);
     fprintf(stderr, "a new tape.\n");
 
-    if (taper_scan(searchlabel, &label, &datestamp, &errmsg, &device) <= 0) {
-        fprintf(stderr, "%s\n", errmsg);
-    }
+    taper_scan(searchlabel, &label, &datestamp,&device, FILE_taperscan_output_callback, stderr);
 
     fprintf(stderr, "%s: label %s is now loaded.\n",
             get_pname(), label);
 
     amfree(label);
     amfree(datestamp);
-    amfree(errmsg);
     amfree(device);
 }
 
 /* ---------------------------- */
 
-void show_device(argc, argv)
-int argc;
-char **argv;
+void
+show_device(
+    int                argc,
+    char **    argv)
 {
     char *slot = NULL, *device = NULL;
 
-    if(changer_loadslot("current", &slot, &device))
+    (void)argc;        /* Quiet unused parameter warning */
+    (void)argv;        /* Quiet unused parameter warning */
+
+    if(changer_loadslot("current", &slot, &device)) {
        error("Could not load current slot.\n");
+       /*NOTREACHED*/
+    }
 
     printf("%s\n", device);
     amfree(slot);
@@ -516,16 +602,19 @@ char **argv;
 
 /* ---------------------------- */
 
-int update_one_slot(ud, rc, slotstr, device)
-    void *ud;
-    int rc;
-    char *slotstr;
-    char *device;
+int
+update_one_slot(
+    void *     ud,
+    int                rc,
+    char *     slotstr,
+    char *     device)
 {
     char *errstr = NULL;
     char *datestamp = NULL;
     char *label = NULL;
 
+    (void)ud;  /* Quiet unused parameter warning */
+
     if(rc > 1)
        error("could not load slot %s: %s", slotstr, changer_resultstr);
     else if(rc == 1)
@@ -543,13 +632,15 @@ int update_one_slot(ud, rc, slotstr, device)
     return 0;
 }
 
-void update_labeldb(argc, argv)
-int argc;
-char **argv;
+void
+update_labeldb(
+    int                argc,
+    char **    argv)
 {
+    (void)argv;        /* Quiet unused parameter warning */
+
     if(argc != 1)
        usage();
 
     changer_find(NULL, show_init_all, update_one_slot, NULL);
 }
-