From: phantomjinx <pha...@us...> - 2011-02-28 23:18:58
|
commit 2ff4ce78093641cafdfdfac47cd36b615e1d9a81 Author: phantomjinx <p.g...@ph...> Date: Mon Feb 28 23:18:11 2011 +0000 Allow different names for gtkpod directory * Releases and betas can have the version number appended to the root gtkpod directory. This breaks the code for setting local versions of the config directories. * Replaces straight string equality testing with regular expression partern matching to allow for names such as gtkpod-2.0.0 libgtkpod/directories.c | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-) --- diff --git a/libgtkpod/directories.c b/libgtkpod/directories.c index 5bcd3ca..7c0443d 100644 --- a/libgtkpod/directories.c +++ b/libgtkpod/directories.c @@ -81,11 +81,11 @@ static void debug_print_directories() { static gchar * init_dir(char *argv[], gchar *localdir, gchar *fullinstalldir) { gchar *progname; gchar *newdir = NULL; + GRegex *regex; + GMatchInfo *match_info; progname = g_find_program_in_path(argv[0]); if (progname) { - static const gchar *gtkpodSEPsrcSEP = "gtkpod" G_DIR_SEPARATOR_S "src" G_DIR_SEPARATOR_S; - if (!g_path_is_absolute(progname)) { gchar *cur_dir = g_get_current_dir(); gchar *prog_absolute; @@ -99,12 +99,22 @@ static gchar * init_dir(char *argv[], gchar *localdir, gchar *fullinstalldir) { progname = prog_absolute; } - gchar *substr = g_strrstr(progname, gtkpodSEPsrcSEP); - if (substr) { - gchar** tokens = g_strsplit(progname, substr, -1); - newdir = g_build_filename(tokens[0], "gtkpod", localdir, NULL); + static const gchar *gtkpodSEPsrcSEP = "(gtkpod[\x20-\x7E]*)([\\\\/]src[\\\\/])"; + + regex = g_regex_new (gtkpodSEPsrcSEP, 0, 0, NULL); + if (g_regex_match (regex, progname, 0, &match_info)) { + /* Find the gtkpod* parathesis pattern */ + gchar *gtkpoddir = g_match_info_fetch (match_info, 1); + + /* Get the base directory by splitting the regex on the pattern */ + gchar **tokens = g_regex_split (regex, progname, 0); + newdir = g_build_filename(tokens[0], gtkpoddir, localdir, NULL); + g_free(gtkpoddir); g_strfreev(tokens); } + + g_match_info_free (match_info); + g_regex_unref (regex); g_free(progname); if (newdir && !g_file_test(newdir, G_FILE_TEST_EXISTS)) { |