Module: wine Branch: master Commit: 4777a3a33bc3f84148da0ae9fdff43c0a5173783 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4777a3a33bc3f84148da0ae9fd...
Author: James Hawkins truiken@gmail.com Date: Sun Dec 16 20:25:49 2007 -0600
msi: Simplify ExpandAnyPath.
---
dlls/msi/appsearch.c | 49 +++++++++++++------------------------------------ 1 files changed, 13 insertions(+), 36 deletions(-)
diff --git a/dlls/msi/appsearch.c b/dlls/msi/appsearch.c index 5f5bba8..a1e6045 100644 --- a/dlls/msi/appsearch.c +++ b/dlls/msi/appsearch.c @@ -466,8 +466,7 @@ static UINT ACTION_AppSearchIni(MSIPACKAGE *package, LPWSTR *appValue, static void ACTION_ExpandAnyPath(MSIPACKAGE *package, WCHAR *src, WCHAR *dst, size_t len) { - WCHAR *ptr; - size_t copied = 0; + WCHAR *ptr, *deformatted;
if (!src || !dst || !len) { @@ -475,46 +474,24 @@ static void ACTION_ExpandAnyPath(MSIPACKAGE *package, WCHAR *src, WCHAR *dst, return; }
- /* Ignore the short portion of the path, don't think we can use it anyway */ + dst[0] = '\0'; + + /* Ignore the short portion of the path */ if ((ptr = strchrW(src, '|'))) ptr++; else ptr = src; - while (*ptr && copied < len - 1) - { - WCHAR *prop = strchrW(ptr, '['); - - if (prop) - { - WCHAR *propEnd = strchrW(prop + 1, ']'); - - if (!propEnd) - { - WARN("Unterminated property name in AnyPath: %s\n", - debugstr_w(prop)); - break; - } - else - { - DWORD propLen;
- *propEnd = 0; - propLen = len - copied - 1; - MSI_GetPropertyW(package, prop + 1, dst + copied, &propLen); - ptr = propEnd + 1; - copied += propLen; - } - } - else - { - size_t toCopy = min(strlenW(ptr) + 1, len - copied - 1); - - memcpy(dst + copied, ptr, toCopy * sizeof(WCHAR)); - ptr += toCopy; - copied += toCopy; - } + deformat_string(package, ptr, &deformatted); + if (!deformatted || lstrlenW(deformatted) > len - 1) + { + msi_free(deformatted); + return; } - *(dst + copied) = '\0'; + + lstrcpyW(dst, deformatted); + dst[lstrlenW(deformatted)] = '\0'; + msi_free(deformatted); }
/* Sets *matches to whether the file (whose path is filePath) matches the