diff options
author | Erlang/OTP <[email protected]> | 2015-12-17 14:52:56 +0100 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2015-12-17 14:52:56 +0100 |
commit | 41d5b82499b1e76e9c143361a34967c0cbfe5573 (patch) | |
tree | 99f399c9a9235f394758566255f1559f6280d983 /erts/etc/common/escript.c | |
parent | 82a835d94be7ee5e98d101a29999fedaf6cd75fe (diff) | |
parent | f77436f337d83a9751dc84d53791500c7f99c92e (diff) | |
download | otp-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.c | 25 |
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) { |