From: Denis Vlasenko Date: Mon, 2 Oct 2006 20:49:25 +0000 (-0000) Subject: eject: -T (implements single button open/close) X-Git-Tag: 1_4_0~560 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=2e864cd21938eae6365b925dac1e1c29a94a0d20;p=oweals%2Fbusybox.git eject: -T (implements single button open/close) --- diff --git a/include/usage.h b/include/usage.h index 1da436ad4..40676c113 100644 --- a/include/usage.h +++ b/include/usage.h @@ -638,11 +638,12 @@ USE_FEATURE_DATE_ISOFMT( \ "Erik\\nis\\ncool\n") #define eject_trivial_usage \ - "[-t] [DEVICE]" + "[-t] [-T] [DEVICE]" #define eject_full_usage \ "Eject specified DEVICE (or default /dev/cdrom).\n\n" \ "Options:\n" \ - "\t-t\tclose tray" + "\t-t\tclose tray\n" \ + "\t-T\topen/close tray (toggle)" #define ed_trivial_usage "" #define ed_full_usage "" 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 @@ #define CDROMEJECT 0x5309 /* Ejects the cdrom media */ #define DEFAULT_CDROM "/dev/cdrom" +#define FLAG_CLOSE 1 +#define FLAG_SMART 2 + int eject_main(int argc, char **argv) { unsigned long flags; char *device; struct mntent *m; + int dev; - flags = bb_getopt_ulflags(argc, argv, "t"); + /*bb_opt_complementally = "t--T:T--t";*/ + flags = bb_getopt_ulflags(argc, argv, "tT"); device = argv[optind] ? : DEFAULT_CDROM; - if ((m = find_mount_point(device, bb_path_mtab_file))) { + m = find_mount_point(device, bb_path_mtab_file); + if (m) { if (umount(m->mnt_dir)) { - bb_error_msg_and_die("Can't umount"); + bb_error_msg_and_die("can't umount"); } else if (ENABLE_FEATURE_MTAB_SUPPORT) { erase_mtab(m->mnt_fsname); } } - if (ioctl(xopen(device, (O_RDONLY | O_NONBLOCK)), - (flags ? CDROMCLOSETRAY : CDROMEJECT))) { - bb_perror_msg_and_die("%s", device); + + dev = xopen(device, O_RDONLY|O_NONBLOCK); + + if (flags & FLAG_CLOSE) goto close_tray; + + if (ioctl(dev, CDROMEJECT)) { +close_tray: + if (ioctl(dev, CDROMCLOSETRAY)) + bb_perror_msg_and_die("%s", device); } - return (EXIT_SUCCESS); + + if (ENABLE_FEATURE_CLEAN_UP) close(dev); + + return EXIT_SUCCESS; }