summaryrefslogtreecommitdiff
path: root/mt.c
diff options
context:
space:
mode:
authorMatt Kraai2001-05-21 15:00:39 +0000
committerMatt Kraai2001-05-21 15:00:39 +0000
commit13a70ac2ab7cd2b87e7a8618c64b72b84e9fcabc (patch)
treecc185648bf940caf94883e473b3de49f65d1ffac /mt.c
parent9ffb7dd9a4688161140a4c19221247566886ef55 (diff)
downloadbusybox-13a70ac2ab7cd2b87e7a8618c64b72b84e9fcabc.zip
busybox-13a70ac2ab7cd2b87e7a8618c64b72b84e9fcabc.tar.gz
Fix open mode for IOCTLs which write to the tape.
Diffstat (limited to 'mt.c')
-rw-r--r--mt.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/mt.c b/mt.c
index 250856f..cd92627 100644
--- 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)