X-Git-Url: https://git.sur5r.net/?p=i3%2Fi3status;a=blobdiff_plain;f=src%2Fprint_eth_info.c;h=81e74a798bbadb9467b3f539d4c8cdee069c9d1d;hp=996ce3b6606eea86e6d89de5a6fd005182ae32b3;hb=refs%2Fpull%2F334%2Fhead;hpb=03c8908ec6429a67c3a8f480f1002788ff155bfb diff --git a/src/print_eth_info.c b/src/print_eth_info.c index 996ce3b..81e74a7 100644 --- a/src/print_eth_info.c +++ b/src/print_eth_info.c @@ -1,4 +1,5 @@ // vim:ts=4:sw=4:expandtab +#include #include #include #include @@ -14,7 +15,7 @@ #include "i3status.h" -#if defined(LINUX) +#if defined(__linux__) #include #include #define PART_ETHSPEED "E: %s (%d Mbit/s)" @@ -32,7 +33,7 @@ #endif static int print_eth_speed(char *outwalk, const char *interface) { -#if defined(LINUX) +#if defined(__linux__) int ethspeed = 0; struct ifreq ifr; struct ethtool_cmd ecmd; @@ -42,7 +43,7 @@ static int print_eth_speed(char *outwalk, const char *interface) { ifr.ifr_data = (caddr_t)&ecmd; (void)strcpy(ifr.ifr_name, interface); if (ioctl(general_socket, SIOCETHTOOL, &ifr) == 0) { - ethspeed = (ecmd.speed == USHRT_MAX ? 0 : ecmd.speed); + ethspeed = (ecmd.speed == USHRT_MAX ? 0 : ethtool_cmd_speed(&ecmd)); return sprintf(outwalk, "%d Mbit/s", ethspeed); } else return sprintf(outwalk, "?"); @@ -134,6 +135,8 @@ static int print_eth_speed(char *outwalk, const char *interface) { * | 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 + const char *walk; char *outwalk = buffer; @@ -157,7 +160,6 @@ void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, cons if (ipv4_address == NULL) { if (ipv6_address == NULL) { START_COLOR("color_bad"); - outwalk += sprintf(outwalk, "%s", format_down); goto out; } else { prefer_ipv4 = false; @@ -166,28 +168,36 @@ void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, cons prefer_ipv4 = false; } + format = format_up; + const char *ip_address = (prefer_ipv4) ? ipv4_address : ipv6_address; if (BEGINS_WITH(ip_address, "no IP")) { START_COLOR("color_degraded"); } else { START_COLOR("color_good"); } - for (walk = format_up; *walk != '\0'; walk++) { + +out: + for (walk = format; *walk != '\0'; walk++) { if (*walk != '%') { *(outwalk++) = *walk; - continue; - } - if (BEGINS_WITH(walk + 1, "ip")) { + } else if (BEGINS_WITH(walk + 1, "ip")) { outwalk += sprintf(outwalk, "%s", ip_address); walk += strlen("ip"); + } else if (BEGINS_WITH(walk + 1, "speed")) { outwalk += print_eth_speed(outwalk, interface); walk += strlen("speed"); + + } else if (BEGINS_WITH(walk + 1, "interface")) { + outwalk += sprintf(outwalk, "%s", interface); + walk += strlen("interface"); + + } else { + *(outwalk++) = '%'; } } - -out: END_COLOR; free(ipv4_address); free(ipv6_address);