aboutsummaryrefslogtreecommitdiffstats
path: root/src/badlib.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-06-14 18:41:21 +0200
committerBad Diode <bd@badd10de.dev>2024-06-14 18:41:21 +0200
commit2cad3b5b21fe1644239b03fc8fd3c4329d98e606 (patch)
tree152cb5c64a89539fcfff86a3a26770964c7d4830 /src/badlib.h
parent3aae2f36047e9adc6a59b886492254eb4370777d (diff)
downloadbdl-2cad3b5b21fe1644239b03fc8fd3c4329d98e606.tar.gz
bdl-2cad3b5b21fe1644239b03fc8fd3c4329d98e606.zip
Add initial custom logging functions
Diffstat (limited to 'src/badlib.h')
-rw-r--r--src/badlib.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/badlib.h b/src/badlib.h
index f7a7974..2bc1807 100644
--- a/src/badlib.h
+++ b/src/badlib.h
@@ -873,4 +873,52 @@ platform_time(void) {
873 return ts.tv_sec * 1000000000 + ts.tv_nsec; 873 return ts.tv_sec * 1000000000 + ts.tv_nsec;
874} 874}
875 875
876//
877// Custom logger.
878//
879
880#define LOG_BUF_SIZE KB(4)
881
882typedef struct Logger {
883 Buf buf;
884 FILE *dest;
885 Arena *storage;
886} Logger;
887
888void
889log_init(Logger *l) {
890 buf_reserve(&l->buf, LOG_BUF_SIZE, l->storage);
891}
892
893void
894log_flush(Logger *l) {
895 if (l->buf.size) {
896 fprintf(l->dest, "%.*s", (int)l->buf.size, l->buf.mem);
897 }
898}
899
900void
901log_str(Logger *l, Str str) {
902 assert(l);
903 Buf *buf = &l->buf;
904 if (buf->size == 0) log_init(l);
905 while (str.size > 0) {
906 sz avail = buf->cap - buf->size;
907 if (avail == 0) {
908 log_flush(l);
909 avail = buf->cap - buf->size;
910 assert(avail > 0);
911 }
912 if (str.size < avail) {
913 buf_insert(&l->buf, str.mem, str.size, l->storage);
914 str.size = 0;
915 return;
916 }
917 buf_insert(&l->buf, str.mem, avail, l->storage);
918 str.mem += avail;
919 str.size -= avail;
920 }
921}
922
923
876#endif // BADLIB_H 924#endif // BADLIB_H