1 // xmillinspect.cpp : XMI file inspector infrastructure
2 //
3 
4 #include "stdafx.h"
5 
6 /* (de)contrustors */
XMIInspect(int l)7 XMIInspect::XMIInspect(int l)
8 {
9 	level = l;
10 
11 	statesize = NULL;
12  	numcontainers = NULL;
13 	pathindex = NULL;
14 	containersize = NULL;
15 	index = NULL;
16 	labels = NULL;
17 	exprs = NULL;
18 	exprinfo = NULL;
19 	numcontdata = NULL;
20 	numrealcontdata = NULL;
21 #if 0
22 	dictionarysizes = NULL;
23 #endif
24 
25 	numlabels = 0;
26 	numexprs = 0;
27 
28 	reset();
29 
30 	buffer = NULL;
31 	realloc = true;
32 	newBuffer(BUFLEN);
33 }
34 
~XMIInspect()35 XMIInspect::~XMIInspect()
36 {
37 	reset();
38 	trydela(buffer);
39 }
40 
41 /* helpers */
newBuffer(long size)42 void XMIInspect::newBuffer(long size)
43 {
44 	len = buflen = size;
45 	if (realloc) {
46 		trydela(buffer);
47 		buffer = new unsigned char[buflen+1];
48 		realloc = false;
49 	}
50 }
51 
reset()52 void XMIInspect::reset()
53 {
54 	state = XMIINS_READ_HEADER;
55 
56 	gpc = NULL;
57 
58 	trydela (index);
59 	trydela (statesize);
60 	trydela (numcontainers);
61 	trydela (containersize);
62 	trydela (pathindex);
63 	trydela (numcontdata);
64 	trydela (numrealcontdata);
65 #if 0
66 	trydela (dictionarysizes);
67 #endif
68 
69 	if (labels) {
70 		for (int i=0; i<numlabels; i++) {
71 			delete[] labels[i];
72 		}
73 	}
74 	trydela (labels);
75 
76 	if (exprs && exprinfo) {
77 		for (int i=0; i<numexprs; i++) {
78 			delete[] exprs[i];
79 			delete exprinfo[i];
80 		}
81 	}
82 	trydela (exprinfo);
83 
84 	curptr = NULL;
85 
86 	numopen = 0;
87 	numclose = 0;
88 	numdata = 0;
89 	numspecial = 0;
90 	numwhite = 0;
91 
92 	numlabels = 0;
93 	numexprs = 0;
94 	numbuffers = 0;
95 	expectedcontainers = 0;
96 	foundcontainers = 0;
97 	compsize = 0;
98 	totalcompsize = 0;
99 	totaluncompsize = 0;
100 	totalrunsize = 0;
101 	runsize = 0;
102 	headersize = 0;
103 	totalheadersize = 0;
104 	numheaders = 0;
105 	totaldatasize = 0;
106 	globalsfound = 0;
107 	numlargeglobals = 0;
108 	globaldatasize = 0;
109 
110 	len = buflen;
111 }
112 
113