snmp plugin: Fix a possible memory leak.
[collectd.git] / src / types_list.c
index 6fce019..ff84262 100644 (file)
@@ -91,7 +91,7 @@ static int parse_ds (data_source_t *dsrc, char *buf, size_t buf_len)
   return (0);
 } /* int parse_ds */
 
-static void parse_line (char *buf, size_t buf_len)
+static void parse_line (char *buf)
 {
   char  *fields[64];
   size_t fields_num;
@@ -129,8 +129,9 @@ static void parse_line (char *buf, size_t buf_len)
       ds->type, ds->ds_num, (void *) ds->ds);
 
   plugin_register_data_set (ds);
-  /* Do NOT free `ds' and `ds->ds', because it's NOT copied by
-   * `plugin_register_data_set'!. */
+
+  sfree (ds->ds);
+  sfree (ds);
 } /* void parse_line */
 
 static void parse_file (FILE *fh)
@@ -157,21 +158,23 @@ static void parse_file (FILE *fh)
     if ((buf_len == 0) || (buf[0] == '#'))
       continue;
 
-    parse_line (buf, buf_len);
+    while ((buf_len > 0) && ((buf[buf_len - 1] == '\n')
+         || (buf[buf_len - 1] == '\n')))
+      buf[--buf_len] = '\0';
+
+    if (buf_len == 0)
+      continue;
+
+    parse_line (buf);
   } /* while (fgets) */
 } /* void parse_file */
 
-int read_types_list (void)
+int read_types_list (const char *file)
 {
-  const char *file;
   FILE *fh;
 
-  file = global_option_get ("TypesDB");
   if (file == NULL)
-  {
-    ERROR ("global_option_get (\"TypesDB\") returned NULL.");
     return (-1);
-  }
 
   fh = fopen (file, "r");
   if (fh == NULL)