Annotation of XNU/bsd/hfs/hfscommon/headers/FileMgrInternal.h, revision 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.