diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2021-11-06 17:05:48 +0300 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2021-11-06 17:05:48 +0300 |
commit | 862f4c1468debea982882759e0e50a7f49b00d79 (patch) | |
tree | 59f6efcedb0a1323f21e6e22e299f33e75617d59 | |
parent | 8e4b2750c0b43bc55d6ef1403b569e6ab6ac10c8 (diff) |
Add EACCESS error and use it
Return this error if using an archive in the wrong access mode,
ie. write to an archive opened for reading, or vice-versa.
Previously EAPI was returned which is probably not as useful.
-rw-r--r-- | src/microtar.c | 17 | ||||
-rw-r--r-- | src/microtar.h | 1 |
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, }; |