msi: Fix the INSTALLPROPERTY_LASTUSEDTYPE case.
This commit is contained in:
parent
737dedfcbb
commit
8b540d2670
|
@ -402,7 +402,8 @@ UINT WINAPI MsiSourceListGetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
|
||||||
RegQueryValueExW(media, szProperty, 0, 0, (LPBYTE)szValue, pcchValue);
|
RegQueryValueExW(media, szProperty, 0, 0, (LPBYTE)szValue, pcchValue);
|
||||||
RegCloseKey(media);
|
RegCloseKey(media);
|
||||||
}
|
}
|
||||||
else if (!lstrcmpW(szProperty, INSTALLPROPERTY_LASTUSEDSOURCEW))
|
else if (!lstrcmpW(szProperty, INSTALLPROPERTY_LASTUSEDSOURCEW) ||
|
||||||
|
!lstrcmpW(szProperty, INSTALLPROPERTY_LASTUSEDTYPEW))
|
||||||
{
|
{
|
||||||
rc = RegQueryValueExW(sourcekey, INSTALLPROPERTY_LASTUSEDSOURCEW,
|
rc = RegQueryValueExW(sourcekey, INSTALLPROPERTY_LASTUSEDSOURCEW,
|
||||||
0, 0, NULL, &size);
|
0, 0, NULL, &size);
|
||||||
|
@ -423,11 +424,26 @@ UINT WINAPI MsiSourceListGetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr = strrchrW(source, ';');
|
if (!lstrcmpW(szProperty, INSTALLPROPERTY_LASTUSEDTYPEW))
|
||||||
if (!ptr)
|
{
|
||||||
|
if (*source != 'n' && *source != 'u' && *source != 'm')
|
||||||
|
{
|
||||||
|
msi_free(source);
|
||||||
|
RegCloseKey(sourcekey);
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
ptr = source;
|
ptr = source;
|
||||||
|
source[1] = '\0';
|
||||||
|
}
|
||||||
else
|
else
|
||||||
ptr++;
|
{
|
||||||
|
ptr = strrchrW(source, ';');
|
||||||
|
if (!ptr)
|
||||||
|
ptr = source;
|
||||||
|
else
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
|
||||||
if (szValue)
|
if (szValue)
|
||||||
{
|
{
|
||||||
|
@ -440,33 +456,6 @@ UINT WINAPI MsiSourceListGetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
|
||||||
*pcchValue = lstrlenW(ptr);
|
*pcchValue = lstrlenW(ptr);
|
||||||
msi_free(source);
|
msi_free(source);
|
||||||
}
|
}
|
||||||
else if (strcmpW(INSTALLPROPERTY_LASTUSEDTYPEW, szProperty)==0)
|
|
||||||
{
|
|
||||||
LPWSTR buffer;
|
|
||||||
DWORD size = 0;
|
|
||||||
|
|
||||||
RegQueryValueExW(sourcekey, INSTALLPROPERTY_LASTUSEDSOURCEW, 0, 0,
|
|
||||||
NULL, &size);
|
|
||||||
if (size == 0)
|
|
||||||
rc = ERROR_UNKNOWN_PROPERTY;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buffer = msi_alloc(size);
|
|
||||||
rc = RegQueryValueExW(sourcekey, INSTALLPROPERTY_LASTUSEDSOURCEW,
|
|
||||||
0, 0, (LPBYTE)buffer,&size);
|
|
||||||
if (*pcchValue < 1)
|
|
||||||
{
|
|
||||||
rc = ERROR_MORE_DATA;
|
|
||||||
*pcchValue = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
szValue[0] = buffer[0];
|
|
||||||
rc = ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
msi_free(buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (strcmpW(INSTALLPROPERTY_PACKAGENAMEW, szProperty)==0)
|
else if (strcmpW(INSTALLPROPERTY_PACKAGENAMEW, szProperty)==0)
|
||||||
{
|
{
|
||||||
*pcchValue = *pcchValue * sizeof(WCHAR);
|
*pcchValue = *pcchValue * sizeof(WCHAR);
|
||||||
|
|
|
@ -3025,12 +3025,9 @@ static void test_publishsourcelist(void)
|
||||||
lstrcpyA(value, "aaa");
|
lstrcpyA(value, "aaa");
|
||||||
r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED,
|
r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||||
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE, value, &size);
|
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE, value, &size);
|
||||||
todo_wine
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
{
|
ok(!lstrcmpA(value, "n"), "Expected \"n\", got \"%s\"\n", value);
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(size == 1, "Expected 1, got %d\n", size);
|
||||||
ok(!lstrcmpA(value, "n"), "Expected \"n\", got \"%s\"\n", value);
|
|
||||||
ok(size == 1, "Expected 1, got %d\n", size);
|
|
||||||
}
|
|
||||||
|
|
||||||
size = MAX_PATH;
|
size = MAX_PATH;
|
||||||
lstrcpyA(value, "aaa");
|
lstrcpyA(value, "aaa");
|
||||||
|
|
|
@ -454,12 +454,9 @@ static void test_MsiSourceListGetInfo(void)
|
||||||
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||||
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
||||||
value, &size);
|
value, &size);
|
||||||
todo_wine
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
{
|
ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value);
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(size == 0, "Expected 0, got %d\n", size);
|
||||||
ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value);
|
|
||||||
ok(size == 0, "Expected 0, got %d\n", size);
|
|
||||||
}
|
|
||||||
|
|
||||||
data = "x;y;z";
|
data = "x;y;z";
|
||||||
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
||||||
|
@ -471,12 +468,9 @@ static void test_MsiSourceListGetInfo(void)
|
||||||
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||||
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
||||||
value, &size);
|
value, &size);
|
||||||
todo_wine
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
{
|
ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value);
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(size == 0, "Expected 0, got %d\n", size);
|
||||||
ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value);
|
|
||||||
ok(size == 0, "Expected 0, got %d\n", size);
|
|
||||||
}
|
|
||||||
|
|
||||||
data = "n;y;z";
|
data = "n;y;z";
|
||||||
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
||||||
|
@ -488,12 +482,9 @@ static void test_MsiSourceListGetInfo(void)
|
||||||
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||||
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
||||||
value, &size);
|
value, &size);
|
||||||
todo_wine
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
{
|
ok(!lstrcmpA(value, "n"), "Expected \"n\", got \"%s\"\n", value);
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(size == 1, "Expected 1, got %d\n", size);
|
||||||
ok(!lstrcmpA(value, "n"), "Expected \"n\", got \"%s\"\n", value);
|
|
||||||
ok(size == 1, "Expected 1, got %d\n", size);
|
|
||||||
}
|
|
||||||
|
|
||||||
data = "negatory";
|
data = "negatory";
|
||||||
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
||||||
|
@ -505,12 +496,9 @@ static void test_MsiSourceListGetInfo(void)
|
||||||
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||||
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
||||||
value, &size);
|
value, &size);
|
||||||
todo_wine
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
{
|
ok(!lstrcmpA(value, "n"), "Expected \"n\", got \"%s\"\n", value);
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(size == 1, "Expected 1, got %d\n", size);
|
||||||
ok(!lstrcmpA(value, "n"), "Expected \"n\", got \"%s\"\n", value);
|
|
||||||
ok(size == 1, "Expected 1, got %d\n", size);
|
|
||||||
}
|
|
||||||
|
|
||||||
data = "megatron";
|
data = "megatron";
|
||||||
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
||||||
|
@ -522,12 +510,9 @@ static void test_MsiSourceListGetInfo(void)
|
||||||
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||||
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
||||||
value, &size);
|
value, &size);
|
||||||
todo_wine
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
{
|
ok(!lstrcmpA(value, "m"), "Expected \"m\", got \"%s\"\n", value);
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(size == 1, "Expected 1, got %d\n", size);
|
||||||
ok(!lstrcmpA(value, "m"), "Expected \"m\", got \"%s\"\n", value);
|
|
||||||
ok(size == 1, "Expected 1, got %d\n", size);
|
|
||||||
}
|
|
||||||
|
|
||||||
data = "useless";
|
data = "useless";
|
||||||
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ,
|
||||||
|
@ -539,12 +524,9 @@ static void test_MsiSourceListGetInfo(void)
|
||||||
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||||
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE,
|
||||||
value, &size);
|
value, &size);
|
||||||
todo_wine
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
{
|
ok(!lstrcmpA(value, "u"), "Expected \"u\", got \"%s\"\n", value);
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(size == 1, "Expected 1, got %d\n", size);
|
||||||
ok(!lstrcmpA(value, "u"), "Expected \"u\", got \"%s\"\n", value);
|
|
||||||
ok(size == 1, "Expected 1, got %d\n", size);
|
|
||||||
}
|
|
||||||
|
|
||||||
RegDeleteValueA(media, "MediaPackage");
|
RegDeleteValueA(media, "MediaPackage");
|
||||||
RegDeleteValueA(media, "DiskPrompt");
|
RegDeleteValueA(media, "DiskPrompt");
|
||||||
|
|
Loading…
Reference in New Issue