diff options
author | Sverker Eriksson <[email protected]> | 2018-01-04 19:04:09 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2018-01-05 14:40:04 +0100 |
commit | f0123ff032ea2f9b4aa30322ad476e3f79757e79 (patch) | |
tree | 3133565d4c5530d546008a49fa8b62c35d8122e2 /erts/emulator/beam/erl_bif_binary.c | |
parent | f496717590d610bd08f02bec39f8e97886c68729 (diff) | |
download | otp-f0123ff032ea2f9b4aa30322ad476e3f79757e79.tar.gz otp-f0123ff032ea2f9b4aa30322ad476e3f79757e79.tar.bz2 otp-f0123ff032ea2f9b4aa30322ad476e3f79757e79.zip |
erts: Refactor more usage of erts_build_proc_bin
Diffstat (limited to 'erts/emulator/beam/erl_bif_binary.c')
-rw-r--r-- | erts/emulator/beam/erl_bif_binary.c | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/erts/emulator/beam/erl_bif_binary.c b/erts/emulator/beam/erl_bif_binary.c index dcffde5777..7bea1630cb 100644 --- a/erts/emulator/beam/erl_bif_binary.c +++ b/erts/emulator/beam/erl_bif_binary.c @@ -2731,28 +2731,21 @@ BIF_RETTYPE binary_copy_trap(BIF_ALIST_2) BIF_TRAP2(&binary_copy_trap_export, BIF_P, BIF_ARG_1, BIF_ARG_2); } else { Binary *save; - ProcBin* pb; + Eterm resbin; Uint target_size = cbs->result->orig_size; while (pos < target_size) { memcpy(t+pos,cbs->source, size); pos += size; } - save = cbs->result; + save = cbs->result; cbs->result = NULL; cleanup_copy_bin_state(mb); /* now cbs is dead */ - pb = (ProcBin *) HAlloc(BIF_P, PROC_BIN_SIZE); - pb->thing_word = HEADER_PROC_BIN; - pb->size = target_size; - pb->next = MSO(BIF_P).first; - MSO(BIF_P).first = (struct erl_off_heap_header*) pb; - pb->val = save; - pb->bytes = t; - pb->flags = 0; - - OH_OVERHEAD(&(MSO(BIF_P)), target_size / sizeof(Eterm)); - BUMP_REDS(BIF_P,(pos - opos) / BINARY_COPY_LOOP_FACTOR); - - BIF_RET(make_binary(pb)); + + resbin = erts_build_proc_bin(&MSO(BIF_P), + HAlloc(BIF_P, PROC_BIN_SIZE), + save); + BUMP_REDS(BIF_P,(pos - opos) / BINARY_COPY_LOOP_FACTOR); + BIF_RET(resbin); } } |