X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fdaemon%2Fcollectd.c;h=6f299174ad8ea38af32fc630d47f208905864dea;hb=9b1ae7f672fd2712b452a58e0682cdea2e34c0f8;hp=fc52933111e79fec0c291d115618d4b57f6032e5;hpb=042c592bcddeea04cf81230ba9c97a09c5d3595c;p=collectd.git diff --git a/src/daemon/collectd.c b/src/daemon/collectd.c index fc529331..6f299174 100644 --- a/src/daemon/collectd.c +++ b/src/daemon/collectd.c @@ -269,6 +269,7 @@ static void update_kstat (void) /* TODO * Remove all settings but `-f' and `-C' */ +__attribute__((noreturn)) static void exit_usage (int status) { printf ("Usage: "PACKAGE_NAME" [OPTIONS]\n\n" @@ -301,6 +302,11 @@ static int do_init (void) #if HAVE_SETLOCALE if (setlocale (LC_NUMERIC, COLLECTD_LOCALE) == NULL) WARNING ("setlocale (\"%s\") failed.", COLLECTD_LOCALE); + + /* Update the environment, so that libraries that are calling + * setlocale(LC_NUMERIC, "") don't accidentally revert these changes. */ + unsetenv ("LC_ALL"); + setenv ("LC_NUMERIC", COLLECTD_LOCALE, /* overwrite = */ 1); #endif #if HAVE_LIBKSTAT @@ -417,7 +423,7 @@ static int pidfile_remove (void) #endif /* COLLECT_DAEMON */ #ifdef KERNEL_LINUX -int notify_upstart (void) +static int notify_upstart (void) { char const *upstart_job = getenv("UPSTART_JOB"); @@ -437,7 +443,7 @@ int notify_upstart (void) return 1; } -int notify_systemd (void) +static int notify_systemd (void) { int fd; const char *notifysocket; @@ -513,7 +519,7 @@ int main (int argc, char **argv) struct sigaction sig_term_action; struct sigaction sig_usr1_action; struct sigaction sig_pipe_action; - char *configfile = CONFIGFILE; + const char *configfile = CONFIGFILE; int test_config = 0; int test_readall = 0; const char *basedir; @@ -633,6 +639,8 @@ int main (int argc, char **argv) #endif ) { + int status; + if ((pid = fork ()) == -1) { /* error */ @@ -661,19 +669,24 @@ int main (int argc, char **argv) close (1); close (0); - if (open ("/dev/null", O_RDWR) != 0) + status = open ("/dev/null", O_RDWR); + if (status != 0) { - ERROR ("Error: Could not connect `STDIN' to `/dev/null'"); + ERROR ("Error: Could not connect `STDIN' to `/dev/null' (status %d)", status); return (1); } - if (dup (0) != 1) + + status = dup (0); + if (status != 1) { - ERROR ("Error: Could not connect `STDOUT' to `/dev/null'"); + ERROR ("Error: Could not connect `STDOUT' to `/dev/null' (status %d)", status); return (1); } - if (dup (0) != 2) + + status = dup (0); + if (status != 2) { - ERROR ("Error: Could not connect `STDERR' to `/dev/null'"); + ERROR ("Error: Could not connect `STDERR' to `/dev/null', (status %d)", status); return (1); } } /* if (daemonize) */