ACPI AML decompiler w/ CFG recovery and structured pseudocode
29

Configure Feed

Select the types of activity you want to include in your feed.

tobi / src / dg.c
1.4 kB 60 lines
1#include "dg.h" 2 3#include "mem.h" 4 5#include <stdarg.h> 6#include <stdio.h> 7#include <stdlib.h> 8 9void tobi_diag_init(tobi_diag_list *dl) { 10 dl->items = NULL; 11 dl->len = 0; 12 dl->cap = 0; 13} 14 15void tobi_diag_free(tobi_diag_list *dl) { 16 for (size_t i = 0; i < dl->len; i++) { 17 free(dl->items[i].msg); 18 } 19 free(dl->items); 20 dl->items = NULL; 21 dl->len = 0; 22 dl->cap = 0; 23} 24 25void tobi_diag_add(tobi_diag_list *dl, tobi_diag_level level, size_t off, const char *fmt, ...) { 26 if (dl->len == dl->cap) { 27 dl->cap = dl->cap ? dl->cap * 2 : 8; 28 dl->items = tobi_xrealloc(dl->items, dl->cap * sizeof(dl->items[0])); 29 } 30 va_list ap; 31 va_start(ap, fmt); 32 va_list cp; 33 va_copy(cp, ap); 34 int n = vsnprintf(NULL, 0, fmt, cp); 35 va_end(cp); 36 if (n < 0) { 37 va_end(ap); 38 n = 0; 39 } 40 char *msg = tobi_xmalloc((size_t)n + 1); 41 (void)vsnprintf(msg, (size_t)n + 1, fmt, ap); 42 va_end(ap); 43 dl->items[dl->len].level = level; 44 dl->items[dl->len].off = off; 45 dl->items[dl->len].msg = msg; 46 dl->len++; 47} 48 49int tobi_diag_has_error(const tobi_diag_list *dl) { 50 for (size_t i = 0; i < dl->len; i++) { 51 if (dl->items[i].level == TOBI_DIAG_ERROR) { 52 return 1; 53 } 54 } 55 return 0; 56} 57 58const char *tobi_diag_level_name(tobi_diag_level level) { 59 return level == TOBI_DIAG_ERROR ? "error" : "warning"; 60}