| From: =?UTF-8?q?Rog=C3=A9rio=20Brito?= <rbrito@ime.usp.br> |
| Date: Thu, 24 Oct 2013 01:11:21 -0200 |
| Subject: Add/exclude Darwin-specific code |
| |
| Modify some of the files so that they can be compiled without the |
| Apple owned frameworks in a Debian system (and possibly others). |
| --- |
| fsck_hfs.tproj/cache.c | 4 ++ |
| fsck_hfs.tproj/dfalib/BTree.c | 2 + |
| fsck_hfs.tproj/dfalib/BlockCache.c | 3 + |
| fsck_hfs.tproj/dfalib/SBTree.c | 2 + |
| fsck_hfs.tproj/dfalib/SDevice.c | 92 ++++++++++++++++++++--------- |
| fsck_hfs.tproj/dfalib/SKeyCompare.c | 2 + |
| fsck_hfs.tproj/dfalib/SRepair.c | 2 + |
| fsck_hfs.tproj/dfalib/SRuntime.h | 7 ++- |
| fsck_hfs.tproj/dfalib/SUtils.c | 5 +- |
| fsck_hfs.tproj/dfalib/SVerify2.c | 7 +++ |
| fsck_hfs.tproj/dfalib/Scavenger.h | 11 +++- |
| fsck_hfs.tproj/dfalib/hfs_endian.c | 4 ++ |
| fsck_hfs.tproj/dfalib/hfs_endian.h | 7 ++- |
| fsck_hfs.tproj/fsck_hfs.c | 61 +++++++++++++++---- |
| fsck_hfs.tproj/utilities.c | 8 ++- |
| include/missing.h | 115 ++++++++++++++++++++++++++++++++++++ |
| newfs_hfs.tproj/hfs_endian.c | 5 ++ |
| newfs_hfs.tproj/hfs_endian.h | 5 ++ |
| newfs_hfs.tproj/makehfs.c | 72 ++++++++++++++++------ |
| newfs_hfs.tproj/newfs_hfs.c | 74 ++++++++++++++++++++--- |
| newfs_hfs.tproj/newfs_hfs.h | 26 ++++---- |
| 21 files changed, 429 insertions(+), 85 deletions(-) |
| create mode 100644 include/missing.h |
| |
| --- a/fsck_hfs.tproj/cache.c |
| +++ b/fsck_hfs.tproj/cache.c |
| @@ -26,7 +26,11 @@ |
| #include <stdlib.h> |
| #include <sys/mman.h> |
| #include <sys/stat.h> |
| +#if LINUX |
| +#include "missing.h" |
| +#else |
| #include <sys/types.h> |
| +#endif /* __LINUX__ */ |
| #include <sys/uio.h> |
| #include <unistd.h> |
| #include <string.h> |
| --- a/fsck_hfs.tproj/dfalib/BTree.c |
| +++ b/fsck_hfs.tproj/dfalib/BTree.c |
| @@ -1705,7 +1705,9 @@ OSStatus BTGetInformation (SFCB *fil |
| UInt16 version, |
| BTreeInfoRec *info ) |
| { |
| +#if !LINUX |
| #pragma unused (version) |
| +#endif |
| |
| BTreeControlBlockPtr btreePtr; |
| |
| --- a/fsck_hfs.tproj/dfalib/BlockCache.c |
| +++ b/fsck_hfs.tproj/dfalib/BlockCache.c |
| @@ -20,6 +20,9 @@ |
| * @APPLE_LICENSE_HEADER_END@ |
| */ |
| |
| +#if LINUX |
| +#include "missing.h" |
| +#endif |
| #include "SRuntime.h" |
| #include "Scavenger.h" |
| #include "../cache.h" |
| --- a/fsck_hfs.tproj/dfalib/SBTree.c |
| +++ b/fsck_hfs.tproj/dfalib/SBTree.c |
| @@ -322,7 +322,9 @@ ErrorExit: |
| OSStatus |
| SetEndOfForkProc ( SFCB *filePtr, FSSize minEOF, FSSize maxEOF ) |
| { |
| +#if !LINUX |
| #pragma unused (maxEOF) |
| +#endif |
| |
| OSStatus result; |
| UInt32 actualSectorsAdded; |
| --- a/fsck_hfs.tproj/dfalib/SDevice.c |
| +++ b/fsck_hfs.tproj/dfalib/SDevice.c |
| @@ -2,7 +2,7 @@ |
| * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. |
| * |
| * @APPLE_LICENSE_HEADER_START@ |
| - * |
| + * |
| * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights |
| * Reserved. This file contains Original Code and/or Modifications of |
| * Original Code as defined in and that are subject to the Apple Public |
| @@ -10,7 +10,7 @@ |
| * except in compliance with the License. Please obtain a copy of the |
| * License at http://www.apple.com/publicsource 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, |
| @@ -18,7 +18,7 @@ |
| * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the |
| * License for the specific language governing rights and limitations |
| * under the License." |
| - * |
| + * |
| * @APPLE_LICENSE_HEADER_END@ |
| */ |
| #include "SRuntime.h" |
| @@ -28,33 +28,71 @@ |
| #include <unistd.h> |
| #include <errno.h> |
| #include <sys/ioctl.h> |
| - |
| +#if LINUX |
| +#include <fcntl.h> |
| +#include <sys/stat.h> |
| +#else |
| #include <IOKit/storage/IOMediaBSDClient.h> |
| - |
| +#endif /* LINUX */ |
| #else |
| - |
| #include <Files.h> |
| #include <Device.h> |
| #include <Disks.h> |
| |
| #endif |
| |
| - |
| OSErr GetDeviceSize(int driveRefNum, UInt64 *numBlocks, UInt32 *blockSize) |
| { |
| #if BSD |
| UInt64 devBlockCount = 0; |
| int devBlockSize = 0; |
| +#if LINUX |
| + struct stat stbuf; |
| + |
| + devBlockSize = 512; |
| |
| +#ifndef BLKGETSIZE |
| +#define BLKGETSIZE _IO(0x12,96) |
| +#endif |
| +#ifndef BLKGETSIZE64 |
| +#define BLKGETSIZE64 _IOR(0x12,114,size_t) |
| +#endif |
| + if (fstat(driveRefNum, &stbuf) < 0){ |
| + printf("Error: %s\n", strerror(errno)); |
| + return(-1); |
| + } |
| + |
| + if (S_ISREG(stbuf.st_mode)) { |
| + devBlockCount = stbuf.st_size / 512; |
| + } |
| + else if (S_ISBLK(stbuf.st_mode)) { |
| + unsigned long size; |
| + u_int64_t size64; |
| + if (!ioctl(driveRefNum, BLKGETSIZE64, &size64)) |
| + devBlockCount = size64 / 512; |
| + else if (!ioctl(driveRefNum, BLKGETSIZE, &size)) |
| + devBlockCount = size; |
| + else{ |
| + printf("Error: %s\n", strerror(errno)); |
| + return(-1); |
| + } |
| + |
| + } |
| + else{ |
| + printf("Device is not a block device"); |
| + return(-1); |
| + } |
| +#elif BSD |
| if (ioctl(driveRefNum, DKIOCGETBLOCKCOUNT, &devBlockCount) < 0) { |
| printf("ioctl(DKIOCGETBLOCKCOUNT) for fd %d: %s\n", driveRefNum, strerror(errno)); |
| return (-1); |
| } |
| - |
| + |
| if (ioctl(driveRefNum, DKIOCGETBLOCKSIZE, &devBlockSize) < 0) { |
| printf("ioctl(DKIOCGETBLOCKSIZE) for fd %d: %s\n", driveRefNum, strerror(errno)); |
| return (-1); |
| } |
| +#endif /* BSD */ |
| |
| if (devBlockSize != 512) { |
| *numBlocks = (devBlockCount * (UInt64)devBlockSize) / 512; |
| @@ -70,24 +108,24 @@ OSErr GetDeviceSize(int driveRefNum, UIn |
| { |
| /* return format list status code */ |
| kFmtLstCode = 6, |
| - |
| + |
| /* reference number of .SONY driver */ |
| kSonyRefNum = 0xfffb, |
| - |
| + |
| /* values returned by DriveStatus in DrvSts.twoSideFmt */ |
| kSingleSided = 0, |
| kDoubleSided = -1, |
| kSingleSidedSize = 800, /* 400K */ |
| kDoubleSidedSize = 1600, /* 800K */ |
| - |
| + |
| /* values in DrvQEl.qType */ |
| kWordDrvSiz = 0, |
| kLongDrvSiz = 1, |
| - |
| + |
| /* more than enough formatListRecords */ |
| kMaxFormatListRecs = 16 |
| }; |
| - |
| + |
| ParamBlockRec pb; |
| FormatListRec formatListRecords[kMaxFormatListRecs]; |
| DrvSts status; |
| @@ -95,22 +133,22 @@ OSErr GetDeviceSize(int driveRefNum, UIn |
| OSErr result; |
| unsigned long blocks = 0; |
| |
| - |
| + |
| /* Attempt to get the drive's format list. */ |
| /* (see the Technical Note "What Your Sony Drives For You") */ |
| - |
| + |
| pb.cntrlParam.ioVRefNum = driveQElementPtr->dQDrive; |
| pb.cntrlParam.ioCRefNum = driveQElementPtr->dQRefNum; |
| pb.cntrlParam.csCode = kFmtLstCode; |
| pb.cntrlParam.csParam[0] = kMaxFormatListRecs; |
| *(long *)&pb.cntrlParam.csParam[1] = (long)&formatListRecords[0]; |
| - |
| + |
| result = PBStatusSync(&pb); |
| - |
| + |
| if ( result == noErr ) |
| { |
| /* The drive supports ReturnFormatList status call. */ |
| - |
| + |
| /* Get the current disk's size. */ |
| for( formatListRecIndex = 0; |
| formatListRecIndex < pb.cntrlParam.csParam[0]; |
| @@ -131,7 +169,7 @@ OSErr GetDeviceSize(int driveRefNum, UIn |
| else if ( driveQElementPtr->dQRefNum == (short)kSonyRefNum ) |
| { |
| /* The drive is a non-SuperDrive floppy which only supports 400K and 800K disks */ |
| - |
| + |
| result = DriveStatus(driveQElementPtr->dQDrive, &status); |
| if ( result == noErr ) |
| { |
| @@ -140,11 +178,11 @@ OSErr GetDeviceSize(int driveRefNum, UIn |
| case kSingleSided: |
| blocks = kSingleSidedSize; |
| break; |
| - |
| + |
| case kDoubleSided: |
| blocks = kDoubleSidedSize; |
| break; |
| - |
| + |
| default: // This should never happen |
| result = paramErr; |
| break; |
| @@ -155,20 +193,20 @@ OSErr GetDeviceSize(int driveRefNum, UIn |
| { |
| /* The drive is not a floppy and it doesn't support ReturnFormatList */ |
| /* so use the dQDrvSz field(s) */ |
| - |
| + |
| result = noErr; /* reset result */ |
| - |
| + |
| switch ( driveQElementPtr->qType ) |
| { |
| case kWordDrvSiz: |
| blocks = driveQElementPtr->dQDrvSz; |
| break; |
| - |
| + |
| case kLongDrvSiz: |
| blocks = ((unsigned long)driveQElementPtr->dQDrvSz2 << 16) + |
| driveQElementPtr->dQDrvSz; |
| break; |
| - |
| + |
| default: // This should never happen |
| result = paramErr; |
| break; |
| @@ -177,7 +215,7 @@ OSErr GetDeviceSize(int driveRefNum, UIn |
| |
| *numBlocks = blocks; |
| *blockSize = 512; |
| - |
| + |
| return( result ); |
| #endif |
| } |
| @@ -188,7 +226,7 @@ OSErr DeviceRead(int device, int drive, |
| #if BSD |
| off_t seek_off; |
| ssize_t nbytes; |
| - |
| + |
| *actBytes = 0; |
| |
| seek_off = lseek(device, offset, SEEK_SET); |
| --- a/fsck_hfs.tproj/dfalib/SKeyCompare.c |
| +++ b/fsck_hfs.tproj/dfalib/SKeyCompare.c |
| @@ -454,7 +454,9 @@ SInt32 CompareExtentKeysPlus( const HFSP |
| * The name portion of the key is compared using a 16-bit binary comparison. |
| * This is called from the b-tree code. |
| */ |
| +#if !LINUX |
| __private_extern__ |
| +#endif |
| SInt32 |
| CompareAttributeKeys(const AttributeKey *searchKey, const AttributeKey *trialKey) |
| { |
| --- a/fsck_hfs.tproj/dfalib/SRepair.c |
| +++ b/fsck_hfs.tproj/dfalib/SRepair.c |
| @@ -1617,7 +1617,9 @@ Output: |
| |
| static OSErr FixWrapperExtents( SGlobPtr GPtr, RepairOrderPtr p ) |
| { |
| +#if !LINUX |
| #pragma unused (p) |
| +#endif |
| |
| OSErr err; |
| HFSMasterDirectoryBlock *mdb; |
| --- a/fsck_hfs.tproj/dfalib/SRuntime.h |
| +++ b/fsck_hfs.tproj/dfalib/SRuntime.h |
| @@ -27,8 +27,11 @@ |
| #define __SRUNTIME__ |
| |
| #if BSD |
| - |
| +#if LINUX |
| +#include "missing.h" |
| +#else |
| #include <sys/types.h> |
| +#endif |
| #include <stdlib.h> |
| #include <string.h> |
| #include <stdio.h> |
| @@ -91,10 +94,12 @@ typedef const unsigned char * ConstStr25 |
| |
| typedef u_int32_t HFSCatalogNodeID; |
| |
| +#if !LINUX |
| enum { |
| false = 0, |
| true = 1 |
| }; |
| +#endif |
| |
| /* OS error codes */ |
| enum { |
| --- a/fsck_hfs.tproj/dfalib/SUtils.c |
| +++ b/fsck_hfs.tproj/dfalib/SUtils.c |
| @@ -380,7 +380,8 @@ void InvalidateCalculatedVolumeBitMap( S |
| // GPtr->realVCB Real in-memory vcb |
| //------------------------------------------------------------------------------ |
| |
| -#if !BSD |
| +#if BSD |
| +#if !LINUX |
| OSErr GetVolumeFeatures( SGlobPtr GPtr ) |
| { |
| OSErr err; |
| @@ -418,7 +419,7 @@ OSErr GetVolumeFeatures( SGlobPtr GPtr ) |
| return( noErr ); |
| } |
| #endif |
| - |
| +#endif |
| |
| |
| /*------------------------------------------------------------------------------- |
| --- a/fsck_hfs.tproj/dfalib/SVerify2.c |
| +++ b/fsck_hfs.tproj/dfalib/SVerify2.c |
| @@ -32,7 +32,9 @@ |
| */ |
| |
| #include <sys/ioctl.h> |
| +#if !LINUX |
| #include <sys/disk.h> |
| +#endif |
| |
| #include "BTree.h" |
| #include "BTreePrivate.h" |
| @@ -1354,8 +1356,13 @@ OSErr CompareVolumeHeader( SGlobPtr GPtr |
| * clump size for read-only media is irrelevant we skip the clump size |
| * check to avoid non useful warnings. |
| */ |
| +#if LINUX |
| + // FIXME |
| + isWriteable = 1; |
| +#else |
| isWriteable = 0; |
| ioctl( GPtr->DrvNum, DKIOCISWRITABLE, &isWriteable ); |
| +#endif |
| if ( isWriteable != 0 && |
| volumeHeader->catalogFile.clumpSize != vcb->vcbCatalogFile->fcbClumpSize ) { |
| PrintError(GPtr, E_InvalidClumpSize, 0); |
| --- a/fsck_hfs.tproj/dfalib/Scavenger.h |
| +++ b/fsck_hfs.tproj/dfalib/Scavenger.h |
| @@ -37,11 +37,16 @@ |
| #include "../fsck_debug.h" |
| |
| #include <assert.h> |
| +#if LINUX |
| +#define XATTR_MAXNAMELEN 127 |
| +#include <limits.h> |
| +#else |
| #include <sys/xattr.h> |
| #include <sys/acl.h> |
| #include <sys/kauth.h> |
| -#include <sys/errno.h> |
| #include <sys/syslimits.h> |
| +#endif |
| +#include <sys/errno.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| @@ -1465,4 +1470,8 @@ extern int AllocateContigBitmapBits (SV |
| }; |
| #endif |
| |
| +/* #if LINUX |
| +#undef XATTR_MAXNAMELEN |
| +#endif */ |
| + |
| #endif /* __SCAVENGER__ */ |
| --- a/fsck_hfs.tproj/dfalib/hfs_endian.c |
| +++ b/fsck_hfs.tproj/dfalib/hfs_endian.c |
| @@ -31,7 +31,11 @@ |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| |
| +#if LINUX |
| +#include "missing.h" |
| +#else |
| #include <architecture/byte_order.h> |
| +#endif |
| #include <hfs/hfs_format.h> |
| |
| #include "Scavenger.h" |
| --- a/fsck_hfs.tproj/dfalib/hfs_endian.h |
| +++ b/fsck_hfs.tproj/dfalib/hfs_endian.h |
| @@ -27,9 +27,14 @@ |
| * |
| * This file prototypes endian swapping routines for the HFS/HFS Plus |
| * volume format. |
| - */ |
| +*/ |
| #include <hfs/hfs_format.h> |
| +#if LINUX |
| +#include <endian.h> |
| +#include <byteswap.h> |
| +#else |
| #include <architecture/byte_order.h> |
| +#endif |
| #include "SRuntime.h" |
| |
| /*********************/ |
| --- a/fsck_hfs.tproj/fsck_hfs.c |
| +++ b/fsck_hfs.tproj/fsck_hfs.c |
| @@ -24,10 +24,14 @@ |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #include <sys/param.h> |
| +#if !LINUX |
| #include <sys/ucred.h> |
| +#endif |
| #include <sys/mount.h> |
| #include <sys/ioctl.h> |
| +#if !LINUX |
| #include <sys/disk.h> |
| +#endif |
| |
| #include <hfs/hfs_mount.h> |
| |
| @@ -195,8 +199,12 @@ main(argc, argv) |
| if (guiControl) |
| debug = 0; /* debugging is for command line only */ |
| |
| +#if LINUX |
| +// FIXME |
| +#else |
| if (signal(SIGINT, SIG_IGN) != SIG_IGN) |
| (void)signal(SIGINT, catch); |
| +#endif |
| |
| if (argc < 1) { |
| (void) fprintf(stderr, "%s: missing special-device\n", progname); |
| @@ -218,7 +226,9 @@ checkfilesys(char * filesys) |
| int chkLev, repLev, logLev; |
| int blockDevice_fd, canWrite; |
| char *unraw, *mntonname; |
| +#if !LINUX |
| struct statfs *fsinfo; |
| +#endif |
| int fs_fd=-1; // fd to the root-dir of the fs we're checking (only w/lfag == 1) |
| |
| flags = 0; |
| @@ -227,7 +237,9 @@ checkfilesys(char * filesys) |
| canWrite = 0; |
| unraw = NULL; |
| mntonname = NULL; |
| - |
| +#if LINUX |
| + // FIXME |
| +#else |
| if (lflag) { |
| result = getmntinfo(&fsinfo, MNT_NOWAIT); |
| |
| @@ -257,10 +269,10 @@ checkfilesys(char * filesys) |
| } |
| } |
| } |
| - |
| +#endif |
| if (debug && preen) |
| pwarn("starting\n"); |
| - |
| + |
| if (setup( filesys, &blockDevice_fd, &canWrite ) == 0) { |
| if (preen) |
| pfatal("CAN'T CHECK FILE SYSTEM."); |
| @@ -278,7 +290,7 @@ checkfilesys(char * filesys) |
| repLev = kMajorRepairs; |
| logLev = kVerboseLog; |
| |
| - if (yflag) |
| + if (yflag) |
| repLev = kMajorRepairs; |
| |
| if (quick) { |
| @@ -298,16 +310,16 @@ checkfilesys(char * filesys) |
| |
| if (nflag) |
| repLev = kNeverRepair; |
| - |
| + |
| if ( rebuildCatalogBtree ) { |
| chkLev = kPartialCheck; |
| repLev = kForceRepairs; // this will force rebuild of catalog B-Tree file |
| } |
| - |
| + |
| /* |
| * go check HFS volume... |
| */ |
| - result = CheckHFS( fsreadfd, fswritefd, chkLev, repLev, logLev, |
| + result = CheckHFS( fsreadfd, fswritefd, chkLev, repLev, logLev, |
| guiControl, lostAndFoundMode, canWrite, &fsmodified ); |
| if (!hotroot) { |
| ckfini(1); |
| @@ -330,6 +342,9 @@ checkfilesys(char * filesys) |
| } |
| } |
| } else { |
| +#if LINUX |
| + // FIXME |
| +#else |
| struct statfs stfs_buf; |
| /* |
| * Check to see if root is mounted read-write. |
| @@ -339,19 +354,25 @@ checkfilesys(char * filesys) |
| else |
| flags = 0; |
| ckfini(flags & MNT_RDONLY); |
| +#endif |
| } |
| |
| /* XXX free any allocated memory here */ |
| |
| if (hotroot && fsmodified) { |
| +#if !LINUX |
| struct hfs_mount_args args; |
| +#endif |
| /* |
| * We modified the root. Do a mount update on |
| * it, unless it is read-write, so we can continue. |
| */ |
| if (!preen) |
| printf("\n***** FILE SYSTEM WAS MODIFIED *****\n"); |
| - if (flags & MNT_RDONLY) { |
| +#if LINUX |
| + // FIXME |
| +#else |
| + if (flags & MNT_RDONLY) { |
| bzero(&args, sizeof(args)); |
| flags |= MNT_UPDATE | MNT_RELOAD; |
| if (mount("hfs", "/", flags, &args) == 0) { |
| @@ -359,6 +380,7 @@ checkfilesys(char * filesys) |
| goto ExitThisRoutine; |
| } |
| } |
| +#endif |
| if (!preen) |
| printf("\n***** REBOOT NOW *****\n"); |
| sync(); |
| @@ -367,7 +389,7 @@ checkfilesys(char * filesys) |
| } |
| |
| result = (result == 0) ? 0 : EEXIT; |
| - |
| + |
| ExitThisRoutine: |
| if (lflag) { |
| fcntl(fs_fd, F_THAW_FS, NULL); |
| @@ -401,16 +423,18 @@ setup( char *dev, int *blockDevice_fdPtr |
| fswritefd = -1; |
| *blockDevice_fdPtr = -1; |
| *canWritePtr = 0; |
| - |
| + |
| if (stat(dev, &statb) < 0) { |
| printf("Can't stat %s: %s\n", dev, strerror(errno)); |
| return (0); |
| } |
| +#if !LINUX |
| if ((statb.st_mode & S_IFMT) != S_IFCHR) { |
| pfatal("%s is not a character device", dev); |
| if (reply("CONTINUE") == 0) |
| return (0); |
| } |
| +#endif |
| if ((fsreadfd = open(dev, O_RDONLY)) < 0) { |
| printf("Can't open %s: %s\n", dev, strerror(errno)); |
| return (0); |
| @@ -419,7 +443,7 @@ setup( char *dev, int *blockDevice_fdPtr |
| /* attempt to get write access to the block device and if not check if volume is */ |
| /* mounted read-only. */ |
| getWriteAccess( dev, blockDevice_fdPtr, canWritePtr ); |
| - |
| + |
| if (preen == 0 && !guiControl) |
| printf("** %s", dev); |
| if (nflag || (fswritefd = open(dev, O_WRONLY)) < 0) { |
| @@ -433,10 +457,14 @@ setup( char *dev, int *blockDevice_fdPtr |
| printf("\n"); |
| |
| /* Get device block size to initialize cache */ |
| +#if LINUX |
| + devBlockSize = 512; |
| +#else |
| if (ioctl(fsreadfd, DKIOCGETBLOCKSIZE, &devBlockSize) < 0) { |
| pfatal ("Can't get device block size\n"); |
| return (0); |
| } |
| +#endif |
| |
| /* calculate the cache block size and total blocks */ |
| if (CalculateCacheSize(userCacheSize, &cacheBlockSize, &cacheTotalBlocks, debug) != 0) { |
| @@ -463,11 +491,15 @@ setup( char *dev, int *blockDevice_fdPtr |
| |
| static void getWriteAccess( char *dev, int *blockDevice_fdPtr, int *canWritePtr ) |
| { |
| +#if !LINUX |
| int i; |
| int myMountsCount; |
| +#endif |
| void * myPtr; |
| char * myCharPtr; |
| +#if !LINUX |
| struct statfs * myBufPtr; |
| +#endif |
| void * myNamePtr; |
| |
| myPtr = NULL; |
| @@ -490,6 +522,9 @@ static void getWriteAccess( char *dev, i |
| } |
| |
| // get count of mounts then get the info for each |
| +#if LINUX |
| + // FIXME |
| +#else |
| myMountsCount = getfsstat( NULL, 0, MNT_NOWAIT ); |
| if ( myMountsCount < 0 ) |
| goto ExitThisRoutine; |
| @@ -513,8 +548,8 @@ static void getWriteAccess( char *dev, i |
| } |
| myBufPtr++; |
| } |
| - *canWritePtr = 1; // single user will get us here, f_mntfromname is not /dev/diskXXXX |
| - |
| +#endif |
| + *canWritePtr = 1; // single user will get us here, f_mntfromname is not /dev/diskXXXX |
| ExitThisRoutine: |
| if ( myPtr != NULL ) |
| free( myPtr ); |
| --- a/fsck_hfs.tproj/utilities.c |
| +++ b/fsck_hfs.tproj/utilities.c |
| @@ -183,12 +183,14 @@ retry: |
| printf("Can't stat %s\n", raw); |
| return (origname); |
| } |
| +#if !LINUX |
| if ((stchar.st_mode & S_IFMT) == S_IFCHR) { |
| return (raw); |
| } else { |
| printf("%s is not a character device\n", raw); |
| return (origname); |
| } |
| +#endif |
| } else if ((stblock.st_mode & S_IFMT) == S_IFCHR && !retried) { |
| newname = unrawname(newname); |
| retried++; |
| @@ -214,7 +216,11 @@ rawname(char *name) |
| *dp = 0; |
| (void)strcpy(rawbuf, name); |
| *dp = '/'; |
| - (void)strcat(rawbuf, "/r"); |
| +#if LINUX |
| + (void)strcat(rawbuf, "/"); |
| +#else |
| + (void)strcat(rawbuf,"/r"); |
| +#endif |
| (void)strcat(rawbuf, &dp[1]); |
| |
| return (rawbuf); |
| --- /dev/null |
| +++ b/include/missing.h |
| @@ -0,0 +1,114 @@ |
| +#ifndef _MISSING_H_ |
| +#define _MISSING_H_ |
| + |
| +#include <endian.h> |
| +#include <byteswap.h> |
| +#include <errno.h> |
| +#include <stdint.h> |
| +#include <string.h> |
| + |
| +#define MAXBSIZE (256 * 4096) |
| + |
| +#ifndef true |
| +#define true 1 |
| +#endif |
| +#ifndef false |
| +#define false 0 |
| +#endif |
| + |
| +/* Mac types */ |
| + |
| +/* 8 Bit */ |
| +#ifndef UInt8 |
| +#define UInt8 uint8_t |
| +#endif |
| +#ifndef u_int8_t |
| +#define u_int8_t UInt8 |
| +#endif |
| +#ifndef SInt8 |
| +#define SInt8 int8_t |
| +#endif |
| + |
| +/* 16 Bit */ |
| +#ifndef UInt16 |
| +#define UInt16 uint16_t |
| +#endif |
| +#ifndef u_int16_t |
| +#define u_int16_t UInt16 |
| +#endif |
| +#ifndef SInt16 |
| +#define SInt16 int16_t |
| +#endif |
| + |
| +/* 32 Bit */ |
| +#ifndef UInt32 |
| +#define UInt32 uint32_t |
| +#endif |
| +#ifndef u_int32_t |
| +#define u_int32_t UInt32 |
| +#endif |
| +#ifndef SInt32 |
| +#define SInt32 int32_t |
| +#endif |
| + |
| +/* 64 Bit */ |
| +#ifndef UInt64 |
| +#define UInt64 uint64_t |
| +#endif |
| +#ifndef u_int64_t |
| +#define u_int64_t UInt64 |
| +#endif |
| +#ifndef SInt64 |
| +#define SInt64 int64_t |
| +#endif |
| + |
| +#define UniChar u_int16_t |
| +#define Boolean u_int8_t |
| + |
| +#define UF_NODUMP 0x00000001 |
| + |
| +/* syslimits.h */ |
| +#define NAME_MAX 255 |
| + |
| +/* Byteswap stuff */ |
| +#define NXSwapHostLongToBig(x) cpu_to_be64(x) |
| +#define NXSwapBigShortToHost(x) be16_to_cpu(x) |
| +#define OSSwapBigToHostInt16(x) be16_to_cpu(x) |
| +#define NXSwapBigLongToHost(x) be32_to_cpu(x) |
| +#define OSSwapBigToHostInt32(x) be32_to_cpu(x) |
| +#define NXSwapBigLongLongToHost(x) be64_to_cpu(x) |
| +#define OSSwapBigToHostInt64(x) be64_to_cpu(x) |
| + |
| +#if __BYTE_ORDER == __LITTLE_ENDIAN |
| +/* Big Endian Swaps */ |
| +#ifndef be16_to_cpu |
| +#define be16_to_cpu(x) bswap_16(x) |
| +#endif |
| +#ifndef be32_to_cpu |
| +#define be32_to_cpu(x) bswap_32(x) |
| +#endif |
| +#ifndef be64_to_cpu |
| +#define be64_to_cpu(x) bswap_64(x) |
| +#endif |
| +#ifndef cpu_to_be64 |
| +#define cpu_to_be64(x) bswap_64(x) |
| +#endif |
| +#elif __BYTE_ORDER == __BIG_ENDIAN |
| +/* Big endian doesn't swap */ |
| +#ifndef be16_to_cpu |
| +#define be16_to_cpu(x) (x) |
| +#endif |
| +#ifndef be32_to_cpu |
| +#define be32_to_cpu(x) (x) |
| +#endif |
| +#ifndef be64_to_cpu |
| +#define be64_to_cpu(x) (x) |
| +#endif |
| +#ifndef cpu_to_be64 |
| +#define cpu_to_be64(x) (x) |
| +#endif |
| +#endif |
| + |
| +#define KAUTH_FILESEC_XATTR "com.apple.system.Security" |
| + |
| +#endif |
| --- a/newfs_hfs.tproj/hfs_endian.c |
| +++ b/newfs_hfs.tproj/hfs_endian.c |
| @@ -30,7 +30,12 @@ |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| |
| +#if LINUX |
| +#include "missing.h" |
| +#else |
| #include <architecture/byte_order.h> |
| +#endif |
| + |
| #include <hfs/hfs_format.h> |
| |
| #include "hfs_endian.h" |
| --- a/newfs_hfs.tproj/hfs_endian.h |
| +++ b/newfs_hfs.tproj/hfs_endian.h |
| @@ -29,7 +29,12 @@ |
| * volume format. |
| */ |
| #include <hfs/hfs_format.h> |
| +#if LINUX |
| +#include <endian.h> |
| +#include <byteswap.h> |
| +#else |
| #include <architecture/byte_order.h> |
| +#endif |
| |
| /*********************/ |
| /* BIG ENDIAN Macros */ |
| --- a/newfs_hfs.tproj/makehfs.c |
| +++ b/newfs_hfs.tproj/makehfs.c |
| @@ -31,10 +31,16 @@ |
| #include <sys/param.h> |
| #include <sys/types.h> |
| #include <sys/time.h> |
| +#if LINUX |
| +#include <time.h> |
| +#include "missing.h" |
| +#endif |
| #include <sys/errno.h> |
| #include <sys/stat.h> |
| #include <sys/sysctl.h> |
| +#if !LINUX |
| #include <sys/vmmeter.h> |
| +#endif |
| |
| #include <err.h> |
| #include <errno.h> |
| @@ -47,13 +53,14 @@ |
| |
| #include <openssl/sha.h> |
| |
| +#if !LINUX |
| #include <architecture/byte_order.h> |
| |
| #include <CoreFoundation/CFString.h> |
| #include <CoreFoundation/CFStringEncodingExt.h> |
| |
| extern Boolean _CFStringGetFileSystemRepresentation(CFStringRef string, UInt8 *buffer, CFIndex maxBufLen); |
| - |
| +#endif |
| |
| #include <hfs/hfs_format.h> |
| #include <hfs/hfs_mount.h> |
| @@ -129,7 +136,9 @@ static UInt32 Largest __P((UInt32 a, UIn |
| static void MarkBitInAllocationBuffer __P((HFSPlusVolumeHeader *header, |
| UInt32 allocationBlock, void* sectorBuffer, UInt32 *sector)); |
| |
| +#if !LINUX |
| static UInt32 GetDefaultEncoding(); |
| +#endif |
| |
| static UInt32 UTCToLocal __P((UInt32 utcTime)); |
| |
| @@ -158,11 +167,14 @@ void SETOFFSET (void *buffer, UInt16 btN |
| |
| #define ROUNDUP(x, u) (((x) % (u) == 0) ? (x) : ((x)/(u) + 1) * (u)) |
| |
| -#define ENCODING_TO_BIT(e) \ |
| +#if LINUX |
| +#define ENCODING_TO_BIT(e) (e) |
| +#else |
| +#define ENCODING_TO_BIT(e) |
| ((e) < 48 ? (e) : \ |
| ((e) == kCFStringEncodingMacUkrainian ? 48 : \ |
| ((e) == kCFStringEncodingMacFarsi ? 49 : 0))) |
| - |
| +#endif |
| /* |
| * make_hfs |
| * |
| @@ -528,6 +540,7 @@ InitMDB(hfsparams_t *defaults, UInt32 dr |
| * Map UTF-8 input into a Mac encoding. |
| * On conversion errors "untitled" is used as a fallback. |
| */ |
| +#if !LINUX |
| { |
| UniChar unibuf[kHFSMaxVolumeNameChars]; |
| CFStringRef cfstr; |
| @@ -553,7 +566,11 @@ InitMDB(hfsparams_t *defaults, UInt32 dr |
| bcopy(&mdbp->drVN[1], defaults->volumeName, mdbp->drVN[0]); |
| defaults->volumeName[mdbp->drVN[0]] = '\0'; |
| } |
| +#endif |
| /* Save the encoding hint in the Finder Info (field 4). */ |
| + mdbp->drVN[0] = strlen(defaults->volumeName); |
| + bcopy(defaults->volumeName,&mdbp->drVN[1],mdbp->drVN[0]); |
| + |
| mdbp->drFndrInfo[4] = SET_HFS_TEXT_ENCODING(defaults->encodingHint); |
| |
| mdbp->drWrCnt = kWriteSeqNum; |
| @@ -1100,9 +1117,11 @@ InitCatalogRoot_HFSPlus(const hfsparams_ |
| UInt16 nodeSize; |
| SInt16 offset; |
| UInt32 unicodeBytes; |
| +#if !LINUX |
| UInt8 canonicalName[256]; |
| CFStringRef cfstr; |
| Boolean cfOK; |
| +#endif |
| int index = 0; |
| |
| nodeSize = dp->catalogNodeSize; |
| @@ -1122,7 +1141,9 @@ InitCatalogRoot_HFSPlus(const hfsparams_ |
| * First record is always the root directory... |
| */ |
| ckp = (HFSPlusCatalogKey *)((UInt8 *)buffer + offset); |
| - |
| +#if LINUX |
| + ConvertUTF8toUnicode(dp->volumeName, sizeof(ckp->nodeName.unicode), ckp->nodeName.unicode, &ckp->nodeName.length); |
| +#else |
| /* Use CFString functions to get a HFSPlus Canonical name */ |
| cfstr = CFStringCreateWithCString(kCFAllocatorDefault, (char *)dp->volumeName, kCFStringEncodingUTF8); |
| cfOK = _CFStringGetFileSystemRepresentation(cfstr, canonicalName, sizeof(canonicalName)); |
| @@ -1139,6 +1160,7 @@ InitCatalogRoot_HFSPlus(const hfsparams_ |
| dp->volumeName, kDefaultVolumeNameStr); |
| } |
| CFRelease(cfstr); |
| +#endif |
| ckp->nodeName.length = SWAP_BE16 (ckp->nodeName.length); |
| |
| unicodeBytes = sizeof(UniChar) * SWAP_BE16 (ckp->nodeName.length); |
| @@ -1821,15 +1843,15 @@ WriteBuffer(const DriveInfo *driveInfo, |
| off_t sector; |
| |
| if ((byteCount % driveInfo->sectorSize) != 0) |
| - errx(1, "WriteBuffer: byte count %ld is not sector size multiple", byteCount); |
| + errx(1, "WriteBuffer: byte count %i is not sector size multiple", byteCount); |
| |
| sector = driveInfo->sectorOffset + startingSector; |
| |
| if (lseek(driveInfo->fd, sector * driveInfo->sectorSize, SEEK_SET) < 0) |
| - err(1, "seek (sector %qd)", sector); |
| + err(1, "seek (sector %lld)", sector); |
| |
| if (write(driveInfo->fd, buffer, byteCount) != byteCount) |
| - err(1, "write (sector %qd, %ld bytes)", sector, byteCount); |
| + err(1, "write (sector %lld, %i bytes)", sector, byteCount); |
| } |
| |
| |
| @@ -1913,7 +1935,7 @@ DivideAndRoundUp(UInt32 numerator, UInt3 |
| return quotient; |
| } |
| |
| - |
| +#if !LINUX |
| #define __kCFUserEncodingFileName ("/.CFUserTextEncoding") |
| |
| static UInt32 |
| @@ -1939,7 +1961,7 @@ GetDefaultEncoding() |
| } |
| return 0; |
| } |
| - |
| +#endif |
| |
| static int |
| ConvertUTF8toUnicode(const UInt8* source, UInt32 bufsize, UniChar* unibuf, |
| @@ -2006,6 +2028,9 @@ ConvertUTF8toUnicode(const UInt8* source |
| static int |
| getencodinghint(unsigned char *name) |
| { |
| +#if LINUX |
| + return(0); |
| +#else |
| int mib[3]; |
| size_t buflen = sizeof(int); |
| struct vfsconf vfc; |
| @@ -2023,7 +2048,8 @@ getencodinghint(unsigned char *name) |
| return (hint); |
| error: |
| hint = GetDefaultEncoding(); |
| - return (hint); |
| + return (0); |
| +#endif |
| } |
| |
| |
| @@ -2034,12 +2060,14 @@ void GenerateVolumeUUID(VolumeUUID *newV |
| unsigned char digest[20]; |
| time_t now; |
| clock_t uptime; |
| - int mib[2]; |
| - int sysdata; |
| - char sysctlstring[128]; |
| size_t datalen; |
| double sysloadavg[3]; |
| +#if !LINUX |
| + int sysdata; |
| + int mib[2]; |
| + char sysctlstring[128]; |
| struct vmtotal sysvmtotal; |
| +#endif |
| |
| do { |
| /* Initialize the SHA-1 context for processing: */ |
| @@ -2052,52 +2080,58 @@ void GenerateVolumeUUID(VolumeUUID *newV |
| SHA1_Update(&context, &uptime, sizeof(uptime)); |
| |
| /* The kernel's boot time: */ |
| +#if !LINUX |
| mib[0] = CTL_KERN; |
| mib[1] = KERN_BOOTTIME; |
| datalen = sizeof(sysdata); |
| sysctl(mib, 2, &sysdata, &datalen, NULL, 0); |
| SHA1_Update(&context, &sysdata, datalen); |
| - |
| +#endif |
| /* The system's host id: */ |
| +#if !LINUX |
| mib[0] = CTL_KERN; |
| mib[1] = KERN_HOSTID; |
| datalen = sizeof(sysdata); |
| sysctl(mib, 2, &sysdata, &datalen, NULL, 0); |
| SHA1_Update(&context, &sysdata, datalen); |
| - |
| +#endif |
| /* The system's host name: */ |
| +#if !LINUX |
| mib[0] = CTL_KERN; |
| mib[1] = KERN_HOSTNAME; |
| datalen = sizeof(sysctlstring); |
| sysctl(mib, 2, sysctlstring, &datalen, NULL, 0); |
| SHA1_Update(&context, sysctlstring, datalen); |
| - |
| +#endif |
| /* The running kernel's OS release string: */ |
| +#if !LINUX |
| mib[0] = CTL_KERN; |
| mib[1] = KERN_OSRELEASE; |
| datalen = sizeof(sysctlstring); |
| sysctl(mib, 2, sysctlstring, &datalen, NULL, 0); |
| SHA1_Update(&context, sysctlstring, datalen); |
| - |
| +#endif |
| /* The running kernel's version string: */ |
| +#if !LINUX |
| mib[0] = CTL_KERN; |
| mib[1] = KERN_VERSION; |
| datalen = sizeof(sysctlstring); |
| sysctl(mib, 2, sysctlstring, &datalen, NULL, 0); |
| SHA1_Update(&context, sysctlstring, datalen); |
| - |
| +#endif |
| /* The system's load average: */ |
| datalen = sizeof(sysloadavg); |
| getloadavg(sysloadavg, 3); |
| SHA1_Update(&context, &sysloadavg, datalen); |
| |
| /* The system's VM statistics: */ |
| +#if !LINUX |
| mib[0] = CTL_VM; |
| mib[1] = VM_METER; |
| datalen = sizeof(sysvmtotal); |
| sysctl(mib, 2, &sysvmtotal, &datalen, NULL, 0); |
| SHA1_Update(&context, &sysvmtotal, datalen); |
| - |
| +#endif |
| /* The current GMT (26 ASCII characters): */ |
| time(&now); |
| strncpy(randomInputBuffer, asctime(gmtime(&now)), 26); /* "Mon Mar 27 13:46:26 2000" */ |
| --- a/newfs_hfs.tproj/newfs_hfs.c |
| +++ b/newfs_hfs.tproj/newfs_hfs.c |
| @@ -38,8 +38,13 @@ |
| #include <sys/mount.h> |
| #include <sys/param.h> |
| #include <sys/stat.h> |
| +#if LINUX |
| +#include <time.h> |
| +#endif |
| |
| +#if !LINUX |
| #include <IOKit/storage/IOMediaBSDClient.h> |
| +#endif |
| |
| #include <hfs/hfs_format.h> |
| #include "newfs_hfs.h" |
| @@ -73,7 +78,9 @@ static void usage __P((void)); |
| |
| char *progname; |
| char gVolumeName[kHFSPlusMaxFileNameChars + 1] = {kDefaultVolumeNameStr}; |
| +#if !LINUX |
| char rawdevice[MAXPATHLEN]; |
| +#endif |
| char blkdevice[MAXPATHLEN]; |
| UInt32 gBlockSize = 0; |
| UInt32 gNextCNID = kHFSFirstUserCatalogNodeID; |
| @@ -158,8 +165,10 @@ main(argc, argv) |
| extern int optind; |
| int ch; |
| int forceHFS; |
| +#if !LINUX |
| char *cp, *special; |
| struct statfs *mp; |
| +#endif |
| int n; |
| |
| if ((progname = strrchr(*argv, '/'))) |
| @@ -260,16 +269,19 @@ main(argc, argv) |
| usage(); |
| } |
| |
| - argc -= optind; |
| - argv += optind; |
| + argc -= optind; |
| + argv += optind; |
| |
| - if (gPartitionSize != 0) { |
| - if (argc != 0) |
| - usage(); |
| - } else { |
| - if (argc != 1) |
| - usage(); |
| + if (gPartitionSize != 0) { |
| + if (argc != 0) |
| + usage(); |
| + } else { |
| + if (argc != 1) |
| + usage(); |
| |
| +#if LINUX |
| + (void) sprintf(blkdevice, "%s", argv[0]); |
| +#else |
| special = argv[0]; |
| cp = strrchr(special, '/'); |
| if (cp != 0) |
| @@ -278,6 +290,7 @@ main(argc, argv) |
| special++; |
| (void) sprintf(rawdevice, "%sr%s", _PATH_DEV, special); |
| (void) sprintf(blkdevice, "%s%s", _PATH_DEV, special); |
| +#endif |
| } |
| |
| if (forceHFS && gJournaled) { |
| @@ -301,6 +314,9 @@ main(argc, argv) |
| /* |
| * Check if target device is aready mounted |
| */ |
| +#if LINUX |
| + // FIXME |
| +#else |
| n = getmntinfo(&mp, MNT_NOWAIT); |
| if (n == 0) |
| fatal("%s: getmntinfo: %s", blkdevice, strerror(errno)); |
| @@ -310,15 +326,20 @@ main(argc, argv) |
| fatal("%s is mounted on %s", blkdevice, mp->f_mntonname); |
| ++mp; |
| } |
| +#endif |
| } |
| |
| - if (hfs_newfs(rawdevice, forceHFS, true) < 0) { |
| + if (hfs_newfs(blkdevice, forceHFS, true) < 0) { |
| +#if LINUX |
| + err(1, NULL); |
| +#else |
| /* On ENXIO error use the block device (to get de-blocking) */ |
| if (errno == ENXIO) { |
| if (hfs_newfs(blkdevice, forceHFS, false) < 0) |
| err(1, NULL); |
| } else |
| err(1, NULL); |
| +#endif |
| } |
| |
| exit(0); |
| @@ -506,7 +527,9 @@ hfs_newfs(char *device, int forceHFS, in |
| int fso = 0; |
| int retval = 0; |
| hfsparams_t defaults = {0}; |
| +#if !LINUX |
| u_int64_t maxSectorsPerIO; |
| +#endif |
| |
| if (gPartitionSize) { |
| dip.sectorSize = kBytesPerSector; |
| @@ -526,6 +549,34 @@ hfs_newfs(char *device, int forceHFS, in |
| |
| if (fstat( fso, &stbuf) < 0) |
| fatal("%s: %s", device, strerror(errno)); |
| +#if LINUX |
| + dip.sectorSize = 512; |
| + dip.sectorsPerIO = 256; |
| + |
| +# ifndef BLKGETSIZE |
| +# define BLKGETSIZE _IO(0x12,96) |
| +# endif |
| + |
| +# ifndef BLKGETSIZE64 |
| +# define BLKGETSIZE64 _IOR(0x12,114,size_t) |
| +# endif |
| + |
| + if (S_ISREG(stbuf.st_mode)) { |
| + dip.totalSectors = stbuf.st_size / 512; |
| + } |
| + else if (S_ISBLK(stbuf.st_mode)) { |
| + unsigned long size; |
| + u_int64_t size64; |
| + if (!ioctl(fso, BLKGETSIZE64, &size64)) |
| + dip.totalSectors = size64 / 512; |
| + else if (!ioctl(fso, BLKGETSIZE, &size)) |
| + dip.totalSectors = size; |
| + else |
| + fatal("%s: %s", device, strerror(errno)); |
| + } |
| + else |
| + fatal("%s: is not a block device", device); |
| +#else |
| |
| if (ioctl(fso, DKIOCGETBLOCKCOUNT, &dip.totalSectors) < 0) |
| fatal("%s: %s", device, strerror(errno)); |
| @@ -537,11 +588,14 @@ hfs_newfs(char *device, int forceHFS, in |
| dip.sectorsPerIO = (128 * 1024) / dip.sectorSize; /* use 128K as default */ |
| else |
| dip.sectorsPerIO = MIN(maxSectorsPerIO, (1024 * 1024) / dip.sectorSize); |
| +#endif |
| + |
| /* |
| * The make_hfs code currentlydoes 512 byte sized I/O. |
| * If the sector size is bigger than 512, start over |
| * using the block device (to get de-blocking). |
| */ |
| +#if !LINUX |
| if (dip.sectorSize != kBytesPerSector) { |
| if (isRaw) { |
| close(fso); |
| @@ -556,7 +610,9 @@ hfs_newfs(char *device, int forceHFS, in |
| dip.sectorSize = kBytesPerSector; |
| } |
| } |
| +#endif |
| } |
| + |
| dip.sectorOffset = 0; |
| time(&createtime); |
| |
| --- a/newfs_hfs.tproj/newfs_hfs.h |
| +++ b/newfs_hfs.tproj/newfs_hfs.h |
| @@ -19,8 +19,12 @@ |
| * |
| * @APPLE_LICENSE_HEADER_END@ |
| */ |
| - |
| + |
| +#if LINUX |
| +#include "missing.h" |
| +#else |
| #include <CoreFoundation/CFBase.h> |
| +#endif |
| |
| /* |
| * Mac OS Finder flags |
| @@ -122,33 +126,33 @@ enum { |
| #define kDTDF_FileID 16 |
| #define kDTDF_Name "Desktop DF" |
| #define kDTDF_Chars 10 |
| -#define kDTDF_Type 'DTFL' |
| -#define kDTDF_Creator 'DMGR' |
| +#define kDTDF_Type 0x4454464C /* 'DTFL' */ |
| +#define kDTDF_Creator 0x444D4752 /* 'DMGR' */ |
| |
| #define kDTDB_FileID 17 |
| #define kDTDB_Name "Desktop DB" |
| #define kDTDB_Chars 10 |
| -#define kDTDB_Type 'BTFL' |
| -#define kDTDB_Creator 'DMGR' |
| +#define kDTDB_Type 0x4254464C /* 'BTFL' */ |
| +#define kDTDB_Creator 0x444D4752 /* 'DMGR' */ |
| #define kDTDB_Size 1024 |
| |
| #define kReadMe_FileID 18 |
| #define kReadMe_Name "ReadMe" |
| #define kReadMe_Chars 6 |
| -#define kReadMe_Type 'ttro' |
| -#define kReadMe_Creator 'ttxt' |
| +#define kReadMe_Type 0x7474726F /* 'ttro' */ |
| +#define kReadMe_Creator 0x74747974 /* 'ttxt' */ |
| |
| #define kFinder_FileID 19 |
| #define kFinder_Name "Finder" |
| #define kFinder_Chars 6 |
| -#define kFinder_Type 'FNDR' |
| -#define kFinder_Creator 'MACS' |
| +#define kFinder_Type 0x464E4452 /* 'FNDR' */ |
| +#define kFinder_Creator 0x4D414353 /* 'MACS' */ |
| |
| #define kSystem_FileID 20 |
| #define kSystem_Name "System" |
| #define kSystem_Chars 6 |
| -#define kSystem_Type 'zsys' |
| -#define kSystem_Creator 'MACS' |
| +#define kSystem_Type 0x7A737973 /* 'zsys' */ |
| +#define kSystem_Creator 0x4D414353 /* 'MACS' */ |
| |
| |
| |