Imported Upstream version 2.6.0
[debian/amanda] / tape-src / amdd.c
index 3f21b1198283718f983c2e86a7ba8dcde8ed3ff9..8a9e391bfa2338ba2cc0b943c17a794d4db75905 100644 (file)
@@ -25,40 +25,57 @@ extern int optind;
 static int debug_amdd = 0;
 static char *pgm = NULL;
 
+static void usage(void);
+
 static void
-usage()
+usage(void)
 {
-    fprintf(stderr, "usage: %s ", pgm);
-    fprintf(stderr, " [-d]");
-    fprintf(stderr, " [-l length]");
-    fprintf(stderr, " [if=input]");
-    fprintf(stderr, " [of=output]");
-    fprintf(stderr, " [bs=blocksize]");
-    fprintf(stderr, " [count=count]");
-    fprintf(stderr, " [skip=count]");
-    fprintf(stderr, "\n");
+    g_fprintf(stderr, _("usage: %s "), pgm);
+    g_fprintf(stderr, _(" [-d]"));
+    g_fprintf(stderr, _(" [-l length]"));
+    g_fprintf(stderr, _(" [if=input]"));
+    g_fprintf(stderr, _(" [of=output]"));
+    g_fprintf(stderr, _(" [bs=blocksize]"));
+    g_fprintf(stderr, _(" [count=count]"));
+    g_fprintf(stderr, _(" [skip=count]"));
+    g_fprintf(stderr, _("\n"));
     exit(1);
 }
 
+static ssize_t (*read_func)(int, void *, size_t);
+static ssize_t (*write_func)(int, const void *, size_t);
+
 int
-main(int argc, char **argv) {
+main(
+    int                argc,
+    char **    argv)
+{
     int infd = 0;                              /* stdin */
     int outfd = 1;                             /* stdout */
-    int blocksize = 512;
-    int skip=0;
-    int len;
+    size_t blocksize = 512;
+    off_t skip = (off_t)0;
+    ssize_t len;
     int pread, fread, pwrite, fwrite;
     int res = 0;
     char *buf;
-    int count = 0;
+    off_t count = (off_t)0;
     int have_count = 0;
     int save_errno;
     int ch;
     char *eq;
-    int length = 0;
+    off_t length = (off_t)0;
     int have_length = 0;
-    ssize_t (*read_func)(int, void *, size_t);
-    ssize_t (*write_func)(int, const void *, size_t);
+
+    /*
+     * 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, _("amdd is deprecated\n"));
 
     if((pgm = strrchr(argv[0], '/')) != NULL) {
        pgm++;
@@ -69,73 +86,79 @@ main(int argc, char **argv) {
        switch(ch) {
        case 'd':
            debug_amdd = 1;
-           fprintf(stderr, "debug mode!\n");
+           g_fprintf(stderr, _("debug mode!\n"));
            break;
+
+#ifndef __lint
        case 'l':
            have_length = 1;
-           length = atoi(optarg);
-           len = strlen(optarg);
+           length = OFF_T_ATOI(optarg);
+           len = (ssize_t)strlen(optarg);
            if(len > 0) {
                switch(optarg[len-1] ) {
                case 'k':                               break;
-               case 'b': length /= 2;                  break;
-               case 'M': length *= 1024;               break;
-               default:  length /= 1024;               break;
+               case 'b': length /= (off_t)2;           break;
+               case 'M': length *= (off_t)1024;        break;
+               default:  length /= (off_t)1024;        break;
                }
            } else {
-               length /= 1024;
+               length /= (off_t)1024;
            }
            break;
+#endif
        case 'h':
        default:
            usage();
-           /* NOTREACHED */
+           /*NOTREACHED*/
        }
     }
 
+    /*@ignore@*/
     read_func = read;
     write_func = write;
+    /*@end@*/
     for( ; optind < argc; optind++) {
        if(0 == (eq = strchr(argv[optind], '='))) {
            usage();
-           /* NOTREACHED */
+           /*NOTREACHED*/
        }
-       len = eq - argv[optind];
-       if(0 == strncmp("if", argv[optind], len)) {
-           if((infd = tape_open(eq + 1, O_RDONLY)) < 0) {
+       len = (ssize_t)(eq - argv[optind]);
+       if(0 == strncmp("if", argv[optind], (size_t)len)) {
+           if((infd = tape_open(eq + 1, O_RDONLY, 0)) < 0) {
                save_errno = errno;
-               fprintf(stderr, "%s: %s: ", pgm, eq + 1);
+               g_fprintf(stderr, "%s: %s: ", pgm, eq + 1);
                errno = save_errno;
                perror("open");
                return 1;
            }
            read_func = tapefd_read;
             if(debug_amdd) {
-               fprintf(stderr, "input opened \"%s\", got fd %d\n",
+               g_fprintf(stderr, _("input opened \"%s\", got fd %d\n"),
                                eq + 1, infd);
            }
-       } else if(0 == strncmp("of", argv[optind], len)) {
+       } else if(0 == strncmp("of", argv[optind], (size_t)len)) {
            if((outfd = tape_open(eq + 1, O_RDWR|O_CREAT|O_TRUNC, 0644)) < 0) {
                save_errno = errno;
-               fprintf(stderr, "%s: %s: ", pgm, eq + 1);
+               g_fprintf(stderr, "%s: %s: ", pgm, eq + 1);
                errno = save_errno;
                perror("open");
                return 1;
            }
            write_func = tapefd_write;
             if(debug_amdd) {
-               fprintf(stderr, "output opened \"%s\", got fd %d\n",
+               g_fprintf(stderr, _("output opened \"%s\", got fd %d\n"),
                                eq + 1, outfd);
            }
            if(have_length) {
                if(debug_amdd) {
-                   fprintf(stderr, "length set to %d\n", length);
+                   g_fprintf(stderr, _("length set to %lld\n"),
+                       (long long)length);
                }
                tapefd_setinfo_length(outfd, length);
            }
-       } else if(0 == strncmp("bs", argv[optind], len)) {
-           blocksize = atoi(eq + 1);
-           len = strlen(argv[optind]);
+       } else if(0 == strncmp("bs", argv[optind], (size_t)len)) {
+           blocksize = SIZE_T_ATOI(eq + 1);
+           len = (ssize_t)strlen(argv[optind]);
            if(len > 0) {
                switch(argv[optind][len-1] ) {
                case 'k': blocksize *= 1024;            break;
@@ -144,55 +167,55 @@ main(int argc, char **argv) {
                }
            }
            if(debug_amdd) {
-               fprintf(stderr, "blocksize set to %d\n", blocksize);
+               g_fprintf(stderr, _("blocksize set to %zu\n"), blocksize);
            }
-       } else if(0 == strncmp("count", argv[optind], len)) {
-           count = atoi(eq + 1);
+       } else if(0 == strncmp("count", argv[optind], (size_t)len)) {
+           count = OFF_T_ATOI(eq + 1);
            have_count = 1;
            if(debug_amdd) {
-               fprintf(stderr, "count set to %d\n", count);
+               g_fprintf(stderr, _("count set to %lld\n"), (long long)count);
            }
-       } else if(0 == strncmp("skip", argv[optind], len)) {
-           skip = atoi(eq + 1);
+       } else if(0 == strncmp("skip", argv[optind], (size_t)len)) {
+           skip = OFF_T_ATOI(eq + 1);
            if(debug_amdd) {
-               fprintf(stderr, "skip set to %d\n", skip);
+               g_fprintf(stderr, _("skip set to %lld\n"), (long long)skip);
            }
        } else {
-           fprintf(stderr, "%s: bad argument: \"%s\"\n", pgm, argv[optind]);
+           g_fprintf(stderr, _("%s: bad argument: \"%s\"\n"), pgm, argv[optind]);
            return 1;
        }
     }
 
     if(0 == (buf = malloc(blocksize))) {
        save_errno = errno;
-       fprintf(stderr, "%s: ", pgm);
+       g_fprintf(stderr, "%s: ", pgm);
        errno = save_errno;
-       perror("malloc error");
+       perror(_("malloc error"));
        return 1;
     }
 
-    eq = "read error";
+    eq = _("read error");
     pread = fread = pwrite = fwrite = 0;
     while(0 < (len = (*read_func)(infd, buf, blocksize))) {
-       if(skip-- > 0) {
+       if((skip -= (off_t)1) > (off_t)0) {
            continue;
        }
-       if(len == blocksize) {
+       if((size_t)len == blocksize) {
            fread++;
        } else if(len > 0) {
            pread++;
        }
-       len = (*write_func)(outfd, buf, len);
+       len = (*write_func)(outfd, buf, (size_t)len);
        if(len < 0) {
-           eq = "write error";
+           eq = _("write error");
            break;
-       } else if(len == blocksize) {
+       } else if((size_t)len == blocksize) {
            fwrite++;
        } else if(len > 0) {
            pwrite++;
        }
        if(have_count) {
-           if(--count <= 0) {
+           if((count -= (off_t)1) <= (off_t)0) {
                len = 0;
                break;
            }
@@ -200,27 +223,27 @@ main(int argc, char **argv) {
     }
     if(len < 0) {
        save_errno = errno;
-       fprintf(stderr, "%s: ", pgm);
+       g_fprintf(stderr, "%s: ", pgm);
        errno = save_errno;
        perror(eq);
        res = 1;
     }
-    fprintf(stderr, "%d+%d in\n%d+%d out\n", fread, pread, fwrite, pwrite);
+    g_fprintf(stderr, _("%d+%d in\n%d+%d out\n"), fread, pread, fwrite, pwrite);
     if(read_func == tapefd_read) {
        if(0 != tapefd_close(infd)) {
            save_errno = errno;
-           fprintf(stderr, "%s: ", pgm);
+           g_fprintf(stderr, "%s: ", pgm);
            errno = save_errno;
-           perror("input close");
+           perror(_("input close"));
            res = 1;
        }
     }
     if(write_func == tapefd_write) {
        if(0 != tapefd_close(outfd)) {
            save_errno = errno;
-           fprintf(stderr, "%s: ", pgm);
+           g_fprintf(stderr, "%s: ", pgm);
            errno = save_errno;
-           perror("output close");
+           perror(_("output close"));
            res = 1;
        }
     }