microtar icon indicating copy to clipboard operation
microtar copied to clipboard

microtar from mem

Open otse opened this issue 4 years ago • 1 comments

I don't know how good form this is, but this is useful when A) obviously when you have your tar file in mem, B) useful when you have a inflated (decompressed!) gzip buffer from e.g. zlib.

// mtar from mem buffer

static int mem_write(mtar_t *tar, const void *data, unsigned size)
{
	return MTAR_EWRITEFAIL;
}

static int mem_read(mtar_t *tar, void *data, unsigned size)
{
	unsigned char *buf = (unsigned char *)tar->stream;
	memcpy(data, buf + tar->pos, size);
	return MTAR_ESUCCESS;
}

static int mem_seek(mtar_t *tar, unsigned offset)
{
	return MTAR_ESUCCESS;
}

static int mem_close(mtar_t *tar)
{
	// Todo, Delete the data?
	return MTAR_ESUCCESS;
}

int mtar_open_mem(mtar_t *tar, void *data)
{
	int err;
	mtar_header_t h;

	// Init tar struct and functions
	memset(tar, 0, sizeof(*tar));
	tar->write = mem_write;
	tar->read = mem_read;
	tar->seek = mem_seek;
	tar->close = mem_close;

	tar->stream = data;

	err = mtar_read_header(tar, &h);
	if (err != MTAR_ESUCCESS)
	{
		mtar_close(tar);
		return err;
	}

	// Return ok
	return MTAR_ESUCCESS;
}
// --------

otse avatar Aug 01 '19 10:08 otse