auf den ersten blick: if(size == 0xfffff)...
UINT16 geht von 0....65535, nicht bis 1048575.
hätte eigentlich dein compiler anmeckern sollen