Don't replace ~ when we shouldn't
authorMikael Magnusson <mikachu@gmail.com>
Sun, 5 Jul 2009 18:47:33 +0000 (20:47 +0200)
committerMikael Magnusson <mikachu@gmail.com>
Sun, 5 Jul 2009 18:47:35 +0000 (20:47 +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$])

configure.ac
obt/paths.c

index b96681a..0c083a5 100644 (file)
@@ -94,7 +94,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 6100499..6861543 100644 (file)
@@ -169,14 +169,16 @@ void obt_paths_unref(ObtPaths *p)
 
 gchar *obt_paths_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;
 }