SCCS-vsn: sys/kern/vfs_lookup.c 7.12
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)vfs_lookup.c 7.11 (Berkeley) %G%
+ * @(#)vfs_lookup.c 7.12 (Berkeley) %G%
error = ELOOP;
goto bad2;
}
error = ELOOP;
goto bad2;
}
- if (ndp->ni_pathlen == 1)
+ if (ndp->ni_pathlen > 1)
MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
else
cp = ndp->ni_pnbuf;
MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
else
cp = ndp->ni_pnbuf;
auio.uio_segflg = UIO_SYSSPACE;
auio.uio_resid = MAXPATHLEN;
if (error = VOP_READLINK(dp, &auio, ndp->ni_cred)) {
auio.uio_segflg = UIO_SYSSPACE;
auio.uio_resid = MAXPATHLEN;
if (error = VOP_READLINK(dp, &auio, ndp->ni_cred)) {
- if (ndp->ni_pathlen == 1)
+ if (ndp->ni_pathlen > 1)
free(cp, M_NAMEI);
goto bad2;
}
linklen = MAXPATHLEN - auio.uio_resid;
if (linklen + ndp->ni_pathlen >= MAXPATHLEN) {
free(cp, M_NAMEI);
goto bad2;
}
linklen = MAXPATHLEN - auio.uio_resid;
if (linklen + ndp->ni_pathlen >= MAXPATHLEN) {
- if (ndp->ni_pathlen == 1)
+ if (ndp->ni_pathlen > 1)
free(cp, M_NAMEI);
error = ENAMETOOLONG;
goto bad2;
}
free(cp, M_NAMEI);
error = ENAMETOOLONG;
goto bad2;
}
- if (ndp->ni_pathlen == 1) {
+ if (ndp->ni_pathlen > 1) {
+ bcopy(ndp->ni_next, cp + linklen, ndp->ni_pathlen);
FREE(ndp->ni_pnbuf, M_NAMEI);
ndp->ni_pnbuf = cp;
FREE(ndp->ni_pnbuf, M_NAMEI);
ndp->ni_pnbuf = cp;
- ndp->ni_pnbuf[linklen] = '\0';
- bcopy(ndp->ni_next, cp + linklen, ndp->ni_pathlen);
+ ndp->ni_pnbuf[linklen] = '\0';
ndp->ni_ptr = cp;
ndp->ni_pathlen += linklen;
vput(dp);
ndp->ni_ptr = cp;
ndp->ni_pathlen += linklen;
vput(dp);