Start
[users/jgh/exim.git] / src / OS / os.c-Linux-libc5
diff --git a/src/OS/os.c-Linux-libc5 b/src/OS/os.c-Linux-libc5
new file mode 100644 (file)
index 0000000..cbda9e6
--- /dev/null
@@ -0,0 +1,39 @@
+/* $Cambridge: exim/src/OS/os.c-Linux-libc5,v 1.1 2004/10/06 15:07:39 ph10 Exp $ */
+
+/*************************************************
+*     Exim - an Internet mail transport agent    *
+*************************************************/
+
+/* Copyright (c) University of Cambridge 2001 */
+/* See the file NOTICE for conditions of use and distribution. */
+
+/* Linux-specific code. This is concatenated onto the generic src/os.c file.
+Linux has an apparently unique way of getting the load average, so we provide a
+unique function here, and define OS_LOAD_AVERAGE to stop src/os.c trying to
+provide the function. The macro may be set initially anyway, when compiling os.
+for utilities that don't want this function. */
+
+#ifndef OS_LOAD_AVERAGE
+#define OS_LOAD_AVERAGE
+
+int
+os_getloadavg(void)
+{
+char buffer[40];
+double avg;
+int count;
+int fd = open ("/proc/loadavg", O_RDONLY);
+if (fd == -1) return -1;
+count = read (fd, buffer, sizeof(buffer));
+(void)close (fd);
+if (count <= 0) return -1;
+count = sscanf (buffer, "%lf", &avg);
+if (count < 1) return -1;
+
+return (int)(avg * 1000.0);
+}
+
+#endif  /* OS_LOAD_AVERAGE */
+
+/* End of os.c-Linux */
+