diff options
author | Dan Gudmundsson <[email protected]> | 2017-04-28 11:48:14 +0200 |
---|---|---|
committer | Dan Gudmundsson <[email protected]> | 2017-04-28 11:48:14 +0200 |
commit | 86f6a985670008690695b304c6606b054d2f27c3 (patch) | |
tree | e491e1714101417aa8a315156209b321d5f64444 /erts/etc/common/typer.c | |
parent | 9fad2fdd57fafca649a358e9d6b62c061fe6cf27 (diff) | |
parent | fab97e165a79db10b7b560be5aefc7489982bced (diff) | |
download | otp-86f6a985670008690695b304c6606b054d2f27c3.tar.gz otp-86f6a985670008690695b304c6606b054d2f27c3.tar.bz2 otp-86f6a985670008690695b304c6606b054d2f27c3.zip |
Merge branch 'dgud/erts/erlscript_name'
* dgud/erts/erlscript_name:
Rename argv[0] from beam to invoking program name
OTP-14381
Diffstat (limited to 'erts/etc/common/typer.c')
-rw-r--r-- | erts/etc/common/typer.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/erts/etc/common/typer.c b/erts/etc/common/typer.c index 77a95ccded..644c90a795 100644 --- a/erts/etc/common/typer.c +++ b/erts/etc/common/typer.c @@ -64,6 +64,9 @@ static int eargc; /* Number of arguments in eargv. */ static void error(char* format, ...); static void* emalloc(size_t size); +#ifdef HAVE_COPYING_PUTENV +static void efree(void *p); +#endif static char* strsave(char* string); static void push_words(char* src); static int run_erlang(char* name, char** argv); @@ -101,6 +104,29 @@ char *strerror(int errnum) } #endif /* !HAVE_STRERROR */ +static void +set_env(char *key, char *value) +{ +#ifdef __WIN32__ + WCHAR wkey[MAXPATHLEN]; + WCHAR wvalue[MAXPATHLEN]; + MultiByteToWideChar(CP_UTF8, 0, key, -1, wkey, MAXPATHLEN); + MultiByteToWideChar(CP_UTF8, 0, value, -1, wvalue, MAXPATHLEN); + if (!SetEnvironmentVariableW(wkey, wvalue)) + error("SetEnvironmentVariable(\"%s\", \"%s\") failed!", key, value); +#else + size_t size = strlen(key) + 1 + strlen(value) + 1; + char *str = emalloc(size); + sprintf(str, "%s=%s", key, value); + if (putenv(str) != 0) + error("putenv(\"%s\") failed!", str); +#ifdef HAVE_COPYING_PUTENV + efree(str); +#endif +#endif +} + + #ifdef __WIN32__ int wmain(int argc, wchar_t **wcargv) { @@ -129,6 +155,10 @@ main(int argc, char** argv) #endif emulator = get_default_emulator(argv[0]); + /* + * Add scriptname to env + */ + set_env("ESCRIPT_NAME", argv[0]); /* * Allocate the argv vector to be used for arguments to Erlang. @@ -353,6 +383,14 @@ erealloc(void *p, size_t size) } #endif +#ifdef HAVE_COPYING_PUTENV +static void +efree(void *p) +{ + free(p); +} +#endif + static char* strsave(char* string) { |