Fix wrapping on 32-bit architectures: CPU timers may exceed 32 bit so use 64 bit.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Mon, 15 Sep 2014 23:02:13 +0000 (02:02 +0300)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Mon, 15 Sep 2014 23:02:13 +0000 (02:02 +0300)
src/functions.c
src/types.h
src/xfce-taskmanager-linux.c

index 76b32bb..4c94551 100644 (file)
@@ -41,7 +41,7 @@ gboolean refresh_task_list(void)
     GArray *new_task_list;
     gdouble cpu_usage;
     guint num_cpus;
-    guint memory_used;
+    guint64 memory_used;
     char tooltip[256];
 
     if (sys_stat!=NULL)
@@ -145,7 +145,9 @@ gboolean refresh_task_list(void)
     {
         memory_used-=sys_stat->mem_cached+sys_stat->mem_buffered;
     }
-    sprintf (tooltip, _("Memory: %d MB of %d MB used"), memory_used / 1024, sys_stat->mem_total / 1024);
+    /* FIXME: this will work only for < 2048 TB but where so many memory... */
+    sprintf (tooltip, _("Memory: %d MB of %d MB used"), (int)(memory_used / 1024),
+             (int)(sys_stat->mem_total / 1024));
     if(strcmp(tooltip,gtk_progress_bar_get_text(GTK_PROGRESS_BAR(mem_usage_progress_bar))))
     {
         gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (mem_usage_progress_bar),  (gdouble)memory_used / sys_stat->mem_total);
index 84575c2..83acc5c 100644 (file)
@@ -43,17 +43,17 @@ struct task
 
 typedef struct
 {
-    guint mem_total;
-    guint mem_free;
-    guint mem_cached;
-    guint mem_buffered;
-    guint cpu_count;
-    guint cpu_idle;
-    guint cpu_user;
-    guint cpu_nice;
-    guint cpu_system;
-    guint cpu_old_jiffies;
-    guint cpu_old_used;
+    guint64 mem_total;
+    guint64 mem_free;
+    guint64 mem_cached;
+    guint64 mem_buffered;
+    guint64 cpu_count;
+    guint64 cpu_idle;
+    guint64 cpu_user;
+    guint64 cpu_nice;
+    guint64 cpu_system;
+    guint64 cpu_old_jiffies;
+    guint64 cpu_old_used;
     gboolean valid_proc_reading;
 } system_status;
 
index 9fbde03..6c01363 100644 (file)
@@ -237,7 +237,7 @@ gboolean get_cpu_usage_from_proc(system_status *sys_stat)
 
     file = fopen (file_name, "rb");
     if(!file) return FALSE;
-    if ( fscanf (file, "cpu\t%u %u %u %u",
+    if ( fscanf (file, "cpu\t%"G_GUINT64_FORMAT" %"G_GUINT64_FORMAT" %"G_GUINT64_FORMAT" %"G_GUINT64_FORMAT,
                  &sys_stat->cpu_user,
                  &sys_stat->cpu_nice,
                  &sys_stat->cpu_system,