James Hawkins : setupapi: Handle the INFINFO_INF_NAME_IS_ABSOLUTE and
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Feb 14 07:28:22 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 202942de611b068c5d6ac884de4164e48e79f37a
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=202942de611b068c5d6ac884de4164e48e79f37a
Author: James Hawkins <truiken at gmail.com>
Date: Tue Feb 14 12:23:29 2006 +0100
setupapi: Handle the INFINFO_INF_NAME_IS_ABSOLUTE and
INFINFO_DEFAULT_SEARCH search flags.
---
dlls/setupapi/query.c | 48 ++++++++++++++++++++++++++++++-------------
dlls/setupapi/tests/query.c | 42 +++++++++++---------------------------
2 files changed, 45 insertions(+), 45 deletions(-)
diff --git a/dlls/setupapi/query.c b/dlls/setupapi/query.c
index 79d068c..1f4478e 100644
--- a/dlls/setupapi/query.c
+++ b/dlls/setupapi/query.c
@@ -98,12 +98,13 @@ BOOL WINAPI SetupGetInfInformationW(LPCV
PSP_INF_INFORMATION ReturnBuffer,
DWORD ReturnBufferSize, PDWORD RequiredSize)
{
- HINF inf = (HINF)InfSpec;
+ HINF inf;
+ BOOL ret;
TRACE("(%p, %ld, %p, %ld, %p)\n", InfSpec, SearchControl, ReturnBuffer,
ReturnBufferSize, RequiredSize);
- if (!inf)
+ if (!InfSpec)
{
if (SearchControl == INFINFO_INF_SPEC_IS_HINF)
SetLastError(ERROR_INVALID_HANDLE);
@@ -113,30 +114,47 @@ BOOL WINAPI SetupGetInfInformationW(LPCV
return FALSE;
}
- if (inf == INVALID_HANDLE_VALUE)
- {
- SetLastError(ERROR_FILE_NOT_FOUND);
- return FALSE;
- }
-
- if (SearchControl < INFINFO_INF_SPEC_IS_HINF ||
- SearchControl > INFINFO_INF_PATH_LIST_SEARCH)
+ if (!ReturnBuffer && ReturnBufferSize)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
- if (SearchControl != INFINFO_INF_SPEC_IS_HINF)
+ switch (SearchControl)
{
- FIXME("Unhandled search control: %ld\n", SearchControl);
+ case INFINFO_INF_SPEC_IS_HINF:
+ inf = (HINF)InfSpec;
+ break;
+ case INFINFO_INF_NAME_IS_ABSOLUTE:
+ case INFINFO_DEFAULT_SEARCH:
+ inf = SetupOpenInfFileW(InfSpec, NULL,
+ INF_STYLE_OLDNT | INF_STYLE_WIN4, NULL);
+ break;
+ case INFINFO_REVERSE_DEFAULT_SEARCH:
+ case INFINFO_INF_PATH_LIST_SEARCH:
+ FIXME("Unhandled search control: %ld\n", SearchControl);
- if (RequiredSize)
- *RequiredSize = 0;
+ if (RequiredSize)
+ *RequiredSize = 0;
+
+ return FALSE;
+ default:
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+ if (inf == INVALID_HANDLE_VALUE)
+ {
+ SetLastError(ERROR_FILE_NOT_FOUND);
return FALSE;
}
- return fill_inf_info(inf, ReturnBuffer, ReturnBufferSize, RequiredSize);
+ ret = fill_inf_info(inf, ReturnBuffer, ReturnBufferSize, RequiredSize);
+
+ if (SearchControl >= INFINFO_INF_NAME_IS_ABSOLUTE)
+ SetupCloseInfFile(inf);
+
+ return ret;
}
/***********************************************************************
diff --git a/dlls/setupapi/tests/query.c b/dlls/setupapi/tests/query.c
index e46177e..c5581f8 100644
--- a/dlls/setupapi/tests/query.c
+++ b/dlls/setupapi/tests/query.c
@@ -167,31 +167,22 @@ static void test_SetupGetInfInformation(
SetLastError(0xbeefcafe);
ret = pSetupGetInfInformationA("idontexist", INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, &size);
ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n");
- todo_wine
- {
- ok(GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %ld\n", GetLastError());
- ok(size == 0xdeadbeef, "Expected size to remain unchanged\n");
- }
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+ "Expected ERROR_FILE_NOT_FOUND, got %ld\n", GetLastError());
+ ok(size == 0xdeadbeef, "Expected size to remain unchanged\n");
/* successfully open the inf file */
size = 0xdeadbeef;
ret = pSetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, &size);
- todo_wine
- {
- ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
- }
+ ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
ok(size != 0xdeadbeef, "Expected a valid size on return\n");
/* set ReturnBuffer to NULL and ReturnBufferSize to non-zero */
SetLastError(0xbeefcafe);
ret = pSetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, size, &size);
ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n");
- todo_wine
- {
- ok(GetLastError() == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError());
- }
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError());
info = HeapAlloc(GetProcessHeap(), 0, size);
@@ -199,19 +190,13 @@ static void test_SetupGetInfInformation(
SetLastError(0xbeefcafe);
ret = pSetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, info, size - 1, &size);
ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n");
- todo_wine
- {
- ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
- "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n", GetLastError());
- }
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+ "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n", GetLastError());
/* successfully get the inf information */
ret = pSetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, info, size, &size);
- todo_wine
- {
- ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
- ok(check_info_filename(info, inf_filename), "Expected returned filename to be equal\n");
- }
+ ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
+ ok(check_info_filename(info, inf_filename), "Expected returned filename to be equal\n");
HeapFree(GetProcessHeap(), 0, info);
@@ -238,11 +223,8 @@ static void test_SetupGetInfInformation(
/* test the INFINFO_DEFAULT_SEARCH search flag */
ret = pSetupGetInfInformationA("test.inf", INFINFO_DEFAULT_SEARCH, info, size, &size);
- todo_wine
- {
- ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
- ok(check_info_filename(info, inf_one), "Expected returned filename to be equal\n");
- }
+ ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
+ ok(check_info_filename(info, inf_one), "Expected returned filename to be equal\n");
HeapFree(GetProcessHeap(), 0, info);
info = alloc_inf_info("test.inf", INFINFO_REVERSE_DEFAULT_SEARCH, &size);
More information about the wine-cvs
mailing list