]> git.sur5r.net Git - i3/i3status/blobdiff - src/print_battery_info.c
Merge pull request #298 from tuxillo/patch-1
[i3/i3status] / src / print_battery_info.c
index fa707146a0fe3d6679ad064a791350334715298d..8c85192f20f916b6544921e2740b0e0ce0424f58 100644 (file)
@@ -497,14 +497,17 @@ static bool slurp_all_batteries(struct battery_info *batt_info, yajl_gen json_ge
                 .present_rate = 0,
                 .status = CS_UNKNOWN,
             };
-            if (!slurp_battery_info(&batt_buf, json_gen, buffer, i, globbuf.gl_pathv[i], format_down))
+            if (!slurp_battery_info(&batt_buf, json_gen, buffer, i, globbuf.gl_pathv[i], format_down)) {
+                globfree(&globbuf);
+                free(globpath);
                 return false;
+            }
 
             is_found = true;
             add_battery_info(batt_info, &batt_buf);
         }
+        globfree(&globbuf);
     }
-    globfree(&globbuf);
     free(globpath);
 
     if (!is_found) {
@@ -560,13 +563,13 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
     // We prefer the design capacity, but use the last capacity if we don't have it,
     // or if we are asked to (last_full_capacity == true); but similarly we use
     // the design capacity if we don't have the last capacity.
-    // If we don't have either then both full_design and full_last < 0,
-    // which implies full < 0, which bails out on the following line.
+    // If we don't have either then both full_design and full_last <= 0,
+    // which implies full <= 0, which bails out on the following line.
     int full = batt_info.full_design;
-    if (full < 0 || (last_full_capacity && batt_info.full_last >= 0)) {
+    if (full <= 0 || (last_full_capacity && batt_info.full_last > 0)) {
         full = batt_info.full_last;
     }
-    if (full < 0 && batt_info.remaining < 0 && batt_info.percentage_remaining < 0) {
+    if (full <= 0 && batt_info.remaining < 0 && batt_info.percentage_remaining < 0) {
         /* We have no physical measurements and no estimates. Nothing
          * much we can report, then. */
         OUTPUT_FULL_TEXT(format_down);
@@ -619,10 +622,8 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
 
         if (*walk != '%') {
             *(outwalk++) = *walk;
-            continue;
-        }
 
-        if (BEGINS_WITH(walk + 1, "status")) {
+        } else if (BEGINS_WITH(walk + 1, "status")) {
             const char *statusstr;
             switch (batt_info.status) {
                 case CS_CHARGING:
@@ -640,6 +641,7 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
 
             outwalk += sprintf(outwalk, "%s", statusstr);
             walk += strlen("status");
+
         } else if (BEGINS_WITH(walk + 1, "percentage")) {
             if (integer_battery_capacity) {
                 outwalk += sprintf(outwalk, "%.00f%s", batt_info.percentage_remaining, pct_mark);
@@ -647,6 +649,7 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
                 outwalk += sprintf(outwalk, "%.02f%s", batt_info.percentage_remaining, pct_mark);
             }
             walk += strlen("percentage");
+
         } else if (BEGINS_WITH(walk + 1, "remaining")) {
             if (batt_info.seconds_remaining >= 0) {
                 int seconds, hours, minutes;
@@ -665,6 +668,7 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
             }
             walk += strlen("remaining");
             EAT_SPACE_FROM_OUTPUT_IF_NO_OUTPUT();
+
         } else if (BEGINS_WITH(walk + 1, "emptytime")) {
             if (batt_info.seconds_remaining >= 0) {
                 time_t empty_time = time(NULL) + batt_info.seconds_remaining;
@@ -680,12 +684,16 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
             }
             walk += strlen("emptytime");
             EAT_SPACE_FROM_OUTPUT_IF_NO_OUTPUT();
+
         } else if (BEGINS_WITH(walk + 1, "consumption")) {
             if (batt_info.present_rate >= 0)
                 outwalk += sprintf(outwalk, "%1.2fW", batt_info.present_rate / 1e6);
 
             walk += strlen("consumption");
             EAT_SPACE_FROM_OUTPUT_IF_NO_OUTPUT();
+
+        } else {
+            *(outwalk++) = '%';
         }
     }