[2/5] dinput: SetActionMap saving simple configurations to an .ini file (try 2)

Lucas Zawacki lfzawacki at gmail.com
Tue Jan 10 11:51:53 CST 2012


2012/1/10 Vitaliy Margolen <wine-devel at kievinfo.com>:
> On 01/09/2012 10:18 AM, Lucas Fialho Zawacki wrote:
>>
>> From: Lucas Fialho Zawacki<lfzawacki at gmail.com>
>>
>> +static BOOL _write_private_profile_intW(const char *format, WCHAR*
>> section, WCHAR* key, int value, WCHAR* file)
>
> I don't think this is such a good idea to mix ASCII and WCHAR parameters.
Even if this is for convenience in my "private" code? I use this a
great deal through the code.

>> +    static WCHAR path[] = {
>> +
>>  '%','C','o','m','m','o','n','P','r','o','g','r','a','m','F','i','l','e','s','%','\\',
>> +        'D','i','r','e','c','t','X','\\',
>> +        'D','i','r','e','c','t','I','n','p','u','t','\\',
>> +        'U','s','e','r',' ','M','a','p','s','\0'};
>
> Why do you think it should be there in the first place?
Windows keeps it there, you can check it by running any application
using SetActionMap. But I suppose no application depends on it being
there specifically.

> You can't do this. It seems to be you have not tested it with initial buffer
> too small. You have to do va_start & va_end every time you pass "args" to
> another function.

Yes, you're right. There were other mistakes as well. Is this version better?

    ...
    while (1)
    {
        /* Test if it's the first time */
        if (buffer == NULL)
            buffer = HeapAlloc(GetProcessHeap(), 0, size*sizeof(WCHAR));
        else
            buffer = HeapReAlloc(GetProcessHeap(), 0, buffer,
size*sizeof(WCHAR));

        if (buffer == NULL)
            break;

        va_start(args, format);
        n = vsnprintfW(buffer, size, formatW, args);
        va_end(args);

        if (n == -1)
            size *= 2;
        else if (n >= size)
            size = n + 1;
        else
            break;
    }

    HeapFree(GetProcessHeap(), 0, formatW);

    return buffer;

I tested it for smaller buffer values. If that's alright I can send a
patch to winemenubuilder.c too because the heap_printf there should
suffer from the same bug.

> Would you please drop leading underscore from all of your function names?
Ok. I can stop doing this from this patch onwards if you think this
convention is bad.



More information about the wine-devel mailing list