int SDL_main(int argc, char *argv[]) { int vm; unsigned int size; uint8_t *data; char *srcfile = "profile3.dat"; if(!vmfile_search(srcfile, &vm)) vm = 1; FILE *fp; fp = fopen(srcfile, "rb"); if (!fp) { stat("failed to open!"); return 1; } fseek(fp, 0L, SEEK_END); size = ftell(fp); fseek(fp, 0L, SEEK_SET); data = (uint8_t*)malloc(size); if(!data) { fclose(fp); return 1; } memset(data, 0, size); fread(data, 1, size, fp); fclose(fp); save_to_vmu(vm, srcfile, (const char*)data, size); free(data); return 0; }
VMFILE *vm_fileopen(const char *fname, const char *mode) { VMFILE *ret; int size = 0; int cnt = 0; int vm = 0; int i; for (i=0; i<MAX_FILES; i++) if(fh[i].used == 0) break; if (i>=MAX_FILES) return NULL; fh[i].used = 1; memset(fh[i]._buffer, 0, MAX_SIZE); char *_buffer = fh[i]._buffer; if (!strncmp(mode, "rb", 2)) { if (!vmfile_search(fname, &vm)) { #ifndef NOSERIAL printf("Can't open %s", fname); #endif goto _exit; } if (!load_from_vmu(vm, fname, _buffer, &size)) { #ifndef NOSERIAL printf("load failed rb %s", fname); #endif goto _exit; } } else if (!strncmp(mode, "wb", 2)) { if (!vmfile_search(fname, &vm)) { #ifndef NOSERIAL printf("Create %s", fname); #endif } } else if (!strncmp(mode, "r+", 2)) { if (!vmfile_search(fname, &vm)) { #ifndef NOSERIAL printf("Can't open %s", fname); #endif goto _exit; } if (!load_from_vmu(vm, fname, _buffer, &size)) { goto _exit; } cnt = size; } else { #ifndef NOSERIAL fprintf(stderr,"vmu error"); #endif goto _exit; } ret = &fh[i]._iob; memset(ret->filename, 0, 32); strncpy(ret->filename, fname, 32); ret->_fd = i; ret->_base = _buffer; ret->_ptr = ret->_base; ret->_cnt = cnt; ret->_vm = vm; return ret; _exit: fh[i].used = 0; return NULL; }