aboutsummaryrefslogtreecommitdiffstats
path: root/libbridge/libbridge_init.c
diff options
context:
space:
mode:
authorshemminger <shemminger>2006-02-01 17:58:00 +0000
committershemminger <shemminger>2006-02-01 17:58:00 +0000
commit0a5a8a838009222e9b2ddbc570a6a001ce5fc603 (patch)
tree511bf66e423e84c48c6da36ae47f77f98926f3f4 /libbridge/libbridge_init.c
parent104fa8f949a48756874ce2a301c6b500ac051466 (diff)
downloadandroid_external_brctl-0a5a8a838009222e9b2ddbc570a6a001ce5fc603.tar.gz
android_external_brctl-0a5a8a838009222e9b2ddbc570a6a001ce5fc603.tar.bz2
android_external_brctl-0a5a8a838009222e9b2ddbc570a6a001ce5fc603.zip
Fix bugs with new sysfsutils library interface
Diffstat (limited to 'libbridge/libbridge_init.c')
-rw-r--r--libbridge/libbridge_init.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/libbridge/libbridge_init.c b/libbridge/libbridge_init.c
index 7cbf767..4c34b31 100644
--- a/libbridge/libbridge_init.c
+++ b/libbridge/libbridge_init.c
@@ -21,6 +21,7 @@
#include <unistd.h>
#include <errno.h>
#include <string.h>
+#include <dirent.h>
#include "libbridge.h"
#include "libbridge_private.h"
@@ -206,8 +207,8 @@ int br_foreach_port(const char *brname,
{
#ifdef HAVE_LIBSYSFS
struct sysfs_class_device *dev;
- struct dlist *list;
- const char *name;
+ DIR *dir;
+ struct dirent *dirent;
int err = 0;
char path[SYSFS_PATH_MAX];
@@ -218,24 +219,27 @@ int br_foreach_port(const char *brname,
snprintf(path, sizeof(path), "%s/%s",
dev->path, SYSFS_BRIDGE_PORT_SUBDIR);
- dprintf("path=%s\n", path);
- list = sysfs_open_directory_list(path);
- if (!list) {
+
+ dir = opendir(path);
+ if (!dir) {
/* no /sys/class/net/ethX/brif subdirectory
* either: old kernel, or not really a bridge
*/
- dprintf("sysfs_open_directory failed\n");
goto old;
}
err = 0;
- dlist_for_each_data(list, name, const char) {
+ while ((dirent = readdir(dir)) != NULL) {
+ if (0 == strcmp(dirent->d_name, "."))
+ continue;
+ if (0 == strcmp(dirent->d_name, ".."))
+ continue;
++err;
- if (iterator(brname, name, arg))
+ if (iterator(brname, dirent->d_name, arg))
break;
}
+ closedir(dir);
- sysfs_close_list(list);
return err;
old: