Code

Spent the day working on backwards compatability using getaddrinfo()
[nagiosplug.git] / plugins / negate.c
index b6effe399facbc30477bc1c100a42380c50d97ee..c1c0bc57fd07ae71fb16cf11b26102dc7afd22df 100644 (file)
@@ -23,7 +23,7 @@
  *
  *****************************************************************************/
 
-#define PROGNAME "negate"
+const char *progname = "negate";
 #define REVISION "$Revision$"
 #define COPYRIGHT "2002"
 #define AUTHOR "Karl DeBisschop"
@@ -31,7 +31,7 @@
 #define SUMMARY "Negates the status of a plugin (returns OK for CRITICAL, and vice-versa).\n"
 
 #define OPTIONS "\
-\[-t timeout] <definition of wrapped plugin>"
+[-t timeout] <definition of wrapped plugin>"
 
 #define LONGOPTIONS "\
   -t, --timeout=INTEGER\n\
@@ -52,10 +52,10 @@ Otherwise, the output state of the wrapped plugin is unchanged.\n"
 
 char *command_line;
 
-static int process_arguments (int, char **);
-static int validate_arguments (void);
-static void print_usage (void);
-static void print_help (void);
+int process_arguments (int, char **);
+int validate_arguments (void);
+void print_usage (void);
+void print_help (void);
 \f
 /******************************************************************************
 
@@ -76,7 +76,7 @@ Please note that all tags must be lowercase to use the DocBook XML DTD.
 <manvolnum>5<manvolnum>
 </refmeta>
 <refnamdiv>
-<refname>&PROGNAME;</refname>
+<refname>&progname;</refname>
 <refpurpose>&SUMMARY;</refpurpose>
 </refnamdiv>
 </refentry>
@@ -117,20 +117,17 @@ main (int argc, char **argv)
        char input_buffer[MAX_INPUT_BUFFER];
 
        if (process_arguments (argc, argv) == ERROR)
-               usage ("Could not parse arguments");
+               usage ("Could not parse arguments\n");
 
        /* Set signal handling and alarm */
-       if (signal (SIGALRM, timeout_alarm_handler) == SIG_ERR) {
-               printf ("Cannot catch SIGALRM");
-               return STATE_UNKNOWN;
-       }
-       alarm (timeout_interval);
+       if (signal (SIGALRM, timeout_alarm_handler) == SIG_ERR)
+               terminate (STATE_UNKNOWN, "Cannot catch SIGALRM");
+
+       (void) alarm ((unsigned) timeout_interval);
 
        child_process = spopen (command_line);
-       if (child_process == NULL) {
-               printf ("Could not open pipe: %s\n", command_line);
-               exit (STATE_UNKNOWN);
-       }
+       if (child_process == NULL)
+               terminate (STATE_UNKNOWN, "Could not open pipe: %s\n", command_line);
 
        child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r");
        if (child_stderr == NULL) {
@@ -139,7 +136,7 @@ main (int argc, char **argv)
 
        while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
                found++;
-               if (index (input_buffer, '\n')) {
+               if (strchr (input_buffer, '\n')) {
                        input_buffer[strcspn (input_buffer, "\n")] = 0;
                        printf ("%s\n", input_buffer);
                }
@@ -148,11 +145,10 @@ main (int argc, char **argv)
                }
        }
 
-       if (!found) {
-               printf ("%s problem - No data recieved from host\nCMD: %s\n", argv[0],
-                                               command_line);
-               exit (STATE_UNKNOWN);
-       }
+       if (!found)
+               terminate (STATE_UNKNOWN,\
+                          "%s problem - No data recieved from host\nCMD: %s\n",\
+                          argv[0],     command_line);
 
        /* close the pipe */
        result = spclose (child_process);
@@ -165,11 +161,11 @@ main (int argc, char **argv)
        (void) fclose (child_stderr);
 
        if (result == STATE_OK)
-               return STATE_CRITICAL;
+               exit (STATE_CRITICAL);
        else if (result == STATE_CRITICAL)
-               return STATE_OK;
+               exit (EXIT_SUCCESS);
        else
-               return result;
+               exit (result);
 }
 \f
 
@@ -178,7 +174,7 @@ main (int argc, char **argv)
 void
 print_help (void)
 {
-       print_revision (PROGNAME, REVISION);
+       print_revision (progname, REVISION);
        printf
                ("Copyright (c) %s %s <%s>\n\n%s\n",
                 COPYRIGHT, AUTHOR, EMAIL, SUMMARY);
@@ -193,14 +189,9 @@ void
 print_usage (void)
 {
        printf ("Usage:\n" " %s %s\n"
-#ifdef HAVE_GETOPT_H
                                        " %s (-h | --help) for detailed help\n"
                                        " %s (-V | --version) for version information\n",
-#else
-                                       " %s -h for detailed help\n"
-                                       " %s -V for version information\n",
-#endif
-                                       PROGNAME, OPTIONS, PROGNAME, PROGNAME);
+                                       progname, OPTIONS, progname, progname);
 }
 \f
 
@@ -226,7 +217,6 @@ process_arguments (int argc, char **argv)
 {
        int c;
 
-#ifdef HAVE_GETOPT_H
        int option_index = 0;
        static struct option long_options[] = {
                {"help", no_argument, 0, 'h'},
@@ -234,27 +224,23 @@ process_arguments (int argc, char **argv)
                {"timeout", required_argument, 0, 't'},
                {0, 0, 0, 0}
        };
-#endif
 
        while (1) {
-#ifdef HAVE_GETOPT_H
-               c = getopt_long (argc, argv, "+?hVt:",
+               c = getopt_long (argc, argv, "+hVt:",
                                 long_options, &option_index);
-#else
-               c = getopt (argc, argv, "+?hVt:");
-#endif
+
                if (c == -1 || c == EOF)
                        break;
 
                switch (c) {
                case '?':     /* help */
-                       usage2 ("Unknown argument", optarg);
+                       usage3 ("Unknown argument", optopt);
                case 'h':     /* help */
                        print_help ();
-                       exit (STATE_OK);
+                       exit (EXIT_SUCCESS);
                case 'V':     /* version */
-                       print_revision (PROGNAME, REVISION);
-                       exit (STATE_OK);
+                       print_revision (progname, REVISION);
+                       exit (EXIT_SUCCESS);
                case 't':     /* timeout period */
                        if (!is_integer (optarg))
                                usage2 ("Timeout Interval must be an integer", optarg);
@@ -263,9 +249,9 @@ process_arguments (int argc, char **argv)
                }
        }
 
-       command_line = strscpy (command_line, argv[optind]);
-       for (c = optind+1; c <= argc; c++) {
-               command_line = ssprintf (command_line, "%s %s", command_line, argv[c]);
+       asprintf (&command_line, "%s", argv[optind]);
+       for (c = optind+1; c < argc; c++) {
+               asprintf (&command_line, "%s %s", command_line, argv[c]);
        }
 
        return validate_arguments ();
@@ -286,7 +272,9 @@ process_arguments (int argc, char **argv)
 int
 validate_arguments ()
 {
-       return OK;
+       if (command_line == NULL)
+               return ERROR;
+       return STATE_OK;
 }
 \f