diff options
author | Sverker Eriksson <[email protected]> | 2019-04-26 19:43:53 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2019-04-26 19:43:53 +0200 |
commit | 01aa8b82dd0f8229355ffd2bb2bc8e8f496d2df6 (patch) | |
tree | 0a3ae48dfe7f442aa138d7c06fbf5444e9f7c8b6 /lib/erl_interface/src/misc/ei_printterm.c | |
parent | 8f6d45ddc8b2b12376c252a30b267a822cad171a (diff) | |
download | otp-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.c | 14 |
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: |