Changeset View
Changeset View
Standalone View
Standalone View
sys/ufs/ufs/ufs_lookup.c
Show First 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
#ifdef DIAGNOSTIC | #ifdef DIAGNOSTIC | ||||
static int dirchk = 1; | static int dirchk = 1; | ||||
#else | #else | ||||
static int dirchk = 0; | static int dirchk = 0; | ||||
#endif | #endif | ||||
SYSCTL_INT(_debug, OID_AUTO, dircheck, CTLFLAG_RW, &dirchk, 0, ""); | SYSCTL_INT(_debug, OID_AUTO, dircheck, CTLFLAG_RW, &dirchk, 0, ""); | ||||
/* true if old FS format...*/ | |||||
#define OFSFMT(vp) ((vp)->v_mount->mnt_maxsymlinklen <= 0) | |||||
static int | static int | ||||
ufs_delete_denied(struct vnode *vdp, struct vnode *tdp, struct ucred *cred, | ufs_delete_denied(struct vnode *vdp, struct vnode *tdp, struct ucred *cred, | ||||
struct thread *td) | struct thread *td) | ||||
{ | { | ||||
int error; | int error; | ||||
#ifdef UFS_ACL | #ifdef UFS_ACL | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 345 Lines • ▼ Show 20 Lines | |||||
#ifdef UFS_DIRHASH | #ifdef UFS_DIRHASH | ||||
foundentry: | foundentry: | ||||
#endif | #endif | ||||
/* | /* | ||||
* Save directory entry's inode number and | * Save directory entry's inode number and | ||||
* reclen in ndp->ni_ufs area, and release | * reclen in ndp->ni_ufs area, and release | ||||
* directory buffer. | * directory buffer. | ||||
*/ | */ | ||||
if (vdp->v_mount->mnt_maxsymlinklen > 0 && | if (!OFSFMT(vdp) && ep->d_type == DT_WHT) { | ||||
ep->d_type == DT_WHT) { | |||||
slotstatus = FOUND; | slotstatus = FOUND; | ||||
slotoffset = i_offset; | slotoffset = i_offset; | ||||
slotsize = ep->d_reclen; | slotsize = ep->d_reclen; | ||||
enduseful = dp->i_size; | enduseful = dp->i_size; | ||||
cnp->cn_flags |= ISWHITEOUT; | cnp->cn_flags |= ISWHITEOUT; | ||||
numdirpasses--; | numdirpasses--; | ||||
goto notfound; | goto notfound; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 396 Lines • ▼ Show 20 Lines | ufs_makedirentry(ip, cnp, newdirp) | ||||
newdirp->d_ino = ip->i_number; | newdirp->d_ino = ip->i_number; | ||||
newdirp->d_namlen = namelen; | newdirp->d_namlen = namelen; | ||||
/* Zero out after-name padding */ | /* Zero out after-name padding */ | ||||
*(u_int32_t *)(&newdirp->d_name[namelen & ~(DIR_ROUNDUP - 1)]) = 0; | *(u_int32_t *)(&newdirp->d_name[namelen & ~(DIR_ROUNDUP - 1)]) = 0; | ||||
bcopy(cnp->cn_nameptr, newdirp->d_name, namelen); | bcopy(cnp->cn_nameptr, newdirp->d_name, namelen); | ||||
if (ITOV(ip)->v_mount->mnt_maxsymlinklen > 0) | if (!OFSFMT(ITOV(ip))) | ||||
newdirp->d_type = IFTODT(ip->i_mode); | newdirp->d_type = IFTODT(ip->i_mode); | ||||
else { | else { | ||||
newdirp->d_type = 0; | newdirp->d_type = 0; | ||||
# if (BYTE_ORDER == LITTLE_ENDIAN) | # if (BYTE_ORDER == LITTLE_ENDIAN) | ||||
{ u_char tmp = newdirp->d_namlen; | { u_char tmp = newdirp->d_namlen; | ||||
newdirp->d_namlen = newdirp->d_type; | newdirp->d_namlen = newdirp->d_type; | ||||
newdirp->d_type = tmp; } | newdirp->d_type = tmp; } | ||||
# endif | # endif | ||||
▲ Show 20 Lines • Show All 744 Lines • Show Last 20 Lines |