}\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
)\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
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
_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
_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