From 7c3fc18315645f2f7a31732c0b1505a2bef29cb7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 7 Jul 2005 06:25:04 +0000 Subject: r8192: updated the glue code for the generated ejs functions from pidl only handles a small subset of all IDL files so far (This used to be commit 14b6436cc51f599572932bef72c49e0da4888073) --- source4/scripting/ejs/ejsrpc.c | 121 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 120 insertions(+), 1 deletion(-) (limited to 'source4/scripting/ejs/ejsrpc.c') diff --git a/source4/scripting/ejs/ejsrpc.c b/source4/scripting/ejs/ejsrpc.c index 990dee123c..242d748b36 100644 --- a/source4/scripting/ejs/ejsrpc.c +++ b/source4/scripting/ejs/ejsrpc.c @@ -95,6 +95,32 @@ static NTSTATUS mprSetVar(struct MprVar *v, const char *name, struct MprVar val) } +/* + start the ejs pull process for a structure +*/ +NTSTATUS ejs_pull_struct_start(struct ejs_rpc *ejs, struct MprVar **v, const char *name) +{ + *v = mprGetProperty(*v, name, NULL); + if (*v == NULL) { + return NT_STATUS_INVALID_PARAMETER; + } + return NT_STATUS_OK; +} + + +/* + start the ejs push process for a structure +*/ +NTSTATUS ejs_push_struct_start(struct ejs_rpc *ejs, struct MprVar **v, const char *name) +{ + struct MprVar s = mprCreateObjVar(name, MPR_DEFAULT_HASH_SIZE); + *v = mprSetProperty(*v, name, &s); + if (*v == NULL) { + return NT_STATUS_INVALID_PARAMETER; + } + return NT_STATUS_OK; +} + /* pull a uint8 from a mpr variable to a C element */ @@ -152,7 +178,6 @@ NTSTATUS ejs_pull_uint32(struct ejs_rpc *ejs, } *r = mprVarToInteger(var); return NT_STATUS_OK; - } NTSTATUS ejs_push_uint32(struct ejs_rpc *ejs, @@ -160,3 +185,97 @@ NTSTATUS ejs_push_uint32(struct ejs_rpc *ejs, { return mprSetVar(v, name, mprCreateIntegerVar(r)); } + +NTSTATUS ejs_pull_hyper(struct ejs_rpc *ejs, + struct MprVar *v, const char *name, uint64_t *r) +{ + struct MprVar *var; + var = mprGetVar(v, name); + if (var == NULL) { + return NT_STATUS_INVALID_PARAMETER_MIX; + } + *r = mprVarToInteger(var); + return NT_STATUS_OK; +} + +NTSTATUS ejs_push_hyper(struct ejs_rpc *ejs, + struct MprVar *v, const char *name, uint64_t r) +{ + return mprSetVar(v, name, mprCreateIntegerVar(r)); +} + + +/* + pull a enum from a mpr variable to a C element + a enum is just treating as an unsigned integer at this level +*/ +NTSTATUS ejs_pull_enum(struct ejs_rpc *ejs, + struct MprVar *v, const char *name, unsigned *r) +{ + struct MprVar *var; + var = mprGetVar(v, name); + if (var == NULL) { + return NT_STATUS_INVALID_PARAMETER_MIX; + } + *r = mprVarToInteger(var); + return NT_STATUS_OK; + +} + +NTSTATUS ejs_push_enum(struct ejs_rpc *ejs, + struct MprVar *v, const char *name, unsigned r) +{ + return mprSetVar(v, name, mprCreateIntegerVar(r)); +} + + +/* + pull an array of elements +*/ +NTSTATUS ejs_pull_array(struct ejs_rpc *ejs, + struct MprVar *v, const char *name, uint32_t length, + size_t elsize, void **r, ejs_pull_t ejs_pull) +{ + int i; + char *data; + + NDR_CHECK(ejs_pull_struct_start(ejs, &v, name)); + + (*r) = talloc_array_size(ejs, elsize, length); + NT_STATUS_HAVE_NO_MEMORY(*r); + + data = *r; + + for (i=0;i