diff options
Diffstat (limited to 'source/a/eject')
-rw-r--r-- | source/a/eject/eject.CDROM_DRIVE_STATUS.diff | 76 | ||||
-rwxr-xr-x | source/a/eject/eject.SlackBuild | 6 | ||||
-rw-r--r-- | source/a/eject/eject_for_mac.patch | 12 |
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); - } |