From 949c43436e1c229e50a802e15a43642f85fff365 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Tue, 11 Jan 2022 14:10:16 +0500 Subject: [PATCH] Fix struct KernAux_Multiboot2_Tag_BootCmdLine --- include/kernaux/multiboot2.h | 5 +++-- src/multiboot2/helpers.c | 2 +- src/multiboot2/is_valid.c | 2 +- src/multiboot2/print.c | 4 +++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/include/kernaux/multiboot2.h b/include/kernaux/multiboot2.h index bebc2b5..3dca995 100644 --- a/include/kernaux/multiboot2.h +++ b/include/kernaux/multiboot2.h @@ -5,10 +5,13 @@ extern "C" { #endif +#include #include #define KERNAUX_MULTIBOOT2_MAGIC 0x36d76289 +#define KERNAUX_MULTIBOOT2_TAG_DATA(tag) (((uint8_t*)(tag)) + sizeof(*(tag))) + /**************** * Common types * ****************/ @@ -67,8 +70,6 @@ struct KernAux_Multiboot2_Tag_BootCmdLine { // type = 1 // size = ? struct KernAux_Multiboot2_TagBase base; - - char cmdline[]; } __attribute__((packed)); diff --git a/src/multiboot2/helpers.c b/src/multiboot2/helpers.c index ec88fe9..df753ec 100644 --- a/src/multiboot2/helpers.c +++ b/src/multiboot2/helpers.c @@ -63,5 +63,5 @@ const char *KernAux_Multiboot2_boot_cmd_line( if (!tag) return NULL; - return tag->cmdline; + return (char*)KERNAUX_MULTIBOOT2_TAG_DATA(tag); } diff --git a/src/multiboot2/is_valid.c b/src/multiboot2/is_valid.c index 7caebf1..e2d418f 100644 --- a/src/multiboot2/is_valid.c +++ b/src/multiboot2/is_valid.c @@ -162,7 +162,7 @@ bool KernAux_Multiboot2_Tag_BootCmdLine_is_valid( size_t index = 1; for ( - const char *ptr = tag->cmdline; + const char *ptr = (char*)KERNAUX_MULTIBOOT2_TAG_DATA(tag); *ptr && index < tag->base.size; ++ptr ) { diff --git a/src/multiboot2/print.c b/src/multiboot2/print.c index d1abe3e..c000681 100644 --- a/src/multiboot2/print.c +++ b/src/multiboot2/print.c @@ -120,7 +120,9 @@ void KernAux_Multiboot2_TagBase_print( case KERNAUX_MULTIBOOT2_TAGTYPE_BOOT_CMD_LINE: printf( " cmdline: %s\n", - ((struct KernAux_Multiboot2_Tag_BootCmdLine*)tag_base)->cmdline + KERNAUX_MULTIBOOT2_TAG_DATA( + (struct KernAux_Multiboot2_Tag_BootCmdLine*)tag_base + ) ); break; case KERNAUX_MULTIBOOT2_TAGTYPE_BOOT_LOADER_NAME: