winewrap: cleanup

Dimitrie O. Paun dpaun at rogers.com
Thu Jan 2 01:14:38 CST 2003


Relative to the last winewrap patch.

ChangeLog
  Simplify the code for the generated wrapper.
  Miscellaneous small cleanups.

--- tools/winewrap.c.A2	2002-12-31 03:23:06.000000000 -0500
+++ tools/winewrap.c	2003-01-02 01:53:23.000000000 -0500
@@ -87,15 +87,15 @@
     "if [ ! -x \"$WINELOADER\" ]; then WINELOADER=\"wine\"; fi\n"
     "\n"
     "# and try to start the app\n"
-    "exec \"$WINELOADER\" $debugmsg $dll \"$apppath\" -- \"$@\"\n"
+    "exec \"$WINELOADER\" $debugmsg $dll -- \"$apppath\" \"$@\"\n"
 ;
 
 static const char *app_gui_spec =
-    "@ stdcall WinMain(ptr long ptr) WinMain\n"
+    "@ stdcall WinMain(ptr long ptr long) WinMain\n"
 ;
 
 static const char *app_cui_spec =
-    "@ stdcall main(long ptr) main\n"
+    "@ stdcall main(long ptr ptr) main\n"
 ;
 
 static const char *wrapper_code =
@@ -104,15 +104,10 @@
     " * Copyright 2002 Dimitrie O. Paun <dpaun at rogers.com>\n"
     " */\n"
     "\n"
-    "#ifndef STRICT\n"
-    "#define STRICT\n"
-    "#endif\n"
-    "\n"
     "#include <dlfcn.h>\n"
     "#include <windows.h>\n"
     "\n"
     "\n"
-    "\n"
     "/*\n"
     " * Describe the wrapped application\n"
     " */\n"
@@ -155,10 +150,18 @@
     "static char* mfcModule   = NULL;\n"
     "\n"
     "\n"
+    "void error(const char *format, ...)\n"
+    "{\n"
+    "    va_list ap;\n"
+    "    char msg[4096];\n"
+    "\n"
+    "    va_start(ap, format);\n"
+    "    vsnprintf(msg, sizeof(msg), format, ap);\n"
+    "    MessageBox(NULL, msg, \"Error\", MB_OK);\n"
+    "    va_end(ap);\n"
+    "    exit(1);\n"
+    "}\n"
     "\n"
-    "/*\n"
-    " * Implement the main.\n"
-    " */\n"
     "\n"
     "#if GUIEXE\n"
     "typedef int WINAPI (*WinMainFunc)(HINSTANCE hInstance, HINSTANCE hPrevInstance,\n"
@@ -191,91 +194,44 @@
     "        sprintf(libName,\"%%s.so\",appName);\n"
     "        appLibrary=dlopen(libName,RTLD_NOW);\n"
     "    }\n"
-    "    if (appLibrary==NULL) {\n"
-    "        char format[]=\"Could not load the %%s library: %%s\";\n"
-    "        char* error;\n"
-    "        char* msg;\n"
-    "\n"
-    "        error=dlerror();\n"
-    "        msg=(char*)malloc(strlen(format)+strlen(libName)+strlen(error));\n"
-    "        sprintf(msg,format,libName,error);\n"
-    "        MessageBox(NULL,msg,\"dlopen error\",MB_OK);\n"
-    "        free(msg);\n"
-    "        return 1;\n"
-    "    }\n"
+    "    if (!appLibrary) error(\"Could not load the %%s library: %%s\", libName, dlerror());\n"
     "\n"
     "    /* Then if this application is MFC based, load the MFC module */\n"
     "    /* FIXME: I'm not sure this is really necessary */\n"
-    "    if (mfcModule!=NULL) {\n"
-    "        hMFC=LoadLibrary(mfcModule);\n"
-    "        if (hMFC==NULL) {\n"
-    "            char format[]=\"Could not load the MFC module %%s (%%d)\";\n"
-    "            char* msg;\n"
-    "\n"
-    "            msg=(char*)malloc(strlen(format)+strlen(mfcModule)+11);\n"
-    "            sprintf(msg,format,mfcModule,GetLastError());\n"
-    "            MessageBox(NULL,msg,\"LoadLibrary error\",MB_OK);\n"
-    "            free(msg);\n"
-    "            return 1;\n"
-    "        }\n"
+    "    if (mfcModule) {\n"
+    "        hMFC = LoadLibrary(mfcModule);\n"
+    "        if (!hMFC) error(\"Could not load the MFC module %%s (%%d)\", mfcModule, GetLastError());\n"
     "        /* MFC is a special case: the WinMain is in the MFC library,\n"
     "         * instead of the application's library.\n"
     "         */\n"
-    "        hMain=hMFC;\n"
-    "    } else {\n"
-    "        hMFC=NULL;\n"
+    "        hMain = hMFC;\n"
     "    }\n"
     "\n"
     "    /* Load the application's module */\n"
-    "    if (appModule==NULL) {\n"
-    "        appModule=appName;\n"
-    "    }\n"
-    "    hApp=LoadLibrary(appModule);\n"
-    "    if (hApp==NULL) {\n"
-    "        char format[]=\"Could not load the application's module %%s (%%d)\";\n"
-    "        char* msg;\n"
-    "\n"
-    "        msg=(char*)malloc(strlen(format)+strlen(appModule)+11);\n"
-    "        sprintf(msg,format,appModule,GetLastError());\n"
-    "        MessageBox(NULL,msg,\"LoadLibrary error\",MB_OK);\n"
-    "        free(msg);\n"
-    "        return 1;\n"
-    "    } else if (hMain==NULL) {\n"
-    "        hMain=hApp;\n"
-    "    }\n"
+    "    if (!appModule) appModule = appName;\n"
+    "    hApp = LoadLibrary(appModule);\n"
+    "    if (!hApp) error(\"Could not load the application's module %%s (%%d)\", appModule, GetLastError());\n"
+    "    if (!hMain) hMain = hApp;\n"
     "\n"
     "    /* Get the address of the application's entry point */\n"
-    "    appMain=GetProcAddress(hMain, appInit);\n"
-    "    if (appMain==NULL) {\n"
-    "        char format[]=\"Could not get the address of %%s (%%d)\";\n"
-    "        char* msg;\n"
-    "\n"
-    "        msg=(char*)malloc(strlen(format)+strlen(appInit)+11);\n"
-    "        sprintf(msg,format,appInit,GetLastError());\n"
-    "        MessageBox(NULL,msg,\"GetProcAddress error\",MB_OK);\n"
-    "        free(msg);\n"
-    "        return 1;\n"
-    "    }\n"
+    "    appMain = GetProcAddress(hMain, appInit);\n"
+    "    if (!appMain) error(\"Could not get the address of %%s (%%d)\", appInit, GetLastError());\n"
     "\n"
     "    /* And finally invoke the application's entry point */\n"
     "#if GUIEXE\n"
-    "    retcode=(*((WinMainFunc)appMain))(hApp,hPrevInstance,szCmdLine,iCmdShow);\n"
+    "    retcode = (*((WinMainFunc)appMain))(hApp, hPrevInstance, szCmdLine, iCmdShow);\n"
     "#else\n"
-    "    retcode=(*((MainFunc)appMain))(argc,argv,envp);\n"
+    "    retcode = (*((MainFunc)appMain))(argc, argv, envp);\n"
     "#endif\n"
     "\n"
     "    /* Cleanup and done */\n"
     "    FreeLibrary(hApp);\n"
-    "    if (hMFC!=NULL) {\n"
-    "        FreeLibrary(hMFC);\n"
-    "    }\n"
+    "    FreeLibrary(hMFC);\n"
     "    dlclose(appLibrary);\n"
     "    free(libName);\n"
     "\n"
     "    return retcode;\n"
     "}\n"
-#if 0
-#endif
 ;
 
 static char *output_name;
@@ -477,7 +433,7 @@
                 if (argv[i][2] == 0) verbose = 1;
                 break;
 	    case 'V':
-		printf("winewrap v0.31\n");
+		printf("winewrap v0.40\n");
 		exit(0);
 		break;
 	    case 'C':
@@ -663,7 +619,7 @@
 
     /* create the loader script */
     create_file(base_file, app_loader_script, base_name);
-    chmod(base_name, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
+    chmod(base_file, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
 
     return 0;    
 } 


-- 
Dimi.




More information about the wine-patches mailing list