X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fuptime.c;h=8b83cf9be9f7def6ebc15bec94d912f5cbe14000;hb=47fd864adf60f70628e516d933c859229ff70912;hp=2be9d79da0d793af64685c8171da2a29887b5edd;hpb=6026e3162e522b133d10596710527d24c2921b55;p=collectd.git diff --git a/src/uptime.c b/src/uptime.c index 2be9d79d..8b83cf9b 100644 --- a/src/uptime.c +++ b/src/uptime.c @@ -25,7 +25,7 @@ #include "plugin.h" #if KERNEL_LINUX -#define STAT_FILE "/proc/stat" +#define UPTIME_FILE "/proc/uptime" /* Using /proc filesystem to retrieve the boot time, Linux only. */ /* #endif KERNEL_LINUX */ @@ -86,46 +86,30 @@ static int uptime_init(void) /* {{{ */ */ #if KERNEL_LINUX - unsigned long starttime; - char buffer[1024]; - int ret; - FILE *fh; - - ret = 0; - - fh = fopen(STAT_FILE, "r"); - + FILE *fh = fopen(UPTIME_FILE, "r"); if (fh == NULL) { char errbuf[1024]; - ERROR("uptime plugin: Cannot open " STAT_FILE ": %s", + ERROR("uptime plugin: Cannot open " UPTIME_FILE ": %s", sstrerror(errno, errbuf, sizeof(errbuf))); return -1; } - while (fgets(buffer, 1024, fh) != NULL) { - /* look for the btime string and read the value */ - ret = sscanf(buffer, "btime %lu", &starttime); - /* avoid further loops if btime has been found and read - * correctly (hopefully) */ - if (ret == 1) - break; + double uptime_seconds = 0.0; + if (fscanf(fh, "%lf", &uptime_seconds) != 1) { + ERROR("uptime plugin: No value read from " UPTIME_FILE ""); + fclose(fh); + return -1; } fclose(fh); - /* loop done, check if no value has been found/read */ - if (ret != 1) { - ERROR("uptime plugin: No value read from " STAT_FILE ""); + if (uptime_seconds == 0.0) { + ERROR("uptime plugin: uptime read from " UPTIME_FILE ", " + "but it is zero!"); return -1; } - boottime = (time_t)starttime; - - if (boottime == 0) { - ERROR("uptime plugin: btime read from " STAT_FILE ", " - "but `boottime' is zero!"); - return -1; - } + boottime = time(NULL) - (long)uptime_seconds; /* #endif KERNEL_LINUX */ #elif HAVE_LIBKSTAT