libc: add the getloadavg() interface from 2BSD
authorAlan Cox <alan@linux.intel.com>
Sun, 24 May 2015 21:46:04 +0000 (22:46 +0100)
committerAlan Cox <alan@linux.intel.com>
Sun, 24 May 2015 21:46:04 +0000 (22:46 +0100)
Library/include/stdlib.h
Library/libs/Makefile
Library/libs/Makefile.6502
Library/libs/Makefile.6809
Library/libs/getloadavg.c [new file with mode: 0644]

index 210099e..c474b4a 100644 (file)
@@ -92,4 +92,6 @@ extern char *getpass(char *prompt);
 extern int _argc;
 extern char **_argv;
 
+extern int getloadavg __P((unsigned int loadavg[], int nelem));
+
 #endif /* __STDLIB_H */
index ce3f468..2fe30f4 100644 (file)
@@ -26,7 +26,7 @@ SRC_C += execl.c execv.c execvp.c exit.c
 SRC_C += fclose.c fflush.c fgetc.c fgetgrent.c fgetpwent.c
 SRC_C += fgetpos.c fgets.c fopen.c fprintf.c fputc.c fputs.c fread.c free.c
 SRC_C += fsetpos.c ftell.c fwrite.c getcwd.c
-SRC_C += getenv.c __getgrent.c getgrgid.c getgrnam.c getopt.c
+SRC_C += getenv.c __getgrent.c getgrgid.c getgrnam.c getloadavg.c getopt.c
 SRC_C += getpw.c __getpwent.c getpwnam.c getpwuid.c gets.c gettimeofday.c
 SRC_C += gmtime.c gmtime_r.c grent.c index.c isatty.c killpg.c
 SRC_C += libintl.c
index c9cba5f..d7daa88 100644 (file)
@@ -38,7 +38,7 @@ SRC_C += execl.c execv.c execvp.c exit.c
 SRC_C += fclose.c fflush.c fgetc.c fgetgrent.c fgetpwent.c
 SRC_C += fgetpos.c fgets.c fopen.c fprintf.c fputc.c fputs.c fread.c free.c
 SRC_C += fsetpos.c ftell.c fwrite.c getcwd.c
-SRC_C += getenv.c __getgrent.c getgrgid.c getgrnam.c getopt.c
+SRC_C += getenv.c __getgrent.c getgrgid.c getgrnam.c getloadavg.c getopt.c
 SRC_C += getpw.c __getpwent.c getpwnam.c getpwuid.c gets.c gettimeofday.c
 SRC_C += gmtime.c gmtime_r.c grent.c index.c isatty.c killpg.c
 SRC_C += libintl.c
index a721a77..471e28b 100644 (file)
@@ -19,7 +19,7 @@ SRC_C += execl.c execv.c execvp.c exit.c
 SRC_C += fclose.c fflush.c fgetc.c fgetgrent.c fgetpwent.c
 SRC_C += fgetpos.c fgets.c fopen.c fprintf.c fputc.c fputs.c fread.c free.c
 SRC_C += fsetpos.c ftell.c fwrite.c getcwd.c
-SRC_C += getenv.c __getgrent.c getgrgid.c getgrnam.c getopt.c
+SRC_C += getenv.c __getgrent.c getgrgid.c getgrnam.c getloadavg.c getopt.c
 SRC_C += getpw.c __getpwent.c getpwnam.c getpwuid.c gets.c gettimeofday.c
 SRC_C += gmtime.c gmtime_r.c grent.c index.c isatty.c killpg.c
 SRC_C += libintl.c
diff --git a/Library/libs/getloadavg.c b/Library/libs/getloadavg.c
new file mode 100644 (file)
index 0000000..23306b5
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ *     BSD has an API for this so we might as well provide a libc API
+ *     using the same interface. Pity the API varies between systems on
+ *     the type used for loadavg!
+ */
+
+#include <unistd.h>
+#include <stdlib.h>
+
+int getloadavg(unsigned int loadavg[], int nelem)
+{
+       static struct _uzisysinfoblk uts;
+       uint8_t i;
+       int bytes = _uname(&uts, sizeof(uts));
+
+       if (bytes < sizeof(uts))
+               return -1;
+       if (nelem > 3)
+               nelem = 3;
+       for (i = 0; i < nelem; i++)
+               loadavg[i] = (uts.loadavg[i] * 100) >> 8;
+       return nelem;
+}