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