All pastes #112475 Raw Edit

KH unpack code

public cpp v1 · immutable
·published 2006-08-02 23:20 UTC
rendered paste body
int uncompressFile(unsigned char** pptr, int size){	unsigned char var1;	int var2;	int var3;	int var4;	int offset;	unsigned char* endPtr;	unsigned char* unpackPtr;	unsigned char* ptr = *pptr;	endPtr = ptr+size-1;	var1= *(endPtr--);	var2= *(endPtr--);	var3= *(endPtr--);	var4= *(endPtr--);	offset = var2 | (var3<<8) | (var4<<16);	if(ptr>=endPtr)		return(offset);	*pptr = ptr = (unsigned char*)realloc(ptr,offset);	unpackPtr = ptr + offset;	endPtr = ptr+size-5;	do	{		unsigned char v0;		v0 = *(endPtr);		if(v0 == var1) // equal compression key ?		{			unsigned char t1;			t1 = *(--endPtr);			if(!t1) // magic, but no compression (directly write magic)			{				if(unpackPtr-1 >= ptr)					*(--unpackPtr) = v0;			}			else // compressed			{				int size;				size = *(--endPtr) + 3;				if(size>0)				{					int i=0;					do					{						unsigned char v1;						unsigned char* v0;						--unpackPtr;						i++;						v0 = unpackPtr + t1; // read already unpacked data						v1 = *(v0);						if(unpackPtr >= ptr)							*(unpackPtr) = v1;					}while(i<size);				}			}		}		else		{			if(unpackPtr-1 >= ptr)				*(--unpackPtr) = v0;		}			}while(ptr<endPtr--);	return(offset);}