svn commit: trunk/busybox: include miscutils
vda at busybox.net
vda at busybox.net
Mon Oct 2 20:49:26 UTC 2006
Author: vda
Date: 2006-10-02 13:49:25 -0700 (Mon, 02 Oct 2006)
New Revision: 16293
Log:
eject: -T (implements single button open/close)
Modified:
trunk/busybox/include/usage.h
trunk/busybox/miscutils/eject.c
Changeset:
Modified: trunk/busybox/include/usage.h
===================================================================
--- trunk/busybox/include/usage.h 2006-10-02 19:40:44 UTC (rev 16292)
+++ trunk/busybox/include/usage.h 2006-10-02 20:49:25 UTC (rev 16293)
@@ -638,11 +638,12 @@
"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 ""
Modified: trunk/busybox/miscutils/eject.c
===================================================================
--- trunk/busybox/miscutils/eject.c 2006-10-02 19:40:44 UTC (rev 16292)
+++ trunk/busybox/miscutils/eject.c 2006-10-02 20:49:25 UTC (rev 16293)
@@ -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;
}
More information about the busybox-cvs
mailing list