From 13a70ac2ab7cd2b87e7a8618c64b72b84e9fcabc Mon Sep 17 00:00:00 2001 From: Matt Kraai Date: Mon, 21 May 2001 15:00:39 +0000 Subject: [PATCH] Fix open mode for IOCTLs which write to the tape. --- miscutils/mt.c | 17 +++++++++++++++-- mt.c | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/miscutils/mt.c b/miscutils/mt.c index 250856f..cd92627 100644 --- a/miscutils/mt.c +++ b/miscutils/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) 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) -- 2.7.4