Пример #1
0
static int tbl_config_result(tbl_t *tbl, oconfig_item_t *ci) {
  if (ci->values_num != 0) {
    log_err("<Result> does not expect any arguments.");
    return 1;
  }

  tbl_result_t *res =
      realloc(tbl->results, (tbl->results_num + 1) * sizeof(*tbl->results));
  if (res == NULL) {
    log_err("realloc failed: %s.", STRERRNO);
    return -1;
  }

  tbl->results = res;

  res = tbl->results + tbl->results_num;
  tbl_result_setup(res);

  for (int i = 0; i < ci->children_num; ++i) {
    oconfig_item_t *c = ci->children + i;

    if (strcasecmp(c->key, "Type") == 0)
      cf_util_get_string(c, &res->type);
    else if (strcasecmp(c->key, "InstancePrefix") == 0)
      cf_util_get_string(c, &res->instance_prefix);
    else if (strcasecmp(c->key, "InstancesFrom") == 0)
      tbl_config_append_array_i(c->key, &res->instances, &res->instances_num,
                                c);
    else if (strcasecmp(c->key, "ValuesFrom") == 0)
      tbl_config_append_array_i(c->key, &res->values, &res->values_num, c);
    else
      log_warn("Ignoring unknown config key \"%s\" "
               " in <Result>.",
               c->key);
  }

  int status = 0;
  if (res->type == NULL) {
    log_err("No \"Type\" option specified for <Result> in table \"%s\".",
            tbl->file);
    status = 1;
  }

  if (res->values == NULL) {
    log_err("No \"ValuesFrom\" option specified for <Result> in table \"%s\".",
            tbl->file);
    status = 1;
  }

  if (status != 0) {
    tbl_result_clear(res);
    return status;
  }

  tbl->results_num++;
  return 0;
} /* tbl_config_result */
Пример #2
0
static void tbl_clear (tbl_t *tbl)
{
	size_t i;

	sfree (tbl->file);
	sfree (tbl->sep);
	sfree (tbl->instance);

	for (i = 0; i < tbl->results_num; ++i)
		tbl_result_clear (tbl->results + i);
	sfree (tbl->results);
	tbl->results_num = 0;

	tbl->max_colnum  = 0;
} /* tbl_clear */
Пример #3
0
static void tbl_clear(tbl_t *tbl) {
  if (tbl == NULL) {
    return;
  }

  sfree(tbl->file);
  sfree(tbl->sep);
  sfree(tbl->plugin_name);
  sfree(tbl->instance);

  /* (tbl->results == NULL) -> (tbl->results_num == 0) */
  assert((tbl->results != NULL) || (tbl->results_num == 0));
  for (size_t i = 0; i < tbl->results_num; ++i)
    tbl_result_clear(tbl->results + i);
  sfree(tbl->results);
  tbl->results_num = 0;

  tbl->max_colnum = 0;
} /* tbl_clear */
Пример #4
0
static int tbl_config_result (tbl_t *tbl, oconfig_item_t *ci)
{
	tbl_result_t *res;

	int status = 0;
	int i;

	if (0 != ci->values_num) {
		log_err ("<Result> does not expect any arguments.");
		return 1;
	}

	res = realloc (tbl->results,
			(tbl->results_num + 1) * sizeof (*tbl->results));
	if (res == NULL) {
		char errbuf[1024];
		log_err ("realloc failed: %s.",
				sstrerror (errno, errbuf, sizeof (errbuf)));
		return -1;
	}

	tbl->results = res;
	++tbl->results_num;

	res = tbl->results + tbl->results_num - 1;
	tbl_result_setup (res);

	for (i = 0; i < ci->children_num; ++i) {
		oconfig_item_t *c = ci->children + i;

		if (0 == strcasecmp (c->key, "Type"))
			tbl_config_set_s (c->key, &res->type, c);
		else if (0 == strcasecmp (c->key, "InstancePrefix"))
			tbl_config_set_s (c->key, &res->instance_prefix, c);
		else if (0 == strcasecmp (c->key, "InstancesFrom"))
			tbl_config_append_array_i (c->key,
					&res->instances, &res->instances_num, c);
		else if (0 == strcasecmp (c->key, "ValuesFrom"))
			tbl_config_append_array_i (c->key,
					&res->values, &res->values_num, c);
		else
			log_warn ("Ignoring unknown config key \"%s\" "
					" in <Result>.", c->key);
	}

	if (NULL == res->type) {
		log_err ("No \"Type\" option specified for <Result> "
				"in table \"%s\".", tbl->file);
		status = 1;
	}

	if (NULL == res->values) {
		log_err ("No \"ValuesFrom\" option specified for <Result> "
				"in table \"%s\".", tbl->file);
		status = 1;
	}

	if (0 != status) {
		tbl_result_clear (res);
		--tbl->results_num;
		return status;
	}
	return 0;
} /* tbl_config_result */