summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter <peter@pmikkelsen.com>2026-08-20 16:33:48 +0000
committerpeter <peter@pmikkelsen.com>2026-08-20 16:33:48 +0000
commit6fcc413c96d99ecbf405021d36292f0bc646fecb (patch)
tree36abd3222aadbdc9f92fad2c8e7e152fcfdf0790
parent3be992e3f45dcfd9f8a45fa447de3abb710819b7 (diff)
Test the aplwc_errstr and aplwc_errstr_rc functions
FossilOrigin-Name: c72c226a392ac25e688b131070bdfb2902b2a697766ecdfc0865b356cd3c2b2a
-rw-r--r--CMakeLists.txt1
-rw-r--r--src/aplwc.h6
-rw-r--r--src/errors.c14
-rw-r--r--src/libmain.c21
-rw-r--r--tests/aplwc_errstr.c49
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;
+}