all repos — tint2 @ c21930de2b4c34a70237612897ca0c32441ec725

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

Battery: check that data files are readable and non-empty
o9000 mrovi9000@gmail.com
commit

c21930de2b4c34a70237612897ca0c32441ec725

parent

f2cc1b68c19b5e8d66f3f68b98cbf1d8decfb4b2

1 files changed, 21 insertions(+), 7 deletions(-)

jump to
M src/battery/linux.csrc/battery/linux.c

@@ -60,6 +60,20 @@ /* values */

gboolean online; }; +static gboolean is_file_non_empty(const char *path) +{ + FILE *f = fopen(path, "r"); + if (!f) + return FALSE; + char buffer[1024]; + size_t count = fread(buffer, 1, sizeof(buffer), f); + fclose(f); + if (count > 0) + return TRUE; + else + return FALSE; +} + static void uevent_battery_update() { update_battery_tick(NULL);

@@ -124,7 +138,7 @@ {

const gchar *entryname = bat->name; bat->path_present = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "present", NULL); - if (!g_file_test(bat->path_present, G_FILE_TEST_EXISTS)) { + if (!is_file_non_empty(bat->path_present)) { fprintf(stderr, RED "tint2: %s:%d: read failed for %s" RESET "\n", __FILE__, __LINE__, bat->path_present); goto err0; }

@@ -136,8 +150,8 @@ g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "energy_full", NULL);

bat->path_rate_now = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "power_now", NULL); bat->unit = 'W'; - if (!g_file_test(bat->path_level_now, G_FILE_TEST_EXISTS) || - !g_file_test(bat->path_level_full, G_FILE_TEST_EXISTS)) { + if (!is_file_non_empty(bat->path_level_now) || + !is_file_non_empty(bat->path_level_full)) { g_free(bat->path_level_now); g_free(bat->path_level_full); g_free(bat->path_rate_now);

@@ -149,17 +163,17 @@ bat->path_rate_now =

g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "current_now", NULL); bat->unit = 'A'; } - if (!g_file_test(bat->path_level_now, G_FILE_TEST_EXISTS)) { + if (!is_file_non_empty(bat->path_level_now)) { fprintf(stderr, RED "tint2: %s:%d: read failed for %s" RESET "\n", __FILE__, __LINE__, bat->path_level_now); goto err1; } - if (!g_file_test(bat->path_level_full, G_FILE_TEST_EXISTS)) { + if (!is_file_non_empty(bat->path_level_full)) { fprintf(stderr, RED "tint2: %s:%d: read failed for %s" RESET "\n", __FILE__, __LINE__, bat->path_level_full); goto err1; } bat->path_status = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "status", NULL); - if (!g_file_test(bat->path_status, G_FILE_TEST_EXISTS)) { + if (!is_file_non_empty(bat->path_status)) { fprintf(stderr, RED "tint2: %s:%d: read failed for %s" RESET "\n", __FILE__, __LINE__, bat->path_status); goto err2; }

@@ -183,7 +197,7 @@ {

const gchar *entryname = ac->name; ac->path_online = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "online", NULL); - if (!g_file_test(ac->path_online, G_FILE_TEST_EXISTS)) { + if (!is_file_non_empty(ac->path_online)) { fprintf(stderr, RED "tint2: %s:%d: read failed for %s" RESET "\n", __FILE__, __LINE__, ac->path_online); g_free(ac->path_online); return FALSE;