Patch from David Meggy to make the swap default to the new version if no
[oweals/busybox.git] / miscutils / mt.c
index cd926272e9c4c1719529d526da0a80898bb3d20b..e7995455291d733c077409642fee73300e78fa13 100644 (file)
@@ -35,7 +35,7 @@ static const struct mt_opcodes opcodes[] = {
        {"ras3", MTRAS3},
        {"reset", MTRESET},
        {"retension", MTRETEN},
-       {"rew", MTREW},
+       {"rewind", MTREW},
        {"seek", MTSEEK},
        {"setblk", MTSETBLK},
        {"setdensity", MTSETDENSITY},
@@ -55,15 +55,16 @@ extern int mt_main(int argc, char **argv)
        const char *file = "/dev/tape";
        const struct mt_opcodes *code = opcodes;
        struct mtop op;
+       struct mtpos position;
        int fd, mode;
        
        if (argc < 2) {
-               show_usage();
+               bb_show_usage();
        }
 
        if (strcmp(argv[1], "-f") == 0) {
                if (argc < 4) {
-                       show_usage();
+                       bb_show_usage();
                }
                file = argv[2];
                argv += 2;
@@ -77,7 +78,7 @@ extern int mt_main(int argc, char **argv)
        }
 
        if (code->name == 0) {
-               error_msg("unrecognized opcode %s.", argv[1]);
+               bb_error_msg("unrecognized opcode %s.", argv[1]);
                return EXIT_FAILURE;
        }
 
@@ -101,10 +102,20 @@ extern int mt_main(int argc, char **argv)
        }
 
        if ((fd = open(file, mode, 0)) < 0)
-               perror_msg_and_die("%s", file);
+               bb_perror_msg_and_die("%s", file);
 
-       if (ioctl(fd, MTIOCTOP, &op) != 0)
-               perror_msg_and_die("%s", file);
+       switch (code->value) {
+               case MTTELL:
+                       if (ioctl(fd, MTIOCPOS, &position) < 0)
+                               bb_perror_msg_and_die("%s", file);
+                       printf ("At block %d.\n", (int) position.mt_blkno);
+                       break;
+
+               default:
+                       if (ioctl(fd, MTIOCTOP, &op) != 0)
+                               bb_perror_msg_and_die("%s", file);
+                       break;
+       }
 
        return EXIT_SUCCESS;
 }