summaryrefslogtreecommitdiff
path: root/lib/erl_interface/src/connect/send.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/erl_interface/src/connect/send.c')
-rw-r--r--lib/erl_interface/src/connect/send.c37
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;
}