aboutsummaryrefslogtreecommitdiffstats
path: root/lib/erl_interface/src/decode/decode_trace.c
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2013-02-08 16:21:07 +0100
committerSverker Eriksson <[email protected]>2013-02-08 16:21:07 +0100
commit7d1060c624676c5dde532d1cb59fa177329f4178 (patch)
treef7595f06dfb9553b11faf2656aefc175f6915178 /lib/erl_interface/src/decode/decode_trace.c
parent9a476f1c86845c4bd15ed849f07fc788b593e2fa (diff)
parentf822540687d16eecfcd2d74b55091593c674d478 (diff)
downloadotp-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.c28
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 */