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:
Sami Kerola 2014-04-23 22:59:29 +01:00
parent edd2af005c
commit 929f939e6a
3 changed files with 30 additions and 27 deletions

View file

@ -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 */

View file

@ -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;
}

View file

@ -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
*/