Fix open mode for IOCTLs which write to the tape.
authorMatt Kraai <kraai@debian.org>
Mon, 21 May 2001 15:00:39 +0000 (15:00 -0000)
committerMatt Kraai <kraai@debian.org>
Mon, 21 May 2001 15:00:39 +0000 (15:00 -0000)
miscutils/mt.c
mt.c

index 250856f05c29e1ea21b4a470af95ee389cfa6182..cd926272e9c4c1719529d526da0a80898bb3d20b 100644 (file)
@@ -55,7 +55,7 @@ extern int mt_main(int argc, char **argv)
        const char *file = "/dev/tape";
        const struct mt_opcodes *code = opcodes;
        struct mtop op;
-       int fd;
+       int fd, mode;
        
        if (argc < 2) {
                show_usage();
@@ -87,7 +87,20 @@ extern int mt_main(int argc, char **argv)
        else
                op.mt_count = 1;                /* One, not zero, right? */
 
-       if ((fd = open(file, O_RDONLY, 0)) < 0)
+       switch (code->value) {
+               case MTWEOF:
+               case MTERASE:
+               case MTWSM:
+               case MTSETDRVBUFFER:
+                       mode = O_WRONLY;
+                       break;
+
+               default:
+                       mode = O_RDONLY;
+                       break;
+       }
+
+       if ((fd = open(file, mode, 0)) < 0)
                perror_msg_and_die("%s", file);
 
        if (ioctl(fd, MTIOCTOP, &op) != 0)
diff --git a/mt.c b/mt.c
index 250856f05c29e1ea21b4a470af95ee389cfa6182..cd926272e9c4c1719529d526da0a80898bb3d20b 100644 (file)
--- a/mt.c
+++ b/mt.c
@@ -55,7 +55,7 @@ extern int mt_main(int argc, char **argv)
        const char *file = "/dev/tape";
        const struct mt_opcodes *code = opcodes;
        struct mtop op;
-       int fd;
+       int fd, mode;
        
        if (argc < 2) {
                show_usage();
@@ -87,7 +87,20 @@ extern int mt_main(int argc, char **argv)
        else
                op.mt_count = 1;                /* One, not zero, right? */
 
-       if ((fd = open(file, O_RDONLY, 0)) < 0)
+       switch (code->value) {
+               case MTWEOF:
+               case MTERASE:
+               case MTWSM:
+               case MTSETDRVBUFFER:
+                       mode = O_WRONLY;
+                       break;
+
+               default:
+                       mode = O_RDONLY;
+                       break;
+       }
+
+       if ((fd = open(file, mode, 0)) < 0)
                perror_msg_and_die("%s", file);
 
        if (ioctl(fd, MTIOCTOP, &op) != 0)