aboutsummaryrefslogtreecommitdiffstats
path: root/lib/erl_interface/src/misc/ei_printterm.c
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2019-04-26 19:43:53 +0200
committerSverker Eriksson <[email protected]>2019-04-26 19:43:53 +0200
commit01aa8b82dd0f8229355ffd2bb2bc8e8f496d2df6 (patch)
tree0a3ae48dfe7f442aa138d7c06fbf5444e9f7c8b6 /lib/erl_interface/src/misc/ei_printterm.c
parent8f6d45ddc8b2b12376c252a30b267a822cad171a (diff)
downloadotp-01aa8b82dd0f8229355ffd2bb2bc8e8f496d2df6.tar.gz
otp-01aa8b82dd0f8229355ffd2bb2bc8e8f496d2df6.tar.bz2
otp-01aa8b82dd0f8229355ffd2bb2bc8e8f496d2df6.zip
erl_interface: Tweak bit string encode/decode API
to support zero copy decoding and bit offset arguments for future unaligned bit strings.
Diffstat (limited to 'lib/erl_interface/src/misc/ei_printterm.c')
-rw-r--r--lib/erl_interface/src/misc/ei_printterm.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/erl_interface/src/misc/ei_printterm.c b/lib/erl_interface/src/misc/ei_printterm.c
index a89b990ac1..5c40fb7747 100644
--- a/lib/erl_interface/src/misc/ei_printterm.c
+++ b/lib/erl_interface/src/misc/ei_printterm.c
@@ -250,12 +250,13 @@ static int print_term(FILE* fp, ei_x_buff* x,
ei_free(p);
break;
case ERL_BIT_BINARY_EXT: {
+ const char* cp;
size_t bits;
+ unsigned int bitoffs;
int trunc = 0;
- p = ei_malloc(n);
- if (p == NULL) goto err;
- if (ei_decode_bitstring(buf, index, p, n, &bits) < 0) {
- ei_free(p);
+
+ if (ei_decode_bitstring(buf, index, &cp, &bitoffs, &bits) < 0
+ || bitoffs != 0) {
goto err;
}
ch_written += xprintf(fp, x, "#Bits<");
@@ -266,15 +267,14 @@ static int print_term(FILE* fp, ei_x_buff* x,
}
--m;
for (i = 0; i < m; ++i) {
- ch_written += xprintf(fp, x, "%d,", p[i]);
+ ch_written += xprintf(fp, x, "%d,", cp[i]);
}
- ch_written += xprintf(fp, x, "%d", p[i]);
+ ch_written += xprintf(fp, x, "%d", cp[i]);
if (trunc)
ch_written += xprintf(fp, x, ",...");
else if (bits % 8 != 0)
ch_written += xprintf(fp, x, ":%u", (unsigned)(bits % 8));
xputc('>', fp, x); ++ch_written;
- ei_free(p);
break;
}
case ERL_SMALL_INTEGER_EXT: