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 |