eject: close file description after usage
Also reindent the switch statement. CID 702040.
This commit is contained in:
+65
-56
@@ -151,73 +151,82 @@ static int do_eject(char operation, char *device)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
switch (operation) {
|
switch (operation) {
|
||||||
case 'h':
|
case 'e':
|
||||||
return usage("eject");
|
|
||||||
case 'e':
|
|
||||||
if (ioctl(fd, B_EJECT_DEVICE, NULL, 0) < 0) {
|
|
||||||
perror(device);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'l':
|
|
||||||
if (ioctl(fd, B_LOAD_MEDIA, NULL, 0) < 0) {
|
|
||||||
perror(device);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'b':
|
|
||||||
bval = true;
|
|
||||||
if (ioctl(fd, B_SCSI_PREVENT_ALLOW, &bval, sizeof(bval)) < 0) {
|
|
||||||
perror(device);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'u':
|
|
||||||
bval = false;
|
|
||||||
if (ioctl(fd, B_SCSI_PREVENT_ALLOW, &bval, sizeof(bval)) < 0) {
|
|
||||||
perror(device);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'q':
|
|
||||||
if (ioctl(fd, B_GET_MEDIA_STATUS, &devstatus, sizeof(devstatus)) < 0) {
|
|
||||||
perror(device);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
switch (devstatus) {
|
|
||||||
case B_NO_ERROR:
|
|
||||||
puts("Media present");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
puts(strerror(devstatus));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
if (ioctl(fd, B_GET_MEDIA_STATUS, &devstatus, sizeof(devstatus)) < 0) {
|
|
||||||
perror(device);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
switch (devstatus) {
|
|
||||||
case B_NO_ERROR:
|
|
||||||
case B_DEV_NO_MEDIA:
|
|
||||||
if (ioctl(fd, B_EJECT_DEVICE, NULL, 0) < 0) {
|
if (ioctl(fd, B_EJECT_DEVICE, NULL, 0) < 0) {
|
||||||
perror(device);
|
perror(device);
|
||||||
|
close(fd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case B_DEV_DOOR_OPEN:
|
case 'l':
|
||||||
if (ioctl(fd, B_LOAD_MEDIA, NULL, 0) < 0) {
|
if (ioctl(fd, B_LOAD_MEDIA, NULL, 0) < 0) {
|
||||||
perror(device);
|
perror(device);
|
||||||
|
close(fd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'b':
|
||||||
|
bval = true;
|
||||||
|
if (ioctl(fd, B_SCSI_PREVENT_ALLOW, &bval, sizeof(bval)) < 0) {
|
||||||
|
perror(device);
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'u':
|
||||||
|
bval = false;
|
||||||
|
if (ioctl(fd, B_SCSI_PREVENT_ALLOW, &bval, sizeof(bval)) < 0) {
|
||||||
|
perror(device);
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'q':
|
||||||
|
if (ioctl(fd, B_GET_MEDIA_STATUS, &devstatus, sizeof(devstatus))
|
||||||
|
< 0) {
|
||||||
|
perror(device);
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
switch (devstatus) {
|
||||||
|
case B_NO_ERROR:
|
||||||
|
puts("Media present");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
puts(strerror(devstatus));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
if (ioctl(fd, B_GET_MEDIA_STATUS, &devstatus, sizeof(devstatus))
|
||||||
|
< 0) {
|
||||||
|
perror(device);
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
switch (devstatus) {
|
||||||
|
case B_NO_ERROR:
|
||||||
|
case B_DEV_NO_MEDIA:
|
||||||
|
if (ioctl(fd, B_EJECT_DEVICE, NULL, 0) < 0) {
|
||||||
|
perror(device);
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case B_DEV_DOOR_OPEN:
|
||||||
|
if (ioctl(fd, B_LOAD_MEDIA, NULL, 0) < 0) {
|
||||||
|
perror(device);
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
perror(device);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
default:
|
default:
|
||||||
perror(device);
|
close(fd);
|
||||||
}
|
return usage("eject");
|
||||||
break;
|
|
||||||
default:
|
|
||||||
usage("eject");
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user