コード例 #1
0
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;
}
コード例 #2
0
ファイル: nvtable-serialize.c プロジェクト: Cytrian/syslog-ng
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;
}
コード例 #3
0
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;
}