src/utils_dns.c: Fix version information for __NAMESER >= 19961001.
[collectd.git] / src / perl.c
index 3c50528..22a13ce 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * collectd - src/perl.c
- * Copyright (C) 2007  Sebastian Harl
+ * Copyright (C) 2007, 2008  Sebastian Harl
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -553,7 +553,7 @@ static int pplugin_dispatch_values (pTHX_ char *name, HV *values)
                list.host[DATA_MAX_NAME_LEN - 1] = '\0';
        }
        else {
-               strcpy (list.host, hostname_g);
+               sstrncpy (list.host, hostname_g, sizeof (list.host));
        }
 
        if (NULL != (tmp = hv_fetch (values, "plugin", 6, 0))) {
@@ -700,11 +700,19 @@ static int pplugin_call_all (pTHX_ int type, ...)
                ds = va_arg (ap, data_set_t *);
                vl = va_arg (ap, value_list_t *);
 
-               if (-1 == data_set2av (aTHX_ ds, pds))
-                       return -1;
+               if (-1 == data_set2av (aTHX_ ds, pds)) {
+                       av_clear (pds);
+                       av_undef (pds);
+                       pds = Nullav;
+                       ret = -1;
+               }
 
-               if (-1 == value_list2hv (aTHX_ vl, ds, pvl))
-                       return -1;
+               if (-1 == value_list2hv (aTHX_ vl, ds, pvl)) {
+                       hv_clear (pvl);
+                       hv_undef (pvl);
+                       pvl = Nullhv;
+                       ret = -1;
+               }
 
                XPUSHs (sv_2mortal (newSVpv (ds->type, 0)));
                XPUSHs (sv_2mortal (newRV_noinc ((SV *)pds)));
@@ -738,8 +746,12 @@ static int pplugin_call_all (pTHX_ int type, ...)
 
                n = va_arg (ap, notification_t *);
 
-               if (-1 == notification2hv (aTHX_ n, notif))
-                       return -1;
+               if (-1 == notification2hv (aTHX_ n, notif)) {
+                       hv_clear (notif);
+                       hv_undef (notif);
+                       notif = Nullhv;
+                       ret = -1;
+               }
 
                XPUSHs (sv_2mortal (newRV_noinc ((SV *)notif)));
        }
@@ -1352,6 +1364,11 @@ static int init_pi (int argc, char **argv)
                exit (1);
        }
 
+#ifdef __FreeBSD__
+       /* On FreeBSD, PERL_SYS_INIT3 expands to some expression which
+        * triggers a "value computed is not used" warning by gcc. */
+       (void)
+#endif
        PERL_SYS_INIT3 (&argc, &argv, &environ);
 
        perl_threads = (c_ithread_list_t *)smalloc (sizeof (c_ithread_list_t));
@@ -1466,6 +1483,11 @@ static int perl_config_enabledebugger (pTHX_ oconfig_item_t *ci)
                return 1;
        }
 
+       if (NULL != perl_threads) {
+               log_warn ("EnableDebugger has no effects if used after LoadPlugin.");
+               return 1;
+       }
+
        value = ci->values[0].value.string;
 
        perl_argv = (char **)realloc (perl_argv,