diff options
Diffstat (limited to 'miscutils/eject.c')
-rw-r--r-- | miscutils/eject.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/miscutils/eject.c b/miscutils/eject.c index 282090d38..272d95980 100644 --- a/miscutils/eject.c +++ b/miscutils/eject.c | |||
@@ -21,25 +21,40 @@ | |||
21 | #define CDROMEJECT 0x5309 /* Ejects the cdrom media */ | 21 | #define CDROMEJECT 0x5309 /* Ejects the cdrom media */ |
22 | #define DEFAULT_CDROM "/dev/cdrom" | 22 | #define DEFAULT_CDROM "/dev/cdrom" |
23 | 23 | ||
24 | #define FLAG_CLOSE 1 | ||
25 | #define FLAG_SMART 2 | ||
26 | |||
24 | int eject_main(int argc, char **argv) | 27 | int eject_main(int argc, char **argv) |
25 | { | 28 | { |
26 | unsigned long flags; | 29 | unsigned long flags; |
27 | char *device; | 30 | char *device; |
28 | struct mntent *m; | 31 | struct mntent *m; |
32 | int dev; | ||
29 | 33 | ||
30 | flags = bb_getopt_ulflags(argc, argv, "t"); | 34 | /*bb_opt_complementally = "t--T:T--t";*/ |
35 | flags = bb_getopt_ulflags(argc, argv, "tT"); | ||
31 | device = argv[optind] ? : DEFAULT_CDROM; | 36 | device = argv[optind] ? : DEFAULT_CDROM; |
32 | 37 | ||
33 | if ((m = find_mount_point(device, bb_path_mtab_file))) { | 38 | m = find_mount_point(device, bb_path_mtab_file); |
39 | if (m) { | ||
34 | if (umount(m->mnt_dir)) { | 40 | if (umount(m->mnt_dir)) { |
35 | bb_error_msg_and_die("Can't umount"); | 41 | bb_error_msg_and_die("can't umount"); |
36 | } else if (ENABLE_FEATURE_MTAB_SUPPORT) { | 42 | } else if (ENABLE_FEATURE_MTAB_SUPPORT) { |
37 | erase_mtab(m->mnt_fsname); | 43 | erase_mtab(m->mnt_fsname); |
38 | } | 44 | } |
39 | } | 45 | } |
40 | if (ioctl(xopen(device, (O_RDONLY | O_NONBLOCK)), | 46 | |
41 | (flags ? CDROMCLOSETRAY : CDROMEJECT))) { | 47 | dev = xopen(device, O_RDONLY|O_NONBLOCK); |
42 | bb_perror_msg_and_die("%s", device); | 48 | |
49 | if (flags & FLAG_CLOSE) goto close_tray; | ||
50 | |||
51 | if (ioctl(dev, CDROMEJECT)) { | ||
52 | close_tray: | ||
53 | if (ioctl(dev, CDROMCLOSETRAY)) | ||
54 | bb_perror_msg_and_die("%s", device); | ||
43 | } | 55 | } |
44 | return (EXIT_SUCCESS); | 56 | |
57 | if (ENABLE_FEATURE_CLEAN_UP) close(dev); | ||
58 | |||
59 | return EXIT_SUCCESS; | ||
45 | } | 60 | } |