diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-07-20 06:20:36 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:29:47 -0500 |
commit | 240ca36cf2a3ceb89e46b73486865a4a57339c89 (patch) | |
tree | 7b6bd88d310719d197103a6fb2eae7f8980243ff | |
parent | a4428c814ad90884ac0b442233d318f061f221bc (diff) | |
download | samba-240ca36cf2a3ceb89e46b73486865a4a57339c89.tar.gz samba-240ca36cf2a3ceb89e46b73486865a4a57339c89.tar.xz samba-240ca36cf2a3ceb89e46b73486865a4a57339c89.zip |
r8635: make object inheritance with the builtin objects easy by allowing
callers to optionally supply an existing object to add the properties
to. So you can do:
var rpc = samr_init();
lsa_init(rpc);
and you end up with 'rpc' having both the samr and lsa functions and
constants available.
(This used to be commit 6a1ed328e27769bd52899fc2437a43fc17104eff)
-rw-r--r-- | source4/build/pidl/Parse/Pidl/Samba/EJS.pm | 9 | ||||
-rw-r--r-- | source4/scripting/ejs/mprutil.c | 14 | ||||
-rw-r--r-- | source4/scripting/ejs/smbcalls_ldb.c | 7 | ||||
-rw-r--r-- | source4/scripting/ejs/smbcalls_nss.c | 5 | ||||
-rw-r--r-- | source4/scripting/ejs/smbcalls_sys.c | 25 |
5 files changed, 33 insertions, 27 deletions
diff --git a/source4/build/pidl/Parse/Pidl/Samba/EJS.pm b/source4/build/pidl/Parse/Pidl/Samba/EJS.pm index 0aa8de7c93d..370db6d0e44 100644 --- a/source4/build/pidl/Parse/Pidl/Samba/EJS.pm +++ b/source4/build/pidl/Parse/Pidl/Samba/EJS.pm @@ -692,19 +692,18 @@ sub EjsInterface($$) pidl "static int ejs_$name\_init(int eid, int argc, struct MprVar **argv)"; pidl "{"; indent; - pidl "struct MprVar obj = mprObject(\"$name\");"; + pidl "struct MprVar *obj = mprInitObject(eid, \"$name\", argc, argv);"; foreach (@fns) { - pidl "mprSetCFunction(&obj, \"$_\", ejs_$_);"; + pidl "mprSetCFunction(obj, \"$_\", ejs_$_);"; } foreach my $v (keys %constants) { my $value = $constants{$v}; if (substr($value, 0, 1) eq "\"") { - pidl "mprSetVar(&obj, \"$v\", mprString($value));"; + pidl "mprSetVar(obj, \"$v\", mprString($value));"; } else { - pidl "mprSetVar(&obj, \"$v\", mprCreateNumberVar($value));"; + pidl "mprSetVar(obj, \"$v\", mprCreateNumberVar($value));"; } } - pidl "mpr_Return(eid, obj);"; pidl "return 0;"; deindent; pidl "}\n"; diff --git a/source4/scripting/ejs/mprutil.c b/source4/scripting/ejs/mprutil.c index f9813f25976..14d120c45aa 100644 --- a/source4/scripting/ejs/mprutil.c +++ b/source4/scripting/ejs/mprutil.c @@ -403,3 +403,17 @@ void mprSetThisPtr(int eid, const char *name, void *ptr) struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0); mprSetPtrChild(this, name, ptr); } + +/* + used by object xxx_init() routines to allow for the caller + to supply a pre-existing object to add properties to, + or create a new object. This makes inheritance easy +*/ +struct MprVar *mprInitObject(int eid, const char *name, int argc, struct MprVar **argv) +{ + if (argc > 0 && mprVarIsObject(argv[0]->type)) { + return argv[0]; + } + mpr_Return(eid, mprObject(name)); + return ejsGetReturnValue(eid); +} diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 0795db9018a..f09039731ff 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -273,7 +273,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) dbfile = argv[0]; - ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, argv+1); + ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, (const char **)(argv+1)); if (ldb == NULL) { ejsSetErrorMsg(eid, "ldb.connect failed to open %s", dbfile); } @@ -289,10 +289,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) */ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) { - struct MprVar *ldb; - mpr_Return(eid, mprObject("ldb")); - - ldb = ejsGetReturnValue(eid); + struct MprVar *ldb = mprInitObject(eid, "ldb", argc, argv); mprSetStringCFunction(ldb, "connect", ejs_ldbConnect); mprSetCFunction(ldb, "search", ejs_ldbSearch); diff --git a/source4/scripting/ejs/smbcalls_nss.c b/source4/scripting/ejs/smbcalls_nss.c index a804c14b7f4..6111ed57c25 100644 --- a/source4/scripting/ejs/smbcalls_nss.c +++ b/source4/scripting/ejs/smbcalls_nss.c @@ -141,10 +141,7 @@ static int ejs_getgrgid(MprVarHandle eid, int argc, struct MprVar **argv) */ static int ejs_nss_init(MprVarHandle eid, int argc, struct MprVar **argv) { - struct MprVar *nss; - mpr_Return(eid, mprObject("nss")); - - nss = ejsGetReturnValue(eid); + struct MprVar *nss = mprInitObject(eid, "nss", argc, argv); mprSetCFunction(nss, "getpwnam", ejs_getpwnam); mprSetCFunction(nss, "getpwuid", ejs_getpwuid); diff --git a/source4/scripting/ejs/smbcalls_sys.c b/source4/scripting/ejs/smbcalls_sys.c index b1fb854dfb8..61b89843dcf 100644 --- a/source4/scripting/ejs/smbcalls_sys.c +++ b/source4/scripting/ejs/smbcalls_sys.c @@ -193,19 +193,18 @@ static int ejs_sys_file_save(MprVarHandle eid, int argc, char **argv) */ static int ejs_sys_init(MprVarHandle eid, int argc, struct MprVar **argv) { - struct MprVar obj = mprObject("sys"); - - mprSetCFunction(&obj, "interfaces", ejs_sys_interfaces); - mprSetCFunction(&obj, "hostname", ejs_sys_hostname); - mprSetCFunction(&obj, "nttime", ejs_sys_nttime); - mprSetCFunction(&obj, "gmtime", ejs_sys_gmtime); - mprSetCFunction(&obj, "ldaptime", ejs_sys_ldaptime); - mprSetCFunction(&obj, "httptime", ejs_sys_httptime); - mprSetStringCFunction(&obj, "unlink", ejs_sys_unlink); - mprSetStringCFunction(&obj, "file_load", ejs_sys_file_load); - mprSetStringCFunction(&obj, "file_save", ejs_sys_file_save); - - mpr_Return(eid, obj); + struct MprVar *obj = mprInitObject(eid, "sys", argc, argv); + + mprSetCFunction(obj, "interfaces", ejs_sys_interfaces); + mprSetCFunction(obj, "hostname", ejs_sys_hostname); + mprSetCFunction(obj, "nttime", ejs_sys_nttime); + mprSetCFunction(obj, "gmtime", ejs_sys_gmtime); + mprSetCFunction(obj, "ldaptime", ejs_sys_ldaptime); + mprSetCFunction(obj, "httptime", ejs_sys_httptime); + mprSetStringCFunction(obj, "unlink", ejs_sys_unlink); + mprSetStringCFunction(obj, "file_load", ejs_sys_file_load); + mprSetStringCFunction(obj, "file_save", ejs_sys_file_save); + return 0; } |