tFix style files handling: stop leaking strings. - surf - customized build of s… | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit d84fe71094e5eb2598344da5c6a1d6f64381142c | |
parent d486169fa47c0aa2c038df81fe23232a1cefff4b | |
Author: Quentin Rameau <[email protected]> | |
Date: Sat, 31 Oct 2015 12:34:31 +0100 | |
Fix style files handling: stop leaking strings. | |
Everytime getstyle() was being called, we returned newly allocated | |
strings without ever freing them. | |
Now uri stylefiles only get allocated once at setup(). | |
Signed-off-by: Christoph Lohmann <[email protected]> | |
Diffstat: | |
M surf.c | 36 +++++++++++++++++++----------… | |
1 file changed, 22 insertions(+), 14 deletions(-) | |
--- | |
diff --git a/surf.c b/surf.c | |
t@@ -154,7 +154,7 @@ static const char *getatom(Client *c, int a); | |
static void gettogglestat(Client *c); | |
static void getpagestat(Client *c); | |
static char *geturi(Client *c); | |
-static gchar *getstyle(const char *uri); | |
+static const gchar *getstyle(const char *uri); | |
static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri); | |
t@@ -645,20 +645,21 @@ geturi(Client *c) | |
return uri; | |
} | |
-gchar * | |
+const gchar * | |
getstyle(const char *uri) | |
{ | |
int i; | |
if (stylefile != NULL) | |
- return g_strconcat("file://", stylefile, NULL); | |
+ return stylefile; | |
for (i = 0; i < LENGTH(styles); i++) { | |
if (styles[i].regex && !regexec(&(styles[i].re), uri, 0, | |
NULL, 0)) | |
- return g_strconcat("file://", styles[i].style, NULL); | |
+ return styles[i].style; | |
} | |
- return g_strdup(""); | |
+ | |
+ return ""; | |
} | |
void | |
t@@ -1285,8 +1286,8 @@ void | |
setup(void) | |
{ | |
int i; | |
- char *proxy; | |
- char *new_proxy; | |
+ char *proxy, *new_proxy; | |
+ char *styledirfile, *stylepath; | |
SoupURI *puri; | |
SoupSession *s; | |
GError *error = NULL; | |
t@@ -1306,8 +1307,8 @@ setup(void) | |
cookiefile = buildfile(cookiefile); | |
scriptfile = buildfile(scriptfile); | |
cachefolder = buildpath(cachefolder); | |
- styledir = buildpath(styledir); | |
if (stylefile == NULL) { | |
+ styledir = buildpath(styledir); | |
for (i = 0; i < LENGTH(styles); i++) { | |
if (regcomp(&(styles[i].re), styles[i].regex, | |
REG_EXTENDED)) { | |
t@@ -1316,11 +1317,19 @@ setup(void) | |
styles[i].regex); | |
styles[i].regex = NULL; | |
} | |
- styles[i].style = buildfile(g_strconcat(styledir, "/", | |
- styles[i].style, NULL)); | |
+ styledirfile = g_strconcat(styledir, "/", | |
+ styles[i].style, NULL); | |
+ stylepath = buildfile(styledirfile); | |
+ styles[i].style = g_strconcat("file://", stylepath, | |
+ NULL); | |
+ g_free(styledirfile); | |
+ g_free(stylepath); | |
} | |
+ g_free(styledir); | |
} else { | |
- stylefile = buildfile(stylefile); | |
+ stylepath = buildfile(stylefile); | |
+ stylefile = g_strconcat("file://", stylepath, NULL); | |
+ g_free(stylepath); | |
} | |
/* request handler */ | |
t@@ -1523,11 +1532,10 @@ void | |
togglestyle(Client *c, const Arg *arg) | |
{ | |
WebKitWebSettings *settings = webkit_web_view_get_settings(c->view); | |
- char *uri; | |
enablestyles = !enablestyles; | |
- uri = enablestyles ? getstyle(geturi(c)) : g_strdup(""); | |
- g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL); | |
+ g_object_set(G_OBJECT(settings), "user-stylesheet-uri", | |
+ enablestyles ? getstyle(geturi(c)) : "", NULL); | |
updatetitle(c); | |
} |