GraphWeb/errors.c
2025-01-16 13:55:12 +01:00

50 lines
1.1 KiB
C
Executable File

#include "errors.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;
/* 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;
}