#
-# Copyright (C) 2009 OpenWrt.org
+# Copyright (C) 2009-2010 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=liboping
-PKG_VERSION:=1.3.3
+PKG_VERSION:=1.3.4
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://verplant.org/liboping/files
-PKG_MD5SUM:=4ead44ef797dc557106fdc91aa61bd97
+PKG_MD5SUM:=208e185f75f9f8ac96e508bd9e17ef61
PKG_FIXUP:=libtool
+PKG_INSTALL:=1
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk
DEPENDS+= +liboping
endef
-
TARGET_CFLAGS += $(FPIC)
CONFIGURE_ARGS += \
--enable-shared \
--enable-static
-define Build/Compile
- $(MAKE) -C $(PKG_BUILD_DIR) \
- DESTDIR="$(PKG_INSTALL_DIR)" \
- all install
-endef
-
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_INSTALL_DIR)/usr/include/oping.h $(1)/usr/include/
define Package/oping/install
$(INSTALL_DIR) $(1)/usr/bin
- $(CP) $(PKG_INSTALL_DIR)/usr/bin/oping $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/oping $(1)/usr/bin/
endef
$(eval $(call BuildPackage,liboping))
-diff --git a/src/liboping.c b/src/liboping.c
-index 411d866..e80ea29 100644
---- a/src/liboping.c
-+++ b/src/liboping.c
-@@ -590,9 +590,10 @@ static int ping_receive_one (pingobj_t *obj, const pinghost_t *ph,
-
- static int ping_receive_all (pingobj_t *obj)
- {
-- fd_set readfds;
-- int num_readfds;
-- int max_readfds;
-+ fd_set read_fds;
-+ fd_set err_fds;
-+ int num_fds;
-+ int max_fd;
-
- pinghost_t *ph;
- pinghost_t *ptr;
-@@ -631,23 +632,25 @@ static int ping_receive_all (pingobj_t *obj)
-
- while (1)
- {
-- FD_ZERO (&readfds);
-- num_readfds = 0;
-- max_readfds = -1;
-+ FD_ZERO (&read_fds);
-+ FD_ZERO (&err_fds);
-+ num_fds = 0;
-+ max_fd = -1;
-
- for (ptr = ph; ptr != NULL; ptr = ptr->next)
- {
- if (!timerisset (ptr->timer))
- continue;
-
-- FD_SET (ptr->fd, &readfds);
-- num_readfds++;
-+ FD_SET (ptr->fd, &read_fds);
-+ FD_SET (ptr->fd, &err_fds);
-+ num_fds++;
-
-- if (max_readfds < ptr->fd)
-- max_readfds = ptr->fd;
-+ if (max_fd < ptr->fd)
-+ max_fd = ptr->fd;
- }
-
-- if (num_readfds == 0)
-+ if (num_fds == 0)
- break;
-
- if (gettimeofday (&nowtime, NULL) == -1)
-@@ -659,11 +662,11 @@ static int ping_receive_all (pingobj_t *obj)
- if (ping_timeval_sub (&endtime, &nowtime, &timeout) == -1)
- break;
-
-- dprintf ("Waiting on %i sockets for %i.%06i seconds\n", num_readfds,
-+ dprintf ("Waiting on %i sockets for %i.%06i seconds\n", num_fds,
- (int) timeout.tv_sec,
- (int) timeout.tv_usec);
-
-- status = select (max_readfds + 1, &readfds, NULL, NULL, &timeout);
-+ status = select (max_fd + 1, &read_fds, NULL, &err_fds, &timeout);
-
- if (gettimeofday (&nowtime, NULL) == -1)
- {
-@@ -696,9 +699,18 @@ static int ping_receive_all (pingobj_t *obj)
-
- for (ptr = ph; ptr != NULL; ptr = ptr->next)
- {
-- if (FD_ISSET (ptr->fd, &readfds))
-+ if (FD_ISSET (ptr->fd, &read_fds))
-+ {
- if (ping_receive_one (obj, ptr, &nowtime) == 0)
- ret++;
-+ }
-+ else if (FD_ISSET (ptr->fd, &err_fds))
-+ {
-+ /* clear the timer in this case so that we
-+ * don't run into an endless loop. */
-+ /* TODO: Set an error flag in this case. */
-+ timerclear (ptr->timer);
-+ }
- }
- } /* while (1) */
-