]> err.no Git - util-linux/commitdiff
hwclock: fix --rtc option
authorMatthias Koenig <mkoenig@suse.de>
Thu, 20 Sep 2007 09:11:18 +0000 (11:11 +0200)
committerKarel Zak <kzak@redhat.com>
Sun, 23 Sep 2007 19:38:53 +0000 (21:38 +0200)
The --rtc option does not set the name of the device correctly.
It still uses /dev/rtc even if the --rtc option is given.

Testcase:
$ mv /dev/rtc /dev/foo
$ hwclock --show --debug --rtc=/dev/foo
hwclock from util-linux-2.13-rc2
Using /dev interface to clock.
Last drift adjustment done at 1190198135 seconds after 1969
Last calibration done at 1190198135 seconds after 1969
Hardware clock is on local time
Assuming hardware clock is kept in local time.
Waiting for clock tick...
hwclock: open() of /dev/rtc failed, errno=2: No such file or directory.
...got clock tick

Co-Author: Karel Zak <kzak@redhat.com>
Signed-off-by: Matthias Koenig <mkoenig@suse.de>
Signed-off-by: Karel Zak <kzak@redhat.com>
hwclock/rtc.c

index f8e626eb89e90ffb009fdeee89df385420af9d5d..724daf99e3fa79b60a0d04c08ab2110bdd4043ba 100644 (file)
@@ -104,24 +104,21 @@ open_rtc(void) {
                "/dev/misc/rtc",
                NULL
        };
-       char **p = fls;
-       char *fname = rtc_dev_name ? : *p;
-
-       do {
-               int fd = open(fname, O_RDONLY);
-
-               if (fd < 0 && errno == ENOENT) {
-                       if (fname == rtc_dev_name)
-                               break;
-                       fname = *++p;
-               } else {
-                       rtc_dev_name = *p;
-                       return fd;
-               }
-       } while(fname);
-
-       if (!rtc_dev_name)
-               rtc_dev_name = *fls;
+       char **p;
+
+       /* --rtc option has been given */
+       if (rtc_dev_name)
+               return open(rtc_dev_name, O_RDONLY);
+
+       for (p=fls; *p; ++p) {
+               int fd = open(*p, O_RDONLY);
+
+               if (fd < 0 && errno == ENOENT)
+                       continue;
+               rtc_dev_name = *p;
+               return fd;
+       }
+       rtc_dev_name = *fls;    /* default */
        return -1;
 }