From 5760a1d53f61d28e2011abbf319cb11a7b59515b Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Tue, 2 Nov 2021 20:29:00 +0100 Subject: [PATCH] eth: fix colors (+param struct) --- i3status.c | 10 +++++++++- include/i3status.h | 13 ++++++++++++- src/print_eth_info.c | 29 ++++++++++++++++------------- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/i3status.c b/i3status.c index 76165a7..6e60359 100644 --- a/i3status.c +++ b/i3status.c @@ -704,7 +704,15 @@ int main(int argc, char *argv[]) { interface = first_eth_interface(NET_TYPE_ETHERNET); if (interface == NULL) interface = title; - print_eth_info(json_gen, buffer, interface, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down")); + eth_info_ctx_t ctx = { + .json_gen = json_gen, + .buf = buffer, + .buflen = sizeof(buffer), + .interface = interface, + .format_up = cfg_getstr(sec, "format_up"), + .format_down = cfg_getstr(sec, "format_down"), + }; + print_eth_info(&ctx); SEC_CLOSE_MAP; } diff --git a/include/i3status.h b/include/i3status.h index d656fd0..f3ecb61 100644 --- a/include/i3status.h +++ b/include/i3status.h @@ -254,7 +254,18 @@ void print_run_watch(yajl_gen json_gen, char *buffer, const char *title, const c void print_path_exists(yajl_gen json_gen, char *buffer, const char *title, const char *path, const char *format, const char *format_down); void print_cpu_temperature_info(yajl_gen json_gen, char *buffer, int zone, const char *path, const char *format, const char *format_above_threshold, int); void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format, const char *format_above_threshold, const char *format_above_degraded_threshold, const char *path, const float max_threshold, const float degraded_threshold); -void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down); + +typedef struct { + yajl_gen json_gen; + char *buf; + const size_t buflen; + const char *interface; + const char *format_up; + const char *format_down; +} eth_info_ctx_t; + +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); 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); void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *fmt_muted, const char *device, const char *mixer, int mixer_idx); diff --git a/src/print_eth_info.c b/src/print_eth_info.c index c0d6649..0d05dda 100644 --- a/src/print_eth_info.c +++ b/src/print_eth_info.c @@ -136,16 +136,17 @@ static int print_eth_speed(char *outwalk, const char *interface) { * | 127.0.0.1 | no IP | IPv4 | ok | * | 127.0.0.1 | ::1/128 | IPv4 | ok | */ -void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down) { - const char *format = format_down; // default format +void print_eth_info(eth_info_ctx_t *ctx) { + const char *format = ctx->format_down; // default format +#define json_gen ctx->json_gen - char *outwalk = buffer; + char *outwalk = ctx->buf; size_t num = 0; - INSTANCE(interface); + INSTANCE(ctx->interface); - char *ipv4_address = sstrdup(get_ip_addr(interface, AF_INET)); - char *ipv6_address = sstrdup(get_ip_addr(interface, AF_INET6)); + char *ipv4_address = sstrdup(get_ip_addr(ctx->interface, AF_INET)); + char *ipv6_address = sstrdup(get_ip_addr(ctx->interface, AF_INET6)); /* * Removing '%' and following characters from IPv6 since the interface identifier is redundant, @@ -170,7 +171,7 @@ void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, cons prefer_ipv4 = false; } - format = format_up; + format = ctx->format_up; const char *ip_address = (prefer_ipv4) ? ipv4_address : ipv6_address; if (BEGINS_WITH(ip_address, "no IP")) { @@ -183,20 +184,22 @@ void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, cons char string_speed[STRING_SIZE]; char string_interface[STRING_SIZE]; snprintf(string_ip, STRING_SIZE, "%s", ip_address); - print_eth_speed(string_speed, interface); - snprintf(string_interface, STRING_SIZE, "%s", interface); + print_eth_speed(string_speed, ctx->interface); + snprintf(string_interface, STRING_SIZE, "%s", ctx->interface); placeholder_t placeholders[] = { {.name = "%ip", .value = string_ip}, {.name = "%speed", .value = string_speed}, {.name = "%interface", .value = string_interface}}; num = sizeof(placeholders) / sizeof(placeholder_t); -out: - buffer = format_placeholders(format, &placeholders[0], num); +out : { + char *formatted = format_placeholders(format, &placeholders[0], num); + OUTPUT_FORMATTED; + free(formatted); END_COLOR; free(ipv4_address); free(ipv6_address); - OUTPUT_FULL_TEXT(buffer); - free(buffer); + OUTPUT_FULL_TEXT(ctx->buf); +} }