msi: Fix the INSTALLPROPERTY_LASTUSEDTYPE case.

This commit is contained in:
James Hawkins 2008-02-24 20:05:45 -06:00 committed by Alexandre Julliard
parent 737dedfcbb
commit 8b540d2670
3 changed files with 41 additions and 73 deletions

View File

@ -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);

View File

@ -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");

View File

@ -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");