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:
-rw-r--r--src/microtar.c17
-rw-r--r--src/microtar.h1
2 files changed, 11 insertions, 7 deletions
diff --git a/src/microtar.c b/src/microtar.c
index 0653adb..3856437 100644
--- a/src/microtar.c
+++ b/src/microtar.c
@@ -297,6 +297,7 @@ const char* mtar_strerror(int err)
case MTAR_EAPI: return "API usage error";
case MTAR_ENAMETOOLONG: return "name too long";
case MTAR_ETOOSHORT: return "file too short";
+ case MTAR_EACCESS: return "wrong access mode";
default: return "unknown error";
}
}
@@ -348,7 +349,7 @@ int mtar_rewind(mtar_t* tar)
int mtar_next(mtar_t* tar)
{
if(tar->access != MTAR_READ)
- return MTAR_EAPI;
+ return MTAR_EACCESS;
if(tar->state & S_HEADER_VALID) {
tar->state &= ~S_HEADER_VALID;
@@ -365,7 +366,7 @@ int mtar_next(mtar_t* tar)
int mtar_foreach(mtar_t* tar, mtar_foreach_cb cb, void* arg)
{
if(tar->access != MTAR_READ)
- return MTAR_EAPI;
+ return MTAR_EACCESS;
int err = mtar_rewind(tar);
if(err)
@@ -402,7 +403,7 @@ int mtar_find(mtar_t* tar, const char* name)
int mtar_read_data(mtar_t* tar, void* ptr, unsigned size)
{
if(tar->access != MTAR_READ)
- return MTAR_EAPI;
+ return MTAR_EACCESS;
if(!(tar->state & S_HEADER_VALID))
return MTAR_EAPI;
@@ -422,7 +423,7 @@ int mtar_read_data(mtar_t* tar, void* ptr, unsigned size)
int mtar_seek_data(mtar_t* tar, int offset, int whence)
{
if(tar->access != MTAR_READ)
- return MTAR_EAPI;
+ return MTAR_EACCESS;
if(!(tar->state & S_HEADER_VALID))
return MTAR_EAPI;
@@ -474,7 +475,7 @@ int mtar_eof_data(mtar_t* tar)
int mtar_write_header(mtar_t* tar, const mtar_header_t* h)
{
if(tar->access != MTAR_WRITE)
- return MTAR_EAPI;
+ return MTAR_EACCESS;
if(((tar->state & S_WROTE_DATA) && !(tar->state & S_WROTE_DATA_EOF)) ||
(tar->state & S_WROTE_FINALIZE))
return MTAR_EAPI;
@@ -536,6 +537,8 @@ int mtar_write_dir_header(mtar_t* tar, const char* name)
int mtar_write_data(mtar_t* tar, const void* ptr, unsigned size)
{
+ if(tar->access != MTAR_WRITE)
+ return MTAR_EACCESS;
if(!(tar->state & S_WROTE_HEADER) ||
(tar->state & S_WROTE_DATA_EOF) ||
(tar->state & S_WROTE_FINALIZE))
@@ -558,7 +561,7 @@ int mtar_write_data(mtar_t* tar, const void* ptr, unsigned size)
int mtar_end_data(mtar_t* tar)
{
if(tar->access != MTAR_WRITE)
- return MTAR_EAPI;
+ return MTAR_EACCESS;
if((tar->state & S_WROTE_DATA_EOF) ||
(tar->state & S_WROTE_FINALIZE))
return MTAR_EAPI;
@@ -578,7 +581,7 @@ int mtar_end_data(mtar_t* tar)
int mtar_finalize(mtar_t* tar)
{
if(tar->access != MTAR_WRITE)
- return MTAR_EAPI;
+ return MTAR_EACCESS;
if(((tar->state & S_WROTE_DATA) && !(tar->state & S_WROTE_DATA_EOF)) ||
(tar->state & S_WROTE_FINALIZE))
return MTAR_EAPI;
diff --git a/src/microtar.h b/src/microtar.h
index 6197a3d..12e43e0 100644
--- a/src/microtar.h
+++ b/src/microtar.h
@@ -45,6 +45,7 @@ enum mtar_error {
MTAR_EAPI = -12,
MTAR_ENAMETOOLONG = -13,
MTAR_ETOOSHORT = -14,
+ MTAR_EACCESS = -15,
MTAR_ELAST = MTAR_ETOOSHORT,
};