diff options
Diffstat (limited to 'robot/errcatch.c')
-rw-r--r-- | robot/errcatch.c | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/robot/errcatch.c b/robot/errcatch.c index a70a409..ec1ab74 100644 --- a/robot/errcatch.c +++ b/robot/errcatch.c @@ -4,31 +4,29 @@ #include "errcatch.h" w2_s_error g_w2_error_buffer[W2_ERROR_BUFFER_SIZE] = {}; -uint8_t g_w2_error_index = 0; -uint8_t g_w2_error_offset = 0; +uint8_t g_w2_error_index = 0; +uint8_t g_w2_error_offset = 0; -void w2_errcatch_main() {} +void w2_errcatch_main() { + while (g_w2_error_index != g_w2_error_offset) { + // handle g_w2_error_buffer[g_w2_error_offset]; + g_w2_error_offset = (g_w2_error_offset + 1) % W2_ERROR_BUFFER_SIZE; + } +} -/** - * allocate and initialize error struct - * - * TODO: doesn't handle null pointers from calloc - */ -inline w2_s_error* w2_alloc_error(enum w2_e_errorcodes code, uint16_t length, const char *message) { - w2_s_error* error = calloc(sizeof(w2_s_error) + length, 1); - - memcpy(error, &(w2_s_error const){ .code = code, .message_length = length }, sizeof(w2_s_error)); - - // strncpy(error->message, message, length); +w2_s_error *w2_alloc_error(enum w2_e_errorcodes code, uint16_t length, const char *message) { + w2_s_error *error = calloc(sizeof(w2_s_error) + length, 1); + memcpy(error, &(w2_s_error const){.code = code, .message_length = length}, sizeof(w2_s_error)); + strncpy(error->message, message, length); - return error; + return error; } void w2_errcatch_throw_msg(enum w2_e_errorcodes code, uint16_t length, const char *message) { - w2_s_error error = *w2_alloc_error(code, length, message); + w2_s_error error = *w2_alloc_error(code, length, message); g_w2_error_buffer[g_w2_error_index] = error; - g_w2_error_index = (g_w2_error_index) & W2_ERROR_BUFFER_SIZE; + g_w2_error_index = (g_w2_error_index)&W2_ERROR_BUFFER_SIZE; } void w2_errcatch_throw(enum w2_e_errorcodes code) { w2_errcatch_throw_msg(code, 0, ""); } |