Annotation of XNU/bsd/hfs/hfscommon/headers/FileMgrInternal.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:        File:           FilesInternal.h
                     24: 
                     25:        Contains:       IPI for File Manager (HFS Plus)
                     26: 
                     27:        Version:        HFS Plus 1.0
                     28: 
                     29:        Copyright:      � 1996-1999 by Apple Computer, Inc., all rights reserved.
                     30: 
                     31:        File Ownership:
                     32: 
                     33:                DRI:                            Don Brady
                     34: 
                     35:                Other Contacts:         Mark Day, Deric horn, Jim Luther
                     36: 
                     37:                Technology:                     File Systems
                     38: 
                     39:        Writers:
                     40: 
                     41:                (JL)    Jim Luther
                     42:                (msd)   Mark Day
                     43:                (djb)   Don Brady
                     44:                (DSH)   Deric Horn
                     45: 
                     46:        Change History (most recent first):
                     47:          <MOSXS>        9/12/99        ser     Removed FCBs.
                     48:          <MOSX>          9/9/99        pwd     Fixed some VCB fields to be unsigned instead of signed to align
                     49:                                                                the definitions with the MDB/volume header and actual use [#2355889].
                     50:          <MOSXS>         9/3/99        ser     Added kUndefinedStrLen.
                     51:          <MOSXS>         6/3/99        djb     Removed unused/legacy vcb fields from ExtendedVCB.
                     52:          <MOSXS>       11/20/98        djb     Add support for UTF-8 names.
                     53:          <MOSXS>        8/31/98        djb     Added boolean flag to GetTimeLocal prototype.
                     54:          <MOSXS>        6/30/98        djb     Add NodesAreContiguous prototype (for radar #2249539).
                     55:          <MOSXS>        6/22/98        djb     Add ERR_BASE to error codes to make them negative (for MacOS X only).
                     56:                                                Replace DeallocFile prototype with DeleteFile prototype.
                     57:          <MOSXS>         6/5/98        djb     Added CreateFileIDRef prototype;
                     58:          <MOSXS>         6/3/98        djb     Add MoveRenameCatalogNode prototype (replaces seperate Move and Rename).
                     59:          <MOSXS>        4/17/98        djb     Add VCB locking.
                     60:          <MOSXS>         4/6/98        djb     Removed CreateVolumeCatalogCache and DisposeVolumeCatalogCache (obsolete).
                     61:          <MOSXS>         4/2/98        djb     UpdateCatalogNode now takes parID and name as input.
                     62:          <MOSXS>        3/31/98        djb     Sync up with final HFSVolumes.h header file.
                     63:          <MOSXS>        3/17/98        djb     Fixed CreateCatalogNode interface to take kCatalogFolderNode and
                     64:                                                kCatalogFileNode as type input.
                     65: 
                     66:          <CS30>         1/29/98        DSH             Added TrashVolumeDiskCache prototype for TrashAllFSCaches API
                     67:                                                                        support.
                     68:          <CS29>        12/10/97        DSH             2201501, Overload the NodeData valence field for over 2 Gig file
                     69:                                                                        support.
                     70:          <CS28>        11/18/97        DSH             Conditionalize ou BlockCameFromDisk() macro for DFA
                     71:          <CS27>        11/16/97        djb             LockMappingTable is now defined in UnicodeConverterPriv.i.
                     72:          <CS26>        11/13/97        djb             Move CatalogIterator struct to CatalogPrivate.h. Include
                     73:                                                                        UnicodeConverter.i instead of Unicode.i.
                     74:          <CS25>         11/3/97        JL              #2001483 - changed UnMountVolume's prototype.
                     75:                <24>    10/31/97        DSH             Added consistencyStatus parameter to MountCheck.
                     76:          <CS23>        10/21/97        DSH             Interfacer tweak
                     77:          <CS22>        10/21/97        DSH             Conditionalize LMGetFCBTable, LMGetFSVars for DFA to call
                     78:                                                                        through DFAs LowMem accessors.
                     79:          <CS21>        10/20/97        msd             Add a bytesMaximum parameter to BlockAllocate; removed fcb
                     80:                                                                        parameter.
                     81:          <CS20>        10/19/97        msd             Bug 1684586. Remove the modifyDate field from CatalogNodeDate.
                     82:                                                                        GetCatInfo and SetCatInfo use only contentModDate.
                     83:          <CS19>        10/16/97        djb             Add LMGetFSVars and LMGetFCBTable macros, add gBlockCacheDirty
                     84:                                                                        to FSVars, simplified HFS Stack swapping macros.
                     85:          <CS18>        10/13/97        DSH             Added InitBTreeHeader prototype
                     86:          <CS17>        10/13/97        djb             Add volumeNameEncodingHint to VCB, add textEncoding to
                     87:                                                                        CatalogNodeData, add gTextEncodingFontName to FSVars.
                     88:          <CS16>         10/1/97        DSH             Added CheckVolumeConsistency() for 1682475.
                     89:          <CS15>         10/1/97        djb             New Catalog iterators and Catalog node cache SPI.
                     90:          <CS14>         9/17/97        DSH             Moved prototype HFSBlocksFromTotalSectors() here for DFA
                     91:                                                                        wrapperless volume support.
                     92:          <CS13>         9/16/97        msd             Add a field to FSVarsRec to store old WriteXParam address.
                     93:          <CS12>         9/15/97        djb             Add gBootPToUTable to FSVars (used to bootstrap Unicode).
                     94:          <CS11>          9/7/97        djb             Add FlushBlockCache prototype.
                     95:          <CS10>          9/4/97        djb             Add cmParentNotFound error code and reportMissingParent bit.
                     96:           <CS9>          9/4/97        msd             Remove unused attributes calls. Rename PropertyCloseVolume to
                     97:                                                                        AttributesCloseVolume. In CatalogNodeData, replace
                     98:                                                                        attributeModDate with modifyDate. Remove macro LatestModDate.
                     99:           <CS8>         8/22/97        djb             Add readFromDisk flag to GetCacheBlock and BlockCameFromDisk
                    100:                                                                        macro.
                    101:           <CS7>         8/18/97        DSH             Override ASM cache accessing routines for DFA to use DFA cache.
                    102:           <CS6>         7/28/97        msd             Add prototypes for CacheReadInPlace, RemountWrappedVolumes.
                    103:           <CS5>         7/25/97        DSH             Added GenericMRUCache Routines
                    104:           <CS4>         7/22/97        msd             In CatalogNodeData, move attributeModDate after backupDate; this
                    105:                                                                        allows SetCatInfo to manipulate the rest of the dates in one
                    106:                                                                        block, the same as in the parameter block.
                    107:           <CS3>         7/21/97        djb             Add more instrumentation globals (CallProfile). Reallign FSVars.
                    108:           <CS2>         7/18/97        msd             Selector for PBCreateAttribute conflicts with PBGetXCatInfo. The
                    109:                                                                        attribute calls now have selectors in the range $65..$69.
                    110:           <CS1>         7/16/97        DSH             first checked in
                    111:          <CS23>          7/8/97        DSH             Added LockMappingTable() until its moved into the Unicode header
                    112:                                                                        files.
                    113:          <CS22>          7/7/97        DSH             Taking out changes made in HFS <45> for greater compatability
                    114:                                                                        with the Tempo installer.
                    115:          <CS21>         6/27/97        msd             Add PBLongRename SPI. Add prototype for
                    116:                                                                        RenameCatalogNodeUnicode.
                    117:          <CS20>         6/26/97        DSH             Conditionalized macro LocalToUTC to not look at FSVars for DFA.
                    118:          <CS19>         6/25/97        msd             Add prototype for HFSCommunicationProc.
                    119:          <CS18>         6/24/97        DSH             Adding runtime flags to deturmine unicode usage and installation
                    120:                                                                        status.
                    121:          <CS17>         6/24/97        djb             Add linkCount to CatalogNodeData. Add LinkCatalogNode prototype.
                    122:                                                                        Move Private Catalog Manager prototypes to CatalogPrivate.h.
                    123:          <CS16>         6/20/97        msd             Add prototype for CopyCatalogNodeData. In CatalogNodeData,
                    124:                                                                        replaced modifyDate with contentModDate and attributeModDate.
                    125:                                                                        Added a LatestModDate macro.
                    126:                <15>     6/18/97        djb             Add mask to ConversionContext. Add encodingsBitmap to VCB (and
                    127:                                                                        reallign some fields). Add gInstalledEncodings to FSVars.
                    128:          <CS14>         6/17/97        msd             The conversions between local time and UTC have the sign of the
                    129:                                                                        offset backwards.
                    130:          <CS13>         6/13/97        djb             Removed PrepareOutputName. Changed parameters for
                    131:                                                                        DeleteCatalogNode, MoveCatalogNode, PrepareInputName. Add
                    132:                                                                        private catalog macros.
                    133:          <CS12>         6/12/97        msd             Export BlockAllocateAny and UpdateVCBFreeBlks.
                    134:          <CS11>         6/12/97        msd             Add a parameter block and prototype for an SPI to create very
                    135:                                                                        large files.
                    136:          <CS10>          6/9/97        msd             Add an offsetToUTC field to FSVarsRec. Add prototypes for
                    137:                                                                        GetTimeUTC and GetTimeLocal; add macros for LocalToUTC and
                    138:                                                                        UTCToLocal.
                    139:           <CS9>          6/5/97        msd             Add MapLogicalToPhysical (internal routine), PBMapFilePosition
                    140:                                                                        for external use.
                    141:           <CS8>          6/4/97        djb             More Unicode converter changes (support for non roman scripts).
                    142:           <CS7>          6/2/97        msd             Add prototype for AdjustEOF.
                    143:           <CS6>         5/28/97        msd             Add prototypes for attributes SPI, both internal routines and PB
                    144:                                                                        calls. Add FindFileNameGlueRec and FindFileName routine.
                    145:                                                                        Prototypes for FindFileControlBlock and AccessBTree disappeared,
                    146:                                                                        so added again.
                    147:           <CS5>         5/20/97        DSH             Including LowMemPriv.a in DFA compiles
                    148:           <CS4>         5/19/97        djb             Add uppLockMappingTable to FSVars.
                    149:           <CS3>         5/19/97        djb             Add CreateVolumeCatalogCache and DisposeVolumeCatalogCache
                    150:                                                                        prototypes. Remove private CatalogDataCache structure.
                    151:           <CS2>         5/16/97        msd             Use fixed-size integers for GetBlock_glue and RelBlock_glue so
                    152:                                                                        it will build with compilers other than MPW C and SC. Add
                    153:                                                                        prototype for FillHFSStack, UnMountVolume, and
                    154:                                                                        MakeVCBsExtendedVCBs from VolumeRequests.c. Add prototypes for
                    155:                                                                        CreateEmbeddedVolume and InitUnicodeConverter.
                    156:           <CS1>          5/9/97        djb             first checked in
                    157:           <CS2>          5/7/97        djb             Add summary trace data. Shrink FSVars.later to 4 longs.
                    158:           <CS1>         4/28/97        djb             first checked in
                    159: 
                    160: */
                    161: #ifndef __FILEMGRINTERNAL__
                    162: #define __FILEMGRINTERNAL__
                    163: 
                    164: #include <sys/param.h>
                    165: #include <sys/vnode.h>
                    166: 
                    167: #include "../../hfs.h"
                    168: #include "../../hfs_macos_defs.h"
                    169: #include "../../hfs_format.h"
                    170: 
                    171: 
                    172: #if PRAGMA_ONCE
                    173: #pragma once
                    174: #endif
                    175: 
                    176: #ifdef __cplusplus
                    177: extern "C" {
                    178: #endif
                    179: 
                    180: #if PRAGMA_IMPORT
                    181: #pragma import on
                    182: #endif
                    183: 
                    184: #if PRAGMA_STRUCT_ALIGN
                    185:        #pragma options align=mac68k
                    186: #elif PRAGMA_STRUCT_PACKPUSH
                    187:        #pragma pack(push, 2)
                    188: #elif PRAGMA_STRUCT_PACK
                    189:        #pragma pack(2)
                    190: #endif
                    191: 
                    192: /* CatalogNodeID is used to track catalog objects */
                    193: typedef UInt32         HFSCatalogNodeID;
                    194: 
                    195: /* internal error codes*/
                    196: 
                    197: #if TARGET_API_MACOS_X
                    198:   #define ERR_BASE     -32767
                    199: #else
                    200:   #define ERR_BASE     0
                    201: #endif
                    202: 
                    203: enum {
                    204:                                                                                                                                /* FXM errors*/
                    205:        fxRangeErr                                      = ERR_BASE + 16,                                /* file position beyond mapped range*/
                    206:        fxOvFlErr                                       = ERR_BASE + 17,                                /* extents file overflow*/
                    207:                                                                                                                                /* Unicode errors*/
                    208:        uniTooLongErr                           = ERR_BASE + 24,                                /* Unicode string too long to convert to Str31*/
                    209:        uniBufferTooSmallErr            = ERR_BASE + 25,                                /* Unicode output buffer too small*/
                    210:        uniNotMappableErr                       = ERR_BASE + 26,                                /* Unicode string can't be mapped to given script*/
                    211:                                                                                                                                /* BTree Manager errors*/
                    212:        btNotFound                                      = ERR_BASE + 32,                                /* record not found*/
                    213:        btExists                                        = ERR_BASE + 33,                                /* record already exists*/
                    214:        btNoSpaceAvail                          = ERR_BASE + 34,                                /* no available space*/
                    215:        btNoFit                                         = ERR_BASE + 35,                                /* record doesn't fit in node */
                    216:        btBadNode                                       = ERR_BASE + 36,                                /* bad node detected*/
                    217:        btBadHdr                                        = ERR_BASE + 37,                                /* bad BTree header record detected*/
                    218:        dsBadRotate                                     = ERR_BASE + 64,                                /* bad BTree rotate*/
                    219:                                                                                                                                /* Catalog Manager errors*/
                    220:        cmNotFound                                      = ERR_BASE + 48,                                /* CNode not found*/
                    221:        cmExists                                        = ERR_BASE + 49,                                /* CNode already exists*/
                    222:        cmNotEmpty                                      = ERR_BASE + 50,                                /* directory CNode not empty (valence = 0)*/
                    223:        cmRootCN                                        = ERR_BASE + 51,                                /* invalid reference to root CNode*/
                    224:        cmBadNews                                       = ERR_BASE + 52,                                /* detected bad catalog structure*/
                    225:        cmFThdDirErr                            = ERR_BASE + 53,                                /* thread belongs to a directory not a file*/
                    226:        cmFThdGone                                      = ERR_BASE + 54,                                /* file thread doesn't exist*/
                    227:        cmParentNotFound                        = ERR_BASE + 55,                                /* CNode for parent ID does not exist*/
                    228:                                                                                                                                /* TFS internal errors*/
                    229:        fsDSIntErr                                      = -127                                                  /* Internal file system error*/
                    230: };
                    231: 
                    232: 
                    233: /* internal flags*/
                    234: 
                    235: 
                    236: enum {
                    237:                                                                                                                                /* File System busy flag:*/
                    238:                                                                                                                                /* Bit zero of FSBusy (lomem $360) is true when the file system is running.*/
                    239:                                                                                                                                /* The word at $360 is cleared when the file system is exited. The*/
                    240:                                                                                                                                /* bits defined here are for additional flags in the FSBusy word that are*/
                    241:                                                                                                                                /* valid only when the file system is running.*/
                    242:        fsBusyBit                                       = 0,                                                    /* file system is running; other FSBusy bits are valid*/
                    243:        fsSCSIDefer                                     = 1,                                                    /* file system is waiting for SCSI transaction to complete*/
                    244:        fsIntMaskDefer                          = 2,                                                    /* file system is waiting until the interrupt mask is lowered*/
                    245:                                                                                                                                /* Flag bits in HFSFlags byte:*/
                    246:        hfsReq                                          = 0,                                                    /* Set if request is specific to HFS*/
                    247:        dirCN                                           = 1,                                                    /* Set if a CNode is a directory*/
                    248:        reportMissingParent                     = 4,                                                    /* tell Catalog to report missing parents (used by MakeFSSpec)*/
                    249:        skipPMSP                                        = 5,                                                    /* Set to skip PMSP setup (one-shot)*/
                    250:        noPMSP                                          = 6,                                                    /* Set to disable PMSP completely (status flag)*/
                    251:        hfsContd                                        = 7,                                                    /* Set if Async trap is continued*/
                    252:                                                                                                                                /* fsFlags values*/
                    253:        fsNoAllocate                            = 0,
                    254:        fsNoAllocateMask                        = 0x01,                                                 /* true when allocating memory is a very bad idea*/
                    255:        fsNeedFCBs                                      = 1,
                    256:        fsNeedFCBsMask                          = 0x02,                                                 /* true when a local FCB couldn't be found      */
                    257:        fsNoFCBExpansion                        = 2,
                    258:        fsNoFCBExpansionMask            = 0x04,                                                 /* true if no FCB expansion logic is desired*/
                    259:                                                                                                                                /*      ExtendFile option flags*/
                    260:                                                                                                                                /*      extendFileAllBit                        = 0,                            |* allocate all requested bytes or none *|*/
                    261:                                                                                                                                /*      extendFileAllMask                       = 0x0001,*/
                    262:                                                                                                                                /*      */
                    263:                                                                                                                                /*      extendFileContigBit                     = 1,                            |* force contiguous allocation *|*/
                    264:                                                                                                                                /*      extendFileContigMask            = 0x0002*/
                    265:        kEFContigBit                            = 1,                                                    /*      force contiguous allocation*/
                    266:        kEFContigMask                           = 0x02,
                    267:        kEFAllBit                                       = 0,                                                    /*      allocate all requested bytes or none*/
                    268:        kEFAllMask                                      = 0x01,                                                 /*      TruncateFile option flags*/
                    269:        kTFTrunExtBit                           = 0,                                                    /*      truncate to the extent containing new PEOF*/
                    270:        kTFTrunExtMask                          = 1
                    271: };
                    272: 
                    273: enum {
                    274:        kUndefinedStrLen                        = 0                                                             /* Unknown string length */
                    275: };
                    276: 
                    277: enum {
                    278:        HFSStkLen                                       = 1792,                                                 /* old stack size (pre HFS Plus)*/
                    279:        kFileSystemStackSlop            = 16,                                                   /* additional temporary space*/
                    280:        kFileSystemStackSize            = 16384,                                                /* give us more breathing room*/
                    281:        kFileSystemVersion                      = FOUR_CHAR_CODE('2.0A'),               /* current file system version*/
                    282:                                                                                                                                /*      31744 = $7C00, a nice round number close to*/
                    283:                                                                                                                                /*      (32767*1000)/1024, which is about the largest */
                    284:                                                                                                                                /*      free space unsuspecting, decimal-K minded apps*/
                    285:                                                                                                                                /*      might be expected to handle.*/
                    286:                                                                                                                                /*      AlBlkLim*/
                    287:        kMaxHFSAllocationBlocks         = 31744,
                    288:        WDRfnMin                                        = -32767,                                               /* lowest assigned WD RefNum*/
                    289:        WDRfnMax                                        = -4096,                                                /* largest possible WDrefnum*/
                    290:        kFirstFileRefnum                        = 2,                                                    /* smallest FCB refnum*/
                    291:        kNoHint                                         = 0
                    292: };
                    293: 
                    294: 
                    295: /* Internal LowMem pointers*/
                    296: 
                    297: /*�� The following should really be in LowMemPriv.i*/
                    298: 
                    299: enum {
                    300:        FSCallAsync                                     = 0x0342,                                               /*      ONE BYTE FREE*/
                    301:        NoEject                                         = 0x034B,                                               /* used by Eject and Offline*/
                    302:        CacheFlag                                       = 0x0377,
                    303:        SysBMCPtr                                       = 0x0378,                                               /* System-wide bitmap cache pointer*/
                    304:        SysCtlCPtr                                      = 0x0380,                                               /* System-wide control cache pointer*/
                    305:        HFSDSErr                                        = 0x0392,                                               /* Final gasp - error that caused IOErr.*/
                    306:        LMParamBlock                            = 0x03A4,                                               /* LMGetParams() just gives us a copy of it*/
                    307:        FSVarsPtr                                       = 0x0BB8,                                               /* lomem that points to file system variable block*/
                    308:        CacheVars                                       = 0x0394,
                    309:        HFSStkPtr                                       = 0x036E,                                               /* Temporary location of HFS Stack pointer*/
                    310:        FSIOErr                                         = 0x03DE,                                               /* last I/O error (NEXT WORD FREE)*/
                    311:                                                                                                                                /* file manager vectors not found in LowMemPriv.i*/
                    312:        JUpdAltMDB                                      = (0xED) * 4 + 0x0400,                  /* ($A0ED) $0400 is n/OSTable*/
                    313:        JCkExtFS                                        = (0xEE) * 4 + 0x0400,                  /* ($A0EE) $0400 is n/OSTable*/
                    314:        JBMChk                                          = (0xF0) * 4 + 0x0400,                  /* ($A0F0) $0400 is n/OSTable*/
                    315:        JTstMod                                         = (0xF1) * 4 + 0x0400,                  /* ($A0F1) $0400 is n/OSTable*/
                    316:        JLocCRec                                        = (0xF2) * 4 + 0x0400,                  /* ($A0F2) $0400 is n/OSTable*/
                    317:        JTreeSearch                                     = (0xF3) * 4 + 0x0400,                  /* ($A0F3) $0400 is n/OSTable*/
                    318:        JMapFBlock                                      = (0xF4) * 4 + 0x0400,                  /* ($A0F4) $0400 is n/OSTable*/
                    319:        JXFSearch                                       = (0xF5) * 4 + 0x0400,                  /* ($A0F5) $0400 is n/OSTable*/
                    320:        JReadBM                                         = (0xF6) * 4 + 0x0400                   /* ($A0F6) $0400 is n/OSTable*/
                    321: };
                    322: 
                    323: 
                    324: /* Poor Man's Search Path*/
                    325: 
                    326: struct SearchPathHeader {
                    327:        Ptr                                                     PMSPHook;                                       /* Hook for PMSP modification*/
                    328:        short                                                   PMSPIndx;                                       /* Index to PMSP index from start of PMSP*/
                    329: };
                    330: typedef struct SearchPathHeader SearchPathHeader;
                    331: 
                    332: struct SearchPathEntry {
                    333:        short                                                   spVRefNum;                                      /* VRefNum in PMSP entry*/
                    334:        UInt32                                                  spDirID;                                        /* Directory ID in PMSP entry*/
                    335: };
                    336: typedef struct SearchPathEntry SearchPathEntry;
                    337: 
                    338: 
                    339: enum {
                    340:        kPoorMansSearchIndex            = -2,
                    341:        MaxDVCnt                                        = 8,                                                    /* Leave room for 8 default VRefNums*/
                    342:        PMSPSize                                        = MaxDVCnt * sizeof(SearchPathEntry) + sizeof(SearchPathHeader) + 2
                    343: };
                    344: 
                    345: 
                    346: 
                    347: enum {
                    348:        fsWDCBExtendCount                       = 8,                                                    /* # of WDCB's to add when we run out*/
                    349:                                                                                                                                /*      FileIDs variables*/
                    350:        kNumExtentsToCache                      = 4                                                             /*      just guessing for ExchangeFiles*/
                    351: };
                    352: 
                    353: 
                    354: enum {
                    355:        kInvalidMRUCacheKey                     = -1L,                                                  /* flag to denote current MRU cache key is invalid*/
                    356:        kDefaultNumMRUCacheBlocks       = 16                                                    /* default number of blocks in each cache*/
                    357: };
                    358: 
                    359: 
                    360: /* Universal Extent Key */
                    361: 
                    362: union ExtentKey {
                    363:        HFSExtentKey                                    hfs;
                    364:        HFSPlusExtentKey                                hfsPlus;
                    365: };
                    366: typedef union ExtentKey                                        ExtentKey;
                    367: /* Universal extent descriptor */
                    368: 
                    369: union ExtentDescriptor {
                    370:        HFSExtentDescriptor                     hfs;
                    371:        HFSPlusExtentDescriptor                 hfsPlus;
                    372: };
                    373: typedef union ExtentDescriptor                 ExtentDescriptor;
                    374: /* Universal extent record */
                    375: 
                    376: union ExtentRecord {
                    377:        HFSExtentRecord                                 hfs;
                    378:        HFSPlusExtentRecord                     hfsPlus;
                    379: };
                    380: typedef union ExtentRecord                             ExtentRecord;
                    381: /* Universal catalog key */
                    382: 
                    383: union CatalogKey {
                    384:        HFSCatalogKey                                   hfs;
                    385:        HFSPlusCatalogKey                               hfsPlus;
                    386: };
                    387: typedef union CatalogKey                               CatalogKey;
                    388: /* Universal catalog data record */
                    389: 
                    390: union CatalogRecord {
                    391:        SInt16                                                  recordType;
                    392:        HFSCatalogFolder                                hfsFolder;
                    393:        HFSCatalogFile                                  hfsFile;
                    394:        HFSCatalogThread                                hfsThread;
                    395:        HFSPlusCatalogFolder                    hfsPlusFolder;
                    396:        HFSPlusCatalogFile                              hfsPlusFile;
                    397:        HFSPlusCatalogThread                    hfsPlusThread;
                    398: };
                    399: typedef union CatalogRecord                            CatalogRecord;
                    400: 
                    401: 
                    402: enum {
                    403:        CMMaxCName                                      = kHFSMaxFileNameChars
                    404: };
                    405: 
                    406: 
                    407: enum {
                    408:        vcbMaxNam                                       = 27,                                                   /* volumes currently have a 27 byte max name length*/
                    409:                                                                                                                                /* VCB flags*/
                    410:        vcbManualEjectMask                      = 0x0001,                                               /* bit 0        manual-eject bit: set if volume is in a manual-eject drive*/
                    411:        vcbFlushCriticalInfoMask        = 0x0002,                                               /* bit 1        critical info bit: set if critical MDB information needs to flush*/
                    412:                                                                                                                                /*      IoParam->ioVAtrb*/
                    413:        kDefaultVolumeMask                      = 0x0020,
                    414:        kFilesOpenMask                          = 0x0040
                    415: };
                    416: 
                    417: 
                    418: /* Catalog Node Data - universal data returned from the Catalog Manager*/
                    419: 
                    420: 
                    421: enum {
                    422:        xFFFilAttrLockMask                      = 0x70
                    423: };
                    424: 
                    425: /*     valence is overloaded for files and used as additional flags. 2201501*/
                    426: 
                    427: enum {
                    428:        kLargeDataForkMask                      = 0x00000001,
                    429:        kLargeRsrcForkMask                      = 0x00000002
                    430: };
                    431: 
                    432: /* Universal catalog name*/
                    433: 
                    434: union CatalogName {
                    435:        Str31                                                   pstr;
                    436:        HFSUniStr255                                    ustr;
                    437: };
                    438: typedef union CatalogName CatalogName;
                    439: 
                    440: /* Unicode Conversion*/
                    441: 
                    442: 
                    443: enum {
                    444:        kMacBaseEncodingCount           = 50,
                    445:        kTextEncodingUndefined          = 0x00007FFF
                    446: };
                    447: 
                    448: struct ConversionContext {
                    449:        TextToUnicodeInfo                               toUnicode;
                    450:        UnicodeToTextInfo                               fromUnicode;
                    451: };
                    452: typedef struct ConversionContext ConversionContext;
                    453: 
                    454: struct CallProfile {
                    455:        UInt16                                                  refCount;
                    456:        UInt16                                                  errCount;
                    457:        UInt32                                                  callCount;
                    458:        UInt32                                                  minTime;
                    459:        UInt32                                                  maxTime;
                    460:        UInt64                                                  totalTime;
                    461:        UInt64                                                  startBase;                                      /* in nanoseconds*/
                    462: };
                    463: typedef struct CallProfile CallProfile;
                    464: 
                    465: 
                    466: struct FSVarsRec {
                    467:        UInt32                                                  gDefaultBaseEncoding;
                    468:        ItemCount                                               gInstalledEncodings;
                    469:        ConversionContext                               gConversionContext[50];
                    470:        Ptr                                                     gBootPToUTable;                         /* used by boot code to find Extensions folder*/
                    471:        StringPtr                                               gTextEncodingFontName;          /* points to font name (only used when no HFS Plus volumes have been mounted)*/
                    472:        Boolean                                                 gUseDynamicUnicodeConverters;
                    473:        Boolean                                                 gIsUnicodeInstalled;
                    474: };
                    475: typedef struct FSVarsRec FSVarsRec;
                    476: 
                    477: 
                    478: 
                    479: /*
                    480:  * MacOS accessor routines
                    481:  */
                    482: #define GetFileControlBlock(fref)                      ((FCB *)((fref)->v_data))
                    483: #define GetFileRefNumFromFCB(filePtr)          ((filePtr)->h_vp)
                    484: 
                    485: 
                    486: EXTERN_API_C( Boolean )
                    487: BlockCameFromDisk                              (void);
                    488: 
                    489: /*     The following macro marks a VCB as dirty by setting the upper 8 bits of the flags*/
                    490: EXTERN_API_C( void )
                    491: MarkVCBDirty                                   (ExtendedVCB *vcb);
                    492: 
                    493: EXTERN_API_C( void )
                    494: MarkVCBClean                                   (ExtendedVCB *vcb);
                    495: 
                    496: EXTERN_API_C( Boolean )
                    497: IsVCBDirty                                             (ExtendedVCB *vcb);
                    498: 
                    499: 
                    500: #define VCB_LOCK_INIT(vcb)             simple_lock_init(&vcb->vcbSimpleLock)
                    501: #define VCB_LOCK(vcb)                  simple_lock(&vcb->vcbSimpleLock)
                    502: #define VCB_UNLOCK(vcb)                        simple_unlock(&vcb->vcbSimpleLock)
                    503: 
                    504: #define        MarkVCBDirty(vcb)               { VCB_LOCK((vcb)); ((vcb)->vcbFlags |= 0xFF00); VCB_UNLOCK((vcb)); }
                    505: #define        MarkVCBClean(vcb)               { VCB_LOCK((vcb)); ((vcb)->vcbFlags &= 0x00FF); VCB_UNLOCK((vcb)); }
                    506: #define        IsVCBDirty(vcb)                 ((Boolean) ((vcb->vcbFlags & 0xFF00) != 0))
                    507: 
                    508: 
                    509: /*     Test for error and return if error occurred*/
                    510: EXTERN_API_C( void )
                    511: ReturnIfError                                  (OSErr                                  result);
                    512: 
                    513: #define        ReturnIfError(result)                                   if ( (result) != noErr ) return (result); else ;
                    514: /*     Test for passed condition and return if true*/
                    515: EXTERN_API_C( void )
                    516: ReturnErrorIf                                  (Boolean                                condition,
                    517:                                                                 OSErr                                  result);
                    518: 
                    519: #define        ReturnErrorIf(condition, error)                 if ( (condition) )      return( (error) );
                    520: /*     Exit function on error*/
                    521: EXTERN_API_C( void )
                    522: ExitOnError                                            (OSErr                                  result);
                    523: 
                    524: #define        ExitOnError( result )                                   if ( ( result ) != noErr )      goto ErrorExit; else ;
                    525: /*     Return the low 16 bits of a 32 bit value, pinned if too large*/
                    526: EXTERN_API_C( UInt16 )
                    527: LongToShort                                            (UInt32                                 l);
                    528: 
                    529: #define        LongToShort( l )        l <= (UInt32)0x0000FFFF ? ((UInt16) l) : ((UInt16) 0xFFFF)
                    530: 
                    531: 
                    532: /* Catalog Manager Routines (IPI)*/
                    533: 
                    534: EXTERN_API_C( OSErr )
                    535: CreateCatalogNode                              (ExtendedVCB *                  volume,
                    536:                                                                 HFSCatalogNodeID               parentID,
                    537:                                                                 ConstUTF8Param                 name,
                    538:                                                                 UInt32                                 nodeType,
                    539:                                                                 HFSCatalogNodeID *             catalogNodeID,
                    540:                                                                 UInt32 *                               catalogHint);
                    541: 
                    542: EXTERN_API_C( OSErr )
                    543: DeleteCatalogNode                              (ExtendedVCB *                  volume,
                    544:                                                                 HFSCatalogNodeID               parentID,
                    545:                                                                 ConstUTF8Param                 name,
                    546:                                                                 UInt32                                 hint);
                    547: 
                    548: EXTERN_API_C( OSErr )
                    549: GetCatalogNode                                 (ExtendedVCB *                  volume,
                    550:                                                                 HFSCatalogNodeID               parentID,
                    551:                                                                 ConstUTF8Param                 name,
                    552:                                  UInt32                                length,
                    553:                                  UInt32                                hint,
                    554:                                                                 FSSpec *                               nodeSpec,
                    555:                                                                 CatalogNodeData *              nodeData,
                    556:                                                                 UInt32 *                               newHint);
                    557: 
                    558: EXTERN_API_C( OSErr )
                    559: GetCatalogOffspring                            (ExtendedVCB *                  volume,
                    560:                                                                 HFSCatalogNodeID               folderID,
                    561:                                                                 UInt16                                 index,
                    562:                                                                 FSSpec *                               spec,
                    563:                                                                 CatalogNodeData *              nodeData,
                    564:                                                                 HFSCatalogNodeID *             nodeID,
                    565:                                                                 SInt16 *                       nodeType);
                    566: 
                    567: EXTERN_API_C( OSErr )
                    568: MoveRenameCatalogNode                  (ExtendedVCB *                  volume,
                    569:                                                                 HFSCatalogNodeID               srcParentID,
                    570:                                                                 ConstUTF8Param                 srcName,
                    571:                                                                 UInt32                                 srcHint,
                    572:                                                                 HFSCatalogNodeID               dstParentID,
                    573:                                                                 ConstUTF8Param                 dstName,
                    574:                                                                 UInt32 *                               newHint);
                    575: 
                    576: EXTERN_API_C( OSErr )
                    577: UpdateCatalogNode                              (ExtendedVCB *                  volume,
                    578:                                                                 HFSCatalogNodeID               parentID,
                    579:                                                                 ConstUTF8Param                 name,
                    580:                                                                 UInt32                                 catalogHint, 
                    581:                                                                 const CatalogNodeData * nodeData);
                    582: 
                    583: EXTERN_API_C( OSErr )
                    584: CreateFileIDRef                                        (ExtendedVCB *                  volume,
                    585:                                                                 HFSCatalogNodeID               parentID,
                    586:                                                                 ConstUTF8Param                 name,
                    587:                                                                 UInt32                                 hint,
                    588:                                                                 HFSCatalogNodeID *             threadID);
                    589: 
                    590: EXTERN_API_C( OSErr )
                    591: ExchangeFileIDs                                        (ExtendedVCB *                  volume,
                    592:                                                                 ConstUTF8Param                 srcName,
                    593:                                                                 ConstUTF8Param                 destName,
                    594:                                                                 HFSCatalogNodeID               srcID,
                    595:                                                                 HFSCatalogNodeID               destID,
                    596:                                                                 UInt32                                 srcHint,
                    597:                                                                 UInt32                                 destHint );
                    598: 
                    599: EXTERN_API_C( OSErr )
                    600: LinkCatalogNode                                        (ExtendedVCB *                  volume,
                    601:                                                                 HFSCatalogNodeID               parentID,
                    602:                                                                 ConstUTF8Param                 name,
                    603:                                                                 HFSCatalogNodeID               linkParentID,
                    604:                                                                 ConstUTF8Param                 linkName);
                    605: 
                    606: EXTERN_API_C( SInt32 )
                    607: CompareCatalogKeys                             (HFSCatalogKey *                searchKey,
                    608:                                                                 HFSCatalogKey *                trialKey);
                    609: 
                    610: EXTERN_API_C( SInt32 )
                    611: CompareExtendedCatalogKeys             (HFSPlusCatalogKey *    searchKey,
                    612:                                                                 HFSPlusCatalogKey *    trialKey);
                    613: 
                    614: EXTERN_API_C( OSErr )
                    615: InitCatalogCache                               (void);
                    616: 
                    617: EXTERN_API_C( void )
                    618: InvalidateCatalogCache                 (ExtendedVCB *                  volume);
                    619: 
                    620: 
                    621: /* GenericMRUCache Routines*/
                    622: EXTERN_API_C( OSErr )
                    623: InitMRUCache                                   (UInt32                                 bufferSize,
                    624:                                                                 UInt32                                 numCacheBlocks,
                    625:                                                                 Ptr *                                  cachePtr);
                    626: 
                    627: EXTERN_API_C( OSErr )
                    628: DisposeMRUCache                                        (Ptr                                    cachePtr);
                    629: 
                    630: EXTERN_API_C( void )
                    631: TrashMRUCache                                  (Ptr                                    cachePtr);
                    632: 
                    633: EXTERN_API_C( OSErr )
                    634: GetMRUCacheBlock                               (UInt32                                 key,
                    635:                                                                 Ptr                                    cachePtr,
                    636:                                                                 Ptr *                                  buffer);
                    637: 
                    638: EXTERN_API_C( void )
                    639: InvalidateMRUCacheBlock                        (Ptr                                    cachePtr,
                    640:                                                                 Ptr                                    buffer);
                    641: 
                    642: EXTERN_API_C( void )
                    643: InsertMRUCacheBlock                            (Ptr                                    cachePtr,
                    644:                                                                 UInt32                                 key,
                    645:                                                                 Ptr                                    buffer);
                    646: 
                    647: /* BTree Manager Routines*/
                    648: 
                    649: typedef CALLBACK_API_C( SInt32 , KeyCompareProcPtr )(void *a, void *b);
                    650: 
                    651: 
                    652: EXTERN_API_C( OSErr )
                    653: SearchBTreeRecord                              (FileReference                          refNum,
                    654:                                                                 const void *                   key,
                    655:                                                                 UInt32                                 hint,
                    656:                                                                 void *                                 foundKey,
                    657:                                                                 void *                                 data,
                    658:                                                                 UInt16 *                               dataSize,
                    659:                                                                 UInt32 *                               newHint);
                    660: 
                    661: EXTERN_API_C( OSErr )
                    662: InsertBTreeRecord                              (FileReference                          refNum,
                    663:                                                                 void *                                 key,
                    664:                                                                 void *                                 data,
                    665:                                                                 UInt16                                 dataSize,
                    666:                                                                 UInt32 *                               newHint);
                    667: 
                    668: EXTERN_API_C( OSErr )
                    669: DeleteBTreeRecord                              (FileReference                          refNum,
                    670:                                                                 void *                                 key);
                    671: 
                    672: EXTERN_API_C( OSErr )
                    673: ReplaceBTreeRecord                             (FileReference                          refNum,
                    674:                                                                 const void *                   key,
                    675:                                                                 UInt32                                 hint,
                    676:                                                                 void *                                 newData,
                    677:                                                                 UInt16                                 dataSize,
                    678:                                                                 UInt32 *                               newHint);
                    679: 
                    680: /*     From HFSVolumesInit.c*/
                    681: EXTERN_API_C( void )
                    682: InitBTreeHeader                                        (UInt32                                 fileSize,
                    683:                                                                 UInt32                                 clumpSize,
                    684:                                                                 UInt16                                 nodeSize,
                    685:                                                                 UInt16                                 recordCount,
                    686:                                                                 UInt16                                 keySize,
                    687:                                                                 UInt32                                 attributes,
                    688:                                                                 UInt32 *                               mapNodes,
                    689:                                                                 void *                                 buffer);
                    690: 
                    691: /*     Prototypes for big block cache*/
                    692: 
                    693: EXTERN_API_C( OSErr )
                    694: InitializeBlockCache                   (UInt32                                 blockSize,
                    695:                                                                 UInt32                                 blockCount);
                    696: 
                    697: EXTERN_API_C( OSErr )
                    698: FlushBlockCache                                        (void);
                    699: 
                    700: EXTERN_API_C( OSErr )
                    701: GetCacheBlock                                  (FileReference                          fileRefNum,
                    702:                                                                 UInt32                                 blockNumber,
                    703:                                                                 UInt32                                 blockSize,
                    704:                                                                 UInt16                                 options,
                    705:                                                                 LogicalAddress *               buffer,
                    706:                                                                 Boolean *                              readFromDisk);
                    707: 
                    708: EXTERN_API_C( OSErr )
                    709: ReleaseCacheBlock                              (LogicalAddress                 buffer,
                    710:                                                                 UInt16                                 options);
                    711: 
                    712: EXTERN_API_C( OSErr )
                    713: MarkCacheBlock                                 (LogicalAddress                 buffer);
                    714: 
                    715: EXTERN_API_C( OSErr )
                    716: TrashCacheBlocks                               (FileReference                          fileRefNum);
                    717: 
                    718: /*     Prototypes for C->Asm glue*/
                    719: EXTERN_API_C( OSErr )
                    720: GetBlock_glue                                  (UInt16                                 flags,
                    721:                                                                 UInt32                                 nodeNumber,
                    722:                                                                 Ptr *                                  nodeBuffer,
                    723:                                                                 FileReference                          refNum,
                    724:                                                                 ExtendedVCB *                  vcb);
                    725: 
                    726: EXTERN_API_C( OSErr )
                    727: RelBlock_glue                                  (Ptr                                    nodeBuffer,
                    728:                                                                 UInt16                                 flags);
                    729: 
                    730: EXTERN_API_C( void )
                    731: MarkBlock_glue                                 (Ptr                                    nodeBuffer);
                    732: 
                    733: EXTERN_API_C( OSErr )
                    734: C_FlushCache                                   (ExtendedVCB *                  vcb,
                    735:                                                                 UInt32                                 flags,
                    736:                                                                 FileReference                          refNum);
                    737: 
                    738: 
                    739: EXTERN_API_C( void )   TrashVolumeDiskCache(ExtendedVCB * vcb);
                    740: 
                    741: /*     Prototypes for exported routines in VolumeAllocation.c*/
                    742: EXTERN_API_C( OSErr )
                    743: BlockAllocate                                  (ExtendedVCB *                  vcb,
                    744:                                                                 UInt32                                 startingBlock,
                    745:                                                                 SInt64                                 bytesRequested,
                    746:                                                                 SInt64                                 bytesMaximum,
                    747:                                                                 Boolean                                forceContiguous,
                    748:                                                                 UInt32 *                               startBlock,
                    749:                                                                 UInt32 *                               actualBlocks);
                    750: 
                    751: EXTERN_API_C( OSErr )
                    752: BlockDeallocate                                        (ExtendedVCB *                  vcb,
                    753:                                                                 UInt32                                 firstBlock,
                    754:                                                                 UInt32                                 numBlocks);
                    755: 
                    756: EXTERN_API_C( OSErr )
                    757: UpdateFreeCount                                        (ExtendedVCB *                  vcb);
                    758: 
                    759: 
                    760: EXTERN_API_C( OSErr )
                    761: AllocateFreeSpace                              (ExtendedVCB *                  vcb,
                    762:                                                                 UInt32 *                               startBlock,
                    763:                                                                 UInt32 *                               actualBlocks);
                    764: 
                    765: EXTERN_API_C( UInt32 )
                    766: FileBytesToBlocks                              (SInt64                                 numerator,
                    767:                                                                 UInt32                                 denominator);
                    768: 
                    769: EXTERN_API_C( OSErr )
                    770: BlockAllocateAny                               (ExtendedVCB *                  vcb,
                    771:                                                                 UInt32                                 startingBlock,
                    772:                                                                 UInt32                                 endingBlock,
                    773:                                                                 UInt32                                 maxBlocks,
                    774:                                                                 UInt32 *                               actualStartBlock,
                    775:                                                                 UInt32 *                               actualNumBlocks);
                    776: 
                    777: EXTERN_API_C( void )
                    778: UpdateVCBFreeBlks                              (ExtendedVCB *                  vcb);
                    779: 
                    780: /*     File Extent Mapping routines*/
                    781: EXTERN_API_C( OSErr )
                    782: FlushExtentFile                                        (ExtendedVCB *                  vcb);
                    783: 
                    784: EXTERN_API_C( SInt32 )
                    785: CompareExtentKeys                              (const HFSExtentKey *   searchKey,
                    786:                                                                 const HFSExtentKey *   trialKey);
                    787: 
                    788: EXTERN_API_C( SInt32 )
                    789: CompareExtentKeysPlus                  (const HFSPlusExtentKey *searchKey,
                    790:                                                                 const HFSPlusExtentKey *trialKey);
                    791: 
                    792: EXTERN_API_C( OSErr )
                    793: DeleteFile                                             (ExtendedVCB *                  vcb,
                    794:                                                                 HFSCatalogNodeID               parDirID,
                    795:                                                                 ConstUTF8Param                 catalogName,
                    796:                                                                 UInt32                                 catalogHint);
                    797: 
                    798: EXTERN_API_C( OSErr )
                    799: TruncateFileC                                  (ExtendedVCB *                  vcb,
                    800:                                                                 FCB *                                  fcb,
                    801:                                                                 SInt64                                 peof,
                    802:                                                                 Boolean                                truncateToExtent);
                    803: 
                    804: EXTERN_API_C( OSErr )
                    805: ExtendFileC                                            (ExtendedVCB *                  vcb,
                    806:                                                                 FCB *                                  fcb,
                    807:                                                                 SInt64                                 bytesToAdd,
                    808:                                                                 UInt32                                 flags,
                    809:                                                                 SInt64 *                               actualBytesAdded);
                    810: 
                    811: EXTERN_API_C( OSErr )
                    812: MapFileBlockC                                  (ExtendedVCB *                  vcb,
                    813:                                                                 FCB *                                  fcb,
                    814:                                                                 SInt64                                 numberOfBytes,
                    815:                                                                 SInt64                                 offset,
                    816:                                                                 UInt32 *                               startBlock,
                    817:                                                                 UInt32 *                               availableBytes);
                    818: 
                    819: #if TARGET_API_MACOS_X
                    820: EXTERN_API_C( Boolean )
                    821: NodesAreContiguous                             (ExtendedVCB *                  vcb,
                    822:                                                                 FCB *                                  fcb,
                    823:                                                                 UInt32                                 nodeSize);
                    824: #endif
                    825: EXTERN_API_C( void )
                    826: AdjustEOF                                              (FCB     *                      sourceFCB);
                    827: 
                    828: /*     Utility routines*/
                    829: 
                    830: EXTERN_API_C( void )
                    831: ClearMemory                                            (void *                                 start,
                    832:                                                                 UInt32                                 length);
                    833: 
                    834: EXTERN_API_C( Boolean )
                    835: UnicodeBinaryCompare                   (ConstHFSUniStr255Param ustr1,
                    836:                                                                 ConstHFSUniStr255Param ustr2);
                    837: 
                    838: EXTERN_API_C( Boolean )
                    839: PascalBinaryCompare                            (ConstStr31Param                pstr1,
                    840:                                                                 ConstStr31Param                pstr2);
                    841: 
                    842: EXTERN_API_C( OSErr )
                    843: VolumeWritable                                 (ExtendedVCB *  vcb);
                    844: 
                    845: 
                    846: /*     Get the current time in UTC (GMT)*/
                    847: EXTERN_API_C( UInt32 )
                    848: GetTimeUTC                                             (void);
                    849: 
                    850: /*     Get the current local time*/
                    851: EXTERN_API_C( UInt32 )
                    852: GetTimeLocal                                   (Boolean forHFS);
                    853: 
                    854: EXTERN_API_C( UInt32 )
                    855: LocalToUTC                                             (UInt32                                 localTime);
                    856: 
                    857: EXTERN_API_C( UInt32 )
                    858: UTCToLocal                                             (UInt32                                 utcTime);
                    859: 
                    860: 
                    861: /*     Volumes routines*/
                    862: EXTERN_API_C( OSErr )
                    863: FlushVolumeControlBlock                        (ExtendedVCB *                  vcb);
                    864: 
                    865: EXTERN_API_C( OSErr )
                    866: CheckVolumeOffLine                             (ExtendedVCB *                  vcb);
                    867: 
                    868: EXTERN_API_C( OSErr )
                    869: ValidVolumeHeader                              (HFSPlusVolumeHeader *                  volumeHeader);
                    870: 
                    871: EXTERN_API_C( void )
                    872: FillHFSStack                                   (void);
                    873: 
                    874: 
                    875: EXTERN_API_C( OSErr )
                    876: AccessBTree                                            (ExtendedVCB *                  vcb,
                    877:                                                                 FileReference                          refNum,
                    878:                                                                 UInt32                                 fileID,
                    879:                                                                 UInt32                                 fileClumpSize,
                    880:                                                                 void *                                 CompareRoutine);
                    881: 
                    882: EXTERN_API_C( void )
                    883: RemountWrappedVolumes                  (void);
                    884: 
                    885: EXTERN_API_C( OSErr )
                    886: CheckVolumeConsistency                 (ExtendedVCB *                  vcb);
                    887: 
                    888: EXTERN_API_C( void )
                    889: HFSBlocksFromTotalSectors              (UInt32                                 totalSectors,
                    890:                                                                 UInt32 *                               blockSize,
                    891:                                                                 UInt16 *                               blockCount);
                    892: 
                    893: 
                    894: 
                    895: 
                    896: #if PRAGMA_STRUCT_ALIGN
                    897:        #pragma options align=reset
                    898: #elif PRAGMA_STRUCT_PACKPUSH
                    899:        #pragma pack(pop)
                    900: #elif PRAGMA_STRUCT_PACK
                    901:        #pragma pack()
                    902: #endif
                    903: 
                    904: #ifdef PRAGMA_IMPORT_OFF
                    905: #pragma import off
                    906: #elif PRAGMA_IMPORT
                    907: #pragma import reset
                    908: #endif
                    909: 
                    910: #ifdef __cplusplus
                    911: }
                    912: #endif
                    913: 
                    914: #endif /* __FILEMGRINTERNAL__ */
                    915: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.