mirror of
https://github.com/reactos/reactos.git
synced 2025-04-22 13:10:39 +00:00
import SetupEnumInfSectionsA/W from wine
fixes setupapi parser winetest crash svn path=/trunk/; revision=40599
This commit is contained in:
parent
e035665105
commit
df9a63f55e
3 changed files with 72 additions and 3 deletions
|
@ -5337,7 +5337,7 @@ HKEY WINAPI SetupDiOpenDevRegKey(
|
||||||
DWORD KeyType,
|
DWORD KeyType,
|
||||||
REGSAM samDesired)
|
REGSAM samDesired)
|
||||||
{
|
{
|
||||||
struct DeviceInfoSet *set = (struct DeviceInfoSet *)DeviceInfoSet;
|
struct DeviceInfoSet *set = DeviceInfoSet;
|
||||||
struct DeviceInfo *devInfo;
|
struct DeviceInfo *devInfo;
|
||||||
HKEY key = INVALID_HANDLE_VALUE;
|
HKEY key = INVALID_HANDLE_VALUE;
|
||||||
HKEY RootKey;
|
HKEY RootKey;
|
||||||
|
|
|
@ -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.@)
|
* SetupGetLineCountA (SETUPAPI.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -390,8 +390,8 @@
|
||||||
@ stdcall SetupDiUnremoveDevice(ptr ptr)
|
@ stdcall SetupDiUnremoveDevice(ptr ptr)
|
||||||
@ stub SetupDuplicateDiskSpaceListA
|
@ stub SetupDuplicateDiskSpaceListA
|
||||||
@ stub SetupDuplicateDiskSpaceListW
|
@ stub SetupDuplicateDiskSpaceListW
|
||||||
@ stub SetupEnumInfSectionsA
|
@ stdcall SetupEnumInfSectionsA(long long ptr long ptr)
|
||||||
@ stub SetupEnumInfSectionsW
|
@ stdcall SetupEnumInfSectionsW(long long ptr long ptr)
|
||||||
@ stdcall SetupFindFirstLineA(long str str ptr)
|
@ stdcall SetupFindFirstLineA(long str str ptr)
|
||||||
@ stdcall SetupFindFirstLineW(long wstr wstr ptr)
|
@ stdcall SetupFindFirstLineW(long wstr wstr ptr)
|
||||||
@ stdcall SetupFindNextLine(ptr ptr)
|
@ stdcall SetupFindNextLine(ptr ptr)
|
||||||
|
|
Loading…
Reference in a new issue