X-Git-Url: https://git.librecmc.org/?p=librecmc%2Fpackage-feed.git;a=blobdiff_plain;f=utils%2Fhfsprogs%2Fpatches%2F0002-Add-exclude-Darwin-specific-code.patch;fp=utils%2Fhfsprogs%2Fpatches%2F0002-Add-exclude-Darwin-specific-code.patch;h=0000000000000000000000000000000000000000;hp=0046c364f4da70c0a09e61ff605d70b2367478f7;hb=f116137591c6f17e9b7d9049a6e0fb8808aa455c;hpb=67a2d93828e19a5eb98688776bc9d68ff90f705d diff --git a/utils/hfsprogs/patches/0002-Add-exclude-Darwin-specific-code.patch b/utils/hfsprogs/patches/0002-Add-exclude-Darwin-specific-code.patch deleted file mode 100644 index 0046c36..0000000 --- a/utils/hfsprogs/patches/0002-Add-exclude-Darwin-specific-code.patch +++ /dev/null @@ -1,1407 +0,0 @@ -From: =?UTF-8?q?Rog=C3=A9rio=20Brito?= -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 - -diff --git a/fsck_hfs.tproj/cache.c b/fsck_hfs.tproj/cache.c -index be46195..527088a 100644 ---- a/fsck_hfs.tproj/cache.c -+++ b/fsck_hfs.tproj/cache.c -@@ -26,7 +26,11 @@ - #include - #include - #include -+#if LINUX -+#include "missing.h" -+#else - #include -+#endif /* __LINUX__ */ - #include - #include - #include -diff --git a/fsck_hfs.tproj/dfalib/BTree.c b/fsck_hfs.tproj/dfalib/BTree.c -index edd8301..7ad9fe0 100644 ---- a/fsck_hfs.tproj/dfalib/BTree.c -+++ b/fsck_hfs.tproj/dfalib/BTree.c -@@ -1705,7 +1705,9 @@ OSStatus BTGetInformation (SFCB *filePtr, - UInt16 version, - BTreeInfoRec *info ) - { -+#if !LINUX - #pragma unused (version) -+#endif - - BTreeControlBlockPtr btreePtr; - -diff --git a/fsck_hfs.tproj/dfalib/BlockCache.c b/fsck_hfs.tproj/dfalib/BlockCache.c -index 1bb952f..e3a28a2 100644 ---- 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" -diff --git a/fsck_hfs.tproj/dfalib/SBTree.c b/fsck_hfs.tproj/dfalib/SBTree.c -index 2fbcd1d..cd81b13 100644 ---- 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; -diff --git a/fsck_hfs.tproj/dfalib/SDevice.c b/fsck_hfs.tproj/dfalib/SDevice.c -index bf6f61c..9a46023 100644 ---- 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 - #include - #include -- -+#if LINUX -+#include -+#include -+#else - #include -- -+#endif /* LINUX */ - #else -- - #include - #include - #include - - #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, UInt64 *numBlocks, UInt32 *blockSize) - { - /* 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, UInt64 *numBlocks, UInt32 *blockSize) - 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, UInt64 *numBlocks, UInt32 *blockSize) - 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, UInt64 *numBlocks, UInt32 *blockSize) - 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, UInt64 *numBlocks, UInt32 *blockSize) - { - /* 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, UInt64 *numBlocks, UInt32 *blockSize) - - *numBlocks = blocks; - *blockSize = 512; -- -+ - return( result ); - #endif - } -@@ -188,7 +226,7 @@ OSErr DeviceRead(int device, int drive, void* buffer, SInt64 offset, UInt32 reqB - #if BSD - off_t seek_off; - ssize_t nbytes; -- -+ - *actBytes = 0; - - seek_off = lseek(device, offset, SEEK_SET); -diff --git a/fsck_hfs.tproj/dfalib/SKeyCompare.c b/fsck_hfs.tproj/dfalib/SKeyCompare.c -index 46e145f..18d99c5 100644 ---- a/fsck_hfs.tproj/dfalib/SKeyCompare.c -+++ b/fsck_hfs.tproj/dfalib/SKeyCompare.c -@@ -454,7 +454,9 @@ SInt32 CompareExtentKeysPlus( const HFSPlusExtentKey *searchKey, const HFSPlusEx - * 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) - { -diff --git a/fsck_hfs.tproj/dfalib/SRepair.c b/fsck_hfs.tproj/dfalib/SRepair.c -index 01c1a10..8eb759c 100644 ---- 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; -diff --git a/fsck_hfs.tproj/dfalib/SRuntime.h b/fsck_hfs.tproj/dfalib/SRuntime.h -index 646917b..770e3ef 100644 ---- 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 -+#endif - #include - #include - #include -@@ -91,10 +94,12 @@ typedef const unsigned char * ConstStr255Param; - - typedef u_int32_t HFSCatalogNodeID; - -+#if !LINUX - enum { - false = 0, - true = 1 - }; -+#endif - - /* OS error codes */ - enum { -diff --git a/fsck_hfs.tproj/dfalib/SUtils.c b/fsck_hfs.tproj/dfalib/SUtils.c -index 72035f0..6e9253e 100644 ---- a/fsck_hfs.tproj/dfalib/SUtils.c -+++ b/fsck_hfs.tproj/dfalib/SUtils.c -@@ -380,7 +380,8 @@ void InvalidateCalculatedVolumeBitMap( SGlobPtr GPtr ) - // 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 - - - /*------------------------------------------------------------------------------- -diff --git a/fsck_hfs.tproj/dfalib/SVerify2.c b/fsck_hfs.tproj/dfalib/SVerify2.c -index 6a47935..c68f3d8 100644 ---- a/fsck_hfs.tproj/dfalib/SVerify2.c -+++ b/fsck_hfs.tproj/dfalib/SVerify2.c -@@ -32,7 +32,9 @@ - */ - - #include -+#if !LINUX - #include -+#endif - - #include "BTree.h" - #include "BTreePrivate.h" -@@ -1354,8 +1356,13 @@ OSErr CompareVolumeHeader( SGlobPtr GPtr, HFSPlusVolumeHeader *volumeHeader ) - * 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); -diff --git a/fsck_hfs.tproj/dfalib/Scavenger.h b/fsck_hfs.tproj/dfalib/Scavenger.h -index cf53970..edb3a80 100644 ---- a/fsck_hfs.tproj/dfalib/Scavenger.h -+++ b/fsck_hfs.tproj/dfalib/Scavenger.h -@@ -37,11 +37,16 @@ - #include "../fsck_debug.h" - - #include -+#if LINUX -+#define XATTR_MAXNAMELEN 127 -+#include -+#else - #include - #include - #include --#include - #include -+#endif -+#include - - #ifdef __cplusplus - extern "C" { -@@ -1465,4 +1470,8 @@ extern int AllocateContigBitmapBits (SVCB *vcb, UInt32 numBlocks, UInt32 *actua - }; - #endif - -+/* #if LINUX -+#undef XATTR_MAXNAMELEN -+#endif */ -+ - #endif /* __SCAVENGER__ */ -diff --git a/fsck_hfs.tproj/dfalib/hfs_endian.c b/fsck_hfs.tproj/dfalib/hfs_endian.c -index 7fa5385..69500c1 100755 ---- a/fsck_hfs.tproj/dfalib/hfs_endian.c -+++ b/fsck_hfs.tproj/dfalib/hfs_endian.c -@@ -31,7 +31,11 @@ - #include - #include - -+#if LINUX -+#include "missing.h" -+#else - #include -+#endif - #include - - #include "Scavenger.h" -diff --git a/fsck_hfs.tproj/dfalib/hfs_endian.h b/fsck_hfs.tproj/dfalib/hfs_endian.h -index 52d0c3a..0763d9d 100755 ---- 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 -+#if LINUX -+#include -+#include -+#else - #include -+#endif - #include "SRuntime.h" - - /*********************/ -diff --git a/fsck_hfs.tproj/fsck_hfs.c b/fsck_hfs.tproj/fsck_hfs.c -index 90532fd..f1a18bd 100644 ---- a/fsck_hfs.tproj/fsck_hfs.c -+++ b/fsck_hfs.tproj/fsck_hfs.c -@@ -24,10 +24,14 @@ - #include - #include - #include -+#if !LINUX - #include -+#endif - #include - #include -+#if !LINUX - #include -+#endif - - #include - -@@ -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, int *canWritePtr ) - 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, int *canWritePtr ) - /* 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, int *canWritePtr ) - 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, int *canWritePtr ) - - 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, int *blockDevice_fdPtr, int *canWritePtr - } - - // 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, int *blockDevice_fdPtr, int *canWritePtr - } - 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 ); -diff --git a/fsck_hfs.tproj/utilities.c b/fsck_hfs.tproj/utilities.c -index ee41bef..8e1cd77 100644 ---- 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); -diff --git a/include/missing.h b/include/missing.h -new file mode 100644 -index 0000000..0a859c4 ---- /dev/null -+++ b/include/missing.h -@@ -0,0 +1,114 @@ -+#ifndef _MISSING_H_ -+#define _MISSING_H_ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#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 -diff --git a/newfs_hfs.tproj/hfs_endian.c b/newfs_hfs.tproj/hfs_endian.c -index 117b7f8..fdf7353 100644 ---- a/newfs_hfs.tproj/hfs_endian.c -+++ b/newfs_hfs.tproj/hfs_endian.c -@@ -30,7 +30,12 @@ - #include - #include - -+#if LINUX -+#include "missing.h" -+#else - #include -+#endif -+ - #include - - #include "hfs_endian.h" -diff --git a/newfs_hfs.tproj/hfs_endian.h b/newfs_hfs.tproj/hfs_endian.h -index 8d9d01d..5c7ff57 100644 ---- a/newfs_hfs.tproj/hfs_endian.h -+++ b/newfs_hfs.tproj/hfs_endian.h -@@ -29,7 +29,12 @@ - * volume format. - */ - #include -+#if LINUX -+#include -+#include -+#else - #include -+#endif - - /*********************/ - /* BIG ENDIAN Macros */ -diff --git a/newfs_hfs.tproj/makehfs.c b/newfs_hfs.tproj/makehfs.c -index 085222f..7609779 100644 ---- a/newfs_hfs.tproj/makehfs.c -+++ b/newfs_hfs.tproj/makehfs.c -@@ -31,10 +31,16 @@ - #include - #include - #include -+#if LINUX -+#include -+#include "missing.h" -+#endif - #include - #include - #include -+#if !LINUX - #include -+#endif - - #include - #include -@@ -47,13 +53,14 @@ - - #include - -+#if !LINUX - #include - - #include - #include - - extern Boolean _CFStringGetFileSystemRepresentation(CFStringRef string, UInt8 *buffer, CFIndex maxBufLen); -- -+#endif - - #include - #include -@@ -129,7 +136,9 @@ static UInt32 Largest __P((UInt32 a, UInt32 b, UInt32 c, UInt32 d )); - 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 btNodeSize, SInt16 recOffset, SInt16 vecOff - - #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 driveBlocks, HFS_MDB *mdbp) - * 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 driveBlocks, HFS_MDB *mdbp) - 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_t *dp, const HFSPlusVolumeHeader *header - 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_t *dp, const HFSPlusVolumeHeader *header - * 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_t *dp, const HFSPlusVolumeHeader *header - 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, UInt64 startingSector, UInt32 byteCount, - 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, UInt32 denominator) - 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, UInt32 bufsize, UniChar* unibuf, - 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 *newVolumeID) { - 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 *newVolumeID) { - 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" */ -diff --git a/newfs_hfs.tproj/newfs_hfs.c b/newfs_hfs.tproj/newfs_hfs.c -index c4176a9..bf2ed21 100644 ---- a/newfs_hfs.tproj/newfs_hfs.c -+++ b/newfs_hfs.tproj/newfs_hfs.c -@@ -38,8 +38,13 @@ - #include - #include - #include -+#if LINUX -+#include -+#endif - -+#if !LINUX - #include -+#endif - - #include - #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, int isRaw) - 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, int isRaw) - - 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, int isRaw) - 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, int isRaw) - dip.sectorSize = kBytesPerSector; - } - } -+#endif - } -+ - dip.sectorOffset = 0; - time(&createtime); - -diff --git a/newfs_hfs.tproj/newfs_hfs.h b/newfs_hfs.tproj/newfs_hfs.h -index 968ff10..5680a34 100644 ---- 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 -+#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' */ - - -