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 \