Annotation of kernel/bsd/hfs/hfscommon/headers/CatalogPrivate.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
        !             7:  * Reserved.  This file contains Original Code and/or Modifications of
        !             8:  * Original Code as defined in and that are subject to the Apple Public
        !             9:  * Source License Version 1.1 (the "License").  You may not use this file
        !            10:  * except in compliance with the License.  Please obtain a copy of the
        !            11:  * License at http://www.apple.com/publicsource and read it before using
        !            12:  * this file.
        !            13:  * 
        !            14:  * The Original Code and all software distributed under the License are
        !            15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            19:  * License for the specific language governing rights and limitations
        !            20:  * under the License.
        !            21:  * 
        !            22:  * @APPLE_LICENSE_HEADER_END@
        !            23:  */
        !            24: 
        !            25: /*
        !            26:        File:           CatalogPrivate.h
        !            27: 
        !            28:        Contains:       Private Catalog Manager interfaces.
        !            29: 
        !            30:        Version:        HFS Plus 1.0
        !            31: 
        !            32:        Copyright:      � 1997-1998 by Apple Computer, Inc., all rights reserved.
        !            33: 
        !            34:        File Ownership:
        !            35: 
        !            36:                DRI:                            Don Brady
        !            37: 
        !            38:                Other Contact:          xxx put other contact here xxx
        !            39: 
        !            40:                Technology:                     xxx put technology here xxx
        !            41: 
        !            42:        Writers:
        !            43: 
        !            44:                (JL)    Jim Luther
        !            45:                (msd)   Mark Day
        !            46:                (DSH)   Deric Horn
        !            47:                (djb)   Don Brady
        !            48: 
        !            49:        Change History (most recent first):
        !            50:          <Rhap>         11/10/98       djb             Remove obsolete PrepareInputName prototype;
        !            51:          <Rhap>          4/6/98        djb             Added lock data stuctures and ReleaseCatalogIterator prototype;
        !            52:          <Rhap>          4/6/98        djb             Removed CatalogDataCache since its no longer used.
        !            53:          <Rhap>          4/2/98        djb             InvalidateCatalogNodeCache does nothing under Rhapsody.
        !            54:          <Rhap>         3/31/98        djb             Sync up with final HFSVolumes.h header file.
        !            55: 
        !            56:          <CS10>        11/20/97        djb             Radar #2002357. Fixing retry mechanism.
        !            57:           <CS9>        11/17/97        djb             PrepareInputName routine now returns an error.
        !            58:           <CS8>        11/13/97        djb             Radar #1683572. Move CatalogIterator to this file from
        !            59:                                                                        FileMgrInternal.i. Double size of short unicode name.
        !            60:           <CS7>        10/31/97        JL              #2000184 - Changed prototypes for CreateFileThreadID and
        !            61:                                                                        ExchangeFiles.
        !            62:           <CS6>        10/17/97        msd             In CatalogCacheGlobals, add room for a single UniStr255 so
        !            63:                                                                        catalog iterators can step over long Unicode names.
        !            64:           <CS5>        10/17/97        djb             Add ConvertInputNameToUnicode for Catalog Create/Rename.
        !            65:           <CS4>         10/1/97        djb             Change catalog iterator implementation.
        !            66:           <CS3>         7/16/97        DSH             FilesInternal.i renamed FileMgrInternal.i to avoid name
        !            67:                                                                        collision
        !            68:           <CS2>         6/24/97        djb             Add LocateCatalogNodeByMangledName routine.
        !            69:           <CS1>         6/24/97        djb             first checked in
        !            70: */
        !            71: 
        !            72: #ifndef        __CATALOGPRIVATE__
        !            73: #define __CATALOGPRIVATE__
        !            74: 
        !            75: #include       "FileMgrInternal.h"
        !            76: #include       "BTreesInternal.h"
        !            77: #include       "HFSVolumes.h"
        !            78: 
        !            79: #if TARGET_OS_RHAPSODY
        !            80:        #include <sys/lock.h>
        !            81: #endif
        !            82: 
        !            83: // private catalog data cache
        !            84: 
        !            85: 
        !            86: 
        !            87: enum {
        !            88:        kCatalogIteratorCount = 16              // total number of Catalog iterators (shared by all HFS/HFS Plus volumes)
        !            89: };
        !            90: 
        !            91: 
        !            92: // Catalog Iterator Types
        !            93: enum {
        !            94:        kIterateAll,                    // from GetCatInfo call
        !            95:        kIterateFilesOnly               // from GetFileInfo call
        !            96: };
        !            97: 
        !            98: 
        !            99: // Catalog Iterator Name Types
        !           100: enum {
        !           101:        kShortPascalName,
        !           102:        kShortUnicodeName,
        !           103:        kLongUnicodeName        // non-local name
        !           104: };
        !           105: 
        !           106: 
        !           107: // short unicode name (used by CatalogIterator)
        !           108: struct UniStr63 {
        !           109:        UInt16          length;                                 /* number of unicode characters */
        !           110:        UniChar         unicode[63];                    /* unicode characters */
        !           111: };
        !           112: typedef struct UniStr63 UniStr63;
        !           113: 
        !           114: 
        !           115: struct CatalogIterator
        !           116: {
        !           117:        struct CatalogIterator *        nextMRU;        //      next iterator in MRU order
        !           118:        struct CatalogIterator *        nextLRU;        //      next iterator in LRU order
        !           119: 
        !           120:        UInt16                          iteratorType;           // {0 = GetCatInfo, 1 = GetFileInfo}
        !           121:        SInt16                          volRefNum;
        !           122:        HFSCatalogNodeID        folderID;
        !           123: 
        !           124:        SInt16                          currentIndex;
        !           125:        SInt16                          fileIndex;                      // for GetFileInfo (to skip folders)
        !           126:        UInt32                          btreeNodeHint;          // node the key was last seen in
        !           127:        UInt16                          btreeIndexHint;         // index the key was last seen at
        !           128:        UInt16                          nameType;                       // { 0 = Pascal, 1 = Unicode, 3 = long name}
        !           129:        HFSCatalogNodeID        parentID;                       // parent folder ID
        !           130:        union
        !           131:        {
        !           132:                Str31                   pascalName;
        !           133:                UniStr63                unicodeName;
        !           134:                HFSUniStr255 *  longNamePtr;
        !           135:        } folderName;
        !           136: 
        !           137:   #if TARGET_OS_RHAPSODY
        !           138:        struct lock__bsd__      iterator_lock;
        !           139:   #endif
        !           140: };
        !           141: typedef struct CatalogIterator CatalogIterator;
        !           142: 
        !           143: 
        !           144: struct CatalogCacheGlobals {
        !           145:        UInt32                          iteratorCount;  //      Number of iterators in cache
        !           146:        CatalogIterator *       mru;
        !           147:        CatalogIterator *       lru;
        !           148:        UInt32                          reserved;
        !           149:        HFSUniStr255            longName;               //      used by a single kLongUnicodeName iterator
        !           150: 
        !           151:   #if TARGET_OS_RHAPSODY
        !           152:        simple_lock_data_t      simplelock;
        !           153:   #endif
        !           154: };
        !           155: typedef struct CatalogCacheGlobals CatalogCacheGlobals;
        !           156: 
        !           157: 
        !           158: #if TARGET_OS_MAC
        !           159: // Private Catalog Macros
        !           160: 
        !           161: // We keep a copy of the text encoding in the upper byte of the catalog hint (yuck!).
        !           162: // This overloading was done in the first release since the client is in 68K assembly
        !           163: // and it saves information (like the hint) in registers.
        !           164: //
        !           165: // The lower 24 bits is the b-tree node hint which allows for 16 million nodes (or a
        !           166: // 67 GB Catalog B-tree).
        !           167: //
        !           168: // The text encoding needs to be a formal parameter in future releases!!
        !           169: //
        !           170: extern TextEncoding GetTextEncodingFromHint(UInt32 hint);
        !           171: #define        GetTextEncodingFromHint(hint)                           ((hint)>>24)
        !           172: 
        !           173: extern void SetTextEncodingInHint(TextEncoding encoding, UInt32 *hint);
        !           174: #define        SetTextEncodingInHint(encoding, hint)           (*(hint) += ((encoding)<<24))
        !           175: 
        !           176: extern UInt32 GetBTreeNodeFromHint(UInt32 hint);
        !           177: #define        GetBTreeNodeFromHint(hint)                                      ((hint) & 0x00FFFFFF)
        !           178: 
        !           179: #endif
        !           180: 
        !           181: //
        !           182: // Private Catalog Manager Routines (for use only by Catalog Manager, CatSearch and FileID Services)
        !           183: //
        !           184: 
        !           185: extern OSErr   LocateCatalogThread( const ExtendedVCB *volume, HFSCatalogNodeID nodeID, CatalogRecord *threadData,
        !           186:                                                                         UInt16 *threadSize, UInt32 *threadHint);
        !           187: 
        !           188: extern OSErr   LocateCatalogNode(      const ExtendedVCB *volume, HFSCatalogNodeID folderID, const CatalogName *name,
        !           189:                                                                        UInt32 hint, CatalogKey *key, CatalogRecord *data, UInt32 *newHint);
        !           190: 
        !           191: extern OSErr   LocateCatalogNodeByKey ( const ExtendedVCB *volume, UInt32 hint, CatalogKey *keyPtr,
        !           192:                                                                                 CatalogRecord *dataPtr, UInt32 *newHint );
        !           193: 
        !           194: extern OSErr   LocateCatalogRecord( const ExtendedVCB *volume, HFSCatalogNodeID folderID, const CatalogName *name,
        !           195:                                                                         UInt32 hint, CatalogKey *keyPtr, CatalogRecord *dataPtr, UInt32 *newHint);
        !           196: 
        !           197: extern OSErr   LocateCatalogNodeWithRetry ( const ExtendedVCB *volume, HFSCatalogNodeID folderID, ConstStr31Param pascalName,
        !           198:                                                                                         CatalogName *unicodeName, UInt32 hint, CatalogKey *keyPtr, CatalogRecord *dataPtr,
        !           199:                                                                                         UInt32 *newHint );
        !           200: 
        !           201: extern OSErr   LocateCatalogNodeByMangledName( const ExtendedVCB *volume, HFSCatalogNodeID folderID, ConstStr31Param name,
        !           202:                                                                                                CatalogKey *keyPtr, CatalogRecord *dataPtr, UInt32 *hintPtr );
        !           203: 
        !           204: extern OSErr   FlushCatalog( ExtendedVCB *volume);
        !           205: 
        !           206: #if TARGET_OS_MAC
        !           207: extern void            InvalidateCatalogNodeCache( ExtendedVCB *volume, HFSCatalogNodeID parentID );
        !           208: #else
        !           209: #define                        InvalidateCatalogNodeCache(v, pid)
        !           210: #endif
        !           211: 
        !           212: extern OSErr   UpdateFolderCount( ExtendedVCB *volume, HFSCatalogNodeID parentID, const CatalogName *name, SInt16 newType,
        !           213:                                                                   UInt32 hint, SInt16 valenceDelta);
        !           214: 
        !           215: extern UInt16  GetCatalogRecordSize( const CatalogRecord *dataRecord);
        !           216: 
        !           217: extern void            ConvertInputNameToUnicode(ConstStr31Param name, TextEncoding encodingHint,
        !           218:                                                                                  TextEncoding *actualEncoding, CatalogName *catalogName);
        !           219: 
        !           220: extern void    BuildCatalogKey( HFSCatalogNodeID parentID, const CatalogName *name, Boolean isHFSPlus,
        !           221:                                                                 CatalogKey *key);
        !           222: 
        !           223: extern OSErr   BuildCatalogKeyUTF8( HFSCatalogNodeID parentID, const char *name, Boolean isHFSPlus,
        !           224:                                                                 CatalogKey *key, UInt32 *textEncoding);
        !           225: 
        !           226: extern void    UpdateCatalogName( ConstStr31Param srcName, Str31 destName);
        !           227: 
        !           228: extern UInt32  CatalogNameLength( const CatalogName *name, Boolean isHFSPlus);
        !           229: 
        !           230: extern void            CopyCatalogName( const CatalogName *srcName, CatalogName *dstName, Boolean isHFSPLus);
        !           231: 
        !           232: extern OSErr   ResolveFileID( ExtendedVCB *vcb, HFSCatalogNodeID fileID, HFSCatalogNodeID *parentID, Str31 name );
        !           233: 
        !           234: extern OSErr   CreateFileThreadID( FIDParam *filePB, WDCBRecPtr *wdcbPtr );
        !           235: 
        !           236: extern OSErr   ExchangeFiles( FIDParam *filePB, WDCBRecPtr *wdcbPtr );
        !           237: 
        !           238: extern void            CopyCatalogNodeData( const ExtendedVCB *volume, const CatalogRecord *dataPtr, CatalogNodeData *nodeData);
        !           239: 
        !           240: extern void            UpdateVolumeEncodings( ExtendedVCB *volume, TextEncoding encoding);
        !           241: 
        !           242: extern void            AdjustVolumeCounts( ExtendedVCB *volume, SInt16 type, SInt16 delta );
        !           243: 
        !           244: 
        !           245: // Catalog Iterator Routines
        !           246: 
        !           247: extern CatalogIterator* GetCatalogIterator( const ExtendedVCB *volume, HFSCatalogNodeID folderID, UInt16 index, UInt16 iterationType );
        !           248: 
        !           249: extern OSErr   ReleaseCatalogIterator( CatalogIterator *catalogIterator );
        !           250: 
        !           251: extern void            TrashCatalogIterator( const ExtendedVCB *volume, HFSCatalogNodeID folderID );
        !           252: 
        !           253: void                   AgeCatalogIterator( CatalogIterator *catalogIterator );
        !           254: 
        !           255: extern void            UpdateBtreeIterator( const CatalogIterator *catalogIterator, BTreeIterator *btreeIterator );
        !           256: 
        !           257: extern void            UpdateCatalogIterator( const BTreeIterator *btreeIterator, CatalogIterator *catalogIterator );
        !           258: 
        !           259: 
        !           260: #endif //__CATALOGPRIVATE__

unix.superglobalmegacorp.com

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