{GPL, other}: Relicense to MIT license.
[collectd.git] / src / utils_ignorelist.c
index 31a3e66..0ad252b 100644 (file)
@@ -1,6 +1,7 @@
 /**
  * collectd - src/utils_ignorelist.c
  * Copyright (C) 2006 Lubos Stanek <lubek at users.sourceforge.net>
+ * Copyright (C) 2008 Florian Forster <octo at collectd.org>
  *
  * This program is free software; you can redistribute it and/
  * or modify it under the terms of the GNU General Public Li-
@@ -19,6 +20,7 @@
  *
  * Authors:
  *   Lubos Stanek <lubek at users.sourceforge.net>
+ *   Florian Forster <octo at collectd.org>
  **/
 /**
  * ignorelist handles plugin's list of configured collectable
  *     return;
  **/
 
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include "common.h"
-#include "utils_debug.h"
+#include "plugin.h"
 #include "utils_ignorelist.h"
 
 /*
@@ -94,7 +100,7 @@ static int ignorelist_append_regex(ignorelist_t *il, const char *entry)
        /* create buffer */
        if ((regtemp = malloc(sizeof(regex_t))) == NULL)
        {
-               syslog (LOG_ERR, "cannot allocate new config entry");
+               ERROR ("cannot allocate new config entry");
                return (1);
        }
        memset (regtemp, '\0', sizeof(regex_t));
@@ -111,14 +117,14 @@ static int ignorelist_append_regex(ignorelist_t *il, const char *entry)
                {
                        fprintf (stderr, "Cannot compile regex %s: %i/%s",
                                        entry, rcompile, regerr);
-                       syslog (LOG_ERR, "Cannot compile regex %s: %i/%s",
+                       ERROR ("Cannot compile regex %s: %i/%s",
                                        entry, rcompile, regerr);
                }
                else
                {
                        fprintf (stderr, "Cannot compile regex %s: %i",
                                        entry, rcompile);
-                       syslog (LOG_ERR, "Cannot compile regex %s: %i",
+                       ERROR ("Cannot compile regex %s: %i",
                                        entry, rcompile);
                }
 
@@ -127,12 +133,12 @@ static int ignorelist_append_regex(ignorelist_t *il, const char *entry)
                regfree (regtemp);
                return (1);
        }
-       DBG("regex compiled: %s - %i", entry, rcompile);
+       DEBUG("regex compiled: %s - %i", entry, rcompile);
 
        /* create new entry */
        if ((new = malloc(sizeof(ignorelist_item_t))) == NULL)
        {
-               syslog (LOG_ERR, "cannot allocate new config entry");
+               ERROR ("cannot allocate new config entry");
                regfree (regtemp);
                return (1);
        }
@@ -153,7 +159,7 @@ static int ignorelist_append_string(ignorelist_t *il, const char *entry)
        /* create new entry */
        if ((new = malloc(sizeof(ignorelist_item_t))) == NULL )
        {
-               syslog (LOG_ERR, "cannot allocate new entry");
+               ERROR ("cannot allocate new entry");
                return (1);
        }
        memset (new, '\0', sizeof(ignorelist_item_t));
@@ -213,10 +219,6 @@ ignorelist_t *ignorelist_create (int invert)
 
        /* smalloc exits if it failes */
        il = (ignorelist_t *) smalloc (sizeof (ignorelist_t));
-       DBG("Ignorelist created 0x%p, default is %s",
-                       (void *) il,
-                       invert ? "collect" : "ignore");
-
        memset (il, '\0', sizeof (ignorelist_t));
 
        /*
@@ -236,8 +238,6 @@ void ignorelist_free (ignorelist_t *il)
        ignorelist_item_t *this;
        ignorelist_item_t *next;
 
-       DBG ("(il = 0x%p)", (void *) il);
-
        if (il == NULL)
                return;
 
@@ -270,7 +270,7 @@ void ignorelist_set_invert (ignorelist_t *il, int invert)
 {
        if (il == NULL)
        {
-               DBG("ignore call with ignorelist_t == NULL");
+               DEBUG("ignore call with ignorelist_t == NULL");
                return;
        }
 
@@ -285,11 +285,10 @@ int ignorelist_add (ignorelist_t *il, const char *entry)
 {
        int ret;
        size_t entry_len;
-       char *entry_copy;
 
        if (il == NULL)
        {
-               DBG ("add called with ignorelist_t == NULL");
+               DEBUG ("add called with ignorelist_t == NULL");
                return (1);
        }
 
@@ -298,7 +297,7 @@ int ignorelist_add (ignorelist_t *il, const char *entry)
        /* append nothing */
        if (entry_len == 0)
        {
-               DBG("not appending: empty entry");
+               DEBUG("not appending: empty entry");
                return (1);
        }
 
@@ -306,19 +305,22 @@ int ignorelist_add (ignorelist_t *il, const char *entry)
        /* regex string is enclosed in "/.../" */
        if ((entry_len > 2) && (entry[0] == '/') && entry[entry_len - 1] == '/')
        {
+               char *entry_copy;
+               size_t entry_copy_size;
+
                /* We need to copy `entry' since it's const */
-               entry_copy = smalloc (entry_len);
-               memset (entry_copy, '\0', entry_len);
-               strncpy (entry_copy, entry + 1, entry_len - 2);
+               entry_copy_size = entry_len - 1;
+               entry_copy = smalloc (entry_copy_size);
+               sstrncpy (entry_copy, entry + 1, entry_copy_size);
 
-               DBG("I'm about to add regex entry: %s", entry_copy);
+               DEBUG("I'm about to add regex entry: %s", entry_copy);
                ret = ignorelist_append_regex(il, entry_copy);
                sfree (entry_copy);
        }
        else
 #endif
        {
-               DBG("to add entry: %s", entry);
+               DEBUG("to add entry: %s", entry);
                ret = ignorelist_append_string(il, entry);
        }
 
@@ -334,7 +336,10 @@ int ignorelist_match (ignorelist_t *il, const char *entry)
        ignorelist_item_t *traverse;
 
        /* if no entries, collect all */
-       if (il->head == NULL)
+       if ((il == NULL) || (il->head == NULL))
+               return (0);
+
+       if ((entry == NULL) || (strlen (entry) == 0))
                return (0);
 
        /* traverse list and check entries */