Imported Upstream version 2.6.0p2
[debian/amanda] / tape-src / ammt.c
index ca5e1c9e418dd0c34c79666fa489cd3d8ab65fdf..6e73aa67f33e068a31a94f43f36156698e34c62b 100644 (file)
@@ -29,27 +29,31 @@ extern char *getenv();
 
 extern int optind;
 
-static int do_asf();
-static int do_bsf();
-static int do_status();
+static int do_asf(int fd, off_t count);
+static int do_bsf(int fd, off_t count);
+static int do_status(int fd, off_t count);
+static void usage(void);
 
 struct cmd {
     char *name;
-    int min_chars;
+    size_t min_chars;
     int count;
-    int (*func)();
+    int (*func)(int, off_t);
     int flags;
 } cmd[] = {
-    { "eof",           0,      1,      tapefd_weof, O_RDWR },
-    { "weof",          0,      1,      tapefd_weof, O_RDWR },
-    { "fsf",           0,      1,      tapefd_fsf, O_RDONLY },
-    { "asf",           0,      0,      do_asf, O_RDONLY },
-    { "bsf",           0,      1,      do_bsf, O_RDONLY },
-    { "rewind",                0,      0,      tapefd_rewind, O_RDONLY },
-    { "offline",       0,      0,      tapefd_unload, O_RDONLY },
-    { "rewoffl",       0,      0,      tapefd_unload, O_RDONLY },
-    { "status",                0,      0,      do_status, O_RDONLY },
-    { NULL,            0,      0,      NULL }
+    { "eof",           0,      1,      tapefd_weof,    O_RDWR },
+    { "weof",          0,      1,      tapefd_weof,    O_RDWR },
+    { "fsf",           0,      1,      tapefd_fsf,     O_RDONLY },
+    { "asf",           0,      0,      do_asf,         O_RDONLY },
+    { "bsf",           0,      1,      do_bsf,         O_RDONLY },
+    { "rewind",                0,      0,      (int (*)(int, off_t))tapefd_rewind,
+                                                       O_RDONLY },
+    { "offline",       0,      0,      (int (*)(int, off_t))tapefd_unload,
+                                                       O_RDONLY },
+    { "rewoffl",       0,      0,      (int (*)(int, off_t))tapefd_unload,
+                                                       O_RDONLY },
+    { "status",                0,      0,      do_status,      O_RDONLY },
+    { NULL,            0,      0,      NULL,           0 }
 };
 
 static char *pgm;
@@ -58,81 +62,83 @@ static int debug_ammt = 0;
 static char *tapename;
 
 static int
-do_asf(fd, count)
-    int fd;
-    int count;
+do_asf(
+    int                fd,
+    off_t      count)
 {
     int r;
 
     if(debug_ammt) {
-       fprintf(stderr, "calling tapefd_rewind()\n");
+       g_fprintf(stderr, _("calling tapefd_rewind()\n"));
     }
     if(0 != (r = tapefd_rewind(fd))) {
        return r;
     }
     if(debug_ammt) {
-       fprintf(stderr, "calling tapefd_fsf(%d)\n", count);
+       g_fprintf(stderr, _("calling tapefd_fsf(%lld)\n"), (long long)count);
     }
     return tapefd_fsf(fd, count);
 }
 
 static int
-do_bsf(fd, count)
-    int fd;
-    int count;
+do_bsf(
+    int                fd,
+    off_t      count)
 {
     if(debug_ammt) {
-       fprintf(stderr, "calling tapefd_fsf(%d)\n", -count);
+       g_fprintf(stderr, _("calling tapefd_fsf(%lld)\n"), (long long)-count);
     }
     return tapefd_fsf(fd, -count);
 }
 
 static int
-do_status(fd, count)
-    int fd;
-    int count;
+do_status(
+    int                fd,
+    off_t      count)
 {
     int ret;
     struct am_mt_status stat;
 
+    (void)count;       /* Quiet unused parameter warning */
+
     if(debug_ammt) {
-       fprintf(stderr, "calling tapefd_status()\n");
+       g_fprintf(stderr, _("calling tapefd_status()\n"));
     }
     if((ret = tapefd_status(fd, &stat)) != 0) {
        return ret;
     }
-    printf("%s status:", tapename);
+    g_printf(_("%s status:"), tapename);
     if(stat.online_valid) {
        if(stat.online) {
-           fputs(" ONLINE", stdout);
+           fputs(_(" ONLINE"), stdout);
        } else {
-           fputs(" OFFLINE", stdout);
+           fputs(_(" OFFLINE"), stdout);
        }
     }
     if(stat.bot_valid && stat.bot) {
-       fputs(" BOT", stdout);
+       fputs(_(" BOT"), stdout);
     }
     if(stat.eot_valid && stat.eot) {
-       fputs(" EOT", stdout);
+       fputs(_(" EOT"), stdout);
     }
     if(stat.protected_valid && stat.protected) {
-       fputs(" PROTECTED", stdout);
+       fputs(_(" PROTECTED"), stdout);
     }
     if(stat.device_status_valid) {
-       printf(" ds == 0x%0*lx",
+       g_printf(_(" ds == 0x%0*lx"),
               stat.device_status_size * 2,
               (unsigned long)stat.device_status);
     }
     if(stat.error_status_valid) {
-       printf(" er == 0x%0*lx",
+       g_printf(_(" er == 0x%0*lx"),
               stat.error_status_size * 2,
               (unsigned long)stat.error_status);
     }
     if(stat.fileno_valid) {
-       printf(" fileno == %ld", stat.fileno);
+       g_printf(_(" fileno == %ld"), stat.fileno);
     }
     if(stat.blkno_valid) {
-       printf(" blkno == %ld", stat.blkno);
+       g_printf(_(" blkno == %ld"), stat.blkno);
     }
 
     putchar('\n');
@@ -140,22 +146,39 @@ do_status(fd, count)
 }
 
 static void
-usage()
+usage(void)
 {
-    fprintf(stderr, "usage: %s [-d] [-f|-t device] command [count]\n", pgm);
+    g_fprintf(stderr, _("usage: %s [-d] [-f|-t device] command [count]\n"), pgm);
     exit(1);
 }
 
 int
-main(int argc, char **argv) {
+main(
+    int                argc,
+    char **    argv)
+{
     int ch;
-    int count;
-    int i;
-    int j;
+    off_t count;
+    size_t i;
+    size_t j;
     int fd;
     int save_errno;
     char *s;
 
+    /*
+     * Configure program for internationalization:
+     *   1) Only set the message locale for now.
+     *   2) Set textdomain for all amanda related programs to "amanda"
+     *      We don't want to be forced to support dozens of message catalogs.
+     */  
+    setlocale(LC_MESSAGES, "C");
+    textdomain("amanda"); 
+
+    fprintf(stderr, _("ammt is deprecated\n"));
+
+    /* Don't die when child closes pipe */
+    signal(SIGPIPE, SIG_IGN);
+
     if((pgm = strrchr(argv[0], '/')) != NULL) {
        pgm++;
     } else {
@@ -166,7 +189,7 @@ main(int argc, char **argv) {
        switch(ch) {
        case 'd':
            debug_ammt = 1;
-           fprintf(stderr, "debug mode!\n");
+           g_fprintf(stderr, _("debug mode!\n"));
            break;
        case 'f':
        case 't':
@@ -174,25 +197,26 @@ main(int argc, char **argv) {
            break;
        default:
            usage();
-           /* NOTREACHED */
+           /*NOTREACHED*/
        }
     }
     if(optind >= argc) {
        usage();
-       /* NOTREACHED */
+       /*NOTREACHED*/
     }
 
     /*
      * Compute the minimum abbreviation for each command.
      */
     for(i = 0; cmd[i].name; i++) {
-       cmd[i].min_chars = 1;
+       cmd[i].min_chars = (size_t)1;
        while (1) {
            for(j = 0; cmd[j].name; j++) {
                if(i == j) {
                    continue;
                }
-               if(0 == strncmp(cmd[i].name, cmd[j].name, cmd[i].min_chars)) {
+               if(0 == strncmp(cmd[i].name, cmd[j].name,
+                               cmd[i].min_chars)) {
                    break;
                }
            }
@@ -202,10 +226,10 @@ main(int argc, char **argv) {
            cmd[i].min_chars++;
        }
        if(debug_ammt) {
-           fprintf(stderr, "syntax: %-20s -> %*.*s\n",
+           g_fprintf(stderr, _("syntax: %-20s -> %*.*s\n"),
                            cmd[i].name,
-                           cmd[i].min_chars,
-                           cmd[i].min_chars,
+                           (int)cmd[i].min_chars,
+                           (int)cmd[i].min_chars,
                            cmd[i].name);
        }
     }
@@ -213,43 +237,44 @@ main(int argc, char **argv) {
     /*
      * Process the command.
      */
-    s = "unknown";
+    s = _("unknown");
     j = strlen(argv[optind]);
     for(i = 0; cmd[i].name; i++) {
        if(0 == strncmp(cmd[i].name, argv[optind], j)) {
            if(j >= cmd[i].min_chars) {
                break;
            }
-           s = "ambiguous";
+           s = _("ambiguous");
        }
     }
     if(0 == cmd[i].name) {
-       fprintf(stderr, "%s: %s command: %s\n", pgm, s, argv[optind]);
+       g_fprintf(stderr, _("%s: %s command: %s\n"), pgm, s, argv[optind]);
        exit(1);
     }
     optind++;
     if(0 == tapename) {
-       fprintf(stderr, "%s: -f device or -t device is required\n", pgm);
+       g_fprintf(stderr, _("%s: -f device or -t device is required\n"), pgm);
        exit(1);
     }
     if(debug_ammt) {
-       fprintf(stderr, "tapename is \"%s\"\n", tapename);
+       g_fprintf(stderr, _("tapename is \"%s\"\n"), tapename);
     }
 
-    count = 1;
+    count = (off_t)1;
     if(optind < argc && cmd[i].count) {
-       count = atoi(argv[optind]);
+       count = OFF_T_ATOI(argv[optind]);
     }
 
     if(debug_ammt) {
-       fprintf(stderr, "calling tape_open(\"%s\",%d)\n", tapename, cmd[i].flags);
+       g_fprintf(stderr, _("calling tape_open(\"%s\",%d)\n"), tapename, cmd[i].flags);
     }
-    if((fd = tape_open(tapename, cmd[i].flags)) < 0) {
+    if((fd = tape_open(tapename, cmd[i].flags, 0)) < 0) {
        goto report_error;
     }
 
     if(debug_ammt) {
-       fprintf(stderr, "processing %s(%d)\n", cmd[i].name, count);
+       g_fprintf(stderr, _("processing %s(%lld)\n"),
+               cmd[i].name, (long long)count);
     }
     if(0 != (*cmd[i].func)(fd, count)) {
        goto report_error;
@@ -262,11 +287,11 @@ main(int argc, char **argv) {
 report_error:
 
     save_errno = errno;
-    fprintf(stderr, "%s %s", tapename, cmd[i].name);
+    g_fprintf(stderr, _("%s %s"), tapename, cmd[i].name);
     if(cmd[i].count) {
-       fprintf(stderr, " %d", count);
+       g_fprintf(stderr, " %lld", (long long)count);
     }
     errno = save_errno;
-    perror(" failed");
-    exit(1);
+    perror(_(" failed"));
+    return (1); /* exit */
 }