コード例 #1
0
ファイル: flop5.c プロジェクト: jakubfi/em400
// -----------------------------------------------------------------------
void dev_flop5_destroy(void *dev)
{
	if (!dev) return;
	struct dev_flop5 *flop5 = (struct dev_flop5 *) dev;
	e4i_close(flop5->image);
	free(dev);
}
コード例 #2
0
ファイル: cmem_m9425.c プロジェクト: saper/em400
// -----------------------------------------------------------------------
void cmem_m9425_shutdown(struct cmem_unit_proto_t *unit)
{
	if (unit) {
		for (int i=0 ; i<=1 ; i++) {
			e4i_close(UNIT->disk[i]);
			UNIT->disk[i] = NULL;
		}
		free(UNIT);
	}
}
コード例 #3
0
ファイル: e4image.c プロジェクト: 32bitmicro/mera400
// -----------------------------------------------------------------------
struct e4i_t * e4i_open(char *img_name)
{
	int res;
	e4i_err = E4I_E_OK;

	struct e4i_t *e = calloc(1, sizeof(struct e4i_t));
	if (!e) {
		e4i_err = E4I_E_ALLOC;
		return NULL;
	}

	// open image
	e->image = fopen(img_name, "r+");
	if (!e->image) {
		e4i_err = E4I_E_OPEN;
		e4i_close(e);
		return NULL;
	}

	// read header
	res = __e4i_header_read(e);
	if (res != E4I_E_OK) {
		e4i_err = res;
		e4i_close(e);
		return NULL;
	}

	// check header sanity
	res = __e4i_header_check(e);
	if (res != E4I_E_OK) {
		e4i_err = res;
		e4i_close(e);
		return NULL;
	}

	e->cur_pos = 0;
	e->img_name = strdup(img_name);
	return e;
}
コード例 #4
0
ファイル: e4image.c プロジェクト: 32bitmicro/mera400
// -----------------------------------------------------------------------
struct e4i_t * __e4i_create(char *img_name, uint16_t id_size, uint16_t block_size, uint16_t cylinders, uint8_t heads, uint8_t spt, uint32_t blocks, uint32_t flags)
{
	e4i_err = E4I_E_OK;

	// we don't destroy images
	struct stat st;
	if (stat(img_name, &st) == 0) {
		e4i_err = E4I_E_EXISTS;
		return NULL;
	}

	struct e4i_t *e = calloc(1, sizeof(struct e4i_t));
	if (!e) {
		e4i_err = E4I_E_ALLOC;
		return NULL;
	}

	// create image file
	e->image = fopen(img_name, "w+");
	if (!e->image) {
		free(e);
		e4i_err = E4I_E_OPEN;
		return NULL;
	}

	// fill header data
	strncpy(e->magic, E4I_MAGIC, 4);
	e->v_major = E4I_IMAGE_V_MAJOR;
	e->v_minor = E4I_IMAGE_V_MINOR;
	e->flags = flags;
	e->cylinders = cylinders;
	e->heads = heads;
	e->spt = spt;
	e->blocks = blocks;
	e->id_size = id_size;
	e->block_size = block_size;
	e->cur_pos = 0;
	e->img_name = strdup(img_name);

	int res;

	// write header
	res = __e4i_header_write(e);
	if (res != E4I_E_OK) {
		e4i_close(e);
		e4i_err = res;
		return NULL;
	}

	return e;
}