import SetupEnumInfSectionsA/W from wine

fixes setupapi parser winetest crash

svn path=/trunk/; revision=40599
This commit is contained in:
Christoph von Wittich 2009-04-19 23:08:05 +00:00
parent e035665105
commit df9a63f55e
3 changed files with 72 additions and 3 deletions

View file

@ -5337,7 +5337,7 @@ HKEY WINAPI SetupDiOpenDevRegKey(
DWORD KeyType,
REGSAM samDesired)
{
struct DeviceInfoSet *set = (struct DeviceInfoSet *)DeviceInfoSet;
struct DeviceInfoSet *set = DeviceInfoSet;
struct DeviceInfo *devInfo;
HKEY key = INVALID_HANDLE_VALUE;
HKEY RootKey;

View file

@ -1358,6 +1358,75 @@ void WINAPI SetupCloseInfFile( HINF hinf )
}
/***********************************************************************
* SetupEnumInfSectionsA (SETUPAPI.@)
*/
BOOL WINAPI SetupEnumInfSectionsA( HINF hinf, UINT index, PSTR buffer, DWORD size, DWORD *need )
{
struct inf_file *file = hinf;
for (file = hinf; file; file = file->next)
{
if (index < file->nb_sections)
{
DWORD len = WideCharToMultiByte( CP_ACP, 0, file->sections[index]->name, -1,
NULL, 0, NULL, NULL );
if (need) *need = len;
if (!buffer)
{
if (!size) return TRUE;
SetLastError( ERROR_INVALID_USER_BUFFER );
return FALSE;
}
if (len > size)
{
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return FALSE;
}
WideCharToMultiByte( CP_ACP, 0, file->sections[index]->name, -1, buffer, size, NULL, NULL );
return TRUE;
}
index -= file->nb_sections;
}
SetLastError( ERROR_NO_MORE_ITEMS );
return FALSE;
}
/***********************************************************************
* SetupEnumInfSectionsW (SETUPAPI.@)
*/
BOOL WINAPI SetupEnumInfSectionsW( HINF hinf, UINT index, PWSTR buffer, DWORD size, DWORD *need )
{
struct inf_file *file = hinf;
for (file = hinf; file; file = file->next)
{
if (index < file->nb_sections)
{
DWORD len = strlenW( file->sections[index]->name ) + 1;
if (need) *need = len;
if (!buffer)
{
if (!size) return TRUE;
SetLastError( ERROR_INVALID_USER_BUFFER );
return FALSE;
}
if (len > size)
{
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return FALSE;
}
memcpy( buffer, file->sections[index]->name, len * sizeof(WCHAR) );
return TRUE;
}
index -= file->nb_sections;
}
SetLastError( ERROR_NO_MORE_ITEMS );
return FALSE;
}
/***********************************************************************
* SetupGetLineCountA (SETUPAPI.@)
*/

View file

@ -390,8 +390,8 @@
@ stdcall SetupDiUnremoveDevice(ptr ptr)
@ stub SetupDuplicateDiskSpaceListA
@ stub SetupDuplicateDiskSpaceListW
@ stub SetupEnumInfSectionsA
@ stub SetupEnumInfSectionsW
@ stdcall SetupEnumInfSectionsA(long long ptr long ptr)
@ stdcall SetupEnumInfSectionsW(long long ptr long ptr)
@ stdcall SetupFindFirstLineA(long str str ptr)
@ stdcall SetupFindFirstLineW(long wstr wstr ptr)
@ stdcall SetupFindNextLine(ptr ptr)