From 9109c3e68eb940b4edf9cdaaca95d660056e1158 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Thu, 3 Jun 2010 01:38:43 +0000 Subject: [PATCH] Revert Cyan's mod (removing global kill() function), created system.check_pid() and system.terminate_pid() methods - untested. --- src/sbbs3/js_global.c | 35 ----------------------------- src/sbbs3/js_system.c | 51 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 35 deletions(-) diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c index 16fb1c0967..679db73f68 100644 --- a/src/sbbs3/js_global.c +++ b/src/sbbs3/js_global.c @@ -2792,34 +2792,6 @@ js_disksize(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) return(JS_TRUE); } -static JSBool -js_kill(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) -{ - int32 pid=0; - int32 sig=0; - int ds; - jsrefcount rc; - - if(JSVAL_IS_VOID(argv[0])) - return(JS_TRUE); - - if(argc<2) /* Require two arguments here - is this correct handling? */ - return(JS_FALSE); - - /* Convert JS values to C integers.. */ - JS_ValueToInt32(cx,argv[0],&sig); - JS_ValueToInt32(cx,argv[1],&pid); - - rc=JS_SUSPENDREQUEST(cx); - ds = kill(sig, pid); - if (ds == -1) - ds = errno; - JS_RESUMEREQUEST(cx, rc); - JS_NewNumberValue(cx,ds,rval); - - return(JS_TRUE); -} - static JSBool js_socket_select(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -3328,13 +3300,6 @@ static jsSyncMethodSpec js_global_functions[] = { "specify a <i>unit_size</i> of <tt>1024</tt> to return the total disk size in <i>kilobytes</i>.") ,314 }, - {"kill", js_kill, 2, JSTYPE_NUMBER, -JSDOCSTR("processid, signal") - ,JSDOCSTR("send a signal to a system process, returns 0 on success, and " - "a non-zero errno value upon failure that is likely platform dependent." - " Useful for checking process ID validity (i.e., by sending signal 0.)") - ,311 - }, {"socket_select", js_socket_select, 0, JSTYPE_ARRAY, JSDOCSTR("[array of socket objects or descriptors] [,timeout=<tt>0</tt>] [,write=<tt>false</tt>]") ,JSDOCSTR("checks an array of socket objects or descriptors for read or write ability (default is <i>read</i>), " "default timeout value is 0.0 seconds (immediate timeout), " diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c index dd8c7ed693..8297ca7473 100644 --- a/src/sbbs3/js_system.c +++ b/src/sbbs3/js_system.c @@ -1473,6 +1473,47 @@ js_chkname(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) return(JS_TRUE); } +static JSBool +js_chkpid(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + int32 pid=0; + jsrefcount rc; + + *rval = JSVAL_FALSE; + + if(argc<1) + return(JS_TRUE); + + JS_ValueToInt32(cx,argv[0],&pid); + + rc=JS_SUSPENDREQUEST(cx); + *rval = BOOLEAN_TO_JSVAL(check_pid(pid)); + JS_RESUMEREQUEST(cx, rc); + + return(JS_TRUE); +} + +static JSBool +js_killpid(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + int32 pid=0; + jsrefcount rc; + + *rval = JSVAL_FALSE; + + if(argc<1) + return(JS_TRUE); + + JS_ValueToInt32(cx,argv[0],&pid); + + rc=JS_SUSPENDREQUEST(cx); + *rval = BOOLEAN_TO_JSVAL(terminate_pid(pid)); + JS_RESUMEREQUEST(cx, rc); + + return(JS_TRUE); +} + + static jsSyncMethodSpec js_system_functions[] = { {"username", js_username, 1, JSTYPE_STRING, JSDOCSTR("number") ,JSDOCSTR("returns name of user in specified user record <i>number</i>, or empty string if not found") @@ -1571,6 +1612,16 @@ static jsSyncMethodSpec js_system_functions[] = { "returns <i>true</i> if it is valid") ,315 }, + {"check_pid", js_chkpid, 1, JSTYPE_BOOLEAN, JSDOCSTR("process-ID") + ,JSDOCSTR("checks that the provided process ID is a valid executing process on the system, " + "returns <i>true</i> if it is valid") + ,315 + }, + {"terminate_pid", js_killpid, 1, JSTYPE_BOOLEAN, JSDOCSTR("process-ID") + ,JSDOCSTR("terminates executing process on the system with the specified process ID, " + "returns <i>true</i> on success") + ,315 + }, {0} }; -- GitLab