Skip to content
Snippets Groups Projects
Commit e91d976e authored by Ulrich Czekalla's avatar Ulrich Czekalla Committed by Alexandre Julliard
Browse files

Fix integer based resource id assumption.

Add support for string based type ids.
parent a39ad1af
No related branches found
No related tags found
No related merge requests found
......@@ -37,56 +37,56 @@ void LIBRES_RegisterResources(const wrc_resource32_t * const * Res)
/**********************************************************************
* LIBRES_FindResource
*/
typedef int (*CmpFunc_t)(LPCWSTR a, LPCWSTR b, int c);
int CompareOrdinal(LPCWSTR ordinal, LPCWSTR resstr, int resid)
{
return !resstr && (resid == LOWORD(ordinal));
}
int CompareName(LPCWSTR name, LPCWSTR resstr, int resid)
{
return resstr && !CRTDLL__wcsnicmp(resstr+1, name, *(resstr));
}
HRSRC LIBRES_FindResource( HINSTANCE hModule, LPCWSTR name, LPCWSTR type )
{
int nameid=0,typeid;
LPCWSTR nameid = name, typeid = type;
ResListE* ResBlock;
const wrc_resource32_t* const * Res;
CmpFunc_t EqualNames = CompareOrdinal;
CmpFunc_t EqualTypes = CompareOrdinal;
if(HIWORD(name))
{
if(*name=='#')
{
LPSTR nameA = HEAP_strdupWtoA( GetProcessHeap(), 0, name );
nameid = atoi(nameA+1);
nameid = (LPCWSTR) atoi(nameA+1);
HeapFree( GetProcessHeap(), 0, nameA );
name=NULL;
}
}
else
{
nameid=LOWORD(name);
name=NULL;
EqualNames = CompareName;
}
if(HIWORD(type))
{
if(*type=='#')
{
LPSTR typeA = HEAP_strdupWtoA( GetProcessHeap(), 0, type );
typeid=atoi(typeA+1);
typeid= (LPCWSTR) atoi(typeA+1);
HeapFree( GetProcessHeap(), 0, typeA );
}
else
{
TRACE("(*,*,type=string): Returning 0\n");
return 0;
}
EqualTypes = CompareName;
}
else
typeid=LOWORD(type);
/* FIXME: types can be strings */
for(ResBlock=ResourceList; ResBlock; ResBlock=ResBlock->next)
for(Res=ResBlock->Resources; *Res; Res++)
if(name)
{
if((*Res)->restype==typeid &&
!CRTDLL__wcsnicmp((LPCWSTR)((*Res)->resname+1), name, *((*Res)->resname)))
return (HRSRC)*Res;
}
else
if((*Res)->restype==typeid && (*Res)->resid==nameid)
if (EqualNames(nameid, (*Res)->resname, (*Res)->resid) &&
EqualTypes(typeid, (*Res)->restypename, (*Res)->restype))
return (HRSRC)*Res;
return 0;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment