summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/print_battery_info.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/print_battery_info.c b/src/print_battery_info.c
index 202d9bb..4fbf411 100644
--- a/src/print_battery_info.c
+++ b/src/print_battery_info.c
@@ -1,4 +1,5 @@
// vim:ts=8:expandtab
+#include <ctype.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
@@ -266,6 +267,16 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
(charging ? "(CHR)" : apm_info.minutes_left));
#endif
+#define EAT_SPACE_FROM_OUTPUT_IF_EMPTY(_buf) \
+ do { \
+ if (strlen(_buf) == 0) { \
+ if (outwalk > buffer && isspace(outwalk[-1])) \
+ outwalk--; \
+ else if (isspace(*(walk+1))) \
+ walk++; \
+ } \
+ } while (0)
+
for (walk = format; *walk != '\0'; walk++) {
if (*walk != '%') {
*(outwalk++) = *walk;
@@ -281,12 +292,15 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
} else if (strncmp(walk+1, "remaining", strlen("remaining")) == 0) {
outwalk += sprintf(outwalk, "%s", remainingbuf);
walk += strlen("remaining");
+ EAT_SPACE_FROM_OUTPUT_IF_EMPTY(remainingbuf);
} else if (strncmp(walk+1, "emptytime", strlen("emptytime")) == 0) {
outwalk += sprintf(outwalk, "%s", emptytimebuf);
walk += strlen("emptytime");
+ EAT_SPACE_FROM_OUTPUT_IF_EMPTY(emptytimebuf);
} else if (strncmp(walk+1, "consumption", strlen("consumption")) == 0) {
outwalk += sprintf(outwalk, "%s", consumptionbuf);
walk += strlen("consumption");
+ EAT_SPACE_FROM_OUTPUT_IF_EMPTY(consumptionbuf);
}
}