From: Rolf K. <lab...@us...> - 2005-04-04 21:18:46
|
Update of /cvsroot/opengtoolkit/lvzip/c_source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4089/c_source Modified Files: macbin.c zlibvc.def Log Message: Readed UtilFileInfo Index: macbin.c =================================================================== RCS file: /cvsroot/opengtoolkit/lvzip/c_source/macbin.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** macbin.c 16 Jan 2005 11:31:46 -0000 1.8 --- macbin.c 4 Apr 2005 21:18:37 -0000 1.9 *************** *** 19,29 **** static OSErr IfDirCloseIt(int16 vol); static MgErr OSErrToLVErr(OSErr err); #endif - extern MgErr ZEXPORT OpenResFork(File *fdp, ! PStr path, ! uInt32 openMode, ! uInt32 denyMode) { #if Mac int16 perm; --- 19,41 ---- 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 <windows.h> + static void Win32ConvertFromLVTime(uInt32 time, FILETIME* sTime); + static void Win32ConvertToLVTime(FILETIME sTime, uInt32* time); #endif extern MgErr ZEXPORT OpenResFork(File *fdp, ! PStr path, ! uInt32 openMode, ! uInt32 denyMode) { #if Mac int16 perm; *************** *** 90,94 **** } ! extern long ZEXPORT InitializeFileFuncs OF((zlib_filefunc_def* pzlib_filefunc_def)) { if (pzlib_filefunc_def) --- 102,218 ---- } ! extern MgErr ZEXPORT UtilFileInfo(PStr path, ! uInt8 write, ! FileInfo *finderInfo, ! PStr comment, ! int32 *length) ! { ! #if Mac ! FSSpec fss; ! DTPBRec dtpb; ! CInfoPBRec cpb; ! OSErr err = noErr; ! ! if (len > 255) ! return mgArgErr; ! ! if (err = MakeFSpec(path, &fss)) ! return OSErrToLVErr(err); ! ! memset(&cpb, 0, sizeof(CInfoPBRec)); ! cpb.hFileInfo.ioNamePtr = fss.name; ! cpb.hFileInfo.ioVRefNum = fss.vRefNum; ! cpb.hFileInfo.ioDirID = fss.parID; ! ! if (err = PBGetCatInfoSync(&cpb)) ! goto out; ! ! dtpb.ioCompletion = nil; ! dtpb.ioNamePtr = NULL; ! dtpb.ioVRefNum = fss.vRefNum; ! ! if (err = PBDTGetPath(&dtpb)) ! goto out; ! ! dtpb.ioNamePtr = fss.name; ! dtpb.ioDTBuffer = comment; ! dtpb.ioDirID = fss.parID; ! ! if (write) ! { ! ! if (MacIsDir(cpb) ! { ! cbp.dirInfo.ioDrUsrWds.frFlags = fileInfo->flags; ! cbp.dirInfo.ioDrUsrWds.frLocation = fileInfo->location; ! ! MacConvertFromLVTime(fileInfo->cDate, cbp.dirInfo.ioDrCrDat); ! MacConvertFromLVTime(fileInfo->mDate, cbp.dirInfo.ioDrMdDat); ! } ! else ! { ! cbp.hFileInfo.ioFlFndrInfo.fdType = fileInfo->type; ! cbp.hFileInfo.ioFlFndrInfo.fdCreator = fileInfo->creator; ! cpb.hFileInfo.ioFlFndrInfo.fdFlags = fileInfo->flags; ! cpb.hFileInfo.ioFlFndrInfo.fdFldr = fileInfo->fId; ! cbp.hFileInfo.ioFlFndrInfo.fdLocation = fileInfo->location; ! cpb.hFileInfo.ioFlXFndrInfo.fdScript = fileInfo->sId; ! cpb.hFileInfo.ioFlXFndrInfo.fdFlags = fileInfo->xFlags; ! ! MacConvertFromLVTime(fileInfo->cDate, cbp.hFileInfo.ioFlCrDat); ! MacConvertFromLVTime(fileInfo->mDate, cbp.hFileInfo.ioFlMdDat); ! } ! ! err = PBSetCatInfoSync(&cpb); ! ! if (!err && *length && comment && PStrLen(comment)) { ! dtpb.ioDTReqCount = *length; ! err = PBDTSetCommentSync(&dtpb); ! } ! } ! else ! { ! ! if (MacIsDir(cpb) ! { ! fileInfo->type = kUnknownType; ! fileInfo->creator = kUnknownCreator; ! fileInfo->flags = cbp.dirInfo.ioDrUsrWds.frFlags; ! fileInfo->fId = ! fileInfo->location = cbp.dirInfo.ioDrUsrWds.frLocation; ! fileInfo->size = cbp.dirInfo.ioDrNmFls; ! fileInfo->rfSize = 0; ! ! MacConvertToLVTime(cbp.dirInfo.ioDrCrDat, fileInfo->cDate); ! MacConvertToLVTime(cbp.dirInfo.ioDrMdDat, fileInfo->mDate); ! } ! else ! { ! fileInfo->type = cbp.hFileInfo.ioFlFndrInfo.fdType; ! fileInfo->creator = cbp.hFileInfo.ioFlFndrInfo.fdCreator; ! fileInfo->flags = cpb.hFileInfo.ioFlFndrInfo.fdFlags; ! fileInfo->fId = cpb.hFileInfo.ioFlFndrInfo.fdFldr; ! fileInfo->location = cbp.hFileInfo.ioFlFndrInfo.fdLocation; ! fileInfo->size = catInfoPB.hFileInfo.ioFlLgLen; ! fileInfo->rfSize = catInfoPB.hFileInfo.ioFlRLgLen; ! fileInfo->sId = cpb.hFileInfo.ioFlXFndrInfo.fdScript; ! fileInfo->xFlags = cpb.hFileInfo.ioFlXFndrInfo.fdFlags; ! ! MacConvertToLVTime(cbp.hFileInfo.ioFlCrDat, fileInfo->cDate); ! MacConvertToLVTime(cbp.hFileInfo.ioFlMdDat, fileInfo->mDate); ! } ! ! err = PBDTGetCommentSync(&dtpb); ! *length = dtpb.ioDTActCount; ! } ! out: ! IfDirCloseIt(fss.vRefNum); ! return OSErrToLVErr(err); ! #else ! return mgNotSupported; ! #endif ! } ! ! extern long ZEXPORT InitializeFileFuncs (zlib_filefunc_def* pzlib_filefunc_def) { if (pzlib_filefunc_def) *************** *** 163,169 **** case afpContainsSharedErr: case afpInsideSharedErr: ! return fNotEnabled; } return fIOErr; /* fIOErr generally signifies some unknown file error */ } #endif --- 287,323 ---- case afpContainsSharedErr: case afpInsideSharedErr: ! return fNotEnabled; } return fIOErr; /* fIOErr generally signifies some unknown file error */ } + /* + Calculate difference in seconds between local time zone and daylight + savings time settings and Universal Time Coordinate (also called GMT). + */ + static int32 UTCShift() + { + MachineLocation loc; + int32 delta; + + ReadLocation(&loc); + delta = loc.u.gmtDelta & 0x00ffffff; /* get sec east of UTC */ + if (delta & 0x800000) + delta |= 0xff000000; /* sign extend */ + return -delta; /* secs from UTC */ + } + + static void MacConvertFromLVTime(uInt32 time, uInt32 *sTime) + { + if (time > 0.0) + { + *sTime = time - UTCShift(); + } + return; + } + + static void MacConvertToLVTime(uInt32 sTime, uInt32 *time) + { + *time = sTime + UTCShift(); + return; + } #endif Index: zlibvc.def =================================================================== RCS file: /cvsroot/opengtoolkit/lvzip/c_source/zlibvc.def,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** zlibvc.def 16 Jan 2005 11:30:19 -0000 1.9 --- zlibvc.def 4 Apr 2005 21:18:37 -0000 1.10 *************** *** 97,99 **** OpenResFork @200 ! InitializeFileFuncs @201 --- 97,100 ---- OpenResFork @200 ! UtilFileInfo @201 ! InitializeFileFuncs @202 |