示例#1
0
int meta_data_get_boolean(meta_data_t *md, /* {{{ */
                          const char *key, _Bool *value) {
  meta_entry_t *e;

  if ((md == NULL) || (key == NULL) || (value == NULL))
    return (-EINVAL);

  pthread_mutex_lock(&md->lock);

  e = md_entry_lookup(md, key);
  if (e == NULL) {
    pthread_mutex_unlock(&md->lock);
    return (-ENOENT);
  }

  if (e->type != MD_TYPE_BOOLEAN) {
    ERROR("meta_data_get_boolean: Type mismatch for key `%s'", e->key);
    pthread_mutex_unlock(&md->lock);
    return (-ENOENT);
  }

  *value = e->value.mv_boolean;

  pthread_mutex_unlock(&md->lock);
  return (0);
} /* }}} int meta_data_get_boolean */
示例#2
0
int meta_data_get_signed_int (meta_data_t *md, /* {{{ */
    const char *key, int64_t *value)
{
  meta_entry_t *e;

  if ((md == NULL) || (key == NULL) || (value == NULL))
    return (-EINVAL);

  pthread_mutex_lock (&md->lock);

  e = md_entry_lookup (md, key);
  if (e == NULL)
  {
    pthread_mutex_unlock (&md->lock);
    return (-ENOENT);
  }

  if (e->type != MD_TYPE_SIGNED_INT)
  {
    ERROR ("meta_data_get_signed_int: Type mismatch for key `%s'", e->key);
    pthread_mutex_unlock (&md->lock);
    return (-ENOENT);
  }

  *value = e->value.mv_signed_int;

  pthread_mutex_unlock (&md->lock);
  return (0);
} /* }}} int meta_data_get_signed_int */
示例#3
0
/*
 * Get functions
 */
int meta_data_get_string(meta_data_t *md, /* {{{ */
                         const char *key, char **value) {
  meta_entry_t *e;
  char *temp;

  if ((md == NULL) || (key == NULL) || (value == NULL))
    return (-EINVAL);

  pthread_mutex_lock(&md->lock);

  e = md_entry_lookup(md, key);
  if (e == NULL) {
    pthread_mutex_unlock(&md->lock);
    return (-ENOENT);
  }

  if (e->type != MD_TYPE_STRING) {
    ERROR("meta_data_get_string: Type mismatch for key `%s'", e->key);
    pthread_mutex_unlock(&md->lock);
    return (-ENOENT);
  }

  temp = md_strdup(e->value.mv_string);
  if (temp == NULL) {
    pthread_mutex_unlock(&md->lock);
    ERROR("meta_data_get_string: md_strdup failed.");
    return (-ENOMEM);
  }

  pthread_mutex_unlock(&md->lock);

  *value = temp;

  return (0);
} /* }}} int meta_data_get_string */
示例#4
0
int meta_data_as_string(meta_data_t *md, /* {{{ */
                        const char *key, char **value) {
  meta_entry_t *e;
  const char *actual;
  char buffer[MD_MAX_NONSTRING_CHARS]; /* For non-string types. */
  char *temp;
  int type;

  if ((md == NULL) || (key == NULL) || (value == NULL))
    return (-EINVAL);

  pthread_mutex_lock(&md->lock);

  e = md_entry_lookup(md, key);
  if (e == NULL) {
    pthread_mutex_unlock(&md->lock);
    return (-ENOENT);
  }

  type = e->type;

  switch (type) {
  case MD_TYPE_STRING:
    actual = e->value.mv_string;
    break;
  case MD_TYPE_SIGNED_INT:
    ssnprintf(buffer, sizeof(buffer), "%" PRIi64, e->value.mv_signed_int);
    actual = buffer;
    break;
  case MD_TYPE_UNSIGNED_INT:
    ssnprintf(buffer, sizeof(buffer), "%" PRIu64, e->value.mv_unsigned_int);
    actual = buffer;
    break;
  case MD_TYPE_DOUBLE:
    ssnprintf(buffer, sizeof(buffer), GAUGE_FORMAT, e->value.mv_double);
    actual = buffer;
    break;
  case MD_TYPE_BOOLEAN:
    actual = e->value.mv_boolean ? "true" : "false";
    break;
  default:
    pthread_mutex_unlock(&md->lock);
    ERROR("meta_data_as_string: unknown type %d for key `%s'", type, key);
    return (-ENOENT);
  }

  pthread_mutex_unlock(&md->lock);

  temp = md_strdup(actual);
  if (temp == NULL) {
    pthread_mutex_unlock(&md->lock);
    ERROR("meta_data_as_string: md_strdup failed for key `%s'.", key);
    return (-ENOMEM);
  }

  *value = temp;

  return (0);
} /* }}} int meta_data_as_string */