diff options
author | Rob <rob.manea@gmail.com> | 2009-12-02 09:28:36 +0100 |
---|---|---|
committer | Rob <rob.manea@gmail.com> | 2009-12-02 09:28:36 +0100 |
commit | 9b99c3c8245065fe92b90d8b9d5f78cd3044177c (patch) | |
tree | 255aee2179b08c2ae7d23a95b8c1d1d688ab167f /uzbl-core.c | |
parent | 585b542bd332284525ad5f4ce4a69b2880974a3f (diff) | |
parent | f87190c73ec06dea56a33d97019dcd661c04a57a (diff) |
Merge branch 'experimental' of git://github.com/Dieterbe/uzbl into experimental
Diffstat (limited to 'uzbl-core.c')
-rw-r--r-- | uzbl-core.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/uzbl-core.c b/uzbl-core.c index c74df19..f224c60 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -201,7 +201,7 @@ expand(const char *s, guint recurse) { GString *buf = g_string_new(""); GString *js_ret = g_string_new(""); - while(*s) { + while(s && *s) { switch(*s) { case '\\': g_string_append_c(buf, *++s); @@ -2107,8 +2107,9 @@ run_handler (const gchar *act, const gchar *args) { it still isn't perfect for chain actions.. will reconsider & re- factor when I have the time. -duc */ + if (!act) return; char **parts = g_strsplit(act, " ", 2); - if (!parts) return; + if (!parts || !parts[0]) return; if (g_strcmp0(parts[0], "chain") == 0) { GString *newargs = g_string_new(""); gchar **chainparts = split_quoted(parts[1], FALSE); @@ -2142,15 +2143,26 @@ run_handler (const gchar *act, const gchar *args) { g_strfreev(chainparts); } else { - /* expand the user-specified arguments */ - gchar* expanded = expand(parts[1], 0); - gchar **inparts = inject_handler_args(parts[0], expanded, args); + gchar **inparts; + gchar *inparts_[2]; + if (parts[1]) { + /* expand the user-specified arguments */ + gchar* expanded = expand(parts[1], 0); + inparts = inject_handler_args(parts[0], expanded, args); + g_free(expanded); + } else { + inparts_[0] = parts[0]; + inparts_[1] = g_strdup(args); + inparts = inparts_; + } parse_command(inparts[0], inparts[1], NULL); - g_free(inparts[0]); - g_free(inparts[1]); - g_free(expanded); + if (inparts != inparts_) { + g_free(inparts[0]); + g_free(inparts[1]); + } else + g_free(inparts[1]); } g_strfreev(parts); } |