aboutsummaryrefslogtreecommitdiffstats
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
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
-rw-r--r--libbridge/libbridge_devif.c39
-rw-r--r--libbridge/libbridge_init.c22
-rw-r--r--libbridge/libbridge_private.h2
3 files changed, 34 insertions, 29 deletions
diff --git a/libbridge/libbridge_devif.c b/libbridge/libbridge_devif.c
index 8a9efb1..d3052a1 100644
--- a/libbridge/libbridge_devif.c
+++ b/libbridge/libbridge_devif.c
@@ -180,12 +180,14 @@ int br_get_bridge_info(const char *bridge, struct bridge_info *info)
goto fallback;
dev = sysfs_get_class_device(br_class_net, bridge);
- if (!dev)
+ if (!dev) {
+ dprintf("get_class_device '%s' failed\n", bridge);
goto fallback;
-
+ }
snprintf(path, SYSFS_PATH_MAX, "%s/bridge", dev->path);
- if (!sysfs_path_is_dir(path)) {
+ if (sysfs_path_is_dir(path)) {
+ dprintf("path '%s' is not a directory\n", path);
sysfs_close_class_device(dev);
goto fallback;
}
@@ -284,28 +286,28 @@ int br_get_port_info(const char *brname, const char *port,
goto fallback;
snprintf(path, SYSFS_PATH_MAX, "%s/brport", dev->path);
- if (!sysfs_path_is_dir(path)) {
+ if (sysfs_path_is_dir(path)) {
sysfs_close_class_device(dev);
goto fallback;
}
memset(info, 0, sizeof(*info));
- fetch_id(dev, BRPORT(designated_root), &info->designated_root);
- fetch_id(dev, BRPORT(designated_bridge), &info->designated_bridge);
- info->port_no = fetch_int(dev, BRPORT(port_no));
- info->port_id = fetch_int(dev, BRPORT(port_id));
- info->designated_port = fetch_int(dev, BRPORT(designated_port));
- info->path_cost = fetch_int(dev, BRPORT(path_cost));
- info->designated_cost = fetch_int(dev, BRPORT(designated_cost));
- info->state = fetch_int(dev, BRPORT(state));
- info->top_change_ack = fetch_int(dev, BRPORT(change_ack));
- info->config_pending = fetch_int(dev, BRPORT(config_pending));
- fetch_tv(dev, BRPORT(message_age_timer),
+ fetch_id(dev, BRPORT("designated_root"), &info->designated_root);
+ fetch_id(dev, BRPORT("designated_bridge"), &info->designated_bridge);
+ info->port_no = fetch_int(dev, BRPORT("port_no"));
+ info->port_id = fetch_int(dev, BRPORT("port_id"));
+ info->designated_port = fetch_int(dev, BRPORT("designated_port"));
+ info->path_cost = fetch_int(dev, BRPORT("path_cost"));
+ info->designated_cost = fetch_int(dev, BRPORT("designated_cost"));
+ info->state = fetch_int(dev, BRPORT("state"));
+ info->top_change_ack = fetch_int(dev, BRPORT("change_ack"));
+ info->config_pending = fetch_int(dev, BRPORT("config_pending"));
+ fetch_tv(dev, BRPORT("message_age_timer"),
&info->message_age_timer_value);
- fetch_tv(dev, BRPORT(forward_delay_timer),
+ fetch_tv(dev, BRPORT("forward_delay_timer"),
&info->forward_delay_timer_value);
- fetch_tv(dev, BRPORT(hold_timer),
+ fetch_tv(dev, BRPORT("hold_timer"),
&info->hold_timer_value);
sysfs_close_class_device(dev);
@@ -329,7 +331,7 @@ static int br_set(const char *bridge, const char *name,
char buf[32];
char path[SYSFS_PATH_MAX];
- sprintf(buf, "%ld", value);
+ snprintf(buf, sizeof(buf), "%ld\n", value);
snprintf(path, SYSFS_PATH_MAX, "%s/bridge/%s", dev->path, name);
attr = sysfs_open_attribute(path);
@@ -338,7 +340,6 @@ static int br_set(const char *bridge, const char *name,
sysfs_close_attribute(attr);
}
sysfs_close_class_device(dev);
-
} else
#endif
{
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:
diff --git a/libbridge/libbridge_private.h b/libbridge/libbridge_private.h
index fa565e0..8d9ed0c 100644
--- a/libbridge/libbridge_private.h
+++ b/libbridge/libbridge_private.h
@@ -30,7 +30,7 @@
#define MAX_BRIDGES 1024
#define MAX_PORTS 1024
-#define dprintf(fmt,arg...) fprintf(stderr, fmt, ##arg)
+#define dprintf(fmt,arg...)
#ifdef HAVE_LIBSYSFS
#include <sysfs/libsysfs.h>