James Hawkins : msi: Forward MsiFormatRecordA to MsiFormatRecordW.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jul 6 12:59:05 CDT 2007


Module: wine
Branch: master
Commit: ba4919912c0087ea614f0f55d31c7dfcdd809427
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ba4919912c0087ea614f0f55d31c7dfcdd809427

Author: James Hawkins <truiken at gmail.com>
Date:   Thu Jul  5 17:52:07 2007 -0700

msi: Forward MsiFormatRecordA to MsiFormatRecordW.

---

 dlls/msi/format.c  |   93 +++++++++++++++++-----------------------------------
 dlls/msi/msipriv.h |    1 -
 2 files changed, 30 insertions(+), 64 deletions(-)

diff --git a/dlls/msi/format.c b/dlls/msi/format.c
index 147ae56..8dc99b8 100644
--- a/dlls/msi/format.c
+++ b/dlls/msi/format.c
@@ -657,57 +657,6 @@ UINT MSI_FormatRecordW( MSIPACKAGE* package, MSIRECORD* record, LPWSTR buffer,
     return rc;
 }
 
-UINT MSI_FormatRecordA( MSIPACKAGE* package, MSIRECORD* record, LPSTR buffer,
-                        DWORD *size )
-{
-    LPWSTR deformated;
-    LPWSTR rec;
-    DWORD len,lenA;
-    UINT rc = ERROR_INVALID_PARAMETER;
-
-    TRACE("%p %p %p %i\n", package, record ,buffer, *size);
-
-    rec = msi_dup_record_field(record,0);
-    if (!rec)
-        rec = build_default_format(record);
-
-    TRACE("(%s)\n",debugstr_w(rec));
-
-    len = deformat_string_internal(package,rec,&deformated,strlenW(rec),
-                                   record, NULL);
-    /* If len is zero then WideCharToMultiByte will return 0 indicating 
-     * failure, but that will do just as well since we are ignoring
-     * possible errors.
-     */
-    lenA = WideCharToMultiByte(CP_ACP,0,deformated,len,NULL,0,NULL,NULL);
-
-    if (buffer)
-    {
-        /* Ditto above */
-        WideCharToMultiByte(CP_ACP,0,deformated,len,buffer,*size,NULL, NULL);
-        if (*size>lenA)
-        {
-            rc = ERROR_SUCCESS;
-            buffer[lenA] = 0;
-        }
-        else
-        {
-            rc = ERROR_MORE_DATA;
-            if (*size)
-                buffer[(*size)-1] = 0;
-        }
-    }
-    else
-        rc = ERROR_SUCCESS;
-
-    *size = lenA;
-
-    msi_free(rec);
-    msi_free(deformated);
-    return rc;
-}
-
-
 UINT WINAPI MsiFormatRecordW( MSIHANDLE hInstall, MSIHANDLE hRecord, 
                               LPWSTR szResult, DWORD *sz )
 {
@@ -791,30 +740,48 @@ done:
 UINT WINAPI MsiFormatRecordA( MSIHANDLE hInstall, MSIHANDLE hRecord,
                               LPSTR szResult, DWORD *sz )
 {
-    UINT r = ERROR_INVALID_HANDLE;
-    MSIPACKAGE *package = NULL;
-    MSIRECORD *record = NULL;
+    UINT r;
+    DWORD len, save;
+    LPWSTR value;
 
     TRACE("%ld %ld %p %p\n", hInstall, hRecord, szResult, sz);
 
-    record = msihandle2msiinfo( hRecord, MSIHANDLETYPE_RECORD );
-
-    if (!record)
+    if (!hRecord)
         return ERROR_INVALID_HANDLE;
+
     if (!sz)
     {
-        msiobj_release( &record->hdr );
         if (szResult)
             return ERROR_INVALID_PARAMETER;
         else
             return ERROR_SUCCESS;
     }
 
-    package = msihandle2msiinfo( hInstall, MSIHANDLETYPE_PACKAGE );
+    r = MsiFormatRecordW( hInstall, hRecord, NULL, &len );
+    if (r != ERROR_SUCCESS)
+        return r;
 
-    r = MSI_FormatRecordA( package, record, szResult, sz );
-    msiobj_release( &record->hdr );
-    if (package)
-        msiobj_release( &package->hdr );
+    value = msi_alloc(++len * sizeof(WCHAR));
+    if (!value)
+        return ERROR_OUTOFMEMORY;
+
+    r = MsiFormatRecordW( hInstall, hRecord, value, &len );
+    if (r != ERROR_SUCCESS)
+        goto done;
+
+    save = len + 1;
+    len = WideCharToMultiByte(CP_ACP, 0, value, -1, NULL, 0, NULL, NULL);
+    WideCharToMultiByte(CP_ACP, 0, value, -1, szResult, *sz, NULL, NULL);
+
+    if (szResult && len > *sz)
+    {
+        if (*sz) szResult[*sz - 1] = '\0';
+        r = ERROR_MORE_DATA;
+    }
+
+    *sz = save - 1;
+
+done:
+    msi_free(value);
     return r;
 }
diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h
index bb85e9a..79bda64 100644
--- a/dlls/msi/msipriv.h
+++ b/dlls/msi/msipriv.h
@@ -691,7 +691,6 @@ extern UINT msi_package_add_media_disk(MSIPACKAGE *, DWORD, DWORD, DWORD, LPWSTR
 
 /* for deformating */
 extern UINT MSI_FormatRecordW( MSIPACKAGE *, MSIRECORD *, LPWSTR, DWORD * );
-extern UINT MSI_FormatRecordA( MSIPACKAGE *, MSIRECORD *, LPSTR, DWORD * );
 
 /* registry data encoding/decoding functions */
 extern BOOL unsquash_guid(LPCWSTR in, LPWSTR out);




More information about the wine-cvs mailing list