diff --git a/i3status.c b/i3status.c index b96fa1d..1e0e2a5 100644 --- a/i3status.c +++ b/i3status.c @@ -802,7 +802,15 @@ int main(int argc, char *argv[]) { CASE_SEC("load") { SEC_OPEN_MAP("load"); - print_load(json_gen, buffer, cfg_getstr(sec, "format"), cfg_getstr(sec, "format_above_threshold"), cfg_getfloat(sec, "max_threshold")); + load_ctx_t ctx = { + .json_gen = json_gen, + .buf = buffer, + .buflen = sizeof(buffer), + .format = cfg_getstr(sec, "format"), + .format_above_threshold = cfg_getstr(sec, "format_above_threshold"), + .max_threshold = cfg_getfloat(sec, "max_threshold"), + }; + print_load(&ctx); SEC_CLOSE_MAP; } diff --git a/include/i3status.h b/include/i3status.h index ff869ff..614e499 100644 --- a/include/i3status.h +++ b/include/i3status.h @@ -350,7 +350,17 @@ typedef struct { void print_eth_info(eth_info_ctx_t *ctx); -void print_load(yajl_gen json_gen, char *buffer, const char *format, const char *format_above_threshold, const float max_threshold); +typedef struct { + yajl_gen json_gen; + char *buf; + const size_t buflen; + const char *format; + const char *format_above_threshold; + const float max_threshold; +} load_ctx_t; + +void print_load(load_ctx_t *ctx); + void print_memory(yajl_gen json_gen, char *buffer, const char *format, const char *format_degraded, const char *threshold_degraded, const char *threshold_critical, const char *memory_used_method, const char *unit, const int decimals); typedef struct { diff --git a/src/print_load.c b/src/print_load.c index 322aa7d..911779c 100644 --- a/src/print_load.c +++ b/src/print_load.c @@ -11,23 +11,24 @@ #define STRING_SIZE 10 -void print_load(yajl_gen json_gen, char *buffer, const char *format, const char *format_above_threshold, const float max_threshold) { - char *outwalk = buffer; - /* Get load */ +void print_load(load_ctx_t *ctx) { + char *outwalk = ctx->buf; +/* Get load */ +#define json_gen ctx->json_gen #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__linux__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__) || defined(sun) || defined(__DragonFly__) double loadavg[3]; - const char *selected_format = format; + const char *selected_format = ctx->format; bool colorful_output = false; if (getloadavg(loadavg, 3) == -1) goto error; - if (loadavg[0] >= max_threshold) { + if (loadavg[0] >= ctx->max_threshold) { START_COLOR("color_bad"); colorful_output = true; - if (format_above_threshold != NULL) - selected_format = format_above_threshold; + if (ctx->format_above_threshold != NULL) + selected_format = ctx->format_above_threshold; } char string_loadavg_1[STRING_SIZE]; @@ -44,14 +45,15 @@ void print_load(yajl_gen json_gen, char *buffer, const char *format, const char {.name = "%15min", .value = string_loadavg_15}}; const size_t num = sizeof(placeholders) / sizeof(placeholder_t); - buffer = format_placeholders(selected_format, &placeholders[0], num); + char *formatted = format_placeholders(selected_format, &placeholders[0], num); + OUTPUT_FORMATTED; + free(formatted); if (colorful_output) END_COLOR; *outwalk = '\0'; - OUTPUT_FULL_TEXT(buffer); - free(buffer); + OUTPUT_FULL_TEXT(ctx->buf); return; error: