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