fix dependency check logic cause config always disabled
[lunaix-os.git] / lunaix-os / kernel / kprint / kp_records.c
1 #include <klibc/string.h>
2 #include <lunaix/clock.h>
3 #include <lunaix/mm/valloc.h>
4 #include <lunaix/spike.h>
5 #include <lunaix/syslog.h>
6
7 #include "kp_records.h"
8
9 struct kp_records*
10 kprec_create(int max_recs)
11 {
12     struct kp_records* recs = (struct kp_records*)valloc(KP_RECS_SIZE);
13
14     *recs = (struct kp_records){ .max_recs = max_recs,
15                                  .log_lvl = KLOG_DEBUG,
16                                  .kp_ent_wp = &recs->kp_ents.ents };
17
18     llist_init_head(&recs->kp_ents.ents);
19
20     return recs;
21 }
22
23 static inline int
24 kprecs_full(struct kp_records* recs)
25 {
26     return recs->cur_recs >= recs->max_recs;
27 }
28
29 struct kp_entry*
30 kprec_put(struct kp_records* recs, int lvl, char* content, size_t len)
31 {
32     assert(len < 256);
33
34     struct kp_entry* ent;
35     if (!kprecs_full(recs)) {
36         assert(recs->kp_ent_wp == &recs->kp_ents.ents);
37
38         ent = (struct kp_entry*)vzalloc(KP_ENT_SIZE);
39         llist_append(&recs->kp_ents.ents, &ent->ents);
40         recs->cur_recs++;
41     } else {
42         recs->kp_ent_wp = recs->kp_ent_wp->next;
43         ent = container_of(recs->kp_ent_wp, struct kp_entry, ents);
44     }
45
46     vfree_safe(ent->content);
47
48     char* _content = valloc(len);
49     memcpy(_content, content, len);
50
51     ent->lvl = lvl;
52     ent->content = _content;
53     ent->time = clock_systime();
54     ent->len = len;
55
56     return ent;
57 }