Forward declare XFA_MAPDATABLOCKCALLBACKINFO in cjx_object.h -- Move more code to the corresponding .cpp file -- Remove some typedefs -- Introduce XFA_MAPDATABLOCKSIZE() macro for consistency -- Make iBytes member be a size_t Change-Id: I21a5eaa154b998633c2d6fa7e0c8ee24a1e0d0bc Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/74610 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp index 6662804..f2f6636 100644 --- a/fxjs/xfa/cjx_object.cpp +++ b/fxjs/xfa/cjx_object.cpp
@@ -55,9 +55,6 @@ pData = new WideString(*reinterpret_cast<WideString*>(pData)); } -const XFA_MAPDATABLOCKCALLBACKINFO deleteWideStringCallBack = { - XFA_DeleteWideString, XFA_CopyWideString}; - enum XFA_KEYTYPE { XFA_KEYTYPE_Custom, XFA_KEYTYPE_Element, @@ -107,11 +104,19 @@ } // namespace +struct XFA_MAPDATABLOCKCALLBACKINFO { + void (*pFree)(void* pData); + void (*pCopy)(void*& pData); +}; + struct XFA_MAPDATABLOCK { + static size_t SizeForCapacity(size_t capacity) { + return sizeof(XFA_MAPDATABLOCK) + capacity; + } uint8_t* GetData() const { return (uint8_t*)this + sizeof(XFA_MAPDATABLOCK); } const XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo; - int32_t iBytes; + size_t iBytes; }; struct XFA_MAPMODULEDATA { @@ -122,6 +127,9 @@ std::map<void*, XFA_MAPDATABLOCK*> m_BufferMap; }; +const XFA_MAPDATABLOCKCALLBACKINFO deleteWideStringCallBack = { + XFA_DeleteWideString, XFA_CopyWideString}; + CJX_Object::CJX_Object(CXFA_Object* obj) : object_(obj) {} CJX_Object::~CJX_Object() { @@ -878,18 +886,18 @@ void CJX_Object::SetMapModuleBuffer( void* pKey, void* pValue, - int32_t iBytes, + size_t iBytes, const XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) { XFA_MAPDATABLOCK*& pBuffer = CreateMapModuleData()->m_BufferMap[pKey]; if (!pBuffer) { pBuffer = reinterpret_cast<XFA_MAPDATABLOCK*>( - FX_Alloc(uint8_t, sizeof(XFA_MAPDATABLOCK) + iBytes)); + FX_Alloc(uint8_t, XFA_MAPDATABLOCK::SizeForCapacity(iBytes))); } else if (pBuffer->iBytes != iBytes) { if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); - pBuffer = reinterpret_cast<XFA_MAPDATABLOCK*>( - FX_Realloc(uint8_t, pBuffer, sizeof(XFA_MAPDATABLOCK) + iBytes)); + pBuffer = reinterpret_cast<XFA_MAPDATABLOCK*>(FX_Realloc( + uint8_t, pBuffer, XFA_MAPDATABLOCK::SizeForCapacity(iBytes))); } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { pBuffer->pCallbackInfo->pFree( *reinterpret_cast<void**>(pBuffer->GetData())); @@ -1000,13 +1008,14 @@ } if (!pDstBuffer) { pDstBuffer = (XFA_MAPDATABLOCK*)FX_Alloc( - uint8_t, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes); + uint8_t, XFA_MAPDATABLOCK::SizeForCapacity(pSrcBuffer->iBytes)); } else if (pDstBuffer->iBytes != pSrcBuffer->iBytes) { if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pFree) { pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData()); } pDstBuffer = (XFA_MAPDATABLOCK*)FX_Realloc( - uint8_t, pDstBuffer, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes); + uint8_t, pDstBuffer, + XFA_MAPDATABLOCK::SizeForCapacity(pSrcBuffer->iBytes)); } else if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pFree) { pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData()); }
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h index 7672926..c2fc217 100644 --- a/fxjs/xfa/cjx_object.h +++ b/fxjs/xfa/cjx_object.h
@@ -31,6 +31,7 @@ class CXFA_LayoutItem; class CXFA_Node; class CXFA_Object; +struct XFA_MAPDATABLOCKCALLBACKINFO; struct XFA_MAPMODULEDATA; typedef CJS_Result (*CJX_MethodCall)( @@ -43,14 +44,6 @@ CJX_MethodCall pMethodCall; }; -typedef void (*PD_CALLBACK_FREEDATA)(void* pData); -typedef void (*PD_CALLBACK_DUPLICATEDATA)(void*& pData); - -struct XFA_MAPDATABLOCKCALLBACKINFO { - PD_CALLBACK_FREEDATA pFree; - PD_CALLBACK_DUPLICATEDATA pCopy; -}; - enum XFA_SOM_MESSAGETYPE { XFA_SOM_ValidationMessage, XFA_SOM_FormatMessage, @@ -272,7 +265,7 @@ Optional<WideString> GetMapModuleString(void* pKey) const; void SetMapModuleBuffer(void* pKey, void* pValue, - int32_t iBytes, + size_t iBytes, const XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo); bool GetMapModuleBuffer(void* pKey, void** pValue, int32_t* pBytes) const; bool HasMapModuleKey(void* pKey);