Lines Matching defs:hfsmp

80 	struct hfsmount *hfsmp;
95 static int cat_lookupbykey(struct hfsmount *hfsmp, CatalogKey *keyp, int flags, u_int32_t hint, int wantrsrc,
98 int cat_lookupmangled(struct hfsmount *hfsmp, struct cat_desc *descp, int wantrsrc,
106 static int resolvelinkid(struct hfsmount *hfsmp, u_int32_t linkref, ino_t *ino);
108 static int getkey(struct hfsmount *hfsmp, cnid_t cnid, CatalogKey * key);
110 static int buildkey(struct hfsmount *hfsmp, struct cat_desc *descp,
122 static void getbsdattr(struct hfsmount *hfsmp, const struct HFSPlusCatalogFile *crp, struct cat_attr * attrp);
124 static void promotekey(struct hfsmount *hfsmp, const HFSCatalogKey *hfskey, HFSPlusCatalogKey *keyp, u_int32_t *encoding);
125 static void promotefork(struct hfsmount *hfsmp, const struct HFSCatalogFile *file, int resource, struct cat_fork * forkp);
126 static void promoteattr(struct hfsmount *hfsmp, const CatalogRecord *dataPtr, struct HFSPlusCatalogFile *crp);
136 static int cat_makealias(struct hfsmount *hfsmp, u_int32_t inode_num, struct HFSPlusCatalogFile *crp);
138 static int cat_update_internal(struct hfsmount *hfsmp, int update_hardlink, struct cat_desc *descp, struct cat_attr *attrp,
142 cat_preflight(struct hfsmount *hfsmp, catops_t ops, cat_cookie_t *cookie, __unused proc_t p)
147 if (hfsmp->hfs_catalog_cp->c_lockowner != current_thread())
148 lockflags = hfs_systemfile_lock(hfsmp, SFL_CATALOG, HFS_EXCLUSIVE_LOCK);
150 result = BTReserveSpace(hfsmp->hfs_catalog_cp->c_datafork, ops, (void*)cookie);
153 hfs_systemfile_unlock(hfsmp, lockflags);
159 cat_postflight(struct hfsmount *hfsmp, cat_cookie_t *cookie, __unused proc_t p)
163 if (hfsmp->hfs_catalog_cp->c_lockowner != current_thread())
164 lockflags = hfs_systemfile_lock(hfsmp, SFL_CATALOG, HFS_EXCLUSIVE_LOCK);
166 (void) BTReleaseReserve(hfsmp->hfs_catalog_cp->c_datafork, (void*)cookie);
169 hfs_systemfile_unlock(hfsmp, lockflags);
175 struct hfsmount *hfsmp,
181 int std_hfs = HFSTOVCB(hfsmp)->vcbSigWord == kHFSSigWord;
186 promoteattr(hfsmp, recp, &cnoderec);
187 getbsdattr(hfsmp, &cnoderec, attrp);
189 getbsdattr(hfsmp, (struct HFSPlusCatalogFile *)recp, attrp);
195 promotefork(hfsmp, (HFSCatalogFile *)&recp->hfsFile, 0, datafp);
196 promotefork(hfsmp, (HFSCatalogFile *)&recp->hfsFile, 1, rsrcfp);
202 if ((hfsmp->hfc_stage == HFC_RECORDING) &&
203 (attrp->ca_atime >= hfsmp->hfc_timebase)) {
206 HFSTOVCB(hfsmp)->blockSize;
218 if ((hfsmp->hfc_stage == HFC_RECORDING) &&
219 (attrp->ca_atime >= hfsmp->hfc_timebase)) {
222 HFSTOVCB(hfsmp)->blockSize;
240 struct hfsmount *hfsmp,
245 int std_hfs = HFSTOVCB(hfsmp)->vcbSigWord == kHFSSigWord;
251 promotekey(hfsmp, (HFSCatalogKey *)key, pluskey, &encoding);
302 cat_lookup(struct hfsmount *hfsmp, struct cat_desc *descp, int wantrsrc,
310 std_hfs = (HFSTOVCB(hfsmp)->vcbSigWord == kHFSSigWord);
314 result = buildkey(hfsmp, descp, (HFSPlusCatalogKey *)keyp, 1);
318 result = cat_lookupbykey(hfsmp, keyp, 0, descp->cd_hint, wantrsrc, outdescp, attrp, forkp, desc_cnid);
327 result = cat_lookupmangled(hfsmp, descp, wantrsrc, outdescp, attrp, forkp);
335 } else if (hfsmp->hfs_encoding != kTextEncodingMacRoman) {
337 // result = cat_lookupbykey(hfsmp, keyp, descp->cd_hint, attrp, forkp);
348 cat_insertfilethread(struct hfsmount *hfsmp, struct cat_desc *descp)
357 if (HFSTOVCB(hfsmp)->vcbSigWord != kHFSSigWord)
360 fcb = GetFileControlBlock(HFSTOVCB(hfsmp)->catalogRefNum);
364 result = buildkey(hfsmp, descp, (HFSPlusCatalogKey *)&iterator[0].key, 0);
412 cat_findname(struct hfsmount *hfsmp, cnid_t cnid, struct cat_desc *outdescp)
423 std_hfs = (hfsmp->hfs_flags & HFS_STANDARD);
432 result = BTSearchRecord(VTOF(hfsmp->hfs_catalog_vp), iterator, &btdata, NULL, NULL);
463 promotekey(hfsmp, &keyp->hfs, pluskey, &encoding);
484 cat_idlookup(struct hfsmount *hfsmp, cnid_t cnid, int allow_system_files, int wantrsrc,
495 std_hfs = (HFSTOVCB(hfsmp)->vcbSigWord == kHFSSigWord);
504 result = BTSearchRecord(VTOF(HFSTOVCB(hfsmp)->catalogRefNum), iterator,
543 result = cat_lookupbykey(hfsmp, keyp,
572 cat_lookupmangled(struct hfsmount *hfsmp, struct cat_desc *descp, int wantrsrc,
590 if (fileID == hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid ||
591 fileID == hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid ||
592 fileID == hfsmp->hfs_jnlfileid ||
593 fileID == hfsmp->hfs_jnlinfoblkid) {
597 result = cat_idlookup(hfsmp, fileID, 0,0, outdescp, attrp, forkp);
637 cat_lookupbykey(struct hfsmount *hfsmp, CatalogKey *keyp, int flags, u_int32_t hint, int wantrsrc,
651 std_hfs = (HFSTOVCB(hfsmp)->vcbSigWord == kHFSSigWord);
660 result = BTSearchRecord(VTOF(HFSTOVCB(hfsmp)->catalogRefNum), iterator,
675 if ((hfsmp->jnl || ((HFSTOVCB(hfsmp)->vcbAtrb & kHFSVolumeJournaledMask) && (hfsmp->hfs_flags & HFS_READ_ONLY))) &&
676 ((cnid == hfsmp->hfs_jnlfileid) || (cnid == hfsmp->hfs_jnlinfoblkid)) &&
690 && ((to_bsd_time(recp->hfsPlusFile.createDate) == (time_t)hfsmp->hfs_itime) ||
691 (to_bsd_time(recp->hfsPlusFile.createDate) == (time_t)hfsmp->hfs_metadata_createdate))) {
705 (void) cat_resolvelink(hfsmp, ilink, isdirlink, (struct HFSPlusCatalogFile *)recp);
713 promoteattr(hfsmp, recp, &cnoderec);
714 getbsdattr(hfsmp, &cnoderec, attrp);
716 getbsdattr(hfsmp, (struct HFSPlusCatalogFile *)recp, attrp);
737 printf ("hfs: set hardlink bit on vol=%s cnid=%u inoid=%u\n", hfsmp->vcbVN, cnid, ilink);
745 if ((parentid != hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid) &&
746 (parentid != hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid)) {
749 printf ("hfs: clear hardlink bit on vol=%s cnid=%u\n", hfsmp->vcbVN, cnid);
754 printf ("hfs: set linkcount=1 on vol=%s cnid=%u old=%u\n", hfsmp->vcbVN, cnid, attrp->ca_linkcount);
765 promotefork(hfsmp, (HFSCatalogFile *)&recp->hfsFile, wantrsrc, forkp);
771 if ((hfsmp->hfc_stage == HFC_RECORDING) &&
772 (to_bsd_time(recp->hfsPlusFile.accessDate) >= hfsmp->hfc_timebase)) {
775 HFSTOVCB(hfsmp)->blockSize;
790 if ((hfsmp->hfc_stage == HFC_RECORDING) &&
791 (to_bsd_time(recp->hfsPlusFile.accessDate) >= hfsmp->hfc_timebase)) {
794 HFSTOVCB(hfsmp)->blockSize;
805 if (forkp->cf_extents[i].startBlock + forkp->cf_extents[i].blockCount >= hfsmp->totalBlocks) {
835 (void) hfs_mark_volume_inconsistent (hfsmp);
841 psize = (off_t)validblks * (off_t)hfsmp->blockSize;
854 promotekey(hfsmp, (HFSCatalogKey *)&iterator->key, pluskey, &encoding);
886 cat_create(struct hfsmount *hfsmp, struct cat_desc *descp, struct cat_attr *attrp,
901 fcb = hfsmp->hfs_catalog_cp->c_datafork;
902 std_hfs = (hfsmp->hfs_flags & HFS_STANDARD);
907 nextCNID = hfsmp->vcbNxtCNID;
912 HFS_MOUNT_LOCK(hfsmp, TRUE)
913 hfsmp->vcbNxtCNID = kHFSFirstUserCatalogNodeID;
914 hfsmp->vcbAtrb |= kHFSCatalogNodeIDsReusedMask;
915 HFS_MOUNT_UNLOCK(hfsmp, TRUE);
918 hfsmp->vcbNxtCNID++;
920 MarkVCBDirty(hfsmp);
926 result = buildkey(hfsmp, descp, &bto->key, 0);
933 hfs_setencodingbits(hfsmp, encoding);
948 result = file_attribute_exist(hfsmp, nextCNID);
965 if (!std_hfs && (hfsmp->vcbAtrb & kHFSCatalogNodeIDsReusedMask)) {
966 if (hfs_chash_snoop (hfsmp, nextCNID, 1, NULL, NULL) == 0) {
976 if ((result == btExists) && !std_hfs && (hfsmp->vcbAtrb & kHFSCatalogNodeIDsReusedMask)) {
994 if ((hfsmp->vcbAtrb & kHFSCatalogNodeIDsReusedMask)) {
995 hfsmp->vcbNxtCNID = nextCNID + 1;
996 if (hfsmp->vcbNxtCNID < kHFSFirstUserCatalogNodeID) {
997 hfsmp->vcbNxtCNID = kHFSFirstUserCatalogNodeID;
1023 printf ("hfs: cat_create() failed to delete thread record on volume %s\n", hfsmp->vcbVN);
1024 hfs_mark_volume_inconsistent(hfsmp);
1038 promotekey(hfsmp, (HFSCatalogKey *)&bto->iterator.key, pluskey, &encoding);
1076 struct hfsmount * hfsmp,
1098 vcb = HFSTOVCB(hfsmp);
1107 if ((result = buildkey(hfsmp, from_cdp, (HFSPlusCatalogKey *)&from_iterator->key, 0)))
1112 if ((result = buildkey(hfsmp, to_cdp, (HFSPlusCatalogKey *)&to_iterator->key, 0)))
1176 result = cat_lookupmangled(hfsmp, from_cdp, 0, &temp_desc, NULL, NULL);
1182 result = buildkey(hfsmp, &temp_desc, (HFSPlusCatalogKey *)&from_iterator->key, 0);
1213 todir_cdp->cd_parentcnid != hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid &&
1214 todir_cdp->cd_parentcnid != hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid) {
1216 hfs_setencodingbits(hfsmp, encoding);
1272 hfs_mark_volume_inconsistent(hfsmp);
1299 hfs_mark_volume_inconsistent(hfsmp);
1342 promotekey(hfsmp, (HFSCatalogKey *)&to_iterator->key, pluskey, &encoding);
1382 cat_delete(struct hfsmount *hfsmp, struct cat_desc *descp, struct cat_attr *attrp)
1390 fcb = hfsmp->hfs_catalog_cp->c_datafork;
1391 std_hfs = (hfsmp->hfs_flags & HFS_STANDARD);
1414 result = getkey(hfsmp, attrp->ca_fileid, (CatalogKey *)&iterator->key);
1417 result = buildkey(hfsmp, descp, (HFSPlusCatalogKey *)&iterator->key, 0);
1432 result = cat_lookupmangled(hfsmp, descp, 0, &temp_desc, attrp, NULL);
1438 result = buildkey(hfsmp, &temp_desc, (HFSPlusCatalogKey *)&iterator->key, 0);
1458 printf ("hfs: cat_delete() failed to delete thread record on volume %s\n", hfsmp->vcbVN);
1459 hfs_mark_volume_inconsistent(hfsmp);
1477 cat_update_internal(struct hfsmount *hfsmp, int update_hardlink, struct cat_desc *descp, struct cat_attr *attrp,
1486 fcb = hfsmp->hfs_catalog_cp->c_datafork;
1487 std_hfs = (hfsmp->hfs_flags & HFS_STANDARD);
1493 state.s_hfsmp = hfsmp;
1510 result = getkey(hfsmp, attrp->ca_fileid, (CatalogKey *)&iterator->key);
1512 result = buildkey(hfsmp, descp, (HFSPlusCatalogKey *)&iterator->key, 0);
1539 cat_update(struct hfsmount *hfsmp, struct cat_desc *descp, struct cat_attr *attrp,
1542 return cat_update_internal(hfsmp, false, descp, attrp, dataforkp, rsrcforkp);
1555 struct hfsmount *hfsmp;
1561 hfsmp = state->s_hfsmp;
1562 blksize = HFSTOVCB(hfsmp)->blockSize;
1642 if (ckp->hfsPlus.parentID != hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid) {
1670 (attrp->ca_uid != hfsmp->hfs_uid) ||
1671 (attrp->ca_gid != hfsmp->hfs_gid) ||
1673 (hfsmp->hfs_dir_mask & ACCESSPERMS))) {
1675 (((unsigned int)vfs_flags(HFSTOVFS(hfsmp))) & MNT_UNKNOWNPERMISSIONS) == 0) {
1708 if (ckp->hfsPlus.parentID == hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid) {
1746 (attrp->ca_uid != hfsmp->hfs_uid) ||
1747 (attrp->ca_gid != hfsmp->hfs_gid) ||
1749 (hfsmp->hfs_file_mask & ACCESSPERMS)))) {
1751 (((unsigned int)vfs_flags(HFSTOVFS(hfsmp))) & MNT_UNKNOWNPERMISSIONS) == 0) {
1825 cat_set_childlinkbit(struct hfsmount *hfsmp, cnid_t cnid)
1833 (cnid != hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid)) {
1837 retval = hfs_chash_set_childlinkbit(hfsmp, cnid);
1846 retval = hfs_start_transaction(hfsmp);
1850 lockflags = hfs_systemfile_lock(hfsmp, SFL_CATALOG, HFS_EXCLUSIVE_LOCK);
1853 retval = cat_idlookup(hfsmp, cnid, 0, 0, &desc, &attr, NULL);
1855 hfs_systemfile_unlock(hfsmp, lockflags);
1856 hfs_end_transaction(hfsmp);
1862 retval = cat_update(hfsmp, &desc, &attr, NULL, NULL);
1864 hfs_systemfile_unlock(hfsmp, lockflags);
1865 hfs_end_transaction(hfsmp);
1870 hfs_systemfile_unlock(hfsmp, lockflags);
1871 hfs_end_transaction(hfsmp);
1890 cat_check_link_ancestry(struct hfsmount *hfsmp, cnid_t cnid, cnid_t pointed_at_cnid)
1904 fcb = hfsmp->hfs_catalog_cp->c_datafork;
1912 if ((result = getkey(hfsmp, cnid, (CatalogKey *)keyp))) {
1972 cat_update_siblinglinks(struct hfsmount *hfsmp, cnid_t linkfileid, cnid_t prevlinkid, cnid_t nextlinkid)
1979 fcb = hfsmp->hfs_catalog_cp->c_datafork;
1988 result = getkey(hfsmp, linkfileid, (CatalogKey *)&iterator->key);
2004 cat_lookuplink(struct hfsmount *hfsmp, struct cat_desc *descp, cnid_t *linkfileid, cnid_t *prevlinkid, cnid_t *nextlinkid)
2012 fcb = hfsmp->hfs_catalog_cp->c_datafork;
2018 if ((result = buildkey(hfsmp, descp, (HFSPlusCatalogKey *)&iterator->key, 0))) {
2049 cat_lookup_siblinglinks(struct hfsmount *hfsmp, cnid_t linkfileid, cnid_t *prevlinkid, cnid_t *nextlinkid)
2057 fcb = hfsmp->hfs_catalog_cp->c_datafork;
2063 if ((result = getkey(hfsmp, linkfileid, (CatalogKey *)&iterator->key))) {
2078 if (parent == hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid) {
2080 } else if (parent == hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid) {
2109 cat_createlink(struct hfsmount *hfsmp, struct cat_desc *descp, struct cat_attr *attrp,
2124 std_hfs = (hfsmp->hfs_flags & HFS_STANDARD);
2126 fcb = hfsmp->hfs_catalog_cp->c_datafork;
2131 nextCNID = hfsmp->vcbNxtCNID;
2133 HFS_MOUNT_LOCK(hfsmp, TRUE)
2134 hfsmp->vcbNxtCNID = kHFSFirstUserCatalogNodeID;
2135 hfsmp->vcbAtrb |= kHFSCatalogNodeIDsReusedMask;
2136 HFS_MOUNT_UNLOCK(hfsmp, TRUE);
2138 hfsmp->vcbNxtCNID++;
2140 MarkVCBDirty(hfsmp);
2147 result = buildkey(hfsmp, descp, &bto->key, 0);
2170 if (!std_hfs && (hfsmp->vcbAtrb & kHFSCatalogNodeIDsReusedMask)) {
2172 if (hfs_chash_snoop (hfsmp, nextCNID, 1, NULL, NULL) == 0) {
2182 if ((result == btExists) && (hfsmp->vcbAtrb & kHFSCatalogNodeIDsReusedMask)) {
2203 if ((hfsmp->vcbAtrb & kHFSCatalogNodeIDsReusedMask)) {
2204 hfsmp->vcbNxtCNID = nextCNID + 1;
2205 if (hfsmp->vcbNxtCNID < kHFSFirstUserCatalogNodeID) {
2206 hfsmp->vcbNxtCNID = kHFSFirstUserCatalogNodeID;
2221 if ((result = cat_makealias(hfsmp, attrp->ca_linkref, &bto->data.hfsPlusFile))) {
2248 printf("hfs: cat_createlink() failed to delete thread record on volume %s\n", hfsmp->vcbVN);
2249 hfs_mark_volume_inconsistent(hfsmp);
2253 (void) BlockDeallocate(hfsmp, rsrcforkp->extents[0].startBlock,
2333 cat_makealias(struct hfsmount *hfsmp, u_int32_t inode_num, struct HFSPlusCatalogFile *crp)
2347 blksize = hfsmp->blockSize;
2349 sectorsize = hfsmp->hfs_logical_block_size;
2353 result = BlockAllocate(hfsmp, 0, blkcount, blkcount,
2364 blkno += hfsmp->hfsPlusIOPosOffset / sectorsize;
2366 bp = buf_getblk(hfsmp->hfs_devvp, blkno, roundup(kHFSAliasSize, hfsmp->hfs_logical_block_size), 0, 0, BLK_META);
2367 if (hfsmp->jnl) {
2368 journal_modify_block_start(hfsmp->jnl, bp);
2378 *valptr = OSSwapHostToBigInt32(hfsmp->localCreateDate);
2383 if (hfsmp->hfs_flags & HFS_VIRTUAL_DEVICE) {
2390 *valptr = OSSwapHostToBigInt32(hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid);
2397 if (hfsmp->jnl) {
2398 journal_modify_block_end(hfsmp->jnl, bp, NULL, NULL);
2409 (void) BlockDeallocate(hfsmp, rsrcforkp->extents[0].startBlock, rsrcforkp->extents[0].blockCount, 0);
2422 cat_deletelink(struct hfsmount *hfsmp, struct cat_desc *descp)
2440 fcb = hfsmp->hfs_catalog_cp->c_datafork;
2446 if ((result = buildkey(hfsmp, descp, (HFSPlusCatalogKey *)&iterator->key, 0))) {
2456 result = cat_delete(hfsmp, descp, &cattr);
2470 (void) BlockDeallocate(hfsmp,
2489 struct hfsmount *hfsmp;
2501 struct hfsmount *hfsmp = state->hfsmp;
2528 if (rec->hfsPlusFolder.folderID == hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid ||
2529 rec->hfsPlusFolder.folderID == hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid) {
2534 if ((hfsmp->jnl || ((HFSTOVCB(hfsmp)->vcbAtrb & kHFSVolumeJournaledMask) && (hfsmp->hfs_flags & HFS_READ_ONLY))) &&
2536 ((rec->hfsPlusFile.fileID == hfsmp->hfs_jnlfileid) ||
2537 (rec->hfsPlusFile.fileID == hfsmp->hfs_jnlinfoblkid))) {
2550 promoteattr(hfsmp, rec, &cnoderec);
2551 getbsdattr(hfsmp, &cnoderec, &cep->ce_attr);
2554 promotekey(hfsmp, (const HFSCatalogKey *)key, pluskey, &encoding);
2559 int blksize = HFSTOVCB(hfsmp)->blockSize;
2567 getbsdattr(hfsmp, (const struct HFSPlusCatalogFile *)rec, &cep->ce_attr);
2598 cat_getentriesattr(struct hfsmount *hfsmp, directoryhint_t *dirhint, struct cat_entrylist *ce_list)
2613 fcb = GetFileControlBlock(HFSTOVCB(hfsmp)->catalogRefNum);
2614 std_hfs = (HFSTOVCB(hfsmp)->vcbSigWord == kHFSSigWord);
2617 state.hfsmp = hfsmp;
2634 if (buildkey(hfsmp, &dirhint->dh_desc, (HFSPlusCatalogKey *)key, 0) == 0) {
2647 buildthreadkey(dirhint->dh_desc.cd_parentcnid, (hfsmp->hfs_flags & HFS_STANDARD), key);
2665 ps.hfsmp = hfsmp;
2723 if (cat_resolvelink(hfsmp, cep->ce_attr.ca_linkref, isdirlink, &filerec) != 0)
2726 getbsdattr(hfsmp, &filerec, &cep->ce_attr);
2784 struct hfsmount *hfsmp;
2806 hfsmp = state->cbs_hfsmp;
2879 if (cnid == hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid ||
2880 cnid == hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid) {
2894 ((itime == (time_t)hfsmp->hfs_itime) ||
2895 (itime == (time_t)hfsmp->hfs_metadata_createdate))) {
2907 ((itime == (time_t)hfsmp->hfs_itime) ||
2908 (itime == (time_t)hfsmp->hfs_metadata_createdate))) {
2917 ((hfsmp->jnl || ((HFSTOVCB(hfsmp)->vcbAtrb & kHFSVolumeJournaledMask) && (hfsmp->hfs_flags & HFS_READ_ONLY)))) &&
2918 ((cnid == hfsmp->hfs_jnlfileid) ||
2919 (cnid == hfsmp->hfs_jnlinfoblkid))) {
3110 struct hfsmount *hfsmp;
3123 hfsmp = state->cbs_hfsmp;
3150 result = hfs_to_utf8(hfsmp, cnp->pstr, maxnamelen + 1, (ByteCount *)&namelen, nameptr);
3195 cat_getdirentries(struct hfsmount *hfsmp, u_int32_t entrycnt, directoryhint_t *dirhint,
3212 if (extended && (hfsmp->hfs_flags & HFS_STANDARD)) {
3215 fcb = hfsmp->hfs_catalog_cp->c_datafork;
3253 if (buildkey(hfsmp, &dirhint->dh_desc, (HFSPlusCatalogKey *)key, 0) == 0) {
3264 buildthreadkey(dirhint->dh_desc.cd_parentcnid, (hfsmp->hfs_flags & HFS_STANDARD), key);
3278 buildthreadkey(dirhint->dh_desc.cd_parentcnid, (hfsmp->hfs_flags & HFS_STANDARD), key);
3298 ps.hfsmp = hfsmp;
3314 state.cbs_hfsmp = hfsmp;
3340 if (hfsmp->hfs_flags & HFS_STANDARD)
3403 if (resolvelinkid(hfsmp, state.cbs_linkinfo[i].link_ref, &fileid) != 0)
3453 if (state->hfsmp->hfs_flags & HFS_STANDARD)
3607 buildkey(struct hfsmount *hfsmp, struct cat_desc *descp,
3641 if (HFSTOVCB(hfsmp)->vcbSigWord == kHFSSigWord) {
3650 if ((res = unicode_to_hfs(HFSTOVCB(hfsmp),
3671 cat_resolvelink(struct hfsmount *hfsmp, u_int32_t linkref, int isdirlink, struct HFSPlusCatalogFile *recp)
3684 parentcnid = hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid;
3687 parentcnid = hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid;
3701 (void) buildkey(hfsmp, &idesc, (HFSPlusCatalogKey *)&iterator->key, 0);
3703 result = BTSearchRecord(VTOF(HFSTOVCB(hfsmp)->catalogRefNum), iterator,
3723 resolvelinkid(struct hfsmount *hfsmp, u_int32_t linkref, ino_t *ino)
3734 error = cat_resolvelink(hfsmp, linkref, 0, &record);
3748 getkey(struct hfsmount *hfsmp, cnid_t cnid, CatalogKey * key)
3758 std_hfs = (HFSTOVCB(hfsmp)->vcbSigWord == kHFSSigWord);
3767 result = BTSearchRecord(VTOF(HFSTOVCB(hfsmp)->catalogRefNum), iterator,
3810 cat_getkeyplusattr(struct hfsmount *hfsmp, cnid_t cnid, CatalogKey * key, struct cat_attr *attrp)
3814 result = getkey(hfsmp, cnid, key);
3817 result = cat_lookupbykey(hfsmp, key, 0, 0, 0, NULL, attrp, NULL, NULL);
3825 (key->hfsPlus.parentID == hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid) &&
3835 if ((cat_lookup_siblinglinks(hfsmp, cnid, &prevlinkid, &nextlinkid) == 0) &&
3837 if (cat_findname(hfsmp, nextlinkid, &linkdesc) == 0) {
3987 getbsdattr(struct hfsmount *hfsmp, const struct HFSPlusCatalogFile *crp, struct cat_attr * attrp)
4002 attrp->ca_uid = hfsmp->hfs_uid;
4003 attrp->ca_gid = hfsmp->hfs_gid;
4005 attrp->ca_mode = S_IFDIR | (hfsmp->hfs_dir_mask & ACCESSPERMS);
4007 attrp->ca_mode = S_IFREG | (hfsmp->hfs_file_mask & ACCESSPERMS);
4045 * if (((unsigned int)vfs_flags(HFSTOVFS(hfsmp))) & MNT_UNKNOWNPERMISSIONS) {
4046 * attrp->ca_uid = hfsmp->hfs_uid;
4047 * attrp->ca_gid = hfsmp->hfs_gid;
4058 attrp->ca_dircount = ((hfsmp->hfs_flags & HFS_FOLDERCOUNT) && (attrp->ca_recflags & kHFSHasFolderCountMask)) ?
4082 if ((hfsmp->hfs_flags & HFS_STANDARD) == 0)
4099 promotekey(struct hfsmount *hfsmp, const HFSCatalogKey *hfskey,
4102 hfs_to_unicode_func_t hfs_get_unicode = hfsmp->hfs_get_unicode;
4106 *encoding = hfsmp->hfs_encoding;
4114 if (error && hfsmp->hfs_encoding != kTextEncodingMacRoman) {
4131 promotefork(struct hfsmount *hfsmp, const struct HFSCatalogFile *filep,
4135 u_int32_t blocksize = HFSTOVCB(hfsmp)->blockSize;
4169 promoteattr(struct hfsmount *hfsmp, const CatalogRecord *dataPtr, struct HFSPlusCatalogFile *crp)
4171 u_int32_t blocksize = HFSTOVCB(hfsmp)->blockSize;
4364 cat_lookup_dirlink(struct hfsmount *hfsmp, cnid_t dirlink_id,
4376 if (hfsmp->vcbSigWord == kHFSSigWord) {
4394 error = BTSearchRecord(VTOF(HFSTOVCB(hfsmp)->catalogRefNum), iterator,
4410 error = cat_lookupbykey(hfsmp, keyp, HFS_LOOKUP_HARDLINK, 0, true, outdescp, attrp, forkp, NULL);
4413 error = cat_lookupbykey(hfsmp, keyp, HFS_LOOKUP_HARDLINK, 0, false, outdescp, attrp, forkp, NULL);
4417 hfs_mark_volume_inconsistent(hfsmp);
4423 hfs_mark_volume_inconsistent(hfsmp);
4441 cat_update_dirlink(struct hfsmount *hfsmp, u_int8_t forktype,
4445 return cat_update_internal(hfsmp, true, descp, attrp, NULL, forkp);
4447 return cat_update_internal(hfsmp, true, descp, attrp, forkp, NULL);