Blob Blame History Raw
--- net-tools-1.60/netplug-1.2.9/if_info.c.execshield	2005-01-08 06:57:08.000000000 +0100
+++ net-tools-1.60/netplug-1.2.9/if_info.c	2005-02-28 14:43:05.596799288 +0100
@@ -95,15 +95,16 @@
     return buf;
 }
 
-void
-for_each_iface(int (*func)(struct if_info *))
+struct if_info *
+for_each_iface(int (*func)(struct if_info *, long), long param)
 {
     for(int i = 0; i < INFOHASHSZ; i++) {
         for(struct if_info *info = if_info[i]; info != NULL; info = info->next) {
-            if ((*func)(info))
-                return;
+            if ((*func)(info, param))
+                return info;
         }
     }
+    return NULL;
 }
 
 /* Reevaluate the state machine based on the current state and flag settings */
@@ -285,22 +286,20 @@
 }
 
 /* handle a script termination and update the state accordingly */
+int find_pid(struct if_info *i, long param) {
+    if (i->worker == param) {
+        return 1;
+    }
+    return 0;
+}
+
 void ifsm_scriptdone(pid_t pid, int exitstatus)
 {
     int exitok = WIFEXITED(exitstatus) && WEXITSTATUS(exitstatus) == 0;
     struct if_info *info;
     assert(WIFEXITED(exitstatus) || WIFSIGNALED(exitstatus));
 
-    int find_pid(struct if_info *i) {
-        if (i->worker == pid) {
-            info = i;
-            return 1;
-        }
-        return 0;
-    }
-
-    info = NULL;
-    for_each_iface(find_pid);
+    info = for_each_iface(find_pid, pid);
 
     if (info == NULL) {
         do_log(LOG_INFO, "Unexpected child %d exited with status %d",
--- net-tools-1.60/netplug-1.2.9/netplug.h.execshield	2005-01-08 06:57:09.000000000 +0100
+++ net-tools-1.60/netplug-1.2.9/netplug.h	2005-02-28 14:43:05.597799136 +0100
@@ -83,7 +83,7 @@
                                          struct rtattr *attrs[]);
 int if_info_save_interface(struct nlmsghdr *hdr, void *arg);
 void parse_rtattrs(struct rtattr *tb[], int max, struct rtattr *rta, int len);
-void for_each_iface(int (*func)(struct if_info *));
+struct if_info *for_each_iface(int (*func)(struct if_info *, long), long param);
 
 void ifsm_flagpoll(struct if_info *info);
 void ifsm_flagchange(struct if_info *info, unsigned int newflags);
--- net-tools-1.60/netplug-1.2.9/Makefile.execshield	2005-02-28 14:43:05.000000000 +0100
+++ net-tools-1.60/netplug-1.2.9/Makefile	2005-02-28 14:47:42.123760800 +0100
@@ -9,8 +9,8 @@
 
 install_opts :=
 
-CFLAGS += -Wall -Werror -std=gnu99 -DNP_ETC_DIR='"$(etcdir)"' \
-	-DNP_SCRIPT_DIR='"$(scriptdir)"' -ggdb3 -O3 -DNP_VERSION='"$(version)"'
+CFLAGS += -std=gnu99 -DNP_ETC_DIR='"$(etcdir)"' \
+	-DNP_SCRIPT_DIR='"$(scriptdir)"' -DNP_VERSION='"$(version)"'
 
 netplugd: config.o netlink.o lib.o if_info.o main.o
 	$(CC) $(LDFLAGS) -o $@ $^
--- net-tools-1.60/netplug-1.2.9/main.c.execshield	2005-01-08 06:57:09.000000000 +0100
+++ net-tools-1.60/netplug-1.2.9/main.c	2005-02-28 14:43:05.599798832 +0100
@@ -161,11 +161,28 @@
     ce.pid = info->si_pid;
     ret = waitpid(info->si_pid, &ce.status, 0);
     if (ret == info->si_pid)
-        write(child_handler_pipe[1], &ce, sizeof(ce));
+        (void)write(child_handler_pipe[1], &ce, sizeof(ce));
 }
 
 /* Poll the existing interface state, so we can catch any state
    changes for which we may not have neen a netlink message. */
+static int pollflags(struct if_info *info, long param) {
+    struct ifreq ifr;
+
+    if (!if_match(info->name))
+        return 0;
+
+    memcpy(ifr.ifr_name, info->name, sizeof(ifr.ifr_name));
+    if (ioctl(param, SIOCGIFFLAGS, &ifr) < 0)
+        do_log(LOG_ERR, "%s: can't get flags: %m", info->name);
+    else {
+        ifsm_flagchange(info, ifr.ifr_flags);
+        ifsm_flagpoll(info);
+    }
+
+    return 0;
+}
+
 static void
 poll_interfaces(void)
 {
@@ -180,24 +197,13 @@
         close_on_exec(sockfd);
     }
 
-    int pollflags(struct if_info *info) {
-        struct ifreq ifr;
-
-        if (!if_match(info->name))
-            return 0;
-
-        memcpy(ifr.ifr_name, info->name, sizeof(ifr.ifr_name));
-        if (ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0)
-            do_log(LOG_ERR, "%s: can't get flags: %m", info->name);
-        else {
-            ifsm_flagchange(info, ifr.ifr_flags);
-            ifsm_flagpoll(info);
-        }
-
-        return 0;
-    }
+    for_each_iface(pollflags, sockfd);
+}
 
-    for_each_iface(pollflags);
+static int poll_flags(struct if_info *i, long param) {
+    if (if_match(i->name))
+        ifsm_flagpoll(i);
+    return 0;
 }
 
 int debug = 0;
@@ -331,17 +337,11 @@
         { child_handler_pipe[0], POLLIN, 0 },
     };
 
-    {
-        /* Run over each of the interfaces we know and care about, and
-           make sure the state machine has done the appropriate thing
-           for their current state. */
-        int poll_flags(struct if_info *i) {
-            if (if_match(i->name))
-                ifsm_flagpoll(i);
-            return 0;
-        }
-        for_each_iface(poll_flags);
-    }
+    /* Run over each of the interfaces we know and care about, and
+       make sure the state machine has done the appropriate thing
+       for their current state. */
+    for_each_iface(poll_flags, 0);
+
 
     for(;;) {
         int ret;