Use sysctlbyname

This commit is contained in:
Poul-Henning Kamp 2006-05-11 17:25:36 +00:00
parent 31048bda0e
commit bec1fa8607
2 changed files with 15 additions and 31 deletions

View File

@ -82,7 +82,6 @@ main(int argc, char *argv[])
struct timezone tz, *stz; struct timezone tz, *stz;
int kern_offset, wall_clock, disrtcset; int kern_offset, wall_clock, disrtcset;
size_t len; size_t len;
int mib[2];
/* Avoid time_t here, can be unsigned long or worse */ /* Avoid time_t here, can be unsigned long or worse */
long offset, localsec, diff; long offset, localsec, diff;
time_t initial_sec, final_sec; time_t initial_sec, final_sec;
@ -150,11 +149,9 @@ again:
tzset(); tzset();
mib[0] = CTL_MACHDEP;
mib[1] = CPU_ADJKERNTZ;
len = sizeof(kern_offset); len = sizeof(kern_offset);
if (sysctl(mib, 2, &kern_offset, &len, NULL, 0) == -1) { if (sysctlbyname("machdep.adjkerntz", &kern_offset, &len, NULL, 0) == -1) {
syslog(LOG_ERR, "sysctl(get_offset): %m"); syslog(LOG_ERR, "sysctl(\"machdep.adjkerntz\"): %m");
return 1; return 1;
} }
@ -286,18 +283,16 @@ recalculate:
if ( (init && stv != NULL) if ( (init && stv != NULL)
|| ((init || !wall_clock) && kern_offset != offset) || ((init || !wall_clock) && kern_offset != offset)
) { ) {
mib[0] = CTL_MACHDEP;
mib[1] = CPU_DISRTCSET;
len = sizeof(disrtcset); len = sizeof(disrtcset);
if (sysctl(mib, 2, &disrtcset, &len, NULL, 0) == -1) { if (sysctlbyname("machdep.disable_rtc_set", &disrtcset, &len, NULL, 0) == -1) {
syslog(LOG_ERR, "sysctl(get_disrtcset): %m"); syslog(LOG_ERR, "sysctl(get: \"disable_rtc_set\"): %m");
return 1; return 1;
} }
if (disrtcset == 0) { if (disrtcset == 0) {
disrtcset = 1; disrtcset = 1;
need_restore = True; need_restore = True;
if (sysctl(mib, 2, NULL, NULL, &disrtcset, len) == -1) { if (sysctlbyname("disable_rtc_set", NULL, NULL, &disrtcset, len) == -1) {
syslog(LOG_ERR, "sysctl(set_disrtcset): %m"); syslog(LOG_ERR, "sysctl(set: \"disable_rtc_set\"): %m");
return 1; return 1;
} }
} }
@ -327,37 +322,31 @@ recalculate:
} }
} }
/* setting CPU_ADJKERNTZ have a side effect: resettodr(), which */ /* setting machdep.adjkerntz have a side effect: resettodr(), which */
/* can be disabled by CPU_DISRTCSET, so if init or UTC clock */ /* can be disabled by machdep.disable_rtc_set, so if init or UTC clock */
/* -- don't write RTC, else write RTC. */ /* -- don't write RTC, else write RTC. */
if (kern_offset != offset) { if (kern_offset != offset) {
kern_offset = offset; kern_offset = offset;
mib[0] = CTL_MACHDEP;
mib[1] = CPU_ADJKERNTZ;
len = sizeof(kern_offset); len = sizeof(kern_offset);
if (sysctl(mib, 2, NULL, NULL, &kern_offset, len) == -1) { if (sysctlbyname("machdep.adjkerntz", NULL, NULL, &kern_offset, len) == -1) {
syslog(LOG_ERR, "sysctl(update_offset): %m"); syslog(LOG_ERR, "sysctl(set: \"disable_rtc_set\"): %m");
return 1; return 1;
} }
} }
mib[0] = CTL_MACHDEP;
mib[1] = CPU_WALLCLOCK;
len = sizeof(wall_clock); len = sizeof(wall_clock);
if (sysctl(mib, 2, NULL, NULL, &wall_clock, len) == -1) { if (sysctlbyname("machdep.wall_cmos_clock", NULL, NULL, &wall_clock, len) == -1) {
syslog(LOG_ERR, "sysctl(put_wallclock): %m"); syslog(LOG_ERR, "sysctl(set: \"machdep.wall_cmos_clock\"): %m");
return 1; return 1;
} }
if (need_restore) { if (need_restore) {
need_restore = False; need_restore = False;
mib[0] = CTL_MACHDEP;
mib[1] = CPU_DISRTCSET;
disrtcset = 0; disrtcset = 0;
len = sizeof(disrtcset); len = sizeof(disrtcset);
if (sysctl(mib, 2, NULL, NULL, &disrtcset, len) == -1) { if (sysctlbyname("machdep.disable_rtc_set", NULL, NULL, &disrtcset, len) == -1) {
syslog(LOG_ERR, "sysctl(restore_disrtcset): %m"); syslog(LOG_ERR, "sysctl(set: \"machdep.disable_rtc_set\"): %m");
return 1; return 1;
} }
} }

View File

@ -239,21 +239,16 @@ main(int argc, char *argv[])
nextp = &ep->next; nextp = &ep->next;
memmove(&ep->utmp, &utmp, sizeof(struct utmp)); memmove(&ep->utmp, &utmp, sizeof(struct utmp));
ep->tdev = stp->st_rdev; ep->tdev = stp->st_rdev;
#ifdef CPU_CONSDEV
/* /*
* If this is the console device, attempt to ascertain * If this is the console device, attempt to ascertain
* the true console device dev_t. * the true console device dev_t.
*/ */
if (ep->tdev == 0) { if (ep->tdev == 0) {
int mib[2];
size_t size; size_t size;
mib[0] = CTL_MACHDEP;
mib[1] = CPU_CONSDEV;
size = sizeof(dev_t); size = sizeof(dev_t);
(void)sysctl(mib, 2, &ep->tdev, &size, NULL, 0); (void)sysctlbyname("machdep.consdev", &ep->tdev, &size, NULL, 0);
} }
#endif
touched = stp->st_atime; touched = stp->st_atime;
if (touched < ep->utmp.ut_time) { if (touched < ep->utmp.ut_time) {
/* tty untouched since before login */ /* tty untouched since before login */