Index: AUTHORS
===================================================================
RCS file: /var/cvs/busybox/AUTHORS,v
retrieving revision 1.40
diff -u -r1.40 AUTHORS
--- a/AUTHORS	9 Oct 2003 21:19:21 -0000	1.40
+++ b/AUTHORS	5 Mar 2004 07:23:17 -0000
@@ -8,6 +8,9 @@

 -----------

+Peter Willis <psyphreak@phreaker.net>
+    eject
+
 Emanuele Aina <emanuele.aina@tiscali.it>
 	run-parts

Index: coreutils/Config.in
===================================================================
RCS file: /var/cvs/busybox/coreutils/Config.in,v
retrieving revision 1.23
diff -u -r1.23 Config.in
--- a/coreutils/Config.in	5 Mar 2004 06:47:25 -0000	1.23
+++ b/coreutils/Config.in	5 Mar 2004 07:23:18 -0000
@@ -164,6 +164,13 @@
 	  a command; without options it displays the current
 	  environment.

+config CONFIG_EJECT
+	bool "eject"
+	default n
+	help
+	  ejects a cdrom drive.
+	  defaults to /dev/cdrom
+
 config CONFIG_EXPR
 	bool "expr"
 	default n
Index: coreutils/Makefile.in
===================================================================
RCS file: /var/cvs/busybox/coreutils/Makefile.in,v
retrieving revision 1.8
diff -u -r1.8 Makefile.in
--- a/coreutils/Makefile.in	27 Jan 2004 09:22:20 -0000	1.8
+++ b/coreutils/Makefile.in	5 Mar 2004 07:23:18 -0000
@@ -41,6 +41,7 @@
 COREUTILS-$(CONFIG_DU)      	+= du.o
 COREUTILS-$(CONFIG_ECHO)    	+= echo.o
 COREUTILS-$(CONFIG_ENV)     	+= env.o
+COREUTILS-$(CONFIG_EJECT)    	+= eject.o
 COREUTILS-$(CONFIG_EXPR)    	+= expr.o
 COREUTILS-$(CONFIG_FALSE)   	+= false.o
 COREUTILS-$(CONFIG_FOLD)    	+= fold.o
Index: coreutils/eject.c
===================================================================
RCS file: coreutils/eject.c
diff -N coreutils/eject.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ b/coreutils/eject.c	5 Mar 2004 07:23:21 -0000
@@ -0,0 +1,66 @@
+/*
+ * eject implementation for busybox
+ *
+ * Copyright (C) 2004  Peter Willis <psyphreak@phreaker.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/*
+ * This is a simple hack of eject based on something Erik posted in #uclibc.
+ * Most of the dirty work blatantly ripped off from cat.c =)
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include "busybox.h"
+#include <linux/cdrom.h> // needs to be after busybox.h or compile problems arise
+
+#define DEFAULT_CDROM "/dev/cdrom"
+
+extern int eject_main(int argc, char **argv)
+{
+	int fd;
+	int flag = CDROMEJECT;
+	int i = 1;
+	char *device = NULL;
+
+	/*
+	 * i'm too lazy to learn bb_getopt_ulflags and this is obscenely large
+	 * for just some argument parsing so mjn3 can clean it up later.
+	 * sorry, but PlumpOS 7.0-pre2 needs this asap :-/
+	 */
+	while (++i <= argc) {
+		if ( (! strncmp(argv[i-1],"-t",2)) || (! strncmp(argv[i-1],"--trayclose",11)) ) {
+			flag = CDROMCLOSETRAY;
+		} else {
+			device = argv[i-1];
+		}
+	}
+	if ( (fd = open(device == NULL ? DEFAULT_CDROM : device, O_RDONLY | O_NONBLOCK) ) < 0 ) {
+		perror("eject: Can't open device");
+		return(EXIT_FAILURE);
+	}
+	if (ioctl(fd, flag)) {
+		perror("eject: Can't eject cdrom");
+		return(EXIT_FAILURE);
+	}
+	return EXIT_SUCCESS;
+}
Index: include/applets.h
===================================================================
RCS file: /var/cvs/busybox/include/applets.h,v
retrieving revision 1.111
diff -u -r1.111 applets.h
--- a/include/applets.h	27 Jan 2004 09:22:20 -0000	1.111
+++ b/include/applets.h	5 Mar 2004 07:23:21 -0000
@@ -178,6 +178,9 @@
 #if defined(CONFIG_FEATURE_GREP_EGREP_ALIAS)
 	APPLET_NOUSAGE("egrep", grep_main, _BB_DIR_BIN, _BB_SUID_NEVER)
 #endif
+#ifdef CONFIG_EJECT
+	APPLET(eject, eject_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
+#endif
 #ifdef CONFIG_ENV
 	APPLET(env, env_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
 #endif
Index: include/usage.h
===================================================================
RCS file: /var/cvs/busybox/include/usage.h,v
retrieving revision 1.191
diff -u -r1.191 usage.h
--- a/include/usage.h	25 Feb 2004 10:35:55 -0000	1.191
+++ b/include/usage.h	5 Mar 2004 07:23:29 -0000
@@ -537,6 +537,13 @@
 	"\t-, -i\tstart with an empty environment\n" \
 	"\t-u\tremove variable from the environment\n"

+#define eject_trivial_usage \
+	"[-t] [FILE]"
+#define eject_full_usage \
+	"Ejects the specified FILE or /dev/cdrom if FILE is unspecified.\n\n" \
+	"Options:\n" \
+	"\t-t, --trayclose \tclose tray\n"
+
 #define expr_trivial_usage \
 	"EXPRESSION"
 #define expr_full_usage \
