--- /dev/null
+dist: trusty
+sudo: false
+
+language: c
+compiler:
+ - clang
+ - gcc
+script:
+ - autoreconf -fi
+ - ./configure
+ - make all
LT_INIT([dlopen])
# pkg-config interface
-PKG_INSTALLDIR
+# PKG_INSTALLDIR is only available for pkg-config >= 0.27
+m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [])
AC_ARG_WITH(pkgconfigdir,
AC_HELP_STRING([--with-pkgconfigdir], [Use the specified pkgconfig dir (default is libdir/pkgconfig)]),
AC_SEARCH_LIBS([nanosleep],[rt],[],
[AC_MSG_ERROR([cannot find nanosleep])])
-AC_SEARCH_LIBS([clock_gettime],[rt],[],
- [AC_MSG_ERROR([cannot find clock_gettime])])
-with_ncurses="no"
-AC_CHECK_HEADERS(ncursesw/ncurses.h ncurses.h, [with_ncurses="yes"], [])
-if test "x$with_ncurses" = "xyes"
-then
- have_ncursesw="no"
- have_ncurses="no"
- NCURSES_LIB=""
+AC_ARG_WITH(ncurses, AS_HELP_STRING([--with-ncurses], [Build oping CLI tool with ncurses support]))
+AS_IF([test "x$with_ncurses" != "xno"], [
+ can_build_with_ncurses="no"
+ PKG_CHECK_MODULES([NCURSES], [ncursesw], [can_build_with_ncurses=yes], [
+ PKG_CHECK_MODULES([NCURSES], [ncurses], [can_build_with_ncurses=yes], [
+ AC_CHECK_LIB(ncursesw, mvwprintw, [NCURSES_LIBS="-lncursesw"; can_build_with_ncurses=yes], [
+ AC_CHECK_LIB(ncurses, mvwprintw, [NCURSES_LIBS="-lncurses"; can_build_with_ncurses=yes])
+ ])
+ ])
+ ])
- AC_CHECK_LIB(ncursesw, mvwprintw, [have_ncursesw="yes"], [have_ncursesw="no"])
- AC_CHECK_LIB(ncurses, mvwprintw, [have_ncurses="yes"], [have_ncurses="no"])
+ AS_IF([test "x$can_build_with_ncurses" = "xyes"], [
+ AC_CHECK_HEADERS([ncursesw/curses.h ncursesw.h ncurses/curses.h ncurses.h], [can_build_with_ncurses=yes; break;], [can_build_with_ncurses=no])
+ ])
- if test "x$have_ncursesw" = "xyes"; then
- NCURSES_LIB="-lncursesw"
- else if test "x$have_ncurses" = "xyes"; then
- NCURSES_LIB="-lncurses"
- else
- with_ncurses="no"
- fi; fi
- AC_SUBST(NCURSES_LIB)
-fi
-AM_CONDITIONAL(BUILD_WITH_LIBNCURSES, test "x$with_ncurses" = "xyes")
+ AS_IF([test "x$can_build_with_ncurses" = "xno" && test "x$with_ncurses" = "xyes"], [
+ AC_MSG_ERROR([ncurses not found but explicit enabled])
+ ],
+ [test "x$can_build_with_ncurses" = "xno"], [
+ AC_MSG_WARN([Will not build oping with ncurses support -- no suiteable ncurses installation found])
+ ])
+])
+
+AM_CONDITIONAL(BUILD_WITH_LIBNCURSES, test "x$with_ncurses" != "xno" && test "x$can_build_with_ncurses" = "xyes")
AC_FUNC_STRERROR_R
bin_PROGRAMS += noping
noping_SOURCES = oping.c
-noping_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_NCURSES=1
-noping_LDADD = liboping.la -lm $(NCURSES_LIB)
+noping_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_NCURSES=1 $(NCURSES_CFLAGS)
+noping_LDADD = liboping.la -lm $(NCURSES_LIBS)
endif # BUILD_WITH_LIBNCURSES
install-exec-hook:
if (!timerisset (ptr->timer))
continue;
+ assert (ptr->fd < FD_SETSIZE);
FD_SET (ptr->fd, &read_fds);
FD_SET (ptr->fd, &err_fds);
num_fds++;
ping_set_errno (obj, errno);
continue;
}
+ else if (ph->fd >= FD_SETSIZE)
+ {
+ dprintf("socket(2) returned file descriptor %d, which is above the file "
+ "descriptor limit for select(2) (FD_SETSIZE = %d)\n",
+ ph->fd, FD_SETSIZE);
+ close(ph->fd);
+ ph->fd = -1;
+ ping_set_errno(obj, EMFILE);
+ continue;
+ }
if (obj->srcaddr != NULL)
{
/* http://newsgroups.derkeiler.com/Archive/Rec/rec.games.roguelike.development/2010-09/msg00050.html */
# define _X_OPEN_SOURCE_EXTENDED
-# if HAVE_NCURSESW_NCURSES_H
-# include <ncursesw/ncurses.h>
-# elif HAVE_NCURSES_H
+#if defined HAVE_NCURSESW_CURSES_H
+# include <ncursesw/curses.h>
+#elif defined HAVE_NCURSESW_H
+# include <ncursesw.h>
+#elif defined HAVE_NCURSES_CURSES_H
+# include <ncurses/curses.h>
+#elif defined HAVE_NCURSES_H
# include <ncurses.h>
-# endif
+#else
+# error "SysV or X/Open-compatible Curses header file required"
+#endif
# define OPING_GREEN 1
# define OPING_YELLOW 2
* and HISTORY_SIZE_MAX. */
size_t history_size;
- /* Number "received" entries in the history, i.e. non-NAN entries. */
+ /* Total number of reponses received. */
size_t history_received;
/* Index of the next RTT to be written to history_by_time. This wraps
opt_count = 0;
} /* }}} void sigint_handler */
-static ping_context_t *context_create (void) /* {{{ */
+static ping_context_t *context_create () /* {{{ */
{
- ping_context_t *ret;
-
- if ((ret = malloc (sizeof (ping_context_t))) == NULL)
+ ping_context_t *ctx = calloc (1, sizeof (*ctx));
+ if (ctx == NULL)
return (NULL);
- memset (ret, '\0', sizeof (ping_context_t));
-
- ret->latency_total = 0.0;
-
#if USE_NCURSES
- ret->window = NULL;
+ ctx->window = NULL;
#endif
- return (ret);
+ return (ctx);
} /* }}} ping_context_t *context_create */
static void context_destroy (ping_context_t *context) /* {{{ */
if (has_colors () == TRUE)
{
start_color ();
- init_pair (OPING_GREEN, COLOR_GREEN, /* default = */ 0);
- init_pair (OPING_YELLOW, COLOR_YELLOW, /* default = */ 0);
- init_pair (OPING_RED, COLOR_RED, /* default = */ 0);
- init_pair (OPING_GREEN_HIST, COLOR_GREEN, COLOR_BLACK);
+ use_default_colors ();
+ init_pair (OPING_GREEN, COLOR_GREEN, /* default = */ -1);
+ init_pair (OPING_YELLOW, COLOR_YELLOW, /* default = */ -1);
+ init_pair (OPING_RED, COLOR_RED, /* default = */ -1);
+ init_pair (OPING_GREEN_HIST, COLOR_GREEN, -1);
init_pair (OPING_YELLOW_HIST, COLOR_YELLOW, COLOR_GREEN);
init_pair (OPING_RED_HIST, COLOR_RED, COLOR_YELLOW);
}
if (outfile != NULL)
{
- struct timespec ts = { 0, 0 };
-
- if (clock_gettime (CLOCK_REALTIME, &ts) == 0)
+ struct timeval tv = {0};
+ if (gettimeofday (&tv, NULL) == 0)
{
- double t = ((double) ts.tv_sec) + (((double) ts.tv_nsec) / 1000000000.0);
+ double t = ((double) tv.tv_sec) + (((double) tv.tv_usec) / 1000000.0);
if ((sequence % 32) == 0)
fprintf (outfile, "#time,host,latency[ms]\n");