Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/amachronic/microtar.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/microtar.c')
-rw-r--r--src/microtar.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/microtar.c b/src/microtar.c
index 81e1031..2f5f781 100644
--- a/src/microtar.c
+++ b/src/microtar.c
@@ -99,7 +99,7 @@ static unsigned checksum(const mtar_raw_header_t* rh)
static int tread(mtar_t* tar, void* data, unsigned size)
{
- int err = tar->read(tar, data, size);
+ int err = tar->ops->read(tar->stream, data, size);
tar->pos += size;
return err;
}
@@ -107,7 +107,7 @@ static int tread(mtar_t* tar, void* data, unsigned size)
static int twrite(mtar_t* tar, const void* data, unsigned size)
{
- int err = tar->write(tar, data, size);
+ int err = tar->ops->write(tar->stream, data, size);
tar->pos += size;
return err;
}
@@ -216,18 +216,34 @@ const char* mtar_strerror(int err)
}
}
+int mtar_init(mtar_t* tar, const mtar_ops_t* ops, void* stream)
+{
+ memset(tar, 0, sizeof(mtar_t));
+ tar->ops = ops;
+ tar->stream = stream;
+ return 0;
+}
+
int mtar_close(mtar_t* tar)
{
- return tar->close(tar);
+ int err = tar->ops->close(tar->stream);
+ tar->ops = NULL;
+ tar->stream = NULL;
+ return err;
}
int mtar_seek(mtar_t* tar, unsigned pos)
{
- int err = tar->seek(tar, pos);
+ int err = tar->ops->seek(tar->stream, pos);
tar->pos = pos;
return err;
}
+int mtar_is_open(mtar_t* tar)
+{
+ return (tar->ops != NULL) ? 1 : 0;
+}
+
int mtar_rewind(mtar_t* tar)
{
tar->remaining_data = 0;