summaryrefslogtreecommitdiffstats
path: root/sys-utils/hwclock.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys-utils/hwclock.c')
-rw-r--r--sys-utils/hwclock.c61
1 files changed, 23 insertions, 38 deletions
diff --git a/sys-utils/hwclock.c b/sys-utils/hwclock.c
index 10436f287..0c587957d 100644
--- a/sys-utils/hwclock.c
+++ b/sys-utils/hwclock.c
@@ -1162,28 +1162,11 @@ manipulate_clock(const struct hwclock_control *ctl, const time_t set_time,
return 0;
}
-/*
- * Get or set the Hardware Clock epoch value in the kernel, as appropriate.
- * <getepoch>, <setepoch>, and <epoch> are hwclock invocation options.
- *
- * <epoch> == -1 if the user did not specify an "epoch" option.
- */
-#ifdef __linux__
-/*
- * Maintenance note: This should work on non-Alpha machines, but the
- * evidence today (98.03.04) indicates that the kernel only keeps the epoch
- * value on Alphas. If that is ever fixed, this function should be changed.
+/**
+ * Get or set the kernel RTC driver's epoch on Alpha machines.
+ * ISA machines are hard coded for 1900.
*/
-# ifndef __alpha__
-static void
-manipulate_epoch(const struct hwclock_control *ctl __attribute__((__unused__)))
-{
- warnx(_("The kernel keeps an epoch value for the Hardware Clock "
- "only on an Alpha machine.\nThis copy of hwclock was built for "
- "a machine other than Alpha\n(and thus is presumably not running "
- "on an Alpha now). No action taken."));
-}
-# else
+#if defined(__linux__) && defined(__alpha__)
static void
manipulate_epoch(const struct hwclock_control *ctl)
{
@@ -1210,8 +1193,7 @@ manipulate_epoch(const struct hwclock_control *ctl)
("Unable to set the epoch value in the kernel.\n"));
}
}
-# endif /* __alpha__ */
-#endif /* __linux__ */
+#endif /* __linux__ __alpha__ */
static void out_version(void)
{
@@ -1251,7 +1233,7 @@ static void usage(const struct hwclock_control *ctl, const char *fmt, ...)
" --systz set the system time based on the current timezone\n"
" --adjust adjust the RTC to account for systematic drift since\n"
" the clock was last set or adjusted\n"), usageto);
-#ifdef __linux__
+#if defined(__linux__) && defined(__alpha__)
fputs(_(" --getepoch print out the kernel's hardware clock epoch value\n"
" --setepoch set the kernel's hardware clock epoch value to the \n"
" value given with --epoch\n"), usageto);
@@ -1267,9 +1249,10 @@ static void usage(const struct hwclock_control *ctl, const char *fmt, ...)
#endif
fprintf(usageto, _(
" --directisa access the ISA bus directly instead of %s\n"
- " --date <time> specifies the time to which to set the hardware clock\n"
- " --epoch <year> specifies the year which is the beginning of the\n"
- " hardware clock's epoch value\n"), _PATH_RTC_DEV);
+ " --date <time> specifies the time to which to set the hardware clock\n"), _PATH_RTC_DEV);
+#if defined(__linux__) && defined(__alpha__)
+ fputs(_(" --epoch <year> specifies the hardware clock's epoch value\n"), usageto);
+#endif
fprintf(usageto, _(
" --update-drift update drift factor in %1$s (requires\n"
" --set or --systohc)\n"
@@ -1340,16 +1323,16 @@ int main(int argc, char **argv)
{ "systohc", no_argument, NULL, 'w' },
{ "debug", no_argument, NULL, 'D' },
{ "set", no_argument, NULL, OPT_SET },
-#ifdef __linux__
+#if defined(__linux__) && defined(__alpha__)
{ "getepoch", no_argument, NULL, OPT_GETEPOCH },
{ "setepoch", no_argument, NULL, OPT_SETEPOCH },
+ { "epoch", required_argument, NULL, OPT_EPOCH },
#endif
{ "noadjfile", no_argument, NULL, OPT_NOADJFILE },
{ "localtime", no_argument, NULL, OPT_LOCALTIME },
{ "directisa", no_argument, NULL, OPT_DIRECTISA },
{ "test", no_argument, NULL, OPT_TEST },
{ "date", required_argument, NULL, OPT_DATE },
- { "epoch", required_argument, NULL, OPT_EPOCH },
#ifdef __linux__
{ "rtc", required_argument, NULL, 'f' },
#endif
@@ -1431,7 +1414,7 @@ int main(int argc, char **argv)
ctl.set = 1;
ctl.show = 0;
break;
-#ifdef __linux__
+#if defined(__linux__) && defined(__alpha__)
case OPT_GETEPOCH:
ctl.getepoch = 1;
ctl.show = 0;
@@ -1440,6 +1423,10 @@ int main(int argc, char **argv)
ctl.setepoch = 1;
ctl.show = 0;
break;
+ case OPT_EPOCH:
+ ctl.epoch_option = /* --epoch */
+ strtoul_or_err(optarg, _("invalid epoch argument"));
+ break;
#endif
case OPT_NOADJFILE:
ctl.noadjfile = 1;
@@ -1456,10 +1443,6 @@ int main(int argc, char **argv)
case OPT_DATE:
ctl.date_opt = optarg; /* --date */
break;
- case OPT_EPOCH:
- ctl.epoch_option = /* --epoch */
- strtoul_or_err(optarg, _("invalid epoch argument"));
- break;
case OPT_ADJFILE:
ctl.adj_file_name = optarg; /* --adjfile */
break;
@@ -1499,10 +1482,12 @@ int main(int argc, char **argv)
#ifdef HAVE_LIBAUDIT
if (!ctl.testing) {
- if (ctl.adjust || ctl.hctosys || ctl.systohc ||
- ctl.set || ctl.setepoch) {
+ if (ctl.adjust || ctl.hctosys || ctl.systohc || ctl.set
+# if defined(__linux__) && defined(__alpha__)
+ || ctl.setepoch
+# endif
+ )
ctl.hwaudit_on = 1;
- }
}
#endif
if (argc > 0) {
@@ -1528,7 +1513,7 @@ int main(int argc, char **argv)
}
}
-#ifdef __linux__
+#if defined(__linux__) && defined(__alpha__)
if (ctl.getepoch || ctl.setepoch) {
manipulate_epoch(&ctl);
hwclock_exit(&ctl, EX_OK);