diff options
Diffstat (limited to 'lib/erl_interface/src/connect/send.c')
-rw-r--r-- | lib/erl_interface/src/connect/send.c | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/lib/erl_interface/src/connect/send.c b/lib/erl_interface/src/connect/send.c index f9337187ab..df2e3e023d 100644 --- a/lib/erl_interface/src/connect/send.c +++ b/lib/erl_interface/src/connect/send.c @@ -67,19 +67,31 @@ int ei_send_encoded_tmo(int fd, const erlang_pid *to, /* check that he can receive trace tokens first */ if (ei_distversion(fd) > 0) token = ei_trace(0,NULL); + EI_CONN_SAVE_ERRNO__(EINVAL); + /* header = SEND, cookie, to max sizes: */ - ei_encode_version(header,&index); /* 1 */ + if (ei_encode_version(header,&index) < 0) /* 1 */ + return ERL_ERROR; if (token) { - ei_encode_tuple_header(header,&index,4); /* 2 */ - ei_encode_long(header,&index,ERL_SEND_TT); /* 2 */ + if (ei_encode_tuple_header(header,&index,4) < 0) /* 2 */ + return ERL_ERROR; + if (ei_encode_long(header,&index,ERL_SEND_TT) < 0) /* 2 */ + return ERL_ERROR; } else { - ei_encode_tuple_header(header,&index,3); - ei_encode_long(header,&index,ERL_SEND); + if (ei_encode_tuple_header(header,&index,3) < 0) + return ERL_ERROR; + if (ei_encode_long(header,&index,ERL_SEND) < 0) + return ERL_ERROR; } - ei_encode_atom(header,&index,ei_getfdcookie(fd)); /* 258 */ - ei_encode_pid(header,&index,to); /* 268 */ + if (ei_encode_atom(header,&index,ei_getfdcookie(fd)) < 0) /* 258 */ + return ERL_ERROR; + if (ei_encode_pid(header,&index,to) < 0) /* 268 */ + return ERL_ERROR; - if (token) ei_encode_trace(header,&index,token); /* 534 */ + if (token) { + if (ei_encode_trace(header,&index,token) < 0) /* 534 */ + return ERL_ERROR; + } /* control message (precedes header actually) */ /* length = 1 ('p') + header len + message len */ @@ -107,9 +119,11 @@ int ei_send_encoded_tmo(int fd, const erlang_pid *to, err = EIO; if (err) { EI_CONN_SAVE_ERRNO__(err); - return -1; + return ERL_ERROR; } + erl_errno = 0; + return 0; } #endif /* EI_HAVE_STRUCT_IOVEC__ */ @@ -121,7 +135,7 @@ int ei_send_encoded_tmo(int fd, const erlang_pid *to, err = EIO; if (err) { EI_CONN_SAVE_ERRNO__(err); - return -1; + return ERL_ERROR; } len = tot_len = (ssize_t) msglen; @@ -130,9 +144,10 @@ int ei_send_encoded_tmo(int fd, const erlang_pid *to, err = EIO; if (err) { EI_CONN_SAVE_ERRNO__(err); - return -1; + return ERL_ERROR; } + erl_errno = 0; return 0; } |