On Thu, Sep 20, 2007 at 11:11:18AM +0200, Matthias Koenig wrote:
> The --rtc option does not set the name of the device correctly.
> It still uses /dev/rtc even if the --rtc option is given.
....
> --- a/hwclock/rtc.c
> +++ b/hwclock/rtc.c
> @@ -105,14 +105,17 @@ open_rtc(void) {
> NULL
> };
> char **p = fls;
> - char *fname = rtc_dev_name ? : *p;
> + char *fname = *p;
>
> + /* --rtc option has been given */
> + if (rtc_dev_name)
> + return open(rtc_dev_name, O_RDONLY);
> +
> + /* try default devices */
> 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;
OK. Now we can simplify the function at all :-) Please, review the
patch below. Thanks Matthias, good catch.
Karel
>From 5d1f6bae3b298809ecd63b3e55f6ab30caaa4dbf Mon Sep 17 00:00:00 2001
From: Matthias Koenig <[EMAIL PROTECTED]>
Date: Thu, 20 Sep 2007 11:11:18 +0200
Subject: [PATCH] hwclock: fix --rtc option
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 <[EMAIL PROTECTED]>
Signed-off-by: Matthias Koenig <[EMAIL PROTECTED]>
Signed-off-by: Karel Zak <[EMAIL PROTECTED]>
---
hwclock/rtc.c | 33 +++++++++++++++------------------
1 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/hwclock/rtc.c b/hwclock/rtc.c
index f8e626e..724daf9 100644
--- a/hwclock/rtc.c
+++ b/hwclock/rtc.c
@@ -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;
}
--
1.5.3.1
--
Karel Zak <[EMAIL PROTECTED]>
-
To unsubscribe from this list: send the line "unsubscribe util-linux-ng" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html