DNS (Linux): parse /etc/resolv.conf directly

This commit is contained in:
李通洲
2024-06-12 15:34:27 +08:00
committed by 李通洲
parent e0910777af
commit 1c05e65bc0
2 changed files with 19 additions and 23 deletions
+2 -1
View File
@@ -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"
+17 -22
View File
@@ -1,32 +1,27 @@
#include "detection/dns/dns.h"
#include <arpa/inet.h>
#include <resolv.h>
#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;
}