diff options
| author | peter <peter@pmikkelsen.com> | 2026-08-20 16:33:48 +0000 |
|---|---|---|
| committer | peter <peter@pmikkelsen.com> | 2026-08-20 16:33:48 +0000 |
| commit | 6fcc413c96d99ecbf405021d36292f0bc646fecb (patch) | |
| tree | 36abd3222aadbdc9f92fad2c8e7e152fcfdf0790 | |
| parent | 3be992e3f45dcfd9f8a45fa447de3abb710819b7 (diff) | |
Test the aplwc_errstr and aplwc_errstr_rc functions
FossilOrigin-Name: c72c226a392ac25e688b131070bdfb2902b2a697766ecdfc0865b356cd3c2b2a
| -rw-r--r-- | CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/aplwc.h | 6 | ||||
| -rw-r--r-- | src/errors.c | 14 | ||||
| -rw-r--r-- | src/libmain.c | 21 | ||||
| -rw-r--r-- | tests/aplwc_errstr.c | 49 |
5 files changed, 71 insertions, 20 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 73d2a62..e06a1eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,7 +47,6 @@ target_link_options(common INTERFACE ) add_library(aplwc - src/errors.c src/libmain.c src/memory.c ) diff --git a/src/aplwc.h b/src/aplwc.h index 603e4f3..9905411 100644 --- a/src/aplwc.h +++ b/src/aplwc.h @@ -6,14 +6,16 @@ enum aplwc_rc { APLWC_OK, - APLWC_NOT_IMPLEMENTED, - APLWC_OUT_OF_MEMORY + APLWC_OUT_OF_MEMORY, + + APLWC_RC_LAST = APLWC_OUT_OF_MEMORY }; struct aplwc; enum aplwc_rc aplwc_new(struct aplwc **, uint8_t *, size_t); enum aplwc_rc aplwc_destroy(struct aplwc *); +const char *aplwc_errstr_rc(enum aplwc_rc); const char *aplwc_errstr(struct aplwc *); #define APLWC_MIN_MEM (128) diff --git a/src/errors.c b/src/errors.c deleted file mode 100644 index 65a066a..0000000 --- a/src/errors.c +++ /dev/null @@ -1,14 +0,0 @@ -#include <aplwc_internal.h> - -const char * -rc_to_string(enum aplwc_rc rc) -{ - switch(rc){ - case APLWC_OK: - return ""; - case APLWC_NOT_IMPLEMENTED: - return "Not yet implemented"; - default: - return NULL; - } -} diff --git a/src/libmain.c b/src/libmain.c index 5dce8a0..b96d0da 100644 --- a/src/libmain.c +++ b/src/libmain.c @@ -25,12 +25,26 @@ aplwc_destroy(struct aplwc *p) } const char * +aplwc_errstr_rc(enum aplwc_rc rc) +{ + switch(rc){ + case APLWC_OK: + return ""; + case APLWC_OUT_OF_MEMORY: + return "Out of memory"; + default: + return "(unable to produce error string)"; + } +} + +const char * aplwc_errstr(struct aplwc *aplwc) { enum { BUF_SIZE = 256 }; static char buf[BUF_SIZE]; const char *err, *msg; + enum aplwc_rc rc; char *p; size_t len, i; @@ -39,12 +53,13 @@ aplwc_errstr(struct aplwc *aplwc) err = msg = NULL; if(aplwc){ - err = rc_to_string(aplwc->last_error); msg = aplwc->last_error_msg; + rc = aplwc->last_error; + }else{ + rc = APLWC_RC_LAST+1; } - if(!err) - err = "(unable to produce error string)"; + err = aplwc_errstr_rc(rc); for(i = 0, len = strlen(err); (i <= len) && (((p+i)-buf) < (BUF_SIZE-1)); i++) p[i] = err[i]; diff --git a/tests/aplwc_errstr.c b/tests/aplwc_errstr.c new file mode 100644 index 0000000..0a3b2ad --- /dev/null +++ b/tests/aplwc_errstr.c @@ -0,0 +1,49 @@ +#include <aplwc.h> +#include <string.h> + +int +main(void) +{ + uint8_t data[APLWC_MIN_MEM]; + struct aplwc *aplwc; + int ret; + const char *err; + + ret = aplwc_new(&aplwc, data, sizeof(data)); + if(ret) + return 1; + + err = aplwc_errstr(aplwc); + if(err == NULL) + return 1; + + if(strlen(err) != 0) + return 1; + + err = aplwc_errstr(NULL); + if(err == NULL) + return 1; + if(strcmp(err, "(unable to produce error string)") != 0) + return 1; + + ret = aplwc_destroy(aplwc); + if(ret) + return 1; + + ret = aplwc_new(&aplwc, data, 0); + if(ret == 0) + return 1; + err = aplwc_errstr_rc(ret); + if(err == NULL) + return 1; + + for(ret = 0; ret < APLWC_RC_LAST; ret++){ + err = aplwc_errstr_rc(ret); + if(err == NULL) + return 1; + if(strcmp(err, "(unable to produce error string)") == 0) + return 1; + } + + return 0; +} |