This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository evisum.

View the commit online.

commit d1c7c422d3decc76a7a4417919e5f78f483d2593
Author: Alastair Poole <[email protected]>
AuthorDate: Thu May 28 19:45:58 2026 +0100

    uptime: Calculate uptime API.
    
    boycott asked for this helper.
---
 NEWS                                 |  9 +++++++
 VERSION                              |  2 +-
 meson.build                          |  2 +-
 src/bin/engine/evisum_engine.c       | 33 ++++++++++++++++++++++++-
 src/bin/enigmatic/client/meson.build |  2 +-
 src/bin/enigmatic/system/meson.build |  2 ++
 src/bin/enigmatic/system/uptime.c    | 48 ++++++++++++++++++++++++++++++++++++
 src/bin/enigmatic/system/uptime.h    | 10 ++++++++
 8 files changed, 104 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index 5f373b4..f7cdc03 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+=============
+Evisum 2.0.11
+=============
+
+  * Improve efficiency of UI memory usage when not in history mode.
+  * Keep track of disk read and writes.
+  * Fix the history bounds to include up to the current time.
+  * Add a basic uptime API libenigmatic can provide.
+
 =============
 Evisum 2.0.10
 =============
diff --git a/VERSION b/VERSION
index 0a69206..6cbacdc 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.0.10
+2.0.11
diff --git a/meson.build b/meson.build
index ece69f9..bd54418 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
 ##### Project
 project('evisum', 'c',
-        version       : '2.0.10',
+        version       : '2.0.11',
         meson_version : '>= 0.56.0')
 
 efl_version = '>= 1.27.0'
diff --git a/src/bin/engine/evisum_engine.c b/src/bin/engine/evisum_engine.c
index b4ab12b..e2ae643 100644
--- a/src/bin/engine/evisum_engine.c
+++ b/src/bin/engine/evisum_engine.c
@@ -57,6 +57,9 @@ _engine_snapshot_release(void);
 static void
 _engine_history_logs_free(Eina_List *logs);
 
+static void
+_engine_history_logs_current_end_update(Eina_List *logs);
+
 static Eina_Bool
 _engine_pid_alive(pid_t pid)
 {
@@ -516,6 +519,7 @@ _engine_history_log_add(Eina_List **logs, char *path, const struct stat *st_in)
     log->end_time = end_time;
 
     *logs = eina_list_append(*logs, log);
+    if (!st_in) _engine_history_logs_current_end_update(*logs);
 
     return EINA_TRUE;
 }
@@ -596,11 +600,15 @@ _engine_history_logs_get(Eina_Bool refresh, uint32_t since)
             copy = _engine_history_logs_clone(_state.history_recent_logs);
         }
         UNLOCK();
-        if (copy) return _engine_history_logs_since_trim(copy, since);
+        if (copy) {
+            _engine_history_logs_current_end_update(copy);
+            return _engine_history_logs_since_trim(copy, since);
+        }
     }
 
     logs = _engine_history_logs_scan(since);
     if (!logs) return NULL;
+    _engine_history_logs_current_end_update(logs);
 
     if (_state.lock_init) {
         copy = _engine_history_logs_clone(logs);
@@ -621,6 +629,29 @@ _engine_history_logs_get(Eina_Bool refresh, uint32_t since)
     return logs;
 }
 
+static void
+_engine_history_logs_current_end_update(Eina_List *logs)
+{
+    Eina_List *l;
+    Evisum_Engine_History_Log *log;
+    char *current_path;
+    uint32_t now;
+
+    if (!logs) return;
+
+    current_path = enigmatic_log_path();
+    if (!current_path) return;
+
+    now = (uint32_t) time(NULL);
+    EINA_LIST_FOREACH(logs, l, log) {
+        if (!log || !log->path || strcmp(log->path, current_path)) continue;
+        if (log->end_time < now) log->end_time = now;
+        break;
+    }
+
+    free(current_path);
+}
+
 static Eina_Bool
 _engine_history_logs_time_available_get(Eina_List *logs, uint32_t history_time)
 {
diff --git a/src/bin/enigmatic/client/meson.build b/src/bin/enigmatic/client/meson.build
index 69f1389..2aa119a 100644
--- a/src/bin/enigmatic/client/meson.build
+++ b/src/bin/enigmatic/client/meson.build
@@ -32,7 +32,7 @@ install_headers('../Events.h', subdir : 'enigmatic')
 install_headers('../enigmatic_visibility.h', subdir : 'enigmatic')
 install_headers('../enigmatic_util.h', subdir : 'enigmatic')
 install_headers('Enigmatic_Client.h', subdir : 'enigmatic')
-install_headers('../system/machine.h', '../system/file_systems.h', '../system/process.h', subdir : 'enigmatic/system')
+install_headers('../system/machine.h', '../system/file_systems.h', '../system/process.h', '../system/uptime.h', subdir : 'enigmatic/system')
 install_headers('../intl/gettext.h', subdir : 'enigmatic/intl')
 
 pkg = import('pkgconfig')
diff --git a/src/bin/enigmatic/system/meson.build b/src/bin/enigmatic/system/meson.build
index 51a5900..c2a4c74 100644
--- a/src/bin/enigmatic/system/meson.build
+++ b/src/bin/enigmatic/system/meson.build
@@ -3,6 +3,8 @@ src_system = files([
    'machine.h',
    'file_systems.c',
    'file_systems.h',
+   'uptime.c',
+   'uptime.h',
 ])
 
 src_process = files([
diff --git a/src/bin/enigmatic/system/uptime.c b/src/bin/enigmatic/system/uptime.c
new file mode 100644
index 0000000..9b0d888
--- /dev/null
+++ b/src/bin/enigmatic/system/uptime.c
@@ -0,0 +1,48 @@
+#include "uptime.h"
+
+#include <stdio.h>
+
+#if defined(__FreeBSD__) || defined(__DragonFly__) || (defined(__APPLE__) && defined(__MACH__))
+# include <sys/types.h>
+# include <sys/sysctl.h>
+# include <sys/time.h>
+#endif
+
+time_t
+enigmatic_system_uptime_get(void)
+{
+#if defined(__linux__)
+   FILE *f;
+   double uptime = 0.0;
+
+   f = fopen("/proc/uptime", "r");
+   if (!f) return (time_t) -1;
+
+   if (fscanf(f, "%lf", &uptime) != 1)
+     {
+        fclose(f);
+        return (time_t) -1;
+     }
+   fclose(f);
+
+   if (uptime < 0.0) return (time_t) -1;
+
+   return (time_t) uptime;
+#elif defined(__FreeBSD__) || defined(__DragonFly__) || (defined(__APPLE__) && defined(__MACH__))
+   struct timeval boot_time;
+   size_t len = sizeof(boot_time);
+   time_t now;
+   int mib[2] = { CTL_KERN, KERN_BOOTTIME };
+
+   if (sysctl(mib, 2, &boot_time, &len, NULL, 0) == -1)
+     return (time_t) -1;
+
+   now = time(NULL);
+   if ((now == (time_t) -1) || (boot_time.tv_sec > now))
+     return (time_t) -1;
+
+   return now - boot_time.tv_sec;
+#else
+   return (time_t) -1;
+#endif
+}
diff --git a/src/bin/enigmatic/system/uptime.h b/src/bin/enigmatic/system/uptime.h
new file mode 100644
index 0000000..cc69291
--- /dev/null
+++ b/src/bin/enigmatic/system/uptime.h
@@ -0,0 +1,10 @@
+#ifndef UPTIME_H
+#define UPTIME_H
+
+#include <time.h>
+#include "enigmatic_visibility.h"
+
+ENIGMATIC_API time_t
+enigmatic_system_uptime_get(void);
+
+#endif

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to