On Sun, May 20, 2012 at 04:06:00PM +0200, Davidlohr Bueso wrote: > On Sat, 2012-05-19 at 20:39 -0400, Dave Reisner wrote: > > While we're at it, expand this list of known pseudofs types. > > > > Signed-off-by: Dave Reisner <dreisner@xxxxxxxxxxxxx> > > --- > > libmount/src/utils.c | 68 +++++++++++++++++++++++++++++++------------------- > > 1 file changed, 43 insertions(+), 25 deletions(-) > > > > diff --git a/libmount/src/utils.c b/libmount/src/utils.c > > index b824edc..77557f2 100644 > > --- a/libmount/src/utils.c > > +++ b/libmount/src/utils.c > > @@ -72,6 +72,15 @@ int mnt_parse_offset(const char *str, size_t len, uintmax_t *res) > > return rc; > > } > > > > +/* used as a callback by bsearch in mnt_fstype_is_pseudofs() */ > > +static int fstype_cmp(const void *v1, const void *v2) > > +{ > > + const char *s1 = *(const char **)v1; > > + const char *s2 = *(const char **)v2; > > + > > + return strcmp(s1, s2); > > +} > > + > > /* returns basename and keeps dirname in the @path, if @path is "/" (root) > > * then returns empty string */ > > static char *stripoff_last_component(char *path) > > @@ -214,31 +223,40 @@ char *mnt_unmangle(const char *str) > > */ > > int mnt_fstype_is_pseudofs(const char *type) > > { > > - if (!type) > > - return 0; > > - if (strcmp(type, "none") == 0 || > > - strcmp(type, "proc") == 0 || > > - strcmp(type, "tmpfs") == 0 || > > - strcmp(type, "sysfs") == 0 || > > - strcmp(type, "autofs") == 0 || > > - strcmp(type, "devpts") == 0|| > > - strcmp(type, "cgroup") == 0 || > > - strcmp(type, "devtmpfs") == 0 || > > - strcmp(type, "devfs") == 0 || > > - strcmp(type, "dlmfs") == 0 || > > - strcmp(type, "cpuset") == 0 || > > - strcmp(type, "configfs") == 0 || > > - strcmp(type, "securityfs") == 0 || > > - strcmp(type, "hugetlbfs") == 0 || > > - strcmp(type, "rpc_pipefs") == 0 || > > - strcmp(type, "fusectl") == 0 || > > - strcmp(type, "mqueue") == 0 || > > - strcmp(type, "binfmt_misc") == 0 || > > - strcmp(type, "fuse.gvfs-fuse-daemon") == 0 || > > - strcmp(type, "debugfs") == 0 || > > - strcmp(type, "spufs") == 0) > > - return 1; > > - return 0; > > + static const char *pseudofs[] = { > > + "anon_inodefs", > > + "autofs", > > + "bdev", > > + "binfmt_misc", > > + "cgroup", > > + "configfs", > > + "cpuset", > > + "debugfs", > > + "devfs", > > + "devpts", > > + "devtmpfs", > > + "dlmfs", > > + "fuse.gvfs-fuse-daemon", > > + "fusectl", > > + "hugetlbfs", > > + "mqueue", > > + "nfsd", > > + "none", > > + "pipefs", > > + "proc", > > + "pstore", > > + "ramfs", > > + "rootfs", > > + "rpc_pipefs", > > + "securityfs", > > + "sockfs", > > + "spufs", > > + "sysfs", > > + "tmpfs" > > + }; > > + > > What about applying sort (qsort(3)) before searching here? This would > correct any manual string sorting that pseudofs[] imposes to the > developer. > Hmm, so the overhead from this seems to be negligible, but given that this is running as part of a library, wouldn't we need a reentrant version of qsort? qsort_r was added to glibc in 2.8, but I'm not familiar with how portable this would be to other libc's. > > + return !(bsearch(&type, pseudofs, ARRAY_SIZE(pseudofs), > > + sizeof(char*), fstype_cmp) == NULL); > > } > > > > /** > > > -- > To unsubscribe from this list: send the line "unsubscribe util-linux" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html