Karel Zak <[EMAIL PROTECTED]> writes:

>  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;
>  }

Yes, even better.

Thanks,
Matthias
-
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

Reply via email to