[2/2] oleacc: implemented GetRoleText[A/W] with tests

Nikolay Sivov bunglehead at gmail.com
Mon Oct 6 03:17:04 CDT 2008


Dmitry Timoshkov wrote:
> "Nikolay Sivov" <bunglehead at gmail.com> wrote:
>
>>>> LoadStringA doesn't return necessary buffer length when called with 
>>>> (buflen = 0) but LoadStringW does.
>>>> Since I need to return a necessary buffer length from both 
>>>> GetRoleText[A/W] I used LoadStringW in both cases,
>>>> converting to multibyte in ansi call.
>>>
>>> I don't see in your tests that GetRoleText is supposed to return the 
>>> string
>>> length when it's called with buffer length set to 0.
>>>
>> GetRoleText supposed to return string length when buffer is NULL.
>> Cause there's no way to get this length by LoadStringA *without* 
>> passing a not-NULL pointer to buffer (I don't now how long should
>> it be) so I used LoadStringW for ansi call too.
>
> Again, I don't see in your tests that GetRoleText is supposed
> to return the string length when it's called with buffer length
> set to 0.
>
I've made these tests but I still don't follow you:
- GetRoleTextW returns length when called with NULL buffer (and zero or 
not-zero buflen)
- GetRoleTextA returns length only when called with NULL buffer. On zero 
buflen it returns 0.

As I understood you want to use LoadStringA in GetRoleTextA and remove 
all wide->mb conversions. But:

there are 3 last lines of LoadStringA:
---
    buffer[retval] = 0;
    TRACE("returning %s\n", debugstr_a(buffer));
    return retval;
---
It's the only place when length is returned. So it will always write to 
buffer => I can't get a length with it without writing.
And it doesn't matter that GetRoleTextA returns 0 on buflen = 0 cause 
behavior on NULL buffer still different between LoadStringA (will crash) 
and LoadStringW (will return length).




More information about the wine-devel mailing list