44 lines
1.0 KiB
C
44 lines
1.0 KiB
C
#include "error_buffer.h"
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
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;
|
|
int space = MAX_ERROR_MESSAGE_LENGTH - eb->text_len;
|
|
int write_size;
|
|
|
|
if (space == 0)
|
|
return;
|
|
|
|
va_start(args, format);
|
|
write_size = vsnprintf(eb->text + eb->text_len, MAX_ERROR_MESSAGE_LENGTH - eb->text_len, format, args);
|
|
va_end(args);
|
|
|
|
if (write_size < 0)
|
|
return;
|
|
|
|
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;
|
|
} |