new function psl_registered_domain()
This commit is contained in:
parent
8791ad0b9a
commit
a18777c2e3
|
@ -64,6 +64,9 @@ const psl_ctx_t *
|
||||||
psl_builtin(void);
|
psl_builtin(void);
|
||||||
int
|
int
|
||||||
psl_is_public(const psl_ctx_t *psl, const char *domain);
|
psl_is_public(const psl_ctx_t *psl, const char *domain);
|
||||||
|
// return pointer to longest registered domain within 'domain' or NULL if none found
|
||||||
|
const char *
|
||||||
|
psl_registered_domain(const psl_ctx_t *psl, const char *domain);
|
||||||
// does not include exceptions
|
// does not include exceptions
|
||||||
int
|
int
|
||||||
psl_suffix_count(const psl_ctx_t *psl);
|
psl_suffix_count(const psl_ctx_t *psl);
|
||||||
|
|
26
src/psl.c
26
src/psl.c
|
@ -299,6 +299,32 @@ int psl_is_public(const psl_ctx_t *psl, const char *domain)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// return NULL, if string domain does not contain a registered domain
|
||||||
|
// else return a pointer to the longest registered domain within 'domain'
|
||||||
|
const char *psl_registered_domain(const psl_ctx_t *psl, const char *domain)
|
||||||
|
{
|
||||||
|
const char *p, *ret_domain;
|
||||||
|
|
||||||
|
// We check from right to left, e.g. in www.xxx.org we check org, xxx.org, www.xxx.org in this order
|
||||||
|
// for being a registered domain.
|
||||||
|
|
||||||
|
if (!(p = strrchr(domain, '.')))
|
||||||
|
return psl_is_public(psl, domain) ? NULL : domain;
|
||||||
|
|
||||||
|
for (ret_domain = NULL; ;) {
|
||||||
|
if (psl_is_public(psl, p))
|
||||||
|
return ret_domain;
|
||||||
|
else if (p == domain)
|
||||||
|
return domain;
|
||||||
|
|
||||||
|
ret_domain = p + 1;
|
||||||
|
|
||||||
|
// go left to next dot
|
||||||
|
while (p > domain && *--p != '.')
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
psl_ctx_t *psl_load_file(const char *fname)
|
psl_ctx_t *psl_load_file(const char *fname)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
Loading…
Reference in New Issue