summaryrefslogtreecommitdiffstats
path: root/src/cv2pdb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cv2pdb.cpp')
-rw-r--r--src/cv2pdb.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/cv2pdb.cpp b/src/cv2pdb.cpp
index 1ac48bd..95749bc 100644
--- a/src/cv2pdb.cpp
+++ b/src/cv2pdb.cpp
@@ -49,6 +49,7 @@ CV2PDB::CV2PDB(PEImage& image)
thisIsNotRef = true;
v3 = true;
countEntries = img.countCVEntries();
+ build_cfi_index();
}
CV2PDB::~CV2PDB()
@@ -842,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;
}
@@ -1855,8 +1860,8 @@ int CV2PDB::appendModifierType(int type, int attr)
dtype->modifier_v2.type = translateType(type);
dtype->modifier_v2.attribute = attr;
int len = sizeof(dtype->modifier_v2);
- //for (; len & 3; len++)
- // userTypes[cbUserTypes + len] = 0xf4 - (len & 3);
+ for (; len & 3; len++)
+ userTypes[cbUserTypes + len] = 0xf4 - (len & 3);
dtype->modifier_v2.len = len - 2;
cbUserTypes += len;