static int load_or_open_zip_iterate(unsigned action) { char msg[PATH_MAX_LENGTH]; menu_handle_t *menu = menu_driver_get_ptr(); if (!menu) return -1; snprintf(msg, sizeof(msg), "Opening compressed file\n" " \n" " - OK to open as Folder\n" " - Cancel/Back to Load \n"); menu_driver_render_messagebox(msg); switch (action) { case MENU_ACTION_OK: archive_open(); break; case MENU_ACTION_CANCEL: archive_load(); break; } return 0; }
static VALUE rb_libarchive_writer_s_open0(int (*archive_open)(struct rb_libarchive_archive_container *, void *), void *arg, int compression, int format, const char *cmd) { VALUE writer; struct rb_libarchive_archive_container *p; int r; writer = rb_funcall(rb_cArchiveWriter, rb_intern("new"), 0); Data_Get_Struct(writer, struct rb_libarchive_archive_container, p); if ((p->ar = archive_write_new()) == NULL) { rb_raise(rb_eArchiveError, "Open writer failed: %s", strerror(errno)); } if (cmd != NULL) { r = archive_write_set_compression_program(p->ar, cmd); } else { r = archive_write_set_compression(p->ar, compression); } if (r != ARCHIVE_OK) { char error_string[BUFSIZ]; archive_copy_error_string(p->ar, error_string, BUFSIZ); rb_libarchive_writer_close0(p); rb_raise(rb_eArchiveError, "Set compression failed: %s", error_string); } if (archive_write_set_format(p->ar, format) != ARCHIVE_OK) { char error_string[BUFSIZ]; archive_copy_error_string(p->ar, error_string, BUFSIZ); rb_libarchive_writer_close0(p); rb_raise(rb_eArchiveError, "Set format failed: %s", error_string); } if (archive_open(p, arg) != ARCHIVE_OK) { char error_string[BUFSIZ]; archive_copy_error_string(p->ar, error_string, BUFSIZ); rb_libarchive_writer_close0(p); rb_raise(rb_eArchiveError, "Open writer failed: %s", error_string); } if (rb_block_given_p()) { VALUE retval; int status; retval = rb_protect(rb_yield, writer, &status); rb_libarchive_writer_close0(p); if (status != 0) { rb_jump_tag(status); } return retval; } else { return writer; } }
static int action_iterate_load_open_zip(const char *label, unsigned action) { settings_t *settings = config_get_ptr(); switch (settings->archive.mode) { case 0: return load_or_open_zip_iterate(action); case 1: return archive_load(); case 2: return archive_open(); default: break; } return 0; }
static int load_or_open_zip_iterate(char *s, size_t len, unsigned action) { snprintf(s, len, "Opening compressed file\n" " \n" " - OK to open as Folder\n" " - Cancel/Back to Load \n"); menu_driver_render_messagebox(s); switch (action) { case MENU_ACTION_OK: archive_open(); break; case MENU_ACTION_CANCEL: archive_load(); break; } return 0; }
bool CFileListView::OpenArchive( const char* pFileName ) { CloseArchive(); m_pArchive = archive_open(pFileName,0); if(m_pArchive == NULL) { ErrotTip(); return false; } if(m_pParent != NULL) { char szTitle[MAX_PATH]; sprintf_s(szTitle, MAX_PATH, "JArchiveEditor - %s",pFileName); m_pParent->SetWindowText(szTitle); strcpy_s(m_szArchiveName, MAX_PATH, pFileName); } RefreshFileList(); ShowFileList(NULL); return true; }
int split_rom_load(struct emu *emu, const char *filename, struct rom **romptr) { struct archive *archive; uint8_t *buffer; size_t size; struct rom_info *rom_info; struct rom *rom; int *chip_list; int i; if (!romptr) return -1; chip_list = NULL; *romptr = NULL; if (archive_open(&archive, filename)) return -1; chip_list = malloc(archive->file_list->count * sizeof(*chip_list)); if (!chip_list) return -1; rom_info = NULL; rom = NULL; buffer = NULL; do { rom_info = db_lookup_split_rom(archive, chip_list, rom_info); if (!rom_info) break; if (load_split_rom_parts(archive, chip_list, rom_info, &buffer, &size)) { break; } if (!buffer) continue; rom = rom_alloc(filename, buffer, size); if (!rom) break; /* Store the filename of the first PRG chip as the empty string; this allows patches to be included with split roms as well, but they need to be located in the top-level directory of the archive. */ rom->compressed_filename = strdup(""); buffer = NULL; memcpy(&rom->info, rom_info, sizeof(*rom_info)); if (rom_info->name) rom->info.name = strdup(rom_info->name); else rom->info.name = NULL; rom->offset = INES_HEADER_SIZE; rom_calculate_checksum(rom); for (i = 0; i < archive->file_list->count; i++) { char *basename; if (!archive->file_list->entries[i].name) continue; basename = strrchr(archive->file_list->entries[i].name, '/'); if (!basename) basename = archive->file_list->entries[i].name; /* Hack for PlayChoice ROMs; most of these are the same as NES carts, so check for a file called 'security.prm' to distinguish them. */ if (!strcasecmp(basename, "security.prm")) { if (rom->info.flags & ROM_FLAG_PLAYCHOICE) rom->info.system_type = EMU_SYSTEM_TYPE_PLAYCHOICE; } } /* Validate individual chip CRCs or SHA1s if present, then the combined CRC and/or SHA1, if present. */ if (!validate_checksums(rom, rom_info)) goto invalid; if ((rom->info.flags & ROM_FLAG_HAS_CRC) && (rom->info.combined_crc != rom_info->combined_crc)) { goto invalid; } if ((rom->info.flags & ROM_FLAG_HAS_SHA1) && memcmp(rom->info.combined_sha1, rom_info->combined_sha1, 20)) { goto invalid; } break; invalid: rom_free(rom); rom = NULL; } while (rom_info); archive_close(&archive); if (chip_list) free(chip_list); if (buffer) free(buffer); if (!rom) return -1; *romptr = rom; return 0; }