tFix for incorrect getopt() usage under Win32 (argv[0] was the first argument, rather than the executable name.) - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit f9dd12e8900997767e53ab87f837c4162cfb78ea
(DIR) parent b2248529c46658addd46efdc6f6a22f9449fcac0
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Sat, 7 Jun 2003 17:48:28 +0000
Fix for incorrect getopt() usage under Win32 (argv[0] was the first argument,
rather than the executable name.)
Diffstat:
M src/winmain.c | 30 +++++++++++++++++++++++-------
1 file changed, 23 insertions(+), 7 deletions(-)
---
(DIR) diff --git a/src/winmain.c b/src/winmain.c
t@@ -218,10 +218,29 @@ static gchar *GetWindowsLocale(void)
}
#endif /* ENABLE_NLS */
+/*
+ * Converts the passed lpszCmdParam WinMain-style command line into
+ * Unix-style (argc, argv) parameters (returned).
+ */
+void get_cmdline(const LPSTR lpszCmdParam, int *argc, gchar ***argv)
+{
+ gchar **split;
+ gchar *tmp_cmdline;
+
+ tmp_cmdline = g_strdup_printf("%s %s", PACKAGE, lpszCmdParam);
+ split = g_strsplit(tmp_cmdline, " ", 0);
+ *argc = 0;
+ while (split[*argc] && split[*argc][0]) {
+ (*argc)++;
+ }
+ *argv = split;
+ g_free(tmp_cmdline);
+}
+
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
- gchar **split;
+ gchar **argv;
int argc;
gboolean is_service;
gchar *modpath;
t@@ -267,12 +286,9 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
"# informative messages resulting from configuration\n"
"# file processing and the like.\n\n"));
- split = g_strsplit(lpszCmdParam, " ", 0);
- argc = 0;
- while (split[argc] && split[argc][0])
- argc++;
+ get_cmdline(lpszCmdParam, &argc, &argv);
- cmdline = GeneralStartup(argc, split);
+ cmdline = GeneralStartup(argc, argv);
OpenLog();
SoundInit();
if (cmdline->version || cmdline->help) {
t@@ -358,7 +374,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
FreeCmdLine(cmdline);
CloseLog();
LogFileEnd();
- g_strfreev(split);
+ g_strfreev(argv);
CloseHighScoreFile();
g_free(PidFile);
g_free(Log.File);