/**
* collectd - src/modbus.c
* Copyright (C) 2010 noris network AG
+ * Copyright (C) 2011 Universiteit Gent
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
*
* Authors:
* Florian Forster <octo at noris.net>
+ * Ivo De Decker <ivo.dedecker at ugent.be>
**/
#include "collectd.h"
mb_data_t *next;
}; /* }}} */
-struct mb_dataset_s;
-typedef struct mb_dataset_s mb_dataset_t;
-struct mb_dataset_s /* {{{ */
+struct mb_datagroup_s;
+typedef struct mb_datagroup_s mb_datagroup_t;
+struct mb_datagroup_s /* {{{ */
{
char *name;
mb_data_t *collect;
- mb_dataset_t *next;
+ mb_datagroup_t *next;
}; /* }}} */
struct mb_slave_s /* {{{ */
* Global variables
*/
static mb_data_t *data_definitions = NULL;
-static mb_dataset_t *data_sets = NULL;
+static mb_datagroup_t *data_groups = NULL;
/*
* Functions
return (data_copy (dst, ptr));
} /* }}} int data_copy_by_name */
-static mb_dataset_t *dataset_get_by_name (mb_dataset_t *src, /* {{{ */
+static mb_datagroup_t *datagroup_get_by_name (mb_datagroup_t *src, /* {{{ */
const char *name)
{
- mb_dataset_t *ptr;
+ mb_datagroup_t *ptr;
if (name == NULL)
return (NULL);
return (ptr);
return (NULL);
-} /* }}} mb_dataset_t *dataset_get_by_name */
+} /* }}} mb_datagroup_t *datagroup_get_by_name */
-static int dataset_append (mb_dataset_t **dst, mb_dataset_t *src) /* {{{ */
+static int datagroup_append (mb_datagroup_t **dst, mb_datagroup_t *src) /* {{{ */
{
- mb_dataset_t *ptr;
+ mb_datagroup_t *ptr;
if ((dst == NULL) || (src == NULL))
return (EINVAL);
ptr->next = src;
return (0);
-} /* }}} int dataset_append */
-
-/* Copy a single mb_dataset_t and append it to another list. */
-static int dataset_copy (mb_dataset_t **dst, const mb_dataset_t *src) /* {{{ */
-{
- mb_dataset_t *tmp;
- int status;
-
- if ((dst == NULL) || (src == NULL))
- return (EINVAL);
-
- tmp = malloc (sizeof (*tmp));
- if (tmp == NULL)
- return (ENOMEM);
- memcpy (tmp, src, sizeof (*tmp));
- tmp->name = NULL;
- tmp->next = NULL;
-
- tmp->name = strdup (src->name);
- if (tmp->name == NULL)
- {
- sfree (tmp);
- return (ENOMEM);
- }
-
- status = dataset_append (dst, tmp);
- if (status != 0)
- {
- sfree (tmp->name);
- sfree (tmp);
- return (status);
- }
-
- return (0);
-} /* }}} int dataset_copy */
+} /* }}} int datagroup_append */
/* Read functions */
data_copy_by_name (&slave->collect, data_definitions, buffer);
status = 0; /* continue after failure. */
}
- else if (strcasecmp ("Dataset", child->key) == 0)
+ else if (strcasecmp ("Datagroup", child->key) == 0)
{
char buffer[1024];
- mb_dataset_t *ds;
+ mb_datagroup_t *ds;
status = cf_util_get_string_buffer (child, buffer, sizeof (buffer));
if (status == 0) {
- ds = dataset_get_by_name (data_sets, buffer);
+ ds = datagroup_get_by_name (data_groups, buffer);
if (ds) {
mb_data_t *data;
for (data = ds->collect; data != NULL; data = data->next)
}
}
status = 0; /* continue after failure. */
- }
+ }
else
{
ERROR ("Modbus plugin: Unknown configuration option: %s", child->key);
} /* }}} int mb_config_add_host */
-static int mb_config_add_dataset (oconfig_item_t *ci) /* {{{ */
+static int mb_config_add_datagroup (oconfig_item_t *ci) /* {{{ */
{
- mb_dataset_t dataset;
+ mb_datagroup_t *datagroup;
int status;
int i;
- memset (&dataset, 0, sizeof (dataset));
- dataset.name = NULL;
- dataset.collect = NULL;
- dataset.next = NULL;
+ datagroup = malloc (sizeof (*datagroup));
+ if (datagroup == NULL)
+ return (ENOMEM);
+ memset (datagroup, 0, sizeof (*datagroup));
+ datagroup->name = NULL;
+ datagroup->collect = NULL;
+ datagroup->next = NULL;
- status = cf_util_get_string (ci, &dataset.name);
+ status = cf_util_get_string (ci, &datagroup->name);
for (i = 0; i < ci->children_num; i++)
{
char buffer[1024];
status = cf_util_get_string_buffer (child, buffer, sizeof (buffer));
if (status == 0) {
- data_copy_by_name (&dataset.collect, data_definitions, buffer);
- }
+ data_copy_by_name (&datagroup->collect, data_definitions, buffer);
+ }
status = 0; /* continue after failure. */
}
else
break;
} /* for (i = 0; i < ci->children_num; i++) */
- if ((status == 0) && (dataset.collect == NULL))
- status = EINVAL;
+ if ((status == 0) && (datagroup->collect == NULL))
+ status = ENOENT;
if (status == 0)
- dataset_copy (&data_sets, &dataset);
+ {
+ datagroup_append (&data_groups, datagroup);
+ }
+ else /* if (status != 0) */
+ {
+ sfree (datagroup->name);
+ data_free_all (datagroup->collect);
+ assert (datagroup->next == NULL);
+ sfree (datagroup);
+ }
return (status);
-} /* }}} int mb_config_add_dataset */
+} /* }}} int mb_config_add_datagroup */
static int mb_config (oconfig_item_t *ci) /* {{{ */
{
mb_config_add_data (child);
else if (strcasecmp ("Host", child->key) == 0)
mb_config_add_host (child);
- else if (strcasecmp ("Dataset", child->key) == 0)
- mb_config_add_dataset (child);
+ else if (strcasecmp ("Datagroup", child->key) == 0)
+ mb_config_add_datagroup (child);
else
ERROR ("Modbus plugin: Unknown configuration option: %s", child->key);
}