My slstatus configuration
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

58 satır
1.1 KiB

  1. /* See LICENSE file for copyright and license details. */
  2. #include <ifaddrs.h>
  3. #include <netdb.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #if defined(__OpenBSD__)
  7. #include <sys/types.h>
  8. #include <sys/socket.h>
  9. #endif
  10. #include "../util.h"
  11. static const char *
  12. ip(const char *interface, unsigned short sa_family)
  13. {
  14. struct ifaddrs *ifaddr, *ifa;
  15. int s;
  16. char host[NI_MAXHOST];
  17. if (getifaddrs(&ifaddr) < 0) {
  18. warn("getifaddrs:");
  19. return NULL;
  20. }
  21. for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
  22. if (!ifa->ifa_addr) {
  23. continue;
  24. }
  25. s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in6),
  26. host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
  27. if (!strcmp(ifa->ifa_name, interface) &&
  28. (ifa->ifa_addr->sa_family == sa_family)) {
  29. freeifaddrs(ifaddr);
  30. if (s != 0) {
  31. warn("getnameinfo: %s", gai_strerror(s));
  32. return NULL;
  33. }
  34. return bprintf("%s", host);
  35. }
  36. }
  37. freeifaddrs(ifaddr);
  38. return NULL;
  39. }
  40. const char *
  41. ipv4(const char *interface)
  42. {
  43. return ip(interface, AF_INET);
  44. }
  45. const char *
  46. ipv6(const char *interface)
  47. {
  48. return ip(interface, AF_INET6);
  49. }