[1/2] winemenubuilder: use a unicode WinMain

Damjan Jovanovic damjan.jov at gmail.com
Tue May 4 14:38:21 CDT 2010


Changelog:
* winemenubuilder: use a unicode WinMain

Eliminates the suspicious CP_ACP conversion and uses unicode from the
beginning of winemenubuilder.

Damjan Jovanovic
-------------- next part --------------
diff --git a/programs/winemenubuilder/Makefile.in b/programs/winemenubuilder/Makefile.in
index f6142ef..beb29ee 100644
--- a/programs/winemenubuilder/Makefile.in
+++ b/programs/winemenubuilder/Makefile.in
@@ -4,7 +4,7 @@ TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = winemenubuilder.exe
-APPMODE   = -mwindows
+APPMODE   = -mwindows -municode
 IMPORTS   = uuid shell32 shlwapi ole32 user32 advapi32 kernel32
 EXTRAINCL = @PNGINCL@
 
diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c
index 51f0adb..33c2208 100644
--- a/programs/winemenubuilder/winemenubuilder.c
+++ b/programs/winemenubuilder/winemenubuilder.c
@@ -2729,9 +2729,9 @@ static void cleanup_menus(void)
         WINE_ERR("error opening registry key, menu cleanup failed\n");
 }
 
-static CHAR *next_token( LPSTR *p )
+static WCHAR *next_token( LPWSTR *p )
 {
-    LPSTR token = NULL, t = *p;
+    LPWSTR token = NULL, t = *p;
 
     if( !t )
         return NULL;
@@ -2746,7 +2746,7 @@ static CHAR *next_token( LPSTR *p )
         case '"':
             /* unquote the token */
             token = ++t;
-            t = strchr( token, '"' );
+            t = strchrW( token, '"' );
             if( t )
                  *t++ = 0;
             break;
@@ -2755,7 +2755,7 @@ static CHAR *next_token( LPSTR *p )
             break;
         default:
             token = t;
-            t = strchr( token, ' ' );
+            t = strchrW( token, ' ' );
             if( t )
                  *t++ = 0;
             break;
@@ -2808,11 +2808,16 @@ static BOOL init_xdg(void)
 
 /***********************************************************************
  *
- *           WinMain
+ *           wWinMain
  */
-int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show)
+int PASCAL wWinMain (HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int show)
 {
-    LPSTR token = NULL, p;
+    static const WCHAR dash_aW[] = {'-','a',0};
+    static const WCHAR dash_rW[] = {'-','r',0};
+    static const WCHAR dash_uW[] = {'-','u',0};
+    static const WCHAR dash_wW[] = {'-','w',0};
+
+    LPWSTR token = NULL, p;
     BOOL bWait = FALSE;
     BOOL bURL = FALSE;
     int ret = 0;
@@ -2825,37 +2830,35 @@ int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show
         token = next_token( &p );
 	if( !token )
 	    break;
-        if( !lstrcmpA( token, "-a" ) )
+        if( !strcmpW( token, dash_aW ) )
         {
             RefreshFileTypeAssociations();
             continue;
         }
-        if( !lstrcmpA( token, "-r" ) )
+        if( !strcmpW( token, dash_rW ) )
         {
             cleanup_menus();
             continue;
         }
-        if( !lstrcmpA( token, "-w" ) )
+        if( !strcmpW( token, dash_wW ) )
             bWait = TRUE;
-        else if ( !lstrcmpA( token, "-u" ) )
+        else if ( !strcmpW( token, dash_uW ) )
             bURL = TRUE;
 	else if( token[0] == '-' )
 	{
-	    WINE_ERR( "unknown option %s\n",token);
+	    WINE_ERR( "unknown option %s\n", wine_dbgstr_w(token) );
 	}
         else
         {
-            WCHAR link[MAX_PATH];
             BOOL bRet;
 
-            MultiByteToWideChar( CP_ACP, 0, token, -1, link, sizeof(link)/sizeof(WCHAR) );
             if (bURL)
-                bRet = Process_URL( link, bWait );
+                bRet = Process_URL( token, bWait );
             else
-                bRet = Process_Link( link, bWait );
+                bRet = Process_Link( token, bWait );
             if (!bRet)
             {
-                WINE_ERR( "failed to build menu item for %s\n",token);
+                WINE_ERR( "failed to build menu item for %s\n", wine_dbgstr_w(token) );
                 ret = 1;
             }
         }


More information about the wine-patches mailing list