[PATCH v2 4/5] msi: Don't reimplement record formatting.
Zebediah Figura
z.figura12 at gmail.com
Mon Jun 19 11:42:47 CDT 2017
On 06/19/2017 04:45 AM, Hans Leidekker wrote:
> On Sun, 2017-06-18 at 21:53 -0500, Zebediah Figura wrote:
>> diff --git a/dlls/msi/package.c b/dlls/msi/package.c
>> index eae01e0..f16b1dc 100644
>> --- a/dlls/msi/package.c
>> +++ b/dlls/msi/package.c
>> @@ -1709,8 +1709,8 @@ INT MSI_ProcessMessage( MSIPACKAGE *package, INSTALLMESSAGE eMessageType, MSIREC
>> static const WCHAR szSetProgress[] = {'S','e','t','P','r','o','g','r','e','s','s',0};
>> static const WCHAR szActionText[] = {'A','c','t','i','o','n','T','e','x','t',0};
>> MSIRECORD *uirow;
>> - LPWSTR deformated, message;
>> - DWORD i, len, total_len, log_type = 0;
>> + LPWSTR deformated, message = {0};
>> + DWORD len, log_type = 0;
>> INT rc = 0;
>> char *msg;
>>
>> @@ -1776,39 +1776,10 @@ INT MSI_ProcessMessage( MSIPACKAGE *package, INSTALLMESSAGE eMessageType, MSIREC
>> }
>> else
>> {
>> - static const WCHAR format[] = {'%','u',':',' ',0};
>> - UINT count = MSI_RecordGetFieldCount( record );
>> - WCHAR *p;
>> -
>> - total_len = 1;
>> - for (i = 1; i <= count; i++)
>> - {
>> - len = 0;
>> - MSI_RecordGetStringW( record, i, NULL, &len );
>> - total_len += len + 13;
>> - }
>> - p = message = msi_alloc( total_len * sizeof(WCHAR) );
>> - if (!p) return ERROR_OUTOFMEMORY;
>> -
>> - for (i = 1; i <= count; i++)
>> - {
>> - if (count > 1)
>> - {
>> - len = sprintfW( p, format, i );
>> - total_len -= len;
>> - p += len;
>> - }
>> - len = total_len;
>> - MSI_RecordGetStringW( record, i, p, &len );
>> - total_len -= len;
>> - p += len;
>> - if (count > 1 && total_len)
>> - {
>> - *p++ = ' ';
>> - total_len--;
>> - }
>> - }
>> - p[0] = 0;
>> + MSI_FormatRecordW(package, record, message, &len);
>> + len++;
>> + message = msi_alloc(len * sizeof(WCHAR));
>> + MSI_FormatRecordW(package, record, message, &len);
>
> You can pass a NULL buffer in the size query. Please keep the check for
> allocation failure. I would check the first call to MSI_FormatRecordW
> too since the record is passed by the caller.
>
>
I'll send an updated patch.
More information about the wine-devel
mailing list