diff --git a/.dir-locals.el b/.dir-locals.el new file mode 100644 index 0000000..9b28057 --- /dev/null +++ b/.dir-locals.el @@ -0,0 +1,9 @@ +;; emacs local configuration settings for libpsl source +;; surmised by dkg on 2014-03-21 14:35:49-0400 + +((c-mode + (indent-tabs-mode . t) + (tab-width . 4) + (c-basic-offset . 4) + (c-file-style . "linux")) + ) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..de162c9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +*~ +Makefile +Makefile.in +aclocal.m4 +autom4te.cache/ +compile +config.guess +config.h +config.h.in +config.log +config.rpath +config.status +config.sub +configure +data/Makefile +data/Makefile.in +depcomp +include/Makefile +include/Makefile.in +install-sh +libpsl-*.pc +libtool +ltmain.sh +m4/ +missing +po/Makefile +po/Makefile.in +po/Makefile.in.in +po/Makevars.template +po/POTFILES +po/Rules-quot +po/boldquot.sed +po/en@boldquot.header +po/en@quot.header +po/insert-header.sin +po/psl.pot +po/quot.sed +po/remove-potcdate.sin +po/remove-potcdate.sed +po/stamp-po +src/.deps/ +src/.libs/ +src/Makefile +src/Makefile.in +src/libpsl-*.la +src/libpsl_*_la-psl.lo +stamp-h1 +test-driver +tests/.deps/ +tests/Makefile +tests/Makefile.in +tests/test-is-tld +tests/test-is-tld.log +tests/test-is-tld.o +tests/test-is-tld.trs +tests/test-suite.log +psl-*.tar.gz diff --git a/include/libpsl.h b/include/libpsl.h index fd2a404..9a7c934 100644 --- a/include/libpsl.h +++ b/include/libpsl.h @@ -55,6 +55,14 @@ psl_ctx_t * int psl_is_tld(const psl_ctx_t *psl, const char *domain); +/* does not include exceptions */ +int + psl_suffix_count(const psl_ctx_t *psl); +/* just counts exceptions */ +int + psl_suffix_exception_count(const psl_ctx_t *psl); + + PSL_END_DECLS #endif /* _LIBPSL_LIBPSL_H */ diff --git a/src/psl.c b/src/psl.c index c011137..88ccc9e 100644 --- a/src/psl.c +++ b/src/psl.c @@ -275,13 +275,13 @@ psl_ctx_t *psl_load_file(const char *fname) if (!(psl = calloc(1, sizeof(psl_ctx_t)))) return NULL; - // as of 02.11.2012, the list at http://publicsuffix.org/list/ contains ~6000 rules and 40 exceptions. - // as of 19.02.2014, the list at http://publicsuffix.org/list/ contains ~6500 rules and 19 exceptions. - psl->suffixes = _vector_alloc(8*1024, _suffix_compare); - psl->suffix_exceptions = _vector_alloc(64, _suffix_compare); - if ((fp = fopen(fname, "r"))) { - while ((linep = fgets(&buf, sizeof(buf), fp))) { + // as of 02.11.2012, the list at http://publicsuffix.org/list/ contains ~6000 rules and 40 exceptions. + // as of 19.02.2014, the list at http://publicsuffix.org/list/ contains ~6500 rules and 19 exceptions. + psl->suffixes = _vector_alloc(8*1024, _suffix_compare); + psl->suffix_exceptions = _vector_alloc(64, _suffix_compare); + + while ((linep = fgets(buf, sizeof(buf), fp))) { while (isspace(*linep)) linep++; // ignore leading whitespace if (!*linep) continue; // skip empty lines @@ -312,14 +312,27 @@ psl_ctx_t *psl_load_file(const char *fname) _vector_sort(psl->suffix_exceptions); _vector_sort(psl->suffixes); - printf("loaded %d (%d/%d) suffixes\n", nsuffixes, psl->suffixes->cur, psl->suffix_exceptions->cur); - - } else - fprintf(stderr, _("Failed to open PSL file '%s'\n"), fname); + } else { + free(psl); + return NULL; + } return psl; } + +/* does not include exceptions */ +int psl_suffix_count(const psl_ctx_t *psl) +{ + return psl->suffixes->cur; +} +/* just counts exceptions */ +int psl_suffix_exception_count(const psl_ctx_t *psl) +{ + return psl->suffix_exceptions->cur; +} + + void psl_free(psl_ctx_t **psl) { if (psl && *psl) { diff --git a/tests/test-is-tld.c b/tests/test-is-tld.c index 0f63b9b..1868af0 100644 --- a/tests/test-is-tld.c +++ b/tests/test-is-tld.c @@ -64,6 +64,9 @@ static void test_psl(void) psl = psl_load_file(DATADIR "/effective_tld_names.dat"); + printf("loaded %d suffixes and %d exceptions\n", psl_suffix_count(psl), psl_suffix_exception_count(psl)); + + for (it = 0; it < countof(test_data); it++) { const struct test_data *t = &test_data[it]; int result = psl_is_tld(psl, t->domain);