Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
	}
}
Пример #4
0
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));
}
Пример #5
0
  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();
  }