eject: remove unmounting. It is buggy for many non-trivial
mounts, and can be done as shell script.
diff --git a/miscutils/eject.c b/miscutils/eject.c
index b07f536..ff23b16 100644
--- a/miscutils/eject.c
+++ b/miscutils/eject.c
@@ -14,7 +14,6 @@
*/
#include "busybox.h"
-#include <mntent.h>
/* various defines swiped from linux/cdrom.h */
#define CDROMCLOSETRAY 0x5319 /* pendant of CDROMEJECT */
@@ -30,23 +29,20 @@
{
unsigned long flags;
char *device;
- struct mntent *m;
int dev, cmd;
opt_complementary = "?:?1:t--T:T--t";
flags = getopt32(argc, argv, "tT");
device = argv[optind] ? : "/dev/cdrom";
- // FIXME: what if something is mounted OVER our cdrom?
- // We will unmount something else??!
- // What if cdrom is mounted many times?
- m = find_mount_point(device, bb_path_mtab_file);
- if (m) {
- if (umount(m->mnt_dir))
- bb_error_msg_and_die("can't umount %s", device);
- if (ENABLE_FEATURE_MTAB_SUPPORT)
- erase_mtab(m->mnt_fsname);
- }
+ // We used to do "umount <device>" here, but it was buggy
+ // if something was mounted OVER cdrom and
+ // if cdrom is mounted many times.
+ //
+ // This works equally well (or better):
+ // #!/bin/sh
+ // umount /dev/cdrom
+ // eject
dev = xopen(device, O_RDONLY|O_NONBLOCK);
cmd = CDROMEJECT;