From 67203c66600113259f4f25b1021c6395f3a62dd6 Mon Sep 17 00:00:00 2001 From: Aaron Marcher Date: Wed, 8 Jun 2016 09:42:32 +0200 Subject: added ip address function --- slstatus.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'slstatus.c') diff --git a/slstatus.c b/slstatus.c index 3574468..9cd5ae2 100644 --- a/slstatus.c +++ b/slstatus.c @@ -2,8 +2,11 @@ /* global libraries */ #include +#include #include +#include #include +#include #include #include #include @@ -11,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -204,6 +208,47 @@ entropy(const char *null) return smprintf("%d", entropy); } +/* ip address */ +char * +ip(const char *interface) +{ + struct ifaddrs *ifaddr, *ifa; + int s; + char host[NI_MAXHOST]; + + /* check if getting ip address works */ + if (getifaddrs(&ifaddr) == -1) + { + fprintf(stderr, "Error getting IP address."); + return smprintf("n/a"); + } + + /* get the ip address */ + for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) + { + if (ifa->ifa_addr == NULL) + continue; + + s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); + + if ((strcmp(ifa->ifa_name, interface) == 0) && (ifa->ifa_addr->sa_family == AF_INET)) + { + if (s != 0) + { + fprintf(stderr, "Error getting IP address."); + return smprintf("n/a"); + } + return smprintf("%s", host); + } + } + + /* free the address */ + freeifaddrs(ifaddr); + + /* return n/a if nothing works */ + return smprintf("n/a"); +} + /* ram percentage */ char * ram_perc(const char *null) @@ -257,7 +302,6 @@ temp(const char *file) return smprintf("%d°C", temperature / 1000); } - /* alsa volume percentage */ char * vol_perc(const char *soundcard) -- cgit v1.2.3