aboutsummaryrefslogtreecommitdiffstats
path: root/erts/etc/common/typer.c
diff options
context:
space:
mode:
Diffstat (limited to 'erts/etc/common/typer.c')
-rw-r--r--erts/etc/common/typer.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/erts/etc/common/typer.c b/erts/etc/common/typer.c
index 7ff8aa76e2..0aa0996808 100644
--- a/erts/etc/common/typer.c
+++ b/erts/etc/common/typer.c
@@ -65,6 +65,7 @@ static int eargc; /* Number of arguments in eargv. */
static void error(char* format, ...);
static char* emalloc(size_t size);
static char* strsave(char* string);
+static void push_words(char* src);
static int run_erlang(char* name, char** argv);
static char* get_default_emulator(char* progname);
#ifdef __WIN32__
@@ -128,9 +129,6 @@ main(int argc, char** argv)
emulator = get_default_emulator(argv[0]);
- if (strlen(emulator) >= MAXPATHLEN)
- error("Emulator path length is too large");
-
/*
* Allocate the argv vector to be used for arguments to Erlang.
* Arrange for starting to pushing information in the middle of
@@ -141,7 +139,7 @@ main(int argc, char** argv)
eargv_base = (char **) emalloc(eargv_size*sizeof(char*));
eargv = eargv_base;
eargc = 0;
- PUSH(strsave(emulator));
+ push_words(emulator);
eargc_base = eargc;
eargv = eargv + eargv_size/2;
eargc = 0;
@@ -194,6 +192,26 @@ main(int argc, char** argv)
return run_erlang(eargv[0], eargv);
}
+static void
+push_words(char* src)
+{
+ char sbuf[MAXPATHLEN];
+ char* dst;
+
+ dst = sbuf;
+ while ((*dst++ = *src++) != '\0') {
+ if (isspace((int)*src)) {
+ *dst = '\0';
+ PUSH(strsave(sbuf));
+ dst = sbuf;
+ do {
+ src++;
+ } while (isspace((int)*src));
+ }
+ }
+ if (sbuf[0])
+ PUSH(strsave(sbuf));
+}
#ifdef __WIN32__
wchar_t *make_commandline(char **argv)
{