]> Dogcows Code - chaz/openbox/commitdiff
Don't replace ~ when we shouldn't
authorMikael Magnusson <mikachu@gmail.com>
Sun, 5 Jul 2009 18:51:04 +0000 (20:51 +0200)
committerMikael Magnusson <mikachu@gmail.com>
Sun, 5 Jul 2009 18:51:04 +0000 (20:51 +0200)
Bump glib req to 2.14 to get GRegex, now we only replace ~ with your
homedir in an action if it is (at the start of the string or preceded
by whitespace) and (at the end of the string or followed by (whitespace
or a slash)). (?:^|(?<=[ \t]))~(?=[/ \t$])

Fixes bug #4033.

configure.ac
parser/parse.c

index 53e50013683365eb030912601724f9605f47087b..bba1b5c605674fbf10ad37b50e82ee7b14ad69c2 100644 (file)
@@ -70,7 +70,7 @@ if test "$SED" = "no"; then
   AC_MSG_ERROR([The program "sed" is not available. This program is required to build Openbox.])
 fi
 
-PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.6.0])
+PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.14.0])
 AC_SUBST(GLIB_CFLAGS)
 AC_SUBST(GLIB_LIBS)
 
index 636b451f2b5d3a937b76279ebdf971bc3b767655..ed66f088f6ba33f715b805fce01a25e5123a427e 100644 (file)
@@ -456,14 +456,16 @@ void parse_paths_shutdown(void)
 
 gchar *parse_expand_tilde(const gchar *f)
 {
-    gchar **spl;
     gchar *ret;
+    GRegex *regex;
 
     if (!f)
         return NULL;
-    spl = g_strsplit(f, "~", 0);
-    ret = g_strjoinv(g_get_home_dir(), spl);
-    g_strfreev(spl);
+
+    regex = g_regex_new("(?:^|(?<=[ \\t]))~(?=[/ \\t$])", G_REGEX_MULTILINE | G_REGEX_RAW, 0, NULL);
+    ret = g_regex_replace_literal(regex, f, -1, 0, g_get_home_dir(), 0, NULL);
+    g_regex_unref(regex);
+
     return ret;
 }
 
This page took 0.025674 seconds and 4 git commands to generate.