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;
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');
}
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 {
switch(ch) {
case 'd':
debug_ammt = 1;
- fprintf(stderr, "debug mode!\n");
+ g_fprintf(stderr, _("debug mode!\n"));
break;
case 'f':
case 't':
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;
}
}
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);
}
}
/*
* 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;
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 */
}