Fix special case in SetupGetLineTextA/W and SetupGetStringFieldA/W when
Buffer is NULL and BufferSize is 0, by reverting part of r17162
Fixes bug #724, spotted by GvG
Do according changes in SetupDiBuildDriverInfoList
Modified: trunk/reactos/lib/setupapi/devinst.c
Modified: trunk/reactos/lib/setupapi/parser.c
_____
Modified: trunk/reactos/lib/setupapi/devinst.c
--- trunk/reactos/lib/setupapi/devinst.c 2005-08-23 14:56:38 UTC
(rev 17482)
+++ trunk/reactos/lib/setupapi/devinst.c 2005-08-23 17:38:14 UTC
(rev 17483)
@@ -3564,8 +3564,9 @@
0, /* Field index */
NULL, 0,
&RequiredSize);
- if (!Result && GetLastError() ==
ERROR_INSUFFICIENT_BUFFER)
+ if (Result)
{
+ /* We got the needed size for the buffer */
ManufacturerName = HeapAlloc(GetProcessHeap(),
0, RequiredSize * sizeof(WCHAR));
if (!ManufacturerName)
{
@@ -3583,8 +3584,9 @@
1, /* Field index */
NULL, 0,
&RequiredSize);
- if (!Result && GetLastError() ==
ERROR_INSUFFICIENT_BUFFER)
+ if (Result)
{
+ /* We got the needed size for the buffer */
ManufacturerSection =
HeapAlloc(GetProcessHeap(), 0, RequiredSize * sizeof(WCHAR));
if (!ManufacturerSection)
{
_____
Modified: trunk/reactos/lib/setupapi/parser.c
--- trunk/reactos/lib/setupapi/parser.c 2005-08-23 14:56:38 UTC (rev
17482)
+++ trunk/reactos/lib/setupapi/parser.c 2005-08-23 17:38:14 UTC (rev
17483)
@@ -1523,13 +1523,13 @@
total += PARSER_string_substW( file, field->text, NULL, 0 ) +
1;
if (required) *required = total;
- if (total > size)
- {
- SetLastError( ERROR_INSUFFICIENT_BUFFER );
- return FALSE;
- }
if (buffer)
{
+ if (total > size)
+ {
+ SetLastError( ERROR_INSUFFICIENT_BUFFER );
+ return FALSE;
+ }
for (i = 0, field = &file->fields[line->first_field]; i <
line->nb_fields; i++, field++)
{
unsigned int len = PARSER_string_substW( file, field->text,
buffer, size );
@@ -1574,13 +1574,13 @@
total += PARSER_string_substA( file, field->text, NULL, 0 ) +
1;
if (required) *required = total;
- if (total > size)
- {
- SetLastError( ERROR_INSUFFICIENT_BUFFER );
- return FALSE;
- }
if (buffer)
{
+ if (total > size)
+ {
+ SetLastError( ERROR_INSUFFICIENT_BUFFER );
+ return FALSE;
+ }
for (i = 0, field = &file->fields[line->first_field]; i <
line->nb_fields; i++, field++)
{
unsigned int len = PARSER_string_substA( file, field->text,
buffer, size );
@@ -1619,13 +1619,13 @@
if (!field) return FALSE;
len = PARSER_string_substA( file, field->text, NULL, 0 );
if (required) *required = len + 1;
- if (size <= len)
- {
- SetLastError( ERROR_INSUFFICIENT_BUFFER );
- return FALSE;
- }
if (buffer)
{
+ if (size <= len)
+ {
+ SetLastError( ERROR_INSUFFICIENT_BUFFER );
+ return FALSE;
+ }
PARSER_string_substA( file, field->text, buffer, size );
TRACE( "context %p/%p/%d/%d index %ld returning %s\n",
@@ -1650,13 +1650,13 @@
if (!field) return FALSE;
len = PARSER_string_substW( file, field->text, NULL, 0 );
if (required) *required = len + 1;
- if (size <= len)
- {
- SetLastError( ERROR_INSUFFICIENT_BUFFER );
- return FALSE;
- }
if (buffer)
{
+ if (size <= len)
+ {
+ SetLastError( ERROR_INSUFFICIENT_BUFFER );
+ return FALSE;
+ }
PARSER_string_substW( file, field->text, buffer, size );
TRACE( "context %p/%p/%d/%d index %ld returning %s\n",