From 2df4af5fde4bf22f620435f66270f96d918611a6 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Thu, 14 Dec 2023 21:55:20 +0100 Subject: [PATCH] Load plugin: rewrite Linux implementation using `read_text_file_contents`. --- src/load.c | 39 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/src/load.c b/src/load.c index 69953fef2..162909585 100644 --- a/src/load.c +++ b/src/load.c @@ -121,38 +121,23 @@ static int load_read(void) { /* #endif HAVE_GETLOADAVG */ #elif defined(KERNEL_LINUX) - gauge_t snum, mnum, lnum; - FILE *loadavg; - char buffer[16]; - - char *fields[8]; - int numfields; - - if ((loadavg = fopen("/proc/loadavg", "r")) == NULL) { - WARNING("load: fopen: %s", STRERRNO); - return -1; - } + char buffer[64] = {0}; - if (fgets(buffer, 16, loadavg) == NULL) { - WARNING("load: fgets: %s", STRERRNO); - fclose(loadavg); - return -1; + ssize_t status = + read_text_file_contents("/proc/loadavg", buffer, sizeof(buffer)); + if (status < 0) { + ERROR("load plugin: Reading \"/proc/loadavg\" failed."); + return (int)status; } - if (fclose(loadavg)) { - WARNING("load: fclose: %s", STRERRNO); + char *fields[4] = {NULL}; + int numfields = strsplit(buffer, fields, STATIC_ARRAY_SIZE(fields)); + if (numfields < 3) { + ERROR("load plugin: strsplit returned %d field(s), want 3", numfields); + return EIO; } - numfields = strsplit(buffer, fields, 8); - - if (numfields < 3) - return -1; - - snum = atof(fields[0]); - mnum = atof(fields[1]); - lnum = atof(fields[2]); - - load_submit(snum, mnum, lnum); + load_submit(atof(fields[0]), atof(fields[1]), atof(fields[2])); /* #endif KERNEL_LINUX */ #elif HAVE_LIBSTATGRAB -- 2.47.2