Merge pull request #919 from baryonix/solaris-misc-fixes
authorMarc Fournier <marc.fournier@camptocamp.com>
Tue, 19 May 2015 10:02:28 +0000 (12:02 +0200)
committerMarc Fournier <marc.fournier@camptocamp.com>
Tue, 19 May 2015 10:02:28 +0000 (12:02 +0200)
Fixes for zfs_arc and processes plugins on Solaris

1  2 
configure.ac
src/processes.c

diff --combined configure.ac
@@@ -1190,7 -1190,6 +1190,7 @@@ FILE *fh
  struct mntent *me;
  fh = setmntent ("/etc/mtab", "r");
  me = getmntent (fh);
 +return(me->mnt_passno);
  ]]]
                        )],
                        [c_cv_have_one_getmntent="yes"],
                                 int status;
                                 fh = fopen ("/etc/mnttab", "r");
                                 status = getmntent (fh, &mt);
 +                               return(status);
  ]]]
                        )],
                        [c_cv_have_two_getmntent="yes"],
                 [have_curlopt_username="yes"],
                 [have_curlopt_username="no"],
                 [[#include <curl/curl.h>]])
 +              AC_CHECK_DECL(CURLOPT_TIMEOUT_MS,
 +               [have_curlopt_timeout="yes"],
 +               [have_curlopt_timeout="no"],
 +               [[#include <curl/curl.h>]])
        fi
  fi
  if test "x$with_libcurl" = "xyes"
        then
                AC_DEFINE(HAVE_CURLOPT_USERNAME, 1, [Define if libcurl supports CURLOPT_USERNAME option.])
        fi
 +
 +      if test "x$have_curlopt_timeout" = "xyes"
 +      then
 +              AC_DEFINE(HAVE_CURLOPT_TIMEOUT_MS, 1, [Define if libcurl supports CURLOPT_TIMEOUT_MS option.])
 +      fi
  fi
  AM_CONDITIONAL(BUILD_WITH_LIBCURL, test "x$with_libcurl" = "xyes")
  # }}}
@@@ -1762,6 -1751,7 +1762,6 @@@ the
        LDFLAGS="$LDFLAGS $with_libdbi_ldflags"
  
        AC_CHECK_LIB(dbi, dbi_initialize, [with_libdbi="yes"], [with_libdbi="no (Symbol 'dbi_initialize' not found)"])
 -      AC_CHECK_LIB(dbi, dbi_driver_open_r, [with_libdbi_r="yes"], [with_libdbi_r="no"])
  
        CPPFLAGS="$SAVE_CPPFLAGS"
        LDFLAGS="$SAVE_LDFLAGS"
@@@ -1774,6 -1764,11 +1774,6 @@@ the
        AC_SUBST(BUILD_WITH_LIBDBI_CPPFLAGS)
        AC_SUBST(BUILD_WITH_LIBDBI_LDFLAGS)
        AC_SUBST(BUILD_WITH_LIBDBI_LIBS)
 -
 -  if test "x$with_libdbi_r" = "xyes"
 -  then
 -              AC_DEFINE(HAVE_LIBDBI_R, 1, [Define if reentrant dbi facility is present and usable.])
 -  fi
  fi
  AM_CONDITIONAL(BUILD_WITH_LIBDBI, test "x$with_libdbi" = "xyes")
  # }}}
  
  # --with-java {{{
  with_java_home="$JAVA_HOME"
 +if test "x$with_java_home" = "x"
 +then
 +      with_java_home="/usr/lib/jvm"
 +fi
  with_java_vmtype="client"
  with_java_cflags=""
  with_java_libs=""
@@@ -2114,7 -2105,7 +2114,7 @@@ the
        if test -d "$with_java_home"
        then
                AC_MSG_CHECKING([for jni.h])
 -              TMPVAR=`find "$with_java_home" -name jni.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
 +              TMPVAR=`find -L "$with_java_home" -name jni.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
                if test "x$TMPVAR" != "x"
                then
                        AC_MSG_RESULT([found in $TMPVAR])
                fi
  
                AC_MSG_CHECKING([for jni_md.h])
 -              TMPVAR=`find "$with_java_home" -name jni_md.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
 +              TMPVAR=`find -L "$with_java_home" -name jni_md.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
                if test "x$TMPVAR" != "x"
                then
                        AC_MSG_RESULT([found in $TMPVAR])
                fi
  
                AC_MSG_CHECKING([for libjvm.so])
 -              TMPVAR=`find "$with_java_home" -name libjvm.so -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
 +              TMPVAR=`find -L "$with_java_home" -name libjvm.so -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
                if test "x$TMPVAR" != "x"
                then
                        AC_MSG_RESULT([found in $TMPVAR])
                if test "x$JAVAC" = "x"
                then
                        AC_MSG_CHECKING([for javac])
 -                      TMPVAR=`find "$with_java_home" -name javac -type f 2>/dev/null | head -n 1`
 +                      TMPVAR=`find -L "$with_java_home" -name javac -type f 2>/dev/null | head -n 1`
                        if test "x$TMPVAR" != "x"
                        then
                                JAVAC="$TMPVAR"
                if test "x$JAR" = "x"
                then
                        AC_MSG_CHECKING([for jar])
 -                      TMPVAR=`find "$with_java_home" -name jar -type f 2>/dev/null | head -n 1`
 +                      TMPVAR=`find -L "$with_java_home" -name jar -type f 2>/dev/null | head -n 1`
                        if test "x$TMPVAR" != "x"
                        then
                                JAR="$TMPVAR"
@@@ -3178,7 -3169,6 +3178,7 @@@ the
  ]]],
  [[[
    int val = PCAP_ERROR_IFACE_NOT_UP;
 +  return(val);
  ]]]
                       )],
                       [c_cv_libpcap_have_pcap_error_iface_not_up="yes"],
@@@ -3229,12 -3219,12 +3229,12 @@@ if test "x$with_libperl" = "xyes" 
        && test -n "$perl_interpreter"
  then
    SAVE_CFLAGS="$CFLAGS"
 -  SAVE_LDFLAGS="$LDFLAGS"
 +  SAVE_LIBS="$LIBS"
  dnl ARCHFLAGS="" -> disable multi -arch on OSX (see Config_heavy.pl:fetch_string)
    PERL_CFLAGS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e ccopts`
 -  PERL_LDFLAGS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e ldopts`
 +  PERL_LIBS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e ldopts`
    CFLAGS="$CFLAGS $PERL_CFLAGS"
 -  LDFLAGS="$LDFLAGS $PERL_LDFLAGS"
 +  LIBS="$LIBS $PERL_LIBS"
  
    AC_CACHE_CHECK([for libperl],
      [c_cv_have_libperl],
    then
          AC_DEFINE(HAVE_LIBPERL, 1, [Define if libperl is present and usable.])
          AC_SUBST(PERL_CFLAGS)
 -        AC_SUBST(PERL_LDFLAGS)
 +        AC_SUBST(PERL_LIBS)
    else
          with_libperl="no"
    fi
  
    CFLAGS="$SAVE_CFLAGS"
 -  LDFLAGS="$SAVE_LDFLAGS"
 +  LIBS="$SAVE_LIBS"
  else if test -z "$perl_interpreter"; then
    with_libperl="no (no perl interpreter found)"
    c_cv_have_libperl="no"
@@@ -3277,9 -3267,9 +3277,9 @@@ AM_CONDITIONAL(BUILD_WITH_LIBPERL, tes
  if test "x$with_libperl" = "xyes"
  then
        SAVE_CFLAGS="$CFLAGS"
 -      SAVE_LDFLAGS="$LDFLAGS"
 +      SAVE_LIBS="$LIBS"
        CFLAGS="$CFLAGS $PERL_CFLAGS"
 -      LDFLAGS="$LDFLAGS $PERL_LDFLAGS"
 +      LIBS="$LIBS $PERL_LIBS"
  
        AC_CACHE_CHECK([if perl supports ithreads],
                [c_cv_have_perl_ithreads],
        fi
  
        CFLAGS="$SAVE_CFLAGS"
 -      LDFLAGS="$SAVE_LDFLAGS"
 +      LIBS="$SAVE_LIBS"
  fi
  
  if test "x$with_libperl" = "xyes"
  then
        SAVE_CFLAGS="$CFLAGS"
 -      SAVE_LDFLAGS="$LDFLAGS"
 +      SAVE_LIBS="$LIBS"
        # trigger an error if Perl_load_module*() uses __attribute__nonnull__(3)
        # (see issues #41 and #42)
        CFLAGS="$CFLAGS $PERL_CFLAGS -Wall -Werror"
 -      LDFLAGS="$LDFLAGS $PERL_LDFLAGS"
 +      LIBS="$LIBS $PERL_LIBS"
  
        AC_CACHE_CHECK([for broken Perl_load_module()],
                [c_cv_have_broken_perl_load_module],
        )
  
        CFLAGS="$SAVE_CFLAGS"
 -      LDFLAGS="$SAVE_LDFLAGS"
 +      LIBS="$SAVE_LIBS"
  fi
  AM_CONDITIONAL(HAVE_BROKEN_PERL_LOAD_MODULE,
                test "x$c_cv_have_broken_perl_load_module" = "xyes")
  if test "x$with_libperl" = "xyes"
  then
        SAVE_CFLAGS="$CFLAGS"
 -      SAVE_LDFLAGS="$LDFLAGS"
 +      SAVE_LIBS="$LIBS"
        CFLAGS="$CFLAGS $PERL_CFLAGS"
 -      LDFLAGS="$LDFLAGS $PERL_LDFLAGS"
 +      LIBS="$LIBS $PERL_LIBS"
  
        AC_CHECK_MEMBER(
                [struct mgvtbl.svt_local],
        fi
  
        CFLAGS="$SAVE_CFLAGS"
 -      LDFLAGS="$SAVE_LDFLAGS"
 +      LIBS="$SAVE_LIBS"
  fi
  # }}}
  
  # --with-librdkafka {{{
  AC_ARG_WITH(librdkafka, [AS_HELP_STRING([--with-librdkafka@<:@=PREFIX@:>@], [Path to librdkafka.])],
  [
 -  if test "x$withval" = "xno" && test "x$withval" != "xyes"
 +  if test "x$withval" != "xno" && test "x$withval" != "xyes"
    then
      with_librdkafka_cppflags="-I$withval/include"
      with_librdkafka_ldflags="-L$withval/lib"
 +    with_librdkafka_rpath="$withval/lib"
      with_librdkafka="yes"
    else
      with_librdkafka="$withval"
  SAVE_CPPFLAGS="$CPPFLAGS"
  SAVE_LDFLAGS="$LDFLAGS"
  
 +CPPFLAGS="$CPPFLAGS $with_librdkafka_cppflags"
 +LDFLAGS="$LDFLAGS $with_librdkafka_ldflags"
 +
  if test "x$with_librdkafka" = "xyes"
  then
        AC_CHECK_HEADERS(librdkafka/rdkafka.h, [with_librdkafka="yes"], [with_librdkafka="no (librdkafka/rdkafka.h not found)"])
@@@ -3753,18 -3739,13 +3753,18 @@@ if test "x$with_librdkafka" = "xyes
  then
        AC_CHECK_LIB(rdkafka, rd_kafka_new, [with_librdkafka="yes"], [with_librdkafka="no (Symbol 'rd_kafka_new' not found)"])
    AC_CHECK_LIB(rdkafka, rd_kafka_conf_set_log_cb, [with_librdkafka_log_cb="yes"], [with_librdkafka_log_cb="no"])
 -  AC_CHECK_LIB(rdkafka, rd_kafka_conf_set_logger, [with_librdkafka_logger="yes"], [with_librdkafka_logger="no"])
 +  AC_CHECK_LIB(rdkafka, rd_kafka_set_logger, [with_librdkafka_logger="yes"], [with_librdkafka_logger="no"])
  fi
  if test "x$with_librdkafka" = "xyes"
  then
        BUILD_WITH_LIBRDKAFKA_CPPFLAGS="$with_librdkafka_cppflags"
        BUILD_WITH_LIBRDKAFKA_LDFLAGS="$with_librdkafka_ldflags"
 -      BUILD_WITH_LIBRDKAFKA_LIBS="-lrdkafka"
 +      if test "x$with_librdkafka_rpath" != "x"
 +      then
 +              BUILD_WITH_LIBRDKAFKA_LIBS="-Wl,-rpath,$with_librdkafka_rpath -lrdkafka"
 +      else
 +              BUILD_WITH_LIBRDKAFKA_LIBS="-lrdkafka"
 +      fi
        AC_SUBST(BUILD_WITH_LIBRDKAFKA_CPPFLAGS)
        AC_SUBST(BUILD_WITH_LIBRDKAFKA_LDFLAGS)
        AC_SUBST(BUILD_WITH_LIBRDKAFKA_LIBS)
  if test "x$with_libstatgrab" = "xyes"
  then
    SAVE_CFLAGS="$CFLAGS"
 -  SAVE_LDFLAGS="$LDFLAGS"
 +  SAVE_LIBS="$LIBS"
  
    CFLAGS="$CFLAGS $with_libstatgrab_cflags"
    LDFLAGS="$LDFLAGS $with_libstatgrab_ldflags"
 +  LIBS="-lstatgrab $LIBS"
  
    AC_CACHE_CHECK([if libstatgrab >= 0.90],
            [c_cv_have_libstatgrab_0_90],
  
    CFLAGS="$SAVE_CFLAGS"
    LDFLAGS="$SAVE_LDFLAGS"
 +  LIBS="$SAVE_LIBS"
  fi
  
  AM_CONDITIONAL(BUILD_WITH_LIBSTATGRAB, test "x$with_libstatgrab" = "xyes")
@@@ -5122,7 -5101,6 +5122,7 @@@ plugin_ascent="no
  plugin_barometer="no"
  plugin_battery="no"
  plugin_bind="no"
 +plugin_ceph="no"
  plugin_cgroups="no"
  plugin_conntrack="no"
  plugin_contextswitch="no"
@@@ -5178,7 -5156,6 +5178,7 @@@ the
        plugin_entropy="yes"
        plugin_fscache="yes"
        plugin_interface="yes"
 +      plugin_ipc="yes"
        plugin_irq="yes"
        plugin_load="yes"
        plugin_lvm="yes"
  if test "x$ac_system" = "xAIX"
  then
          plugin_tcpconns="yes"
 +        plugin_ipc="yes"
  fi
  
  # FreeBSD
  if test "x$with_kstat" = "xyes"
  then
        plugin_nfs="yes"
+       plugin_processes="yes"
        plugin_uptime="yes"
        plugin_zfs_arc="yes"
  fi
        plugin_curl_xml="yes"
  fi
  
 +if test "x$with_libyajl" = "xyes"
 +then
 +      plugin_ceph="yes"
 +fi
 +
  if test "x$have_processor_info" = "xyes"
  then
        plugin_cpu="yes"
@@@ -5495,7 -5467,6 +5496,7 @@@ AC_PLUGIN([ascent],      [$plugin_ascen
  AC_PLUGIN([barometer],   [$plugin_barometer],  [Barometer sensor on I2C])
  AC_PLUGIN([battery],     [$plugin_battery],    [Battery statistics])
  AC_PLUGIN([bind],        [$plugin_bind],       [ISC Bind nameserver statistics])
 +AC_PLUGIN([ceph],        [$plugin_ceph],       [Ceph daemon statistics])
  AC_PLUGIN([conntrack],   [$plugin_conntrack],  [nf_conntrack statistics])
  AC_PLUGIN([contextswitch], [$plugin_contextswitch], [context switch statistics])
  AC_PLUGIN([cpufreq],     [$plugin_cpufreq],    [CPU frequency statistics])
@@@ -5519,7 -5490,6 +5520,7 @@@ AC_PLUGIN([fscache],     [$plugin_fscac
  AC_PLUGIN([gmond],       [$with_libganglia],   [Ganglia plugin])
  AC_PLUGIN([hddtemp],     [yes],                [Query hddtempd])
  AC_PLUGIN([interface],   [$plugin_interface],  [Interface traffic statistics])
 +AC_PLUGIN([ipc],         [$plugin_ipc],        [IPC statistics])
  AC_PLUGIN([ipmi],        [$plugin_ipmi],       [IPMI sensor statistics])
  AC_PLUGIN([iptables],    [$with_libiptc],      [IPTables rule counters])
  AC_PLUGIN([ipvs],        [$plugin_ipvs],       [IPVS connection statistics])
@@@ -5613,7 -5583,6 +5614,7 @@@ AC_PLUGIN([write_log], [yes]
  AC_PLUGIN([write_mongodb], [$with_libmongoc],  [MongoDB output plugin])
  AC_PLUGIN([write_redis], [$with_libhiredis],    [Redis output plugin])
  AC_PLUGIN([write_riemann], [$have_protoc_c],   [Riemann output plugin])
 +AC_PLUGIN([write_sensu], [yes],                [Sensu output plugin])
  AC_PLUGIN([write_tsdb],  [yes],                [TSDB output plugin])
  AC_PLUGIN([xmms],        [$with_libxmms],      [XMMS statistics])
  AC_PLUGIN([zfs_arc],     [$plugin_zfs_arc],    [ZFS ARC statistics])
@@@ -5804,11 -5773,10 +5805,11 @@@ Configuration
      libatasmart . . . . . $with_libatasmart
      libcurl . . . . . . . $with_libcurl
      libdbi  . . . . . . . $with_libdbi
 -    libhiredis  . . . . . $with_libhiredis
      libesmtp  . . . . . . $with_libesmtp
      libganglia  . . . . . $with_libganglia
      libgcrypt . . . . . . $with_libgcrypt
 +    libhal  . . . . . . . $with_libhal
 +    libhiredis  . . . . . $with_libhiredis
      libi2c-dev  . . . . . $with_libi2c
      libiokit  . . . . . . $with_libiokit
      libiptc . . . . . . . $with_libiptc
      libmemcached  . . . . $with_libmemcached
      libmnl  . . . . . . . $with_libmnl
      libmodbus . . . . . . $with_libmodbus
 +    libmongoc . . . . . . $with_libmongoc
      libmysql  . . . . . . $with_libmysql
      libnetapp . . . . . . $with_libnetapp
      libnetsnmp  . . . . . $with_libnetsnmp
      liboconfig  . . . . . $with_liboconfig
      libopenipmi . . . . . $with_libopenipmipthread
      liboping  . . . . . . $with_liboping
 +    libowcapi . . . . . . $with_libowcapi
      libpcap . . . . . . . $with_libpcap
      libperfstat . . . . . $with_perfstat
      libperl . . . . . . . $with_libperl
      libxml2 . . . . . . . $with_libxml2
      libxmms . . . . . . . $with_libxmms
      libyajl . . . . . . . $with_libyajl
 -    libevent  . . . . . . $with_libevent
 -    protobuf-c  . . . . . $have_protoc_c
      oracle  . . . . . . . $with_oracle
 +    protobuf-c  . . . . . $have_protoc_c
      python  . . . . . . . $with_python
  
    Features:
      amqp    . . . . . . . $enable_amqp
      apache  . . . . . . . $enable_apache
      apcups  . . . . . . . $enable_apcups
 -    aquaero . . . . . . . $enable_aquaero
      apple_sensors . . . . $enable_apple_sensors
 +    aquaero . . . . . . . $enable_aquaero
      ascent  . . . . . . . $enable_ascent
      barometer . . . . . . $enable_barometer
      battery . . . . . . . $enable_battery
      bind  . . . . . . . . $enable_bind
 +    ceph  . . . . . . . . $enable_ceph
 +    cgroups . . . . . . . $enable_cgroups
      conntrack . . . . . . $enable_conntrack
      contextswitch . . . . $enable_contextswitch
 -    cgroups . . . . . . . $enable_cgroups
      cpu . . . . . . . . . $enable_cpu
      cpufreq . . . . . . . $enable_cpufreq
      csv . . . . . . . . . $enable_csv
      gmond . . . . . . . . $enable_gmond
      hddtemp . . . . . . . $enable_hddtemp
      interface . . . . . . $enable_interface
 +    ipc . . . . . . . . . $enable_ipc
      ipmi  . . . . . . . . $enable_ipmi
      iptables  . . . . . . $enable_iptables
      ipvs  . . . . . . . . $enable_ipvs
      java  . . . . . . . . $enable_java
      load  . . . . . . . . $enable_load
      logfile . . . . . . . $enable_logfile
 -    lpar  . . . . . . . . $enable_lpar
      log_logstash  . . . . $enable_log_logstash
 +    lpar  . . . . . . . . $enable_lpar
      lvm . . . . . . . . . $enable_lvm
      madwifi . . . . . . . $enable_madwifi
      match_empty_counter . $enable_match_empty_counter
      swap  . . . . . . . . $enable_swap
      syslog  . . . . . . . $enable_syslog
      table . . . . . . . . $enable_table
 -    tail  . . . . . . . . $enable_tail
      tail_csv  . . . . . . $enable_tail_csv
 +    tail  . . . . . . . . $enable_tail
      tape  . . . . . . . . $enable_tape
      target_notification . $enable_target_notification
      target_replace  . . . $enable_target_replace
      write_mongodb . . . . $enable_write_mongodb
      write_redis . . . . . $enable_write_redis
      write_riemann . . . . $enable_write_riemann
 +    write_sensu . . . . . $enable_write_sensu
      write_tsdb  . . . . . $enable_write_tsdb
      xmms  . . . . . . . . $enable_xmms
      zfs_arc . . . . . . . $enable_zfs_arc
diff --combined src/processes.c
  /* #endif HAVE_PROCINFO_H */
  
  #elif KERNEL_SOLARIS
+ /* Hack: Avoid #error when building a 32-bit binary with
+  * _FILE_OFFSET_BITS=64. There is a reason for this #error, as one
+  * of the structures in <sys/procfs.h> uses an off_t, but that
+  * isn't relevant to our usage of procfs. */
+ #if !defined(_LP64) && _FILE_OFFSET_BITS == 64
+ #  define SAVE_FOB_64
+ #  undef _FILE_OFFSET_BITS
+ #endif
  # include <procfs.h>
+ #ifdef SAVE_FOB_64
+ #  define _FILE_OFFSET_BITS 64
+ #  undef SAVE_FOB_64
+ #endif
  # include <dirent.h>
  /* #endif KERNEL_SOLARIS */
  
@@@ -1199,17 -1214,17 +1214,17 @@@ static int read_fork_rate (
  #endif /*KERNEL_LINUX */
  
  #if KERNEL_SOLARIS
- static const char *ps_get_cmdline (pid_t pid, /* {{{ */
+ static const char *ps_get_cmdline (long pid, /* {{{ */
                char *buffer, size_t buffer_size)
  {
        char path[PATH_MAX];
        psinfo_t info;
        int status;
  
-       snprintf(path, sizeof (path), "/proc/%i/psinfo", pid);
+       snprintf(path, sizeof (path), "/proc/%li/psinfo", pid);
  
        status = read_file_contents (path, (void *) &info, sizeof (info));
-       if (status != ((int) buffer_size))
+       if (status != sizeof (info))
        {
                ERROR ("processes plugin: Unexpected return value "
                                "while reading \"%s\": "
   * The values for input and ouput chars are calculated "by hand"
   * Added a few "solaris" specific process states as well
   */
- static int ps_read_process(int pid, procstat_t *ps, char *state)
+ static int ps_read_process(long pid, procstat_t *ps, char *state)
  {
        char filename[64];
        char f_psinfo[64], f_usage[64];
        psinfo_t *myInfo;
        prusage_t *myUsage;
  
-       snprintf(filename, sizeof (filename), "/proc/%i/status", pid);
-       snprintf(f_psinfo, sizeof (f_psinfo), "/proc/%i/psinfo", pid);
-       snprintf(f_usage, sizeof (f_usage), "/proc/%i/usage", pid);
+       snprintf(filename, sizeof (filename), "/proc/%li/status", pid);
+       snprintf(f_psinfo, sizeof (f_psinfo), "/proc/%li/psinfo", pid);
+       snprintf(f_usage, sizeof (f_usage), "/proc/%li/usage", pid);
  
  
        buffer = malloc(sizeof (pstatus_t));
@@@ -1791,7 -1806,7 +1806,7 @@@ static int ps_read (void
        int wait     = 0;
  
        kvm_t *kd;
 -      char errbuf[1024];
 +      char errbuf[_POSIX2_LINE_MAX];
        struct kinfo_proc *procs;          /* array of processes */
        struct kinfo_proc *proc_ptr = NULL;
        int count;                         /* returns number of processes */
        ps_list_reset ();
  
        /* Open the kvm interface, get a descriptor */
 -      kd = kvm_open (NULL, NULL, NULL, 0, errbuf);
 +      kd = kvm_openfiles (NULL, "/dev/null", NULL, 0, errbuf);
        if (kd == NULL)
        {
                ERROR ("processes plugin: Cannot open kvm interface: %s",
  
        while ((ent = readdir(proc)) != NULL)
        {
-               int pid;
+               long pid;
                struct procstat ps;
                procstat_entry_t pse;
+               char *endptr;
  
                if (!isdigit ((int) ent->d_name[0]))
                        continue;
  
-               if ((pid = atoi (ent->d_name)) < 1)
+               pid = strtol (ent->d_name, &endptr, 10);
+               if (*endptr != 0) /* value didn't completely parse as a number */
                        continue;
  
                status = ps_read_process (pid, &ps, &state);
  
  
                ps_list_add (ps.name,
-                               ps_get_cmdline ((pid_t) pid,
-                                       cmdline, sizeof (cmdline)),
+                               ps_get_cmdline (pid, cmdline, sizeof (cmdline)),
                                &pse);
        } /* while(readdir) */
        closedir (proc);