From 0694e2e0cf951049b5c268e359c35158277cf7c2 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Thu, 21 Aug 2008 21:27:42 +0200 Subject: Always canonicalize paths when adding items (avoid blank directory names) --- common/strutils.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'common/strutils.c') diff --git a/common/strutils.c b/common/strutils.c index 5d9fa65..47494de 100644 --- a/common/strutils.c +++ b/common/strutils.c @@ -100,15 +100,16 @@ char* extract_file_path(const char *APath) // canonicalize_filename() is stolen from glib-2.16 // Copyright (C) 2006-2007 Alexander Larsson -static char * +char * canonicalize_filename (const char *filename) { char *canon, *start, *p, *q; int i; - + canon = g_strdup (filename); start = (char *)g_path_skip_root (canon); + if (start == NULL) start = canon; /* POSIX allows double slashes at the start to * mean something special (as does windows too). @@ -127,7 +128,7 @@ canonicalize_filename (const char *filename) start -= i; memmove (start, start+i, strlen (start+i)+1); } - + p = start; while (*p != 0) { @@ -153,7 +154,7 @@ canonicalize_filename (const char *filename) /* Skip until next separator */ while (*p != 0 && !G_IS_DIR_SEPARATOR (*p)) p++; - + if (*p != 0) { /* Canonicalize one separator */ @@ -173,7 +174,7 @@ canonicalize_filename (const char *filename) /* Remove trailing slashes */ if (p > start && G_IS_DIR_SEPARATOR (*(p-1))) *(p-1) = 0; - + return canon; } @@ -183,12 +184,12 @@ char* resolve_relative(const char *source, const char *point_to) if (source == NULL) return NULL; if (point_to == NULL) return strdup(source); if (g_path_is_absolute(point_to)) return strdup(point_to); - + char *rel = g_build_filename(source, point_to, NULL); log("resolve_relative: rel = '%s'\n", rel); char *canon = canonicalize_filename(rel); log("resolve_relative: canon = '%s'\n", canon); free(rel); - - return canon; + + return canon; } -- cgit v1.2.3