Hello,
I am currently exploring Wine code base looking for
low hanging fruits I can contribute to. I think
CoInternetParseUrl and other URLMon stubs seemed
easy enough I want to try and implement some. I also see many
URLMon stubs when using Wine for games and applications.
In CoInternetParseUrl, you use a switch case
depending on the parameters passed. These in turn call specific
methods for each parameter, which most do the same thing, call
IInternetProtocolInfo_ParseUrl with the desired parse option .
This function is defined in urlmon header. It seems to call a
saved This on runtime, derefencing a saved (?) virtual table
calling ParseUrl. It is also implemented in the header (static
FORCEINLINE) and also calls the ParseUrl.
There are some STDMETHODCALLTYPE pure virtual
methods inside a IInternetProtocoleInfo class. A struct virtual
table IInternetProtocolInfoVtbl O_o I cannot find the actual
ParseUrl implementation, though in misc.c, there are many
references to CHECK_CALLED(ParseUrl) and SET_EXPECT(ParseUrl). I
have no clue what is going on here to be completely honest.
Finally, in misc.c there are
some pCoInternetParseUrl and CoInternetParseUrl tests. But
nothing that seems to implement what I need.
My question is, why go through all these hoops
instead of implementing CoInternetParseUrl inside internet.c. I
am sure there is good reasoning behind this, I would just like
to understand why. Also, where do I implement ParseUrl or
IInternetProtocolInfo_ParseUrl?