NVTable * nv_table_deserialize(LogMessageSerializationState *state) { SerializeArchive *sa = state->sa; NVTableMetaData meta_data; NVTable *res = NULL; if (!_read_metadata(sa, &meta_data)) goto error; if (!_read_header(sa, &res)) goto error; state->nvtable_flags = meta_data.flags; state->nvtable = res; if (!_read_struct(sa, res)) goto error; if (!_read_payload(sa, res)) goto error; if (_has_to_swap_bytes(meta_data.flags)) nv_table_data_swap_bytes(res); return res; error: if (res) g_free(res); return NULL; }
int read_request(int peerfd, struct request *req) { int nbytes, error; char *buf = NULL; size_t buf_len; buf_len = REQUEST_BUFFER_LEN + 1; if ((buf = malloc(buf_len)) == NULL) { return EMEMALOC; /* memory allocation error */ } log_ln(MEM_DEBUG, "allocated %zuB for recv buffer\n", buf_len); error = nbytes = recv(peerfd, buf, REQUEST_HEAD_LEN, 0); buf[nbytes] = '\0'; if (nbytes) { if ((_read_header(buf, req)) != 0) { error |= EREADHEAD; /* error reading header */ } if (req->method == MPOST && req->content_len) { if ((_read_body(buf, req)) != 0) { error |= ERRORBODY; /* error reading body */ } else { log_ln(DEBUG, "got data \"%s\"\n", req->body->buf); } } } else { if (nbytes == 0) { error = ECONNRST; /* connection reset */ } else if (nbytes == -1) { error = ESOCKERR; /* read error */ } else { error = EUNKNOWN; } } free(buf); log_ln(MEM_DEBUG, "freed recv buffer\n"); return error; }
NVTable * nv_table_deserialize(SerializeArchive *sa) { NVTableMetaData meta_data; NVTable *res = NULL; if (!_read_metadata(sa, &meta_data)) { goto error; } if (!_read_header(sa, &res)) { goto error; } if (!_read_struct(sa, res)) { goto error; } if (!_read_payload(sa, res)) { goto error; } if (_has_to_swap_bytes(meta_data.flags)) { nv_table_data_swap_bytes(res); } return res; error: if (res) g_free(res); return NULL; }