*** fbpanel-6.1/plugins/battery/os_linux.c~	2010-04-08 12:35:26.000000000 +0200
--- fbpanel-6.1/plugins/battery/os_linux.c	2013-07-09 13:13:50.958994816 +0200
***************
*** 1,5 ****
--- 1,6 ----
  
  #include <string.h>
+ #include <stdlib.h>
  #include <ctype.h>
  
  #define LEN 100
***************
*** 120,129 ****
  }
  
  static gboolean
  battery_update_os_sys(battery_priv *c)
  {
      ENTER;
!     RET(FALSE);
  }
  
  static gboolean
--- 121,215 ----
  }
  
  static gboolean
+ read_sys(battery_priv *c, GString *path)
+ {
+     int len, dcap, rcap;
+     gchar *buf;
+     gboolean ret, exist, charging;
+ 
+     ENTER;
+     len = path->len;
+     
+     g_string_append(path, "/present");
+     ret = g_file_get_contents(path->str, &buf, 0, NULL);
+     DBG("reading %s %s\n", path->str, ret ? "ok" : "fail");
+     g_string_truncate(path, len);
+     if (!ret)
+         RET(FALSE);
+     exist = atoi(buf);
+     g_free(buf);
+     if (!exist)
+         RET(FALSE);
+ 
+     g_string_append(path, "/charge_full_design");
+     ret = g_file_get_contents(path->str, &buf, 0, NULL);
+     DBG("reading %s %s\n", path->str, ret ? "ok" : "fail");
+     g_string_truncate(path, len);
+     if (!ret)
+         RET(FALSE);
+     dcap = atoi(buf);
+     g_free(buf);
+     if (dcap <= 0)
+         RET(FALSE);
+ 
+     g_string_append(path, "/charge_now");
+     ret = g_file_get_contents(path->str, &buf, 0, NULL);
+     DBG("reading %s %s\n", path->str, ret ? "ok" : "fail");
+     g_string_truncate(path, len);
+     if (!ret)
+         RET(FALSE);
+     rcap = atoi(buf);
+     g_free(buf);
+     if (rcap <= 0)
+         RET(FALSE);
+ 
+     g_string_append(path, "/current_now");
+     ret = g_file_get_contents(path->str, &buf, 0, NULL);
+     DBG("reading %s %s\n", path->str, ret ? "ok" : "fail");
+     g_string_truncate(path, len);
+     if (!ret)
+         RET(FALSE);
+     charging = (atoi(buf) <= 0);
+     g_free(buf);
+ 
+     c->exist = exist;
+     c->charging = charging;
+     c->level = (int) ((gfloat) rcap * 100 / (gfloat) dcap);
+     RET(TRUE);
+ }
+ 
+ static gboolean
  battery_update_os_sys(battery_priv *c)
  {
+     GString *path;
+     int len;
+     GDir *dir;
+     gboolean ret = FALSE;
+     const gchar *file;
+     
      ENTER;
!     c->exist = FALSE;
!     path = g_string_sized_new(200);
!     g_string_append(path, "/sys/class/power_supply");
!     len = path->len;
!     if (!(dir = g_dir_open(path->str, 0, NULL))) {
!         DBG("can't open dir %s\n", path->str);
!         goto out;
!     }
!     while (!ret && (file = g_dir_read_name(dir))) {
!         g_string_append(path, "/");
!         g_string_append(path, file);
!         DBG("testing %s\n", path->str);
!         ret = g_file_test(path->str, G_FILE_TEST_IS_DIR);
!         if (ret) 
!             ret = read_sys(c, path);
!         g_string_truncate(path, len);
!     }    
!     g_dir_close(dir);
!         
! out:
!     g_string_free(path, TRUE);
!     RET(ret);
  }
  
  static gboolean
