diff --git a/.gitignore b/.gitignore index 4fb02bf..7876a6f 100644 --- a/.gitignore +++ b/.gitignore @@ -102,6 +102,7 @@ /include/kernaux.h /include/kernaux/console.h +/include/kernaux/multiboot2.h /include/kernaux/printf.h /include/kernaux/version.h diff --git a/Makefile.am b/Makefile.am index 36bcd7c..1df1659 100644 --- a/Makefile.am +++ b/Makefile.am @@ -63,6 +63,7 @@ libkernaux_la_SOURCES += \ src/multiboot2/header_helpers.c \ src/multiboot2/header_is_valid.c \ src/multiboot2/header_print.c \ + src/multiboot2/info_convert.c \ src/multiboot2/info_helpers.c \ src/multiboot2/info_is_valid.c \ src/multiboot2/info_print.c diff --git a/README.md b/README.md index 6932396..b643acf 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ zero). Work-in-progress APIs can change at any time. * Utilities * [Measurement units utils](/include/kernaux/units.h) (*work in progress*) * [To human](/examples/units_human.c) - * [Memory map](/include/kernaux/memmap.h) (*work in progress*) + * [Memory map](/include/kernaux/memmap.h.in) (*work in progress*) * [Example](/examples/memmap.c) * [printf format parser](/include/kernaux/printf_fmt.h) (*work in progress*) * Code from [https://github.com/mpaland/printf](https://github.com/mpaland/printf). Thank you! diff --git a/configure.ac b/configure.ac index 7552414..1786793 100644 --- a/configure.ac +++ b/configure.ac @@ -31,6 +31,7 @@ AC_CONFIG_FILES([ libc/include/Makefile include/kernaux.h include/kernaux/console.h + include/kernaux/multiboot2.h include/kernaux/printf.h include/kernaux/version.h tests/Makefile diff --git a/include/kernaux/multiboot2.h b/include/kernaux/multiboot2.h.in similarity index 98% rename from include/kernaux/multiboot2.h rename to include/kernaux/multiboot2.h.in index 6afa972..0a3a494 100644 --- a/include/kernaux/multiboot2.h +++ b/include/kernaux/multiboot2.h.in @@ -5,6 +5,8 @@ extern "C" { #endif +@comment_line_memmap@#include + #include #include @@ -488,6 +490,15 @@ const char *KernAux_Multiboot2_HTag_RelocatableHeader_Preference_to_str( enum KernAux_Multiboot2_HTag_RelocatableHeader_Preference pref ); +/************************************ + * Information conversion functions * + ************************************/ + +@comment_line_memmap@bool KernAux_Multiboot2_Info_to_memmap( +@comment_line_memmap@ const struct KernAux_Multiboot2_Info *multiboot2_info, +@comment_line_memmap@ KernAux_MemMap memmap +@comment_line_memmap@); + /*************************** * Header helper functions * ***************************/ diff --git a/src/multiboot2/info_convert.c b/src/multiboot2/info_convert.c new file mode 100644 index 0000000..80ad5da --- /dev/null +++ b/src/multiboot2/info_convert.c @@ -0,0 +1,54 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +#ifdef WITH_MEMMAP +#include +#endif + +#include + +#ifdef WITH_MEMMAP +// TODO: implement this +bool KernAux_Multiboot2_Info_to_memmap( + const struct KernAux_Multiboot2_Info *multiboot2_info, + KernAux_MemMap memmap +) { + KERNAUX_ASSERT(multiboot2_info); + + KernAux_MemMap_init(memmap, 0); + if (!KernAux_Multiboot2_Info_is_valid(multiboot2_info)) return false; + + const struct KernAux_Multiboot2_ITagBase *const basic_memory_info_tag_base = + KernAux_Multiboot2_Info_first_tag_with_type( + multiboot2_info, + KERNAUX_MULTIBOOT2_ITAG_BASIC_MEMORY_INFO + ); + const struct KernAux_Multiboot2_ITagBase *const memory_map_tag_base = + KernAux_Multiboot2_Info_first_tag_with_type( + multiboot2_info, + KERNAUX_MULTIBOOT2_ITAG_MEMORY_MAP + ); + + if (basic_memory_info_tag_base == NULL || memory_map_tag_base == NULL) { + return false; + } + + const struct KernAux_Multiboot2_ITag_BasicMemoryInfo *const + basic_memory_info_tag = + (const struct KernAux_Multiboot2_ITag_BasicMemoryInfo*) + basic_memory_info_tag_base; + const struct KernAux_Multiboot2_ITag_MemoryMap *const + memory_map_tag = + (const struct KernAux_Multiboot2_ITag_MemoryMap*) + memory_map_tag_base; + + (void)basic_memory_info_tag; + (void)memory_map_tag; + + return false; +} +#endif