summaryrefslogtreecommitdiffstats
path: root/deskutils/superkaramba/files/patch-uptimesensor.cpp
blob: 9fcccddcb85de71c79b8386da8d2ae2a5fdb095b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
--- src/uptimesensor.cpp.orig  Wed Aug 27 01:32:14 2003
+++ src/uptimesensor.cpp       Wed Aug 27 02:34:41 2003
@@ -7,6 +7,11 @@
  *   the Free Software Foundation; either version 2 of the License, or     *
  *   (at your option) any later version.                                   *
  ***************************************************************************/
+#ifdef __FreeBSD__
+#include <sys/time.h>
+#include <sys/sysctl.h>
+#endif
+
 #include "uptimesensor.h"
 
 UptimeSensor::UptimeSensor( int interval ) : Sensor( interval )
@@ -16,6 +21,42 @@
 
 void UptimeSensor::update()
 {
+#ifdef __FreeBSD__
+      struct timeval  boottime;
+      time_t          now;            /* the current time of day */
+
+      double avenrun[3];
+      time_t uptime;
+      int days, hours, i, mins, secs;
+      int mib[2];
+      size_t size;
+      char buf[256];
+
+        /*
+         * Get time of day.
+         */
+        (void)time(&now);
+
+        /*
+         * Determine how long system has been up.
+         * (Found by looking getting "boottime" from the kernel)
+         */
+        mib[0] = CTL_KERN;
+        mib[1] = KERN_BOOTTIME;
+        size = sizeof(boottime);
+        if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 &&
+            boottime.tv_sec != 0) {
+                uptime = now - boottime.tv_sec;
+                if (uptime > 60)
+                        uptime += 30;
+                days = uptime / 86400;
+                uptime %= 86400;
+                hours = uptime / 3600;
+                uptime %= 3600;
+                mins = uptime / 60;
+                secs = uptime % 60;
+        }
+#else
     QFile file("/proc/uptime");
     QString line;
     if ( file.open(IO_ReadOnly | IO_Translate) )
@@ -35,7 +76,7 @@
         int mins = uptime / 60;
         uptime -= mins * 60;
         int secs = uptime;
-
+#endif
 
         QString format;
         SensorParams *sp;
@@ -63,5 +104,7 @@
             meter->setValue(format);
             ++it;
         }
+#ifndef __FreeBSD__
     }
+#endif
 }
OpenPOWER on IntegriCloud