From 98255910aa82c27d04ba79704086eca2310b3075 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sun, 19 Dec 2021 19:13:41 +0200 Subject: Add cpio newc format reader + Still need to actually add in an initrd that uses the format :D --- include/apos/initrd.h | 6 +++++- include/apos/utils.h | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/apos/initrd.h b/include/apos/initrd.h index 942875f..1e1129c 100644 --- a/include/apos/initrd.h +++ b/include/apos/initrd.h @@ -2,8 +2,12 @@ #define APOS_INITRD_H #include +#include size_t get_init_size(void *fdt); -void move_init(void *fdt, void *target, size_t sz); +void move_init(void *fdt, void *target); + +pm_t get_initrdtop(void *fdt); +pm_t get_initrdbase(void *fdt); #endif /* APOS_INITRD_H */ diff --git a/include/apos/utils.h b/include/apos/utils.h index 881cd8f..d0b41ce 100644 --- a/include/apos/utils.h +++ b/include/apos/utils.h @@ -25,6 +25,8 @@ #define container_of(ptr, type, member) \ ((type *)((char *)(ptr) - offsetof(type, member))) +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + #include static inline size_t align_up(size_t val, size_t a) @@ -48,4 +50,29 @@ static inline size_t align_down(size_t val, size_t a) return val - (val % a); } +static inline size_t asciinum(char c) +{ + if(c >= '0' && c <= '9') + return c - '0'; + else if(c >= 'A' && c <= 'F') + return c - 'A' + 10; + else if(c >= 'a' && c <= 'f') + return c - 'a' + 10; + else + return 0; +} + +static inline size_t convnum(const char *c, size_t len, size_t base) +{ + size_t multiplier = 1; + size_t sum = 0; + for(size_t i = 0; i < len; ++i){ + sum += asciinum(c[len - 1 - i]) * multiplier; + multiplier *= base; + } + + return sum; +} + + #endif /* APOS_UTILS_H */ -- cgit v1.3