diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d81d21e5..35a092ca7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -489,7 +489,7 @@ elseif(ANDROID) src/detection/cursor/cursor_nosupport.c src/detection/cpuusage/cpuusage_linux.c src/detection/disk/disk_linux.c - src/detection/dns/dns_nosupport.c + src/detection/dns/dns_linux.c src/detection/physicaldisk/physicaldisk_linux.c src/detection/physicalmemory/physicalmemory_nosupport.c src/detection/diskio/diskio_linux.c @@ -1007,6 +1007,7 @@ if(LINUX) ) elseif(APPLE) target_link_libraries(libfastfetch + PRIVATE "resolv" PRIVATE "-framework AVFoundation" PRIVATE "-framework Cocoa" PRIVATE "-framework CoreFoundation" diff --git a/src/detection/dns/dns_linux.c b/src/detection/dns/dns_linux.c index 7e78c289f..d26acd197 100644 --- a/src/detection/dns/dns_linux.c +++ b/src/detection/dns/dns_linux.c @@ -1,32 +1,27 @@ #include "detection/dns/dns.h" -#include -#include +#include "common/io/io.h" +#include "util/mallocHelper.h" +#include "util/stringUtils.h" const char* ffDetectDNS(FFlist* results) { - if (res_init() < 0) - return "res_init() failed"; + FF_AUTO_CLOSE_FILE FILE* file = fopen(FASTFETCH_TARGET_DIR_ROOT "/etc/resolv.conf", "r"); + if (!file) + return "fopen (" FASTFETCH_TARGET_DIR_ROOT "/etc/resolv.conf) failed"; - for (int i = 0; i < _res.nscount; ++i) + FF_AUTO_FREE char* line = NULL; + size_t len = 0; + + while (getline(&line, &len, file) != -1) { - struct sockaddr_in* addr = &_res.nsaddr_list[i]; - char addressBuffer[INET_ADDRSTRLEN + 4]; - inet_ntop(AF_INET, &addr->sin_addr, addressBuffer, INET_ADDRSTRLEN); - - FFstrbuf* result = (FFstrbuf*) ffListAdd(results); - ffStrbufInitS(result, addressBuffer); + if (ffStrStartsWith(line, "nameserver ")) + { + FFstrbuf* item = (FFstrbuf*) ffListAdd(results); + ffStrbufInitS(item, line + strlen("nameserver ")); + ffStrbufTrimRightSpace(item); + ffStrbufTrimLeft(item, ' '); + } } - - for (int i = 0; i < _res._u._ext.nscount; ++i) - { - struct sockaddr_in6* addr = _res._u._ext.nsaddrs[i]; - char addressBuffer[INET6_ADDRSTRLEN + 4]; - inet_ntop(AF_INET6, &addr->sin6_addr, addressBuffer, INET6_ADDRSTRLEN); - - FFstrbuf* result = (FFstrbuf*) ffListAdd(results); - ffStrbufInitS(result, addressBuffer); - } - return NULL; }