diff options
| author | SpiritCroc <dev@spiritcroc.de> | 2020-09-17 16:21:14 +0200 |
|---|---|---|
| committer | Julian Veit <claymore1298@gmail.com> | 2025-10-14 14:22:37 +0000 |
| commit | bdb8b8768fb6d05bfcb04c03890ba14199cf3069 (patch) | |
| tree | a92dad51cde33d6bb8903c43666af0873ddfb194 /hosts_cache.cpp | |
| parent | 0581772f0548c4a17aaec5f3837fb97a2438af43 (diff) | |
DnsResolver: Make hosts cache respect toggle-able adblock filew16.0
Restore behaviour of
DnsResolver: Toggle-able adblock hosts file [1/3]
after
DnsResolver: Sort and cache hosts file data for fast lookup
Change-Id: I23e41b2fffa9415025ca9a2c7afcdea31d1b2461
Diffstat (limited to 'hosts_cache.cpp')
| -rw-r--r-- | hosts_cache.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/hosts_cache.cpp b/hosts_cache.cpp index 5a759698..665deb86 100644 --- a/hosts_cache.cpp +++ b/hosts_cache.cpp @@ -38,6 +38,8 @@ #include "hostent.h" #include "resolv_private.h" +#include "gethostsfile.h" + constexpr int MAXALIASES = 35; constexpr int MAXADDRS = 35; @@ -67,6 +69,7 @@ struct hcfile int h_fd; struct stat h_st; char* h_data; + const char* h_path; uint32_t c_alloc; uint32_t c_len; @@ -219,8 +222,10 @@ static int _hcfilemmap(void) char *h_addr; const char *p, *pend; uint32_t c_alloc; + const char *h_path; - h_fd = open(_PATH_HOSTS, O_CLOEXEC); + h_path = gethostsfile(); + h_fd = open(h_path, O_CLOEXEC); if (h_fd < 0) return -1; if (flock(h_fd, LOCK_EX) != 0) { @@ -231,7 +236,8 @@ static int _hcfilemmap(void) if (hcfile.h_data) { memset(&st, 0, sizeof(st)); if (fstat(h_fd, &st) == 0) { - if (st.st_size == hcfile.h_st.st_size && + if (strcmp(h_path, hcfile.h_path) == 0 && + st.st_size == hcfile.h_st.st_size && st.st_mtime == hcfile.h_st.st_mtime) { flock(h_fd, LOCK_UN); close(h_fd); @@ -259,6 +265,7 @@ static int _hcfilemmap(void) hcfile.h_fd = h_fd; hcfile.h_st = st; hcfile.h_data = h_addr; + hcfile.h_path = h_path; c_alloc = 0; /* |
