[SXS] Sync with Wine Staging 4.18. CORE-16441
[reactos.git] / dll / win32 / sxs / name.c
index 5512e77..a4634a0 100644 (file)
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <stdarg.h>
+#ifdef __REACTOS__
+#include <wchar.h>
+#endif
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "ole2.h"
+#include "winsxs.h"
+
+#include "wine/debug.h"
 #include "sxs_private.h"
 
+WINE_DEFAULT_DEBUG_CHANNEL(sxs);
+
 struct name
 {
     IAssemblyName IAssemblyName_iface;
@@ -130,22 +145,22 @@ static HRESULT WINAPI name_GetDisplayName(
 
     if (!buflen || flags) return E_INVALIDARG;
 
-    len = strlenW( name->name ) + 1;
-    if (name->arch)    len += strlenW( archW ) + strlenW( name->arch ) + 4;
-    if (name->token)   len += strlenW( tokenW ) + strlenW( name->token ) + 4;
-    if (name->type)    len += strlenW( typeW ) + strlenW( name->type ) + 4;
-    if (name->version) len += strlenW( versionW ) + strlenW( version ) + 4;
+    len = lstrlenW( name->name ) + 1;
+    if (name->arch)    len += lstrlenW( archW ) + lstrlenW( name->arch ) + 4;
+    if (name->token)   len += lstrlenW( tokenW ) + lstrlenW( name->token ) + 4;
+    if (name->type)    len += lstrlenW( typeW ) + lstrlenW( name->type ) + 4;
+    if (name->version) len += lstrlenW( versionW ) + lstrlenW( version ) + 4;
     if (len > *buflen)
     {
         *buflen = len;
         return HRESULT_FROM_WIN32( ERROR_INSUFFICIENT_BUFFER );
     }
-    strcpyW( buffer, name->name );
-    len = strlenW( buffer );
-    if (name->arch)    len += sprintfW( buffer + len, fmtW, archW, name->arch );
-    if (name->token)   len += sprintfW( buffer + len, fmtW, tokenW, name->token );
-    if (name->type)    len += sprintfW( buffer + len, fmtW, typeW, name->type );
-    if (name->version) len += sprintfW( buffer + len, fmtW, versionW, name->version );
+    lstrcpyW( buffer, name->name );
+    len = lstrlenW( buffer );
+    if (name->arch)    len += swprintf( buffer + len, fmtW, archW, name->arch );
+    if (name->token)   len += swprintf( buffer + len, fmtW, tokenW, name->token );
+    if (name->type)    len += swprintf( buffer + len, fmtW, typeW, name->type );
+    if (name->version) len += swprintf( buffer + len, fmtW, versionW, name->version );
     return S_OK;
 }
 
@@ -160,9 +175,9 @@ static HRESULT WINAPI name_Reserved(
     DWORD cbReserved,
     LPVOID *ppReserved )
 {
-    FIXME("%p, %s, %p, %p, %s, %x%08x, %p, %d, %p\n", iface,
+    FIXME("%p, %s, %p, %p, %s, %s, %p, %d, %p\n", iface,
           debugstr_guid(riid), pUnkReserved1, pUnkReserved2,
-          debugstr_w(szReserved), (DWORD)(llReserved >> 32), (DWORD)llReserved,
+          debugstr_w(szReserved), wine_dbgstr_longlong(llReserved),
           pvReserved, cbReserved, ppReserved);
     return E_NOTIMPL;
 }
@@ -198,13 +213,13 @@ static HRESULT WINAPI name_GetName(
     if (!buflen || !buffer) return E_INVALIDARG;
 
     name = get_name_attribute( iface, NAME_ATTR_ID_NAME );
-    len = strlenW( name ) + 1;
+    len = lstrlenW( name ) + 1;
     if (len > *buflen)
     {
         *buflen = len;
         return HRESULT_FROM_WIN32( ERROR_INSUFFICIENT_BUFFER );
     }
-    strcpyW( buffer, name );
+    lstrcpyW( buffer, name );
     *buflen = len + 3;
     return S_OK;
 }
@@ -219,9 +234,9 @@ static HRESULT parse_version( WCHAR *version, DWORD *high, DWORD *low )
     for (i = 0, p = version; i < 4; i++)
     {
         if (!*p) break;
-        q = strchrW( p, '.' );
+        q = wcschr( p, '.' );
         if (q) *q = 0;
-        ver[i] = atolW( p );
+        ver[i] = wcstol( p, NULL, 10 );
         if (!q && i < 3) break;
         p = q + 1;
     }
@@ -316,25 +331,25 @@ static HRESULT parse_displayname( struct name *name, const WCHAR *displayname )
         while (*q && *q != '=') q++;
         if (!*q) return E_INVALIDARG;
         len = q - p;
-        if (len == sizeof(archW)/sizeof(archW[0]) - 1 && !memcmp( p, archW, len * sizeof(WCHAR) ))
+        if (len == ARRAY_SIZE(archW) - 1 && !memcmp( p, archW, len * sizeof(WCHAR) ))
         {
             p = ++q;
             if (!(name->arch = parse_value( p, &len ))) return E_INVALIDARG;
             q += len;
         }
-        else if (len == sizeof(tokenW)/sizeof(tokenW[0]) - 1 && !memcmp( p, tokenW, len * sizeof(WCHAR) ))
+        else if (len == ARRAY_SIZE(tokenW) - 1 && !memcmp( p, tokenW, len * sizeof(WCHAR) ))
         {
             p = ++q;
             if (!(name->token = parse_value( p, &len ))) return E_INVALIDARG;
             q += len;
         }
-        else if (len == sizeof(typeW)/sizeof(typeW[0]) - 1 && !memcmp( p, typeW, len * sizeof(WCHAR) ))
+        else if (len == ARRAY_SIZE(typeW) - 1 && !memcmp( p, typeW, len * sizeof(WCHAR) ))
         {
             p = ++q;
             if (!(name->type = parse_value( p, &len ))) return E_INVALIDARG;
             q += len;
         }
-        else if (len == sizeof(versionW)/sizeof(versionW[0]) - 1 && !memcmp( p, versionW, len * sizeof(WCHAR) ))
+        else if (len == ARRAY_SIZE(versionW) - 1 && !memcmp( p, versionW, len * sizeof(WCHAR) ))
         {
             p = ++q;
             if (!(name->version = parse_value( p, &len ))) return E_INVALIDARG;