- contents_ptr = (char*)(ptr + sizeof(int));
- int contents_size = *(int*)ptr - sizeof(int);
- data_ptr = contents_ptr + contents_size;
-
- for(int i = 0; i < contents_size; )
- {
- used.append(0);
- contents.append(contents_ptr + i);
- while(contents_ptr[i] && i < contents_size)
- i++;
- if(i < contents_size)
- {
- i++;
- pointers.append((unsigned char*)data_ptr +
- *(unsigned int*)(contents_ptr + i));
- i += 4;
- }
- else
- {
- pointers.append((unsigned char*)data_ptr);
- break;
- }
+ int hdr_sz = *(int*)ptr - sizeof(int);
+ unsigned char *cp = ptr + sizeof(int);
+ unsigned char *dp = cp + hdr_sz;
+
+ while( cp < dp ) {
+ char *nm = (char *)cp;
+ while( cp < dp && *cp++ );
+ if( cp + sizeof(unsigned) > dp ) break;
+ unsigned ofs = 0;
+ for( int i=sizeof(unsigned); --i>=0; ofs|=cp[i] ) ofs <<= 8;
+ images.append(new image_item(nm, dp+ofs));
+ cp += sizeof(unsigned);