diff options
author | Sverker Eriksson <[email protected]> | 2013-02-08 16:21:07 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2013-02-08 16:21:07 +0100 |
commit | 7d1060c624676c5dde532d1cb59fa177329f4178 (patch) | |
tree | f7595f06dfb9553b11faf2656aefc175f6915178 /lib/erl_interface/src/decode/decode_trace.c | |
parent | 9a476f1c86845c4bd15ed849f07fc788b593e2fa (diff) | |
parent | f822540687d16eecfcd2d74b55091593c674d478 (diff) | |
download | otp-7d1060c624676c5dde532d1cb59fa177329f4178.tar.gz otp-7d1060c624676c5dde532d1cb59fa177329f4178.tar.bz2 otp-7d1060c624676c5dde532d1cb59fa177329f4178.zip |
Merge branch 'sverk/r16/erl_interface-fixup'
* sverk/r16/erl_interface-fixup:
erl_interface: Fix ei_skip_term
Diffstat (limited to 'lib/erl_interface/src/decode/decode_trace.c')
-rw-r--r-- | lib/erl_interface/src/decode/decode_trace.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/lib/erl_interface/src/decode/decode_trace.c b/lib/erl_interface/src/decode/decode_trace.c index ebaa78e29e..88fb3451ec 100644 --- a/lib/erl_interface/src/decode/decode_trace.c +++ b/lib/erl_interface/src/decode/decode_trace.c @@ -22,18 +22,30 @@ int ei_decode_trace(const char *buf, int *index, erlang_trace *p) { int arity = 0; - int tindex = *index; - - /* use a temporary index if any function should fail */ + int tindex = *index; /* use a temporary index if any function should fail */ + long *p_flags, *p_label, *p_serial, *p_prev; + erlang_pid *p_from; + + if (p != NULL) { + p_flags = &p->flags; + p_label = &p->label; + p_serial = &p->serial; + p_prev = &p->prev; + p_from = &p->from; + } + else { + p_flags = p_label = p_serial = p_prev = NULL; + p_from = NULL; + } /* { Flags, Label, Serial, FromPid, Prev } */ if (ei_decode_tuple_header(buf, &tindex, &arity) || (arity != 5) - || ei_decode_long(buf, &tindex, &p->flags) - || ei_decode_long(buf, &tindex, &p->label) - || ei_decode_long(buf, &tindex, &p->serial) - || ei_decode_pid( buf, &tindex, &p->from) - || ei_decode_long(buf, &tindex, &p->prev)) return -1; + || ei_decode_long(buf, &tindex, p_flags) + || ei_decode_long(buf, &tindex, p_label) + || ei_decode_long(buf, &tindex, p_serial) + || ei_decode_pid( buf, &tindex, p_from) + || ei_decode_long(buf, &tindex, p_prev)) return -1; /* index is updated by the functions we called */ |