microtar
microtar copied to clipboard
microtar from mem
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;
}
// --------