Convert GetBinaryType to unicode

Dmitry Timoshkov dmitry at baikal.ru
Sun Oct 12 06:51:41 CDT 2003


Hello,

Changelog:
    Dmitry Timoshkov <dmitry at codeweavers.com>
    Convert GetBinaryType to unicode.

--- cvs/hq/wine/loader/module.c	Thu Oct 02 05:43:46 2003
+++ wine/loader/module.c	Sun Oct 12 09:15:12 2003
@@ -21,13 +21,12 @@
 #include "config.h"
 #include "wine/port.h"
 
-#include <assert.h>
 #include <fcntl.h>
 #include <stdlib.h>
-#include <stdarg.h>
-#include <stdio.h>
 #include <string.h>
-#include <sys/types.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif
@@ -38,9 +37,7 @@
 #include "winbase.h"
 #include "winreg.h"
 #include "winternl.h"
-#include "heap.h"
 #include "thread.h"
-#include "file.h"
 #include "module.h"
 
 #include "wine/debug.h"
@@ -48,7 +45,6 @@
 #include "wine/server.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(module);
-WINE_DECLARE_DEBUG_CHANNEL(win32);
 WINE_DECLARE_DEBUG_CHANNEL(loaddll);
 
 
@@ -252,8 +248,7 @@ enum binary_type MODULE_GetBinaryType( H
 }
 
 /***********************************************************************
- *             GetBinaryTypeA                     [KERNEL32.@]
- *             GetBinaryType                      [KERNEL32.@]
+ *             GetBinaryTypeW                     [KERNEL32.@]
  *
  * Determine whether a file is executable, and if so, what kind.
  *
@@ -285,13 +280,12 @@ enum binary_type MODULE_GetBinaryType( H
  *  ".com" and ".pif" files are only recognized by their file name extension,
  *  as per native Windows.
  */
-BOOL WINAPI GetBinaryTypeA( LPCSTR lpApplicationName, LPDWORD lpBinaryType )
+BOOL WINAPI GetBinaryTypeW( LPCWSTR lpApplicationName, LPDWORD lpBinaryType )
 {
     BOOL ret = FALSE;
     HANDLE hfile;
-    char *ptr;
 
-    TRACE_(win32)("%s\n", lpApplicationName );
+    TRACE("%s\n", debugstr_w(lpApplicationName) );
 
     /* Sanity check.
      */
@@ -300,7 +294,7 @@ BOOL WINAPI GetBinaryTypeA( LPCSTR lpApp
 
     /* Open the file indicated by lpApplicationName for reading.
      */
-    hfile = CreateFileA( lpApplicationName, GENERIC_READ, FILE_SHARE_READ,
+    hfile = CreateFileW( lpApplicationName, GENERIC_READ, FILE_SHARE_READ,
                          NULL, OPEN_EXISTING, 0, 0 );
     if ( hfile == INVALID_HANDLE_VALUE )
         return FALSE;
@@ -310,20 +304,26 @@ BOOL WINAPI GetBinaryTypeA( LPCSTR lpApp
     switch(MODULE_GetBinaryType( hfile ))
     {
     case BINARY_UNKNOWN:
+    {
+        static const WCHAR comW[] = { '.','C','O','M',0 };
+        static const WCHAR pifW[] = { '.','P','I','F',0 };
+        const WCHAR *ptr;
+
         /* try to determine from file name */
-        ptr = strrchr( lpApplicationName, '.' );
+        ptr = strrchrW( lpApplicationName, '.' );
         if (!ptr) break;
-        if (!FILE_strcasecmp( ptr, ".COM" ))
+        if (!strcmpiW( ptr, comW ))
         {
             *lpBinaryType = SCS_DOS_BINARY;
             ret = TRUE;
         }
-        else if (!FILE_strcasecmp( ptr, ".PIF" ))
+        else if (!strcmpiW( ptr, pifW ))
         {
             *lpBinaryType = SCS_PIF_BINARY;
             ret = TRUE;
         }
         break;
+    }
     case BINARY_PE_EXE:
     case BINARY_PE_DLL:
         *lpBinaryType = SCS_32BIT_BINARY;
@@ -352,36 +352,29 @@ BOOL WINAPI GetBinaryTypeA( LPCSTR lpApp
 }
 
 /***********************************************************************
- *             GetBinaryTypeW                      [KERNEL32.@]
- *
- * Unicode version of GetBinaryTypeA.
+ *             GetBinaryTypeA                     [KERNEL32.@]
+ *             GetBinaryType                      [KERNEL32.@]
  */
-BOOL WINAPI GetBinaryTypeW( LPCWSTR lpApplicationName, LPDWORD lpBinaryType )
+BOOL WINAPI GetBinaryTypeA( LPCSTR lpApplicationName, LPDWORD lpBinaryType )
 {
-    BOOL ret = FALSE;
-    LPSTR strNew = NULL;
+    ANSI_STRING app_nameA;
+    NTSTATUS status;
 
-    TRACE_(win32)("%s\n", debugstr_w(lpApplicationName) );
+    TRACE("%s\n", debugstr_a(lpApplicationName));
 
     /* Sanity check.
      */
     if ( lpApplicationName == NULL || lpBinaryType == NULL )
         return FALSE;
 
-    /* Convert the wide string to a ascii string.
-     */
-    strNew = HEAP_strdupWtoA( GetProcessHeap(), 0, lpApplicationName );
-
-    if ( strNew != NULL )
-    {
-        ret = GetBinaryTypeA( strNew, lpBinaryType );
+    RtlInitAnsiString(&app_nameA, lpApplicationName);
+    status = RtlAnsiStringToUnicodeString(&NtCurrentTeb()->StaticUnicodeString,
+                                          &app_nameA, FALSE);
+    if (!status)
+        return GetBinaryTypeW(NtCurrentTeb()->StaticUnicodeString.Buffer, lpBinaryType);
 
-        /* Free the allocated string.
-         */
-        HeapFree( GetProcessHeap(), 0, strNew );
-    }
-
-    return ret;
+    SetLastError(RtlNtStatusToDosError(status));
+    return FALSE;
 }
 
 






More information about the wine-patches mailing list