Merge branch 'collectd-5.5'
[collectd.git] / src / daemon / utils_ignorelist.c
index a8ca7db..1268838 100644 (file)
  * ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  * See the GNU General Public Licence for more details.
  *
- * You should have received a copy of the GNU General Public
- * Licence along with this program; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
- * USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  *
  * Authors:
  *   Lubos Stanek <lubek at users.sourceforge.net>
@@ -98,7 +97,7 @@ static int ignorelist_append_regex(ignorelist_t *il, const char *re_str)
        re = malloc (sizeof (*re));
        if (re == NULL)
        {
-               ERROR ("utils_ignorelist: malloc failed");
+               ERROR ("ignorelist_append_regex: malloc failed.");
                return (ENOMEM);
        }
        memset (re, 0, sizeof (*re));
@@ -106,10 +105,10 @@ static int ignorelist_append_regex(ignorelist_t *il, const char *re_str)
        status = regcomp (re, re_str, REG_EXTENDED);
        if (status != 0)
        {
-               char errbuf[1024] = "";
-               regerror (status, re, errbuf, sizeof (errbuf));
+               char errbuf[1024];
+               (void) regerror (status, re, errbuf, sizeof (errbuf));
                ERROR ("utils_ignorelist: regcomp failed: %s", errbuf);
-               regfree (re);
+               ERROR ("ignorelist_append_regex: Compiling regular expression \"%s\" failed: %s", re_str, errbuf);
                sfree (re);
                return (status);
        }
@@ -117,7 +116,7 @@ static int ignorelist_append_regex(ignorelist_t *il, const char *re_str)
        entry = malloc (sizeof (*entry));
        if (entry == NULL)
        {
-               ERROR ("utils_ignorelist: malloc failed");
+               ERROR ("ignorelist_append_regex: malloc failed.");
                regfree (re);
                sfree (re);
                return (ENOMEM);
@@ -195,9 +194,10 @@ ignorelist_t *ignorelist_create (int invert)
 {
        ignorelist_t *il;
 
-       /* smalloc exits if it failes */
-       il = (ignorelist_t *) smalloc (sizeof (ignorelist_t));
-       memset (il, '\0', sizeof (ignorelist_t));
+       il = malloc (sizeof (*il));
+       if (il == NULL)
+               return NULL;
+       memset (il, 0, sizeof (*il));
 
        /*
         * ->ignore == 0  =>  collect
@@ -262,7 +262,7 @@ void ignorelist_set_invert (ignorelist_t *il, int invert)
  */
 int ignorelist_add (ignorelist_t *il, const char *entry)
 {
-       size_t entry_len;
+       size_t len;
 
        if (il == NULL)
        {
@@ -270,10 +270,10 @@ int ignorelist_add (ignorelist_t *il, const char *entry)
                return (1);
        }
 
-       entry_len = strlen (entry);
+       len = strlen (entry);
 
        /* append nothing */
-       if (entry_len == 0)
+       if (len == 0)
        {
                DEBUG("not appending: empty entry");
                return (1);
@@ -281,19 +281,21 @@ int ignorelist_add (ignorelist_t *il, const char *entry)
 
 #if HAVE_REGEX_H
        /* regex string is enclosed in "/.../" */
-       if ((entry_len > 2) && (entry[0] == '/') && entry[entry_len - 1] == '/')
+       if ((len > 2) && (entry[0] == '/') && entry[len - 1] == '/')
        {
-               char *entry_copy;
-               size_t entry_copy_size;
+               char *copy;
                int status;
 
-               /* We need to copy `entry' since it's const */
-               entry_copy_size = entry_len - 1;
-               entry_copy = smalloc (entry_copy_size);
-               sstrncpy (entry_copy, entry + 1, entry_copy_size);
+               /* skip leading slash */
+               copy = strdup (entry + 1);
+               if (copy == NULL)
+                       return ENOMEM;
+
+               /* trim trailing slash */
+               copy[strlen (copy) - 1] = 0;
 
-               status = ignorelist_append_regex(il, entry_copy);
-               sfree (entry_copy);
+               status = ignorelist_append_regex (il, copy);
+               sfree (copy);
                return status;
        }
 #endif