Merge branch 'collectd-4.5'
[collectd.git] / src / collectd.c
index d2ca568..9526ec9 100644 (file)
 #include "plugin.h"
 #include "configfile.h"
 
+#if HAVE_STATGRAB_H
+# include <statgrab.h>
+#endif
+
 /*
  * Global variables
  */
@@ -46,7 +50,7 @@ static int loop = 0;
 static void *do_flush (void *arg)
 {
        INFO ("Flushing all data.");
-       plugin_flush_all (-1);
+       plugin_flush (NULL, -1, NULL);
        INFO ("Finished flushing all data.");
        pthread_exit (NULL);
        return NULL;
@@ -86,8 +90,7 @@ static int init_hostname (void)
        str = global_option_get ("Hostname");
        if (str != NULL)
        {
-               strncpy (hostname_g, str, sizeof (hostname_g));
-               hostname_g[sizeof (hostname_g) - 1] = '\0';
+               sstrncpy (hostname_g, str, sizeof (hostname_g));
                return (0);
        }
 
@@ -123,8 +126,7 @@ static int init_hostname (void)
                if (ai_ptr->ai_canonname == NULL)
                        continue;
 
-               strncpy (hostname_g, ai_ptr->ai_canonname, sizeof (hostname_g));
-               hostname_g[sizeof (hostname_g) - 1] = '\0';
+               sstrncpy (hostname_g, ai_ptr->ai_canonname, sizeof (hostname_g));
                break;
        }
 
@@ -242,7 +244,7 @@ static void update_kstat (void)
 /* TODO
  * Remove all settings but `-f' and `-C'
  */
-static void exit_usage (void)
+static void exit_usage (int status)
 {
        printf ("Usage: "PACKAGE" [OPTIONS]\n\n"
                        
@@ -264,8 +266,8 @@ static void exit_usage (void)
                        "\n"PACKAGE" "VERSION", http://collectd.org/\n"
                        "by Florian octo Forster <octo@verplant.org>\n"
                        "for contributions see `AUTHORS'\n");
-       exit (0);
-} /* static void exit_usage (char *name) */
+       exit (status);
+} /* static void exit_usage (int status) */
 
 static int do_init (void)
 {
@@ -393,11 +395,12 @@ int main (int argc, char **argv)
        struct sigaction sig_int_action;
        struct sigaction sig_term_action;
        struct sigaction sig_usr1_action;
+       struct sigaction sig_pipe_action;
        char *configfile = CONFIGFILE;
        int test_config  = 0;
        const char *basedir;
 #if COLLECT_DAEMON
-       struct sigaction sigChldAction;
+       struct sigaction sig_chld_action;
        pid_t pid;
        int daemonize    = 1;
 #endif
@@ -433,11 +436,16 @@ int main (int argc, char **argv)
                                break;
 #endif /* COLLECT_DAEMON */
                        case 'h':
+                               exit_usage (0);
+                               break;
                        default:
-                               exit_usage ();
+                               exit_usage (1);
                } /* switch (c) */
        } /* while (1) */
 
+       if (optind < argc)
+               exit_usage (1);
+
        /*
         * Read options from the config file, the environment and the command
         * line (in that order, with later options overwriting previous ones in
@@ -482,9 +490,9 @@ int main (int argc, char **argv)
        /*
         * fork off child
         */
-       memset (&sigChldAction, '\0', sizeof (sigChldAction));
-       sigChldAction.sa_handler = SIG_IGN;
-       sigaction (SIGCHLD, &sigChldAction, NULL);
+       memset (&sig_chld_action, '\0', sizeof (sig_chld_action));
+       sig_chld_action.sa_handler = SIG_IGN;
+       sigaction (SIGCHLD, &sig_chld_action, NULL);
 
        if (daemonize)
        {
@@ -534,6 +542,10 @@ int main (int argc, char **argv)
        } /* if (daemonize) */
 #endif /* COLLECT_DAEMON */
 
+       memset (&sig_pipe_action, '\0', sizeof (sig_pipe_action));
+       sig_pipe_action.sa_handler = SIG_IGN;
+       sigaction (SIGPIPE, &sig_pipe_action, NULL);
+
        /*
         * install signal handlers
         */