Lines Matching +full:vref +full:- +full:mv
3 /*-
4 * SPDX-License-Identifier: BSD-4-Clause
36 /*-
92 return (msdosfs_lookup_ino(ap->a_dvp, ap->a_vpp, ap->a_cnp, NULL, in msdosfs_lookup()
112 error = deget(pmp, dd_arg->cluster, dd_arg->blkoff, in msdosfs_deget_dotdot()
158 int flags = cnp->cn_flags; in msdosfs_lookup_ino()
159 int nameiop = cnp->cn_nameiop; in msdosfs_lookup_ino()
164 int chksum = -1, chksum_ok; in msdosfs_lookup_ino()
168 printf("msdosfs_lookup(): looking for %s\n", cnp->cn_nameptr); in msdosfs_lookup_ino()
171 pmp = dp->de_pmp; in msdosfs_lookup_ino()
174 vdp, dp, dp->de_Attributes); in msdosfs_lookup_ino()
185 if ((vdp->v_vflag & VV_ROOT) && cnp->cn_nameptr[0] == '.' && in msdosfs_lookup_ino()
186 (cnp->cn_namelen == 1 || in msdosfs_lookup_ino()
187 (cnp->cn_namelen == 2 && cnp->cn_nameptr[1] == '.'))) { in msdosfs_lookup_ino()
198 switch (unix2dosfn((const u_char *)cnp->cn_nameptr, dosfilename, in msdosfs_lookup_ino()
199 cnp->cn_namelen, 0, pmp)) { in msdosfs_lookup_ino()
207 wincnt = winSlotCnt((const u_char *)cnp->cn_nameptr, in msdosfs_lookup_ino()
208 cnp->cn_namelen, pmp) + 1; in msdosfs_lookup_ino()
212 wincnt = winSlotCnt((const u_char *)cnp->cn_nameptr, in msdosfs_lookup_ino()
213 cnp->cn_namelen, pmp) + 1; in msdosfs_lookup_ino()
216 if (pmp->pm_flags & MSDOSFSMNT_SHORTNAME) { in msdosfs_lookup_ino()
220 unlen = winLenFixup(cnp->cn_nameptr, cnp->cn_namelen); in msdosfs_lookup_ino()
235 dosfilename, cnp->cn_namelen); in msdosfs_lookup_ino()
239 * by cnp->cn_nameptr. in msdosfs_lookup_ino()
258 error = bread(pmp->pm_devvp, bn, blsize, NOCRED, &bp); in msdosfs_lookup_ino()
265 dep = (struct direntry *)(bp->b_data + blkoff); in msdosfs_lookup_ino()
275 if (dep->deName[0] == SLOT_EMPTY || in msdosfs_lookup_ino()
276 dep->deName[0] == SLOT_DELETED) { in msdosfs_lookup_ino()
280 chksum = -1; in msdosfs_lookup_ino()
287 if (dep->deName[0] == SLOT_EMPTY) { in msdosfs_lookup_ino()
302 if (dep->deAttributes == ATTR_WIN95) { in msdosfs_lookup_ino()
303 if (pmp->pm_flags & MSDOSFSMNT_SHORTNAME) in msdosfs_lookup_ino()
313 (const u_char *)cnp->cn_nameptr, unlen, in msdosfs_lookup_ino()
315 if (chksum == -2) { in msdosfs_lookup_ino()
316 chksum = -1; in msdosfs_lookup_ino()
324 if (dep->deAttributes & ATTR_VOLUME) { in msdosfs_lookup_ino()
325 chksum = -1; in msdosfs_lookup_ino()
332 chksum_ok = (chksum == winChksum(dep->deName)); in msdosfs_lookup_ino()
334 && (!olddos || bcmp(dosfilename, dep->deName, 11))) { in msdosfs_lookup_ino()
335 chksum = -1; in msdosfs_lookup_ino()
347 dp->de_fndoffset = diroff; in msdosfs_lookup_ino()
354 dp->de_fndcnt = wincnt - 1; in msdosfs_lookup_ino()
361 dp->de_fndcnt = 0; in msdosfs_lookup_ino()
389 slotoffset += sizeof(struct direntry) * (wincnt - slotcount); in msdosfs_lookup_ino()
398 nameiop, dp->de_refcnt); in msdosfs_lookup_ino()
403 (flags & ISLASTCN) && dp->de_refcnt != 0) { in msdosfs_lookup_ino()
408 error = VOP_ACCESS(vdp, VWRITE, cnp->cn_cred, curthread); in msdosfs_lookup_ino()
415 dp->de_fndoffset = slotoffset; in msdosfs_lookup_ino()
416 dp->de_fndcnt = wincnt - 1; in msdosfs_lookup_ino()
424 * the (locked) directory inode in ndp->ni_dvp. in msdosfs_lookup_ino()
426 * NB - if the directory is unlocked, then this in msdosfs_lookup_ino()
433 * Insert name into cache (as non-existent) if appropriate. in msdosfs_lookup_ino()
440 if ((cnp->cn_flags & MAKEENTRY) != 0) in msdosfs_lookup_ino()
450 isadir = dep->deAttributes & ATTR_DIRECTORY; in msdosfs_lookup_ino()
451 scn = getushort(dep->deStartCluster); in msdosfs_lookup_ino()
453 scn |= getushort(dep->deHighClust) << 16; in msdosfs_lookup_ino()
454 if (scn == pmp->pm_rootdirblk) { in msdosfs_lookup_ino()
487 scn = pmp->pm_rootdirblk; in msdosfs_lookup_ino()
509 error = VOP_ACCESS(vdp, VWRITE, cnp->cn_cred, curthread); in msdosfs_lookup_ino()
514 * Return pointer to current entry in dp->i_offset. in msdosfs_lookup_ino()
515 * Save directory inode pointer in ndp->ni_dvp for dirremove(). in msdosfs_lookup_ino()
517 if (dp->de_StartCluster == scn && isadir) { /* "." */ in msdosfs_lookup_ino()
518 VREF(vdp); in msdosfs_lookup_ino()
538 error = VOP_ACCESS(vdp, VWRITE, cnp->cn_cred, curthread); in msdosfs_lookup_ino()
546 if (dp->de_StartCluster == scn && isadir) in msdosfs_lookup_ino()
574 &dd_arg, cnp->cn_lkflags, vpp); in msdosfs_lookup_ino()
590 scn = pmp->pm_rootdirblk; in msdosfs_lookup_ino()
592 if (VTODE(*vpp)->de_inode != inode1) { in msdosfs_lookup_ino()
599 } else if (dp->de_StartCluster == scn && isadir) { in msdosfs_lookup_ino()
600 if (cnp->cn_namelen != 1 || cnp->cn_nameptr[0] != '.') { in msdosfs_lookup_ino()
601 /* fs is corrupted, non-dot lookup returned dvp */ in msdosfs_lookup_ino()
605 VREF(vdp); /* we want ourself, ie "." */ in msdosfs_lookup_ino()
618 if (cnp->cn_flags & MAKEENTRY) in msdosfs_lookup_ino()
624 * dep - directory entry to copy into the directory
625 * ddep - directory to add to
626 * depp - return the address of the denode for the created directory entry
628 * cnp - componentname needed for Win95 long filenames
637 struct msdosfsmount *pmp = ddep->de_pmp; in createde()
655 if (ddep->de_fndoffset >= ddep->de_FileSize) { in createde()
656 diroffset = ddep->de_fndoffset + sizeof(struct direntry) in createde()
657 - ddep->de_FileSize; in createde()
661 (void)detrunc(ddep, ddep->de_FileSize, 0, NOCRED); in createde()
668 ddep->de_FileSize += de_cn2off(pmp, dirclust); in createde()
676 error = pcbmap(ddep, de_cluster(pmp, ddep->de_fndoffset), in createde()
680 diroffset = ddep->de_fndoffset; in createde()
682 diroffset &= pmp->pm_crbomask; in createde()
683 if ((error = bread(pmp->pm_devvp, bn, blsize, NOCRED, &bp)) != 0) { in createde()
687 ndep = bptoep(pmp, bp, ddep->de_fndoffset); in createde()
695 if (ddep->de_fndcnt > 0) { in createde()
696 uint8_t chksum = winChksum(ndep->deName); in createde()
697 const u_char *un = (const u_char *)cnp->cn_nameptr; in createde()
698 int unlen = cnp->cn_namelen; in createde()
701 while (--ddep->de_fndcnt >= 0) { in createde()
702 if (!(ddep->de_fndoffset & pmp->pm_crbomask)) { in createde()
708 ddep->de_fndoffset -= sizeof(struct direntry); in createde()
711 ddep->de_fndoffset), in createde()
716 error = bread(pmp->pm_devvp, bn, blsize, in createde()
721 ndep = bptoep(pmp, bp, ddep->de_fndoffset); in createde()
723 ndep--; in createde()
724 ddep->de_fndoffset -= sizeof(struct direntry); in createde()
742 if (dep->de_Attributes & ATTR_DIRECTORY) { in createde()
743 dirclust = dep->de_StartCluster; in createde()
744 if (FAT32(pmp) && dirclust == pmp->pm_rootdirblk) in createde()
769 struct msdosfsmount *pmp = dep->de_pmp; in dosdirempty()
783 error = bread(pmp->pm_devvp, bn, blsize, NOCRED, &bp); in dosdirempty()
787 for (dentp = (struct direntry *)bp->b_data; in dosdirempty()
788 (char *)dentp < bp->b_data + blsize; in dosdirempty()
790 if (dentp->deName[0] != SLOT_DELETED && in dosdirempty()
791 (dentp->deAttributes & ATTR_VOLUME) == 0) { in dosdirempty()
799 if (dentp->deName[0] == SLOT_EMPTY) { in dosdirempty()
807 if (bcmp(dentp->deName, ". ", 11) && in dosdirempty()
808 bcmp(dentp->deName, ".. ", 11)) { in dosdirempty()
812 dentp->deName[0], dentp->deName[1]); in dosdirempty()
826 * succeeding and leaving a bunch or files and directories orphaned. mv
829 * source - the inode for /a/b/c
830 * target - the inode for /a/b/c/d/e/f
833 * Otherwise returns a non-zero error number.
847 pmp = target->de_pmp; in doscheckpath()
848 lockmgr_assert(&pmp->pm_checkpath_lock, KA_XLOCKED); in doscheckpath()
849 KASSERT(pmp == source->de_pmp, in doscheckpath()
852 if ((target->de_Attributes & ATTR_DIRECTORY) == 0 || in doscheckpath()
853 (source->de_Attributes & ATTR_DIRECTORY) == 0) in doscheckpath()
856 if (target->de_StartCluster == source->de_StartCluster) in doscheckpath()
859 if (target->de_StartCluster == MSDOSFSROOT || in doscheckpath()
860 (FAT32(pmp) && target->de_StartCluster == pmp->pm_rootdirblk)) in doscheckpath()
866 if ((dep->de_Attributes & ATTR_DIRECTORY) == 0) { in doscheckpath()
870 scn = dep->de_StartCluster; in doscheckpath()
871 error = bread(pmp->pm_devvp, cntobn(pmp, scn), in doscheckpath()
872 pmp->pm_bpcluster, NOCRED, &bp); in doscheckpath()
876 ep = (struct direntry *)bp->b_data + 1; in doscheckpath()
877 if ((ep->deAttributes & ATTR_DIRECTORY) == 0 || in doscheckpath()
878 bcmp(ep->deName, ".. ", 11) != 0) { in doscheckpath()
884 scn = getushort(ep->deStartCluster); in doscheckpath()
886 scn |= getushort(ep->deHighClust) << 16; in doscheckpath()
889 if (scn == source->de_StartCluster) { in doscheckpath()
895 if (FAT32(pmp) && scn == pmp->pm_rootdirblk) { in doscheckpath()
934 blsize = pmp->pm_bpcluster; in readep()
936 && de_blk(pmp, diroffset + blsize) > pmp->pm_rootdirsize) in readep()
937 blsize = de_bn2off(pmp, pmp->pm_rootdirsize) & pmp->pm_crbomask; in readep()
939 if ((error = bread(pmp->pm_devvp, bn, blsize, NOCRED, bpp)) != 0) { in readep()
958 return (readep(dep->de_pmp, dep->de_dirclust, dep->de_diroffset, in readde()
981 struct msdosfsmount *pmp = pdep->de_pmp; in removede()
982 u_long offset = pdep->de_fndoffset; in removede()
986 dep->de_Name, dep, offset); in removede()
989 dep->de_refcnt--; in removede()
992 offset -= sizeof(struct direntry); in removede()
996 error = bread(pmp->pm_devvp, bn, blsize, NOCRED, &bp); in removede()
1006 if (ep->deAttributes != ATTR_WIN95 in removede()
1007 && offset != pdep->de_fndoffset) { in removede()
1019 offset -= sizeof(struct direntry); in removede()
1020 ep--->deName[0] = SLOT_DELETED; in removede()
1022 if ((pmp->pm_flags & MSDOSFSMNT_NOWIN95) in removede()
1023 || !(offset & pmp->pm_crbomask) in removede()
1024 || ep->deAttributes != ATTR_WIN95) in removede()
1031 } while (!(pmp->pm_flags & MSDOSFSMNT_NOWIN95) in removede()
1032 && !(offset & pmp->pm_crbomask) in removede()
1043 struct msdosfsmount *pmp = dep->de_pmp; in uniqdosname()
1052 if (pmp->pm_flags & MSDOSFSMNT_SHORTNAME) in uniqdosname()
1053 return (unix2dosfn((const u_char *)cnp->cn_nameptr, cp, in uniqdosname()
1054 cnp->cn_namelen, 0, pmp) ? 0 : EINVAL); in uniqdosname()
1060 if (!unix2dosfn((const u_char *)cnp->cn_nameptr, cp, in uniqdosname()
1061 cnp->cn_namelen, gen, pmp)) in uniqdosname()
1073 error = bread(pmp->pm_devvp, bn, blsize, NOCRED, &bp); in uniqdosname()
1077 for (dentp = (struct direntry *)bp->b_data; in uniqdosname()
1078 (char *)dentp < bp->b_data + blsize; in uniqdosname()
1080 if (dentp->deName[0] == SLOT_EMPTY) { in uniqdosname()
1090 if (dentp->deAttributes & ATTR_VOLUME) in uniqdosname()
1092 if (!bcmp(dentp->deName, cp, 11)) { in uniqdosname()