Fix open mode for IOCTLs which write to the tape.

This commit is contained in:
Matt Kraai 2001-05-21 15:00:39 +00:00
parent 9ffb7dd9a4
commit 13a70ac2ab
2 changed files with 30 additions and 4 deletions

View File

@ -55,7 +55,7 @@ extern int mt_main(int argc, char **argv)
const char *file = "/dev/tape"; const char *file = "/dev/tape";
const struct mt_opcodes *code = opcodes; const struct mt_opcodes *code = opcodes;
struct mtop op; struct mtop op;
int fd; int fd, mode;
if (argc < 2) { if (argc < 2) {
show_usage(); show_usage();
@ -87,7 +87,20 @@ extern int mt_main(int argc, char **argv)
else else
op.mt_count = 1; /* One, not zero, right? */ 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); perror_msg_and_die("%s", file);
if (ioctl(fd, MTIOCTOP, &op) != 0) if (ioctl(fd, MTIOCTOP, &op) != 0)

17
mt.c
View File

@ -55,7 +55,7 @@ extern int mt_main(int argc, char **argv)
const char *file = "/dev/tape"; const char *file = "/dev/tape";
const struct mt_opcodes *code = opcodes; const struct mt_opcodes *code = opcodes;
struct mtop op; struct mtop op;
int fd; int fd, mode;
if (argc < 2) { if (argc < 2) {
show_usage(); show_usage();
@ -87,7 +87,20 @@ extern int mt_main(int argc, char **argv)
else else
op.mt_count = 1; /* One, not zero, right? */ 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); perror_msg_and_die("%s", file);
if (ioctl(fd, MTIOCTOP, &op) != 0) if (ioctl(fd, MTIOCTOP, &op) != 0)