#include "errors.h" #include #include #include void error_buffer_init(struct error_buffer *eb) { eb->err = ERR_NO_ERR; eb->text_len = 0; eb->text[0] = 0; } void error_set(struct error_buffer *eb, enum error_code err) { eb->err = err; } enum error_code error_get(const struct error_buffer *eb) { return eb->err; } void error_printf(struct error_buffer *eb, const char *format, ...) { va_list args; /* volné místo v zásobníku */ int space = MAX_ERROR_MESSAGE_LENGTH - eb->text_len; int write_size; /* už není volné místo */ if (space == 0) return; /* zápis */ va_start(args, format); write_size = vsnprintf(eb->text + eb->text_len, MAX_ERROR_MESSAGE_LENGTH - eb->text_len, format, args); va_end(args); /* chyba */ if (write_size < 0) return; /* aktualizace délky */ if (write_size < space) { eb->text_len += write_size; } else { eb->text_len = MAX_ERROR_MESSAGE_LENGTH; } } const char *error_get_text(const struct error_buffer *eb) { return eb->text; }