From eeba3408b2982100ddf1cc039d58b7f4a2d903e7 Mon Sep 17 00:00:00 2001 From: Gregor Schneider Date: Sun, 29 Nov 2009 18:07:14 +0000 Subject: [PATCH] [setupapi] Sync SetupGetIntField to Wine, fixes six setupapi:parser tests svn path=/trunk/; revision=44322 --- reactos/dll/win32/setupapi/parser.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/setupapi/parser.c b/reactos/dll/win32/setupapi/parser.c index 43a43fba36f..e1b693ddaec 100644 --- a/reactos/dll/win32/setupapi/parser.c +++ b/reactos/dll/win32/setupapi/parser.c @@ -1894,21 +1894,26 @@ BOOL WINAPI SetupGetIntField( PINFCONTEXT context, DWORD index, PINT result ) char *end, *buffer = localbuff; DWORD required; INT res; - BOOL ret = FALSE; + BOOL ret; - if (!SetupGetStringFieldA( context, index, localbuff, sizeof(localbuff), &required )) + if (!(ret = SetupGetStringFieldA( context, index, localbuff, sizeof(localbuff), &required ))) { if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) return FALSE; if (!(buffer = HeapAlloc( GetProcessHeap(), 0, required ))) return FALSE; - if (!SetupGetStringFieldA( context, index, buffer, required, NULL )) goto done; + if (!(ret = SetupGetStringFieldA( context, index, buffer, required, NULL ))) goto done; } - res = strtol( buffer, &end, 0 ); - if (end != buffer && !*end) + /* The call to SetupGetStringFieldA succeeded. If buffer is empty we have an optional field */ + if (!*buffer) *result = 0; + else { - *result = res; - ret = TRUE; + res = strtol( buffer, &end, 0 ); + if (end != buffer && !*end) *result = res; + else + { + SetLastError( ERROR_INVALID_DATA ); + ret = FALSE; + } } - else SetLastError( ERROR_INVALID_DATA ); done: if (buffer != localbuff) HeapFree( GetProcessHeap(), 0, buffer ); -- 2.17.1