From 47777eb6f14aa43e8a1fe96d792b7bd2911d7d98 Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Fri, 25 Nov 2022 18:00:33 +0800 Subject: [PATCH] =?UTF-8?q?HGImgProc=E4=BF=9D=E5=AD=98=E5=92=8C=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=96=87=E4=BB=B6=E5=A2=9E=E5=8A=A0=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/base/HGBaseErr.h | 9 +++++++++ modules/base/HGCrash.cpp | 6 +++--- modules/base/HGDll.cpp | 4 ++-- modules/base/HGInc.h | 1 + modules/base/HGIni.cpp | 10 +++++++++- modules/imgfmt/HGBmp.cpp | 19 ++++++++++++++----- modules/imgfmt/HGGif.cpp | 25 +++++++++++++++++-------- modules/imgfmt/HGJpeg.cpp | 9 +++++++++ modules/imgfmt/HGOfdImpl.cpp | 11 ++++++++++- modules/imgfmt/HGPdfImpl.cpp | 15 ++++++++++++++- modules/imgfmt/HGPng.cpp | 11 ++++++++++- modules/imgfmt/HGPnm.cpp | 13 +++++++++++-- modules/imgfmt/HGTiff.cpp | 11 ++++++++++- 13 files changed, 119 insertions(+), 25 deletions(-) diff --git a/modules/base/HGBaseErr.h b/modules/base/HGBaseErr.h index ca31ca94..b06338ef 100644 --- a/modules/base/HGBaseErr.h +++ b/modules/base/HGBaseErr.h @@ -28,4 +28,13 @@ /* 超时 */ #define HGBASE_ERR_TIMEOUT 0x00000008L +/* 文件不存在 */ +#define HGBASE_ERR_FILENOTEXIST 0x00000009L + +/* 加载动态库失败 */ +#define HGBASE_ERR_LOADLIBRARY 0x0000000AL + +/* 文件错误 */ +#define HGBASE_ERR_FILEERROR 0x0000000BL + #endif /* __HGBASEERR_H__ */ \ No newline at end of file diff --git a/modules/base/HGCrash.cpp b/modules/base/HGCrash.cpp index 1d7f5c90..ac367645 100644 --- a/modules/base/HGCrash.cpp +++ b/modules/base/HGCrash.cpp @@ -35,7 +35,7 @@ HGResult HGAPI HGBase_RegisterCrashFunc(HGCrashFunc func, HGPointer param) SetUnhandledExceptionFilter(UnhandledExceptionFilterEx); return HGBASE_ERR_OK; #else - return HGBASE_ERR_FAIL; + return HGBASE_ERR_NOTIMPL; #endif } @@ -50,7 +50,7 @@ HGResult HGAPI HGBase_MakeCrashFile(const HGChar* filePath) HANDLE hFile = CreateFileA(filePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hFile) { - return HGBASE_ERR_FAIL; + return HGBASE_ERR_ACCESSDENIED; } MINIDUMP_EXCEPTION_INFORMATION mdei; @@ -61,6 +61,6 @@ HGResult HGAPI HGBase_MakeCrashFile(const HGChar* filePath) CloseHandle(hFile); return HGBASE_ERR_OK; #else - return HGBASE_ERR_FAIL; + return HGBASE_ERR_NOTIMPL; #endif } \ No newline at end of file diff --git a/modules/base/HGDll.cpp b/modules/base/HGDll.cpp index e29e0651..45e59a7a 100644 --- a/modules/base/HGDll.cpp +++ b/modules/base/HGDll.cpp @@ -44,14 +44,14 @@ HGResult HGAPI HGBase_CreateDll(const HGChar* fileName, HGDll* dll) if (NULL == hDll) { HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "HGBase_CreateDll: dlopen fail, %s dlerror=%s", fileName, dlerror()); - return HGBASE_ERR_FAIL; + return HGBASE_ERR_LOADLIBRARY; } #else HMODULE hDll = LoadLibraryExA((const char *)fileName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); if (NULL == hDll) { HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "HGBase_CreateDll: LoadLibraryExA fail, %s GetLastError=%u", fileName, GetLastError()); - return HGBASE_ERR_FAIL; + return HGBASE_ERR_LOADLIBRARY; } #endif HGDllImpl* dllImpl = new HGDllImpl; diff --git a/modules/base/HGInc.h b/modules/base/HGInc.h index d5c37c7d..f8ee0282 100644 --- a/modules/base/HGInc.h +++ b/modules/base/HGInc.h @@ -18,6 +18,7 @@ #if defined(HG_CMP_MSC) #include #include +#include #else #include #include diff --git a/modules/base/HGIni.cpp b/modules/base/HGIni.cpp index f322db92..67b13131 100644 --- a/modules/base/HGIni.cpp +++ b/modules/base/HGIni.cpp @@ -185,6 +185,14 @@ static HGResult IniReadValue(const char* section, const char* key, char* val, co typedef std::vector > SectionList; SectionList sectList; +#if defined(HG_CMP_MSC) + if (0 != _access(file, 0)) +#else + if (0 != access(file, 0)) +#endif + { + return HGBASE_ERR_FILENOTEXIST; + } FILE* fp = fopen(file, "r"); if (fp != NULL) @@ -255,7 +263,7 @@ static HGResult IniReadValue(const char* section, const char* key, char* val, co else { strcpy(val, def); - return HGBASE_ERR_FAIL; + return HGBASE_ERR_ACCESSDENIED; } bool bGetVal = false; diff --git a/modules/imgfmt/HGBmp.cpp b/modules/imgfmt/HGBmp.cpp index 3591a0a7..017be621 100644 --- a/modules/imgfmt/HGBmp.cpp +++ b/modules/imgfmt/HGBmp.cpp @@ -78,6 +78,15 @@ HGResult HGAPI HGImgFmt_LoadBmpImage(const HGChar* fileName, HGBmpLoadInfo* info } } +#if defined(HG_CMP_MSC) + if (0 != _access(fileName, 0)) +#else + if (0 != access(fileName, 0)) +#endif + { + return HGBASE_ERR_FILENOTEXIST; + } + FILE* file = fopen(fileName, "rb"); if (NULL == file) { @@ -95,7 +104,7 @@ HGResult HGAPI HGImgFmt_LoadBmpImage(const HGChar* fileName, HGBmpLoadInfo* info { fclose(file); file = NULL; - return HGBASE_ERR_FAIL; + return HGBASE_ERR_FILEERROR; } uint8_t* buffer = (uint8_t*)malloc((size_t)size); @@ -103,7 +112,7 @@ HGResult HGAPI HGImgFmt_LoadBmpImage(const HGChar* fileName, HGBmpLoadInfo* info { fclose(file); file = NULL; - return HGBASE_ERR_FAIL; + return HGBASE_ERR_OUTOFMEMORY; } #if defined(HG_CMP_MSC) @@ -132,7 +141,7 @@ HGResult HGAPI HGImgFmt_LoadBmpImage(const HGChar* fileName, HGBmpLoadInfo* info buffer = NULL; fclose(file); file = NULL; - return HGBASE_ERR_FAIL; + return HGIMGFMT_ERR_FAIL; } if (NULL != info) @@ -154,7 +163,7 @@ HGResult HGAPI HGImgFmt_LoadBmpImage(const HGChar* fileName, HGBmpLoadInfo* info buffer = NULL; fclose(file); file = NULL; - return HGBASE_ERR_FAIL; + return HGIMGFMT_ERR_FAIL; } if (0 == imgType) @@ -307,7 +316,7 @@ HGResult HGAPI HGImgFmt_SaveBmpImage(HGImage image, const HGBmpSaveInfo* info, c { fclose(file); file = NULL; - return HGBASE_ERR_FAIL; + return HGBASE_ERR_OUTOFMEMORY; } uint8_t fh[14]; diff --git a/modules/imgfmt/HGGif.cpp b/modules/imgfmt/HGGif.cpp index df345484..6afdc816 100644 --- a/modules/imgfmt/HGGif.cpp +++ b/modules/imgfmt/HGGif.cpp @@ -418,18 +418,27 @@ HGResult HGAPI HGImgFmt_OpenGifReader(const HGChar* fileName, HGGifLoadInfo* inf return HGBASE_ERR_INVALIDARG; } +#if defined(HG_CMP_MSC) + if (0 != _access(fileName, 0)) +#else + if (0 != access(fileName, 0)) +#endif + { + return HGBASE_ERR_FILENOTEXIST; + } + int err; GifFileType* gifFile = DGifOpenFileName(fileName, &err); if (NULL == gifFile) { - return HGBASE_ERR_ACCESSDENIED; + return HGBASE_ERR_FILEERROR; } DGifSlurp(gifFile); if (gifFile->ImageCount <= 0) { DGifCloseFile(gifFile, &err); - return HGBASE_ERR_FAIL; + return HGBASE_ERR_FILEERROR; } uint8_t* screenBuffer = (uint8_t*)malloc(gifFile->SWidth * gifFile->SHeight); @@ -498,7 +507,7 @@ static HGResult LoadGifImage(HGGifReaderImpl* gifReaderImpl) GraphicsControlBlock gcb; if (DGifExtensionToGCB(ep->ByteCount, ep->Bytes, &gcb) == GIF_ERROR) { - return HGBASE_ERR_FAIL; + return HGIMGFMT_ERR_FAIL; } transColor = gcb.TransparentColor; @@ -533,7 +542,7 @@ static HGResult LoadGifImage(HGGifReaderImpl* gifReaderImpl) ColorMapObject* colorMap = (image->ImageDesc.ColorMap ? image->ImageDesc.ColorMap : gifReaderImpl->m_gifFile->SColorMap); if (colorMap == NULL) { - return HGBASE_ERR_FAIL; + return HGIMGFMT_ERR_FAIL; } for (int h = image->ImageDesc.Top; h < image->ImageDesc.Top + image->ImageDesc.Height; ++h) @@ -947,14 +956,14 @@ HGResult HGAPI HGImgFmt_SaveImageToGifWriter(HGGifWriter writer, HGUInt interval ColorMapObject* colorMap = GifMakeMapObject(mapSize, NULL); if (NULL == colorMap) { - return HGBASE_ERR_FAIL; + return HGIMGFMT_ERR_FAIL; } GifByteType* rasterBits = (GifPixelType*)malloc(sizeof(GifPixelType) * gifWidth * gifHeight); if (NULL == rasterBits) { GifFreeMapObject(colorMap); - return HGBASE_ERR_FAIL; + return HGIMGFMT_ERR_FAIL; } if (GifQuantizeBuffer(gifWidth, gifHeight, &mapSize, redBuffer, greenBuffer, blueBuffer, @@ -962,7 +971,7 @@ HGResult HGAPI HGImgFmt_SaveImageToGifWriter(HGGifWriter writer, HGUInt interval { free(rasterBits); GifFreeMapObject(colorMap); - return HGBASE_ERR_FAIL; + return HGIMGFMT_ERR_FAIL; } SavedImage* gifImage = GifMakeSavedImage(gifFile, NULL); @@ -970,7 +979,7 @@ HGResult HGAPI HGImgFmt_SaveImageToGifWriter(HGGifWriter writer, HGUInt interval { free(rasterBits); GifFreeMapObject(colorMap); - return HGBASE_ERR_FAIL; + return HGIMGFMT_ERR_FAIL; } gifImage->ImageDesc.Left = 0; diff --git a/modules/imgfmt/HGJpeg.cpp b/modules/imgfmt/HGJpeg.cpp index 256d0194..7acefd3f 100644 --- a/modules/imgfmt/HGJpeg.cpp +++ b/modules/imgfmt/HGJpeg.cpp @@ -63,6 +63,15 @@ HGResult HGAPI HGImgFmt_LoadJpegImage(const HGChar* fileName, HGJpegLoadInfo* in } } +#if defined(HG_CMP_MSC) + if (0 != _access(fileName, 0)) +#else + if (0 != access(fileName, 0)) +#endif + { + return HGBASE_ERR_FILENOTEXIST; + } + FILE* file = fopen(fileName, "rb"); if (NULL == file) { diff --git a/modules/imgfmt/HGOfdImpl.cpp b/modules/imgfmt/HGOfdImpl.cpp index b9716ce0..50494960 100644 --- a/modules/imgfmt/HGOfdImpl.cpp +++ b/modules/imgfmt/HGOfdImpl.cpp @@ -24,11 +24,20 @@ HGResult HGOfdReaderImpl::Open(const HGChar* fileName) return HGBASE_ERR_FAIL; } +#if defined(HG_CMP_MSC) + if (0 != _access(fileName, 0)) +#else + if (0 != access(fileName, 0)) +#endif + { + return HGBASE_ERR_FILENOTEXIST; + } + int error = 0; m_zip = zip_open(StdStringToUtf8(fileName).c_str(), 0, &error); if (NULL == m_zip) { - return HGBASE_ERR_FAIL; + return HGBASE_ERR_FILEERROR; } std::string content; diff --git a/modules/imgfmt/HGPdfImpl.cpp b/modules/imgfmt/HGPdfImpl.cpp index 3547281e..6a4e3c95 100644 --- a/modules/imgfmt/HGPdfImpl.cpp +++ b/modules/imgfmt/HGPdfImpl.cpp @@ -30,6 +30,15 @@ HGResult HGPdfReaderImpl::Open(const HGChar* fileName) return HGBASE_ERR_INVALIDARG; } +#if defined(HG_CMP_MSC) + if (0 != _access(fileName, 0)) +#else + if (0 != access(fileName, 0)) +#endif + { + return HGBASE_ERR_FILENOTEXIST; + } + HGBool isPdfFile = HGFALSE; FILE* file = fopen(fileName, "r"); if (NULL != file) @@ -43,10 +52,14 @@ HGResult HGPdfReaderImpl::Open(const HGChar* fileName) fclose(file); } + else + { + return HGBASE_ERR_ACCESSDENIED; + } if (!isPdfFile) { - return HGBASE_ERR_FAIL; + return HGBASE_ERR_FILEERROR; } assert(NULL == m_dll); diff --git a/modules/imgfmt/HGPng.cpp b/modules/imgfmt/HGPng.cpp index 6d071834..7d853cc7 100644 --- a/modules/imgfmt/HGPng.cpp +++ b/modules/imgfmt/HGPng.cpp @@ -49,6 +49,15 @@ HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info } } +#if defined(HG_CMP_MSC) + if (0 != _access(fileName, 0)) +#else + if (0 != access(fileName, 0)) +#endif + { + return HGBASE_ERR_FILENOTEXIST; + } + FILE* file = fopen(fileName, "rb"); if (NULL == file) { @@ -67,7 +76,7 @@ HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info { fclose(file); file = NULL; - return HGBASE_ERR_FAIL; + return HGBASE_ERR_FILEERROR; } png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); diff --git a/modules/imgfmt/HGPnm.cpp b/modules/imgfmt/HGPnm.cpp index 66236085..94b17dea 100644 --- a/modules/imgfmt/HGPnm.cpp +++ b/modules/imgfmt/HGPnm.cpp @@ -435,6 +435,15 @@ HGResult HGAPI HGImgFmt_LoadPnmImage(const HGChar* fileName, HGPnmLoadInfo* info } } +#if defined(HG_CMP_MSC) + if (0 != _access(fileName, 0)) +#else + if (0 != access(fileName, 0)) +#endif + { + return HGBASE_ERR_FILENOTEXIST; + } + FILE* file = fopen(fileName, "rb"); if (NULL == file) { @@ -445,7 +454,7 @@ HGResult HGAPI HGImgFmt_LoadPnmImage(const HGChar* fileName, HGPnmLoadInfo* info if (2 != fread(magicKey, 1, 2, file)) { fclose(file); - return HGBASE_ERR_INVALIDDATA; + return HGBASE_ERR_FILEERROR; } HGUInt pnmType = 0; @@ -477,7 +486,7 @@ HGResult HGAPI HGImgFmt_LoadPnmImage(const HGChar* fileName, HGPnmLoadInfo* info if (0 == pnmType) { fclose(file); - return HGBASE_ERR_INVALIDDATA; + return HGBASE_ERR_FILEERROR; } HGResult ret = PnmLoadImage(file, pnmType, info, imgType, imgOrigin, image); diff --git a/modules/imgfmt/HGTiff.cpp b/modules/imgfmt/HGTiff.cpp index efc1e58f..1d972f0d 100644 --- a/modules/imgfmt/HGTiff.cpp +++ b/modules/imgfmt/HGTiff.cpp @@ -28,10 +28,19 @@ HGResult HGAPI HGImgFmt_OpenTiffReader(const HGChar* fileName, HGTiffReader* rea return HGBASE_ERR_INVALIDARG; } +#if defined(HG_CMP_MSC) + if (0 != _access(fileName, 0)) +#else + if (0 != access(fileName, 0)) +#endif + { + return HGBASE_ERR_FILENOTEXIST; + } + TIFF* tif = TIFFOpen(fileName, "r"); if (NULL == tif) { - return HGBASE_ERR_ACCESSDENIED; + return HGBASE_ERR_FILEERROR; } *reader = (HGTiffReader)tif;