aboutsummaryrefslogtreecommitdiff
path: root/miscutils/eject.c
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils/eject.c')
-rw-r--r--miscutils/eject.c29
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
24int eject_main(int argc, char **argv) 27int 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)) {
52close_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}