hwclock: support /dev/rtc0 etc
authorDenis Vlasenko <vda.linux@googlemail.com>
Wed, 7 Mar 2007 23:02:50 +0000 (23:02 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Wed, 7 Mar 2007 23:02:50 +0000 (23:02 -0000)
include/usage.h
util-linux/hwclock.c

index a98d52e..d8faa4f 100644 (file)
        "       -d STRING       URL decode STRING"
 
 #define hwclock_trivial_usage \
-       "[-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc]"
+       "[-r|--show] [-s|--hctosys] [-w|--systohc]" \
+       " [-l|--localtime] [-u|--utc]" \
+       " [-f FILE]"
 #define hwclock_full_usage \
-       "Query and set the hardware clock (RTC)" \
+       "Query and set a hardware clock (RTC)" \
        "\n\nOptions:\n" \
        "       -r      Read hardware clock and print result\n" \
        "       -s      Set the system time from the hardware clock\n" \
        "       -w      Set the hardware clock to the current system time\n" \
        "       -u      The hardware clock is kept in coordinated universal time\n" \
-       "       -l      The hardware clock is kept in local time"
+       "       -l      The hardware clock is kept in local time\n" \
+       "       -f FILE Use the specified clock (e.g. /dev/rtc2)"
 
 #define id_trivial_usage \
        "[OPTIONS]... [USERNAME]"
index ca4238f..86235e9 100644 (file)
@@ -35,16 +35,22 @@ struct linux_rtc_time {
 # endif
 #endif
 
+static const char *rtcname;
+
 static int xopen_rtc(int flags)
 {
        int rtc;
-       rtc = open("/dev/rtc", flags);
-       if (rtc < 0) {
-               rtc = open("/dev/misc/rtc", flags);
-               if (rtc < 0)
-                       bb_perror_msg_and_die("cannot access RTC");
+
+       if (!rtcname) {
+               rtc = open("/dev/rtc", flags);
+               if (rtc >= 0)
+                       return rtc;
+               rtc = open("/dev/rtc0", flags);
+               if (rtc >= 0)
+                       return rtc;
+               rtcname = "/dev/misc/rtc";
        }
-       return rtc;
+       return xopen(rtcname, flags);
 }
 
 static time_t read_rtc(int utc)
@@ -175,6 +181,7 @@ static int check_utc(void)
 #define HWCLOCK_OPT_SHOW        0x04
 #define HWCLOCK_OPT_HCTOSYS     0x08
 #define HWCLOCK_OPT_SYSTOHC     0x10
+#define HWCLOCK_OPT_RTCFILE     0x20
 
 int hwclock_main(int argc, char **argv );
 int hwclock_main(int argc, char **argv )
@@ -189,12 +196,13 @@ int hwclock_main(int argc, char **argv )
                { "show",      0, 0, 'r' },
                { "hctosys",   0, 0, 's' },
                { "systohc",   0, 0, 'w' },
+               { "file",      1, 0, 'f' },
                { 0,           0, 0, 0 }
        };
        applet_long_options = hwclock_long_options;
 #endif
        opt_complementary = "?:r--ws:w--rs:s--wr:l--u:u--l";
-       opt = getopt32(argc, argv, "lursw");
+       opt = getopt32(argc, argv, "lurswf:", &rtcname);
 
        /* If -u or -l wasn't given check if we are using utc */
        if (opt & (HWCLOCK_OPT_UTC | HWCLOCK_OPT_LOCALTIME))