aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpiritCroc <dev@spiritcroc.de>2020-09-17 16:21:14 +0200
committerGeorge Zacharia <george.zcharia@gmail.com>2024-06-01 20:21:07 +0530
commit31fe821335034ba4fb29953fe77395c804e51a33 (patch)
treeb15a5f47f4569da0bffc119399dc54a9d37aacd3
parentbacc24e67ba66ceb9a1cc70035a08b97f04bdd5f (diff)
DnsResolver: Make hosts cache respect toggle-able adblock file
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
-rw-r--r--hosts_cache.cpp11
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;
/*