aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--events.c2
-rw-r--r--uzbl-core.c15
-rw-r--r--uzbl-core.h5
3 files changed, 10 insertions, 12 deletions
diff --git a/events.c b/events.c
index abd794b..4eb774d 100644
--- a/events.c
+++ b/events.c
@@ -120,7 +120,7 @@ send_event(int type, const gchar *details, const gchar *custom_event) {
/* expand shell vars */
if(details) {
buf = g_strdup(details);
- p_val = parseenv(g_strdup(buf ? g_strchug(buf) : " "));
+ p_val = parseenv(buf ? g_strchug(buf) : " ");
g_free(buf);
}
diff --git a/uzbl-core.c b/uzbl-core.c
index 9e3d4ce..2cf5bd8 100644
--- a/uzbl-core.c
+++ b/uzbl-core.c
@@ -442,21 +442,22 @@ find_existing_file(gchar* path_list) {
}
+/* Returns a new string with environment $variables expanded */
gchar*
-parseenv (char* string) {
+parseenv (gchar* string) {
extern char** environ;
- gchar* tmpstr = NULL;
+ gchar* tmpstr = NULL, * out;
int i = 0;
+ out = g_strdup(string);
while (environ[i] != NULL) {
gchar** env = g_strsplit (environ[i], "=", 2);
gchar* envname = g_strconcat ("$", env[0], NULL);
if (g_strrstr (string, envname) != NULL) {
- tmpstr = g_strdup(string);
- g_free (string);
- string = str_replace(envname, env[1], tmpstr);
+ tmpstr = out;
+ out = str_replace(envname, env[1], out);
g_free (tmpstr);
}
@@ -465,7 +466,7 @@ parseenv (char* string) {
i++;
}
- return string;
+ return out;
}
sigfunc*
@@ -666,7 +667,7 @@ set_var(WebKitWebView *page, GArray *argv, GString *result) {
(void) page; (void) result;
gchar **split = g_strsplit(argv_idx(argv, 0), "=", 2);
if (split[0] != NULL) {
- gchar *value = parseenv(g_strdup(split[1] ? g_strchug(split[1]) : " "));
+ gchar *value = parseenv(split[1] ? g_strchug(split[1]) : " ");
set_var_value(g_strstrip(split[0]), value);
g_free(value);
}
diff --git a/uzbl-core.h b/uzbl-core.h
index a7a8126..c261074 100644
--- a/uzbl-core.h
+++ b/uzbl-core.h
@@ -231,7 +231,7 @@ GArray*
read_file_by_line (const gchar *path);
gchar*
-parseenv (char* string);
+parseenv (gchar* string);
void
clean_up(void);
@@ -242,9 +242,6 @@ catch_sigterm(int s);
sigfunc *
setup_signal(int signe, sigfunc *shandler);
-gchar*
-parseenv (char* string);
-
gboolean
set_var_value(const gchar *name, gchar *val);