From e1129b2c08c9a2b9974f97e22d2851dcf358bc28 Mon Sep 17 00:00:00 2001 From: Pierre-Marie de Rodat Date: Tue, 19 Sep 2017 15:51:55 +0200 Subject: Fix LF_ENUMERATE emission for values > 0x8000 --- src/cv2pdb.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cv2pdb.cpp b/src/cv2pdb.cpp index d84eeb2..b14a0d0 100644 --- a/src/cv2pdb.cpp +++ b/src/cv2pdb.cpp @@ -843,16 +843,20 @@ int CV2PDB::addFieldNestedType(codeview_fieldtype* dfieldtype, int type, const c int CV2PDB::addFieldEnumerate(codeview_fieldtype* dfieldtype, const char* name, int val) { + int len = 0; + BYTE *buffer = (BYTE*)dfieldtype; + dfieldtype->enumerate_v1.id = v3 ? LF_ENUMERATE_V3 : LF_ENUMERATE_V1; dfieldtype->enumerate_v1.attribute = 0; - //assert(val < LF_NUMERIC); - dfieldtype->enumerate_v1.value = val; - int len = cstrcpy_v(v3, (BYTE*)(&dfieldtype->enumerate_v1 + 1), name); - len += sizeof (dfieldtype->enumerate_v1); + len += 4; - unsigned char* p = (unsigned char*) dfieldtype; + // Append the enumerator value, and then its name + len += write_numeric_leaf(val, buffer + len); + len += cstrcpy_v(v3, buffer + len, name); + + // Add padding so that the next record is properly aligned for (; len & 3; len++) - p[len] = 0xf4 - (len & 3); + buffer[len] = 0xf4 - (len & 3); return len; } -- cgit v0.12