0003-Add-helper-include-files-absent-from-the-upstream-pa.patch (39272B)
1 From: =?UTF-8?q?Rog=C3=A9rio=20Brito?= <rbrito@ime.usp.br> 2 Date: Thu, 24 Oct 2013 01:11:21 -0200 3 Subject: Add helper include files absent from the upstream package 4 5 Add some include files from an Apple system that contain the definition of 6 the data structures used by the programs that manipulate the filesystems. 7 --- 8 include/bitstring.h | 164 +++++++++++ 9 include/hfs/hfs_format.h | 689 +++++++++++++++++++++++++++++++++++++++++++++ 10 include/hfs/hfs_mount.h | 78 +++++ 11 include/sys/appleapiopts.h | 52 ++++ 12 4 files changed, 983 insertions(+) 13 create mode 100644 include/bitstring.h 14 create mode 100644 include/hfs/hfs_format.h 15 create mode 100644 include/hfs/hfs_mount.h 16 create mode 100644 include/sys/appleapiopts.h 17 18 diff --git a/include/bitstring.h b/include/bitstring.h 19 new file mode 100644 20 index 0000000..fbecfbe 21 --- /dev/null 22 +++ b/include/bitstring.h 23 @@ -0,0 +1,164 @@ 24 +/* 25 + * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. 26 + * 27 + * @APPLE_LICENSE_HEADER_START@ 28 + * 29 + * The contents of this file constitute Original Code as defined in and 30 + * are subject to the Apple Public Source License Version 1.1 (the 31 + * "License"). You may not use this file except in compliance with the 32 + * License. Please obtain a copy of the License at 33 + * http://www.apple.com/publicsource and read it before using this file. 34 + * 35 + * This Original Code and all software distributed under the License are 36 + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 37 + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 38 + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 39 + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 40 + * License for the specific language governing rights and limitations 41 + * under the License. 42 + * 43 + * @APPLE_LICENSE_HEADER_END@ 44 + */ 45 +/* 46 + * Copyright (c) 1989, 1993 47 + * The Regents of the University of California. All rights reserved. 48 + * 49 + * This code is derived from software contributed to Berkeley by 50 + * Paul Vixie. 51 + * 52 + * Redistribution and use in source and binary forms, with or without 53 + * modification, are permitted provided that the following conditions 54 + * are met: 55 + * 1. Redistributions of source code must retain the above copyright 56 + * notice, this list of conditions and the following disclaimer. 57 + * 2. Redistributions in binary form must reproduce the above copyright 58 + * notice, this list of conditions and the following disclaimer in the 59 + * documentation and/or other materials provided with the distribution. 60 + * 3. All advertising materials mentioning features or use of this software 61 + * must display the following acknowledgement: 62 + * This product includes software developed by the University of 63 + * California, Berkeley and its contributors. 64 + * 4. Neither the name of the University nor the names of its contributors 65 + * may be used to endorse or promote products derived from this software 66 + * without specific prior written permission. 67 + * 68 + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 69 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 70 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 71 + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 72 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 73 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 74 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 75 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 76 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 77 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 78 + * SUCH DAMAGE. 79 + * 80 + * @(#)bitstring.h 8.1 (Berkeley) 7/19/93 81 + */ 82 + 83 +#ifndef _BITSTRING_H_ 84 +#define _BITSTRING_H_ 85 + 86 +typedef unsigned char bitstr_t; 87 + 88 +/* internal macros */ 89 + /* byte of the bitstring bit is in */ 90 +#define _bit_byte(bit) \ 91 + ((bit) >> 3) 92 + 93 + /* mask for the bit within its byte */ 94 +#define _bit_mask(bit) \ 95 + (1 << ((bit)&0x7)) 96 + 97 +/* external macros */ 98 + /* bytes in a bitstring of nbits bits */ 99 +#define bitstr_size(nbits) \ 100 + ((((nbits) - 1) >> 3) + 1) 101 + 102 + /* allocate a bitstring */ 103 +#define bit_alloc(nbits) \ 104 + (bitstr_t *)calloc(1, \ 105 + (unsigned int)bitstr_size(nbits) * sizeof(bitstr_t)) 106 + 107 + /* allocate a bitstring on the stack */ 108 +#define bit_decl(name, nbits) \ 109 + (name)[bitstr_size(nbits)] 110 + 111 + /* is bit N of bitstring name set? */ 112 +#define bit_test(name, bit) \ 113 + ((name)[_bit_byte(bit)] & _bit_mask(bit)) 114 + 115 + /* set bit N of bitstring name */ 116 +#define bit_set(name, bit) \ 117 + (name)[_bit_byte(bit)] |= _bit_mask(bit) 118 + 119 + /* clear bit N of bitstring name */ 120 +#define bit_clear(name, bit) \ 121 + (name)[_bit_byte(bit)] &= ~_bit_mask(bit) 122 + 123 + /* clear bits start ... stop in bitstring */ 124 +#define bit_nclear(name, start, stop) { \ 125 + register bitstr_t *_name = name; \ 126 + register int _start = start, _stop = stop; \ 127 + register int _startbyte = _bit_byte(_start); \ 128 + register int _stopbyte = _bit_byte(_stop); \ 129 + if (_startbyte == _stopbyte) { \ 130 + _name[_startbyte] &= ((0xff >> (8 - (_start&0x7))) | \ 131 + (0xff << ((_stop&0x7) + 1))); \ 132 + } else { \ 133 + _name[_startbyte] &= 0xff >> (8 - (_start&0x7)); \ 134 + while (++_startbyte < _stopbyte) \ 135 + _name[_startbyte] = 0; \ 136 + _name[_stopbyte] &= 0xff << ((_stop&0x7) + 1); \ 137 + } \ 138 +} 139 + 140 + /* set bits start ... stop in bitstring */ 141 +#define bit_nset(name, start, stop) { \ 142 + register bitstr_t *_name = name; \ 143 + register int _start = start, _stop = stop; \ 144 + register int _startbyte = _bit_byte(_start); \ 145 + register int _stopbyte = _bit_byte(_stop); \ 146 + if (_startbyte == _stopbyte) { \ 147 + _name[_startbyte] |= ((0xff << (_start&0x7)) & \ 148 + (0xff >> (7 - (_stop&0x7)))); \ 149 + } else { \ 150 + _name[_startbyte] |= 0xff << ((_start)&0x7); \ 151 + while (++_startbyte < _stopbyte) \ 152 + _name[_startbyte] = 0xff; \ 153 + _name[_stopbyte] |= 0xff >> (7 - (_stop&0x7)); \ 154 + } \ 155 +} 156 + 157 + /* find first bit clear in name */ 158 +#define bit_ffc(name, nbits, value) { \ 159 + register bitstr_t *_name = name; \ 160 + register int _byte, _nbits = nbits; \ 161 + register int _stopbyte = _bit_byte(_nbits), _value = -1; \ 162 + for (_byte = 0; _byte <= _stopbyte; ++_byte) \ 163 + if (_name[_byte] != 0xff) { \ 164 + _value = _byte << 3; \ 165 + for (_stopbyte = _name[_byte]; (_stopbyte&0x1); \ 166 + ++_value, _stopbyte >>= 1); \ 167 + break; \ 168 + } \ 169 + *(value) = _value; \ 170 +} 171 + 172 + /* find first bit set in name */ 173 +#define bit_ffs(name, nbits, value) { \ 174 + register bitstr_t *_name = name; \ 175 + register int _byte, _nbits = nbits; \ 176 + register int _stopbyte = _bit_byte(_nbits), _value = -1; \ 177 + for (_byte = 0; _byte <= _stopbyte; ++_byte) \ 178 + if (_name[_byte]) { \ 179 + _value = _byte << 3; \ 180 + for (_stopbyte = _name[_byte]; !(_stopbyte&0x1); \ 181 + ++_value, _stopbyte >>= 1); \ 182 + break; \ 183 + } \ 184 + *(value) = _value; \ 185 +} 186 + 187 +#endif /* !_BITSTRING_H_ */ 188 diff --git a/include/hfs/hfs_format.h b/include/hfs/hfs_format.h 189 new file mode 100644 190 index 0000000..d820329 191 --- /dev/null 192 +++ b/include/hfs/hfs_format.h 193 @@ -0,0 +1,689 @@ 194 +/* 195 + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. 196 + * 197 + * @APPLE_LICENSE_HEADER_START@ 198 + * 199 + * The contents of this file constitute Original Code as defined in and 200 + * are subject to the Apple Public Source License Version 1.1 (the 201 + * "License"). You may not use this file except in compliance with the 202 + * License. Please obtain a copy of the License at 203 + * http://www.apple.com/publicsource and read it before using this file. 204 + * 205 + * This Original Code and all software distributed under the License are 206 + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 207 + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 208 + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 209 + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 210 + * License for the specific language governing rights and limitations 211 + * under the License. 212 + * 213 + * @APPLE_LICENSE_HEADER_END@ 214 + */ 215 +#ifndef __HFS_FORMAT__ 216 +#define __HFS_FORMAT__ 217 + 218 +#include "missing.h" 219 + 220 +#include <sys/appleapiopts.h> 221 + 222 +/* 223 + * hfs_format.c 224 + * 225 + * This file describes the on-disk format for HFS and HFS Plus volumes. 226 + * The HFS Plus volume format is desciibed in detail in Apple Technote 1150. 227 + * 228 + * http://developer.apple.com/technotes/tn/tn1150.html 229 + * 230 + */ 231 + 232 +#ifdef __cplusplus 233 +extern "C" { 234 +#endif 235 + 236 +/* some on-disk hfs structures have 68K alignment (misaligned) */ 237 + 238 +#define PACKED_S __attribute__((packed)) 239 + 240 +/* Signatures used to differentiate between HFS and HFS Plus volumes */ 241 +enum { 242 + kHFSSigWord = 0x4244, /* 'BD' in ASCII */ 243 + kHFSPlusSigWord = 0x482B, /* 'H+' in ASCII */ 244 + kHFSXSigWord = 0x4858, /* 'HX' in ASCII */ 245 + 246 + kHFSPlusVersion = 0x0004, /* 'H+' volumes are version 4 only */ 247 + kHFSXVersion = 0x0005, /* 'HX' volumes start with version 5 */ 248 + 249 + kHFSPlusMountVersion = 0x31302E30, /* '10.0' for Mac OS X */ 250 + kHFSJMountVersion = 0x4846534a, /* 'HFSJ' for journaled HFS+ on OS X */ 251 + kFSKMountVersion = 0x46534b21 /* 'FSK!' for failed journal replay */ 252 +}PACKED_S; 253 + 254 + 255 +#if 1 256 +/* 257 + * Mac OS X has a special directory for linked and unlinked files (HFS Plus only). 258 + * This directory and its contents are never exported from the filesystem under 259 + * Mac OS X. 260 + * 261 + * To make this folder name sort last, it has embedded null prefix. 262 + * (0xC0, 0x80 in UTF-8) 263 + */ 264 +#define HFSPLUSMETADATAFOLDER "\xC0\x80\xC0\x80\xC0\x80\xC0\x80HFS+ Private Data" 265 + 266 +/* 267 + * Files in the HFS Private Data folder have one of the following prefixes 268 + * followed by a decimal number (no leading zeros). For indirect nodes this 269 + * number is a 32 bit random number. For unlinked (deleted) files that are 270 + * still open, the number is the file ID for that file. 271 + * 272 + * e.g. iNode7182000 and temp3296 273 + */ 274 +#define HFS_INODE_PREFIX "iNode" 275 +#define HFS_DELETE_PREFIX "temp" 276 + 277 +#endif /* __APPLE_API_PRIVATE */ 278 + 279 +/* 280 + * Indirect link files (hard links) have the following type/creator. 281 + */ 282 +enum { 283 + kHardLinkFileType = 0x686C6E6B, /* 'hlnk' */ 284 + kHFSPlusCreator = 0x6866732B /* 'hfs+' */ 285 +}PACKED_S; 286 + 287 + 288 +#ifndef _HFSUNISTR255_DEFINED_ 289 +#define _HFSUNISTR255_DEFINED_ 290 +/* Unicode strings are used for HFS Plus file and folder names */ 291 +struct HFSUniStr255 { 292 + u_int16_t length; /* number of unicode characters */ 293 + u_int16_t unicode[255]; /* unicode characters */ 294 +} PACKED_S; 295 +typedef struct HFSUniStr255 HFSUniStr255; 296 +typedef const HFSUniStr255 *ConstHFSUniStr255Param; 297 +#endif /* _HFSUNISTR255_DEFINED_ */ 298 + 299 +enum { 300 + kHFSMaxVolumeNameChars = 27, 301 + kHFSMaxFileNameChars = 31, 302 + kHFSPlusMaxFileNameChars = 255 303 +}PACKED_S; 304 + 305 + 306 +/* Extent overflow file data structures */ 307 + 308 +/* HFS Extent key */ 309 +struct HFSExtentKey { 310 + u_int8_t keyLength; /* length of key, excluding this field */ 311 + u_int8_t forkType; /* 0 = data fork, FF = resource fork */ 312 + u_int32_t fileID; /* file ID */ 313 + u_int16_t startBlock; /* first file allocation block number in this extent */ 314 +}PACKED_S; 315 +typedef struct HFSExtentKey HFSExtentKey; 316 + 317 +/* HFS Plus Extent key */ 318 +struct HFSPlusExtentKey { 319 + u_int16_t keyLength; /* length of key, excluding this field */ 320 + u_int8_t forkType; /* 0 = data fork, FF = resource fork */ 321 + u_int8_t pad; /* make the other fields align on 32-bit boundary */ 322 + u_int32_t fileID; /* file ID */ 323 + u_int32_t startBlock; /* first file allocation block number in this extent */ 324 +}PACKED_S; 325 +typedef struct HFSPlusExtentKey HFSPlusExtentKey; 326 + 327 +/* Number of extent descriptors per extent record */ 328 +enum { 329 + kHFSExtentDensity = 3, 330 + kHFSPlusExtentDensity = 8 331 +}PACKED_S; 332 + 333 +/* HFS extent descriptor */ 334 +struct HFSExtentDescriptor { 335 + u_int16_t startBlock; /* first allocation block */ 336 + u_int16_t blockCount; /* number of allocation blocks */ 337 +}PACKED_S; 338 +typedef struct HFSExtentDescriptor HFSExtentDescriptor; 339 + 340 +/* HFS Plus extent descriptor */ 341 +struct HFSPlusExtentDescriptor { 342 + u_int32_t startBlock; /* first allocation block */ 343 + u_int32_t blockCount; /* number of allocation blocks */ 344 +}PACKED_S; 345 +typedef struct HFSPlusExtentDescriptor HFSPlusExtentDescriptor; 346 + 347 +/* HFS extent record */ 348 +typedef HFSExtentDescriptor HFSExtentRecord[3]; 349 + 350 +/* HFS Plus extent record */ 351 +typedef HFSPlusExtentDescriptor HFSPlusExtentRecord[8]; 352 + 353 + 354 +/* Finder information */ 355 +struct FndrFileInfo { 356 + u_int32_t fdType; /* file type */ 357 + u_int32_t fdCreator; /* file creator */ 358 + u_int16_t fdFlags; /* Finder flags */ 359 + struct { 360 + int16_t v; /* file's location */ 361 + int16_t h; 362 + } PACKED_S fdLocation; 363 + int16_t opaque; 364 +}PACKED_S; 365 +typedef struct FndrFileInfo FndrFileInfo; 366 + 367 +struct FndrDirInfo { 368 + struct { /* folder's window rectangle */ 369 + int16_t top; 370 + int16_t left; 371 + int16_t bottom; 372 + int16_t right; 373 + }PACKED_S frRect; 374 + unsigned short frFlags; /* Finder flags */ 375 + struct { 376 + u_int16_t v; /* folder's location */ 377 + u_int16_t h; 378 + }PACKED_S frLocation; 379 + int16_t opaque; 380 +}PACKED_S; 381 +typedef struct FndrDirInfo FndrDirInfo; 382 + 383 +struct FndrOpaqueInfo { 384 + int8_t opaque[16]; 385 +}PACKED_S; 386 +typedef struct FndrOpaqueInfo FndrOpaqueInfo; 387 + 388 + 389 +/* HFS Plus Fork data info - 80 bytes */ 390 +struct HFSPlusForkData { 391 + u_int64_t logicalSize; /* fork's logical size in bytes */ 392 + u_int32_t clumpSize; /* fork's clump size in bytes */ 393 + u_int32_t totalBlocks; /* total blocks used by this fork */ 394 + HFSPlusExtentRecord extents; /* initial set of extents */ 395 +}PACKED_S; 396 +typedef struct HFSPlusForkData HFSPlusForkData; 397 + 398 + 399 +/* Mac OS X has 16 bytes worth of "BSD" info. 400 + * 401 + * Note: Mac OS 9 implementations and applications 402 + * should preserve, but not change, this information. 403 + */ 404 +struct HFSPlusBSDInfo { 405 + u_int32_t ownerID; /* user or group ID of file/folder owner */ 406 + u_int32_t groupID; /* additional user of group ID */ 407 + u_int8_t adminFlags; /* super-user changeable flags */ 408 + u_int8_t ownerFlags; /* owner changeable flags */ 409 + u_int16_t fileMode; /* file type and permission bits */ 410 + union { 411 + u_int32_t iNodeNum; /* indirect node number (hard links only) */ 412 + u_int32_t linkCount; /* links that refer to this indirect node */ 413 + u_int32_t rawDevice; /* special file device (FBLK and FCHR only) */ 414 + }PACKED_S special; 415 +}PACKED_S; 416 +typedef struct HFSPlusBSDInfo HFSPlusBSDInfo; 417 + 418 + 419 +/* Catalog file data structures */ 420 + 421 +enum { 422 + kHFSRootParentID = 1, /* Parent ID of the root folder */ 423 + kHFSRootFolderID = 2, /* Folder ID of the root folder */ 424 + kHFSExtentsFileID = 3, /* File ID of the extents file */ 425 + kHFSCatalogFileID = 4, /* File ID of the catalog file */ 426 + kHFSBadBlockFileID = 5, /* File ID of the bad allocation block file */ 427 + kHFSAllocationFileID = 6, /* File ID of the allocation file (HFS Plus only) */ 428 + kHFSStartupFileID = 7, /* File ID of the startup file (HFS Plus only) */ 429 + kHFSAttributesFileID = 8, /* File ID of the attribute file (HFS Plus only) */ 430 + kHFSRepairCatalogFileID = 14, /* Used when rebuilding Catalog B-tree */ 431 + kHFSBogusExtentFileID = 15, /* Used for exchanging extents in extents file */ 432 + kHFSFirstUserCatalogNodeID = 16 433 +}PACKED_S; 434 + 435 +/* HFS catalog key */ 436 +struct HFSCatalogKey { 437 + u_int8_t keyLength; /* key length (in bytes) */ 438 + u_int8_t reserved; /* reserved (set to zero) */ 439 + u_int32_t parentID; /* parent folder ID */ 440 + u_int8_t nodeName[kHFSMaxFileNameChars + 1]; /* catalog node name */ 441 +}PACKED_S; 442 +typedef struct HFSCatalogKey HFSCatalogKey; 443 + 444 +/* HFS Plus catalog key */ 445 +struct HFSPlusCatalogKey { 446 + u_int16_t keyLength; /* key length (in bytes) */ 447 + u_int32_t parentID; /* parent folder ID */ 448 + HFSUniStr255 nodeName; /* catalog node name */ 449 +}PACKED_S; 450 +typedef struct HFSPlusCatalogKey HFSPlusCatalogKey; 451 + 452 +/* Catalog record types */ 453 +enum { 454 + /* HFS Catalog Records */ 455 + kHFSFolderRecord = 0x0100, /* Folder record */ 456 + kHFSFileRecord = 0x0200, /* File record */ 457 + kHFSFolderThreadRecord = 0x0300, /* Folder thread record */ 458 + kHFSFileThreadRecord = 0x0400, /* File thread record */ 459 + 460 + /* HFS Plus Catalog Records */ 461 + kHFSPlusFolderRecord = 1, /* Folder record */ 462 + kHFSPlusFileRecord = 2, /* File record */ 463 + kHFSPlusFolderThreadRecord = 3, /* Folder thread record */ 464 + kHFSPlusFileThreadRecord = 4 /* File thread record */ 465 +}PACKED_S; 466 + 467 + 468 +/* Catalog file record flags */ 469 +enum { 470 + kHFSFileLockedBit = 0x0000, /* file is locked and cannot be written to */ 471 + kHFSFileLockedMask = 0x0001, 472 + 473 + kHFSThreadExistsBit = 0x0001, /* a file thread record exists for this file */ 474 + kHFSThreadExistsMask = 0x0002, 475 + 476 + kHFSHasAttributesBit = 0x0002, /* object has extended attributes */ 477 + kHFSHasAttributesMask = 0x0004, 478 + 479 + kHFSHasSecurityBit = 0x0003, /* object has security data (ACLs) */ 480 + kHFSHasSecurityMask = 0x0008 481 +}PACKED_S; 482 + 483 + 484 +/* HFS catalog folder record - 70 bytes */ 485 +struct HFSCatalogFolder { 486 + int16_t recordType; /* == kHFSFolderRecord */ 487 + u_int16_t flags; /* folder flags */ 488 + u_int16_t valence; /* folder valence */ 489 + u_int32_t folderID; /* folder ID */ 490 + u_int32_t createDate; /* date and time of creation */ 491 + u_int32_t modifyDate; /* date and time of last modification */ 492 + u_int32_t backupDate; /* date and time of last backup */ 493 + FndrDirInfo userInfo; /* Finder information */ 494 + FndrOpaqueInfo finderInfo; /* additional Finder information */ 495 + u_int32_t reserved[4]; /* reserved - initialized as zero */ 496 +}PACKED_S; 497 +typedef struct HFSCatalogFolder HFSCatalogFolder; 498 + 499 +/* HFS Plus catalog folder record - 88 bytes */ 500 +struct HFSPlusCatalogFolder { 501 + int16_t recordType; /* == kHFSPlusFolderRecord */ 502 + u_int16_t flags; /* file flags */ 503 + u_int32_t valence; /* folder's valence (limited to 2^16 in Mac OS) */ 504 + u_int32_t folderID; /* folder ID */ 505 + u_int32_t createDate; /* date and time of creation */ 506 + u_int32_t contentModDate; /* date and time of last content modification */ 507 + u_int32_t attributeModDate; /* date and time of last attribute modification */ 508 + u_int32_t accessDate; /* date and time of last access (MacOS X only) */ 509 + u_int32_t backupDate; /* date and time of last backup */ 510 + HFSPlusBSDInfo bsdInfo; /* permissions (for MacOS X) */ 511 + FndrDirInfo userInfo; /* Finder information */ 512 + FndrOpaqueInfo finderInfo; /* additional Finder information */ 513 + u_int32_t textEncoding; /* hint for name conversions */ 514 + u_int32_t attrBlocks; /* cached count of attribute data blocks */ 515 +}PACKED_S; 516 +typedef struct HFSPlusCatalogFolder HFSPlusCatalogFolder; 517 + 518 +/* HFS catalog file record - 102 bytes */ 519 +struct HFSCatalogFile { 520 + int16_t recordType; /* == kHFSFileRecord */ 521 + u_int8_t flags; /* file flags */ 522 + int8_t fileType; /* file type (unused ?) */ 523 + FndrFileInfo userInfo; /* Finder information */ 524 + u_int32_t fileID; /* file ID */ 525 + u_int16_t dataStartBlock; /* not used - set to zero */ 526 + int32_t dataLogicalSize; /* logical EOF of data fork */ 527 + int32_t dataPhysicalSize; /* physical EOF of data fork */ 528 + u_int16_t rsrcStartBlock; /* not used - set to zero */ 529 + int32_t rsrcLogicalSize; /* logical EOF of resource fork */ 530 + int32_t rsrcPhysicalSize; /* physical EOF of resource fork */ 531 + u_int32_t createDate; /* date and time of creation */ 532 + u_int32_t modifyDate; /* date and time of last modification */ 533 + u_int32_t backupDate; /* date and time of last backup */ 534 + FndrOpaqueInfo finderInfo; /* additional Finder information */ 535 + u_int16_t clumpSize; /* file clump size (not used) */ 536 + HFSExtentRecord dataExtents; /* first data fork extent record */ 537 + HFSExtentRecord rsrcExtents; /* first resource fork extent record */ 538 + u_int32_t reserved; /* reserved - initialized as zero */ 539 +}PACKED_S; 540 +typedef struct HFSCatalogFile HFSCatalogFile; 541 + 542 +/* HFS Plus catalog file record - 248 bytes */ 543 +struct HFSPlusCatalogFile { 544 + int16_t recordType; /* == kHFSPlusFileRecord */ 545 + u_int16_t flags; /* file flags */ 546 + u_int32_t reserved1; /* reserved - initialized as zero */ 547 + u_int32_t fileID; /* file ID */ 548 + u_int32_t createDate; /* date and time of creation */ 549 + u_int32_t contentModDate; /* date and time of last content modification */ 550 + u_int32_t attributeModDate; /* date and time of last attribute modification */ 551 + u_int32_t accessDate; /* date and time of last access (MacOS X only) */ 552 + u_int32_t backupDate; /* date and time of last backup */ 553 + HFSPlusBSDInfo bsdInfo; /* permissions (for MacOS X) */ 554 + FndrFileInfo userInfo; /* Finder information */ 555 + FndrOpaqueInfo finderInfo; /* additional Finder information */ 556 + u_int32_t textEncoding; /* hint for name conversions */ 557 + u_int32_t attrBlocks; /* cached count of attribute data blocks */ 558 + 559 + /* Note: these start on double long (64 bit) boundary */ 560 + HFSPlusForkData dataFork; /* size and block data for data fork */ 561 + HFSPlusForkData resourceFork; /* size and block data for resource fork */ 562 +}PACKED_S; 563 +typedef struct HFSPlusCatalogFile HFSPlusCatalogFile; 564 + 565 +/* HFS catalog thread record - 46 bytes */ 566 +struct HFSCatalogThread { 567 + int16_t recordType; /* == kHFSFolderThreadRecord or kHFSFileThreadRecord */ 568 + int32_t reserved[2]; /* reserved - initialized as zero */ 569 + u_int32_t parentID; /* parent ID for this catalog node */ 570 + u_int8_t nodeName[kHFSMaxFileNameChars + 1]; /* name of this catalog node */ 571 +}PACKED_S; 572 +typedef struct HFSCatalogThread HFSCatalogThread; 573 + 574 +/* HFS Plus catalog thread record -- 264 bytes */ 575 +struct HFSPlusCatalogThread { 576 + int16_t recordType; /* == kHFSPlusFolderThreadRecord or kHFSPlusFileThreadRecord */ 577 + int16_t reserved; /* reserved - initialized as zero */ 578 + u_int32_t parentID; /* parent ID for this catalog node */ 579 + HFSUniStr255 nodeName; /* name of this catalog node (variable length) */ 580 +}PACKED_S; 581 +typedef struct HFSPlusCatalogThread HFSPlusCatalogThread; 582 + 583 +#ifdef __APPLE_API_UNSTABLE 584 +/* 585 + These are the types of records in the attribute B-tree. The values were 586 + chosen so that they wouldn't conflict with the catalog record types. 587 +*/ 588 +enum { 589 + kHFSPlusAttrInlineData = 0x10, /* if size < kAttrOverflowSize */ 590 + kHFSPlusAttrForkData = 0x20, /* if size >= kAttrOverflowSize */ 591 + kHFSPlusAttrExtents = 0x30 /* overflow extents for large attributes */ 592 +}PACKED_S; 593 + 594 + 595 +/* 596 + HFSPlusAttrForkData 597 + For larger attributes, whose value is stored in allocation blocks. 598 + If the attribute has more than 8 extents, there will be additional 599 + records (of type HFSPlusAttrExtents) for this attribute. 600 +*/ 601 +struct HFSPlusAttrForkData { 602 + u_int32_t recordType; /* == kHFSPlusAttrForkData*/ 603 + u_int32_t reserved; 604 + HFSPlusForkData theFork; /* size and first extents of value*/ 605 +}PACKED_S; 606 +typedef struct HFSPlusAttrForkData HFSPlusAttrForkData; 607 + 608 +/* 609 + HFSPlusAttrExtents 610 + This record contains information about overflow extents for large, 611 + fragmented attributes. 612 +*/ 613 +struct HFSPlusAttrExtents { 614 + u_int32_t recordType; /* == kHFSPlusAttrExtents*/ 615 + u_int32_t reserved; 616 + HFSPlusExtentRecord extents; /* additional extents*/ 617 +}PACKED_S; 618 +typedef struct HFSPlusAttrExtents HFSPlusAttrExtents; 619 + 620 +/* 621 + * Atrributes B-tree Data Record 622 + * 623 + * For small attributes, whose entire value is stored 624 + * within a single B-tree record. 625 + */ 626 +struct HFSPlusAttrData { 627 + u_int32_t recordType; /* == kHFSPlusAttrInlineData */ 628 + u_int32_t reserved[2]; 629 + u_int32_t attrSize; /* size of attribute data in bytes */ 630 + u_int8_t attrData[2]; /* variable length */ 631 +}PACKED_S; 632 +typedef struct HFSPlusAttrData HFSPlusAttrData; 633 + 634 + 635 +/* HFSPlusAttrInlineData is obsolete use HFSPlusAttrData instead */ 636 +struct HFSPlusAttrInlineData { 637 + u_int32_t recordType; 638 + u_int32_t reserved; 639 + u_int32_t logicalSize; 640 + u_int8_t userData[2]; 641 +}PACKED_S; 642 +typedef struct HFSPlusAttrInlineData HFSPlusAttrInlineData; 643 + 644 + 645 +/* A generic Attribute Record*/ 646 +union HFSPlusAttrRecord { 647 + u_int32_t recordType; 648 + HFSPlusAttrInlineData inlineData; /* NOT USED */ 649 + HFSPlusAttrData attrData; 650 + HFSPlusAttrForkData forkData; 651 + HFSPlusAttrExtents overflowExtents; 652 +}PACKED_S; 653 +typedef union HFSPlusAttrRecord HFSPlusAttrRecord; 654 + 655 +/* Attribute key */ 656 +enum { kHFSMaxAttrNameLen = 127 }; 657 +struct HFSPlusAttrKey { 658 + u_int16_t keyLength; /* key length (in bytes) */ 659 + u_int16_t pad; /* set to zero */ 660 + u_int32_t fileID; /* file associated with attribute */ 661 + u_int32_t startBlock; /* first attribue allocation block number for extents */ 662 + u_int16_t attrNameLen; /* number of unicode characters */ 663 + u_int16_t attrName[127]; /* attribute name (Unicode) */ 664 +}PACKED_S; 665 +typedef struct HFSPlusAttrKey HFSPlusAttrKey; 666 + 667 +#define kHFSPlusAttrKeyMaximumLength (sizeof(HFSPlusAttrKey) - sizeof(u_int16_t)) 668 +#define kHFSPlusAttrKeyMinimumLength (kHFSPlusAttrKeyMaximumLength - (127 * sizeof(u_int16_t))) 669 + 670 +#endif /* __APPLE_API_UNSTABLE */ 671 + 672 + 673 +/* Key and node lengths */ 674 +enum { 675 + kHFSPlusExtentKeyMaximumLength = sizeof(HFSPlusExtentKey) - sizeof(u_int16_t), 676 + kHFSExtentKeyMaximumLength = sizeof(HFSExtentKey) - sizeof(u_int8_t), 677 + kHFSPlusCatalogKeyMaximumLength = sizeof(HFSPlusCatalogKey) - sizeof(u_int16_t), 678 + kHFSPlusCatalogKeyMinimumLength = kHFSPlusCatalogKeyMaximumLength - sizeof(HFSUniStr255) + sizeof(u_int16_t), 679 + kHFSCatalogKeyMaximumLength = sizeof(HFSCatalogKey) - sizeof(u_int8_t), 680 + kHFSCatalogKeyMinimumLength = kHFSCatalogKeyMaximumLength - (kHFSMaxFileNameChars + 1) + sizeof(u_int8_t), 681 + kHFSPlusCatalogMinNodeSize = 4096, 682 + kHFSPlusExtentMinNodeSize = 512, 683 + kHFSPlusAttrMinNodeSize = 4096 684 +}PACKED_S; 685 + 686 +/* HFS and HFS Plus volume attribute bits */ 687 +enum { 688 + /* Bits 0-6 are reserved (always cleared by MountVol call) */ 689 + kHFSVolumeHardwareLockBit = 7, /* volume is locked by hardware */ 690 + kHFSVolumeUnmountedBit = 8, /* volume was successfully unmounted */ 691 + kHFSVolumeSparedBlocksBit = 9, /* volume has bad blocks spared */ 692 + kHFSVolumeNoCacheRequiredBit = 10, /* don't cache volume blocks (i.e. RAM or ROM disk) */ 693 + kHFSBootVolumeInconsistentBit = 11, /* boot volume is inconsistent (System 7.6 and later) */ 694 + kHFSCatalogNodeIDsReusedBit = 12, 695 + kHFSVolumeJournaledBit = 13, /* this volume has a journal on it */ 696 + kHFSVolumeInconsistentBit = 14, /* serious inconsistencies detected at runtime */ 697 + kHFSVolumeSoftwareLockBit = 15, /* volume is locked by software */ 698 + 699 + kHFSVolumeHardwareLockMask = 1 << kHFSVolumeHardwareLockBit, 700 + kHFSVolumeUnmountedMask = 1 << kHFSVolumeUnmountedBit, 701 + kHFSVolumeSparedBlocksMask = 1 << kHFSVolumeSparedBlocksBit, 702 + kHFSVolumeNoCacheRequiredMask = 1 << kHFSVolumeNoCacheRequiredBit, 703 + kHFSBootVolumeInconsistentMask = 1 << kHFSBootVolumeInconsistentBit, 704 + kHFSCatalogNodeIDsReusedMask = 1 << kHFSCatalogNodeIDsReusedBit, 705 + kHFSVolumeJournaledMask = 1 << kHFSVolumeJournaledBit, 706 + kHFSVolumeInconsistentMask = 1 << kHFSVolumeInconsistentBit, 707 + kHFSVolumeSoftwareLockMask = 1 << kHFSVolumeSoftwareLockBit, 708 + kHFSMDBAttributesMask = 0x8380 709 +}PACKED_S; 710 + 711 + 712 +/* HFS Master Directory Block - 162 bytes */ 713 +/* Stored at sector #2 (3rd sector) and second-to-last sector. */ 714 +struct HFSMasterDirectoryBlock { 715 + u_int16_t drSigWord; /* == kHFSSigWord */ 716 + u_int32_t drCrDate; /* date and time of volume creation */ 717 + u_int32_t drLsMod; /* date and time of last modification */ 718 + u_int16_t drAtrb; /* volume attributes */ 719 + u_int16_t drNmFls; /* number of files in root folder */ 720 + u_int16_t drVBMSt; /* first block of volume bitmap */ 721 + u_int16_t drAllocPtr; /* start of next allocation search */ 722 + u_int16_t drNmAlBlks; /* number of allocation blocks in volume */ 723 + u_int32_t drAlBlkSiz; /* size (in bytes) of allocation blocks */ 724 + u_int32_t drClpSiz; /* default clump size */ 725 + u_int16_t drAlBlSt; /* first allocation block in volume */ 726 + u_int32_t drNxtCNID; /* next unused catalog node ID */ 727 + u_int16_t drFreeBks; /* number of unused allocation blocks */ 728 + u_int8_t drVN[kHFSMaxVolumeNameChars + 1]; /* volume name */ 729 + u_int32_t drVolBkUp; /* date and time of last backup */ 730 + u_int16_t drVSeqNum; /* volume backup sequence number */ 731 + u_int32_t drWrCnt; /* volume write count */ 732 + u_int32_t drXTClpSiz; /* clump size for extents overflow file */ 733 + u_int32_t drCTClpSiz; /* clump size for catalog file */ 734 + u_int16_t drNmRtDirs; /* number of directories in root folder */ 735 + u_int32_t drFilCnt; /* number of files in volume */ 736 + u_int32_t drDirCnt; /* number of directories in volume */ 737 + u_int32_t drFndrInfo[8]; /* information used by the Finder */ 738 + u_int16_t drEmbedSigWord; /* embedded volume signature (formerly drVCSize) */ 739 + HFSExtentDescriptor drEmbedExtent; /* embedded volume location and size (formerly drVBMCSize and drCtlCSize) */ 740 + u_int32_t drXTFlSize; /* size of extents overflow file */ 741 + HFSExtentRecord drXTExtRec; /* extent record for extents overflow file */ 742 + u_int32_t drCTFlSize; /* size of catalog file */ 743 + HFSExtentRecord drCTExtRec; /* extent record for catalog file */ 744 +}PACKED_S; 745 +typedef struct HFSMasterDirectoryBlock HFSMasterDirectoryBlock; 746 + 747 + 748 +#ifdef __APPLE_API_UNSTABLE 749 +#define SET_HFS_TEXT_ENCODING(hint) \ 750 + (0x656e6300 | ((hint) & 0xff)) 751 +#define GET_HFS_TEXT_ENCODING(hint) \ 752 + (((hint) & 0xffffff00) == 0x656e6300 ? (hint) & 0x000000ff : 0xffffffffU) 753 +#endif /* __APPLE_API_UNSTABLE */ 754 + 755 + 756 +/* HFS Plus Volume Header - 512 bytes */ 757 +/* Stored at sector #2 (3rd sector) and second-to-last sector. */ 758 +struct HFSPlusVolumeHeader { 759 + u_int16_t signature; /* == kHFSPlusSigWord */ 760 + u_int16_t version; /* == kHFSPlusVersion */ 761 + u_int32_t attributes; /* volume attributes */ 762 + u_int32_t lastMountedVersion; /* implementation version which last mounted volume */ 763 + u_int32_t journalInfoBlock; /* block addr of journal info (if volume is journaled, zero otherwise) */ 764 + 765 + u_int32_t createDate; /* date and time of volume creation */ 766 + u_int32_t modifyDate; /* date and time of last modification */ 767 + u_int32_t backupDate; /* date and time of last backup */ 768 + u_int32_t checkedDate; /* date and time of last disk check */ 769 + 770 + u_int32_t fileCount; /* number of files in volume */ 771 + u_int32_t folderCount; /* number of directories in volume */ 772 + 773 + u_int32_t blockSize; /* size (in bytes) of allocation blocks */ 774 + u_int32_t totalBlocks; /* number of allocation blocks in volume (includes this header and VBM*/ 775 + u_int32_t freeBlocks; /* number of unused allocation blocks */ 776 + 777 + u_int32_t nextAllocation; /* start of next allocation search */ 778 + u_int32_t rsrcClumpSize; /* default resource fork clump size */ 779 + u_int32_t dataClumpSize; /* default data fork clump size */ 780 + u_int32_t nextCatalogID; /* next unused catalog node ID */ 781 + 782 + u_int32_t writeCount; /* volume write count */ 783 + u_int64_t encodingsBitmap; /* which encodings have been use on this volume */ 784 + 785 + u_int8_t finderInfo[32]; /* information used by the Finder */ 786 + 787 + HFSPlusForkData allocationFile; /* allocation bitmap file */ 788 + HFSPlusForkData extentsFile; /* extents B-tree file */ 789 + HFSPlusForkData catalogFile; /* catalog B-tree file */ 790 + HFSPlusForkData attributesFile; /* extended attributes B-tree file */ 791 + HFSPlusForkData startupFile; /* boot file (secondary loader) */ 792 +}PACKED_S; 793 +typedef struct HFSPlusVolumeHeader HFSPlusVolumeHeader; 794 + 795 + 796 +/* B-tree structures */ 797 + 798 +enum BTreeKeyLimits{ 799 + kMaxKeyLength = 520 800 +}PACKED_S; 801 + 802 +union BTreeKey{ 803 + u_int8_t length8; 804 + u_int16_t length16; 805 + u_int8_t rawData [kMaxKeyLength+2]; 806 +}PACKED_S; 807 +typedef union BTreeKey BTreeKey; 808 + 809 +/* BTNodeDescriptor -- Every B-tree node starts with these fields. */ 810 +struct BTNodeDescriptor { 811 + u_int32_t fLink; /* next node at this level*/ 812 + u_int32_t bLink; /* previous node at this level*/ 813 + int8_t kind; /* kind of node (leaf, index, header, map)*/ 814 + u_int8_t height; /* zero for header, map; child is one more than parent*/ 815 + u_int16_t numRecords; /* number of records in this node*/ 816 + u_int16_t reserved; /* reserved - initialized as zero */ 817 +}PACKED_S; 818 +typedef struct BTNodeDescriptor BTNodeDescriptor; 819 + 820 +/* Constants for BTNodeDescriptor kind */ 821 +enum { 822 + kBTLeafNode = -1, 823 + kBTIndexNode = 0, 824 + kBTHeaderNode = 1, 825 + kBTMapNode = 2 826 +}PACKED_S; 827 + 828 +/* BTHeaderRec -- The first record of a B-tree header node */ 829 +struct BTHeaderRec { 830 + u_int16_t treeDepth; /* maximum height (usually leaf nodes) */ 831 + u_int32_t rootNode; /* node number of root node */ 832 + u_int32_t leafRecords; /* number of leaf records in all leaf nodes */ 833 + u_int32_t firstLeafNode; /* node number of first leaf node */ 834 + u_int32_t lastLeafNode; /* node number of last leaf node */ 835 + u_int16_t nodeSize; /* size of a node, in bytes */ 836 + u_int16_t maxKeyLength; /* reserved */ 837 + u_int32_t totalNodes; /* total number of nodes in tree */ 838 + u_int32_t freeNodes; /* number of unused (free) nodes in tree */ 839 + u_int16_t reserved1; /* unused */ 840 + u_int32_t clumpSize; /* reserved */ 841 + u_int8_t btreeType; /* reserved */ 842 + u_int8_t keyCompareType; /* Key string Comparison Type */ 843 + u_int32_t attributes; /* persistent attributes about the tree */ 844 + u_int32_t reserved3[16]; /* reserved */ 845 +}PACKED_S; 846 +typedef struct BTHeaderRec BTHeaderRec; 847 + 848 +/* Constants for BTHeaderRec attributes */ 849 +enum { 850 + kBTBadCloseMask = 0x00000001, /* reserved */ 851 + kBTBigKeysMask = 0x00000002, /* key length field is 16 bits */ 852 + kBTVariableIndexKeysMask = 0x00000004 /* keys in index nodes are variable length */ 853 +}PACKED_S; 854 + 855 + 856 +/* Catalog Key Name Comparison Type */ 857 +enum { 858 + kHFSCaseFolding = 0xCF, /* case folding (case-insensitive) */ 859 + kHFSBinaryCompare = 0xBC /* binary compare (case-sensitive) */ 860 +}PACKED_S; 861 + 862 +/* JournalInfoBlock - Structure that describes where our journal lives */ 863 +struct JournalInfoBlock { 864 + u_int32_t flags; 865 + u_int32_t device_signature[8]; // signature used to locate our device. 866 + u_int64_t offset; // byte offset to the journal on the device 867 + u_int64_t size; // size in bytes of the journal 868 + u_int32_t reserved[32]; 869 +}PACKED_S; 870 +typedef struct JournalInfoBlock JournalInfoBlock; 871 + 872 +enum { 873 + kJIJournalInFSMask = 0x00000001, 874 + kJIJournalOnOtherDeviceMask = 0x00000002, 875 + kJIJournalNeedInitMask = 0x00000004 876 +}PACKED_S; 877 + 878 +#ifdef __cplusplus 879 +} 880 +#endif 881 + 882 +#endif /* __HFS_FORMAT__ */ 883 diff --git a/include/hfs/hfs_mount.h b/include/hfs/hfs_mount.h 884 new file mode 100644 885 index 0000000..ad729f2 886 --- /dev/null 887 +++ b/include/hfs/hfs_mount.h 888 @@ -0,0 +1,78 @@ 889 +/* 890 + * Copyright (c) 2000-2003 Apple Computer, Inc. All rights reserved. 891 + * 892 + * @APPLE_LICENSE_HEADER_START@ 893 + * 894 + * The contents of this file constitute Original Code as defined in and 895 + * are subject to the Apple Public Source License Version 1.1 (the 896 + * "License"). You may not use this file except in compliance with the 897 + * License. Please obtain a copy of the License at 898 + * http://www.apple.com/publicsource and read it before using this file. 899 + * 900 + * This Original Code and all software distributed under the License are 901 + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 902 + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 903 + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 904 + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 905 + * License for the specific language governing rights and limitations 906 + * under the License. 907 + * 908 + * @APPLE_LICENSE_HEADER_END@ 909 + */ 910 +/* 911 + * Copyright (c) 1997-2002 Apple Computer, Inc. All Rights Reserved 912 + * 913 + */ 914 + 915 +#ifndef _HFS_MOUNT_H_ 916 +#define _HFS_MOUNT_H_ 917 + 918 +#include <sys/appleapiopts.h> 919 + 920 +#include <sys/mount.h> 921 +#include <sys/time.h> 922 + 923 +/* 924 + * Arguments to mount HFS-based filesystems 925 + */ 926 + 927 +#define OVERRIDE_UNKNOWN_PERMISSIONS 0 928 + 929 +#define UNKNOWNUID ((uid_t)99) 930 +#define UNKNOWNGID ((gid_t)99) 931 +#define UNKNOWNPERMISSIONS (S_IRWXU | S_IROTH | S_IXOTH) /* 705 */ 932 + 933 +#ifdef __APPLE_API_UNSTABLE 934 +struct hfs_mount_args { 935 +#ifndef KERNEL 936 + char *fspec; /* block special device to mount */ 937 +#endif 938 + uid_t hfs_uid; /* uid that owns hfs files (standard HFS only) */ 939 + gid_t hfs_gid; /* gid that owns hfs files (standard HFS only) */ 940 + mode_t hfs_mask; /* mask to be applied for hfs perms (standard HFS only) */ 941 + u_int32_t hfs_encoding; /* encoding for this volume (standard HFS only) */ 942 + struct timezone hfs_timezone; /* user time zone info (standard HFS only) */ 943 + int flags; /* mounting flags, see below */ 944 + int journal_tbuffer_size; /* size in bytes of the journal transaction buffer */ 945 + int journal_flags; /* flags to pass to journal_open/create */ 946 + int journal_disable; /* don't use journaling (potentially dangerous) */ 947 +}; 948 + 949 +#define HFSFSMNT_NOXONFILES 0x1 /* disable execute permissions for files */ 950 +#define HFSFSMNT_WRAPPER 0x2 /* mount HFS wrapper (if it exists) */ 951 +#define HFSFSMNT_EXTENDED_ARGS 0x4 /* indicates new fields after "flags" are valid */ 952 + 953 +/* 954 + * Sysctl values for HFS 955 + */ 956 +#define HFS_ENCODINGBIAS 1 /* encoding matching CJK bias */ 957 +#define HFS_EXTEND_FS 2 958 +#define HFS_ENCODINGHINT 3 /* guess encoding for string */ 959 +#define HFS_ENABLE_JOURNALING 0x082969 960 +#define HFS_DISABLE_JOURNALING 0x031272 961 +#define HFS_GET_JOURNAL_INFO 0x6a6e6c69 962 +#define HFS_SET_PKG_EXTENSIONS 0x121031 963 + 964 +#endif /* __APPLE_API_UNSTABLE */ 965 + 966 +#endif /* ! _HFS_MOUNT_H_ */ 967 diff --git a/include/sys/appleapiopts.h b/include/sys/appleapiopts.h 968 new file mode 100644 969 index 0000000..4d2061f 970 --- /dev/null 971 +++ b/include/sys/appleapiopts.h 972 @@ -0,0 +1,52 @@ 973 +/* 974 + * Copyright (c) 2002 Apple Computer, Inc. All rights reserved. 975 + * 976 + * @APPLE_LICENSE_HEADER_START@ 977 + * 978 + * The contents of this file constitute Original Code as defined in and 979 + * are subject to the Apple Public Source License Version 1.1 (the 980 + * "License"). You may not use this file except in compliance with the 981 + * License. Please obtain a copy of the License at 982 + * http://www.apple.com/publicsource and read it before using this file. 983 + * 984 + * This Original Code and all software distributed under the License are 985 + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 986 + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 987 + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 988 + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 989 + * License for the specific language governing rights and limitations 990 + * under the License. 991 + * 992 + * @APPLE_LICENSE_HEADER_END@ 993 + */ 994 + 995 +#ifndef __SYS_APPLEAPIOPTS_H__ 996 +#define __SYS_APPLEAPIOPTS_H__ 997 + 998 + 999 +#ifndef __APPLE_API_STANDARD 1000 +#define __APPLE_API_STANDARD 1001 +#endif /* __APPLE_API_STANDARD */ 1002 + 1003 +#ifndef __APPLE_API_STABLE 1004 +#define __APPLE_API_STABLE 1005 +#endif /* __APPLE_API_STABLE */ 1006 + 1007 +#ifndef __APPLE_API_STRICT_CONFORMANCE 1008 + 1009 +#ifndef __APPLE_API_EVOLVING 1010 +#define __APPLE_API_EVOLVING 1011 +#endif /* __APPLE_API_EVOLVING */ 1012 + 1013 +#ifndef __APPLE_API_UNSTABLE 1014 +#define __APPLE_API_UNSTABLE 1015 +#endif /* __APPLE_API_UNSTABLE */ 1016 + 1017 +#ifndef __APPLE_API_OBSOLETE 1018 +#define __APPLE_API_OBSOLETE 1019 +#endif /* __APPLE_API_OBSOLETE */ 1020 + 1021 +#endif /* __APPLE_API_STRICT_CONFORMANCE */ 1022 + 1023 +#endif /* __SYS_APPLEAPIOPTS_H__ */ 1024 +