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; }
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; }
static inline gboolean _read_metadata(SerializeArchive *sa, NVTableMetaData *meta_data) { if (!_read_magic(sa, &meta_data->magic)) { return FALSE; } if (!_read_flags(sa, &meta_data->flags)) { return FALSE; } if (_has_to_swap_bytes(meta_data->flags)) { meta_data->magic = GUINT32_SWAP_LE_BE(meta_data->magic); } if (memcmp((void *)&meta_data->magic, (const void *)NV_TABLE_MAGIC_V2, 4) != 0) { return FALSE; } return TRUE; }