|
version 1.1.1.3, 2013/07/22 10:46:12
|
version 1.1.1.4, 2014/06/15 16:12:54
|
|
Line 28
|
Line 28
|
| # include <stdlib.h> |
# include <stdlib.h> |
| # endif |
# endif |
| #endif /* STDC_HEADERS */ |
#endif /* STDC_HEADERS */ |
| |
#ifdef HAVE_STDBOOL_H |
| |
# include <stdbool.h> |
| |
#else |
| |
# include "compat/stdbool.h" |
| |
#endif /* HAVE_STDBOOL_H */ |
| #ifdef HAVE_STRING_H |
#ifdef HAVE_STRING_H |
| # if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) |
# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) |
| # include <memory.h> |
# include <memory.h> |
|
Line 38
|
Line 43
|
| # include <strings.h> |
# include <strings.h> |
| #endif /* HAVE_STRINGS_H */ |
#endif /* HAVE_STRINGS_H */ |
| #include <limits.h> |
#include <limits.h> |
| #if TIME_WITH_SYS_TIME | #ifdef TIME_WITH_SYS_TIME |
| # include <time.h> |
# include <time.h> |
| #endif |
#endif |
| #ifndef __linux__ |
#ifndef __linux__ |
|
Line 60
|
Line 65
|
| */ |
*/ |
| |
|
| #if defined(__linux__) |
#if defined(__linux__) |
| int | bool |
| get_boottime(struct timeval *tv) |
get_boottime(struct timeval *tv) |
| { |
{ |
| char *ep, *line = NULL; |
char *ep, *line = NULL; |
| size_t linesize = 0; |
size_t linesize = 0; |
| |
bool found = false; |
| ssize_t len; |
ssize_t len; |
| FILE * fp; | FILE *fp; |
| debug_decl(get_boottime, SUDO_DEBUG_UTIL) |
debug_decl(get_boottime, SUDO_DEBUG_UTIL) |
| |
|
| /* read btime from /proc/stat */ |
/* read btime from /proc/stat */ |
|
Line 74 get_boottime(struct timeval *tv)
|
Line 80 get_boottime(struct timeval *tv)
|
| if (fp != NULL) { |
if (fp != NULL) { |
| while ((len = getline(&line, &linesize, fp)) != -1) { |
while ((len = getline(&line, &linesize, fp)) != -1) { |
| if (strncmp(line, "btime ", 6) == 0) { |
if (strncmp(line, "btime ", 6) == 0) { |
| #ifdef HAVE_STRTOLL | long long llval = strtonum(line + 6, 1, LLONG_MAX, NULL); |
| long long llval = strtoll(line + 6, &ep, 10); | if (llval > 0) { |
| if (line[6] != '\0' && *ep == '\0' && (time_t)llval == llval) { | |
| tv->tv_sec = (time_t)llval; |
tv->tv_sec = (time_t)llval; |
| tv->tv_usec = 0; |
tv->tv_usec = 0; |
| debug_return_bool(1); | found = true; |
| | break; |
| } |
} |
| #else |
|
| long lval = strtol(line + 6, &ep, 10); |
|
| if (line[6] != '\0' && *ep == '\0' && (time_t)lval == lval) { |
|
| tv->tv_sec = (time_t)llval; |
|
| tv->tv_usec = 0; |
|
| debug_return_bool(1); |
|
| } |
|
| #endif |
|
| } |
} |
| } |
} |
| fclose(fp); |
fclose(fp); |
| free(line); |
free(line); |
| } |
} |
| |
|
| debug_return_bool(0); | debug_return_bool(found); |
| } |
} |
| |
|
| #elif defined(HAVE_SYSCTL) && defined(KERN_BOOTTIME) |
#elif defined(HAVE_SYSCTL) && defined(KERN_BOOTTIME) |
| |
|
| int | bool |
| get_boottime(struct timeval *tv) |
get_boottime(struct timeval *tv) |
| { |
{ |
| size_t size; |
size_t size; |
|
Line 111 get_boottime(struct timeval *tv)
|
Line 109 get_boottime(struct timeval *tv)
|
| mib[1] = KERN_BOOTTIME; |
mib[1] = KERN_BOOTTIME; |
| size = sizeof(*tv); |
size = sizeof(*tv); |
| if (sysctl(mib, 2, tv, &size, NULL, 0) != -1) |
if (sysctl(mib, 2, tv, &size, NULL, 0) != -1) |
| debug_return_bool(1); | debug_return_bool(true); |
| |
|
| debug_return_bool(0); | debug_return_bool(false); |
| } |
} |
| |
|
| #elif defined(HAVE_GETUTXID) |
#elif defined(HAVE_GETUTXID) |
|
Line 160 int
|
Line 158 int
|
| get_boottime(struct timeval *tv) |
get_boottime(struct timeval *tv) |
| { |
{ |
| debug_decl(get_boottime, SUDO_DEBUG_UTIL) |
debug_decl(get_boottime, SUDO_DEBUG_UTIL) |
| debug_return_bool(0); | debug_return_bool(false); |
| } |
} |
| #endif |
#endif |