Don't test file existence in adblock, katze_mkdir and check download status

It is enough to see if g_fopen fails, thus we don't need g_access
to test file existence additionally.

katze_mkdir_with_parents is optimized for existing folders.

We need to check the status, to see if file downloads are finished.

For Windows, we need to use g_strndup instead of strndup.
This commit is contained in:
Alexander Butenko 2009-12-21 23:57:31 +01:00 committed by Christian Dywan
parent 61266c26ec
commit 1c424106f1

View file

@ -34,7 +34,7 @@ static gchar* blockcss = NULL;
static gchar* blockcssprivate = NULL; static gchar* blockcssprivate = NULL;
static gchar* blockscript = NULL; static gchar* blockscript = NULL;
static void static gboolean
adblock_parse_file (gchar* path); adblock_parse_file (gchar* path);
static gchar* static gchar*
@ -90,8 +90,9 @@ adblock_download_notify_status_cb (WebKitDownload* download,
GParamSpec* pspec, GParamSpec* pspec,
gchar* path) gchar* path)
{ {
if (g_access (path, F_OK) != 0) if (webkit_download_get_status (download) != WEBKIT_DOWNLOAD_STATUS_FINISHED)
return; return;
adblock_parse_file (path); adblock_parse_file (path);
g_free (path); g_free (path);
/* g_object_unref (download); */ /* g_object_unref (download); */
@ -104,13 +105,14 @@ adblock_reload_rules (MidoriExtension* extension)
gchar* folder; gchar* folder;
guint i = 0; guint i = 0;
filters = midori_extension_get_string_list (extension, "filters", NULL); filters = midori_extension_get_string_list (extension, "filters", NULL);
folder = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME,
"adblock", NULL);
g_mkdir_with_parents (folder, 0700);
if (!filters) if (!filters)
return; return;
folder = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME,
"adblock", NULL);
katze_mkdir_with_parents (folder, 0700);
adblock_init_db (); adblock_init_db ();
while (filters[i++] != NULL) while (filters[i++] != NULL)
@ -118,7 +120,7 @@ adblock_reload_rules (MidoriExtension* extension)
gchar* filename = g_compute_checksum_for_string (G_CHECKSUM_MD5, gchar* filename = g_compute_checksum_for_string (G_CHECKSUM_MD5,
filters[i - 1], -1); filters[i - 1], -1);
gchar* path = g_build_filename (folder, filename, NULL); gchar* path = g_build_filename (folder, filename, NULL);
if (g_access (path, F_OK) != 0) if (!adblock_parse_file (path))
{ {
WebKitNetworkRequest* request; WebKitNetworkRequest* request;
WebKitDownload* download; WebKitDownload* download;
@ -133,10 +135,7 @@ adblock_reload_rules (MidoriExtension* extension)
webkit_download_start (download); webkit_download_start (download);
} }
else else
{
adblock_parse_file (path);
g_free (path); g_free (path);
}
g_free (filename); g_free (filename);
} }
katze_assign (blockscript, adblock_build_js (blockcss, blockcssprivate)); katze_assign (blockscript, adblock_build_js (blockcss, blockcssprivate));
@ -573,24 +572,23 @@ adblock_is_matched_by_key (const gchar* opts,
const gchar* req_uri, const gchar* req_uri,
const gchar* page_uri) const gchar* page_uri)
{ {
int pos = 0;
gchar *sig = NULL;
GRegex* regex;
gchar* uri; gchar* uri;
gint len;
int pos = 0;
uri = adblock_fixup_regexp ((gchar*)req_uri); uri = adblock_fixup_regexp ((gchar*)req_uri);
len = strlen (uri);
int len = strlen (uri); for (pos = len - SIGNATURE_SIZE; pos >= 0; pos--)
for (pos = len - SIGNATURE_SIZE; pos >= 0; pos--) { {
sig = strndup (uri+pos, SIGNATURE_SIZE); gchar* sig = g_strndup (uri + pos, SIGNATURE_SIZE);
regex = g_hash_table_lookup (keys, sig); GRegex* regex = g_hash_table_lookup (keys, sig);
if (regex) if (regex)
{ {
if (g_regex_match_full (regex, req_uri, -1, 0, 0, NULL, NULL)) if (g_regex_match_full (regex, req_uri, -1, 0, 0, NULL, NULL))
{ {
g_free (uri); g_free (uri);
g_free (sig); g_free (sig);
if (opts && adblock_check_filter_options (regex, opts, req_uri, page_uri) == TRUE) if (opts && adblock_check_filter_options (regex, opts, req_uri, page_uri))
return FALSE; return FALSE;
else else
{ {
@ -1001,23 +999,20 @@ adblock_parse_line (gchar* line)
return adblock_add_url_pattern ("%s", "uri", line); return adblock_add_url_pattern ("%s", "uri", line);
} }
static void static gboolean
adblock_parse_file (gchar* path) adblock_parse_file (gchar* path)
{ {
FILE* file; FILE* file;
gchar line[500]; gchar line[500];
gchar *out;
if ((file = g_fopen (path, "r"))) if ((file = g_fopen (path, "r")))
{ {
while (fgets (line, 500, file)) while (fgets (line, 500, file))
{ g_free (adblock_parse_line (line));
out = adblock_parse_line (line);
if (out)
g_free (out);
}
fclose (file); fclose (file);
return TRUE;
} }
return FALSE;
} }
static void static void