diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-09-07 16:14:08 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-09-07 16:14:08 +0200 |
commit | ad1edf75418797d444e419cb21af710e9546b6f2 (patch) | |
tree | 722106bb15d32ee809cd7ed3d2a9cf40419fd9ed /sys/src/libaml | |
parent | 1b32bd5f0f96a9ac3e4de470388f66c1957d8f14 (diff) |
libaml: fix uninitialized variable in getle(), make amleval() work with buildin methods
Diffstat (limited to 'sys/src/libaml')
-rw-r--r-- | sys/src/libaml/aml.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/src/libaml/aml.c b/sys/src/libaml/aml.c index 9d1298eb7..e90e711f7 100644 --- a/sys/src/libaml/aml.c +++ b/sys/src/libaml/aml.c @@ -460,6 +460,7 @@ getle(uchar *p, int len) uvlong v; int i; + v = 0ULL; for(i=0; i<len; i++) v |= ((uvlong)p[i]) << i*8; return v; @@ -1504,7 +1505,7 @@ evalcall(void) FP->env = e; FP->narg = 0; FP->dot = m->name; - if(m->eval){ + if(m->eval != nil){ FP->op = nil; FP->end = PC; return (*m->eval)(); @@ -2187,7 +2188,15 @@ amleval(void *dot, char *fmt, ...) m = dot; if(i != m->narg) return -1; - return xec(m->start, m->end, forkname(m->name), e, r); + if(m->eval == nil) + return xec(m->start, m->end, forkname(m->name), e, r); + FP = FB; + FP->op = nil; + FP->env = e; + FP->narg = 0; + FP->dot = m->name; + FP->ref = FP->aux = nil; + dot = (*m->eval)(); } if(r != nil) *r = dot; |