Module: wine Branch: refs/heads/master Commit: b9d135a37b235ac4fedc6bd1924aa7351d655b72 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b9d135a37b235ac4fedc6bd1...
Author: Mike McCormack mike@codeweavers.com Date: Fri Jan 6 12:19:22 2006 +0100
msi: Clean trailing and leading spaces from path segments.
---
dlls/msi/helpers.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/dlls/msi/helpers.c b/dlls/msi/helpers.c index 2b2ba06..ffdf3be 100644 --- a/dlls/msi/helpers.c +++ b/dlls/msi/helpers.c @@ -228,6 +228,45 @@ static LPWSTR get_source_root( MSIPACKAG return path; }
+/* + * clean_spaces_from_path() + * + * removes spaces from the beginning and end of path segments + * removes multiple \ characters + */ +static void clean_spaces_from_path( LPWSTR p ) +{ + LPWSTR q = p; + int n, len = 0; + + while (1) + { + /* copy until the end of the string or a space */ + while (*p != ' ' && (*q = *p)) + { + p++, len++; + /* reduce many backslashes to one */ + if (*p != '\' || *q != '\') + q++; + } + + /* quit at the end of the string */ + if (!*p) + break; + + /* count the number of spaces */ + n = 0; + while (p[n] == ' ') + n++; + + /* if it's leading or trailing space, skip it */ + if ( len == 0 || p[-1] == '\' || p[n] == '\' ) + p += n; + else /* copy n spaces */ + while (n && (*q++ = *p++)) n--; + } +} + LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source, BOOL set_prop, MSIFOLDER **folder) { @@ -255,6 +294,7 @@ LPWSTR resolve_folder(MSIPACKAGE *packag
/* correct misbuilt target dir */ path = build_directory_name(2, check_path, NULL); + clean_spaces_from_path( path ); if (strcmpiW(path,check_path)!=0) MSI_SetPropertyW(package,cszTargetDir,path); msi_free(check_path); @@ -307,6 +347,7 @@ LPWSTR resolve_folder(MSIPACKAGE *packag TRACE(" TargetDefault = %s\n", debugstr_w(f->TargetDefault));
path = build_directory_name( 3, p, f->TargetDefault, NULL ); + clean_spaces_from_path( path ); f->ResolvedTarget = strdupW( path ); TRACE("target -> %s\n", debugstr_w(path)); if (set_prop)