OSDN Git Service

コードを整理。
[tpi/lychee.git] / src / plugin / calLibrary / calLibrary.cpp
index 0dde981..673698b 100644 (file)
@@ -706,19 +706,13 @@ int __stdcall OpenArchive
        if (_nFileCount != NULL)\r
        {\r
                fpProc = ::GetAPIAddress("GetFileCount", true);\r
-               if (fpProc == NULL)\r
-               {\r
-                       return TPI_ERROR_U_USE_LIBRARY;\r
-               }\r
-\r
-               int n = g_LibInfo.fUnicode\r
-                       ? ((int (__stdcall *)(const wchar_t *)) fpProc)(_szArcName.wchar_str())\r
-                       : ((int (__stdcall *)(const char *)) fpProc)(_szArcName.ToUTF8());\r
-               if (n == -1)\r
+               if (fpProc != NULL)\r
                {\r
-                       return TPI_ERROR_ARC_UNSUPPORTED;\r
+                       int n = g_LibInfo.fUnicode\r
+                               ? ((int (__stdcall *)(const wchar_t *)) fpProc)(_szArcName.wchar_str())\r
+                               : ((int (__stdcall *)(const char    *)) fpProc)(_szArcName.ToUTF8());\r
+                       * _nFileCount = n < 0 ? 0 : n;\r
                }\r
-               * _nFileCount = n;\r
        }\r
 \r
        fpProc = ::GetAPIAddress("OpenArchive", true);\r
@@ -870,6 +864,11 @@ int __stdcall GetArchiveInformation
        MySetArcSize(GetArcOriginalSize,   nUnpackedSize);\r
        MySetArcSize(GetArcCompressedSize, nPackedSize);\r
        MySetArcSize(GetArcReadSize,       nReadSize);\r
+       if (_aiInfo->nPackedSize == (DWORD) -1)\r
+       {\r
+               // 圧縮後サイズの取得に対応していない場合、書庫のサイズで代替。\r
+               _aiInfo->nPackedSize = _aiInfo->nFileSize;\r
+       }\r
 \r
        FILETIME ft;\r
        MySetArcTime(GetArcAccessTime, tmAccess, false);\r
@@ -880,6 +879,11 @@ int __stdcall GetArchiveInformation
        if (fpProc != NULL)\r
        {\r
                _aiInfo->wCompressRatio = ((WORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
+               if (_aiInfo->wCompressRatio == (WORD) -1)\r
+               {\r
+                       // エラーなら0にしておく。\r
+                       _aiInfo->wCompressRatio = 0;\r
+               }\r
        }\r
 \r
        fpProc = ::GetAPIAddress("GetArcOSType", false);\r