2020-06-27 Paul Eggert <eggert@cs.ucla.edu>
+ 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 <bruno@clisp.org>
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;