file_error core_fload(const char *filename, dynamic_buffer &data) { core_file *file = NULL; file_error err; UINT64 size; /* attempt to open the file */ err = core_fopen(filename, OPEN_FLAG_READ, &file); if (err != FILERR_NONE) return err; /* get the size */ size = core_fsize(file); if ((UINT32)size != size) { core_fclose(file); return FILERR_OUT_OF_MEMORY; } /* allocate memory */ data.resize(size); /* read the data */ if (core_fread(file, &data[0], size) != size) { core_fclose(file); data.clear(); return FILERR_FAILURE; } /* close the file and return data */ core_fclose(file); return FILERR_NONE; }
static bool render_font_create_temporaryfile(render_font &font, const char *filename) { total_numchars = 0; m_chartable.clear(); core_file *file; astring tmp_filename(filename, ".tmp"); file_error filerr = core_fopen(tmp_filename.cstr(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &file); if (filerr != FILERR_NONE) return true; core_fclose(file); return false; }
chd_error chd_file::read_metadata(chd_metadata_tag searchtag, UINT32 searchindex, dynamic_buffer &output) { // wrap this for clean reporting try { // if we didn't find it, just return metadata_entry metaentry; if (!metadata_find(searchtag, searchindex, metaentry)) throw CHDERR_METADATA_NOT_FOUND; // read the metadata output.resize(metaentry.length); file_read(metaentry.offset + METADATA_HEADER_SIZE, output, metaentry.length); return CHDERR_NONE; } // just return errors catch (chd_error &err) { return err; } }
void beta_state::machine_start() { m_led_refresh_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(beta_state::led_refresh),this)); m_eprom_rom.resize(0x800); if (!m_eprom->exists()) memset(&m_eprom_rom[0], 0xff, 0x800); else { std::string region_tag; memcpy(&m_eprom_rom[0], memregion(region_tag.assign(m_eprom->tag()).append(GENERIC_ROM_REGION_TAG).c_str())->base(), 0x800); } // state saving save_item(NAME(m_eprom_oe)); save_item(NAME(m_eprom_ce)); save_item(NAME(m_eprom_addr)); save_item(NAME(m_eprom_data)); save_item(NAME(m_old_data)); save_item(NAME(m_eprom_rom)); save_item(NAME(m_ls145_p)); save_item(NAME(m_segment)); }
uint32_t region::read_data(int x, int z, dynamic_buffer& buffer) { chunk_offset co = read_chunk_offset(x, z); uint8_t buf[5]; std::fstream fp(path.string().c_str(), std::ios::in | std::ios::binary); if (fp.fail()) { throw bad_region(path, "failed to open file"); } fp.seekg(RECORD_SIZE * co.sector_number); if (fp.fail()) { throw bad_region(path, "could not seek"); } fp.read(reinterpret_cast<char*>(buf), 5); if (fp.fail()) { throw bad_region(path, "could not read chunk header"); } uint32_t len = (buf[0]<<24) + (buf[1]<<16) + (buf[2]<<8) + (buf[3]); uint8_t version = buf[4]; if (version != 2) { throw bad_region(path, "bad chunk version"); } while (len > in_buffer.get_size()) { if (in_buffer.expand() == 0) { throw bad_region(path, "region input buffer requires too much memory"); } } fp.read(in_buffer.get(), len); if (fp.fail()) { throw bad_region(path, "could not read chunk"); } fp.close(); zstream strm; size_t pos = 0; strm.set_in(reinterpret_cast<Bytef*>(in_buffer.get()), len - 1); strm.set_out(reinterpret_cast<Bytef*>(buffer.get() + pos), buffer.get_size()); do { try { strm.inflate(); } catch(const zerror& e) { throw bad_region(path, e.what()); } if (!strm.in_empty()) { uint32_t expanded = buffer.expand(); if (expanded == 0) { throw bad_region(path, "region output buffer requires too much memory"); } pos += expanded; strm.set_out(reinterpret_cast<Bytef*>(buffer.get() + pos), expanded); } } while(!strm.in_empty()); return buffer.get_size() - strm.get_avail_out(); }