diff options
author | Rickard Green <[email protected]> | 2017-08-21 15:25:00 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2017-08-23 14:24:38 +0200 |
commit | 319eefea3b2097b543751c63cebbb4a92011dbbf (patch) | |
tree | 7bef11f08173d416a989eb196966e06f85e17203 /erts/emulator/beam/bif.c | |
parent | 7c9ea890cd2530bffeafa82abeeee876fd24a6ba (diff) | |
download | otp-319eefea3b2097b543751c63cebbb4a92011dbbf.tar.gz otp-319eefea3b2097b543751c63cebbb4a92011dbbf.tar.bz2 otp-319eefea3b2097b543751c63cebbb4a92011dbbf.zip |
Unicode support for erlang:display_string/1
Diffstat (limited to 'erts/emulator/beam/bif.c')
-rw-r--r-- | erts/emulator/beam/bif.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c index 4c92b9ba2b..22805b5c02 100644 --- a/erts/emulator/beam/bif.c +++ b/erts/emulator/beam/bif.c @@ -3947,15 +3947,18 @@ BIF_RETTYPE display_string_1(BIF_ALIST_1) { Process* p = BIF_P; Eterm string = BIF_ARG_1; - Sint len = is_string(string); - char *str; + Sint len = erts_unicode_list_to_buf_len(string); + Sint written; + byte *str; + int res; - if (len <= 0) { + if (len < 0) { BIF_ERROR(p, BADARG); } - str = (char *) erts_alloc(ERTS_ALC_T_TMP, sizeof(char)*(len + 1)); - if (intlist_to_buf(string, str, len) != len) - erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error\n", __FILE__, __LINE__); + str = (byte *) erts_alloc(ERTS_ALC_T_TMP, sizeof(char)*(len + 1)); + res = erts_unicode_list_to_buf(string, str, len, &written); + if (res != 0 || written != len) + erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error (%d)\n", __FILE__, __LINE__, res); str[len] = '\0'; erts_fprintf(stderr, "%s", str); erts_free(ERTS_ALC_T_TMP, (void *) str); |