file_error emu_file::load__7zped_file() { assert(m_file == NULL); assert(m__7zdata.count() == 0); assert(m__7zfile != NULL); // allocate some memory m__7zdata.resize(m__7zlength); // read the data into our buffer and return _7z_error _7zerr = _7z_file_decompress(m__7zfile, m__7zdata, m__7zdata.count()); if (_7zerr != _7ZERR_NONE) { m__7zdata.reset(); return FILERR_FAILURE; } // convert to RAM file file_error filerr = core_fopen_ram(m__7zdata, m__7zdata.count(), m_openflags, &m_file); if (filerr != FILERR_NONE) { m__7zdata.reset(); return FILERR_FAILURE; } // close out the _7Z file _7z_file_close(m__7zfile); m__7zfile = NULL; return FILERR_NONE; }
file_error emu_file::load_zipped_file() { assert(m_file == NULL); assert(m_zipdata.count() == 0); assert(m_zipfile != NULL); // allocate some memory m_zipdata.resize(m_ziplength); // read the data into our buffer and return zip_error ziperr = zip_file_decompress(m_zipfile, m_zipdata, m_zipdata.count()); if (ziperr != ZIPERR_NONE) { m_zipdata.reset(); return FILERR_FAILURE; } // convert to RAM file file_error filerr = core_fopen_ram(m_zipdata, m_zipdata.count(), m_openflags, &m_file); if (filerr != FILERR_NONE) { m_zipdata.reset(); return FILERR_FAILURE; } // close out the ZIP file zip_file_close(m_zipfile); m_zipfile = NULL; return FILERR_NONE; }
file_error emu_file::load_zipped_file() { assert(m_file == NULL); assert(m_zipdata == NULL); assert(m_zipfile != NULL); // allocate some memory m_zipdata = global_alloc_array(UINT8, m_ziplength); // read the data into our buffer and return zip_error ziperr = zip_file_decompress(m_zipfile, m_zipdata, m_ziplength); if (ziperr != ZIPERR_NONE) { global_free(m_zipdata); m_zipdata = NULL; return FILERR_FAILURE; } // convert to RAM file file_error filerr = core_fopen_ram(m_zipdata, m_ziplength, m_openflags, &m_file); if (filerr != FILERR_NONE) { global_free(m_zipdata); m_zipdata = NULL; return FILERR_FAILURE; } // close out the ZIP file zip_file_close(m_zipfile); m_zipfile = NULL; return FILERR_NONE; }
file_error emu_file::load__7zped_file() { assert(m_file == NULL); assert(m__7zdata == NULL); assert(m__7zfile != NULL); // allocate some memory m__7zdata = global_alloc_array(UINT8, m__7zlength); // read the data into our buffer and return _7z_error _7zerr = _7z_file_decompress(m__7zfile, m__7zdata, m__7zlength); if (_7zerr != _7ZERR_NONE) { global_free(m__7zdata); m__7zdata = NULL; return FILERR_FAILURE; } // convert to RAM file file_error filerr = core_fopen_ram(m__7zdata, m__7zlength, m_openflags, &m_file); if (filerr != FILERR_NONE) { global_free(m__7zdata); m__7zdata = NULL; return FILERR_FAILURE; } // close out the _7Z file _7z_file_close(m__7zfile); m__7zfile = NULL; return FILERR_NONE; }
file_error emu_file::open_ram(const void *data, UINT32 length) { // set a fake filename and CRC m_filename = "RAM"; m_crc = 0; // use the core_file's built-in RAM support return core_fopen_ram(data, length, m_openflags, &m_file); }
static file_error OpenDIBFile(const char *dir_name, const char *zip_name, const char *filename, core_file **file, void **buffer) { file_error filerr; zip_error ziperr; zip_file *zip; const zip_file_header *zip_header; astring *fname; // clear out result *file = NULL; // look for the raw file fname = astring_assemble_3(astring_alloc(), dir_name, PATH_SEPARATOR, filename); filerr = core_fopen(astring_c(fname), OPEN_FLAG_READ, file); astring_free(fname); // did the raw file not exist? if (filerr != FILERR_NONE) { // look into zip file fname = astring_assemble_4(astring_alloc(), dir_name, PATH_SEPARATOR, zip_name, ".zip"); ziperr = zip_file_open(astring_c(fname), &zip); astring_free(fname); if (ziperr == ZIPERR_NONE) { zip_header = zip_file_seek_file(zip, filename); if (zip_header != NULL) { *buffer = malloc(zip_header->uncompressed_length); ziperr = zip_file_decompress(zip, *buffer, zip_header->uncompressed_length); if (ziperr == ZIPERR_NONE) { filerr = core_fopen_ram(*buffer, zip_header->uncompressed_length, OPEN_FLAG_READ, file); } } zip_file_close(zip); } } return filerr; }