OSDN Git Service

wxEmptyStringの代入をwxString::Clear()に変更。
[tpi/lychee.git] / src / common / handle / TPIHandle.cpp
index 4ee34ad..20dd9a0 100644 (file)
@@ -16,7 +16,7 @@
   with this library; if not, write to the Free Software Foundation, Inc.,\r
   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
 \r
-  $Id: TPIHandle.cpp,v 1.5 2009/08/28 12:41:29 sirakaba Exp $\r
+  $Id$\r
 *******************************************************************************/\r
 \r
 //******************************************************************************\r
 #include <wx/dynlib.h>\r
 #include "TPIHandle.h"\r
 \r
+#define GetAPIAddress(name, p) \\r
+       if (! this->lib.HasSymbol(wxT(name))) \\r
+       { \\r
+               return false; \\r
+       } \\r
+       void * p = this->lib.GetSymbol(wxT(name)); \\r
+       if (! p) \\r
+       { \\r
+               return false; \\r
+       }\r
+\r
 //******************************************************************************\r
 //    Class (TPIHandle)\r
 //******************************************************************************\r
 \r
+TPIHandle::TPIHandle(void)\r
+{\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+}\r
+\r
 TPIHandle::~TPIHandle(void)\r
 {\r
        this->FreeLibrary();\r
@@ -39,6 +55,7 @@ TPIHandle::~TPIHandle(void)
 \r
 bool TPIHandle::InitLibrary(const wxString & _szLibName, const wxString & _szArcName, wxULongLong _llSubOption)\r
 {\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
        this->lib.Load(_szLibName);\r
        if (! this->lib.IsLoaded())\r
        {\r
@@ -50,111 +67,98 @@ bool TPIHandle::InitLibrary(const wxString & _szLibName, const wxString & _szArc
                return true;\r
        }\r
 \r
-       if (! this->lib.HasSymbol(wxT("LoadPlugin")))\r
-       {\r
-               return false;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("LoadPlugin"));\r
-       if (! p)\r
-       {\r
-               return false;\r
-       }\r
-\r
-       return ((int (__stdcall *)(const wxString &, wxULongLong)) p)(_szArcName, _llSubOption) == TPI_ERROR_SUCCESS;\r
+       GetAPIAddress("LoadPlugin", p);\r
+       this->nErrorCode = ((int (__stdcall *)(const wxString &, wxULongLong)) p)(_szArcName, _llSubOption);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r
 \r
 bool TPIHandle::FreeLibrary(void)\r
 {\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
        if (! this->lib.IsLoaded())\r
        {\r
                return false;\r
        }\r
 \r
-       if (! this->lib.HasSymbol(wxT("FreePlugin")))\r
-       {\r
-               return false;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("FreePlugin"));\r
-       if (! p)\r
-       {\r
-               return false;\r
-       }\r
-       ((int (__stdcall *)(void *)) p)(NULL);\r
+       GetAPIAddress("FreePlugin", p);\r
+       this->nErrorCode = ((int (__stdcall *)(void *)) p)(NULL);\r
 \r
        this->lib.Unload();\r
-       return true;\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r
 \r
-int TPIHandle::GetPluginInformation(unsigned int _uInfoId, wxULongLong _llSubOption, void * _pPtr)\r
+bool TPIHandle::GetPluginInformation(unsigned int _uInfoId, wxULongLong _llSubOption, void * _pPtr)\r
 {\r
-       if (! this->lib.HasSymbol(wxT("GetPluginInformation")))\r
-       {\r
-               return -1;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("GetPluginInformation"));\r
-       if (! p)\r
-       {\r
-               return -1;\r
-       }\r
-\r
-       return ((int (__stdcall *)(unsigned int, wxULongLong, void *)) p)(_uInfoId, _llSubOption, _pPtr);\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+       GetAPIAddress("GetPluginInformation", p);\r
+       this->nErrorCode = ((int (__stdcall *)(unsigned int, wxULongLong, void *)) p)(_uInfoId, _llSubOption, _pPtr);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r
 \r
-int TPIHandle::CheckArchive(const wxString & _szArcName, int * _nFileCount)\r
+bool TPIHandle::GetFormatInformation(TPI_FORMATINFO * _fiInfo, bool _bFirst)\r
 {\r
-       if (! this->lib.HasSymbol(wxT("CheckArchive")))\r
-       {\r
-               return -1;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("CheckArchive"));\r
-       if (! p)\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+       if (! _fiInfo)\r
        {\r
-               return -1;\r
+               return false;\r
        }\r
 \r
-       return ((int (__stdcall *)(const wxString &, int *)) p)(_szArcName, _nFileCount);\r
+       // Initialization.\r
+       _fiInfo->fArchive           = false;\r
+       _fiInfo->fComment           = false;\r
+       _fiInfo->fEncryptKeyFile    = false;\r
+       _fiInfo->fEncryptPassword   = false;\r
+       _fiInfo->fEncryptHeader     = false;\r
+       _fiInfo->fMMOptimize        = false;\r
+       _fiInfo->fMultiVolume       = false;\r
+       _fiInfo->fSolid             = false;\r
+       _fiInfo->sCompressLevelMin  = 0;\r
+       _fiInfo->sCompressLevelMax  = 0;\r
+       _fiInfo->sRecoveryRecordMin = 0;\r
+       _fiInfo->sRecoveryRecordMax = 0;\r
+       _fiInfo->szTypeName.Clear();\r
+       _fiInfo->szSuffix.Clear();\r
+       _fiInfo->szEngineName.Clear();\r
+       _fiInfo->szTPIName.Clear();\r
+       _fiInfo->llSupportedCommand = 0;\r
+       _fiInfo->llTypeId           = 0;\r
+       _fiInfo->pCustomInfo    = NULL;\r
+\r
+       GetAPIAddress("GetFormatInformation", p);\r
+       this->nErrorCode = ((int (__stdcall *)(TPI_FORMATINFO *, bool)) p)(_fiInfo, _bFirst);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r
 \r
-int TPIHandle::OpenArchive(const wxString & _szArcName, void * * _hArchive)\r
+bool TPIHandle::CheckArchive(const wxString & _szArcName, int * _nFileCount)\r
 {\r
-       if (! this->lib.HasSymbol(wxT("OpenArchive")))\r
-       {\r
-               return -1;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("OpenArchive"));\r
-       if (! p)\r
-       {\r
-               return -1;\r
-       }\r
-\r
-       return ((int (__stdcall *)(const wxString &, void * *)) p)(_szArcName, _hArchive);\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+       GetAPIAddress("CheckArchive", p);\r
+       this->nErrorCode = ((int (__stdcall *)(const wxString &, int *)) p)(_szArcName, _nFileCount);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r
 \r
-int TPIHandle::CloseArchive(void * _hArchive)\r
+bool TPIHandle::OpenArchive(const wxString & _szArcName)\r
 {\r
-       if (! this->lib.HasSymbol(wxT("CloseArchive")))\r
-       {\r
-               return -1;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("CloseArchive"));\r
-       if (! p)\r
-       {\r
-               return -1;\r
-       }\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+       GetAPIAddress("OpenArchive", p);\r
+       this->nErrorCode = ((int (__stdcall *)(const wxString &, void * *)) p)(_szArcName, & this->archive);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
+}\r
 \r
-       return ((int (__stdcall *)(void *)) p)(_hArchive);\r
+bool TPIHandle::CloseArchive(void)\r
+{\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+       GetAPIAddress("CloseArchive", p);\r
+       this->nErrorCode = ((int (__stdcall *)(void *)) p)(this->archive);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r
 \r
-int TPIHandle::GetFileInformation(void * _hArchive, TPI_FILEINFO * _fiInfo, bool _bFirst)\r
+bool TPIHandle::GetFileInformation(TPI_FILEINFO * _fiInfo, bool _bFirst)\r
 {\r
-       if (! this->lib.HasSymbol(wxT("GetFileInformation")) || ! _fiInfo)\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+       if (! _fiInfo)\r
        {\r
-               return -1;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("GetFileInformation"));\r
-       if (! p)\r
-       {\r
-               return -1;\r
+               return false;\r
        }\r
 \r
        // Initialization.\r
@@ -167,25 +171,24 @@ int TPIHandle::GetFileInformation(void * _hArchive, TPI_FILEINFO * _fiInfo, bool
        _fiInfo->uOSType        = 0;\r
        _fiInfo->llPackedSize   = 0;\r
        _fiInfo->llUnpackedSize = 0;\r
-       _fiInfo->szStoredName   = wxEmptyString;\r
-       _fiInfo->szMethod       = wxEmptyString;\r
+       _fiInfo->szStoredName.Clear();\r
+       _fiInfo->szMethod.Clear();\r
+       _fiInfo->szComment.Clear();\r
        _fiInfo->wCompressRatio = 0;\r
        _fiInfo->llFileID       = 0;\r
        _fiInfo->pCustomInfo    = NULL;\r
 \r
-       return ((int (__stdcall *)(void *, TPI_FILEINFO *, bool)) p)(_hArchive, _fiInfo, _bFirst);\r
+       GetAPIAddress("GetFileInformation", p);\r
+       this->nErrorCode = ((int (__stdcall *)(void *, TPI_FILEINFO *, bool)) p)(this->archive, _fiInfo, _bFirst);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r
 \r
-int TPIHandle::GetArchiveInformation(void * _hArchive, TPI_ARCHIVEINFO * _aiInfo)\r
+bool TPIHandle::GetArchiveInformation(TPI_ARCHIVEINFO * _aiInfo)\r
 {\r
-       if (! this->lib.HasSymbol(wxT("GetArchiveInformation")) || ! _aiInfo)\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+       if (! _aiInfo)\r
        {\r
-               return -1;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("GetArchiveInformation"));\r
-       if (! p)\r
-       {\r
-               return -1;\r
+               return false;\r
        }\r
 \r
        // Initialization.\r
@@ -205,39 +208,46 @@ int TPIHandle::GetArchiveInformation(void * _hArchive, TPI_ARCHIVEINFO * _aiInfo
        _aiInfo->llReadSize     = 0;\r
        _aiInfo->llUnpackedSize = 0;\r
        _aiInfo->llSplitSize    = 0;\r
-       _aiInfo->szComment      = wxEmptyString;\r
+       _aiInfo->szComment.Clear();\r
        _aiInfo->wCompressRatio = 0;\r
        _aiInfo->pCustomInfo    = NULL;\r
-\r
-       return ((int (__stdcall *)(void *, TPI_ARCHIVEINFO *)) p)(_hArchive, _aiInfo);\r
+       // FORMATINFO\r
+       _aiInfo->fiInfo.fComment           = false;\r
+       _aiInfo->fiInfo.fEncryptKeyFile    = false;\r
+       _aiInfo->fiInfo.fEncryptPassword   = false;\r
+       _aiInfo->fiInfo.fEncryptHeader     = false;\r
+       _aiInfo->fiInfo.fMMOptimize        = false;\r
+       _aiInfo->fiInfo.fMultiVolume       = false;\r
+       _aiInfo->fiInfo.fSolid             = false;\r
+       _aiInfo->fiInfo.sCompressLevelMin  = 0;\r
+       _aiInfo->fiInfo.sCompressLevelMax  = 0;\r
+       _aiInfo->fiInfo.sRecoveryRecordMin = 0;\r
+       _aiInfo->fiInfo.sRecoveryRecordMax = 0;\r
+       _aiInfo->fiInfo.szTypeName.Clear();\r
+       _aiInfo->fiInfo.szSuffix.Clear();\r
+       _aiInfo->fiInfo.szEngineName.Clear();\r
+       _aiInfo->fiInfo.szTPIName.Clear();\r
+       _aiInfo->fiInfo.llSupportedCommand = 0;\r
+       _aiInfo->fiInfo.llTypeId           = 0;\r
+       _aiInfo->fiInfo.pCustomInfo    = NULL;\r
+\r
+       GetAPIAddress("GetArchiveInformation", p);\r
+       this->nErrorCode = ((int (__stdcall *)(void *, TPI_ARCHIVEINFO *)) p)(this->archive, _aiInfo);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r
 \r
-int TPIHandle::Command(unsigned int _uCommand, TPI_SWITCHES * _swInfo, const wxString & _szArcName, const wxArrayString & _szFiles)\r
+bool TPIHandle::Command(unsigned int _uCommand, TPI_SWITCHES * _swInfo, const wxString & _szArcName, const wxArrayString & _szFiles)\r
 {\r
-       if (! this->lib.HasSymbol(wxT("Command")))\r
-       {\r
-               return -1;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("Command"));\r
-       if (! p)\r
-       {\r
-               return -1;\r
-       }\r
-\r
-       return ((int (__stdcall *)(unsigned int, TPI_SWITCHES *, const wxString &, const wxArrayString &)) p)(_uCommand, _swInfo, _szArcName, _szFiles);\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+       GetAPIAddress("Command", p);\r
+       this->nErrorCode = ((int (__stdcall *)(unsigned int, TPI_SWITCHES *, const wxString &, const wxArrayString &)) p)(_uCommand, _swInfo, _szArcName, _szFiles);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r
 \r
-int TPIHandle::SetCallbackProc(TPI_PROC _prProc)\r
+bool TPIHandle::SetCallbackProc(TPI_PROC _prProc)\r
 {\r
-       if (! this->lib.HasSymbol(wxT("SetCallbackProc")))\r
-       {\r
-               return -1;\r
-       }\r
-       void * p = this->lib.GetSymbol(wxT("SetCallbackProc"));\r
-       if (! p)\r
-       {\r
-               return -1;\r
-       }\r
-\r
-       return ((int (__stdcall *)(TPI_PROC)) p)(_prProc);\r
+       this->nErrorCode = TPI_ERROR_SUCCESS;\r
+       GetAPIAddress("SetCallbackProc", p);\r
+       this->nErrorCode = ((int (__stdcall *)(TPI_PROC)) p)(_prProc);\r
+       return this->nErrorCode == TPI_ERROR_SUCCESS;\r
 }\r