]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
eject: make open_device() and select_speed() to use struct eject_control
authorSami Kerola <kerolasa@iki.fi>
Sat, 6 Sep 2014 17:39:24 +0000 (18:39 +0100)
committerSami Kerola <kerolasa@iki.fi>
Fri, 19 Sep 2014 18:31:02 +0000 (19:31 +0100)
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
sys-utils/eject.c

index 5ca1e7538a46a05cd1a8b3ffed09c4c0ae746fd6..91f1102abbc9aeef4048ba998b09bdbd242968c7 100644 (file)
@@ -488,10 +488,10 @@ static void toggle_tray(int fd)
  * Thanks to Roland Krivanek (krivanek@fmph.uniba.sk)
  * http://dmpc.dbp.fmph.uniba.sk/~krivanek/cdrom_speed/
  */
-static void select_speed(int fd, int speed)
+static void select_speed(const struct eject_control *ctl)
 {
 #ifdef CDROM_SELECT_SPEED
-       if (ioctl(fd, CDROM_SELECT_SPEED, speed) != 0)
+       if (ioctl(ctl->fd, CDROM_SELECT_SPEED, ctl->x_arg) != 0)
                err(EXIT_FAILURE, _("CD-ROM select speed command failed"));
 #else
        warnx(_("CD-ROM select speed command not supported by this kernel"));
@@ -560,22 +560,22 @@ static int read_speed(const char *devname)
 /*
  * List Speed of CD-ROM drive.
  */
-static void list_speeds(const struct eject_control *ctl)
+static void list_speeds(struct eject_control *ctl)
 {
 #ifdef CDROM_SELECT_SPEED
-       int max_speed, curr_speed = 0, prev_speed;
+       int max_speed, curr_speed = 0;
 
-       select_speed(ctl->fd, 0);
+       select_speed(ctl);
        max_speed = read_speed(ctl->device);
 
        while (curr_speed < max_speed) {
-               prev_speed = curr_speed;
-               select_speed(ctl->fd, prev_speed + 1);
+               ctl->x_arg = curr_speed + 1;
+               select_speed(ctl);
                curr_speed = read_speed(ctl->device);
-               if (curr_speed > prev_speed)
+               if (ctl->x_arg < curr_speed)
                        printf("%d ", curr_speed);
                else
-                       curr_speed = prev_speed + 1;
+                       curr_speed = ctl->x_arg + 1;
        }
 
        printf("\n");
@@ -704,15 +704,13 @@ static void umount_one(const struct eject_control *ctl, const char *name)
 }
 
 /* Open a device file. */
-static int open_device(const char *name)
+static void open_device(struct eject_control *ctl)
 {
-       int fd = open(name, O_RDWR|O_NONBLOCK);
-
-       if (fd < 0)
-               fd = open(name, O_RDONLY|O_NONBLOCK);
-       if (fd == -1)
-               err(EXIT_FAILURE, _("cannot open %s"), name);
-       return fd;
+       ctl->fd = open(ctl->device, O_RDWR | O_NONBLOCK);
+       if (ctl->fd < 0)
+               ctl->fd = open(ctl->device, O_RDONLY | O_NONBLOCK);
+       if (ctl->fd == -1)
+               err(EXIT_FAILURE, _("cannot open %s"), ctl->device);
 }
 
 /*
@@ -932,10 +930,8 @@ done:
 
 
 /* handle -x option */
-static void set_device_speed(const struct eject_control *ctl)
+static void set_device_speed(struct eject_control *ctl)
 {
-       int fd;
-
        if (!ctl->x_option)
                return;
 
@@ -944,8 +940,8 @@ static void set_device_speed(const struct eject_control *ctl)
        else
                verbose(ctl, _("setting CD-ROM speed to %ldX"), ctl->x_arg);
 
-       fd = open_device(ctl->device);
-       select_speed(fd, ctl->x_arg);
+       open_device(ctl);
+       select_speed(ctl);
        exit(EXIT_SUCCESS);
 }
 
@@ -1031,7 +1027,7 @@ int main(int argc, char **argv)
 
        /* handle -i option */
        if (ctl.i_option) {
-               ctl.fd = open_device(ctl.device);
+               open_device(&ctl);
                manual_eject(&ctl);
                return EXIT_SUCCESS;
        }
@@ -1042,7 +1038,7 @@ int main(int argc, char **argv)
                        verbose(&ctl, _("%s: enabling auto-eject mode"), ctl.device);
                else
                        verbose(&ctl, _("%s: disabling auto-eject mode"), ctl.device);
-               ctl.fd = open_device(ctl.device);
+               open_device(&ctl);
                auto_eject(&ctl);
                return EXIT_SUCCESS;
        }
@@ -1050,7 +1046,7 @@ int main(int argc, char **argv)
        /* handle -t option */
        if (ctl.t_option) {
                verbose(&ctl, _("%s: closing tray"), ctl.device);
-               ctl.fd = open_device(ctl.device);
+               open_device(&ctl);
                close_tray(ctl.fd);
                set_device_speed(&ctl);
                return EXIT_SUCCESS;
@@ -1059,7 +1055,7 @@ int main(int argc, char **argv)
        /* handle -T option */
        if (ctl.T_option) {
                verbose(&ctl, _("%s: toggling tray"), ctl.device);
-               ctl.fd = open_device(ctl.device);
+               open_device(&ctl);
                toggle_tray(ctl.fd);
                set_device_speed(&ctl);
                return EXIT_SUCCESS;
@@ -1068,7 +1064,7 @@ int main(int argc, char **argv)
        /* handle -X option */
        if (ctl.X_option) {
                verbose(&ctl, _("%s: listing CD-ROM speed"), ctl.device);
-               ctl.fd = open_device(ctl.device);
+               open_device(&ctl);
                list_speeds(&ctl);
                return EXIT_SUCCESS;
        }
@@ -1100,7 +1096,7 @@ int main(int argc, char **argv)
        /* handle -c option */
        if (ctl.c_option) {
                verbose(&ctl, _("%s: selecting CD-ROM disc #%ld"), ctl.device, ctl.c_arg);
-               ctl.fd = open_device(ctl.device);
+               open_device(&ctl);
                changer_select(&ctl);
                set_device_speed(&ctl);
                return EXIT_SUCCESS;
@@ -1111,7 +1107,7 @@ int main(int argc, char **argv)
                ctl.r_option = ctl.s_option = ctl.f_option = ctl.q_option = 1;
 
        /* open device */
-       ctl.fd = open_device(ctl.device);
+       open_device(&ctl);
 
        /* try various methods of ejecting until it works */
        if (ctl.r_option) {