ubase

suckless linux base utils
git clone git://git.2f30.org/ubase
Log | Files | Refs | README | LICENSE

commit 2b767016b3be028083f1a642ccf4651aea52dc53
parent ff85b159391514e72463ef062a5e4510d12b817b
Author: sin <sin@2f30.org>
Date:   Wed,  4 Sep 2013 13:31:06 +0100

Add barebones eject(1)

Diffstat:
MMakefile | 1+
Aeject.c | 48++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile @@ -22,6 +22,7 @@ SRC = \ clear.c \ df.c \ dmesg.c \ + eject.c \ fallocate.c \ free.c \ halt.c \ diff --git a/eject.c b/eject.c @@ -0,0 +1,48 @@ +/* See LICENSE file for copyright and license details. */ +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <fcntl.h> +#include <unistd.h> +#include <stdio.h> +#include "util.h" + +enum { + CDROM_EJECT = 0x5309, + CDROM_CLOSE_TRAY = 0x5319, +}; + +static void +usage(void) +{ + eprintf("usage: %s [-t]\n", argv0); +} + +int +main(int argc, char *argv[]) +{ + int fd, out; + const char *cdrom = "/dev/sr0"; + int tflag = 0; + + ARGBEGIN { + case 't': + tflag = 1; + break; + default: + usage(); + } ARGEND; + + fd = open(cdrom, O_RDONLY | O_NONBLOCK); + if (fd < 0) + eprintf("open %s:", cdrom); + if (tflag) { + if (ioctl(fd, CDROM_CLOSE_TRAY, &out) < 0) + eprintf("ioctl:"); + } else { + if (ioctl(fd, CDROM_EJECT, &out) < 0) + eprintf("ioctl:"); + } + close(fd); + return 0; +}