summaryrefslogtreecommitdiff
path: root/src/lib/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/main.c')
-rw-r--r--src/lib/main.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/lib/main.c b/src/lib/main.c
new file mode 100644
index 0000000..d44d6de
--- /dev/null
+++ b/src/lib/main.c
@@ -0,0 +1,54 @@
+#include "aplwc_internal.h"
+
+enum aplwc_rc
+aplwc_new(struct aplwc **p, uint8_t *data, size_t size)
+{
+ struct memory m;
+
+ m = memory_init(data, size);
+
+ *p = memory_alloc_aplwc(&m);
+ if(*p == NULL)
+ return APLWC_OUT_OF_MEMORY;
+ (*p)->memory = m;
+
+ return APLWC_OK;
+}
+
+enum aplwc_rc
+aplwc_destroy(struct aplwc *p)
+{
+ if(p)
+ memory_free_aplwc(&p->memory, p);
+
+ return APLWC_OK;
+}
+
+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 };
+
+ const char *err;
+ enum aplwc_rc rc;
+
+ err = NULL;
+
+ rc = aplwc ? aplwc->last_error : APLWC_RC_LAST+1;
+ err = aplwc_errstr_rc(rc);
+
+ return err;
+}