Go back to the previous, faster pattern handling in adblock
This commit is contained in:
parent
b13c69a365
commit
c812efad2b
1 changed files with 12 additions and 35 deletions
|
@ -508,31 +508,10 @@ adblock_parse_line (gchar* line)
|
||||||
return adblock_fixup_regexp (line);
|
return adblock_fixup_regexp (line);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GRegex*
|
|
||||||
adblock_add_regexp (gchar *line)
|
|
||||||
{
|
|
||||||
GError* error;
|
|
||||||
GRegex* regex;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
regex = g_regex_new (line, G_REGEX_OPTIMIZE | G_REGEX_CASELESS,
|
|
||||||
G_REGEX_MATCH_NOTEMPTY, &error);
|
|
||||||
if (error)
|
|
||||||
{
|
|
||||||
g_warning ("%s: %s", G_STRFUNC, error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return regex;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GHashTable*
|
static GHashTable*
|
||||||
adblock_parse_file (gchar* path)
|
adblock_parse_file (gchar* path)
|
||||||
{
|
{
|
||||||
FILE* file;
|
FILE* file;
|
||||||
int maxlimit = 150;
|
|
||||||
int i = 0;
|
|
||||||
if ((file = g_fopen (path, "r")))
|
if ((file = g_fopen (path, "r")))
|
||||||
{
|
{
|
||||||
GHashTable* patt = g_hash_table_new_full (g_str_hash, g_str_equal,
|
GHashTable* patt = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
|
@ -541,35 +520,33 @@ adblock_parse_file (gchar* path)
|
||||||
|
|
||||||
gboolean have_pattern = FALSE;
|
gboolean have_pattern = FALSE;
|
||||||
gchar line[500];
|
gchar line[500];
|
||||||
gchar* rline = "";
|
GRegex* regex;
|
||||||
|
|
||||||
while (fgets (line, 500, file))
|
while (fgets (line, 500, file))
|
||||||
{
|
{
|
||||||
|
GError* error = NULL;
|
||||||
gchar* parsed;
|
gchar* parsed;
|
||||||
|
|
||||||
parsed = adblock_parse_line (line);
|
parsed = adblock_parse_line (line);
|
||||||
if (!parsed)
|
if (!parsed)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
i++;
|
regex = g_regex_new (parsed, G_REGEX_OPTIMIZE,
|
||||||
rline = g_strdup_printf ("%s|%s", rline, parsed);
|
G_REGEX_MATCH_NOTEMPTY, &error);
|
||||||
if (rline && *rline && i >= maxlimit)
|
if (error)
|
||||||
|
{
|
||||||
|
g_warning ("%s: %s", G_STRFUNC, error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
g_free (parsed);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
have_pattern = TRUE;
|
have_pattern = TRUE;
|
||||||
g_hash_table_insert (patt, rline, adblock_add_regexp (rline));
|
g_hash_table_insert (patt, parsed, regex);
|
||||||
rline = g_strdup ("");
|
|
||||||
i = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose (file);
|
fclose (file);
|
||||||
|
|
||||||
if (rline && *rline)
|
|
||||||
{
|
|
||||||
have_pattern = TRUE;
|
|
||||||
g_hash_table_insert (patt, rline, adblock_add_regexp (rline));
|
|
||||||
rline = g_strdup ("");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (have_pattern)
|
if (have_pattern)
|
||||||
return patt;
|
return patt;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue