]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/hfs/hfscommon/headers/FileMgrInternal.h
xnu-2050.48.11.tar.gz
[apple/xnu.git] / bsd / hfs / hfscommon / headers / FileMgrInternal.h
index 5189b9226f0ca65fa4f742dfa9faa38aae69e633..e8ddcac8641d9af4ea3a9f0d08beaf60920622a9 100644 (file)
@@ -1,31 +1,29 @@
 /*
 /*
- * Copyright (c) 2006 Apple Computer, Inc. All Rights Reserved.
+ * Copyright (c) 2000-2010 Apple Inc. All rights reserved.
+ *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
  * 
- * @APPLE_LICENSE_OSREFERENCE_HEADER_START@
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
  * 
  * 
- * This file contains Original Code and/or Modifications of Original Code 
- * as defined in and that are subject to the Apple Public Source License 
- * Version 2.0 (the 'License'). You may not use this file except in 
- * compliance with the License.  The rights granted to you under the 
- * License may not be used to create, or enable the creation or 
- * redistribution of, unlawful or unlicensed copies of an Apple operating 
- * system, or to circumvent, violate, or enable the circumvention or 
- * violation of, any terms of an Apple operating system software license 
- * agreement.
- *
- * Please obtain a copy of the License at 
- * http://www.opensource.apple.com/apsl/ and read it before using this 
- * file.
- *
- * The Original Code and all software distributed under the License are 
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
- * Please see the License for the specific language governing rights and 
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
  * limitations under the License.
  * limitations under the License.
- *
- * @APPLE_LICENSE_OSREFERENCE_HEADER_END@
+ * 
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /*
        File:           FilesInternal.h
  */
 /*
        File:           FilesInternal.h
@@ -34,7 +32,7 @@
 
        Version:        HFS Plus 1.0
 
 
        Version:        HFS Plus 1.0
 
-       Copyright:      © 1996-2001 by Apple Computer, Inc., all rights reserved.
+       Copyright:       1996-2001 by Apple Computer, Inc., all rights reserved.
 
 */
 #ifndef __FILEMGRINTERNAL__
 
 */
 #ifndef __FILEMGRINTERNAL__
 #include "../../hfs_cnode.h"
 
 
 #include "../../hfs_cnode.h"
 
 
-#if PRAGMA_ONCE
-#pragma once
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#if PRAGMA_IMPORT
-#pragma import on
-#endif
-
-#if PRAGMA_STRUCT_ALIGN
-       #pragma options align=mac68k
-#elif PRAGMA_STRUCT_PACKPUSH
-       #pragma pack(push, 2)
-#elif PRAGMA_STRUCT_PACK
-       #pragma pack(2)
-#endif
-
 /* CatalogNodeID is used to track catalog objects */
 /* CatalogNodeID is used to track catalog objects */
-typedef UInt32         HFSCatalogNodeID;
+typedef u_int32_t              HFSCatalogNodeID;
 
 /* internal error codes*/
 
 
 /* internal error codes*/
 
@@ -182,34 +164,17 @@ typedef union CatalogName CatalogName;
 #define GetFileControlBlock(fref)              VTOF((fref))
 #define GetFileRefNumFromFCB(fcb)              FTOV((fcb))
 
 #define GetFileControlBlock(fref)              VTOF((fref))
 #define GetFileRefNumFromFCB(fcb)              FTOV((fcb))
 
-
-/*     The following macro marks a VCB as dirty by setting the upper 8 bits of the flags*/
-EXTERN_API_C( void )
-MarkVCBDirty                                   (ExtendedVCB *vcb);
-
-EXTERN_API_C( void )
-MarkVCBClean                                   (ExtendedVCB *vcb);
-
-EXTERN_API_C( Boolean )
-IsVCBDirty                                             (ExtendedVCB *vcb);
-
-
-#define        MarkVCBDirty(vcb)               { ((vcb)->vcbFlags |= 0xFF00); }
-#define        MarkVCBClean(vcb)               { ((vcb)->vcbFlags &= 0x00FF); }
-#define        IsVCBDirty(vcb)                 ((Boolean) ((vcb->vcbFlags & 0xFF00) != 0))
-
-
 /*     Test for error and return if error occurred*/
 EXTERN_API_C( void )
 ReturnIfError                                  (OSErr                                  result);
 
 /*     Test for error and return if error occurred*/
 EXTERN_API_C( void )
 ReturnIfError                                  (OSErr                                  result);
 
-#define        ReturnIfError(result)                                   if ( (result) != noErr ) return (result); else ;
+#define        ReturnIfError(result)                           do {    if ( (result) != noErr ) return (result); } while(0)
 
 /*     Exit function on error*/
 EXTERN_API_C( void )
 ExitOnError                                            (OSErr                                  result);
 
 
 /*     Exit function on error*/
 EXTERN_API_C( void )
 ExitOnError                                            (OSErr                                  result);
 
-#define        ExitOnError( result )                                   if ( ( result ) != noErr )      goto ErrorExit; else ;
+#define        ExitOnError( result )                           do {    if ( ( result ) != noErr )      goto ErrorExit; } while(0)
 
 
 
 
 
 
@@ -221,83 +186,111 @@ ExchangeFileIDs                                  (ExtendedVCB *                  volume,
                                                                 ConstUTF8Param                 destName,
                                                                 HFSCatalogNodeID               srcID,
                                                                 HFSCatalogNodeID               destID,
                                                                 ConstUTF8Param                 destName,
                                                                 HFSCatalogNodeID               srcID,
                                                                 HFSCatalogNodeID               destID,
-                                                                UInt32                                 srcHint,
-                                                                UInt32                                 destHint );
+                                                                u_int32_t                              srcHint,
+                                                                u_int32_t                              destHint );
 
 
+EXTERN_API_C( OSErr )
+MoveData( ExtendedVCB *vcb, HFSCatalogNodeID srcID, HFSCatalogNodeID destID, int rsrc);
 
 /* BTree Manager Routines*/
 
 
 /* BTree Manager Routines*/
 
-typedef CALLBACK_API_C( SInt32 , KeyCompareProcPtr )(void *a, void *b);
-
+typedef CALLBACK_API_C( int32_t , KeyCompareProcPtr )(void *a, void *b);
 
 
-EXTERN_API_C( OSErr )
-SearchBTreeRecord                              (FileReference                          refNum,
-                                                                const void *                   key,
-                                                                UInt32                                 hint,
-                                                                void *                                 foundKey,
-                                                                void *                                 data,
-                                                                UInt16 *                               dataSize,
-                                                                UInt32 *                               newHint);
 
 EXTERN_API_C( OSErr )
 ReplaceBTreeRecord                             (FileReference                          refNum,
                                                                 const void *                   key,
 
 EXTERN_API_C( OSErr )
 ReplaceBTreeRecord                             (FileReference                          refNum,
                                                                 const void *                   key,
-                                                                UInt32                                 hint,
+                                                                u_int32_t                              hint,
                                                                 void *                                 newData,
                                                                 void *                                 newData,
-                                                                UInt16                                 dataSize,
-                                                                UInt32 *                               newHint);
+                                                                u_int16_t                              dataSize,
+                                                                u_int32_t *                    newHint);
 
 
 /*     Prototypes for exported routines in VolumeAllocation.c*/
 
 
 /*     Prototypes for exported routines in VolumeAllocation.c*/
+
+/* 
+ * Flags for BlockAllocate() and BlockDeallocate()
+ */ 
+/* Force contiguous block allocation and to force minBlocks to actually be allocated */
+#define HFS_ALLOC_FORCECONTIG  0x1     
+/* Can use metadata zone blocks */
+#define HFS_ALLOC_METAZONE     0x2     
+/* Skip checking and updating of free blocks during allocation and deallocation */
+#define HFS_ALLOC_SKIPFREEBLKS 0x4     
+
 EXTERN_API_C( OSErr )
 BlockAllocate                                  (ExtendedVCB *                  vcb,
 EXTERN_API_C( OSErr )
 BlockAllocate                                  (ExtendedVCB *                  vcb,
-                                                                UInt32                                 startingBlock,
-                                                                UInt32                                 minBlocks,
-                                                                UInt32                                 maxBlocks,
-                                                                Boolean                                forceContiguous,
-                                                                Boolean                                useMetaZone,
-                                                                UInt32 *                               startBlock,
-                                                                UInt32 *                               actualBlocks);
+                                                                u_int32_t                              startingBlock,
+                                                                u_int32_t                              minBlocks,
+                                                                u_int32_t                              maxBlocks,
+                                                                u_int32_t                              flags,
+                                                                u_int32_t *                    startBlock,
+                                                                u_int32_t *                    actualBlocks);
 
 EXTERN_API_C( OSErr )
 BlockDeallocate                                        (ExtendedVCB *                  vcb,
 
 EXTERN_API_C( OSErr )
 BlockDeallocate                                        (ExtendedVCB *                  vcb,
-                                                                UInt32                                 firstBlock,
-                                                                UInt32                                 numBlocks);
+                                                                u_int32_t                              firstBlock,
+                                                                u_int32_t                              numBlocks,
+                                                                u_int32_t                              flags);
+
+EXTERN_API_C ( void )
+ResetVCBFreeExtCache(struct hfsmount *hfsmp);
+
+EXTERN_API_C( OSErr )
+BlockMarkAllocated(ExtendedVCB *vcb, u_int32_t startingBlock, u_int32_t numBlocks);
 
 EXTERN_API_C( OSErr )
 
 EXTERN_API_C( OSErr )
-BlockMarkAllocated(ExtendedVCB *vcb, UInt32 startingBlock, UInt32 numBlocks);
+BlockMarkFree( ExtendedVCB *vcb, u_int32_t startingBlock, u_int32_t numBlocks);
 
 EXTERN_API_C( OSErr )
 
 EXTERN_API_C( OSErr )
-BlockMarkFree( ExtendedVCB *vcb, UInt32 startingBlock, UInt32 numBlocks);
+BlockMarkFreeUnused( ExtendedVCB *vcb, u_int32_t startingBlock, u_int32_t numBlocks);
 
 
-EXTERN_API_C( UInt32 )
+EXTERN_API_C( u_int32_t )
 MetaZoneFreeBlocks(ExtendedVCB *vcb);
 MetaZoneFreeBlocks(ExtendedVCB *vcb);
+       
+EXTERN_API_C( u_int32_t )
+UpdateAllocLimit (struct hfsmount *hfsmp, u_int32_t new_end_block);
+
+EXTERN_API_C( u_int32_t )
+UnmapBlocks(struct hfsmount *hfsmp);
+
+#if CONFIG_HFS_ALLOC_RBTREE
+EXTERN_API_C( u_int32_t )
+GenerateTree( struct hfsmount *hfsmp, u_int32_t end_block, int *flags, int initialscan);
+       
+EXTERN_API_C( void )
+DestroyTrees( struct hfsmount *hfsmp);
+       
+EXTERN_API_C( u_int32_t )
+InitTree(struct hfsmount *hfsmp);      
+#endif
+       
+       
+       
 
 /*     File Extent Mapping routines*/
 EXTERN_API_C( OSErr )
 FlushExtentFile                                        (ExtendedVCB *                  vcb);
 
 
 /*     File Extent Mapping routines*/
 EXTERN_API_C( OSErr )
 FlushExtentFile                                        (ExtendedVCB *                  vcb);
 
-EXTERN_API_C( SInt32 )
+EXTERN_API_C( int32_t )
 CompareExtentKeys                              (const HFSExtentKey *   searchKey,
                                                                 const HFSExtentKey *   trialKey);
 
 CompareExtentKeys                              (const HFSExtentKey *   searchKey,
                                                                 const HFSExtentKey *   trialKey);
 
-EXTERN_API_C( SInt32 )
+EXTERN_API_C( int32_t )
 CompareExtentKeysPlus                  (const HFSPlusExtentKey *searchKey,
                                                                 const HFSPlusExtentKey *trialKey);
 
 EXTERN_API_C( OSErr )
 CompareExtentKeysPlus                  (const HFSPlusExtentKey *searchKey,
                                                                 const HFSPlusExtentKey *trialKey);
 
 EXTERN_API_C( OSErr )
-TruncateFileC                                  (ExtendedVCB *                  vcb,
-                                                                FCB *                                  fcb,
-                                                                SInt64                                 peof,
-                                                                Boolean                                truncateToExtent);
-
+TruncateFileC (ExtendedVCB *vcb, FCB *fcb, int64_t peof, int deleted, 
+                          int rsrc, uint32_t fileid, Boolean truncateToExtent);
+       
 EXTERN_API_C( OSErr )
 ExtendFileC                                            (ExtendedVCB *                  vcb,
                                                                 FCB *                                  fcb,
 EXTERN_API_C( OSErr )
 ExtendFileC                                            (ExtendedVCB *                  vcb,
                                                                 FCB *                                  fcb,
-                                                                SInt64                                 bytesToAdd,
-                                                                UInt32                                 blockHint,
-                                                                UInt32                                 flags,
-                                                                SInt64 *                               actualBytesAdded);
+                                                                int64_t                                bytesToAdd,
+                                                                u_int32_t                              blockHint,
+                                                                u_int32_t                              flags,
+                                                                int64_t *                              actualBytesAdded);
 
 EXTERN_API_C( OSErr )
 MapFileBlockC                                  (ExtendedVCB *                  vcb,
 
 EXTERN_API_C( OSErr )
 MapFileBlockC                                  (ExtendedVCB *                  vcb,
@@ -307,44 +300,30 @@ MapFileBlockC                                     (ExtendedVCB *                  vcb,
                                                                 daddr64_t *                            startBlock,
                                                                 size_t *                               availableBytes);
 
                                                                 daddr64_t *                            startBlock,
                                                                 size_t *                               availableBytes);
 
-OSErr HeadTruncateFile(ExtendedVCB  *vcb, FCB  *fcb, UInt32  headblks);
+OSErr HeadTruncateFile(ExtendedVCB  *vcb, FCB  *fcb, u_int32_t  headblks);
 
 EXTERN_API_C( int )
 
 EXTERN_API_C( int )
-AddFileExtent (ExtendedVCB *vcb, FCB *fcb, UInt32 startBlock, UInt32 blockCount);
+AddFileExtent (ExtendedVCB *vcb, FCB *fcb, u_int32_t startBlock, u_int32_t blockCount);
 
 #if TARGET_API_MACOS_X
 EXTERN_API_C( Boolean )
 NodesAreContiguous                             (ExtendedVCB *                  vcb,
                                                                 FCB *                                  fcb,
 
 #if TARGET_API_MACOS_X
 EXTERN_API_C( Boolean )
 NodesAreContiguous                             (ExtendedVCB *                  vcb,
                                                                 FCB *                                  fcb,
-                                                                UInt32                                 nodeSize);
+                                                                u_int32_t                              nodeSize);
 #endif
 
 
 
 /*     Get the current time in UTC (GMT)*/
 #endif
 
 
 
 /*     Get the current time in UTC (GMT)*/
-EXTERN_API_C( UInt32 )
+EXTERN_API_C( u_int32_t )
 GetTimeUTC                                             (void);
 
 GetTimeUTC                                             (void);
 
-EXTERN_API_C( UInt32 )
-LocalToUTC                                             (UInt32                                 localTime);
-
-EXTERN_API_C( UInt32 )
-UTCToLocal                                             (UInt32                                 utcTime);
+EXTERN_API_C( u_int32_t )
+LocalToUTC                                             (u_int32_t                              localTime);
 
 
+EXTERN_API_C( u_int32_t )
+UTCToLocal                                             (u_int32_t                              utcTime);
 
 
-#if PRAGMA_STRUCT_ALIGN
-       #pragma options align=reset
-#elif PRAGMA_STRUCT_PACKPUSH
-       #pragma pack(pop)
-#elif PRAGMA_STRUCT_PACK
-       #pragma pack()
-#endif
-
-#ifdef PRAGMA_IMPORT_OFF
-#pragma import off
-#elif PRAGMA_IMPORT
-#pragma import reset
-#endif
 
 #ifdef __cplusplus
 }
 
 #ifdef __cplusplus
 }