summaryrefslogtreecommitdiff
path: root/source4/scripting/ejs/mprutil.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-11-02 01:04:00 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:45:39 -0500
commit783851099b43236666b2fc0cc866834773d6e7b7 (patch)
tree277745750144e4e326ae1ad6e246daba042c332c /source4/scripting/ejs/mprutil.c
parente8c23e4e2d9aab7fcf0e7653756c84ef6cf34ed6 (diff)
downloadsamba-783851099b43236666b2fc0cc866834773d6e7b7.tar.gz
samba-783851099b43236666b2fc0cc866834773d6e7b7.tar.bz2
samba-783851099b43236666b2fc0cc866834773d6e7b7.zip
r11458: fixed our ejs smbscript interfaces to use arrays where appropriate. In
js arrays are a special type of object where the length property is automatic, and cannot be modified manually. Our code was manually setting length, which made it abort when someone passed in a real ejs array. To fix this we need to create real arrays instead of objects, and remove the code that manually sets the length (This used to be commit ebdd1393fde44a0a35446d1a922d29a7c1769ba7)
Diffstat (limited to 'source4/scripting/ejs/mprutil.c')
-rw-r--r--source4/scripting/ejs/mprutil.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/source4/scripting/ejs/mprutil.c b/source4/scripting/ejs/mprutil.c
index 9634c9bf42..91683db6bd 100644
--- a/source4/scripting/ejs/mprutil.c
+++ b/source4/scripting/ejs/mprutil.c
@@ -33,6 +33,14 @@ struct MprVar mprObject(const char *name)
}
/*
+ return a empty mpr array
+*/
+struct MprVar mprArray(const char *name)
+{
+ return ejsCreateArray(name && *name?name:"(NULL)", 0);
+}
+
+/*
find a mpr component, allowing for sub objects, using the '.' convention
*/
NTSTATUS mprGetVar(struct MprVar **v, const char *name)
@@ -101,7 +109,6 @@ struct MprVar mprObject(const char *name)
char idx[16];
mprItoa(i, idx, sizeof(idx));
mprSetVar(var, idx, v);
- mprSetVar(var, "length", mprCreateIntegerVar(i+1));
}
/*
@@ -112,13 +119,10 @@ struct MprVar mprList(const char *name, const char **list)
struct MprVar var;
int i;
- var = mprObject(name);
+ var = mprArray(name);
for (i=0;list && list[i];i++) {
mprAddArray(&var, i, mprString(list[i]));
}
- if (i==0) {
- mprSetVar(&var, "length", mprCreateIntegerVar(i));
- }
return var;
}
@@ -182,7 +186,7 @@ static struct MprVar mprLdbMessage(struct ldb_context *ldb, struct ldb_message *
val = mprData(v.data, v.length);
} else {
int j;
- val = mprObject(el->name);
+ val = mprArray(el->name);
for (j=0;j<el->num_values;j++) {
if (attr->ldif_write_fn(ldb, msg,
&el->values[j], &v) != 0) {
@@ -214,13 +218,10 @@ struct MprVar mprLdbArray(struct ldb_context *ldb,
struct MprVar res;
int i;
- res = mprObject(name);
+ res = mprArray(name);
for (i=0;i<count;i++) {
mprAddArray(&res, i, mprLdbMessage(ldb, msg[i]));
}
- if (i==0) {
- mprSetVar(&res, "length", mprCreateIntegerVar(0));
- }
return res;
}
@@ -230,6 +231,9 @@ struct MprVar mprLdbArray(struct ldb_context *ldb,
*/
const char *mprToString(const struct MprVar *v)
{
+ if (v->trigger) {
+ mprReadProperty(v, 0);
+ }
if (!mprVarIsString(v->type)) return NULL;
return v->string;
}
@@ -239,6 +243,9 @@ const char *mprToString(const struct MprVar *v)
*/
int mprToInt(const struct MprVar *v)
{
+ if (v->trigger) {
+ mprReadProperty(v, 0);
+ }
if (!mprVarIsNumber(v->type)) return 0;
return mprVarToNumber(v);
}