diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-10-07 15:00:29 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-10-07 15:00:29 +0000 |
commit | f7a57848c2a63957ef14b605c5f10b2691d36e73 (patch) | |
tree | a6c1d09c3f8c0937eaec2ad9cd35d19d125ff682 | |
parent | 96e9d3c968b252c0dac5b497c003e961bd408570 (diff) | |
download | busybox-w32-f7a57848c2a63957ef14b605c5f10b2691d36e73.tar.gz busybox-w32-f7a57848c2a63957ef14b605c5f10b2691d36e73.tar.bz2 busybox-w32-f7a57848c2a63957ef14b605c5f10b2691d36e73.zip |
eject: remove unmounting. It is buggy for many non-trivial
mounts, and can be done as shell script.
-rw-r--r-- | miscutils/eject.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/miscutils/eject.c b/miscutils/eject.c index b07f536b1..ff23b1666 100644 --- a/miscutils/eject.c +++ b/miscutils/eject.c | |||
@@ -14,7 +14,6 @@ | |||
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include "busybox.h" | 16 | #include "busybox.h" |
17 | #include <mntent.h> | ||
18 | 17 | ||
19 | /* various defines swiped from linux/cdrom.h */ | 18 | /* various defines swiped from linux/cdrom.h */ |
20 | #define CDROMCLOSETRAY 0x5319 /* pendant of CDROMEJECT */ | 19 | #define CDROMCLOSETRAY 0x5319 /* pendant of CDROMEJECT */ |
@@ -30,23 +29,20 @@ int eject_main(int argc, char **argv) | |||
30 | { | 29 | { |
31 | unsigned long flags; | 30 | unsigned long flags; |
32 | char *device; | 31 | char *device; |
33 | struct mntent *m; | ||
34 | int dev, cmd; | 32 | int dev, cmd; |
35 | 33 | ||
36 | opt_complementary = "?:?1:t--T:T--t"; | 34 | opt_complementary = "?:?1:t--T:T--t"; |
37 | flags = getopt32(argc, argv, "tT"); | 35 | flags = getopt32(argc, argv, "tT"); |
38 | device = argv[optind] ? : "/dev/cdrom"; | 36 | device = argv[optind] ? : "/dev/cdrom"; |
39 | 37 | ||
40 | // FIXME: what if something is mounted OVER our cdrom? | 38 | // We used to do "umount <device>" here, but it was buggy |
41 | // We will unmount something else??! | 39 | // if something was mounted OVER cdrom and |
42 | // What if cdrom is mounted many times? | 40 | // if cdrom is mounted many times. |
43 | m = find_mount_point(device, bb_path_mtab_file); | 41 | // |
44 | if (m) { | 42 | // This works equally well (or better): |
45 | if (umount(m->mnt_dir)) | 43 | // #!/bin/sh |
46 | bb_error_msg_and_die("can't umount %s", device); | 44 | // umount /dev/cdrom |
47 | if (ENABLE_FEATURE_MTAB_SUPPORT) | 45 | // eject |
48 | erase_mtab(m->mnt_fsname); | ||
49 | } | ||
50 | 46 | ||
51 | dev = xopen(device, O_RDONLY|O_NONBLOCK); | 47 | dev = xopen(device, O_RDONLY|O_NONBLOCK); |
52 | cmd = CDROMEJECT; | 48 | cmd = CDROMEJECT; |