summaryrefslogtreecommitdiffhomepage
path: root/patches/coreutils/uptime.patch
blob: 2f2edcc0a764f16ce0cf4965fae8b708acc71574 (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
diff -ru coreutils-9.1.orig/src/uptime.c coreutils-9.1/src/uptime.c
--- coreutils-9.1.orig/src/uptime.c	2022-04-08 13:22:18.000000000 +0200
+++ coreutils-9.1/src/uptime.c	2023-09-06 12:26:22.909930119 +0200
@@ -30,6 +30,11 @@
 # include <OS.h>
 #endif
 
+#ifdef __midipix__
+#undef sa_handler
+#include <ntapi/ntapi.h>
+#endif
+
 #include "c-strtod.h"
 #include "die.h"
 #include "error.h"
@@ -59,6 +64,26 @@
   struct tm *tmn;
   double avg[3];
   int loads;
+#ifdef __midipix__
+  ntapi_vtbl *__ntapi;
+  nt_system_time_of_day_information stodi;
+
+  if((ntapi_init(&__ntapi)) == 0)
+    {
+      char buf[BUFSIZ];
+      long long nt_time;
+      __ntapi->zw_query_system_information(NT_SYSTEM_TIME_OF_DAY_INFORMATION, &stodi, sizeof(stodi), NULL);
+      nt_time = (stodi.current_time.quad - stodi.boot_time.quad) / 100000ULL;
+      sprintf(buf, "%u.%02u", nt_time / 100, nt_time % 100);
+      {
+         char *end_ptr;
+         double upsecs = c_strtod (buf, &end_ptr);
+         if (buf != end_ptr)
+           uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
+                     ? upsecs : -1);
+      }
+    }
+#endif
 #ifdef HAVE_PROC_UPTIME
   FILE *fp;