From: Rolf K. <lab...@us...> - 2006-01-08 21:32:37
|
Update of /cvsroot/opengtoolkit/lvzip/c_source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25573/c_source Modified Files: macbin.c macbin.h Log Message: Fixed a few things Index: macbin.c =================================================================== RCS file: /cvsroot/opengtoolkit/lvzip/c_source/macbin.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** macbin.c 7 Jan 2006 20:11:30 -0000 1.12 --- macbin.c 8 Jan 2006 21:32:22 -0000 1.13 *************** *** 1,5 **** /* macbin.c -- support functions for macbinary ! Version 1.1, Dec 28th, 2004 Copyright (C) 2002-2005 Rolf Kalbermatter --- 1,5 ---- /* macbin.c -- support functions for macbinary ! Version 1.2, Dec 29th, 2005 Copyright (C) 2002-2005 Rolf Kalbermatter *************** *** 24,68 **** #define kFileChanged (1L<<7) ! static OSErr MakeFSpec(ConstStr255 path, FSSpec *fss); static OSErr IfDirCloseIt(int16 vol); static MgErr OSErrToLVErr(OSErr err); static void MacConvertFromLVTime(uInt32 time, uInt32* sTime); static void MacConvertToLVTime(uInt32 sTime, uInt32* time); - #elif Unix - #include <sys/types.h> - #include <sys/stat.h> - #include <string.h> - #include <utime.h> - static void UnixConvertFromLVTime(uInt32 time, time_t* sTime); - static void UnixConvertToLVTime(time_t sTime, uInt32* time); #elif Win32 #include "iowin32.h" - static void Win32ConvertFromLVTime(uInt32 time, FILETIME* sTime); - static void Win32ConvertToLVTime(FILETIME sTime, uInt32* time); #endif ! extern void ZEXPORT DLLVersion(char* version) { sprintf(version, "lvzlib date: %s, time: %s",__DATE__,__TIME__); } ! extern MgErr ZEXPORT HasResourceFork(ConstStr255 fileName, long *hasResFork){ #if Mac ! OSErr err = noErr; ! int theRefNum; ! FSSpec theFSSpec; ! *hasResFork = 0; ! ! err = MakeFSpec(fileName, &theFSSpec); ! id (!err) { ! theRefNum = FSpOpenResFile(&theFSSpec, fsRdWrPerm); ! if (ResError() == noErr) //we've got a resource file ! { ! CloseResFile(theRefNum); ! *hasResFork = 1; ! } } return OSErrToLVErr(err); --- 24,59 ---- #define kFileChanged (1L<<7) ! static OSErr MakeMacSpec(Path path, FSSpec *fss); ! static OSErr MakeFSpec(int16 vol, int32 dirID, ConstStr255 path, FSSpec *fss); static OSErr IfDirCloseIt(int16 vol); static MgErr OSErrToLVErr(OSErr err); static void MacConvertFromLVTime(uInt32 time, uInt32* sTime); static void MacConvertToLVTime(uInt32 sTime, uInt32* time); #elif Win32 #include "iowin32.h" #endif ! extern void ZEXPORT DLLVersion(uChar* version) { sprintf(version, "lvzlib date: %s, time: %s",__DATE__,__TIME__); } ! extern MgErr ZEXPORT HasResourceFork(Path path, int32 *hasResFork){ #if Mac ! FSSpec theFSSpec; ! OSErr err = noErr; ! *hasResFork = 0; ! ! err = MakeMacSpec(path, &theFSSpec); ! if (!err) { ! int theRefNum = FSpOpenResFile(&theFSSpec, fsRdWrPerm); ! if (ResError() == noErr) //we've got a resource file ! { ! CloseResFile(theRefNum); ! *hasResFork = 1; ! } } return OSErrToLVErr(err); *************** *** 73,87 **** } ! extern MgErr ZEXPORT LV_EncodeMacbinary(ConstStr255 srcFileName, ConstStr255 dstFileName){ #if Mac ! FSSpec srcFSSpec; ! FSSpec dstFSSpec; ! OSErr err = MakeFSpec(srcFileName, &srcFSSpec); if (!err) { ! err = MakeFSpec(dstFileName, &dstFSSpec); if (!err) ! err = EncodeMacbinaryFiles(&srcFSSpec,&dstFSSpec); ! } return OSErrToLVErr(err); #else --- 64,81 ---- } ! extern MgErr ZEXPORT LV_EncodeMacbinary(Path srcPath, Path dstPath) ! { #if Mac ! FSSpec srcFSSpec; ! FSSpec dstFSSpec; ! OSErr err; ! ! err = MakeMacSpec(srcPath, &srcFSSpec); if (!err) { ! err = MakeMacSpec(dstPath, &dstFSSpec); if (!err) ! err = EncodeMacbinaryFiles(&srcFSSpec, &dstFSSpec); ! } return OSErrToLVErr(err); #else *************** *** 90,105 **** } ! extern MgErr ZEXPORT LV_DecodeMacbinary(ConstStr255 srcFileName, ConstStr255 dstFileName){ #if Mac ! FSSpec srcFSSpec; ! FSSpec dstFSSpec; ! OSErr err; ! err = MakeFSpec(srcFileName, &srcFSSpec); if (!err) { ! err = MakeFSpec(dstFileName, &dstFSSpec); ! if (err) ! err = DecodeMacBinaryFiles(&srcFSSpec,&dstFSSpec); } return OSErrToLVErr(err); --- 84,100 ---- } ! extern MgErr ZEXPORT LV_DecodeMacbinary(Path srcPath, Path dstPathe) ! { #if Mac ! FSSpec srcFSSpec; ! FSSpec dstFSSpec; ! OSErr err; ! err = MakeMacSpec(srcPath, &srcFSSpec); if (!err) { ! err = MakeMacSpec(dstPath, &dstFSSpec); ! if (err) ! err = DecodeMacBinaryFiles(&srcFSSpec, &dstFSSpec); } return OSErrToLVErr(err); *************** *** 109,124 **** } ! extern MgErr ZEXPORT OpenResFork(File *fdp, ! PStr path, ! uInt32 openMode, ! uInt32 denyMode) { #if Mac int16 perm; FSSpec fss; HParamBlockRec pbr; ! OSErr err = noErr; ! *fdp = (File)0; ! switch(openMode) { case openReadWrite: perm = 0x0003; --- 104,119 ---- } ! extern MgErr ZEXPORT OpenResFork(LVRefNum *refnum, Path path, uInt32 openMode, uInt32 denyMode) ! { ! MgErr err = mgNotSupported; #if Mac int16 perm; FSSpec fss; + File fd = (File)0;; HParamBlockRec pbr; ! OSErr ret; ! switch(openMode) ! { case openReadWrite: perm = 0x0003; *************** *** 134,138 **** return mgArgErr; } ! switch (denyMode) { case denyReadWrite: perm |= 0x0030; --- 129,134 ---- return mgArgErr; } ! switch (denyMode) ! { case denyReadWrite: perm |= 0x0030; *************** *** 148,152 **** } ! if (err = MakeFSpec(path, &fss)) { return OSErrToLVErr(err); } --- 144,149 ---- } ! if (ret = MakeMacSpec(path, &fss)) ! { return OSErrToLVErr(err); } *************** *** 159,185 **** pbr.accessParam.ioDenyModes = perm; ! if (err = PBHOpenRFDenySync(&pbr)) { ! goto out; ! } ! *fdp = (File)pbr.ioParam.ioRefNum; ! if (openMode == openWriteOnlyTruncate) { ! if (err = SetEOF((int16)*fdp, 0L)) { ! goto out; ! } } out: IfDirCloseIt(fss.vRefNum); ! return OSErrToLVErr(err); ! #else ! return mgNotSupported; #endif } ! extern MgErr ZEXPORT UtilFileInfo(PStr path, uInt8 write, ! FileInfo *finderInfo, ! PStr comment, ! int32 *length) { #if Mac --- 156,181 ---- pbr.accessParam.ioDenyModes = perm; ! if (!(ret = PBHOpenRFDenySync(&pbr))) ! { ! fd = (File)pbr.ioParam.ioRefNum; ! if (openMode == openWriteOnlyTruncate) ! ret = SetEOF((int16)fd, 0L); } out: IfDirCloseIt(fss.vRefNum); ! if (ret) ! err = OSErrToLVErr(ret); ! else ! err = FNewRefNum(path, fd, refnum); #endif + return err; } ! extern MgErr ZEXPORT UtilFileInfo(Path path, uInt8 write, ! FileInfo *finderInfo, ! PStr comment, ! int32 *length) { #if Mac *************** *** 192,196 **** return mgArgErr; ! if (err = MakeFSpec(path, &fss)) return OSErrToLVErr(err); --- 188,192 ---- return mgArgErr; ! if (err = MakeMacSpec(path, &fss)) return OSErrToLVErr(err); *************** *** 288,292 **** #endif } ! extern long ZEXPORT InitializeFileFuncs (zlib_filefunc_def* pzlib_filefunc_def) { --- 284,288 ---- #endif } ! extern long ZEXPORT InitializeFileFuncs (zlib_filefunc_def* pzlib_filefunc_def) { *************** *** 294,314 **** { #if Win32 ! fill_win32_filefunc(pzlib_filefunc_def); #else ! fill_fopen_filefunc(pzlib_filefunc_def); #endif ! return noErr; } else ! return sizeof(zlib_filefunc_def); } #if Mac ! static OSErr MakeFSpec(ConstStr255 path, FSSpec *fss) { OSErr err; ! err = FSMakeFSSpec(/*vol*/0, /*dirID*/0, mPath, fss); if (err && !(err == fnfErr)) ! return err; /* fileNotFound is expected and normal */ /* Workaround adapted from Apple Developer Support sample code in */ --- 290,453 ---- { #if Win32 ! fill_win32_filefunc(pzlib_filefunc_def); #else ! fill_fopen_filefunc(pzlib_filefunc_def); #endif ! return noErr; } else ! return sizeof(zlib_filefunc_def); } #if Mac ! /* The following functions, IsAliasFile and ResolveAliasFileMountOption, are taken from ! Mac Tech Note #315. They may be used to resolve alias files quietly, without user ! interaction. ! */ ! static OSErr IsAliasFile(const FSSpec *fileFSSpec, ! Boolean *aliasFileFlag, ! Boolean *folderFlag) ! { ! CInfoPBRec myCInfoPBRec; OSErr err; ! if (fileFSSpec == NULL) ! return paramErr; ! ! if (aliasFileFlag) ! *aliasFileFlag ! if (folderFlag) ! *folderFlag = false; ! ! myCInfoPBRec.hFileInfo.ioCompletion = NULL; ! myCInfoPBRec.hFileInfo.ioNamePtr = (UPtr)fileFSSpec->name; ! myCInfoPBRec.hFileInfo.ioVRefNum = fileFSSpec->vRefNum; ! myCInfoPBRec.hFileInfo.ioDirID = fileFSSpec->parID; ! myCInfoPBRec.hFileInfo.ioFVersNum = 0; ! myCInfoPBRec.hFileInfo.ioFDirIndex = 0; ! ! err = PBGetCatInfoSync(&myCInfoPBRec); ! ! if (err == noErr) ! { ! if (folderFlag && (myCInfoPBRec.hFileInfo.ioFlAttrib & ioDirMask) != 0) ! *folderFlag = true; ! else if (aliasFileFlag && (myCInfoPBRec.hFileInfo.ioFlFndrInfo.fdFlags & 0x8000) != 0) ! *aliasFileFlag = true; ! } ! return err; ! } ! ! static OSErr ResolveAliasFileMountOption(FSSpec *fileFSSpec, ! Boolean resolveAliasChains, ! Boolean *targetIsFolder, ! Boolean *wasAliased, ! Boolean mountRemoteVols) ! { ! #define MAXCHAINS 10 ! ! short myResRefNum; ! Handle aliasHandle; ! FSSpec initFSSpec; ! Boolean updateFlag, foundFlag = false, wasAliasedTemp, specChangedFlag = false; ! short chainCount; ! OSErr err; ! ! if (fileFSSpec == NULL || wasAliased == NULL) ! return paramErr; ! ! initFSSpec = *fileFSSpec; ! chainCount = MAXCHAINS; ! ! if (targetIsFolder) ! *targetIsFolder = false; ! ! do ! { ! chainCount--; ! ! err = IsAliasFile(fileFSSpec, wasAliased, targetIsFolder); ! if (err != noErr || !(*wasAliased)) ! break; ! ! myResRefNum = FSpOpenResFile(fileFSSpec, fsCurPerm); ! err = ResError(); ! if (myResRefNum == -1) ! break; ! ! aliasHandle = Get1IndResource(rAliasType, 1); ! err = ResError(); ! if (aliasHandle == NULL) ! { ! CloseResFile(myResRefNum); ! break; ! } ! ! LoadResource(aliasHandle); ! err = ResError(); ! if (err != noErr) ! { ! CloseResFile(myResRefNum); ! break; ! } ! ! err = FollowFinderAlias(fileFSSpec, (AliasHandle)aliasHandle, mountRemoteVols, ! fileFSSpec, &updateFlag); ! ! if (err == noErr) ! { ! if (updateFlag) ! { ! ChangedResource(aliasHandle); ! WriteResource(aliasHandle); ! } ! ! specChangedFlag = true; ! ! err = IsAliasFile(fileFSSpec, &wasAliasedTemp, targetIsFolder); ! if (err == noErr) ! foundFlag = !(wasAliasedTemp && resolveAliasChains); ! } ! CloseResFile(myResRefNum); ! ! } while (err == noErr && chainCount > 0 && !foundFlag); ! ! if (err == noErr && !foundFlag) ! err = fnfErr; ! ! if (err != noErr && specChangedFlag) ! *fileFSSpec = initFSSpec; ! ! return err; ! } ! ! static OSErr MakeMacSpec(Path path, FSSpec *fss) ! { ! OSErr err; ! LStr256 lStr; ! Str255 name; ! Boolean isDir, isAlias; ! ! lStr.cnt = -1; ! FPathToText(path, (LStrPtr)&lStr); ! if (lStr.cnt > 255) ! return paramErr; ! else ! { ! FPathToText(path, (LStrPtr)&lStr); ! LToPStr((LStrPtr)&lStr, name); ! err = MakeFSpec(0, 0, name, fss); ! if (err == noErr) ! err = ResolveAliasFileMountOption(fss, true, (Boolean*)&isDir, (Boolean*)&isAlias, false); ! } ! return err; ! } ! ! static OSErr MakeFSpec(int16 vol, int32 dirID, ConstStr255 path, FSSpec *fss) ! { ! OSErr err = FSMakeFSSpec(vol, dirID, path, fss); if (err && !(err == fnfErr)) ! return err; ! /* fileNotFound is expected and normal */ /* Workaround adapted from Apple Developer Support sample code in */ *************** *** 319,368 **** /* fileName parameter. */ if ((err == noErr) && (fss->parID == 0)) { ! fss->parID = fsRtParID; } return noErr; } ! static OSErr IfDirCloseIt(int16 vol){ WDPBRec wdpb; ! ! if (vol < 0){ ! wdpb.ioCompletion = NULL; ! wdpb.ioVRefNum = vol; ! return PBCloseWDSync(&wdpb); } return noErr; } ! static MgErr OSErrToLVErr(OSErr err) { ! switch(err){ ! case noErr: return noErr; ! case rfNumErr: ! case paramErr: ! case nsvErr: ! case fnOpnErr: ! case bdNamErr: return mgArgErr; ! case vLckdErr: ! case wrPermErr: ! case wPrErr: ! case fLckdErr: ! case afpAccessDenied: ! case permErr: return fNoPerm; ! case fBsyErr: ! case opWrErr: return fIsOpen; ! case posErr: ! case eofErr: return fEOF; ! case dirNFErr: ! case fnfErr: return fNotFound; ! case dskFulErr: return fDiskFull; ! case dupFNErr: return fDupPath; ! case tmfoErr: return fTMFOpen; ! case memFullErr:return mFullErr; ! case afpObjectTypeErr: ! case afpContainsSharedErr: ! case afpInsideSharedErr: ! return fNotEnabled; } ! return fIOErr; /* fIOErr generally signifies some unknown file error */ } /* --- 458,520 ---- /* fileName parameter. */ if ((err == noErr) && (fss->parID == 0)) { ! fss->parID = fsRtParID; } return noErr; } ! static OSErr IfDirCloseIt(int16 vol) ! { WDPBRec wdpb; ! if (vol < 0) ! { ! wdpb.ioCompletion = NULL; ! wdpb.ioVRefNum = vol; ! return PBCloseWDSync(&wdpb); } return noErr; } ! static MgErr OSErrToLVErr(OSErr err) ! { ! switch(err) ! { ! case noErr: ! return noErr; ! case rfNumErr: ! case paramErr: ! case nsvErr: ! case fnOpnErr: ! case bdNamErr: ! return mgArgErr; ! case vLckdErr: ! case wrPermErr: ! case wPrErr: ! case fLckdErr: ! case afpAccessDenied: ! case permErr: ! return fNoPerm; ! case fBsyErr: ! case opWrErr: ! return fIsOpen; ! case posErr: ! case eofErr: ! return fEOF; ! case dirNFErr: ! case fnfErr: ! return fNotFound; ! case dskFulErr: ! return fDiskFull; ! case dupFNErr: ! return fDupPath; ! case tmfoErr: ! return fTMFOpen; ! case memFullErr: ! return mFullErr; ! case afpObjectTypeErr: ! case afpContainsSharedErr: ! case afpInsideSharedErr: ! return fNotEnabled; } ! return fIOErr; /* fIOErr generally signifies some unknown file error */ } /* Index: macbin.h =================================================================== RCS file: /cvsroot/opengtoolkit/lvzip/c_source/macbin.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** macbin.h 7 Jan 2006 20:11:30 -0000 1.7 --- macbin.h 8 Jan 2006 21:32:22 -0000 1.8 *************** *** 12,23 **** #endif - #ifndef _ZLIB_H - #include "zlib.h" - #endif - - #ifndef _ZLIBIOAPI_H - #include "ioapi.h" - #endif - #if defined(macintosh) || defined(__PPCC__) || defined(THINK_C) || defined(__SC__) || defined(__MWERKS__) || defined(__APPLE_CC__) #define Mac 1 --- 12,15 ---- *************** *** 37,53 **** #define Private(T) typedef struct T##_t { void *p; } *T Private(File); typedef int32 MgErr; - #if !Mac - typedef struct - { - int16 v; - int16 h; - } Point; - #endif - enum { /* Manager Error Codes */ #if !Mac && !QTMLIncl --- 29,40 ---- #define Private(T) typedef struct T##_t { void *p; } *T + #define PrivateH(T) struct T##_t; typedef struct T##_t **T Private(File); + PrivateH(Path); + Private(LVRefNum); typedef int32 MgErr; enum { /* Manager Error Codes */ #if !Mac && !QTMLIncl *************** *** 136,139 **** --- 123,137 ---- }; + #if !Mac + typedef struct + { + int16 v; + int16 h; + } Point; + #endif + + typedef uChar Str255[256]; + typedef const uChar ConstStr255[256]; + typedef uChar *PStr, *CStr; *************** *** 142,146 **** #define PStrSize(b) (PStrLen(b)+1) /* # of bytes including length */ ! typedef const uChar ConstStr255[256]; /* Typedefs */ --- 140,147 ---- #define PStrSize(b) (PStrLen(b)+1) /* # of bytes including length */ ! typedef struct { ! int32 cnt; ! uChar str[1]; ! } LStr, *LStrPtr, **LStrHandle; /* Typedefs */ *************** *** 162,173 **** enum { denyReadWrite, denyWriteOnly, denyNeither}; /* deny modes */ ! extern void ZEXPORT DLLVersion(char* Version); ! extern MgErr ZEXPORT HasResourceFork(ConstStr255 fileName, long *hasResFork); ! extern MgErr LV_EncodeMacbinary(ConstStr255 srcFileName, ConstStr255 dstFileName); ! extern MgErr LV_DecodeMacbinary(ConstStr255 srcFileName, ConstStr255 dstFileName); ! extern MgErr ZEXPORT UtilFileInfo OF((PStr path, uInt8 write, FileInfo *finderInfo, --- 163,179 ---- enum { denyReadWrite, denyWriteOnly, denyNeither}; /* deny modes */ ! /* LabVIEW exported functions */ ! MgErr FPathToText(Path path, LStrPtr lstr); ! MgErr FNewRefNum(Path path, File fd, LVRefNum* refnum); ! /* Our exported functions */ ! extern void ZEXPORT DLLVersion OF((uChar* Version)); ! extern MgErr ZEXPORT HasResourceFork OF((Path path, int32 *hasResFork)); ! extern MgErr ZEXPORT LV_EncodeMacbinary OF((Path srcFileName, Path dstFileName)); ! extern MgErr ZEXPORT LV_DecodeMacbinary OF((Path srcFileName, Path dstFileName)); ! ! extern MgErr ZEXPORT UtilFileInfo OF((Path path, uInt8 write, FileInfo *finderInfo, *************** *** 175,180 **** int32 *length)); ! extern MgErr ZEXPORT OpenResFork OF((File *fdp, ! PStr path, uInt32 openMode, uInt32 denyMode)); --- 181,186 ---- int32 *length)); ! extern MgErr ZEXPORT OpenResFork OF((LVRefNum *refnum, ! Path path, uInt32 openMode, uInt32 denyMode)); |