From 7eeb7bff6efdd659aa33517dc743f2203d9af35a Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 27 Jun 2020 09:44:11 -0700 Subject: =?UTF-8?q?getloadavg:=20don=E2=80=99t=20depend=20on=20fopen-gnu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is for Emacs, which does not need fopen-gnu for anything else, and which would need it only on a NetBSD platform where getloadavg does not work (does that even happen?). * lib/getloadavg.c (getloadavg) [__NetBSD__]: Use open, not fopen. * modules/getloadavg (Depends-on): Remove fopen-gnu. --- lib/getloadavg.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'lib/getloadavg.c') diff --git a/lib/getloadavg.c b/lib/getloadavg.c index aeb7070cc7..468e250670 100644 --- a/lib/getloadavg.c +++ b/lib/getloadavg.c @@ -567,15 +567,22 @@ getloadavg (double loadavg[], int nelem) unsigned long int load_ave[3], scale; int count; - FILE *fp; - - fp = fopen (NETBSD_LDAV_FILE, "re"); - if (fp == NULL) - return -1; - count = fscanf (fp, "%lu %lu %lu %lu\n", + char readbuf[4 * INT_BUFSIZE_BOUND (unsigned long int) + 1]; + int fd = open (NETBSD_LDAV_FILE, O_RDONLY | O_CLOEXEC); + if (fd < 0) + return fd; + int nread = read (fd, readbuf, sizeof readbuf - 1); + int err = errno; + close (fd); + if (nread < 0) + { + errno = err; + return -1; + } + readbuf[nread] = '\0'; + count = sscanf (readbuf, "%lu %lu %lu %lu\n", &load_ave[0], &load_ave[1], &load_ave[2], &scale); - (void) fclose (fp); if (count != 4) { errno = ENOTSUP; -- cgit v1.2.1