Code

scanf parsing fix for check_swap from tracker id 1123292. now use floor(3)
authorM. Sean Finney <seanius@users.sourceforge.net>
Tue, 28 Jun 2005 00:26:53 +0000 (00:26 +0000)
committerM. Sean Finney <seanius@users.sourceforge.net>
Tue, 28 Jun 2005 00:26:53 +0000 (00:26 +0000)
to round down floating point numbers.  requires -lm on many systems,
so support for testing for this was added to the configure.in and
automake template

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1194 f882894a-f735-0410-b71e-b25c423dba1c

configure.in
plugins/Makefile.am
plugins/check_swap.c

index df516c5435cee4656c6453cece1bc28d6cc27b0f..b209d19ad53a8ab5039a293e4092be5a815aef7d 100644 (file)
@@ -137,6 +137,11 @@ AC_CHECK_LIB(socket,socket,SOCKETLIBS="$SOCKETLIBS -lsocket")
 AC_CHECK_LIB(resolv,main,SOCKETLIBS="$SOCKETLIBS -lresolv")
 AC_SUBST(SOCKETLIBS)
 
+dnl
+dnl check for math-related functions needing -lm
+AC_CHECK_LIB(m,floor,MATHLIBS="-lm")
+AC_SUBST(MATHLIBS)
+
 dnl Check for PostgreSQL libraries
 _SAVEDLIBS="$LIBS"
 _SAVEDCPPFLAGS="$CPPFLAGS"
@@ -567,7 +572,7 @@ AC_TRY_COMPILE([#include <sys/time.h>],
                               AC_DEFINE(NEED_GETTIMEOFDAY,1,[Define if gettimeofday is needed])))
 
 dnl Checks for library functions.
-AC_CHECK_FUNCS(memmove select socket strdup strstr strtod strtol strtoul)
+AC_CHECK_FUNCS(memmove select socket strdup strstr strtod strtol strtoul, floor)
 
 AC_MSG_CHECKING(return type of socket size)
 AC_TRY_COMPILE([#include <stdlib.h>
index d983192b6657535072acdfc3e6d289df21b0d05a..87a97a9faa5ed9bea0d7ba4026eeca321a29a4c8 100644 (file)
@@ -9,6 +9,7 @@ datadir = @datadir@
 localedir = $(datadir)/locale
 DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
 LIBS = @LIBINTL@ @LIBS@ @SSLINCLUDE@
+MATHLIBS = @MATHLIBS@
 
 libexec_PROGRAMS = check_dhcp check_disk check_dummy check_http check_load \
        check_mrtg check_mrtgtraf check_nwstat check_overcr check_ping \
@@ -72,7 +73,7 @@ check_real_LDADD = $(NETLIBS)
 check_snmp_LDADD = $(BASEOBJS) popen.o
 check_smtp_LDADD = $(NETLIBS) $(SSLLIBS)
 check_ssh_LDADD = $(NETLIBS)
-check_swap_LDADD = $(BASEOBJS) popen.o
+check_swap_LDADD = $(MATHLIBS) $(BASEOBJS) popen.o
 check_tcp_LDADD = $(NETLIBS) $(SSLLIBS)
 check_time_LDADD = $(NETLIBS)
 check_udp_LDADD = $(NETLIBS)
index fe9254d299112094db4d7833c613a6058dae8b5a..8f5ebf8ee15790c7c2f3e65777e745da8b2c95f0 100644 (file)
@@ -42,8 +42,8 @@ void print_help (void);
 
 int warn_percent = 0;
 int crit_percent = 0;
-float warn_size = 0;
-float crit_size = 0;
+double warn_size = 0;
+double crit_size = 0;
 int verbose;
 int allswaps;
 
@@ -376,12 +376,13 @@ process_arguments (int argc, char **argv)
                switch (c) {
                case 'w':                                                                       /* warning size threshold */
                        if (is_intnonneg (optarg)) {
-                               warn_size = (float) atoi (optarg);
+                               warn_size = (double) atoi (optarg);
                                break;
                        }
                        else if (strstr (optarg, ",") &&
                                                         strstr (optarg, "%") &&
-                                                        sscanf (optarg, "%.0f,%d%%", &warn_size, &warn_percent) == 2) {
+                                                        sscanf (optarg, "%g,%d%%", &warn_size, &warn_percent) == 2) {
+                               warn_size = floor(warn_size);
                                break;
                        }
                        else if (strstr (optarg, "%") &&
@@ -393,12 +394,13 @@ process_arguments (int argc, char **argv)
                        }
                case 'c':                                                                       /* critical size threshold */
                        if (is_intnonneg (optarg)) {
-                               crit_size = (float) atoi (optarg);
+                               crit_size = (double) atoi (optarg);
                                break;
                        }
                        else if (strstr (optarg, ",") &&
                                                         strstr (optarg, "%") &&
-                                                        sscanf (optarg, "%.0f,%d%%", &crit_size, &crit_percent) == 2) {
+                                                        sscanf (optarg, "%g,%d%%", &crit_size, &crit_percent) == 2) {
+                               crit_size = floor(crit_size);
                                break;
                        }
                        else if (strstr (optarg, "%") &&
@@ -439,12 +441,12 @@ process_arguments (int argc, char **argv)
        if (c == argc)
                return validate_arguments ();
        if (warn_size == 0 && is_intnonneg (argv[c]))
-               warn_size = (float) atoi (argv[c++]);
+               warn_size = (double) atoi (argv[c++]);
 
        if (c == argc)
                return validate_arguments ();
        if (crit_size == 0 && is_intnonneg (argv[c]))
-               crit_size = atoi (argv[c++]);
+               crit_size = (double) atoi (argv[c++]);
 
        return validate_arguments ();
 }