Xiaochen Wang
2011-Sep-05 14:58 UTC
[Bridge] [PATCH] skip . and .. in accurately in isbridge()
Hi all, In commit f88f8 "Skip . and .. in foreach_bridge test", the code skips all directories starting with dot. But if we create a bridge staring with dot, e.g. `.br0`, then `brctl show` cannot show this one. `.br0` should not be hidden, because we cannot find it except the command `brctl show .br0`. Signed-off-by: Xiaochen Wang <wangxiaochen0 at gmail.com> --- libbridge/libbridge_init.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libbridge/libbridge_init.c b/libbridge/libbridge_init.c index 1c1acbd..177a391 100644 --- a/libbridge/libbridge_init.c +++ b/libbridge/libbridge_init.c @@ -49,9 +49,12 @@ static int isbridge(const struct dirent *entry) char path[SYSFS_PATH_MAX]; struct stat st; - if (entry->d_name[0] == '.') + if (entry->d_name[0] == '.' + && (entry->d_name[1] == '\0' + || (entry->d_name[1] == '.' + && entry->d_name[2] == '\0'))) return 0; - + snprintf(path, SYSFS_PATH_MAX, SYSFS_CLASS_NET "%s/bridge", entry->d_name); return stat(path, &st) == 0 && S_ISDIR(st.st_mode); -- 1.7.2.3
Stephen Hemminger
2011-Sep-05 16:43 UTC
[Bridge] [PATCH] skip . and .. in accurately in isbridge()
On Mon, 5 Sep 2011 22:58:07 +0800 Xiaochen Wang <wangxiaochen0 at gmail.com> wrote:> Hi all, > > In commit f88f8 "Skip . and .. in foreach_bridge test", the code skips > all directories starting with dot. > > But if we create a bridge staring with dot, e.g. `.br0`, then `brctl show` > cannot show this one. > `.br0` should not be hidden, because we cannot find it except the command > `brctl show .br0`. > > Signed-off-by: Xiaochen Wang <wangxiaochen0 at gmail.com> > --- > libbridge/libbridge_init.c | 7 +++++-- > 1 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/libbridge/libbridge_init.c b/libbridge/libbridge_init.c > index 1c1acbd..177a391 100644 > --- a/libbridge/libbridge_init.c > +++ b/libbridge/libbridge_init.c > @@ -49,9 +49,12 @@ static int isbridge(const struct dirent *entry) > char path[SYSFS_PATH_MAX]; > struct stat st; > > - if (entry->d_name[0] == '.') > + if (entry->d_name[0] == '.' > + && (entry->d_name[1] == '\0' > + || (entry->d_name[1] == '.' > + && entry->d_name[2] == '\0'))) > return 0; > - > + > snprintf(path, SYSFS_PATH_MAX, > SYSFS_CLASS_NET "%s/bridge", entry->d_name); > return stat(path, &st) == 0 && S_ISDIR(st.st_mode);This was an accident originally, but allowing hidden bridges might be useful. And is common for other commands to not show names starting with .