Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save dougpuob/56c97ef0e89baf89ce409585705fafdb to your computer and use it in GitHub Desktop.
Save dougpuob/56c97ef0e89baf89ce409585705fafdb to your computer and use it in GitHub Desktop.
[CodeReview] _ZipZipMgr_CalcLocalFileEntrySize()
// -------------------------------------------------------------------------------------------
// Original
// -------------------------------------------------------------------------------------------
static
size_t
_ZipZipMgr_CalcLocalFileEntrySize(
IN ZIPMGR_MODULE* pThis,
IN ZIPMGR_LOCAL_FILE_ENTRY* pLocalFileEntry
)
{
bool bStatus = true;
ZIPMGR_OBJECT* pZipMgrObject = (ZIPMGR_OBJECT*)pThis;
PKZIP_LOCAL_FILE_HEADER* pLocalFileHdr = NULL;
size_t nLocalFileEntrySize = 0;
TRACEP_ENTRY();
if (IS_NULL(pThis) || IS_NULL(pLocalFileEntry))
{
bStatus = false;
TRACEP_STATUS_ALERT(false, ERRENUM_FUNCTION_NULL_PARAMETER);
TRACEP_LEAVE_STATUS(false);
return 0;
}
pLocalFileHdr = &pLocalFileEntry->LocalFileHdr;
nLocalFileEntrySize = pZipMgrObject->CalcLocalFileHdrSize(pThis, pLocalFileHdr) +
pLocalFileHdr->u32CompressedSize;
if (true == pLocalFileHdr->GeneralPurposeBitFlag.Bits.DataDescriptor)
{
nLocalFileEntrySize += sizeof(pLocalFileEntry->DataDescriptor);
}
TRACEP_LEAVE_STATUS(bStatus);
return nLocalFileEntrySize;
}
// -------------------------------------------------------------------------------------------
// Refactored
// -------------------------------------------------------------------------------------------
static
size_t
_ZipZipMgr_CalcLocalFileEntrySize(
IN ZIPMGR_MODULE* pThis,
IN ZIPMGR_LOCAL_FILE_ENTRY* pLocalFileEntry
)
{
ZIPMGR_OBJECT* pObject = (ZIPMGR_OBJECT*)pThis;
size_t nLocalFileEntrySize = 0;
TRACEP_ENTRY();
if (IS_NULL(pThis) || IS_NULL(pLocalFileEntry))
{
TRACEP_STATUS_ALERT(false, ERRENUM_FUNCTION_NULL_PARAMETER);
TRACEP_LEAVE_STATUS(false);
TRACEP_LEAVE_STATUS(false);
return 0;
}
else
{
PKZIP_LOCAL_FILE_HEADER* pHeader = &pLocalFileEntry->LocalFileHdr;
size_t nLocalFileEntrySize = pObject->CalcLocalFileHdrSize(pThis, pHeader) +
pHeader->u32CompressedSize;
if (true == pHeader->GeneralPurposeBitFlag.Bits.DataDescriptor) {
nLocalFileEntrySize += sizeof(pLocalFileEntry->DataDescriptor);
}
TRACEP_LEAVE_STATUS(true);
return nLocalFileEntrySize;
}
}
/*
1.直接在if或else裡return:
這基本上是缺點,但因此能將幾個變數的存活的範圍。
2.將變數名稱`pZipMgrObject`改為`pObject`:
因為Object這類的變數名稱是唯一的,這樣命名會更清楚。
3.將變數名稱`pLocalFileHdr`改為`pHeader`:
因為Header這類的變數名稱是唯一的,這樣命名會更清楚。
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment