diff --git a/src/plugins/git.c b/src/plugins/git.c index 45f9638..ce613c3 100644 --- a/src/plugins/git.c +++ b/src/plugins/git.c @@ -379,13 +379,10 @@ static String * _git_get_base(Git * git, char const * filename) #ifdef DEBUG fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, filename); #endif - cur = g_path_get_dirname(filename); - for(dir = cur; string_compare(dir, ".") != 0; - dir = g_path_get_dirname(cur)) + cur = g_strdup(filename); + while(string_compare(cur, ".") != 0) { - g_free(cur); - cur = dir; - if((p = string_new_append(dir, "/.git", NULL)) == NULL) + if((p = string_new_append(cur, "/.git", NULL)) == NULL) break; res = lstat(p, &st); #ifdef DEBUG @@ -396,8 +393,11 @@ static String * _git_get_base(Git * git, char const * filename) g_free(cur); return p; } - if(string_compare(dir, "/") == 0) + if(string_compare(cur, "/") == 0) break; + dir = g_path_get_dirname(cur); + g_free(cur); + cur = dir; } g_free(cur); return NULL; diff --git a/src/plugins/subversion.c b/src/plugins/subversion.c index 14a41b4..a19d6a7 100644 --- a/src/plugins/subversion.c +++ b/src/plugins/subversion.c @@ -362,12 +362,9 @@ static String * _subversion_get_base(SVN * svn, char const * filename) #ifdef DEBUG fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, filename); #endif - cur = g_path_get_dirname(filename); - for(dir = cur; string_compare(dir, ".") != 0; - dir = g_path_get_dirname(cur)) + cur = g_strdup(filename); + while(string_compare(cur, ".") != 0) { - g_free(cur); - cur = dir; if((p = string_new_append(dir, "/.svn", NULL)) == NULL) break; res = lstat(p, &st); @@ -381,6 +378,9 @@ static String * _subversion_get_base(SVN * svn, char const * filename) } if(string_compare(dir, "/") == 0) break; + dir = g_path_get_dirname(cur); + g_free(cur); + cur = dir; } g_free(cur); return NULL;