summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2019-12-10 17:55:50 +0000
committerVincent Sanders <vince@kyllikki.org>2019-12-10 23:12:10 +0000
commit56ddeed96c10bae6e67b7e15ee6fa982a0f40b3f (patch)
tree72c5dc0ecee045f24ac525756eea7dd151b44e4a
parent2f7de349ea4b9f26bf14d0ee5704cfe248462dd7 (diff)
downloadnetsurf-56ddeed96c10bae6e67b7e15ee6fa982a0f40b3f.tar.gz
netsurf-56ddeed96c10bae6e67b7e15ee6fa982a0f40b3f.tar.bz2
separate out construction of command line argument string vector
-rw-r--r--frontends/windows/main.c77
1 files changed, 54 insertions, 23 deletions
diff --git a/frontends/windows/main.c b/frontends/windows/main.c
index d71bb8756..cf94712c1 100644
--- a/frontends/windows/main.c
+++ b/frontends/windows/main.c
@@ -308,6 +308,55 @@ static nserror nsw32_messages_init(char **respaths)
return res;
}
+
+/**
+ * Construct a unix style argc/argv
+ */
+static nserror win32_to_unix_commandline(int *argc_out, char ***argv_out)
+{
+ int argc = 0;
+ char **argv;
+ int cura;
+ LPWSTR *argvw;
+
+ argvw = CommandLineToArgvW(GetCommandLineW(), &argc);
+ if (argvw == NULL) {
+ return NSERROR_INVALID;
+ }
+
+ argv = malloc(sizeof(char *) * argc);
+ if (argv == NULL) {
+ return NSERROR_NOMEM;
+ }
+
+ for (cura = 0; cura < argc; cura++) {
+
+ len = wcstombs(NULL, argvw[cura], 0) + 1;
+ if (len > 0) {
+ argv[cura] = malloc(len);
+ if (argv[cura] == NULL) {
+ free(argv);
+ return NSERROR_NOMEM;
+ }
+ } else {
+ free(argv);
+ return NSERROR_INVALID;
+ }
+
+ wcstombs(argv[cura], argvw[cura], len);
+ /* alter windows-style forward slash flags to hyphen flags. */
+ if (argv[cura][0] == '/') {
+ argv[cura][0] = '-';
+ }
+ }
+
+ *argc_out = argc;
+ *argv_out = argv;
+
+ return NSERROR_OK;
+}
+
+
static struct gui_misc_table win32_misc_table = {
.schedule = win32_schedule,
};
@@ -319,9 +368,8 @@ int WINAPI
WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd)
{
char **argv = NULL;
- int argc = 0, argctemp = 0;
+ int argc = 0;
size_t len;
- LPWSTR *argvw;
nserror ret;
const char *addr;
nsurl *url;
@@ -347,27 +395,10 @@ WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd)
setbuf(stderr, NULL);
- /* Construct a unix style argc/argv */
- if (SLEN(lpcli) > 0) {
- argvw = CommandLineToArgvW(GetCommandLineW(), &argc);
- }
-
- argv = malloc(sizeof(char *) * argc);
- while (argctemp < argc) {
- len = wcstombs(NULL, argvw[argctemp], 0) + 1;
- if (len > 0) {
- argv[argctemp] = malloc(len);
- }
-
- if (argv[argctemp] != NULL) {
- wcstombs(argv[argctemp], argvw[argctemp], len);
- /* alter windows-style forward slash flags to
- * hyphen flags.
- */
- if (argv[argctemp][0] == '/')
- argv[argctemp][0] = '-';
- }
- argctemp++;
+ ret = win32_to_unix_commandline(&argc, &argv);
+ if (ret != NSERROR_OK) {
+ /* no log as logging requires this for initialisation */
+ return 1;
}
/* initialise logging - not fatal if it fails but not much we