From: Paul Eggert Date: Sat, 27 Jun 2020 16:44:11 +0000 (-0700) Subject: getloadavg: don’t depend on fopen-gnu X-Git-Tag: v1.0~3956 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=7eeb7bff6efdd659aa33517dc743f2203d9af35a;p=gnulib.git getloadavg: don’t depend on fopen-gnu 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. --- diff --git a/ChangeLog b/ChangeLog index cd194e0c4d..19e609e31c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2020-06-27 Paul Eggert + getloadavg: don’t depend on fopen-gnu + 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. + * tests/test-getloadavg.c (main): Fix typo. 2020-06-27 Bruno Haible 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; diff --git a/modules/getloadavg b/modules/getloadavg index a5a3c4e03c..8adb9a7848 100644 --- a/modules/getloadavg +++ b/modules/getloadavg @@ -7,7 +7,6 @@ m4/getloadavg.m4 Depends-on: extensions -fopen-gnu intprops open stdbool