diff --git a/src/sbbs3/js_file.c b/src/sbbs3/js_file.c index 13f24d2846fdc056a5cc3c8c73fe8a5edee32485..84edf630611236ad26e93ba18540e4cb5489128f 100644 --- a/src/sbbs3/js_file.c +++ b/src/sbbs3/js_file.c @@ -3015,10 +3015,14 @@ JSObject* DLLCALL js_CreateFileClass(JSContext* cx, JSObject* parent) return(obj); } -JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *name, FILE* fp) +JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *name, int fd, const char* mode) { JSObject* obj; private_t* p; + FILE* fp = fdopen(fd, mode); + + if(fp == NULL) + return NULL; obj = JS_DefineObject(cx, parent, name, &js_file_class, NULL ,JSPROP_ENUMERATE|JSPROP_READONLY); @@ -3037,7 +3041,6 @@ JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *nam dbprintf(TRUE, p, "JS_SetPrivate failed"); return(NULL); } - dbprintf(FALSE, p, "object created"); return(obj); diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c index d1bb065b82d8e46137375166293494979067c55e..1fdd748b051180c5d683d8483dc570abec171bd1 100644 --- a/src/sbbs3/js_global.c +++ b/src/sbbs3/js_global.c @@ -398,11 +398,11 @@ js_load(JSContext *cx, uintN argc, jsval *arglist) if (JS_HasProperty(cx, obj, "console", &success) && success) js_CreateConsoleObject(bg->cx, bg->obj); if (JS_HasProperty(cx, obj, "stdin", &success) && success) - js_CreateFileObject(bg->cx, bg->obj, "stdin", stdin); + js_CreateFileObject(bg->cx, bg->obj, "stdin", STDIN_FILENO, "r"); if (JS_HasProperty(cx, obj, "stdout", &success) && success) - js_CreateFileObject(bg->cx, bg->obj, "stdout", stdout); + js_CreateFileObject(bg->cx, bg->obj, "stdout", STDOUT_FILENO, "w"); if (JS_HasProperty(cx, obj, "stderr", &success) && success) - js_CreateFileObject(bg->cx, bg->obj, "stderr", stderr); + js_CreateFileObject(bg->cx, bg->obj, "stderr", STDERR_FILENO, "w"); JS_SetContextPrivate(bg->cx, bg); exec_cx = bg->cx; diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c index 66c5289ba66fe17fc0e0b2179ec6d7ae1232f8df..d3e45b85014d5cbb46ab93adfe1380ff6fbbbb1f 100644 --- a/src/sbbs3/jsexec.c +++ b/src/sbbs3/jsexec.c @@ -856,17 +856,17 @@ static BOOL js_init(char** env) } /* STDIO objects */ - if(!js_CreateFileObject(js_cx, js_glob, "stdout", stdout)) { + if(!js_CreateFileObject(js_cx, js_glob, "stdout", STDOUT_FILENO, "w")) { JS_ENDREQUEST(js_cx); return(FALSE); } - if(!js_CreateFileObject(js_cx, js_glob, "stdin", stdin)) { + if(!js_CreateFileObject(js_cx, js_glob, "stdin", STDIN_FILENO, "r")) { JS_ENDREQUEST(js_cx); return(FALSE); } - if(!js_CreateFileObject(js_cx, js_glob, "stderr", stderr)) { + if(!js_CreateFileObject(js_cx, js_glob, "stderr", STDERR_FILENO, "w")) { JS_ENDREQUEST(js_cx); return(FALSE); } diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index 19bc9a3cec19519dd78baf01754282cffb25d2ab..983636d4fabd05b3f2752c52f55341253c399246 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -1336,7 +1336,7 @@ extern "C" { /* js_file.c */ DLLEXPORT JSObject* DLLCALL js_CreateFileClass(JSContext* cx, JSObject* parent); - DLLEXPORT JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *name, FILE* fp); + DLLEXPORT JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *name, int fd, const char* mode); /* js_sprintf.c */ DLLEXPORT char* DLLCALL js_sprintf(JSContext* cx, uint argn, unsigned argc, jsval *argv);