msi: Simplify ExpandAnyPath.

This commit is contained in:
James Hawkins 2007-12-16 20:25:49 -06:00 committed by Alexandre Julliard
parent ce6e84c071
commit 4777a3a33b
1 changed files with 13 additions and 36 deletions

View File

@ -466,8 +466,7 @@ static UINT ACTION_AppSearchIni(MSIPACKAGE *package, LPWSTR *appValue,
static void ACTION_ExpandAnyPath(MSIPACKAGE *package, WCHAR *src, WCHAR *dst, static void ACTION_ExpandAnyPath(MSIPACKAGE *package, WCHAR *src, WCHAR *dst,
size_t len) size_t len)
{ {
WCHAR *ptr; WCHAR *ptr, *deformatted;
size_t copied = 0;
if (!src || !dst || !len) if (!src || !dst || !len)
{ {
@ -475,46 +474,24 @@ static void ACTION_ExpandAnyPath(MSIPACKAGE *package, WCHAR *src, WCHAR *dst,
return; 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, '|'))) if ((ptr = strchrW(src, '|')))
ptr++; ptr++;
else else
ptr = src; ptr = src;
while (*ptr && copied < len - 1)
deformat_string(package, ptr, &deformatted);
if (!deformatted || lstrlenW(deformatted) > len - 1)
{ {
WCHAR *prop = strchrW(ptr, '['); msi_free(deformatted);
return;
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;
}
} }
*(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 /* Sets *matches to whether the file (whose path is filePath) matches the