ETERM * read_msg() { ETERM *msg; unsigned char *buf; msglen_t len; if (restartable_read((unsigned char *)&len, sizeof(len)) == -1) { if (errno == 0) { logmsg("INFO: got end of file from Erlang process, shutting down."); exit(0); } logmsg("ERROR: couldn't read %d byte message prefix: %s.", sizeof(len), strerror(errno)); exit(2); } len = ntohl(len); buf = (unsigned char *)safe_malloc(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; }
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; }