From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/7097 Path: news.gmane.org!not-for-mail From: Alexander Monakov Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH] getloadavg: use sysinfo() instead of /proc/loadavg Date: Tue, 24 Feb 2015 21:44:07 +0300 Message-ID: <1424803447-5140-1-git-send-email-amonakov@ispras.ru> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1424803515 11994 80.91.229.3 (24 Feb 2015 18:45:15 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 24 Feb 2015 18:45:15 +0000 (UTC) Cc: Alexander Monakov To: musl@lists.openwall.com Original-X-From: musl-return-7110-gllmg-musl=m.gmane.org@lists.openwall.com Tue Feb 24 19:45:09 2015 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1YQKTk-0005ZQ-TA for gllmg-musl@m.gmane.org; Tue, 24 Feb 2015 19:45:09 +0100 Original-Received: (qmail 11355 invoked by uid 550); 24 Feb 2015 18:45:06 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 10149 invoked from network); 24 Feb 2015 18:44:35 -0000 X-Mailer: git-send-email 2.1.3 Xref: news.gmane.org gmane.linux.lib.musl.general:7097 Archived-At: Based on a patch by Szabolcs Nagy. --- This is a followup to a recent IRC conversation. getloadavg() doesn't really need to open a file in /proc, since a sysinfo() syscall should suffice. Based on a patch by nsz, slightly adjusted. Return value of sysinfo() call is not checked, since the only documented failure is with EFAULT. src/legacy/getloadavg.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/legacy/getloadavg.c b/src/legacy/getloadavg.c index 43a8c9e..ff06de0 100644 --- a/src/legacy/getloadavg.c +++ b/src/legacy/getloadavg.c @@ -1,18 +1,14 @@ #define _GNU_SOURCE #include -#include -#include +#include int getloadavg(double *a, int n) { - int i; - double b[3]; - FILE *f = fopen("/proc/loadavg", "rbe"); - if (!f) return -1; - i = fscanf(f, "%lf %lf %lf", b, b+1, b+2); - fclose(f); - if (n > i) n = i; - if (n < 0) return -1; - memcpy(a, b, n * sizeof *a); + struct sysinfo si; + if (n <= 0) return n ? -1 : 0; + sysinfo(&si); + if (n > 3) n = 3; + for (int i=0; i