diff --git a/build-qt/HGSolution/HGUpgrade/HGUpgrade.pro b/build-qt/HGSolution/HGUpgrade/HGUpgrade.pro index d7599652..af6b281a 100644 --- a/build-qt/HGSolution/HGUpgrade/HGUpgrade.pro +++ b/build-qt/HGSolution/HGUpgrade/HGUpgrade.pro @@ -164,18 +164,20 @@ SOURCES += \ ../../../app/upgrade/HGUpgrade.cpp \ ../../../app/upgrade/main.cpp \ ../../../app/upgrade/mainwindow.cpp \ + ../../../modules/base/HGIni.cpp \ ../../../modules/base/HGMd5.cpp \ ../../../modules/base/HGUtility.cpp \ ../../../modules/base/HGThread.cpp \ - ../../../utility/HGString.cpp + ../../../utility/HGString.cpp \ HEADERS += \ ../../../app/upgrade/HGUpgrade.h \ ../../../app/upgrade/mainwindow.h \ + ../../../modules/base/HGIni.h \ ../../../modules/base/HGMd5.h \ ../../../modules/base/HGUtility.h \ ../../../modules/base/HGThread.h \ - ../../../utility/HGString.h + ../../../utility/HGString.h \ FORMS += \ ../../../app/upgrade/mainwindow.ui diff --git a/build/linux/HGUpload/HGUpload.cbp b/build/linux/HGUpload/HGUpload.cbp index 93cedbd7..62c8a0b9 100644 --- a/build/linux/HGUpload/HGUpload.cbp +++ b/build/linux/HGUpload/HGUpload.cbp @@ -168,6 +168,8 @@ + + diff --git a/build/windows/HGUpload/HGUpload.vcxproj b/build/windows/HGUpload/HGUpload.vcxproj index ca2c2d30..8aff5ebe 100644 --- a/build/windows/HGUpload/HGUpload.vcxproj +++ b/build/windows/HGUpload/HGUpload.vcxproj @@ -19,11 +19,13 @@ + + diff --git a/modules/base/HGUtility.cpp b/modules/base/HGUtility.cpp index 729a9257..74425743 100644 --- a/modules/base/HGUtility.cpp +++ b/modules/base/HGUtility.cpp @@ -1,5 +1,6 @@ #include "HGUtility.h" #include "HGInc.h" +#include "HGIni.h" #if defined(HG_CMP_MSC) #include #include @@ -170,18 +171,28 @@ HGResult HGAPI HGBase_GetModuleName(HGPointer addr, HGChar* name, HGUInt maxLen) } #if !defined(HG_CMP_MSC) - Dl_info dlinfo; - if (0 == dladdr(addr, &dlinfo)) - return HGBASE_ERR_FAIL; - if (maxLen < strlen(dlinfo.dli_fname) + 1) - return HGBASE_ERR_FAIL; - strcpy(name, dlinfo.dli_fname); + if (NULL == addr) + { + char dir[PATH_MAX] = {0}; + if (0 == readlink("/proc/self/exe", dir, PATH_MAX)) + return HGBASE_ERR_FAIL; + if (maxLen < strlen(dir) + 1) + return HGBASE_ERR_FAIL; + strcpy(name, dir); + } + else + { + Dl_info dlinfo; + if (0 == dladdr(addr, &dlinfo)) + return HGBASE_ERR_FAIL; + if (maxLen < strlen(dlinfo.dli_fname) + 1) + return HGBASE_ERR_FAIL; + strcpy(name, dlinfo.dli_fname); + } #else HMODULE hModule = NULL; GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCSTR)addr, &hModule); - if (NULL == hModule) - return HGBASE_ERR_FAIL; CHAR moduleName[MAX_PATH] = { 0 }; DWORD len = GetModuleFileNameA(hModule, moduleName, MAX_PATH); @@ -253,6 +264,32 @@ HGResult HGAPI HGBase_GetConfigPath(HGChar* configPath, HGUInt maxLen) return HGBASE_ERR_INVALIDARG; } + HGChar moduleName[256]; + HGBase_GetModuleName(NULL, moduleName, 256); + HGChar modulePath[256]; + HGBase_GetFilePath(moduleName, modulePath, 256); + strcat(modulePath, "first.cfg"); + + HGChar dataPath[256] = {0}; + HGBase_GetProfileString(modulePath, "constraints", "local_data_path", "", dataPath, 256); + if ('\0' != *dataPath) + { +#if defined(HG_CMP_MSC) + if (dataPath[strlen(dataPath) - 1] != '\\') + strcat(dataPath, "\\"); + strcat(dataPath, "Cfg\\"); +#else + if (dataPath[strlen(dataPath) - 1] != '/') + strcat(dataPath, "/"); + strcat(dataPath, "Cfg/"); +#endif + + if (maxLen < strlen(dataPath) + 1) + return HGBASE_ERR_FAIL; + strcpy(configPath, dataPath); + return HGBASE_ERR_OK; + } + #if defined(HG_CMP_MSC) CHAR cfgPath[MAX_PATH] = { 0 }; BOOL ret = SHGetSpecialFolderPathA(NULL, cfgPath, CSIDL_APPDATA, FALSE); @@ -291,6 +328,32 @@ HGResult HGAPI HGBase_GetLogFilePath(HGChar* logFilePath, HGUInt maxLen) return HGBASE_ERR_INVALIDARG; } + HGChar moduleName[256]; + HGBase_GetModuleName(NULL, moduleName, 256); + HGChar modulePath[256]; + HGBase_GetFilePath(moduleName, modulePath, 256); + strcat(modulePath, "first.cfg"); + + HGChar dataPath[256] = { 0 }; + HGBase_GetProfileString(modulePath, "constraints", "local_data_path", "", dataPath, 256); + if ('\0' != *dataPath) + { +#if defined(HG_CMP_MSC) + if (dataPath[strlen(dataPath) - 1] != '\\') + strcat(dataPath, "\\"); + strcat(dataPath, "Cfg\\"); +#else + if (dataPath[strlen(dataPath) - 1] != '/') + strcat(dataPath, "/"); + strcat(dataPath, "Cfg/"); +#endif + + if (maxLen < strlen(dataPath) + 1) + return HGBASE_ERR_FAIL; + strcpy(logFilePath, dataPath); + return HGBASE_ERR_OK; + } + #if defined(HG_CMP_MSC) CHAR logPath[MAX_PATH] = { 0 }; BOOL ret = SHGetSpecialFolderPathA(NULL, logPath, CSIDL_APPDATA, FALSE); diff --git a/sdk/upload/main.cpp b/sdk/upload/main.cpp index c34876e3..a9505e21 100644 --- a/sdk/upload/main.cpp +++ b/sdk/upload/main.cpp @@ -108,4 +108,4 @@ int cgiMain() //´òÓ¡Êä³ö fprintf(cgiOut, "

upload file success.

\n"); return cgiFormSuccess; -} \ No newline at end of file +}