|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: /* ! 26: File: FilesInternal.h ! 27: ! 28: Contains: IPI for File Manager (HFS Plus) ! 29: ! 30: Version: HFS Plus 1.0 ! 31: ! 32: Copyright: � 1996-1998 by Apple Computer, Inc., all rights reserved. ! 33: ! 34: File Ownership: ! 35: ! 36: DRI: Don Brady ! 37: ! 38: Other Contacts: Mark Day, Deric horn, Jim Luther ! 39: ! 40: Technology: File Systems ! 41: ! 42: Writers: ! 43: ! 44: (JL) Jim Luther ! 45: (msd) Mark Day ! 46: (djb) Don Brady ! 47: (DSH) Deric Horn ! 48: ! 49: Change History (most recent first): ! 50: <Rhap> 11/20/98 djb Add support for UTF-8 names. ! 51: <Rhap> 8/31/98 djb Added boolean flag to GetTimeLocal prototype. ! 52: <Rhap> 6/30/98 djb Add NodesAreContiguous prototype (for radar #2249539). ! 53: <Rhap> 6/22/98 djb Add ERR_BASE to error codes to make them negative (for Rhapsody only). ! 54: Replace DeallocFile prototype with DeleteFile prototype. ! 55: <Rhap> 6/5/98 djb Added CreateFileIDRef prototype; ! 56: <Rhap> 6/3/98 djb Add MoveRenameCatalogNode prototype (replaces seperate Move and Rename). ! 57: <Rhap> 4/17/98 djb Add VCB locking. ! 58: <Rhap> 4/6/98 djb Removed CreateVolumeCatalogCache and DisposeVolumeCatalogCache (obsolete). ! 59: <Rhap> 4/2/98 djb UpdateCatalogNode now takes parID and name as input. ! 60: <Rhap> 3/31/98 djb Sync up with final HFSVolumes.h header file. ! 61: <Rhap> 3/17/98 djb Fixed CreateCatalogNode interface to take kCatalogFolderNode and ! 62: kCatalogFileNode as type input. ! 63: ! 64: <CS30> 1/29/98 DSH Added TrashVolumeDiskCache prototype for TrashAllFSCaches API ! 65: support. ! 66: <CS29> 12/10/97 DSH 2201501, Overload the NodeData valence field for over 2 Gig file ! 67: support. ! 68: <CS28> 11/18/97 DSH Conditionalize ou BlockCameFromDisk() macro for DFA ! 69: <CS27> 11/16/97 djb LockMappingTable is now defined in UnicodeConverterPriv.i. ! 70: <CS26> 11/13/97 djb Move CatalogIterator struct to CatalogPrivate.h. Include ! 71: UnicodeConverter.i instead of Unicode.i. ! 72: <CS25> 11/3/97 JL #2001483 - changed UnMountVolume's prototype. ! 73: <24> 10/31/97 DSH Added consistencyStatus parameter to MountCheck. ! 74: <CS23> 10/21/97 DSH Interfacer tweak ! 75: <CS22> 10/21/97 DSH Conditionalize LMGetFCBTable, LMGetFSVars for DFA to call ! 76: through DFAs LowMem accessors. ! 77: <CS21> 10/20/97 msd Add a bytesMaximum parameter to BlockAllocate; removed fcb ! 78: parameter. ! 79: <CS20> 10/19/97 msd Bug 1684586. Remove the modifyDate field from CatalogNodeDate. ! 80: GetCatInfo and SetCatInfo use only contentModDate. ! 81: <CS19> 10/16/97 djb Add LMGetFSVars and LMGetFCBTable macros, add gBlockCacheDirty ! 82: to FSVars, simplified HFS Stack swapping macros. ! 83: <CS18> 10/13/97 DSH Added InitBTreeHeader prototype ! 84: <CS17> 10/13/97 djb Add volumeNameEncodingHint to VCB, add textEncoding to ! 85: CatalogNodeData, add gTextEncodingFontName to FSVars. ! 86: <CS16> 10/1/97 DSH Added CheckVolumeConsistency() for 1682475. ! 87: <CS15> 10/1/97 djb New Catalog iterators and Catalog node cache SPI. ! 88: <CS14> 9/17/97 DSH Moved prototype HFSBlocksFromTotalSectors() here for DFA ! 89: wrapperless volume support. ! 90: <CS13> 9/16/97 msd Add a field to FSVarsRec to store old WriteXParam address. ! 91: <CS12> 9/15/97 djb Add gBootPToUTable to FSVars (used to bootstrap Unicode). ! 92: <CS11> 9/7/97 djb Add FlushBlockCache prototype. ! 93: <CS10> 9/4/97 djb Add cmParentNotFound error code and reportMissingParent bit. ! 94: <CS9> 9/4/97 msd Remove unused attributes calls. Rename PropertyCloseVolume to ! 95: AttributesCloseVolume. In CatalogNodeData, replace ! 96: attributeModDate with modifyDate. Remove macro LatestModDate. ! 97: <CS8> 8/22/97 djb Add readFromDisk flag to GetCacheBlock and BlockCameFromDisk ! 98: macro. ! 99: <CS7> 8/18/97 DSH Override ASM cache accessing routines for DFA to use DFA cache. ! 100: <CS6> 7/28/97 msd Add prototypes for CacheReadInPlace, RemountWrappedVolumes. ! 101: <CS5> 7/25/97 DSH Added GenericMRUCache Routines ! 102: <CS4> 7/22/97 msd In CatalogNodeData, move attributeModDate after backupDate; this ! 103: allows SetCatInfo to manipulate the rest of the dates in one ! 104: block, the same as in the parameter block. ! 105: <CS3> 7/21/97 djb Add more instrumentation globals (CallProfile). Reallign FSVars. ! 106: <CS2> 7/18/97 msd Selector for PBCreateAttribute conflicts with PBGetXCatInfo. The ! 107: attribute calls now have selectors in the range $65..$69. ! 108: <CS1> 7/16/97 DSH first checked in ! 109: <CS23> 7/8/97 DSH Added LockMappingTable() until its moved into the Unicode header ! 110: files. ! 111: <CS22> 7/7/97 DSH Taking out changes made in HFS <45> for greater compatability ! 112: with the Tempo installer. ! 113: <CS21> 6/27/97 msd Add PBLongRename SPI. Add prototype for ! 114: RenameCatalogNodeUnicode. ! 115: <CS20> 6/26/97 DSH Conditionalized macro LocalToUTC to not look at FSVars for DFA. ! 116: <CS19> 6/25/97 msd Add prototype for HFSCommunicationProc. ! 117: <CS18> 6/24/97 DSH Adding runtime flags to deturmine unicode usage and installation ! 118: status. ! 119: <CS17> 6/24/97 djb Add linkCount to CatalogNodeData. Add LinkCatalogNode prototype. ! 120: Move Private Catalog Manager prototypes to CatalogPrivate.h. ! 121: <CS16> 6/20/97 msd Add prototype for CopyCatalogNodeData. In CatalogNodeData, ! 122: replaced modifyDate with contentModDate and attributeModDate. ! 123: Added a LatestModDate macro. ! 124: <15> 6/18/97 djb Add mask to ConversionContext. Add encodingsBitmap to VCB (and ! 125: reallign some fields). Add gInstalledEncodings to FSVars. ! 126: <CS14> 6/17/97 msd The conversions between local time and UTC have the sign of the ! 127: offset backwards. ! 128: <CS13> 6/13/97 djb Removed PrepareOutputName. Changed parameters for ! 129: DeleteCatalogNode, MoveCatalogNode, PrepareInputName. Add ! 130: private catalog macros. ! 131: <CS12> 6/12/97 msd Export BlockAllocateAny and UpdateVCBFreeBlks. ! 132: <CS11> 6/12/97 msd Add a parameter block and prototype for an SPI to create very ! 133: large files. ! 134: <CS10> 6/9/97 msd Add an offsetToUTC field to FSVarsRec. Add prototypes for ! 135: GetTimeUTC and GetTimeLocal; add macros for LocalToUTC and ! 136: UTCToLocal. ! 137: <CS9> 6/5/97 msd Add MapLogicalToPhysical (internal routine), PBMapFilePosition ! 138: for external use. ! 139: <CS8> 6/4/97 djb More Unicode converter changes (support for non roman scripts). ! 140: <CS7> 6/2/97 msd Add prototype for AdjustEOF. ! 141: <CS6> 5/28/97 msd Add prototypes for attributes SPI, both internal routines and PB ! 142: calls. Add FindFileNameGlueRec and FindFileName routine. ! 143: Prototypes for FindFileControlBlock and AccessBTree disappeared, ! 144: so added again. ! 145: <CS5> 5/20/97 DSH Including LowMemPriv.a in DFA compiles ! 146: <CS4> 5/19/97 djb Add uppLockMappingTable to FSVars. ! 147: <CS3> 5/19/97 djb Add CreateVolumeCatalogCache and DisposeVolumeCatalogCache ! 148: prototypes. Remove private CatalogDataCache structure. ! 149: <CS2> 5/16/97 msd Use fixed-size integers for GetBlock_glue and RelBlock_glue so ! 150: it will build with compilers other than MPW C and SC. Add ! 151: prototype for FillHFSStack, UnMountVolume, and ! 152: MakeVCBsExtendedVCBs from VolumeRequests.c. Add prototypes for ! 153: CreateEmbeddedVolume and InitUnicodeConverter. ! 154: <CS1> 5/9/97 djb first checked in ! 155: <CS2> 5/7/97 djb Add summary trace data. Shrink FSVars.later to 4 longs. ! 156: <CS1> 4/28/97 djb first checked in ! 157: ! 158: */ ! 159: #ifndef __FILEMGRINTERNAL__ ! 160: #define __FILEMGRINTERNAL__ ! 161: ! 162: #if TARGET_OS_MAC ! 163: ! 164: #ifndef __TYPES__ ! 165: #include <Types.h> ! 166: #endif ! 167: #ifndef __FILES__ ! 168: #include <Files.h> ! 169: #endif ! 170: #ifndef __FSM__ ! 171: #include <FSM.h> ! 172: #endif ! 173: #ifndef __LOWMEM__ ! 174: #include <LowMem.h> ! 175: #endif ! 176: #ifndef __OSUTILS__ ! 177: #include <OSUtils.h> ! 178: #endif ! 179: #ifndef __PROCESSES__ ! 180: #include <Processes.h> ! 181: #endif ! 182: #ifndef __TEXTCOMMON__ ! 183: #include <TextCommon.h> ! 184: #endif ! 185: #ifndef __UNICODECONVERTER__ ! 186: #include <UnicodeConverter.h> ! 187: #endif ! 188: ! 189: #else ! 190: ! 191: #ifndef __MACOSTYPES__ ! 192: #include "system/MacOSTypes.h" ! 193: #endif ! 194: #ifndef __MACOSSTUBS__ ! 195: #include "system/MacOSStubs.h" ! 196: #endif ! 197: #include <mach/machine/simple_lock.h> ! 198: #endif /* TARGET_OS_MAC */ ! 199: ! 200: #ifndef __HFSVOLUMES__ ! 201: #include "HFSVolumes.h" ! 202: #endif ! 203: ! 204: #if FORDISKFIRSTAID ! 205: #else ! 206: #define FORDISKFIRSTAID 0 ! 207: #endif ! 208: ! 209: #if PRAGMA_ONCE ! 210: #pragma once ! 211: #endif ! 212: ! 213: #ifdef __cplusplus ! 214: extern "C" { ! 215: #endif ! 216: ! 217: #if PRAGMA_IMPORT ! 218: #pragma import on ! 219: #endif ! 220: ! 221: #if PRAGMA_STRUCT_ALIGN ! 222: #pragma options align=mac68k ! 223: #elif PRAGMA_STRUCT_PACKPUSH ! 224: #pragma pack(push, 2) ! 225: #elif PRAGMA_STRUCT_PACK ! 226: #pragma pack(2) ! 227: #endif ! 228: ! 229: /* internal error codes*/ ! 230: ! 231: #if TARGET_OS_RHAPSODY ! 232: #define ERR_BASE -32767 ! 233: #else ! 234: #define ERR_BASE 0 ! 235: #endif ! 236: ! 237: enum { ! 238: /* FXM errors*/ ! 239: fxRangeErr = ERR_BASE + 16, /* file position beyond mapped range*/ ! 240: fxOvFlErr = ERR_BASE + 17, /* extents file overflow*/ ! 241: /* Unicode errors*/ ! 242: uniTooLongErr = ERR_BASE + 24, /* Unicode string too long to convert to Str31*/ ! 243: uniBufferTooSmallErr = ERR_BASE + 25, /* Unicode output buffer too small*/ ! 244: uniNotMappableErr = ERR_BASE + 26, /* Unicode string can't be mapped to given script*/ ! 245: /* BTree Manager errors*/ ! 246: btNotFound = ERR_BASE + 32, /* record not found*/ ! 247: btExists = ERR_BASE + 33, /* record already exists*/ ! 248: btNoSpaceAvail = ERR_BASE + 34, /* no available space*/ ! 249: btNoFit = ERR_BASE + 35, /* record doesn't fit in node */ ! 250: btBadNode = ERR_BASE + 36, /* bad node detected*/ ! 251: btBadHdr = ERR_BASE + 37, /* bad BTree header record detected*/ ! 252: dsBadRotate = ERR_BASE + 64, /* bad BTree rotate*/ ! 253: /* Catalog Manager errors*/ ! 254: cmNotFound = ERR_BASE + 48, /* CNode not found*/ ! 255: cmExists = ERR_BASE + 49, /* CNode already exists*/ ! 256: cmNotEmpty = ERR_BASE + 50, /* directory CNode not empty (valence = 0)*/ ! 257: cmRootCN = ERR_BASE + 51, /* invalid reference to root CNode*/ ! 258: cmBadNews = ERR_BASE + 52, /* detected bad catalog structure*/ ! 259: cmFThdDirErr = ERR_BASE + 53, /* thread belongs to a directory not a file*/ ! 260: cmFThdGone = ERR_BASE + 54, /* file thread doesn't exist*/ ! 261: cmParentNotFound = ERR_BASE + 55, /* CNode for parent ID does not exist*/ ! 262: /* TFS internal errors*/ ! 263: fsDSIntErr = -127 /* Internal file system error*/ ! 264: }; ! 265: ! 266: ! 267: /* internal flags*/ ! 268: ! 269: ! 270: enum { ! 271: /* File System busy flag:*/ ! 272: /* Bit zero of FSBusy (lomem $360) is true when the file system is running.*/ ! 273: /* The word at $360 is cleared when the file system is exited. The*/ ! 274: /* bits defined here are for additional flags in the FSBusy word that are*/ ! 275: /* valid only when the file system is running.*/ ! 276: fsBusyBit = 0, /* file system is running; other FSBusy bits are valid*/ ! 277: fsSCSIDefer = 1, /* file system is waiting for SCSI transaction to complete*/ ! 278: fsIntMaskDefer = 2, /* file system is waiting until the interrupt mask is lowered*/ ! 279: /* Flag bits in HFSFlags byte:*/ ! 280: hfsReq = 0, /* Set if request is specific to HFS*/ ! 281: dirCN = 1, /* Set if a CNode is a directory*/ ! 282: reportMissingParent = 4, /* tell Catalog to report missing parents (used by MakeFSSpec)*/ ! 283: skipPMSP = 5, /* Set to skip PMSP setup (one-shot)*/ ! 284: noPMSP = 6, /* Set to disable PMSP completely (status flag)*/ ! 285: hfsContd = 7, /* Set if Async trap is continued*/ ! 286: /* fsFlags values*/ ! 287: fsNoAllocate = 0, ! 288: fsNoAllocateMask = 0x01, /* true when allocating memory is a very bad idea*/ ! 289: fsNeedFCBs = 1, ! 290: fsNeedFCBsMask = 0x02, /* true when a local FCB couldn't be found */ ! 291: fsNoFCBExpansion = 2, ! 292: fsNoFCBExpansionMask = 0x04, /* true if no FCB expansion logic is desired*/ ! 293: /* ExtendFile option flags*/ ! 294: /* extendFileAllBit = 0, |* allocate all requested bytes or none *|*/ ! 295: /* extendFileAllMask = 0x0001,*/ ! 296: /* */ ! 297: /* extendFileContigBit = 1, |* force contiguous allocation *|*/ ! 298: /* extendFileContigMask = 0x0002*/ ! 299: kEFContigBit = 1, /* force contiguous allocation*/ ! 300: kEFContigMask = 0x02, ! 301: kEFAllBit = 0, /* allocate all requested bytes or none*/ ! 302: kEFAllMask = 0x01, /* TruncateFile option flags*/ ! 303: kTFTrunExtBit = 0, /* truncate to the extent containing new PEOF*/ ! 304: kTFTrunExtMask = 1 ! 305: }; ! 306: ! 307: ! 308: ! 309: enum { ! 310: HFSStkLen = 1792, /* old stack size (pre HFS Plus)*/ ! 311: kFileSystemStackSlop = 16, /* additional temporary space*/ ! 312: kFileSystemStackSize = 16384, /* give us more breathing room*/ ! 313: kFileSystemVersion = FOUR_CHAR_CODE('2.0A'), /* current file system version*/ ! 314: /* 31744 = $7C00, a nice round number close to*/ ! 315: /* (32767*1000)/1024, which is about the largest */ ! 316: /* free space unsuspecting, decimal-K minded apps*/ ! 317: /* might be expected to handle.*/ ! 318: /* AlBlkLim*/ ! 319: kMaxHFSAllocationBlocks = 31744, ! 320: WDRfnMin = -32767, /* lowest assigned WD RefNum*/ ! 321: WDRfnMax = -4096, /* largest possible WDrefnum*/ ! 322: kFirstFileRefnum = 2, /* smallest FCB refnum*/ ! 323: kNoHint = 0 ! 324: }; ! 325: ! 326: ! 327: /* Internal LowMem pointers*/ ! 328: ! 329: /*�� The following should really be in LowMemPriv.i*/ ! 330: ! 331: enum { ! 332: FSCallAsync = 0x0342, /* ONE BYTE FREE*/ ! 333: NoEject = 0x034B, /* used by Eject and Offline*/ ! 334: CacheFlag = 0x0377, ! 335: SysBMCPtr = 0x0378, /* System-wide bitmap cache pointer*/ ! 336: SysCtlCPtr = 0x0380, /* System-wide control cache pointer*/ ! 337: HFSDSErr = 0x0392, /* Final gasp - error that caused IOErr.*/ ! 338: LMParamBlock = 0x03A4, /* LMGetParams() just gives us a copy of it*/ ! 339: FSVarsPtr = 0x0BB8, /* lomem that points to file system variable block*/ ! 340: CacheVars = 0x0394, ! 341: HFSStkPtr = 0x036E, /* Temporary location of HFS Stack pointer*/ ! 342: FSIOErr = 0x03DE, /* last I/O error (NEXT WORD FREE)*/ ! 343: /* file manager vectors not found in LowMemPriv.i*/ ! 344: JUpdAltMDB = (0xED) * 4 + 0x0400, /* ($A0ED) $0400 is n/OSTable*/ ! 345: JCkExtFS = (0xEE) * 4 + 0x0400, /* ($A0EE) $0400 is n/OSTable*/ ! 346: JBMChk = (0xF0) * 4 + 0x0400, /* ($A0F0) $0400 is n/OSTable*/ ! 347: JTstMod = (0xF1) * 4 + 0x0400, /* ($A0F1) $0400 is n/OSTable*/ ! 348: JLocCRec = (0xF2) * 4 + 0x0400, /* ($A0F2) $0400 is n/OSTable*/ ! 349: JTreeSearch = (0xF3) * 4 + 0x0400, /* ($A0F3) $0400 is n/OSTable*/ ! 350: JMapFBlock = (0xF4) * 4 + 0x0400, /* ($A0F4) $0400 is n/OSTable*/ ! 351: JXFSearch = (0xF5) * 4 + 0x0400, /* ($A0F5) $0400 is n/OSTable*/ ! 352: JReadBM = (0xF6) * 4 + 0x0400 /* ($A0F6) $0400 is n/OSTable*/ ! 353: }; ! 354: ! 355: ! 356: /* Poor Man's Search Path*/ ! 357: ! 358: struct SearchPathHeader { ! 359: Ptr PMSPHook; /* Hook for PMSP modification*/ ! 360: short PMSPIndx; /* Index to PMSP index from start of PMSP*/ ! 361: }; ! 362: typedef struct SearchPathHeader SearchPathHeader; ! 363: ! 364: struct SearchPathEntry { ! 365: short spVRefNum; /* VRefNum in PMSP entry*/ ! 366: UInt32 spDirID; /* Directory ID in PMSP entry*/ ! 367: }; ! 368: typedef struct SearchPathEntry SearchPathEntry; ! 369: ! 370: ! 371: enum { ! 372: kPoorMansSearchIndex = -2, ! 373: MaxDVCnt = 8, /* Leave room for 8 default VRefNums*/ ! 374: PMSPSize = MaxDVCnt * sizeof(SearchPathEntry) + sizeof(SearchPathHeader) + 2 ! 375: }; ! 376: ! 377: ! 378: ! 379: enum { ! 380: fsWDCBExtendCount = 8, /* # of WDCB's to add when we run out*/ ! 381: /* FileIDs variables*/ ! 382: kNumExtentsToCache = 4 /* just guessing for ExchangeFiles*/ ! 383: }; ! 384: ! 385: ! 386: enum { ! 387: kInvalidMRUCacheKey = -1L, /* flag to denote current MRU cache key is invalid*/ ! 388: kDefaultNumMRUCacheBlocks = 16 /* default number of blocks in each cache*/ ! 389: }; ! 390: ! 391: ! 392: /* Universal Extent Key */ ! 393: ! 394: union ExtentKey { ! 395: HFSExtentKey hfs; ! 396: HFSPlusExtentKey hfsPlus; ! 397: }; ! 398: typedef union ExtentKey ExtentKey; ! 399: /* Universal extent descriptor */ ! 400: ! 401: union ExtentDescriptor { ! 402: HFSExtentDescriptor hfs; ! 403: HFSPlusExtentDescriptor hfsPlus; ! 404: }; ! 405: typedef union ExtentDescriptor ExtentDescriptor; ! 406: /* Universal extent record */ ! 407: ! 408: union ExtentRecord { ! 409: HFSExtentRecord hfs; ! 410: HFSPlusExtentRecord hfsPlus; ! 411: }; ! 412: typedef union ExtentRecord ExtentRecord; ! 413: /* Universal catalog key */ ! 414: ! 415: union CatalogKey { ! 416: HFSCatalogKey hfs; ! 417: HFSPlusCatalogKey hfsPlus; ! 418: }; ! 419: typedef union CatalogKey CatalogKey; ! 420: /* Universal catalog data record */ ! 421: ! 422: union CatalogRecord { ! 423: SInt16 recordType; ! 424: HFSCatalogFolder hfsFolder; ! 425: HFSCatalogFile hfsFile; ! 426: HFSCatalogThread hfsThread; ! 427: HFSPlusCatalogFolder hfsPlusFolder; ! 428: HFSPlusCatalogFile hfsPlusFile; ! 429: HFSPlusCatalogThread hfsPlusThread; ! 430: }; ! 431: typedef union CatalogRecord CatalogRecord; ! 432: /* ! 433: Key for records in the attributes file. Fields are compared in the order: ! 434: cnid, attributeName, startBlock ! 435: */ ! 436: ! 437: struct AttributeKey { ! 438: UInt16 keyLength; /* must set kBTBigKeysMask and kBTVariableIndexKeysMask in BTree header's attributes */ ! 439: UInt16 pad; ! 440: HFSCatalogNodeID cnid; /* file or folder ID */ ! 441: UInt32 startBlock; /* block # relative to start of attribute */ ! 442: HFSUniStr255 attributeName; /* variable length */ ! 443: }; ! 444: typedef struct AttributeKey AttributeKey; ! 445: ! 446: enum { ! 447: kAttributeKeyMaximumLength = sizeof(AttributeKey) - sizeof(UInt16), ! 448: kAttributeKeyMinimumLength = kAttributeKeyMaximumLength - sizeof(HFSUniStr255) + sizeof(UInt16) ! 449: }; ! 450: ! 451: ! 452: enum { ! 453: CMMaxCName = kHFSMaxFileNameChars ! 454: }; ! 455: ! 456: ! 457: /* Internal Data structures*/ ! 458: ! 459: struct ExtendedVCB { ! 460: QElemPtr qLink; ! 461: SInt16 qType; ! 462: SInt16 vcbFlags; ! 463: UInt16 vcbSigWord; ! 464: UInt32 vcbCrDate; ! 465: UInt32 vcbLsMod; ! 466: SInt16 vcbAtrb; ! 467: UInt16 vcbNmFls; ! 468: SInt16 vcbVBMSt; ! 469: SInt16 vcbAllocPtr; ! 470: UInt16 vcbNmAlBlks; ! 471: SInt32 vcbAlBlkSiz; ! 472: SInt32 vcbClpSiz; ! 473: SInt16 vcbAlBlSt; ! 474: SInt32 vcbNxtCNID; ! 475: UInt16 vcbFreeBks; ! 476: UInt8 vcbVN[256]; ! 477: SInt16 vcbDrvNum; ! 478: SInt16 vcbDRefNum; ! 479: SInt16 vcbFSID; ! 480: SInt16 vcbVRefNum; ! 481: Ptr vcbMAdr; ! 482: Ptr vcbBufAdr; ! 483: SInt16 vcbMLen; ! 484: SInt16 vcbDirIndex; ! 485: SInt16 vcbDirBlk; ! 486: UInt32 vcbVolBkUp; ! 487: UInt16 vcbVSeqNum; ! 488: SInt32 vcbWrCnt; ! 489: SInt32 vcbXTClpSiz; ! 490: SInt32 vcbCTClpSiz; ! 491: UInt16 vcbNmRtDirs; ! 492: SInt32 vcbFilCnt; ! 493: SInt32 vcbDirCnt; ! 494: SInt32 vcbFndrInfo[8]; ! 495: UInt16 vcbEmbedSigWord; /* embedded volume signature (formerly vcbVCSize)*/ ! 496: HFSExtentDescriptor vcbEmbedExtent; /* embedded volume location and size (formerly vcbVBMCSiz and vcbCtlCSiz)*/ ! 497: UInt16 vcbXTAlBlks; ! 498: UInt16 vcbCTAlBlks; ! 499: FileReference extentsRefNum; ! 500: FileReference catalogRefNum; ! 501: Ptr vcbCtlBuf; ! 502: SInt32 vcbDirIDM; ! 503: SInt16 vcbOffsM; ! 504: ! 505: /* Extended VCB information*/ ! 506: UInt16 reserved; /* align to 4-byte boundry*/ ! 507: UInt32 hfsPlusIOPosOffset; /* Disk block where HFS+ starts */ ! 508: ! 509: FileReference allocationsRefNum; ! 510: FileReference attributesRefNum; /* volume's attributes file, if any*/ ! 511: ! 512: UInt32 allocationsClumpSize; /* clump size for allocations file (also in fcb)*/ ! 513: UInt32 attributesClumpSize; /* clump size for attributes file (also in fcb)*/ ! 514: ! 515: UInt32 blockSize; /* size of allocation blocks - vcbAlBlkSiz*/ ! 516: UInt32 totalBlocks; /* number of allocation blocks in volume (includes this header and VBM) - vcbNmAlBlks*/ ! 517: UInt32 freeBlocks; /* number of unused allocation blocks - vcbFreeBks*/ ! 518: UInt32 nextAllocation; /* start of next allocation search - vcbAllocPtr*/ ! 519: ! 520: UInt32 checkedDate; /* date and time of last disk check */ ! 521: ! 522: UInt64 encodingsBitmap; /* HFS Plus only*/ ! 523: TextEncoding volumeNameEncodingHint; /* Text encoding used for volume name*/ ! 524: ! 525: Ptr hintCachePtr; /* points to this volumes heuristicHint cache*/ ! 526: ! 527: #if TARGET_OS_RHAPSODY ! 528: simple_lock_data_t vcbSimpleLock; /* simple lock to allow concurrent access to vcb data */ ! 529: #endif ! 530: }; ! 531: typedef struct ExtendedVCB ExtendedVCB; ! 532: ! 533: struct FCB { ! 534: UInt32 fcbFlNm; /* FCB file number. Non-zero marks FCB used */ ! 535: SignedByte fcbFlags; /* FCB flags */ ! 536: SignedByte fcbTypByt; /* File type byte */ ! 537: UInt16 fcbSBlk; /* File start block (in alloc size blks) */ ! 538: UInt32 fcbEOF; /* Logical length or EOF in bytes */ ! 539: UInt32 fcbPLen; /* Physical file length in bytes */ ! 540: UInt32 fcbCrPs; /* Current position within file */ ! 541: ExtendedVCB * fcbVPtr; /* Pointer to the corresponding ExtendedVCB */ ! 542: Ptr fcbBfAdr; /* File's buffer address */ ! 543: unsigned short fcbFlPos; /* Directory block this file is in */ ! 544: UInt32 fcbClmpSize; /* Number of bytes per clump */ ! 545: Ptr fcbBTCBPtr; /* Pointer to B*-Tree control block for file */ ! 546: HFSExtentRecord fcbExtRec; /* First 3 file extents */ ! 547: #if TARGET_OS_MAC ! 548: OSType fcbFType; /* File's 4 Finder Type bytes */ ! 549: UInt32 fcbCatPos; /* Catalog hint for use on Close */ ! 550: UInt32 fcbDirID; /* Parent Directory ID */ ! 551: Str31 fcbCName; /* CName of open file */ ! 552: #endif ! 553: }; ! 554: typedef struct FCB FCB; ! 555: ! 556: struct ExtendedFCB { ! 557: UInt32 processID1; /* these two fields are the Process Manager PID that*/ ! 558: UInt32 processID2; /* opened the file (used to clean up at process death).*/ ! 559: HFSPlusExtentRecord extents; /* extents for HFS+ volumes*/ ! 560: }; ! 561: typedef struct ExtendedFCB ExtendedFCB; ! 562: ! 563: struct ParallelFCB { ! 564: UInt16 count; /* number of ExtendedFCB's*/ ! 565: UInt16 unitSize; /* size of a single ExtendedFCB (should be sizeof(ExtendedFCB))*/ ! 566: ExtendedFCB extendedFCB[1]; ! 567: }; ! 568: typedef struct ParallelFCB ParallelFCB; ! 569: ! 570: struct ExtendedWDCB { ! 571: UInt32 processID1; ! 572: UInt32 processID2; ! 573: }; ! 574: typedef struct ExtendedWDCB ExtendedWDCB; ! 575: ! 576: ! 577: struct ParallelWDCB { ! 578: UInt16 count; /* number of ExtendedFCB's*/ ! 579: UInt16 unitSize; /* size of a single ExtendedFCB (should be sizeof(ExtendedFCB))*/ ! 580: ExtendedWDCB extendedWDCB[1]; ! 581: }; ! 582: typedef struct ParallelWDCB ParallelWDCB; ! 583: ! 584: struct WDCBArray { ! 585: UInt16 count; ! 586: WDCBRec wdcb[1]; ! 587: }; ! 588: typedef struct WDCBArray WDCBArray; ! 589: ! 590: struct FCBArray { ! 591: UInt16 length; /* first word is FCB part length*/ ! 592: FCB fcb[1]; /* fcb array*/ ! 593: }; ! 594: typedef struct FCBArray FCBArray; ! 595: ! 596: /* Volumes*/ ! 597: ! 598: ! 599: enum { ! 600: vcbMaxNam = 27, /* volumes currently have a 27 byte max name length*/ ! 601: /* VCB flags*/ ! 602: vcbManualEjectMask = 0x0001, /* bit 0 manual-eject bit: set if volume is in a manual-eject drive*/ ! 603: vcbFlushCriticalInfoMask = 0x0002, /* bit 1 critical info bit: set if critical MDB information needs to flush*/ ! 604: /* IoParam->ioVAtrb*/ ! 605: kDefaultVolumeMask = 0x0020, ! 606: kFilesOpenMask = 0x0040 ! 607: }; ! 608: ! 609: ! 610: /* Catalog Node Data - universal data returned from the Catalog Manager*/ ! 611: ! 612: ! 613: enum { ! 614: kCatalogFolderNode = FOUR_CHAR_CODE('fold'), ! 615: kCatalogFileNode = FOUR_CHAR_CODE('file'), /* mask bits for afp's three inhibit bits which live in fdXFlags in xFndrInfo*/ ! 616: xFFFilAttrLockMask = 0x70 ! 617: }; ! 618: ! 619: /* valence is overloaded for files and used as additional flags. 2201501*/ ! 620: ! 621: enum { ! 622: kLargeDataForkMask = 0x00000001, ! 623: kLargeRsrcForkMask = 0x00000002 ! 624: }; ! 625: ! 626: struct CatalogNodeData { ! 627: OSType nodeType; /* 'file' or 'fold' */ ! 628: UInt32 nodeFlags; /* node flags */ ! 629: HFSCatalogNodeID nodeID; /* node ID */ ! 630: UInt32 createDate; /* date and time of creation */ ! 631: UInt32 contentModDate; /* date and time of last fork modification */ ! 632: UInt32 backupDate; /* date and time of last backup */ ! 633: UInt8 finderInfo[16]; /* Finder information part 1 */ ! 634: UInt8 extFinderInfo[16]; /* Finder information part 2 */ ! 635: ! 636: UInt32 valence; /* valence for folders, overloaded for files for additional flags (larger than 2 Gig flag) */ ! 637: UInt32 textEncoding; /* hint for name conversions */ ! 638: ! 639: UInt32 dataLogicalSize; /* files only */ ! 640: UInt32 dataPhysicalSize; /* files only */ ! 641: UInt32 rsrcLogicalSize; /* files only */ ! 642: UInt32 rsrcPhysicalSize; /* files only */ ! 643: ! 644: HFSPlusExtentRecord dataExtents; /* files only */ ! 645: HFSPlusExtentRecord rsrcExtents; /* files only */ ! 646: #if TARGET_OS_RHAPSODY ! 647: UInt32 accessDate; /* date and time of last access (Rhapsody only) */ ! 648: UInt32 attributeModDate; /* date and time of last attribute modification (Rhapsody only) */ ! 649: HFSPlusPermissions permissions; /* permissions (for Rhapsody) */ ! 650: #endif ! 651: ! 652: }; ! 653: typedef struct CatalogNodeData CatalogNodeData; ! 654: ! 655: /* Universal catalog name*/ ! 656: ! 657: union CatalogName { ! 658: Str31 pstr; ! 659: HFSUniStr255 ustr; ! 660: }; ! 661: typedef union CatalogName CatalogName; ! 662: ! 663: /* Unicode Conversion*/ ! 664: ! 665: ! 666: enum { ! 667: kMacBaseEncodingCount = 50, ! 668: kTextEncodingUndefined = 0x00007FFF ! 669: }; ! 670: ! 671: struct ConversionContext { ! 672: TextToUnicodeInfo toUnicode; ! 673: UnicodeToTextInfo fromUnicode; ! 674: }; ! 675: typedef struct ConversionContext ConversionContext; ! 676: ! 677: struct CallProfile { ! 678: UInt16 refCount; ! 679: UInt16 errCount; ! 680: UInt32 callCount; ! 681: UInt32 minTime; ! 682: UInt32 maxTime; ! 683: UInt64 totalTime; ! 684: UInt64 startBase; /* in nanoseconds*/ ! 685: }; ! 686: typedef struct CallProfile CallProfile; ! 687: ! 688: ! 689: struct FSVarsRec { ! 690: #if TARGET_OS_MAC ! 691: short length; ! 692: void * gBlockCacheGlobals; ! 693: long XFS; ! 694: long BTMgr; ! 695: long DTDBMgr; ! 696: long FSMgr; ! 697: long QMgr; ! 698: ParallelFCB * fcbPBuf; /* Parallel FCB array*/ ! 699: long wdcbPBuf; ! 700: short reserved1; ! 701: DeferredTask fsDefer; /* <in OSUtils.h>*/ ! 702: long dtOwnCall; ! 703: long FSMHook; ! 704: short fsSelector; ! 705: Byte fsFlags; ! 706: Boolean gBlockCacheDirty; ! 707: ExtendedVCB * dsRecoverVCBPtr; /* pointer to VCB of volume we're doing a disk switch for*/ ! 708: unsigned char * dsRecoverNamePtr; /* points to name of volume we're doing a disk switch for*/ ! 709: UInt16 fsFCBBurst; /* # of FCBs that we'd like to keep free*/ ! 710: UInt16 fsFCBGrow; /* # of FCBs to make free when we grow the array*/ ! 711: UInt16 fsFCBMax; /* max # of FCBs to allow*/ ! 712: UInt16 fsFCBCounter; /* counts down as files are opened*/ ! 713: UInt32 later[4]; /* and a few more for later*/ ! 714: ! 715: void * userStackPtr; /* user's A7 stack pointer*/ ! 716: FSSpec gCatalogFSSpec; /* space to hold catalog manager's FSSpec output (70 bytes)*/ ! 717: Boolean gUseDynamicUnicodeConverters; ! 718: Boolean gIsUnicodeInstalled; ! 719: CatalogNodeData gCatalogData; /* space to hold catalog manager's universal node data (212 bytes)*/ ! 720: ! 721: UInt32 gDefaultBaseEncoding; ! 722: ItemCount gInstalledEncodings; ! 723: ConversionContext gConversionContext[50]; ! 724: UniversalProcPtr uppCreateTextToUnicodeInfo; ! 725: UniversalProcPtr uppCreateUnicodeToTextInfo; ! 726: UniversalProcPtr uppConvertFromTextToUnicode; ! 727: UniversalProcPtr uppConvertFromUnicodeToText; ! 728: UniversalProcPtr uppUpgradeScriptInfoToTextEncoding; ! 729: UniversalProcPtr uppRevertTextEncodingToScriptInfo; ! 730: UniversalProcPtr uppLockMappingTable; ! 731: ! 732: UInt32 gNativeCPUtype; /* what processor are we running on*/ ! 733: UInt32 gTimeBaseFactor; /* adjustment for �sec*/ ! 734: CallProfile gCallProfile[32]; /* call profiles for unicode and b-tree calls*/ ! 735: ! 736: Ptr gAttributesBuffer; /* used by attributes code to read/construct keys and/or data*/ ! 737: UInt32 gAttributesBufferSize; /* size of block pointed to by gAttributesBuffer*/ ! 738: SInt32 offsetToUTC; /* added to local time to produce UTC (GMT)*/ ! 739: Ptr gBootPToUTable; /* used by boot code to find Extensions folder*/ ! 740: UniversalProcPtr oldWriteXPRam; /* previous WriteXPRam trap address*/ ! 741: Ptr gCatalogCacheGlobals; /* private catalog cache (for iterators)*/ ! 742: CatalogKey gLastCatalogKey; /* keep a copy for UpdateCatalogNode*/ ! 743: CatalogRecord gLastCatalogRecord; /* keep a copy for UpdateCatalogNode*/ ! 744: StringPtr gTextEncodingFontName; /* points to font name (only used when no HFS Plus volumes have been mounted)*/ ! 745: #else ! 746: UInt32 gDefaultBaseEncoding; ! 747: ItemCount gInstalledEncodings; ! 748: ConversionContext gConversionContext[50]; ! 749: Ptr gBootPToUTable; /* used by boot code to find Extensions folder*/ ! 750: StringPtr gTextEncodingFontName; /* points to font name (only used when no HFS Plus volumes have been mounted)*/ ! 751: Boolean gUseDynamicUnicodeConverters; ! 752: Boolean gIsUnicodeInstalled; ! 753: #endif /* TARGET_OS_MAC */ ! 754: }; ! 755: typedef struct FSVarsRec FSVarsRec; ! 756: ! 757: ! 758: #if TARGET_OS_MAC ! 759: #define PANIC(reason) panic("\p" reason) ! 760: #else ! 761: #define PANIC(reason) panic(reason) ! 762: #endif /* TARGET_OS_MAC */ ! 763: ! 764: EXTERN_API_C( void ) ! 765: LMSetCacheFlag (Byte value); ! 766: ! 767: /* cache usage count now used as cache flag*/ ! 768: #define LMSetCacheFlag( value ) (*(Ptr) 0x0377 = ( value )) ! 769: ! 770: /* Internal macros*/ ! 771: /* Disk First Aid constants*/ ! 772: ! 773: enum { ! 774: kHFSStage = 0, ! 775: kVerifyStage = 1, ! 776: kRepairStage = 2 ! 777: }; ! 778: ! 779: #if FORDISKFIRSTAID ! 780: EXTERN_API_C( FSVarsRec *) ! 781: LMGetFSVars (void); ! 782: ! 783: #define LMGetFSVars() LMGetFSMVars() ! 784: EXTERN_API_C( Ptr ) ! 785: LMGetFCBTable (void); ! 786: ! 787: #define LMGetFCBTable() LMGetFCBSPtr() ! 788: EXTERN_API_C( UInt32 ) ! 789: GetDFAStage (void); ! 790: #else ! 791: #if TARGET_OS_MAC ! 792: EXTERN_API_C( FSVarsRec *) ! 793: LMGetFSVars (void); ! 794: ! 795: #define LMGetFSVars() (*(FSVarsRec**) 0x0BB8) ! 796: EXTERN_API_C( Ptr ) ! 797: LMGetFCBTable (void); ! 798: ! 799: #define LMGetFCBTable() (*(Ptr*) 0x034E) ! 800: EXTERN_API_C( UInt32 ) ! 801: GetDFAStage (void); ! 802: #endif /* TARGET_OS_MAC */ ! 803: ! 804: #define GetDFAStage() (UInt32) kHFSStage ! 805: #endif /* (FORDISKFIRSTAID) */ ! 806: ! 807: ! 808: EXTERN_API_C( FileReference ) ! 809: GetFileRefNumFromFCB (const FCB * fcb); ! 810: ! 811: #if ! TARGET_OS_RHAPSODY ! 812: #define GetFileRefNumFromFCB(fcb) ((short) ( ((UInt32) (fcb)) - ((UInt32) LMGetFCBTable() ) )) ! 813: #endif ! 814: ! 815: EXTERN_API_C( FCB *) ! 816: GetFileControlBlock (FileReference refNum); ! 817: ! 818: #if ! TARGET_OS_RHAPSODY ! 819: #define GetFileControlBlock(refNum) ((FCB*) ( (Ptr)LMGetFCBTable() + refNum ) ) ! 820: #endif ! 821: ! 822: EXTERN_API_C( Boolean ) ! 823: BlockCameFromDisk (void); ! 824: ! 825: #if !(FORDISKFIRSTAID || TARGET_OS_RHAPSODY) ! 826: #define BlockCameFromDisk() ( *(*(UInt16 **)CacheVars + 29) == 0) ! 827: #endif ! 828: ! 829: /* The following macro marks a VCB as dirty by setting the upper 8 bits of the flags*/ ! 830: EXTERN_API_C( void ) ! 831: MarkVCBDirty (ExtendedVCB * vcb); ! 832: ! 833: EXTERN_API_C( void ) ! 834: MarkVCBClean (ExtendedVCB * vcb); ! 835: ! 836: EXTERN_API_C( Boolean ) ! 837: IsVCBDirty (ExtendedVCB * vcb); ! 838: ! 839: #if TARGET_OS_RHAPSODY ! 840: #define VCB_LOCK_INIT(vcb) simple_lock_init(&vcb->vcbSimpleLock) ! 841: #define VCB_LOCK(vcb) simple_lock(&vcb->vcbSimpleLock) ! 842: #define VCB_UNLOCK(vcb) simple_unlock(&vcb->vcbSimpleLock) ! 843: ! 844: #define MarkVCBDirty(vcb) { VCB_LOCK((vcb)); ((vcb)->vcbFlags |= 0xFF00); VCB_UNLOCK((vcb)); } ! 845: #define MarkVCBClean(vcb) { VCB_LOCK((vcb)); ((vcb)->vcbFlags &= 0x00FF); VCB_UNLOCK((vcb)); } ! 846: #define IsVCBDirty(vcb) ((Boolean) ((vcb->vcbFlags & 0xFF00) != 0)) ! 847: #else ! 848: #define VCB_LOCK_INIT(vcb) ! 849: #define VCB_LOCK(vcb) ! 850: #define VCB_UNLOCK(vcb) ! 851: ! 852: #define MarkVCBDirty(vcb) ((vcb)->vcbFlags |= 0xFF00) ! 853: #define MarkVCBClean(vcb) ((vcb)->vcbFlags &= 0x00FF) ! 854: #define IsVCBDirty(vcb) ((Boolean) ((vcb->vcbFlags & 0xFF00) != 0)) ! 855: #endif ! 856: ! 857: ! 858: /* Test for error and return if error occurred*/ ! 859: EXTERN_API_C( void ) ! 860: ReturnIfError (OSErr result); ! 861: ! 862: #define ReturnIfError(result) if ( (result) != noErr ) return (result); else ; ! 863: /* Test for passed condition and return if true*/ ! 864: EXTERN_API_C( void ) ! 865: ReturnErrorIf (Boolean condition, ! 866: OSErr result); ! 867: ! 868: #define ReturnErrorIf(condition, error) if ( (condition) ) return( (error) ); ! 869: /* Exit function on error*/ ! 870: EXTERN_API_C( void ) ! 871: ExitOnError (OSErr result); ! 872: ! 873: #define ExitOnError( result ) if ( ( result ) != noErr ) goto ErrorExit; else ; ! 874: /* Return the low 16 bits of a 32 bit value, pinned if too large*/ ! 875: EXTERN_API_C( UInt16 ) ! 876: LongToShort (UInt32 l); ! 877: ! 878: #define LongToShort( l ) l <= (UInt32)0x0000FFFF ? ((UInt16) l) : ((UInt16) 0xFFFF) ! 879: ! 880: ! 881: /* Catalog Manager Routines (IPI)*/ ! 882: ! 883: EXTERN_API_C( OSErr ) ! 884: CreateCatalogNode (ExtendedVCB * volume, ! 885: HFSCatalogNodeID parentID, ! 886: ConstUTF8Param name, ! 887: UInt32 nodeType, ! 888: HFSCatalogNodeID * catalogNodeID, ! 889: UInt32 * catalogHint); ! 890: ! 891: EXTERN_API_C( OSErr ) ! 892: DeleteCatalogNode (ExtendedVCB * volume, ! 893: HFSCatalogNodeID parentID, ! 894: ConstUTF8Param name, ! 895: UInt32 hint); ! 896: ! 897: EXTERN_API_C( OSErr ) ! 898: GetCatalogNode (ExtendedVCB * volume, ! 899: HFSCatalogNodeID parentID, ! 900: ConstUTF8Param name, ! 901: UInt32 hint, ! 902: FSSpec * nodeSpec, ! 903: CatalogNodeData * nodeData, ! 904: UInt32 * newHint); ! 905: ! 906: EXTERN_API_C( OSErr ) ! 907: GetCatalogOffspring (ExtendedVCB * volume, ! 908: HFSCatalogNodeID folderID, ! 909: UInt16 index, ! 910: FSSpec * spec, ! 911: CatalogNodeData * nodeData, ! 912: UInt32 * hint); ! 913: ! 914: EXTERN_API_C( OSErr ) ! 915: MoveRenameCatalogNode (ExtendedVCB * volume, ! 916: HFSCatalogNodeID srcParentID, ! 917: ConstUTF8Param srcName, ! 918: UInt32 srcHint, ! 919: HFSCatalogNodeID dstParentID, ! 920: ConstUTF8Param dstName, ! 921: UInt32 * newHint); ! 922: ! 923: #if TARGET_OS_MAC ! 924: EXTERN_API_C( OSErr ) ! 925: UpdateCatalogNode (ExtendedVCB * volume, ! 926: const CatalogNodeData * nodeData, ! 927: UInt32 catalogHint); ! 928: #else ! 929: EXTERN_API_C( OSErr ) ! 930: UpdateCatalogNode (ExtendedVCB * volume, ! 931: HFSCatalogNodeID parentID, ! 932: ConstUTF8Param name, ! 933: UInt32 catalogHint, ! 934: const CatalogNodeData * nodeData); ! 935: #endif ! 936: ! 937: EXTERN_API_C( OSErr ) ! 938: CreateFileIDRef (ExtendedVCB * volume, ! 939: HFSCatalogNodeID parentID, ! 940: ConstUTF8Param name, ! 941: UInt32 hint, ! 942: HFSCatalogNodeID * threadID); ! 943: ! 944: EXTERN_API_C( OSErr ) ! 945: ExchangeFileIDs (ExtendedVCB * volume, ! 946: ConstUTF8Param srcName, ! 947: ConstUTF8Param destName, ! 948: HFSCatalogNodeID srcID, ! 949: HFSCatalogNodeID destID, ! 950: UInt32 srcHint, ! 951: UInt32 destHint ); ! 952: ! 953: EXTERN_API_C( OSErr ) ! 954: LinkCatalogNode (ExtendedVCB * volume, ! 955: HFSCatalogNodeID parentID, ! 956: ConstUTF8Param name, ! 957: HFSCatalogNodeID linkParentID, ! 958: ConstUTF8Param linkName); ! 959: ! 960: EXTERN_API_C( SInt32 ) ! 961: CompareCatalogKeys (HFSCatalogKey * searchKey, ! 962: HFSCatalogKey * trialKey); ! 963: ! 964: EXTERN_API_C( SInt32 ) ! 965: CompareExtendedCatalogKeys (HFSPlusCatalogKey * searchKey, ! 966: HFSPlusCatalogKey * trialKey); ! 967: ! 968: EXTERN_API_C( OSErr ) ! 969: InitCatalogCache (void); ! 970: ! 971: EXTERN_API_C( void ) ! 972: InvalidateCatalogCache (ExtendedVCB * volume); ! 973: ! 974: ! 975: /* GenericMRUCache Routines*/ ! 976: EXTERN_API_C( OSErr ) ! 977: InitMRUCache (UInt32 bufferSize, ! 978: UInt32 numCacheBlocks, ! 979: Ptr * cachePtr); ! 980: ! 981: EXTERN_API_C( OSErr ) ! 982: DisposeMRUCache (Ptr cachePtr); ! 983: ! 984: EXTERN_API_C( void ) ! 985: TrashMRUCache (Ptr cachePtr); ! 986: ! 987: EXTERN_API_C( OSErr ) ! 988: GetMRUCacheBlock (UInt32 key, ! 989: Ptr cachePtr, ! 990: Ptr * buffer); ! 991: ! 992: EXTERN_API_C( void ) ! 993: InvalidateMRUCacheBlock (Ptr cachePtr, ! 994: Ptr buffer); ! 995: ! 996: EXTERN_API_C( void ) ! 997: InsertMRUCacheBlock (Ptr cachePtr, ! 998: UInt32 key, ! 999: Ptr buffer); ! 1000: ! 1001: /* MountCheck Routines*/ ! 1002: EXTERN_API_C( OSErr ) ! 1003: MountCheck (ExtendedVCB * vcb, ! 1004: UInt32 * consistencyStatus); ! 1005: ! 1006: /* BTree Manager Routines*/ ! 1007: ! 1008: typedef CALLBACK_API_C( SInt32 , KeyCompareProcPtr )(void *a, void *b); ! 1009: ! 1010: #if TARGET_OS_MAC ! 1011: EXTERN_API_C( OSErr ) ! 1012: OpenBTree (FileReference refNum, ! 1013: KeyCompareProcPtr keyCompareProc); ! 1014: #endif ! 1015: ! 1016: #if TARGET_OS_MAC ! 1017: EXTERN_API_C( OSErr ) ! 1018: CloseBTree (FileReference refNum); ! 1019: #endif ! 1020: ! 1021: #if TARGET_OS_MAC ! 1022: EXTERN_API_C( OSErr ) ! 1023: FlushBTree (FileReference refNum); ! 1024: #endif ! 1025: ! 1026: EXTERN_API_C( OSErr ) ! 1027: SearchBTreeRecord (FileReference refNum, ! 1028: const void * key, ! 1029: UInt32 hint, ! 1030: void * foundKey, ! 1031: void * data, ! 1032: UInt16 * dataSize, ! 1033: UInt32 * newHint); ! 1034: #if TARGET_OS_MAC ! 1035: EXTERN_API_C( OSErr ) ! 1036: GetBTreeRecord (FileReference refNum, ! 1037: SInt16 selectionIndex, ! 1038: void * key, ! 1039: void * data, ! 1040: UInt16 * dataSize, ! 1041: UInt32 * newHint); ! 1042: #endif ! 1043: ! 1044: EXTERN_API_C( OSErr ) ! 1045: InsertBTreeRecord (FileReference refNum, ! 1046: void * key, ! 1047: void * data, ! 1048: UInt16 dataSize, ! 1049: UInt32 * newHint); ! 1050: ! 1051: EXTERN_API_C( OSErr ) ! 1052: DeleteBTreeRecord (FileReference refNum, ! 1053: void * key); ! 1054: ! 1055: EXTERN_API_C( OSErr ) ! 1056: ReplaceBTreeRecord (FileReference refNum, ! 1057: const void * key, ! 1058: UInt32 hint, ! 1059: void * newData, ! 1060: UInt16 dataSize, ! 1061: UInt32 * newHint); ! 1062: ! 1063: /* From HFSVolumesInit.c*/ ! 1064: EXTERN_API_C( void ) ! 1065: InitBTreeHeader (UInt32 fileSize, ! 1066: UInt32 clumpSize, ! 1067: UInt16 nodeSize, ! 1068: UInt16 recordCount, ! 1069: UInt16 keySize, ! 1070: UInt32 attributes, ! 1071: UInt32 * mapNodes, ! 1072: void * buffer); ! 1073: ! 1074: /* Prototypes for big block cache*/ ! 1075: ! 1076: EXTERN_API_C( OSErr ) ! 1077: InitializeBlockCache (UInt32 blockSize, ! 1078: UInt32 blockCount); ! 1079: ! 1080: EXTERN_API_C( OSErr ) ! 1081: FlushBlockCache (void); ! 1082: ! 1083: EXTERN_API_C( OSErr ) ! 1084: GetCacheBlock (FileReference fileRefNum, ! 1085: UInt32 blockNumber, ! 1086: UInt32 blockSize, ! 1087: UInt16 options, ! 1088: LogicalAddress * buffer, ! 1089: Boolean * readFromDisk); ! 1090: ! 1091: EXTERN_API_C( OSErr ) ! 1092: ReleaseCacheBlock (LogicalAddress buffer, ! 1093: UInt16 options); ! 1094: ! 1095: EXTERN_API_C( OSErr ) ! 1096: MarkCacheBlock (LogicalAddress buffer); ! 1097: ! 1098: EXTERN_API_C( OSErr ) ! 1099: TrashCacheBlocks (FileReference fileRefNum); ! 1100: ! 1101: /* Prototypes for C->Asm glue*/ ! 1102: EXTERN_API_C( OSErr ) ! 1103: GetBlock_glue (UInt16 flags, ! 1104: UInt32 nodeNumber, ! 1105: Ptr * nodeBuffer, ! 1106: FileReference refNum, ! 1107: ExtendedVCB * vcb); ! 1108: ! 1109: EXTERN_API_C( OSErr ) ! 1110: RelBlock_glue (Ptr nodeBuffer, ! 1111: UInt16 flags); ! 1112: ! 1113: EXTERN_API_C( void ) ! 1114: MarkBlock_glue (Ptr nodeBuffer); ! 1115: ! 1116: EXTERN_API_C( OSErr ) ! 1117: C_FlushCache (ExtendedVCB * vcb, ! 1118: UInt32 flags, ! 1119: FileReference refNum); ! 1120: ! 1121: EXTERN_API_C( OSErr ) ! 1122: CacheReadInPlace (ExtendedVCB * volume, ! 1123: HIOParam * iopb, ! 1124: UInt32 currentPosition, ! 1125: UInt32 maximumBytes, ! 1126: UInt32 * actualBytes); ! 1127: ! 1128: EXTERN_API_C( void ) TrashVolumeDiskCache(ExtendedVCB * vcb); ! 1129: ! 1130: /* Prototypes for exported routines in VolumeAllocation.c*/ ! 1131: EXTERN_API_C( OSErr ) ! 1132: BlockAllocate (ExtendedVCB * vcb, ! 1133: UInt32 startingBlock, ! 1134: UInt32 bytesRequested, ! 1135: UInt32 bytesMaximum, ! 1136: Boolean forceContiguous, ! 1137: UInt32 * startBlock, ! 1138: UInt32 * actualBlocks); ! 1139: ! 1140: EXTERN_API_C( OSErr ) ! 1141: BlockDeallocate (ExtendedVCB * vcb, ! 1142: UInt32 firstBlock, ! 1143: UInt32 numBlocks); ! 1144: ! 1145: EXTERN_API_C( SInt32 ) ! 1146: BlockCheck (ExtendedVCB * vcb, ! 1147: HFSPlusExtentRecord extents); ! 1148: ! 1149: EXTERN_API_C( OSErr ) ! 1150: UpdateFreeCount (ExtendedVCB * vcb); ! 1151: ! 1152: ! 1153: EXTERN_API_C( OSErr ) ! 1154: AllocateFreeSpace (ExtendedVCB * vcb, ! 1155: UInt32 * startBlock, ! 1156: UInt32 * actualBlocks); ! 1157: ! 1158: EXTERN_API_C( UInt32 ) ! 1159: DivideAndRoundUp (UInt32 numerator, ! 1160: UInt32 denominator); ! 1161: ! 1162: EXTERN_API_C( OSErr ) ! 1163: BlockAllocateAny (ExtendedVCB * vcb, ! 1164: UInt32 startingBlock, ! 1165: UInt32 endingBlock, ! 1166: UInt32 maxBlocks, ! 1167: UInt32 * actualStartBlock, ! 1168: UInt32 * actualNumBlocks); ! 1169: ! 1170: EXTERN_API_C( void ) ! 1171: UpdateVCBFreeBlks (ExtendedVCB * vcb); ! 1172: ! 1173: /* File Extent Mapping routines*/ ! 1174: EXTERN_API_C( OSErr ) ! 1175: FlushExtentFile (ExtendedVCB * vcb); ! 1176: ! 1177: EXTERN_API_C( SInt32 ) ! 1178: CompareExtentKeys (const HFSExtentKey * searchKey, ! 1179: const HFSExtentKey * trialKey); ! 1180: ! 1181: EXTERN_API_C( SInt32 ) ! 1182: CompareExtentKeysPlus (const HFSPlusExtentKey *searchKey, ! 1183: const HFSPlusExtentKey *trialKey); ! 1184: ! 1185: EXTERN_API_C( OSErr ) ! 1186: DeleteFile (ExtendedVCB * vcb, ! 1187: HFSCatalogNodeID parDirID, ! 1188: ConstUTF8Param catalogName, ! 1189: UInt32 catalogHint); ! 1190: ! 1191: EXTERN_API_C( OSErr ) ! 1192: TruncateFileC (ExtendedVCB * vcb, ! 1193: FCB * fcb, ! 1194: UInt32 peof, ! 1195: Boolean truncateToExtent); ! 1196: ! 1197: EXTERN_API_C( OSErr ) ! 1198: ExtendFileC (ExtendedVCB * vcb, ! 1199: FCB * fcb, ! 1200: UInt32 bytesToAdd, ! 1201: UInt32 flags, ! 1202: UInt32 * actualBytesAdded); ! 1203: ! 1204: EXTERN_API_C( OSErr ) ! 1205: MapFileBlockC (ExtendedVCB * vcb, ! 1206: FCB * fcb, ! 1207: UInt32 numberOfBytes, ! 1208: UInt32 offset, ! 1209: UInt32 * startBlock, ! 1210: UInt32 * availableBytes); ! 1211: ! 1212: #if TARGET_OS_RHAPSODY ! 1213: EXTERN_API_C( Boolean ) ! 1214: NodesAreContiguous (ExtendedVCB * vcb, ! 1215: FCB * fcb, ! 1216: UInt32 nodeSize); ! 1217: #endif ! 1218: ! 1219: EXTERN_API_C( OSErr ) ! 1220: GrowParallelFCBs (void); ! 1221: ! 1222: EXTERN_API_C( void ) ! 1223: AdjustEOF (FCB * sourceFCB); ! 1224: ! 1225: EXTERN_API_C( OSErr ) ! 1226: MapLogicalToPhysical (HIOParam * pb); ! 1227: ! 1228: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM ! 1229: #pragma parameter __D0 PBMapFilePosition(__A0) ! 1230: #endif ! 1231: EXTERN_API( OSErr ) ! 1232: PBMapFilePosition (HIOParam * pb) TWOWORDINLINE(0x7051, 0xA260); ! 1233: ! 1234: /* Extended Attributes Manager routines*/ ! 1235: EXTERN_API_C( SInt32 ) ! 1236: CompareAttributeKeys (const void * searchKey, ! 1237: const void * trialKey); ! 1238: ! 1239: EXTERN_API_C( OSErr ) ! 1240: AttributesOpenVolume (ExtendedVCB * vcb); ! 1241: ! 1242: EXTERN_API_C( OSErr ) ! 1243: AttributesCloseVolume (ExtendedVCB * vcb); ! 1244: ! 1245: ! 1246: /* Utility routines*/ ! 1247: ! 1248: EXTERN_API( OSErr ) ! 1249: HFSCommunicationProc (short message, ! 1250: void * paramBlock, ! 1251: void * globalsPtr); ! 1252: ! 1253: EXTERN_API_C( void ) ! 1254: ClearMemory (void * start, ! 1255: UInt32 length); ! 1256: ! 1257: EXTERN_API_C( Boolean ) ! 1258: UnicodeBinaryCompare (ConstHFSUniStr255Param ustr1, ! 1259: ConstHFSUniStr255Param ustr2); ! 1260: ! 1261: EXTERN_API_C( Boolean ) ! 1262: PascalBinaryCompare (ConstStr31Param pstr1, ! 1263: ConstStr31Param pstr2); ! 1264: ! 1265: EXTERN_API_C( OSErr ) ! 1266: VolumeWritable (ExtendedVCB * vcb); ! 1267: ! 1268: EXTERN_API_C( void ) ! 1269: Get1stFileControlBlock (UInt16 * index, ! 1270: Ptr * fcbsH); ! 1271: ! 1272: EXTERN_API_C( Boolean ) ! 1273: GetNextFileControlBlock (UInt16 * index, ! 1274: Ptr fcbsPtr); ! 1275: ! 1276: ! 1277: /*�� Obsolete this ASM call*/ ! 1278: #if TARGET_OS_MAC ! 1279: EXTERN_API_C( ExtendedFCB *) ! 1280: ParallelFCBFromRefnum (FileReference refNum); ! 1281: #endif ! 1282: ! 1283: /* Assembly glue routines should use ints instead of shorts to be usable with SC compiler.*/ ! 1284: EXTERN_API_C( ExtendedFCB *) ! 1285: GetParallelFCB (FileReference fref); ! 1286: ! 1287: struct FindFileNameGlueRec { ! 1288: UInt32 nameLength; ! 1289: char * nameBuffer; ! 1290: ExtendedVCB * vcb; ! 1291: WDCBRec * wdcb; ! 1292: Ptr volumeBuffer; ! 1293: CatalogNodeData * data; ! 1294: HFSCatalogNodeID id; ! 1295: UInt32 hint; ! 1296: }; ! 1297: typedef struct FindFileNameGlueRec FindFileNameGlueRec; ! 1298: ! 1299: EXTERN_API_C( OSErr ) ! 1300: FindFileName (ParamBlockRec * filePB, ! 1301: FindFileNameGlueRec * ff); ! 1302: ! 1303: /* Get the current time in UTC (GMT)*/ ! 1304: EXTERN_API_C( UInt32 ) ! 1305: GetTimeUTC (void); ! 1306: ! 1307: /* Get the current local time*/ ! 1308: EXTERN_API_C( UInt32 ) ! 1309: GetTimeLocal (Boolean forHFS); ! 1310: ! 1311: EXTERN_API_C( UInt32 ) ! 1312: LocalToUTC (UInt32 localTime); ! 1313: ! 1314: EXTERN_API_C( UInt32 ) ! 1315: UTCToLocal (UInt32 utcTime); ! 1316: ! 1317: EXTERN_API_C( UInt64 ) ! 1318: U64Add (UInt64 x, ! 1319: UInt64 y); ! 1320: ! 1321: EXTERN_API_C( UInt64 ) ! 1322: U64Subtract (UInt64 left, ! 1323: UInt64 right); ! 1324: ! 1325: ! 1326: /* Volumes routines*/ ! 1327: EXTERN_API_C( OSErr ) ! 1328: FlushVolumeControlBlock (ExtendedVCB * vcb); ! 1329: ! 1330: EXTERN_API_C( OSErr ) ! 1331: CheckVolumeOffLine (ExtendedVCB * vcb); ! 1332: ! 1333: EXTERN_API_C( OSErr ) ! 1334: CloseFile (ExtendedVCB * vcb, ! 1335: SInt16 index, ! 1336: Ptr fcbs); ! 1337: ! 1338: EXTERN_API_C( OSErr ) ! 1339: FlushAlternateVolumeControlBlock (ExtendedVCB * vcb, ! 1340: Boolean isHFSPlus); ! 1341: ! 1342: EXTERN_API_C( OSErr ) ! 1343: FindDrive (short * driverRefNum, ! 1344: DrvQEl ** dqe, ! 1345: short driveNumber); ! 1346: ! 1347: EXTERN_API_C( OSErr ) ! 1348: GetVCBDriveNum (ExtendedVCB ** vcb, ! 1349: short driveNumber); ! 1350: ! 1351: EXTERN_API_C( OSErr ) ! 1352: ValidVolumeHeader (HFSPlusVolumeHeader * volumeHeader); ! 1353: ! 1354: EXTERN_API_C( void ) ! 1355: FillHFSStack (void); ! 1356: ! 1357: EXTERN_API_C( OSErr ) ! 1358: UnMountVolume (VolumeParam * volume, ! 1359: WDCBRecPtr * wdcb); ! 1360: ! 1361: EXTERN_API_C( OSErr ) ! 1362: MakeVCBsExtendedVCBs (void); ! 1363: ! 1364: #if TARGET_OS_MAC ! 1365: EXTERN_API_C( OSErr ) ! 1366: FindFileControlBlock (UInt16 * index, ! 1367: Ptr * fcbsH); ! 1368: #else /* TARGET_OS_MAC */ ! 1369: EXTERN_API_C( OSErr ) ! 1370: GetNewFCB (ExtendedVCB * vcb, ! 1371: FileReference* fRefPtr); ! 1372: #endif /* TARGET_OS_MAC */ ! 1373: ! 1374: EXTERN_API_C( FCB *) ! 1375: SetupFCB (ExtendedVCB * vcb, ! 1376: FileReference refNum, ! 1377: UInt32 fileID, ! 1378: UInt32 fileClumpSize); ! 1379: ! 1380: EXTERN_API_C( OSErr ) ! 1381: AccessBTree (ExtendedVCB * vcb, ! 1382: FileReference refNum, ! 1383: UInt32 fileID, ! 1384: UInt32 fileClumpSize, ! 1385: void * CompareRoutine); ! 1386: ! 1387: EXTERN_API_C( void ) ! 1388: RemountWrappedVolumes (void); ! 1389: ! 1390: EXTERN_API_C( OSErr ) ! 1391: CheckVolumeConsistency (ExtendedVCB * vcb); ! 1392: ! 1393: EXTERN_API_C( void ) ! 1394: HFSBlocksFromTotalSectors (UInt32 totalSectors, ! 1395: UInt32 * blockSize, ! 1396: UInt16 * blockCount); ! 1397: ! 1398: /* CreateEmbeddedVolume.c*/ ! 1399: EXTERN_API_C( OSErr ) ! 1400: CreateEmbeddedVolume (ParmBlkPtr paramBlock); ! 1401: ! 1402: ! 1403: /* Private Files SPI*/ ! 1404: ! 1405: /*���move following to FilesPriv.i*/ ! 1406: ! 1407: ! 1408: ! 1409: enum { ! 1410: /* Private HFSDispatch calls (currently implemented only in AppleShare or FileShare)*/ ! 1411: selectShare = 0x42, ! 1412: selectUnshare = 0x43, ! 1413: selectGetUGEntry = 0x44, ! 1414: selectServerControl = 0x45, ! 1415: selectServerStartup = 0x46 ! 1416: }; ! 1417: ! 1418: ! 1419: ! 1420: enum { ! 1421: /* fields for _FSControl call:*/ ! 1422: ioFSVrsn = 0x20, /* File system version*/ ! 1423: ioHQElSize = 52 /* size of a standard HFS call queue element*/ ! 1424: }; ! 1425: ! 1426: ! 1427: struct SearchPathParam { ! 1428: QElemPtr qLink; ! 1429: short qType; ! 1430: short ioTrap; ! 1431: Ptr ioCmdAddr; ! 1432: IOCompletionUPP ioCompletion; ! 1433: OSErr ioResult; ! 1434: StringPtr ioNamePtr; ! 1435: short ioVRefNum; ! 1436: short ioRefNum; ! 1437: SInt8 ioPMSPFlg; /* Flag whether to enable the PMSP*/ ! 1438: SInt8 filler1; ! 1439: Ptr ioPMSPHook; /* Pointer to PMSP hook proc*/ ! 1440: }; ! 1441: typedef struct SearchPathParam SearchPathParam; ! 1442: ! 1443: typedef SearchPathParam * SearchPathParamPtr; ! 1444: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM ! 1445: #pragma parameter __D0 FSControl(__A0) ! 1446: #endif ! 1447: EXTERN_API( OSErr ) ! 1448: FSControl (ParmBlkPtr paramBlock) TWOWORDINLINE(0x7000, 0xA260); ! 1449: ! 1450: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM ! 1451: #pragma parameter __D0 MakeEmbeddedVolume(__A0) ! 1452: #endif ! 1453: EXTERN_API( OSErr ) ! 1454: MakeEmbeddedVolume (ParmBlkPtr paramBlock) TWOWORDINLINE(0x701C, 0xA260); ! 1455: ! 1456: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM ! 1457: #pragma parameter __D0 SetPMSP(__A0) ! 1458: #endif ! 1459: EXTERN_API( OSErr ) ! 1460: SetPMSP (ParmBlkPtr paramBlock) TWOWORDINLINE(0x700C, 0xA260); ! 1461: ! 1462: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM ! 1463: #pragma parameter __D0 GetParallelFCBFromRefnum(__A0) ! 1464: #endif ! 1465: EXTERN_API( OSErr ) ! 1466: GetParallelFCBFromRefnum (ParmBlkPtr paramBlock) TWOWORDINLINE(0x7050, 0xA260); ! 1467: ! 1468: struct CreateLargeFileParam { ! 1469: /* The first several fields come from HFileInfo. */ ! 1470: QElemPtr qLink; /*queue link in header*/ ! 1471: short qType; /*type byte for safety check*/ ! 1472: short ioTrap; /*FS: the Trap*/ ! 1473: Ptr ioCmdAddr; /*FS: address to dispatch to*/ ! 1474: IOCompletionUPP ioCompletion; /*completion routine addr (0 for synch calls)*/ ! 1475: OSErr ioResult; /*result code*/ ! 1476: StringPtr ioNamePtr; /*ptr to Vol:FileName string*/ ! 1477: short ioVRefNum; /*volume refnum (DrvNum for Eject and MountVol)*/ ! 1478: short ioFRefNum; ! 1479: SInt8 ioFVersNum; ! 1480: SInt8 filler1; ! 1481: short ioFDirIndex; ! 1482: SInt8 ioFlAttrib; ! 1483: SInt8 ioACUser; ! 1484: FInfo ioFlFndrInfo; ! 1485: long ioDirID; ! 1486: ! 1487: /* The rest of these fields are specific to the PBCreateLargeFile call. */ ! 1488: UInt64 dataLogicalEOF; ! 1489: UInt64 dataPhysicalEOF; ! 1490: UInt64 rsrcLogicalEOF; ! 1491: UInt64 rsrcPhysicalEOF; ! 1492: }; ! 1493: typedef struct CreateLargeFileParam CreateLargeFileParam; ! 1494: ! 1495: EXTERN_API_C( OSErr ) ! 1496: CreateLargeFile (CreateLargeFileParam * pb); ! 1497: ! 1498: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM ! 1499: #pragma parameter __D0 PBCreateLargeFile(__A0) ! 1500: #endif ! 1501: EXTERN_API( OSErr ) ! 1502: PBCreateLargeFile (CreateLargeFileParam * paramBlock) TWOWORDINLINE(0x7064, 0xA260); ! 1503: ! 1504: EXTERN_API_C( OSErr ) ! 1505: LongRename (CMovePBRec * pb); ! 1506: ! 1507: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM ! 1508: #pragma parameter __D0 PBLongRenameSync(__A0) ! 1509: #endif ! 1510: EXTERN_API( OSErr ) ! 1511: PBLongRenameSync (CMovePBRec * paramBlock) TWOWORDINLINE(0x701E, 0xA260); ! 1512: ! 1513: struct AttributeParam { ! 1514: QElemPtr qLink; ! 1515: short qType; ! 1516: short ioTrap; ! 1517: Ptr ioCmdAddr; ! 1518: ProcPtr ioCompletion; /* --> A pointer to a completion routine */ ! 1519: OSErr ioResult; /* --> The result code of the function */ ! 1520: StringPtr ioNamePtr; /* --> Pointer to pathname to object */ ! 1521: short ioVRefNum; /* --> A volume specification */ ! 1522: long filler1; ! 1523: long filler2; ! 1524: Ptr ioBuffer; ! 1525: unsigned long ioReqCount; ! 1526: unsigned long ioActCount; ! 1527: HFSUniStr255 * ioAttributeName; /* --> A pointer to the attribute name buffer */ ! 1528: long ioDirID; /* --> A directory ID */ ! 1529: }; ! 1530: typedef struct AttributeParam AttributeParam; ! 1531: ! 1532: EXTERN_API_C( OSErr ) ! 1533: CreateAttribute (AttributeParam * pb); ! 1534: ! 1535: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM ! 1536: #pragma parameter __D0 PBCreateAttributeSync(__A0) ! 1537: #endif ! 1538: EXTERN_API( OSErr ) ! 1539: PBCreateAttributeSync (AttributeParam * paramBlock) TWOWORDINLINE(0x7065, 0xA260); ! 1540: ! 1541: ! 1542: #if PRAGMA_STRUCT_ALIGN ! 1543: #pragma options align=reset ! 1544: #elif PRAGMA_STRUCT_PACKPUSH ! 1545: #pragma pack(pop) ! 1546: #elif PRAGMA_STRUCT_PACK ! 1547: #pragma pack() ! 1548: #endif ! 1549: ! 1550: #ifdef PRAGMA_IMPORT_OFF ! 1551: #pragma import off ! 1552: #elif PRAGMA_IMPORT ! 1553: #pragma import reset ! 1554: #endif ! 1555: ! 1556: #ifdef __cplusplus ! 1557: } ! 1558: #endif ! 1559: ! 1560: #endif /* __FILEMGRINTERNAL__ */ ! 1561:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.