Now we have helper to iterate over entries in /proc/net/dev we can
simplify and cleanup do_tunnels_list() in ip/iptuntap.c.

While there replace printf("\n") with fputc('\n', stdout) and
printf() with fputs() where string does not contain format specifiers.

Signed-off-by: Serhey Popovych <serhe.popov...@gmail.com>
---
 ip/iptuntap.c |   59 ++++++++++++++++++++++++---------------------------------
 1 file changed, 25 insertions(+), 34 deletions(-)

diff --git a/ip/iptuntap.c b/ip/iptuntap.c
index 09f2be2..01b68ad 100644
--- a/ip/iptuntap.c
+++ b/ip/iptuntap.c
@@ -348,44 +348,35 @@ next:
        globfree(&globbuf);
 }
 
-
-static int do_show(int argc, char **argv)
+static pnd_result_t do_tuntap_list(char *name, char *stats, void *arg)
 {
-       DIR *dir;
-       struct dirent *d;
        long flags, owner = -1, group = -1;
 
-       dir = opendir("/sys/class/net");
-       if (!dir) {
-               perror("opendir");
-               return -1;
+       if (read_prop(name, "tun_flags", &flags))
+               return PND_NEXT;
+
+       read_prop(name, "owner", &owner);
+       read_prop(name, "group", &group);
+
+       printf("%s:", name);
+       print_flags(flags);
+       if (owner != -1)
+               printf(" user %ld", owner);
+       if (group != -1)
+               printf(" group %ld", group);
+       fputc('\n', stdout);
+       if (show_details) {
+               fputs("\tAttached to processes:", stdout);
+               show_processes(name);
+               fputc('\n', stdout);
        }
-       while ((d = readdir(dir))) {
-               if (d->d_name[0] == '.' &&
-                   (d->d_name[1] == 0 || d->d_name[1] == '.'))
-                       continue;
-
-               if (read_prop(d->d_name, "tun_flags", &flags))
-                       continue;
-
-               read_prop(d->d_name, "owner", &owner);
-               read_prop(d->d_name, "group", &group);
-
-               printf("%s:", d->d_name);
-               print_flags(flags);
-               if (owner != -1)
-                       printf(" user %ld", owner);
-               if (group != -1)
-                       printf(" group %ld", group);
-               printf("\n");
-               if (show_details) {
-                       printf("\tAttached to processes:");
-                       show_processes(d->d_name);
-                       printf("\n");
-               }
-       }
-       closedir(dir);
-       return 0;
+
+       return PND_NEXT;
+}
+
+static int do_show(int argc, char **argv)
+{
+       return do_each_proc_net_dev(do_tuntap_list, NULL);
 }
 
 int do_iptuntap(int argc, char **argv)
-- 
1.7.10.4

Reply via email to