OSDN Git Service

GetArcXXXTime64, GetArcXXXTime, GetArcDate/Timeの各APIに対応し、GetArcXXXTimeExに対応していない場合にも書...
authorsirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Wed, 9 Feb 2011 13:18:04 +0000 (13:18 +0000)
committersirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Wed, 9 Feb 2011 13:18:04 +0000 (13:18 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@481 9df91469-1e22-0410-86e7-ea8537beb833

doc/history.html
src/plugin/calLibrary/calLibrary.cpp

index 2c7ae1a..d06d8f9 100644 (file)
        <li class="add">書庫の作成/更新/参照時刻の取得に対応。</li>\r
       </ul>\r
      </dd>\r
+     <dt>calLibrary</dt>\r
+     <dd>\r
+      <ul>\r
+       <li class="add">GetArcXXXTimeExに対応していない場合にも書庫の時刻の取得に対応。</li>\r
+      </ul>\r
+     </dd>\r
      <dt>rarArc</dt>\r
      <dd>\r
       <ul>\r
index 20eaa89..9b770ec 100644 (file)
@@ -94,7 +94,7 @@ BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void
 \r
                                // EXTRACTINGINFOEXW -> TPI_FILEINFO変換。\r
                                piInfo.fiInfo.dwCRC32           = ex->dwCRC;\r
-                               piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));\r
+                               piInfo.fiInfo.tmModified.SetFromDOS(MAKELONG(ex->wTime, ex->wDate));\r
                                piInfo.fiInfo.nPackedSize       = ex->dwCompressedSize;\r
                                piInfo.fiInfo.nUnpackedSize     = ex->exinfo.dwFileSize;\r
                                piInfo.fiInfo.eOSType           = ex->uOSType;\r
@@ -113,7 +113,7 @@ BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void
 \r
                                // EXTRACTINGINFOEX -> TPI_FILEINFO変換。\r
                                piInfo.fiInfo.dwCRC32           = ex->dwCRC;\r
-                               piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));\r
+                               piInfo.fiInfo.tmModified.SetFromDOS(MAKELONG(ex->wTime, ex->wDate));\r
                                piInfo.fiInfo.nPackedSize       = ex->dwCompressedSize;\r
                                piInfo.fiInfo.nUnpackedSize     = ex->exinfo.dwFileSize;\r
                                piInfo.fiInfo.eOSType           = ex->uOSType;\r
@@ -858,6 +858,57 @@ int __stdcall GetFileInformation
        return nErrorCode;\r
 }\r
 \r
+#define MySetArcSize(api_base, var) \\r
+       fpProc = ::GetAPIAddress(#api_base L"Ex", false); \\r
+       if (fpProc != NULL) \\r
+       { \\r
+               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->var); \\r
+       } \\r
+       else \\r
+       { \\r
+               fpProc = ::GetAPIAddress(#api_base, false); \\r
+               if (fpProc != NULL) \\r
+               { \\r
+                       _aiInfo->var = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive); \\r
+               } \\r
+       }\r
+\r
+#define MySetArcTime(api_base, var, ismod) \\r
+       fpProc = ::GetAPIAddress(#api_base L"64", false); \\r
+       if (fpProc != NULL) \\r
+       { \\r
+               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, & ll); \\r
+               _aiInfo->var.Set((time_t) ll); \\r
+       } \\r
+       else \\r
+       { \\r
+               fpProc = ::GetAPIAddress(#api_base L"Ex", false); \\r
+               if (fpProc != NULL) \\r
+               { \\r
+                       ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft); \\r
+                       _aiInfo->var = FileTimeToWxDateTime(& ft); \\r
+               } \\r
+               else \\r
+               { \\r
+                       fpProc = ::GetAPIAddress(#api_base, false); \\r
+                       if (fpProc != NULL) \\r
+                       { \\r
+                               _aiInfo->var.Set((time_t) ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive)); \\r
+                       } \\r
+                       else \\r
+                       { \\r
+                               if (ismod) \\r
+                               { \\r
+                                       fpProc = ::GetAPIAddress("GetArcDate", false); \\r
+                                       WORD wDate = fpProc == NULL ? 0 : ((WORD (__stdcall *)(void *)) fpProc)(_hArchive); \\r
+                                       fpProc = ::GetAPIAddress("GetArcTime", false); \\r
+                                       WORD wTime = fpProc == NULL ? 0 : ((WORD (__stdcall *)(void *)) fpProc)(_hArchive); \\r
+                                       _aiInfo->var.SetFromDOS(MAKELONG(wTime, wDate)); \\r
+                               } \\r
+                       } \\r
+               } \\r
+       }\r
+\r
 int __stdcall GetArchiveInformation\r
 (\r
        void * _hArchive,\r
@@ -886,61 +937,16 @@ int __stdcall GetArchiveInformation
                _aiInfo->fnArchive = wxFileName(s);\r
        }\r
 \r
-       fpProc = ::GetAPIAddress("GetArcFileSizeEx", false);\r
-       if (fpProc != NULL)\r
-       {\r
-               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nFileSize);\r
-       }\r
-       else\r
-       {\r
-               fpProc = ::GetAPIAddress("GetArcFileSize", false);\r
-               if (fpProc != NULL)\r
-               {\r
-                       _aiInfo->nFileSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
-               }\r
-       }\r
-\r
-       fpProc = ::GetAPIAddress("GetArcOriginalSizeEx", false);\r
-       if (fpProc != NULL)\r
-       {\r
-               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nUnpackedSize);\r
-       }\r
-       else\r
-       {\r
-               fpProc = ::GetAPIAddress("GetArcOriginalSize", false);\r
-               if (fpProc != NULL)\r
-               {\r
-                       _aiInfo->nUnpackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
-               }\r
-       }\r
-\r
-       fpProc = ::GetAPIAddress("GetArcCompressedSizeEx", false);\r
-       if (fpProc != NULL)\r
-       {\r
-               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nPackedSize);\r
-       }\r
-       else\r
-       {\r
-               fpProc = ::GetAPIAddress("GetArcCompressedSize", false);\r
-               if (fpProc != NULL)\r
-               {\r
-                       _aiInfo->nPackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
-               }\r
-       }\r
+       wxLongLong_t ll = 0;\r
+       MySetArcSize(GetArcFileSize,       nFileSize);\r
+       MySetArcSize(GetArcOriginalSize,   nUnpackedSize);\r
+       MySetArcSize(GetArcCompressedSize, nPackedSize);\r
+       MySetArcSize(GetArcReadSize,       nReadSize);\r
 \r
-       fpProc = ::GetAPIAddress("GetArcReadSizeEx", false);\r
-       if (fpProc != NULL)\r
-       {\r
-               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nReadSize);\r
-       }\r
-       else\r
-       {\r
-               fpProc = ::GetAPIAddress("GetArcReadSize", false);\r
-               if (fpProc != NULL)\r
-               {\r
-                       _aiInfo->nReadSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
-               }\r
-       }\r
+       FILETIME ft;\r
+       MySetArcTime(GetArcAccessTime, tmAccess, false);\r
+       MySetArcTime(GetArcCreateTime, tmCreate, false);\r
+       MySetArcTime(GetArcWriteTime,  tmModified, true);\r
 \r
        fpProc = ::GetAPIAddress("GetArcRatio", false);\r
        if (fpProc != NULL)\r
@@ -948,28 +954,6 @@ int __stdcall GetArchiveInformation
                _aiInfo->wCompressRatio = ((WORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
        }\r
 \r
-       FILETIME ft;\r
-       fpProc = ::GetAPIAddress("GetArcAccessTimeEx", false);\r
-       if (fpProc != NULL)\r
-       {\r
-               ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft);\r
-               _aiInfo->tmAccess = FileTimeToWxDateTime(& ft);\r
-       }\r
-\r
-       fpProc = ::GetAPIAddress("GetArcCreatedTimeEx", false);\r
-       if (fpProc != NULL)\r
-       {\r
-               ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft);\r
-               _aiInfo->tmCreate = FileTimeToWxDateTime(& ft);\r
-       }\r
-\r
-       fpProc = ::GetAPIAddress("GetArcWriteTimeEx", false);\r
-       if (fpProc != NULL)\r
-       {\r
-               ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft);\r
-               _aiInfo->tmModified = FileTimeToWxDateTime(& ft);\r
-       }\r
-\r
        fpProc = ::GetAPIAddress("GetArcOSType", false);\r
        if (fpProc != NULL)\r
        {\r