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