mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
kernel_args: redo implementation
This commit is contained in:
@@ -1,7 +0,0 @@
|
||||
#ifndef _CMDLINE_H
|
||||
#define _CMDLINE_H
|
||||
|
||||
char *cmdline_get(char *);
|
||||
void cmdline_parse();
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,57 @@
|
||||
#ifndef _KERNEL_ARGS_H
|
||||
#define _KERNEL_ARGS_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void kernel_arguments_parse(void);
|
||||
|
||||
#define KERNEL_ARGUMENT_TYPE_BOOL 0
|
||||
#define KERNEL_ARGUMENT_TYPE_STR 1
|
||||
#define KERNEL_ARGUMENT_TYPE_INT 2
|
||||
|
||||
typedef struct {
|
||||
const char *key;
|
||||
int type;
|
||||
bool found;
|
||||
union {
|
||||
char *value_str;
|
||||
uint64_t value_int;
|
||||
};
|
||||
} kernel_argument_t;
|
||||
|
||||
#define DEFINE_KERNEL_ARGUMENT(name, t) \
|
||||
static kernel_argument_t kernel_argument_##name = { \
|
||||
.key = #name , \
|
||||
.type = _Generic((t)0, \
|
||||
uint8_t: KERNEL_ARGUMENT_TYPE_INT, \
|
||||
uint16_t: KERNEL_ARGUMENT_TYPE_INT, \
|
||||
uint32_t: KERNEL_ARGUMENT_TYPE_INT, \
|
||||
uint64_t: KERNEL_ARGUMENT_TYPE_INT, \
|
||||
int8_t: KERNEL_ARGUMENT_TYPE_INT, \
|
||||
int16_t: KERNEL_ARGUMENT_TYPE_INT, \
|
||||
int32_t: KERNEL_ARGUMENT_TYPE_INT, \
|
||||
int64_t: KERNEL_ARGUMENT_TYPE_INT, \
|
||||
bool: KERNEL_ARGUMENT_TYPE_BOOL, \
|
||||
char *: KERNEL_ARGUMENT_TYPE_STR, \
|
||||
default: (kernel_argument_t *)NULL \
|
||||
), \
|
||||
.found = false \
|
||||
}; \
|
||||
__attribute__((section(".kernel_arguments"), used)) static kernel_argument_t *kernel_argument_ptr_##name = &kernel_argument_##name;
|
||||
|
||||
#define GET_KERNEL_ARGUMENT(name, t) _Generic((t)0, \
|
||||
uint8_t: kernel_argument_##name.value_int, \
|
||||
uint16_t: kernel_argument_##name.value_int, \
|
||||
uint32_t: kernel_argument_##name.value_int, \
|
||||
uint64_t: kernel_argument_##name.value_int, \
|
||||
int8_t: kernel_argument_##name.value_int, \
|
||||
int16_t: kernel_argument_##name.value_int, \
|
||||
int32_t: kernel_argument_##name.value_int, \
|
||||
int64_t: kernel_argument_##name.value_int, \
|
||||
bool: kernel_argument_##name.found, \
|
||||
char *: kernel_argument_##name.value_str, \
|
||||
default: (kernel_argument_t *)NULL \
|
||||
)
|
||||
|
||||
#endif
|
||||
@@ -13,5 +13,6 @@ int strncmp(const char *a, const char *b, size_t c);
|
||||
int memcmp(const void *a, const void *b, size_t s);
|
||||
void *memmove(void *_d, const void *_s, size_t c);
|
||||
char *strerror(int errno);
|
||||
long long atoll(const char *c);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user