From 457a90fecc74c0a36da1b9252c9f9028932f42a0 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Tue, 7 Feb 2012 15:36:26 +0100 Subject: [PATCH] system: add getpid(), getuid(), getgid() These functions are useful sometimes (for example when building a PolkitSubject), and have no equivalent in GLib, therefore it's appropriate to place them in the system module. https://bugzilla.gnome.org/show_bug.cgi?id=646187 --- modules/system.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/modules/system.c b/modules/system.c index ea8a9a8..c7c5b5c 100644 --- a/modules/system.c +++ b/modules/system.c @@ -24,6 +24,9 @@ #include +#include +#include + #include #include @@ -75,6 +78,49 @@ gjs_gc(JSContext *context, JS_GC(context); return JS_TRUE; } + +static JSBool +gjs_getpid(JSContext *context, + uintN argc, + jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + jsval rval; + if (!gjs_parse_args(context, "getpid", "", argc, argv)) + return JS_FALSE; + rval = INT_TO_JSVAL(getpid()); + JS_SET_RVAL(context, vp, rval); + return JS_TRUE; +} + +static JSBool +gjs_getuid(JSContext *context, + uintN argc, + jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + jsval rval; + if (!gjs_parse_args(context, "getuid", "", argc, argv)) + return JS_FALSE; + rval = INT_TO_JSVAL(getuid()); + JS_SET_RVAL(context, vp, rval); + return JS_TRUE; +} + +static JSBool +gjs_getgid(JSContext *context, + uintN argc, + jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + jsval rval; + if (!gjs_parse_args(context, "getgid", "", argc, argv)) + return JS_FALSE; + rval = INT_TO_JSVAL(getgid()); + JS_SET_RVAL(context, vp, rval); + return JS_TRUE; +} + JSBool gjs_js_define_system_stuff(JSContext *context, JSObject *module) @@ -97,6 +143,24 @@ gjs_js_define_system_stuff(JSContext *context, 0, GJS_MODULE_PROP_FLAGS)) return JS_FALSE; + if (!JS_DefineFunction(context, module, + "getpid", + (JSNative) gjs_getpid, + 0, GJS_MODULE_PROP_FLAGS)) + return FALSE; + + if (!JS_DefineFunction(context, module, + "getuid", + (JSNative) gjs_getuid, + 0, GJS_MODULE_PROP_FLAGS)) + return FALSE; + + if (!JS_DefineFunction(context, module, + "getgid", + (JSNative) gjs_getgid, + 0, GJS_MODULE_PROP_FLAGS)) + return FALSE; + return JS_TRUE; } -- 1.7.10