diff options
author | shemminger <shemminger> | 2006-02-01 17:58:00 +0000 |
---|---|---|
committer | shemminger <shemminger> | 2006-02-01 17:58:00 +0000 |
commit | 0a5a8a838009222e9b2ddbc570a6a001ce5fc603 (patch) | |
tree | 511bf66e423e84c48c6da36ae47f77f98926f3f4 | |
parent | 104fa8f949a48756874ce2a301c6b500ac051466 (diff) | |
download | android_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.c | 39 | ||||
-rw-r--r-- | libbridge/libbridge_init.c | 22 | ||||
-rw-r--r-- | libbridge/libbridge_private.h | 2 |
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> |