aboutsummaryrefslogtreecommitdiffstats
path: root/erts/etc/common/escript.c
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2015-12-17 14:52:56 +0100
committerErlang/OTP <[email protected]>2015-12-17 14:52:56 +0100
commit41d5b82499b1e76e9c143361a34967c0cbfe5573 (patch)
tree99f399c9a9235f394758566255f1559f6280d983 /erts/etc/common/escript.c
parent82a835d94be7ee5e98d101a29999fedaf6cd75fe (diff)
parentf77436f337d83a9751dc84d53791500c7f99c92e (diff)
downloadotp-41d5b82499b1e76e9c143361a34967c0cbfe5573.tar.gz
otp-41d5b82499b1e76e9c143361a34967c0cbfe5573.tar.bz2
otp-41d5b82499b1e76e9c143361a34967c0cbfe5573.zip
Merge branch 'egil/fix-windows-paths/OTP-13202' into maint
* egil/fix-windows-paths/OTP-13202: Revert "Fix erroneous splitting of emulator path"
Diffstat (limited to 'erts/etc/common/escript.c')
-rw-r--r--erts/etc/common/escript.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/erts/etc/common/escript.c b/erts/etc/common/escript.c
index a5c6d0d40b..7fd02ed436 100644
--- a/erts/etc/common/escript.c
+++ b/erts/etc/common/escript.c
@@ -74,6 +74,7 @@ static void error(char* format, ...);
static char* emalloc(size_t size);
static void efree(void *p);
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__
@@ -431,7 +432,7 @@ main(int argc, char** argv)
emulator = get_default_emulator(argv[0]);
}
- if (strlen(emulator) >= MAXPATHLEN)
+ if (strlen(emulator) >= PMAX)
error("Value of environment variable ESCRIPT_EMULATOR is too large");
/*
@@ -444,7 +445,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;
@@ -553,6 +554,26 @@ main(int argc, char** argv)
return run_erlang(eargv[0], eargv);
}
+static void
+push_words(char* src)
+{
+ char sbuf[PMAX];
+ 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)
{