static int IsImage(char *name) { int magic; int byteSwapped(int); sqImageFile fp; fp = sqImageFileOpen(name,"rb"); if(!fp) return 0; /* not an image */ if(sqImageFileRead(&magic, 1, sizeof(magic), fp) != sizeof(magic)) { sqImageFileClose(fp); return 0; } if(readableFormat(magic) || readableFormat(byteSwapped(magic))) { sqImageFileClose(fp); return true; } /* no luck at beginning of file, seek to 512 and try again */ sqImageFileSeek( fp, 512); if(sqImageFileRead(&magic, 1, sizeof(magic), fp) != sizeof(magic)) { sqImageFileClose(fp); return 0; } sqImageFileClose(fp); return readableFormat(magic) || readableFormat(byteSwapped(magic)); }
int Java_org_squeak_android_SqueakVM_loadImageHeap(JNIEnv *env, jobject self, jstring imageName, int heapSize) { if(longAt(sqMemory) < 0xFFFF) { sqHeaderSize = longAt(sqMemory+4); } else { sqHeaderSize = byteSwapped(longAt(sqMemory+4)); } initTimer(); aioInit(); dprintf(4, "loadImageHeap: headerSize = %d\n", sqHeaderSize); readImageFromFileHeapSizeStartingAt(0, heapSize-sqHeaderSize, 0); prepareActiveProcess(); return 0; }