@@ -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)
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.popovych@gmail.com> --- ip/iptuntap.c | 59 ++++++++++++++++++++++++--------------------------------- 1 file changed, 25 insertions(+), 34 deletions(-)