On 5/31/19 12:02 PM, J. Bruce Fields wrote: > On Tue, May 28, 2019 at 04:31:19PM -0400, Trond Myklebust wrote: >> @@ -373,21 +390,22 @@ static char *next_mnt(void **v, char *p) >> FILE *f; >> struct mntent *me; >> size_t l = strlen(p); >> + char *mnt_dir = NULL; >> + >> if (*v == NULL) { >> f = setmntent("/etc/mtab", "r"); >> *v = f; >> } else >> f = *v; >> - while ((me = getmntent(f)) != NULL && l > 1 && >> - (strncmp(me->mnt_dir, p, l) != 0 || >> - me->mnt_dir[l] != '/')) >> - ; >> - if (me == NULL) { >> - endmntent(f); >> - *v = NULL; >> - return NULL; >> + while ((me = getmntent(f)) != NULL && l > 1) { >> + mnt_dir = nfsd_path_strip_root(me->mnt_dir); >> + >> + if (strncmp(mnt_dir, p, l) == 0 && mnt_dir[l] != '/') >> + return mnt_dir; > > That should be "mnt_dir[l] == '/'", right? Comment says /* Iterate through /etc/mtab, finding mountpoints * at or below a given path */ So I don't think the actual '/' should returned, Trond? steved. > > --b. > >> } >> - return me->mnt_dir; >> + endmntent(f); >> + *v = NULL; >> + return NULL; >> } >> >> /* same_path() check is two paths refer to the same directory.