diff options
author | Serge Aleynikov <[email protected]> | 2015-06-02 08:44:23 -0400 |
---|---|---|
committer | Ingela Anderton Andin <[email protected]> | 2015-10-26 09:05:30 +0100 |
commit | 285b4fa13914dc4748c1020213a9c65cad3d2738 (patch) | |
tree | 35e3c451519fe0f1d5d0c6be53d6aa58ffca1d7a /erts/emulator/beam/erl_bif_port.c | |
parent | a76cc1d337c0bf44ecefebeccac2d08e496ba7e8 (diff) | |
download | otp-285b4fa13914dc4748c1020213a9c65cad3d2738.tar.gz otp-285b4fa13914dc4748c1020213a9c65cad3d2738.tar.bz2 otp-285b4fa13914dc4748c1020213a9c65cad3d2738.zip |
erts: Add {line_delimiter, byte()} option to inet:setopts/2
A new {line_delimiter, byte()} option allows line-oriented TCP-based protocols
to use a custom line delimiting character. It is to be used in conjunction
with {packet, line}.
This option also works with erlang:decode_packet/3 when its first argument
is 'line'.
Diffstat (limited to 'erts/emulator/beam/erl_bif_port.c')
-rw-r--r-- | erts/emulator/beam/erl_bif_port.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_bif_port.c b/erts/emulator/beam/erl_bif_port.c index 3ff54c7a60..e47d7bcbbb 100644 --- a/erts/emulator/beam/erl_bif_port.c +++ b/erts/emulator/beam/erl_bif_port.c @@ -1329,7 +1329,8 @@ BIF_RETTYPE decode_packet_3(BIF_ALIST_3) ErlSubBin* rest; Eterm res; Eterm options; - int code; + int code; + char delimiter = '\n'; if (!is_binary(BIF_ARG_2) || (!is_list(BIF_ARG_3) && !is_nil(BIF_ARG_3))) { @@ -1370,6 +1371,11 @@ BIF_RETTYPE decode_packet_3(BIF_ALIST_3) case am_line_length: trunc_len = val; goto next_option; + case am_line_delimiter: + if (type == TCP_PB_LINE_LF && val >= 0 && val <= 255) { + delimiter = (char)val; + goto next_option; + } } } } @@ -1390,7 +1396,7 @@ BIF_RETTYPE decode_packet_3(BIF_ALIST_3) pca.aligned_ptr = bin_ptr; } packet_sz = packet_get_length(type, (char*)pca.aligned_ptr, pca.bin_sz, - max_plen, trunc_len, &http_state); + max_plen, trunc_len, delimiter, &http_state); if (!(packet_sz > 0 && packet_sz <= pca.bin_sz)) { if (packet_sz < 0) { goto error; |