diff --git a/include/kernaux/multiboot2.h b/include/kernaux/multiboot2.h index d1faaaa..856bf05 100644 --- a/include/kernaux/multiboot2.h +++ b/include/kernaux/multiboot2.h @@ -11,6 +11,8 @@ extern "C" { #define KERNAUX_MULTIBOOT2_MAGIC 0x36d76289 #define KERNAUX_MULTIBOOT2_DATA(ptr) (((uint8_t*)(ptr)) + sizeof(*(ptr))) +#define KERNAUX_MULTIBOOT2_TAG_SIZE_ALIGN(tag_base) \ + (((tag_base)->size + 7) & ~7) /*********************** * Header common types * diff --git a/src/multiboot2/header_helpers.c b/src/multiboot2/header_helpers.c index 790858f..764fa4b 100644 --- a/src/multiboot2/header_helpers.c +++ b/src/multiboot2/header_helpers.c @@ -25,7 +25,7 @@ const struct KernAux_Multiboot2_HTagBase if (tag_base->type == tag_type) return tag_base; tag_base = (struct KernAux_Multiboot2_HTagBase*)( - (uint8_t*)tag_base + ((tag_base->size + 7) & ~7) + (uint8_t*)tag_base + KERNAUX_MULTIBOOT2_TAG_SIZE_ALIGN(tag_base) ); } @@ -51,7 +51,7 @@ const struct KernAux_Multiboot2_HTagBase if (tag_base->type == tag_type && tag_base > after_tag) return tag_base; tag_base = (struct KernAux_Multiboot2_HTagBase*)( - (uint8_t*)tag_base + ((tag_base->size + 7) & ~7) + (uint8_t*)tag_base + KERNAUX_MULTIBOOT2_TAG_SIZE_ALIGN(tag_base) ); } diff --git a/src/multiboot2/info_helpers.c b/src/multiboot2/info_helpers.c index 718fea4..2496e59 100644 --- a/src/multiboot2/info_helpers.c +++ b/src/multiboot2/info_helpers.c @@ -24,7 +24,7 @@ const struct KernAux_Multiboot2_ITagBase if (tag_base->type == tag_type) return tag_base; tag_base = (struct KernAux_Multiboot2_ITagBase*)( - (uint8_t*)tag_base + ((tag_base->size + 7) & ~7) + (uint8_t*)tag_base + KERNAUX_MULTIBOOT2_TAG_SIZE_ALIGN(tag_base) ); } @@ -49,7 +49,7 @@ const struct KernAux_Multiboot2_ITagBase if (tag_base->type == tag_type && tag_base > after_tag) return tag_base; tag_base = (struct KernAux_Multiboot2_ITagBase*)( - (uint8_t*)tag_base + ((tag_base->size + 7) & ~7) + (uint8_t*)tag_base + KERNAUX_MULTIBOOT2_TAG_SIZE_ALIGN(tag_base) ); } diff --git a/src/multiboot2/info_is_valid.c b/src/multiboot2/info_is_valid.c index e0c954d..c3934a9 100644 --- a/src/multiboot2/info_is_valid.c +++ b/src/multiboot2/info_is_valid.c @@ -30,7 +30,8 @@ bool KernAux_Multiboot2_Info_is_valid( } tag_base = (struct KernAux_Multiboot2_ITagBase*)( - (unsigned char*)tag_base + ((tag_base->size + 7) & ~7) + (unsigned char*)tag_base + + KERNAUX_MULTIBOOT2_TAG_SIZE_ALIGN(tag_base) ); } diff --git a/src/multiboot2/info_print.c b/src/multiboot2/info_print.c index d978afb..b939145 100644 --- a/src/multiboot2/info_print.c +++ b/src/multiboot2/info_print.c @@ -94,7 +94,8 @@ void KernAux_Multiboot2_Info_print( KernAux_Multiboot2_ITagBase_print(tag_base, printf); tag_base = (struct KernAux_Multiboot2_ITagBase*)( - (unsigned char*)tag_base + ((tag_base->size + 7) & ~7) + (unsigned char*)tag_base + + KERNAUX_MULTIBOOT2_TAG_SIZE_ALIGN(tag_base) ); } }