diff options
author | Brian Cully <bjc@kublai.com> | 2012-02-06 20:15:48 -0500 |
---|---|---|
committer | Brian Cully <github.20.shmit@spamgourmet.com> | 2012-02-06 20:15:48 -0500 |
commit | 10b824963ff7b0b012e6b85c8b3f07904c473fd1 (patch) | |
tree | 344e00f788ea24c273f841636bdf92f354b40e2c /src/msg.c | |
parent | 591169f86718117151bf9eb5960ba58e2a27a5bb (diff) | |
download | mysqlerl-10b824963ff7b0b012e6b85c8b3f07904c473fd1.tar.gz mysqlerl-10b824963ff7b0b012e6b85c8b3f07904c473fd1.zip |
Remove stupid lib directory
Diffstat (limited to 'src/msg.c')
-rw-r--r-- | src/msg.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/msg.c b/src/msg.c new file mode 100644 index 0000000..00a5a6a --- /dev/null +++ b/src/msg.c @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2008, Brian Cully <bjc@kublai.com> + */ + +#include "msg.h" + +#include "io.h" +#include "log.h" + +#include <string.h> + +ETERM * +read_msg() +{ + ETERM *msg; + unsigned char *buf; + msglen_t len; + + logmsg("DEBUG: reading message length."); + if (restartable_read((unsigned char *)&len, sizeof(len)) == -1) { + logmsg("ERROR: couldn't read %d byte message prefix: %s.", + sizeof(len), strerror(errno)); + + exit(2); + } + + len = ntohl(len); + buf = (unsigned char *)malloc(len); + if (buf == NULL) { + logmsg("ERROR: Couldn't malloc %d bytes: %s.", len, + strerror(errno)); + + exit(2); + } + + logmsg("DEBUG: reading message body (len: %d).", len); + if (restartable_read(buf, len) == -1) { + logmsg("ERROR: couldn't read %d byte message: %s.", + len, strerror(errno)); + + free(buf); + exit(2); + } + + msg = erl_decode(buf); + free(buf); + + return msg; +} + +int +write_msg(ETERM *msg) +{ + unsigned char *buf; + msglen_t nlen, buflen; + + buflen = erl_term_len(msg); + buf = (unsigned char *)malloc(buflen); + erl_encode(msg, buf); + erl_free_term(msg); + + nlen = htonl(buflen); + if (restartable_write((unsigned char *)&nlen, sizeof(nlen)) == -1) { + free(buf); + return -1; + } + if (restartable_write(buf, buflen) == -1) { + free(buf); + return -1; + } + free(buf); + + return 0; +} |