summaryrefslogtreecommitdiff
path: root/source/a/eject
diff options
context:
space:
mode:
Diffstat (limited to 'source/a/eject')
-rw-r--r--source/a/eject/eject.CDROM_DRIVE_STATUS.diff76
-rwxr-xr-xsource/a/eject/eject.SlackBuild6
-rw-r--r--source/a/eject/eject_for_mac.patch12
3 files changed, 79 insertions, 15 deletions
diff --git a/source/a/eject/eject.CDROM_DRIVE_STATUS.diff b/source/a/eject/eject.CDROM_DRIVE_STATUS.diff
new file mode 100644
index 00000000..0a80739f
--- /dev/null
+++ b/source/a/eject/eject.CDROM_DRIVE_STATUS.diff
@@ -0,0 +1,76 @@
+# Make CDROM tray toggle more robust by using CDS_TRAY_OPEN
+# when avaiable.
+# Also includes Slackware's eject_for_mac.patch
+#
+diff -Nurp eject.old/eject.c eject.new/eject.c
+--- eject.old/eject.c 2013-02-19 10:18:36.041669514 +0000
++++ eject.new/eject.c 2013-02-19 10:33:04.289392780 +0000
+@@ -564,34 +564,45 @@ static void ToggleTray(int fd)
+ {
+ struct timeval time_start, time_stop;
+ int time_elapsed;
++ int status;
+
+ #ifdef CDROMCLOSETRAY
++
++ status = ioctl(fd, CDROM_DRIVE_STATUS, 0);
++ if (status == CDS_TRAY_OPEN) {
++ CloseTray(fd);
++ } else {
+
+- /* Try to open the CDROM tray and measure the time therefor
+- * needed. In my experience the function needs less than 0.05
+- * seconds if the tray was already open, and at least 1.5 seconds
+- * if it was closed. */
+- gettimeofday(&time_start, NULL);
++ /* Try to open the CDROM tray and measure the time therefor
++ * needed. In my experience the function needs less than 0.05
++ * seconds if the tray was already open, and at least 1.5 seconds
++ * if it was closed. */
++ gettimeofday(&time_start, NULL);
+
+- /* Send the CDROMEJECT command to the device. */
+- if (ioctl(fd, CDROMEJECT, 0) < 0) {
+- perror("ioctl");
+- exit(1);
++ /* Send the CDROMEJECT command to the device. */
++ if (ioctl(fd, CDROMEJECT, 0) < 0 && errno != EIO) {
++ perror("ioctl CDROMEJECT");
++ exit(1);
++ }
++
++ /* Get the second timestamp, to measure the time needed to open
++ * the tray. */
++ gettimeofday(&time_stop, NULL);
++
++ /* If the ioctl returns CDS_TRAY_OPEN now then we can ignore
++ * the guess based on elapsed-time */
++ status = ioctl(fd, CDROM_DRIVE_STATUS, 0);
++ if (status != CDS_TRAY_OPEN) {
++ time_elapsed = (time_stop.tv_sec * 1000000 + time_stop.tv_usec) -
++ (time_start.tv_sec * 1000000 + time_start.tv_usec);
++
++ /* If the tray "opened" too fast, we can be nearly sure, that it
++ * was already open. In this case, close it now. Else the tray was
++ * closed before. This would mean that we are done. */
++ if (time_elapsed < TRAY_WAS_ALREADY_OPEN_USECS)
++ CloseTray(fd);
++ }
+ }
+-
+- /* Get the second timestamp, to measure the time needed to open
+- * the tray. */
+- gettimeofday(&time_stop, NULL);
+-
+- time_elapsed = (time_stop.tv_sec * 1000000 + time_stop.tv_usec) -
+- (time_start.tv_sec * 1000000 + time_start.tv_usec);
+-
+- /* If the tray "opened" too fast, we can be nearly sure, that it
+- * was already open. In this case, close it now. Else the tray was
+- * closed before. This would mean that we are done. */
+- if (time_elapsed < TRAY_WAS_ALREADY_OPEN_USECS)
+- CloseTray(fd);
+-
+ #else
+ fprintf(stderr, _("%s: CD-ROM tray toggle command not supported by this kernel\n"), programName);
+ #endif
diff --git a/source/a/eject/eject.SlackBuild b/source/a/eject/eject.SlackBuild
index 94b0ccf7..7d2c0982 100755
--- a/source/a/eject/eject.SlackBuild
+++ b/source/a/eject/eject.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2006, 2008, 2009, 2010, 2012 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2006, 2008, 2009, 2010, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -23,7 +23,7 @@
PKGNAM=eject
VERSION=${VERSION:-2.1.5}
-BUILD=${BUILD:-3}
+BUILD=${BUILD:-4}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -60,7 +60,7 @@ cd ${PKGNAM}
zcat $CWD/eject.spaces.diff.gz | patch -p0 --verbose || exit 1
# Fix "eject -T":
-zcat $CWD/eject_for_mac.patch.gz | patch -p4 --verbose || exit 1
+zcat $CWD/eject.CDROM_DRIVE_STATUS.diff.gz | patch -p1 --verbose || exit 1
# Make sure ownerships and permissions are sane:
chown -R root:root .
diff --git a/source/a/eject/eject_for_mac.patch b/source/a/eject/eject_for_mac.patch
deleted file mode 100644
index c86e3c17..00000000
--- a/source/a/eject/eject_for_mac.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Nru /tmp/6rrvEn4EMT/eject-2.1.4/eject.c /tmp/Jon9ZzjSLN/eject-2.1.4/eject.c
---- /tmp/6rrvEn4EMT/eject-2.1.4/eject.c 2007-03-12 14:15:26.000000000 +0100
-+++ /tmp/Jon9ZzjSLN/eject-2.1.4/eject.c 2007-03-12 14:15:28.000000000 +0100
-@@ -552,7 +552,7 @@
- gettimeofday(&time_start, NULL);
-
- /* Send the CDROMEJECT command to the device. */
-- if (ioctl(fd, CDROMEJECT, 0) < 0) {
-+ if (ioctl(fd, CDROMEJECT, 0) < 0 && errno != EIO) {
- perror("ioctl");
- exit(1);
- }