| 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); | |
| } |