OSDN Git Service

library-disabledを誤って使用していたバグを修正。
authorsirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Wed, 3 Nov 2010 02:44:29 +0000 (02:44 +0000)
committersirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Wed, 3 Nov 2010 02:44:29 +0000 (02:44 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@413 9df91469-1e22-0410-86e7-ea8537beb833

src/plugin/calLibrary/calLibrary.cpp
src/plugin/cuiWrapper/cuiWrapper.cpp

index a635bf6..db91e72 100644 (file)
@@ -680,7 +680,7 @@ int __stdcall LoadPlugin
        }\r
 \r
        // 無限ループに陥らないよう上限を設定。\r
-       for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL; g_LibInfo.nLibIndex++)\r
+       for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL && xmlLibrary->GetName() == wxT("library"); g_LibInfo.nLibIndex++)\r
        {\r
                // ライブラリをロード。\r
                g_LibInfo.hLib = ::LoadLibrary(xmlLibrary->GetAttribute(wxT("name"), wxEmptyString).wchar_str());\r
@@ -787,7 +787,7 @@ int __stdcall GetFileInformation
 )\r
 {\r
        static wxULongLong_t s_nFileId;\r
-       static FARPROC fpNext, fpAttr;\r
+       static FARPROC fpNext, fpAttr, fpName;\r
        int nErrorCode;\r
        INDIVIDUALINFO iiInfo;\r
        INDIVIDUALINFOW iiInfoW;\r
@@ -800,6 +800,7 @@ int __stdcall GetFileInformation
                FARPROC fpProc = ::GetAPIAddress("FindFirst", true);\r
                fpNext = ::GetAPIAddress("FindNext", true);\r
                fpAttr = ::GetAPIAddress("GetAttribute", false);\r
+               fpName = ::GetAPIAddress("GetFileName", true);\r
                if (fpProc == NULL)\r
                {\r
                        return TPI_ERROR_U_USE_LIBRARY;\r
@@ -838,6 +839,10 @@ int __stdcall GetFileInformation
                        _fiInfo->nUnpackedSize  = iiInfoW.dwOriginalSize;\r
                        _fiInfo->tmModified.SetFromDOS(MAKELONG(iiInfoW.wTime, iiInfoW.wDate));\r
                        _fiInfo->szStoredName   = WC2String(iiInfoW.szFileName);\r
+                       if (wcslen(iiInfoW.szFileName) >= 510 && fpName)\r
+                       {\r
+                               ((int (__stdcall *)(void *, wchar_t *, const int)) fpName)(_hArchive, wxStringBuffer(_fiInfo->szStoredName, 32769), 32768);\r
+                       }\r
                        _fiInfo->szMethod       = WC2String(iiInfoW.szMode);\r
                        _fiInfo->wCompressRatio = iiInfoW.wRatio;\r
                }\r
@@ -849,6 +854,14 @@ int __stdcall GetFileInformation
                        _fiInfo->nUnpackedSize  = iiInfo.dwOriginalSize;\r
                        _fiInfo->tmModified.SetFromDOS(MAKELONG(iiInfo.wTime, iiInfo.wDate));\r
                        _fiInfo->szStoredName   = UTF82String(iiInfo.szFileName);\r
+                       if (strlen(iiInfo.szFileName) >= 510 && fpName)\r
+                       {\r
+                               char * sz = (char *) malloc(32769);\r
+                               memset(sz, 0, 32769);\r
+                               ((int (__stdcall *)(void *, char *, const int)) fpName)(_hArchive, sz, 32768);\r
+                               _fiInfo->szStoredName = UTF82String(sz);\r
+                               free(sz);\r
+                       }\r
                        _fiInfo->szMethod       = UTF82String(iiInfo.szMode);\r
                        _fiInfo->wCompressRatio = iiInfo.wRatio;\r
                }\r
index d633f7d..18c67d4 100644 (file)
@@ -268,7 +268,7 @@ int __stdcall LoadPlugin
        }\r
 \r
        // 無限ループに陥らないよう上限を設定。\r
-       for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL; g_LibInfo.nLibIndex++)\r
+       for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL && xmlLibrary->GetName() == wxT("library"); g_LibInfo.nLibIndex++)\r
        {\r
                // ライブラリをロード。\r
                g_LibInfo.szExeFile = xmlLibrary->GetAttribute(wxT("name"), wxEmptyString);\r