mirror of
https://github.com/samba-team/samba.git
synced 2025-08-02 00:22:11 +03:00
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 6a1ed328e2
)
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
a4428c814a
commit
240ca36cf2
@ -692,19 +692,18 @@ sub EjsInterface($$)
|
|||||||
pidl "static int ejs_$name\_init(int eid, int argc, struct MprVar **argv)";
|
pidl "static int ejs_$name\_init(int eid, int argc, struct MprVar **argv)";
|
||||||
pidl "{";
|
pidl "{";
|
||||||
indent;
|
indent;
|
||||||
pidl "struct MprVar obj = mprObject(\"$name\");";
|
pidl "struct MprVar *obj = mprInitObject(eid, \"$name\", argc, argv);";
|
||||||
foreach (@fns) {
|
foreach (@fns) {
|
||||||
pidl "mprSetCFunction(&obj, \"$_\", ejs_$_);";
|
pidl "mprSetCFunction(obj, \"$_\", ejs_$_);";
|
||||||
}
|
}
|
||||||
foreach my $v (keys %constants) {
|
foreach my $v (keys %constants) {
|
||||||
my $value = $constants{$v};
|
my $value = $constants{$v};
|
||||||
if (substr($value, 0, 1) eq "\"") {
|
if (substr($value, 0, 1) eq "\"") {
|
||||||
pidl "mprSetVar(&obj, \"$v\", mprString($value));";
|
pidl "mprSetVar(obj, \"$v\", mprString($value));";
|
||||||
} else {
|
} else {
|
||||||
pidl "mprSetVar(&obj, \"$v\", mprCreateNumberVar($value));";
|
pidl "mprSetVar(obj, \"$v\", mprCreateNumberVar($value));";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pidl "mpr_Return(eid, obj);";
|
|
||||||
pidl "return 0;";
|
pidl "return 0;";
|
||||||
deindent;
|
deindent;
|
||||||
pidl "}\n";
|
pidl "}\n";
|
||||||
|
@ -403,3 +403,17 @@ void mprSetThisPtr(int eid, const char *name, void *ptr)
|
|||||||
struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0);
|
struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0);
|
||||||
mprSetPtrChild(this, name, ptr);
|
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);
|
||||||
|
}
|
||||||
|
@ -273,7 +273,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv)
|
|||||||
|
|
||||||
dbfile = argv[0];
|
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) {
|
if (ldb == NULL) {
|
||||||
ejsSetErrorMsg(eid, "ldb.connect failed to open %s", dbfile);
|
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)
|
static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||||
{
|
{
|
||||||
struct MprVar *ldb;
|
struct MprVar *ldb = mprInitObject(eid, "ldb", argc, argv);
|
||||||
mpr_Return(eid, mprObject("ldb"));
|
|
||||||
|
|
||||||
ldb = ejsGetReturnValue(eid);
|
|
||||||
|
|
||||||
mprSetStringCFunction(ldb, "connect", ejs_ldbConnect);
|
mprSetStringCFunction(ldb, "connect", ejs_ldbConnect);
|
||||||
mprSetCFunction(ldb, "search", ejs_ldbSearch);
|
mprSetCFunction(ldb, "search", ejs_ldbSearch);
|
||||||
|
@ -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)
|
static int ejs_nss_init(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||||
{
|
{
|
||||||
struct MprVar *nss;
|
struct MprVar *nss = mprInitObject(eid, "nss", argc, argv);
|
||||||
mpr_Return(eid, mprObject("nss"));
|
|
||||||
|
|
||||||
nss = ejsGetReturnValue(eid);
|
|
||||||
|
|
||||||
mprSetCFunction(nss, "getpwnam", ejs_getpwnam);
|
mprSetCFunction(nss, "getpwnam", ejs_getpwnam);
|
||||||
mprSetCFunction(nss, "getpwuid", ejs_getpwuid);
|
mprSetCFunction(nss, "getpwuid", ejs_getpwuid);
|
||||||
|
@ -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)
|
static int ejs_sys_init(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||||
{
|
{
|
||||||
struct MprVar obj = mprObject("sys");
|
struct MprVar *obj = mprInitObject(eid, "sys", argc, argv);
|
||||||
|
|
||||||
mprSetCFunction(&obj, "interfaces", ejs_sys_interfaces);
|
mprSetCFunction(obj, "interfaces", ejs_sys_interfaces);
|
||||||
mprSetCFunction(&obj, "hostname", ejs_sys_hostname);
|
mprSetCFunction(obj, "hostname", ejs_sys_hostname);
|
||||||
mprSetCFunction(&obj, "nttime", ejs_sys_nttime);
|
mprSetCFunction(obj, "nttime", ejs_sys_nttime);
|
||||||
mprSetCFunction(&obj, "gmtime", ejs_sys_gmtime);
|
mprSetCFunction(obj, "gmtime", ejs_sys_gmtime);
|
||||||
mprSetCFunction(&obj, "ldaptime", ejs_sys_ldaptime);
|
mprSetCFunction(obj, "ldaptime", ejs_sys_ldaptime);
|
||||||
mprSetCFunction(&obj, "httptime", ejs_sys_httptime);
|
mprSetCFunction(obj, "httptime", ejs_sys_httptime);
|
||||||
mprSetStringCFunction(&obj, "unlink", ejs_sys_unlink);
|
mprSetStringCFunction(obj, "unlink", ejs_sys_unlink);
|
||||||
mprSetStringCFunction(&obj, "file_load", ejs_sys_file_load);
|
mprSetStringCFunction(obj, "file_load", ejs_sys_file_load);
|
||||||
mprSetStringCFunction(&obj, "file_save", ejs_sys_file_save);
|
mprSetStringCFunction(obj, "file_save", ejs_sys_file_save);
|
||||||
|
|
||||||
mpr_Return(eid, obj);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user