1*4882a593Smuzhiyun #include "RKImage.h"
2*4882a593Smuzhiyun #include "MD5Checksum.h"
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun extern int IsRK3308_Platform();
5*4882a593Smuzhiyun extern int Compatible_rk3308bs_loader();
6*4882a593Smuzhiyun
GetVersion()7*4882a593Smuzhiyun DWORD CRKImage::GetVersion()
8*4882a593Smuzhiyun {
9*4882a593Smuzhiyun return m_version;
10*4882a593Smuzhiyun }
GetMergeVersion()11*4882a593Smuzhiyun DWORD CRKImage::GetMergeVersion()
12*4882a593Smuzhiyun {
13*4882a593Smuzhiyun return m_mergeVersion;
14*4882a593Smuzhiyun }
GetReleaseTime()15*4882a593Smuzhiyun STRUCT_RKTIME CRKImage::GetReleaseTime()
16*4882a593Smuzhiyun {
17*4882a593Smuzhiyun return m_releaseTime;
18*4882a593Smuzhiyun }
GetSupportDevice()19*4882a593Smuzhiyun ENUM_RKDEVICE_TYPE CRKImage::GetSupportDevice()
20*4882a593Smuzhiyun {
21*4882a593Smuzhiyun return m_supportDevice;
22*4882a593Smuzhiyun }
GetOsType()23*4882a593Smuzhiyun ENUM_OS_TYPE CRKImage::GetOsType()
24*4882a593Smuzhiyun {
25*4882a593Smuzhiyun UINT *pOsType;
26*4882a593Smuzhiyun pOsType = (UINT *)&m_reserved[4];
27*4882a593Smuzhiyun return (ENUM_OS_TYPE) * pOsType;
28*4882a593Smuzhiyun }
GetBackupSize()29*4882a593Smuzhiyun USHORT CRKImage::GetBackupSize()
30*4882a593Smuzhiyun {
31*4882a593Smuzhiyun USHORT *pBackupSize;
32*4882a593Smuzhiyun pBackupSize = (USHORT *)&m_reserved[12];
33*4882a593Smuzhiyun return *pBackupSize;
34*4882a593Smuzhiyun }
GetBootOffset()35*4882a593Smuzhiyun DWORD CRKImage::GetBootOffset()
36*4882a593Smuzhiyun {
37*4882a593Smuzhiyun return m_bootOffset;
38*4882a593Smuzhiyun }
GetBootSize()39*4882a593Smuzhiyun DWORD CRKImage::GetBootSize()
40*4882a593Smuzhiyun {
41*4882a593Smuzhiyun return m_bootSize;
42*4882a593Smuzhiyun }
GetFWOffset()43*4882a593Smuzhiyun DWORD CRKImage::GetFWOffset()
44*4882a593Smuzhiyun {
45*4882a593Smuzhiyun return m_fwOffset;
46*4882a593Smuzhiyun }
GetFWSize()47*4882a593Smuzhiyun long long CRKImage::GetFWSize()
48*4882a593Smuzhiyun {
49*4882a593Smuzhiyun return m_fwSize;
50*4882a593Smuzhiyun }
51*4882a593Smuzhiyun
GetFWFileHandle()52*4882a593Smuzhiyun FILE *CRKImage::GetFWFileHandle()
53*4882a593Smuzhiyun {
54*4882a593Smuzhiyun return m_pFile;
55*4882a593Smuzhiyun }
56*4882a593Smuzhiyun
GetFwPath()57*4882a593Smuzhiyun char *CRKImage::GetFwPath()
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun return m_imgPath;
60*4882a593Smuzhiyun }
61*4882a593Smuzhiyun
Md5Check(long long nCheckSize)62*4882a593Smuzhiyun bool CRKImage::Md5Check(long long nCheckSize)
63*4882a593Smuzhiyun {
64*4882a593Smuzhiyun printf("In Md5Check\n");
65*4882a593Smuzhiyun tstring strNewMd5 = _T("");
66*4882a593Smuzhiyun strNewMd5 = CMD5Checksum::GetMD5(m_pFile, nCheckSize);
67*4882a593Smuzhiyun if (strNewMd5.size() == 32)
68*4882a593Smuzhiyun {
69*4882a593Smuzhiyun BYTE newMd5[32];
70*4882a593Smuzhiyun memcpy(newMd5, strNewMd5.c_str(), 32);
71*4882a593Smuzhiyun int i, j;
72*4882a593Smuzhiyun printf("New Md5:\n");
73*4882a593Smuzhiyun for (i = 0; i < 2; i++)
74*4882a593Smuzhiyun {
75*4882a593Smuzhiyun for (j = 0; j < 16; j++)
76*4882a593Smuzhiyun {
77*4882a593Smuzhiyun printf("%02X ", newMd5[i * 16 + j]);
78*4882a593Smuzhiyun }
79*4882a593Smuzhiyun printf("\r\n");
80*4882a593Smuzhiyun }
81*4882a593Smuzhiyun printf("Old Md5:\n");
82*4882a593Smuzhiyun for (i = 0; i < 2; i++)
83*4882a593Smuzhiyun {
84*4882a593Smuzhiyun for (j = 0; j < 16; j++)
85*4882a593Smuzhiyun {
86*4882a593Smuzhiyun printf("%02X ", m_md5[i * 16 + j]);
87*4882a593Smuzhiyun }
88*4882a593Smuzhiyun printf("\r\n");
89*4882a593Smuzhiyun }
90*4882a593Smuzhiyun if (memcmp(newMd5, m_md5, 32) != 0)
91*4882a593Smuzhiyun {
92*4882a593Smuzhiyun return false;
93*4882a593Smuzhiyun }
94*4882a593Smuzhiyun else
95*4882a593Smuzhiyun {
96*4882a593Smuzhiyun return true;
97*4882a593Smuzhiyun }
98*4882a593Smuzhiyun }
99*4882a593Smuzhiyun else
100*4882a593Smuzhiyun {
101*4882a593Smuzhiyun return false;
102*4882a593Smuzhiyun }
103*4882a593Smuzhiyun }
104*4882a593Smuzhiyun
SaveBootFile(tstring filename)105*4882a593Smuzhiyun bool CRKImage::SaveBootFile(tstring filename)
106*4882a593Smuzhiyun {
107*4882a593Smuzhiyun FILE *file = NULL;
108*4882a593Smuzhiyun file = fopen(filename.c_str(), _T("wb+"));
109*4882a593Smuzhiyun if (!file)
110*4882a593Smuzhiyun {
111*4882a593Smuzhiyun return false;
112*4882a593Smuzhiyun }
113*4882a593Smuzhiyun BYTE buffer[1024];
114*4882a593Smuzhiyun DWORD dwBufferSize = 1024;
115*4882a593Smuzhiyun DWORD dwBootSize = m_bootSize;
116*4882a593Smuzhiyun DWORD dwReadSize;
117*4882a593Smuzhiyun fseek(m_pFile, m_bootOffset, SEEK_SET);
118*4882a593Smuzhiyun do
119*4882a593Smuzhiyun {
120*4882a593Smuzhiyun dwReadSize = (dwBootSize >= 1024) ? dwBufferSize : dwBootSize;
121*4882a593Smuzhiyun size_t ret = fread(buffer, 1, dwReadSize, m_pFile);
122*4882a593Smuzhiyun if (ret != dwReadSize)
123*4882a593Smuzhiyun {
124*4882a593Smuzhiyun printf("fread error: read:%d, req read:%d", ret, dwReadSize);
125*4882a593Smuzhiyun }
126*4882a593Smuzhiyun fwrite(buffer, 1, dwReadSize, file);
127*4882a593Smuzhiyun dwBootSize -= dwReadSize;
128*4882a593Smuzhiyun } while (dwBootSize > 0);
129*4882a593Smuzhiyun fclose(file);
130*4882a593Smuzhiyun return true;
131*4882a593Smuzhiyun }
132*4882a593Smuzhiyun
SaveFWFile(tstring filename)133*4882a593Smuzhiyun bool CRKImage::SaveFWFile(tstring filename)
134*4882a593Smuzhiyun {
135*4882a593Smuzhiyun FILE *file = NULL;
136*4882a593Smuzhiyun file = fopen(filename.c_str(), _T("wb+"));
137*4882a593Smuzhiyun if (!file)
138*4882a593Smuzhiyun {
139*4882a593Smuzhiyun return false;
140*4882a593Smuzhiyun }
141*4882a593Smuzhiyun BYTE buffer[1024];
142*4882a593Smuzhiyun DWORD dwBufferSize = 1024;
143*4882a593Smuzhiyun long long dwFWSize = m_fwSize;
144*4882a593Smuzhiyun DWORD dwReadSize;
145*4882a593Smuzhiyun fseeko(m_pFile, m_fwOffset, SEEK_SET);
146*4882a593Smuzhiyun do
147*4882a593Smuzhiyun {
148*4882a593Smuzhiyun dwReadSize = (dwFWSize >= 1024) ? dwBufferSize : dwFWSize;
149*4882a593Smuzhiyun size_t ret = fread(buffer, 1, dwReadSize, m_pFile);
150*4882a593Smuzhiyun if (ret != dwReadSize)
151*4882a593Smuzhiyun {
152*4882a593Smuzhiyun printf("fread error: read:%d, req read:%d", ret, dwReadSize);
153*4882a593Smuzhiyun }
154*4882a593Smuzhiyun
155*4882a593Smuzhiyun fwrite(buffer, 1, dwReadSize, file);
156*4882a593Smuzhiyun dwFWSize -= dwReadSize;
157*4882a593Smuzhiyun } while (dwFWSize > 0);
158*4882a593Smuzhiyun fclose(file);
159*4882a593Smuzhiyun return true;
160*4882a593Smuzhiyun }
161*4882a593Smuzhiyun
GetData(long long dwOffset,DWORD dwSize,PBYTE lpBuffer)162*4882a593Smuzhiyun bool CRKImage::GetData(long long dwOffset, DWORD dwSize, PBYTE lpBuffer)
163*4882a593Smuzhiyun {
164*4882a593Smuzhiyun if (dwOffset < 0 || dwSize == 0)
165*4882a593Smuzhiyun {
166*4882a593Smuzhiyun return false;
167*4882a593Smuzhiyun }
168*4882a593Smuzhiyun if (dwOffset + dwSize > m_fileSize)
169*4882a593Smuzhiyun {
170*4882a593Smuzhiyun return false;
171*4882a593Smuzhiyun }
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun fseeko64(m_pFile, dwOffset, SEEK_SET);
174*4882a593Smuzhiyun UINT uiActualRead;
175*4882a593Smuzhiyun uiActualRead = fread(lpBuffer, 1, dwSize, m_pFile);
176*4882a593Smuzhiyun if (dwSize != uiActualRead)
177*4882a593Smuzhiyun {
178*4882a593Smuzhiyun return false;
179*4882a593Smuzhiyun }
180*4882a593Smuzhiyun return true;
181*4882a593Smuzhiyun }
GetReservedData(PBYTE & lpData,USHORT & usSize)182*4882a593Smuzhiyun void CRKImage::GetReservedData(PBYTE &lpData, USHORT &usSize)
183*4882a593Smuzhiyun {
184*4882a593Smuzhiyun lpData = m_reserved;
185*4882a593Smuzhiyun usSize = IMAGE_RESERVED_SIZE;
186*4882a593Smuzhiyun }
GetMd5Data(PBYTE & lpMd5,PBYTE & lpSignMd5)187*4882a593Smuzhiyun int CRKImage::GetMd5Data(PBYTE &lpMd5, PBYTE &lpSignMd5)
188*4882a593Smuzhiyun {
189*4882a593Smuzhiyun lpMd5 = m_md5;
190*4882a593Smuzhiyun lpSignMd5 = m_signMd5;
191*4882a593Smuzhiyun return m_signMd5Size;
192*4882a593Smuzhiyun }
193*4882a593Smuzhiyun
CRKImage(tstring filename,bool & bCheck)194*4882a593Smuzhiyun CRKImage::CRKImage(tstring filename, bool &bCheck)
195*4882a593Smuzhiyun {
196*4882a593Smuzhiyun Version.setContainer(this);
197*4882a593Smuzhiyun Version.getter(&CRKImage::GetVersion);
198*4882a593Smuzhiyun MergeVersion.setContainer(this);
199*4882a593Smuzhiyun MergeVersion.getter(&CRKImage::GetMergeVersion);
200*4882a593Smuzhiyun ReleaseTime.setContainer(this);
201*4882a593Smuzhiyun ReleaseTime.getter(&CRKImage::GetReleaseTime);
202*4882a593Smuzhiyun SupportDevice.setContainer(this);
203*4882a593Smuzhiyun SupportDevice.getter(&CRKImage::GetSupportDevice);
204*4882a593Smuzhiyun OsType.setContainer(this);
205*4882a593Smuzhiyun OsType.getter(&CRKImage::GetOsType);
206*4882a593Smuzhiyun BackupSize.setContainer(this);
207*4882a593Smuzhiyun BackupSize.getter(&CRKImage::GetBackupSize);
208*4882a593Smuzhiyun BootOffset.setContainer(this);
209*4882a593Smuzhiyun BootOffset.getter(&CRKImage::GetBootOffset);
210*4882a593Smuzhiyun BootSize.setContainer(this);
211*4882a593Smuzhiyun BootSize.getter(&CRKImage::GetBootSize);
212*4882a593Smuzhiyun FWOffset.setContainer(this);
213*4882a593Smuzhiyun FWOffset.getter(&CRKImage::GetFWOffset);
214*4882a593Smuzhiyun FWSize.setContainer(this);
215*4882a593Smuzhiyun FWSize.getter(&CRKImage::GetFWSize);
216*4882a593Smuzhiyun FwPath.setContainer(this);
217*4882a593Smuzhiyun FwPath.getter(&CRKImage::GetFwPath);
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun bool bDoMdb5Check = bCheck;
220*4882a593Smuzhiyun struct stat64 statBuf;
221*4882a593Smuzhiyun m_bootObject = NULL;
222*4882a593Smuzhiyun m_pFile = NULL;
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun m_signMd5Size = 0;
225*4882a593Smuzhiyun memset(m_md5, 0, 32);
226*4882a593Smuzhiyun memset(m_signMd5, 0, 256);
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun tchar szName[256];
229*4882a593Smuzhiyun _tcscpy(szName, filename.c_str());
230*4882a593Smuzhiyun if (stat64(szName, &statBuf) < 0)
231*4882a593Smuzhiyun {
232*4882a593Smuzhiyun bCheck = false;
233*4882a593Smuzhiyun printf("CRKImage : stat <%s> happen error.error_reason = %s\n", szName, strerror(errno));
234*4882a593Smuzhiyun return;
235*4882a593Smuzhiyun }
236*4882a593Smuzhiyun if (S_ISDIR(statBuf.st_mode))
237*4882a593Smuzhiyun {
238*4882a593Smuzhiyun bCheck = false;
239*4882a593Smuzhiyun printf("CRKImage : Error! stat mode is DIR\n");
240*4882a593Smuzhiyun return;
241*4882a593Smuzhiyun }
242*4882a593Smuzhiyun m_fileSize = statBuf.st_size;
243*4882a593Smuzhiyun memcpy(m_imgPath, szName, sizeof(szName));
244*4882a593Smuzhiyun
245*4882a593Smuzhiyun bool bOnlyBootFile = false;
246*4882a593Smuzhiyun transform(filename.begin(), filename.end(), filename.begin(), (int(*)(int))tolower);
247*4882a593Smuzhiyun if (filename.find(_T(".bin")) != tstring::npos)
248*4882a593Smuzhiyun {
249*4882a593Smuzhiyun bOnlyBootFile = true;
250*4882a593Smuzhiyun }
251*4882a593Smuzhiyun
252*4882a593Smuzhiyun m_pFile = fopen(szName, "rb");
253*4882a593Smuzhiyun if (!m_pFile)
254*4882a593Smuzhiyun {
255*4882a593Smuzhiyun bCheck = false;
256*4882a593Smuzhiyun printf("CRKImage : fopen <%s> fail,will try use fopen64 \n", szName);
257*4882a593Smuzhiyun
258*4882a593Smuzhiyun m_pFile = fopen64(szName, "rb");
259*4882a593Smuzhiyun if (!m_pFile)
260*4882a593Smuzhiyun {
261*4882a593Smuzhiyun bCheck = false;
262*4882a593Smuzhiyun printf("CRKImage : fopen64 <%s> fail\n", szName);
263*4882a593Smuzhiyun return;
264*4882a593Smuzhiyun }
265*4882a593Smuzhiyun }
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun //code will be error if firmware is signed.md5 is not last 32 byte.
268*4882a593Smuzhiyun // fseeko(m_pFile,-32,SEEK_END);
269*4882a593Smuzhiyun // fread(m_md5,1,32,m_pFile);
270*4882a593Smuzhiyun // fseeko(m_pFile,0,SEEK_SET);
271*4882a593Smuzhiyun // if (!Md5Check())
272*4882a593Smuzhiyun // {
273*4882a593Smuzhiyun // bCheck = false;
274*4882a593Smuzhiyun // return;
275*4882a593Smuzhiyun // }
276*4882a593Smuzhiyun
277*4882a593Smuzhiyun int nMd5DataSize;
278*4882a593Smuzhiyun long long ulFwSize;
279*4882a593Smuzhiyun STRUCT_RKIMAGE_HEAD imageHead;
280*4882a593Smuzhiyun if (!bOnlyBootFile)
281*4882a593Smuzhiyun {
282*4882a593Smuzhiyun fseeko64(m_pFile, 0, SEEK_SET);
283*4882a593Smuzhiyun size_t ret = fread((PBYTE)(&imageHead), 1, sizeof(STRUCT_RKIMAGE_HEAD), m_pFile);
284*4882a593Smuzhiyun if (ret != sizeof(STRUCT_RKIMAGE_HEAD))
285*4882a593Smuzhiyun {
286*4882a593Smuzhiyun return;
287*4882a593Smuzhiyun }
288*4882a593Smuzhiyun
289*4882a593Smuzhiyun if (imageHead.uiTag != 0x57464B52)
290*4882a593Smuzhiyun {
291*4882a593Smuzhiyun bCheck = false;
292*4882a593Smuzhiyun printf("CRKImage :Error! imageHead.uiTag != 0x57464B52\n");
293*4882a593Smuzhiyun return;
294*4882a593Smuzhiyun }
295*4882a593Smuzhiyun if ((imageHead.reserved[14] == 'H') && (imageHead.reserved[15] == 'I'))
296*4882a593Smuzhiyun {
297*4882a593Smuzhiyun ulFwSize = *((DWORD *)(&imageHead.reserved[16]));
298*4882a593Smuzhiyun ulFwSize <<= 32;
299*4882a593Smuzhiyun ulFwSize += imageHead.dwFWOffset;
300*4882a593Smuzhiyun ulFwSize += imageHead.dwFWSize;
301*4882a593Smuzhiyun }
302*4882a593Smuzhiyun else
303*4882a593Smuzhiyun {
304*4882a593Smuzhiyun ulFwSize = imageHead.dwFWOffset + imageHead.dwFWSize;
305*4882a593Smuzhiyun }
306*4882a593Smuzhiyun nMd5DataSize = GetImageSize() - ulFwSize;
307*4882a593Smuzhiyun if (nMd5DataSize >= 160)
308*4882a593Smuzhiyun {
309*4882a593Smuzhiyun //sign image
310*4882a593Smuzhiyun m_bSignFlag = true;
311*4882a593Smuzhiyun m_signMd5Size = nMd5DataSize - 32;
312*4882a593Smuzhiyun fseeko64(m_pFile, ulFwSize, SEEK_SET);
313*4882a593Smuzhiyun size_t ret = fread(m_md5, 1, 32, m_pFile);
314*4882a593Smuzhiyun if (ret != 32)
315*4882a593Smuzhiyun {
316*4882a593Smuzhiyun printf("%s:read error\n", __func__);
317*4882a593Smuzhiyun }
318*4882a593Smuzhiyun ret = fread(m_signMd5, 1, nMd5DataSize - 32, m_pFile);
319*4882a593Smuzhiyun if (ret != nMd5DataSize - 32)
320*4882a593Smuzhiyun {
321*4882a593Smuzhiyun printf("%s :ret = %d\n", __func__, ret);
322*4882a593Smuzhiyun }
323*4882a593Smuzhiyun }
324*4882a593Smuzhiyun else
325*4882a593Smuzhiyun {
326*4882a593Smuzhiyun fseeko64(m_pFile, -32, SEEK_END);
327*4882a593Smuzhiyun size_t read = fread(m_md5, 1, 32, m_pFile);
328*4882a593Smuzhiyun if (read != 32)
329*4882a593Smuzhiyun {
330*4882a593Smuzhiyun printf("%s: read error\n", __func__);
331*4882a593Smuzhiyun }
332*4882a593Smuzhiyun }
333*4882a593Smuzhiyun if (bDoMdb5Check)
334*4882a593Smuzhiyun {
335*4882a593Smuzhiyun if (!Md5Check(ulFwSize))
336*4882a593Smuzhiyun {
337*4882a593Smuzhiyun printf("Md5Check update.img ulFwSize:%ld", ulFwSize);
338*4882a593Smuzhiyun //bCheck = false;
339*4882a593Smuzhiyun //return;
340*4882a593Smuzhiyun bCheck = true;
341*4882a593Smuzhiyun }
342*4882a593Smuzhiyun }
343*4882a593Smuzhiyun
344*4882a593Smuzhiyun m_version = imageHead.dwVersion;
345*4882a593Smuzhiyun m_mergeVersion = imageHead.dwMergeVersion;
346*4882a593Smuzhiyun m_releaseTime.usYear = imageHead.stReleaseTime.usYear;
347*4882a593Smuzhiyun m_releaseTime.ucMonth = imageHead.stReleaseTime.ucMonth;
348*4882a593Smuzhiyun m_releaseTime.ucDay = imageHead.stReleaseTime.ucDay;
349*4882a593Smuzhiyun m_releaseTime.ucHour = imageHead.stReleaseTime.ucHour;
350*4882a593Smuzhiyun m_releaseTime.ucMinute = imageHead.stReleaseTime.ucMinute;
351*4882a593Smuzhiyun m_releaseTime.ucSecond = imageHead.stReleaseTime.ucSecond;
352*4882a593Smuzhiyun m_supportDevice = imageHead.emSupportChip;
353*4882a593Smuzhiyun m_bootOffset = imageHead.dwBootOffset;
354*4882a593Smuzhiyun m_bootSize = imageHead.dwBootSize;
355*4882a593Smuzhiyun m_fwOffset = imageHead.dwFWOffset;
356*4882a593Smuzhiyun m_fwSize = ulFwSize - m_fwOffset;
357*4882a593Smuzhiyun
358*4882a593Smuzhiyun memcpy(m_reserved, imageHead.reserved, IMAGE_RESERVED_SIZE);
359*4882a593Smuzhiyun }
360*4882a593Smuzhiyun else
361*4882a593Smuzhiyun {
362*4882a593Smuzhiyun m_bootOffset = 0;
363*4882a593Smuzhiyun m_bootSize = m_fileSize;
364*4882a593Smuzhiyun }
365*4882a593Smuzhiyun
366*4882a593Smuzhiyun PBYTE lpBoot;
367*4882a593Smuzhiyun lpBoot = new BYTE[m_bootSize];
368*4882a593Smuzhiyun fseeko64(m_pFile, m_bootOffset, SEEK_SET);
369*4882a593Smuzhiyun size_t ret = fread(lpBoot, 1, m_bootSize, m_pFile);
370*4882a593Smuzhiyun if (ret != m_bootSize)
371*4882a593Smuzhiyun {
372*4882a593Smuzhiyun printf("%s : read error\n", __func__);
373*4882a593Smuzhiyun }
374*4882a593Smuzhiyun bool bRet;
375*4882a593Smuzhiyun m_bootObject = new CRKBoot(lpBoot, m_bootSize, bRet);
376*4882a593Smuzhiyun if (!bRet)
377*4882a593Smuzhiyun {
378*4882a593Smuzhiyun bCheck = false;
379*4882a593Smuzhiyun printf("CRKImage :Error! new CRKBoot fail!\n");
380*4882a593Smuzhiyun return;
381*4882a593Smuzhiyun }
382*4882a593Smuzhiyun if (bOnlyBootFile)
383*4882a593Smuzhiyun {
384*4882a593Smuzhiyun m_supportDevice = m_bootObject->SupportDevice;
385*4882a593Smuzhiyun UINT *pOsType;
386*4882a593Smuzhiyun pOsType = (UINT *)&m_reserved[4];
387*4882a593Smuzhiyun *pOsType = (UINT)RK_OS;
388*4882a593Smuzhiyun fclose(m_pFile);
389*4882a593Smuzhiyun m_pFile = NULL;
390*4882a593Smuzhiyun }
391*4882a593Smuzhiyun bCheck = true;
392*4882a593Smuzhiyun }
~CRKImage()393*4882a593Smuzhiyun CRKImage::~CRKImage()
394*4882a593Smuzhiyun {
395*4882a593Smuzhiyun if (m_pFile)
396*4882a593Smuzhiyun {
397*4882a593Smuzhiyun fclose(m_pFile);
398*4882a593Smuzhiyun m_pFile = NULL;
399*4882a593Smuzhiyun }
400*4882a593Smuzhiyun if (m_bootObject)
401*4882a593Smuzhiyun {
402*4882a593Smuzhiyun delete m_bootObject;
403*4882a593Smuzhiyun m_bootObject = NULL;
404*4882a593Smuzhiyun }
405*4882a593Smuzhiyun }
406*4882a593Smuzhiyun
GetImageSize()407*4882a593Smuzhiyun long long CRKImage::GetImageSize()
408*4882a593Smuzhiyun {
409*4882a593Smuzhiyun return m_fileSize;
410*4882a593Smuzhiyun }
411