dmesg: move get_boot_time() to lib/timeutils
In future the last(1) will use get_boot_time() as well. Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
parent
edd2af005c
commit
929f939e6a
3 changed files with 30 additions and 27 deletions
|
@ -51,5 +51,6 @@ typedef uint64_t nsec_t;
|
|||
#define FORMAT_TIMESPAN_MAX 64
|
||||
|
||||
int parse_timestamp(const char *t, usec_t *usec);
|
||||
int get_boot_time(struct timeval *boot_time);
|
||||
|
||||
#endif /* UTIL_LINUX_TIME_UTIL_H */
|
||||
|
|
|
@ -21,9 +21,12 @@
|
|||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <sys/sysinfo.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "c.h"
|
||||
#include "nls.h"
|
||||
#include "strutils.h"
|
||||
#include "timeutils.h"
|
||||
|
||||
|
@ -336,3 +339,29 @@ int parse_timestamp(const char *t, usec_t *usec)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_boot_time(struct timeval *boot_time)
|
||||
{
|
||||
struct timespec hires_uptime;
|
||||
struct timeval lores_uptime, now;
|
||||
struct sysinfo info;
|
||||
|
||||
if (gettimeofday(&now, NULL) != 0) {
|
||||
warn(_("gettimeofday failed"));
|
||||
return -errno;
|
||||
}
|
||||
#ifdef CLOCK_BOOTTIME
|
||||
if (clock_gettime(CLOCK_BOOTTIME, &hires_uptime) == 0) {
|
||||
TIMESPEC_TO_TIMEVAL(&lores_uptime, &hires_uptime);
|
||||
timersub(&now, &lores_uptime, boot_time);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
/* fallback */
|
||||
if (sysinfo(&info) != 0)
|
||||
warn(_("sysinfo failed"));
|
||||
|
||||
boot_time->tv_sec = now.tv_sec - info.uptime;
|
||||
boot_time->tv_usec = 0;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -472,33 +472,6 @@ static int get_syslog_buffer_size(void)
|
|||
return n > 0 ? n : 0;
|
||||
}
|
||||
|
||||
static int get_boot_time(struct timeval *boot_time)
|
||||
{
|
||||
struct timespec hires_uptime;
|
||||
struct timeval lores_uptime, now;
|
||||
struct sysinfo info;
|
||||
|
||||
if (gettimeofday(&now, NULL) != 0) {
|
||||
warn(_("gettimeofday failed"));
|
||||
return -errno;
|
||||
}
|
||||
|
||||
#ifdef CLOCK_BOOTTIME
|
||||
if (clock_gettime(CLOCK_BOOTTIME, &hires_uptime) == 0) {
|
||||
TIMESPEC_TO_TIMEVAL(&lores_uptime, &hires_uptime);
|
||||
timersub(&now, &lores_uptime, boot_time);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
/* fallback */
|
||||
if (sysinfo(&info) != 0)
|
||||
warn(_("sysinfo failed"));
|
||||
|
||||
boot_time->tv_sec = now.tv_sec - info.uptime;
|
||||
boot_time->tv_usec = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reads messages from regular file by mmap
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue