- static ino_t vmunixino;
- static time_t vmunixctime;
- struct stat sb;
-
- if (stat(_PATH_UNIX, &sb) < 0) {
- if (vmunixctime)
- return;
- } else {
- if (sb.st_ctime == vmunixctime && sb.st_ino == vmunixino)
- return;
- vmunixctime = sb.st_ctime;
- vmunixino= sb.st_ino;
- }
- if (kmemf >= 0)
- (void) close(kmemf);
-loop:
- if (nlist(_PATH_UNIX, nl)) {
- syslog(LOG_WARNING, "%s: namelist botch", _PATH_UNIX);
- sleep(300);
- goto loop;
- }
- kmemf = open(_PATH_KMEM, O_RDONLY, 0);
- if (kmemf < 0) {
- syslog(LOG_ERR, "%s: %m", _PATH_KMEM);
+ int mib[2];
+ size_t size;
+ struct timeval tm;
+
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_BOOTTIME;
+ size = sizeof(tm);
+ if (sysctl(mib, 2, &tm, &size, NULL, 0) == -1) {
+ syslog(LOG_ERR, "cannot get boottime: %m");