Age | Commit message (Collapse) | Author |
|
|
|
in order to be backward compatible with user code that
accesses the members of erlang_pid and friend.
The documentation does not mention the content of these structs,
but we have example code that does. So the safe way it the revert
the node_org_enc field (added in R16A) and instead determine in
runtime which atom encoding to use depending on if the node atom
contains unicode (>255) characters or not.
|
|
to make the API independent of the actual type of erlang_char_encoding
|
|
* lukas/erl_interface/test_atom_as_functions/OTP-10753:
Return if size test fails
Add utf8 atom encode and decode testcases
Validate UTF8/ASCII when buf is NULL
|
|
|
|
This is needed in order to avoid potential buffer overruns
in the encode functions
|
|
|
|
|
|
|
|
No API changes or additions. Just the ability for erl_interface to decode
unicode atoms and convert them into latin1 strings to preserve backward
compatibility for the existing API.
|
|
|
|
|
|
Note that ei_decode_term.h has the correct behaviour described!
Also removed extraneous '/* return 0; */' comments.
|
|
|
|
|
|
* vb/ei-exts:
Fix testcases erl_global_whereis, erl_global_names
Fix wrong erl_compare_ext result comparing lists
Correct erl_global{register, unregister} functions
Add PID (~p) type parameters to ei_format
Add char (~c) type parameters to ei_format
OTP-9015
Conflicts:
lib/erl_interface/include/ei.h
|
|
|
|
|
|
|
|
|
|
|
|
Teach the format string parser used for ei_x_format() and
ei_x_format_wo_ver() about unary negative and positive operators on
numbers. Previously, passing a negative numeric constant or a positive
numeric constant with an explicit leading plus sign within the format
string would cause these functions to fail.
Augment the format_wo_ver unit test in the ei_format suite with a
regression test for these cases.
An easy way to reproduce the problem is to use erl_call:
erl_call -s foo@bar -a 'erlang list_to_integer [-1]'
Without this change, erl_call fails with a -1 exit status. With this
change, it properly prints "-1".
|
|
For platforms that support writev, ei uses iovec structures to be able
to easily send noncontiguous data buffers. When sending large
messages, the socket can of course block, in which case ei adjusts its
iovecs to pick up where it left off when the socket becomes writeable
again. Unfortunately the code that handled the case when the number of
bytes written are less than the current iovec size adjusted only the
iovec byte count but not the iovec data pointer, resulting in the same
data being sent multiple times.
The fix is trivial: in addition to subtracting the count of bytes
already written from the current iovec's size, also increment the
current iovec's data pointer by the number of bytes already written.
Tested manually on Linux and verified to fix a problem detected in
production with writing large binaries from a cnode to a regular
node. No unit tests were added, however, because they use the local
loopback which acts more like a pipe than an inter-host TCP
connection. The closing of the TCP window on the receiving side and
the resultant write blocking on the socket, which in turn caused the
code that mishandled the iovecs to be exercised, could unfortunately
not be readily duplicated in the erl_interface test suite.
|
|
- Removed unused variable in ei_decode_term.c
- Fixed faulty deallocation
|
|
* sv/serge-new_float_ext:
Let ei_get_type() return ERL_FLOAT_EXT instead of NEW_FLOAT_EXT
Fix ei_tmo to restrict dflags to NEW_FLOAT_EXT
compact IEEE 754 double encoding in external binary format for ei
fix typo in ei_decode_ei_term documentation
OTP-8684 sv/serge-new_float_ext
compact IEEE 754 double encoding in external binary format for ei
Implement the compact IEEE 754 double encoding in external binary format
for ei. Encoding for ei now always produces the NEW_FLOAT_EXT format.
Decoding and term printing handle both the old ERL_FLOAT_EXT encoding and
the new NEW_FLOAT_EXT encoding.
Legacy erl_interface code also handles the new encoding, but still produces
the ERL_FLOAT_EXT encoding by default.
Also enable the DFLAG_NEW_FLOATS distribution flag.
ei_get_type() will return ERL_FLOAT_EXT regardless if the external format
is encoded with ERL_FLOAT_EXT or NEW_FLOAT_EXT for doubles.
Reduce the number of copies of the code for encoding and decoding doubles
throughout ei and erl_interface by instead calling the ei encoding and
decoding functions wherever possible.
Restore commented-out float tests in ei_decode_SUITE and ei_encode_SUITE in
lib/erl_interface/test. Modify them to make them match the style of other
tests in the same suites.
These changes are based on an ei float patch from Serge Aleynikov
originally submitted against R12B-2 in July 2008 and reworked by Steve
Vinoski May 2010.
|
|
|
|
Implement the compact IEEE 754 double encoding in external binary
format for ei. Encoding for ei now always produces the NEW_FLOAT_EXT
format. Decoding and term printing handle both the old ERL_FLOAT_EXT
encoding and the new NEW_FLOAT_EXT encoding. Legacy erl_interface code
also handles the new encoding, but still produces the ERL_FLOAT_EXT
encoding by default.
Also enable the DFLAG_NEW_FLOATS distribution flag.
Reduce the number of copies of the code for encoding and decoding
doubles throughout ei and erl_interface by instead calling the ei
encoding and decoding functions wherever possible.
Restore commented-out float tests in ei_decode_SUITE and
ei_encode_SUITE in lib/erl_interface/test. Modify them to make them
match the style of other tests in the same suites.
These changes are based on an ei float patch from Serge Aleynikov
originally submitted against R12B-2 in July 2008.
|
|
The symbol ei_tracelevel was not declared extern which could
crash the linking step on some compilers.
Updated .gitignore to ignore object files in erl_interface.
|
|
|