user is allowed to rename */
if ((old_dirp->v_mode & S_ISVTX) == S_ISVTX) {
/* Look up inode of file to unlink to retrieve owner */
- resolve.l_flags = PATH_RET_SYMLINK;
- resolve.l_vmp = &vmp2; /* Shouldn't actually get locked */
+ lookup_init(&resolve, resolve.l_path, PATH_RET_SYMLINK, &vmp2, &vp);
resolve.l_vmnt_lock = VMNT_READ;
- resolve.l_vnode = &vp;
resolve.l_vnode_lock = VNODE_READ;
- resolve.l_flags = PATH_RET_SYMLINK;
vp = advance(old_dirp, &resolve, fp);
assert(vmp2 == NULL);
if (vp != NULL) {
if ((dirp = last_dir(&findnode, fp)) == NULL) return(NULL);
/* The final directory is accessible. Get final component of the path. */
- findnode.l_vmp = &vp_vmp;
- findnode.l_vnode = &vp;
+ lookup_init(&findnode, findnode.l_path, findnode.l_flags, &vp_vmp, &vp);
+ findnode.l_vmnt_lock = VMNT_WRITE;
findnode.l_vnode_lock = (oflags & O_TRUNC) ? VNODE_WRITE : VNODE_OPCL;
vp = advance(dirp, &findnode, fp);
assert(vp_vmp == NULL); /* Lookup to last dir should have yielded lock