aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/sys
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/sys')
-rw-r--r--erts/emulator/sys/ose/erl_main.c15
-rw-r--r--erts/emulator/sys/ose/sys.c7
2 files changed, 22 insertions, 0 deletions
diff --git a/erts/emulator/sys/ose/erl_main.c b/erts/emulator/sys/ose/erl_main.c
index 322058c87b..a17fc7eabc 100644
--- a/erts/emulator/sys/ose/erl_main.c
+++ b/erts/emulator/sys/ose/erl_main.c
@@ -17,10 +17,25 @@
* %CopyrightEnd%
*/
+#include <stdlib.h>
+
int
main(int argc, char **argv) {
+ /* When starting using pm_create -c ARGV="-- -root ..", argv[0] is the first
+ part of ARGV and not the name of the executable. So we shuffle some
+ pointers here to make erl_start happy. */
+ if (argv[0][0] == '-') {
+ int i;
+ char **tmp_argv = malloc(sizeof(char*)*(argc+1));
+ for (i = 0; i < argc; i++)
+ tmp_argv[i+1] = argv[i];
+ tmp_argv = "beam";
+ erl_start(argc,tmp_argv);
+ free(tmp_argv);
+ } else {
erl_start(argc,argv);
+ }
stop(current_process());
diff --git a/erts/emulator/sys/ose/sys.c b/erts/emulator/sys/ose/sys.c
index a8eb0b93b4..a8a99ceca6 100644
--- a/erts/emulator/sys/ose/sys.c
+++ b/erts/emulator/sys/ose/sys.c
@@ -852,6 +852,11 @@ OS_PROCESS(fd_reader_process) {
}
#endif
+ if (fd == 0) {
+ FILE *ffd = stdin;
+ (void)stdin;
+ }
+
sigsel[1] = ERTS_SIGNAL_FD_DRV_ASYNC;
read_buf = (byte *) erts_alloc(ERTS_ALC_T_SYS_READ_BUF,
@@ -909,8 +914,10 @@ OS_PROCESS(fd_writer_process) {
/* Why do I need these?!? */
if (fd == 1) {
FILE* ffd = stdout;
+ (void)stdout;
} else if (fd == 2) {
FILE* ffd = stderr;
+ (void)stderr;
}
while (1) {