diff options
Diffstat (limited to 'kernel/include')
| -rw-r--r-- | kernel/include/boot/gdt.h | 19 | ||||
| -rw-r--r-- | kernel/include/boot/interrupts.h | 26 | ||||
| -rw-r--r-- | kernel/include/drivers/serial.h | 11 | ||||
| -rw-r--r-- | kernel/include/drivers/vga_text_buffer.h | 15 | ||||
| -rw-r--r-- | kernel/include/kernel/spinlock.h | 11 | ||||
| -rw-r--r-- | kernel/include/libk/liballoc.h | 5 | ||||
| -rw-r--r-- | kernel/include/libk/stdio.h | 8 | ||||
| -rw-r--r-- | kernel/include/libk/string.h | 8 | ||||
| -rw-r--r-- | kernel/include/mm/memory_map.h | 9 | ||||
| -rw-r--r-- | kernel/include/mm/multiboot.h | 8 | ||||
| -rw-r--r-- | kernel/include/mm/page_table_allocator.h | 9 | ||||
| -rw-r--r-- | kernel/include/mm/physical.h | 2 | ||||
| -rw-r--r-- | kernel/include/mm/physical_mm.h | 25 | ||||
| -rw-r--r-- | kernel/include/mm/virtual_mm.h | 23 | ||||
| -rw-r--r-- | kernel/include/stddef.h | 468 |
15 files changed, 69 insertions, 578 deletions
diff --git a/kernel/include/boot/gdt.h b/kernel/include/boot/gdt.h index 49067bd..b104db8 100644 --- a/kernel/include/boot/gdt.h +++ b/kernel/include/boot/gdt.h @@ -92,9 +92,6 @@ #define GDT_KERNEL_CODE_OFFSET 0x8 #define GDT_KERNEL_DATA_OFFSET 0x10 -namespace GDT -{ - typedef struct { uint16_t limit_low; uint16_t base_low; @@ -102,18 +99,16 @@ typedef struct { uint8_t access_flags; uint8_t flags_limit_high; uint8_t base_high; -} PACKED entry_t; +} PACKED gdt_entry_t; typedef struct { - uint16_t limit; /* sizeof(GDT) - 1 */ - entry_t *ptr; /* Address of GDT */ -} PACKED descriptor_t; - -extern "C" void _GDT_flush(descriptor_t *descriptor); + uint16_t limit; /* sizeof(GDT) - 1 */ + gdt_entry_t *ptr; /* Address of GDT */ +} PACKED gdt_descriptor_t; -void initialize(void); -void load(void); +void _GDT_flush(gdt_descriptor_t *descriptor); -} +void gdt_initialize(void); +void gdt_load(void); #endif diff --git a/kernel/include/boot/interrupts.h b/kernel/include/boot/interrupts.h index 4df66e9..d436d30 100644 --- a/kernel/include/boot/interrupts.h +++ b/kernel/include/boot/interrupts.h @@ -21,6 +21,7 @@ #include <boot/gdt.h> #include <common.h> +#include <stdbool.h> #include <stdint.h> #define IDT_ENTRY(isr, attributes) \ @@ -36,14 +37,11 @@ #define IDT_PRESENT (1 << 7) #define IDT_KERNEL_PRIVILEGE_LEVEL (0) #define IDT_USER_PRIVILEGE_LEVEL (3 << 5) -#define IDT_TASK_GATE (0b0101) -#define IDT_16BIT_INTERRUPT_GATE (0b0110) -#define IDT_16BIT_TRAP_GATE (0b0111) -#define IDT_32BIT_INTERRUPT_GATE (0b1110) -#define IDT_32BIT_TRAP_GATE (0b1111) - -namespace Interrupts -{ +#define IDT_TASK_GATE (0x05) +#define IDT_16BIT_INTERRUPT_GATE (0x06) +#define IDT_16BIT_TRAP_GATE (0x07) +#define IDT_32BIT_INTERRUPT_GATE (0x0e) +#define IDT_32BIT_TRAP_GATE (0x0f) typedef struct { uint16_t isr_low; @@ -59,16 +57,14 @@ typedef struct { } PACKED descriptor_t; /* Simply loads IDT and enables interrupts */ -void initialize(void); -void enable(void); -void disable(void); +void interrupts_initialize(void); +void interrupts_enable(void); +void interrupts_disable(void); /* IDT */ -void load_idt(void); +void idt_load(void); bool idt_loaded(void); -extern "C" NORETURN void exception_handler(int irq_number); - -} +NORETURN void exception_handler(int irq_number); #endif diff --git a/kernel/include/drivers/serial.h b/kernel/include/drivers/serial.h index 33947eb..48ed75c 100644 --- a/kernel/include/drivers/serial.h +++ b/kernel/include/drivers/serial.h @@ -23,13 +23,8 @@ #define PORT 0x3f8 // COM1 -namespace Serial -{ - -bool initialize(void); -void write_char(const char chr); -void write_string(const char *string); - -} +bool serial_initialize(void); +void serial_write_char(const char chr); +void serial_write_string(const char *string); #endif diff --git a/kernel/include/drivers/vga_text_buffer.h b/kernel/include/drivers/vga_text_buffer.h index 389c864..ada5228 100644 --- a/kernel/include/drivers/vga_text_buffer.h +++ b/kernel/include/drivers/vga_text_buffer.h @@ -43,9 +43,6 @@ #define vga_entry(character, color) \ ((uint16_t) color << 8 | (uint16_t) character) -namespace VGATextBuffer -{ - /* Hardware text mode color constants. */ typedef enum { COLOR_BLACK = 0, @@ -64,13 +61,11 @@ typedef enum { COLOR_LIGHT_MAGENTA = 13, COLOR_LIGHT_BROWN = 14, COLOR_WHITE = 15 -} colors; - -void initialize(void); -void write_char(const char); -void write_string(const char *string); -void printf(const char *string, ...); +} vgatb_colors; -} +void vgatb_initialize(void); +void vgatb_write_char(const char); +void vgatb_write_string(const char *string); +void vgatb_printf(const char *string, ...); #endif diff --git a/kernel/include/kernel/spinlock.h b/kernel/include/kernel/spinlock.h index bd255ad..70c0303 100644 --- a/kernel/include/kernel/spinlock.h +++ b/kernel/include/kernel/spinlock.h @@ -23,14 +23,7 @@ typedef uint8_t spinlock_t; -class Spinlock -{ -private: - spinlock_t m_lock; - -public: - void acquire(void); - void release(void); -}; +void spinlock_acquire(spinlock_t *lock); +void spinlock_release(spinlock_t *lock); #endif diff --git a/kernel/include/libk/liballoc.h b/kernel/include/libk/liballoc.h index b1568e9..82186c4 100644 --- a/kernel/include/libk/liballoc.h +++ b/kernel/include/libk/liballoc.h @@ -21,9 +21,6 @@ #include <stddef.h> -namespace LibAlloc -{ - /** This is a boundary tag which is prepended to the * page or section of a page which we have allocated. It is * used to identify valid memory blocks that the @@ -47,6 +44,4 @@ void *krealloc(void *, size_t); void *kcalloc(size_t, size_t); void kfree(void *); -} - #endif diff --git a/kernel/include/libk/stdio.h b/kernel/include/libk/stdio.h index 44050dd..f944fe4 100644 --- a/kernel/include/libk/stdio.h +++ b/kernel/include/libk/stdio.h @@ -22,10 +22,6 @@ #include <stdarg.h> #include <stddef.h> -#ifdef __cplusplus -extern "C" { -#endif - typedef int (*_printf_engine_output_func)(const char *str, size_t len, void *state); @@ -43,8 +39,4 @@ int vsnprintf(char *str, size_t len, const char *fmt, va_list ap); void printk(const char *from, const char *msg, ...); void printk_raw(const char *msg, ...); -#ifdef __cplusplus -} -#endif - #endif diff --git a/kernel/include/libk/string.h b/kernel/include/libk/string.h index 8ea5b92..88b9888 100644 --- a/kernel/include/libk/string.h +++ b/kernel/include/libk/string.h @@ -21,15 +21,7 @@ #include <stddef.h> -#ifdef __cplusplus -extern "C" { -#endif - size_t strlen(const char *str); void *memset(void *s, int c, size_t n); -#ifdef __cplusplus -} -#endif - #endif diff --git a/kernel/include/mm/memory_map.h b/kernel/include/mm/memory_map.h index de8296b..ec67b64 100644 --- a/kernel/include/mm/memory_map.h +++ b/kernel/include/mm/memory_map.h @@ -30,12 +30,7 @@ typedef struct { multiboot_memory_map_t *region_list[MAX_FREE_REGIONS]; } free_memory_regions_t; -namespace MemoryMap -{ - -void load(multiboot_info_t *mmap); -free_memory_regions_t *get_free_regions(void); - -} +void mmap_load(multiboot_info_t *mmap); +free_memory_regions_t *mmap_get_free_regions(void); #endif diff --git a/kernel/include/mm/multiboot.h b/kernel/include/mm/multiboot.h index d95ab55..d7cd8cc 100644 --- a/kernel/include/mm/multiboot.h +++ b/kernel/include/mm/multiboot.h @@ -94,10 +94,6 @@ #ifndef ASM_FILE -#ifdef __cplusplus -extern "C" { -#endif - typedef uint8_t multiboot_uint8_t; typedef uint16_t multiboot_uint16_t; typedef uint32_t multiboot_uint32_t; @@ -271,10 +267,6 @@ struct multiboot_apm_info { multiboot_uint16_t dseg_len; }; -#ifdef __cplusplus -} -#endif - #endif /* ! ASM_FILE */ #endif /* ! MULTIBOOT_HEADER */ diff --git a/kernel/include/mm/page_table_allocator.h b/kernel/include/mm/page_table_allocator.h index 4a0b0fb..80de80e 100644 --- a/kernel/include/mm/page_table_allocator.h +++ b/kernel/include/mm/page_table_allocator.h @@ -21,12 +21,7 @@ #include <stdint.h> -namespace PageTableAllocator -{ - -uint32_t *allocate(void); -void initialize(void); - -} +uint32_t *pta_allocate(void); +void pta_initialize(void); #endif diff --git a/kernel/include/mm/physical.h b/kernel/include/mm/physical.h new file mode 100644 index 0000000..8f79e1c --- /dev/null +++ b/kernel/include/mm/physical.h @@ -0,0 +1,2 @@ + +pmm_initialize diff --git a/kernel/include/mm/physical_mm.h b/kernel/include/mm/physical_mm.h index abdf178..d10b010 100644 --- a/kernel/include/mm/physical_mm.h +++ b/kernel/include/mm/physical_mm.h @@ -34,40 +34,35 @@ */ #define MAX_BLOCKS 1048576 -namespace PhysicalMM -{ - /* Initialize the memory map by getting all free regions, setting all blocks to * used, initializing regions marked free by the memory map provided by * multiboot, and deinitializing the memory used by the kernel */ -void initialize(void); +void pmm_initialize(void); /* Find and allocate a free memory block, returning the physical address of the * block */ -void *allocate_block(void); +void *pmm_allocate_block(void); /* Free an allocated memory block, given the physical address (from * allocate_block) */ -void free_block(void *physical_address); +void pmm_free_block(void *physical_address); /*-- BITMAP --*/ /* Marks the block as 'used' */ -void set_used(const uint32_t bit, - uint32_t *total_free_blocks, - uint32_t *memory_map); +void pmm_set_used(const uint32_t bit, + uint32_t *total_free_blocks, + uint32_t *memory_map); /* Marks the block as 'unused' */ -void set_usable(const uint32_t bit, - uint32_t *total_free_blocks, - uint32_t *memory_map); +void pmm_set_usable(const uint32_t bit, + uint32_t *total_free_blocks, + uint32_t *memory_map); /* Returns: * True if the bit is set (block is in use) * False if the bit is unset (block isn't in use) */ -bool test_bit(const uint32_t bit, uint32_t *memory_map); - -} +bool pmm_test_bit(const uint32_t bit, uint32_t *memory_map); #endif diff --git a/kernel/include/mm/virtual_mm.h b/kernel/include/mm/virtual_mm.h index 818ce8b..4583fc0 100644 --- a/kernel/include/mm/virtual_mm.h +++ b/kernel/include/mm/virtual_mm.h @@ -69,51 +69,46 @@ #define VIRTUAL_ADDRESS(pd_index, pt_index) \ (((pd_index) << 22) | ((pt_index) << 12)) -namespace VirtualMM -{ - -uint32_t *get_page_directory(void); +uint32_t *vmm_get_page_directory(void); /* * Loads a given page directory into CR0 */ -void load_page_directory(uint32_t *page_directory); +void vmm_load_page_directory(uint32_t *page_directory); /* * Switches the current page directory to a given page directory */ -bool switch_page_directory(uint32_t *page_directory); +bool vmm_switch_page_directory(uint32_t *page_directory); /* * Initialize the virtual memory manager */ -void initialize(void); +void vmm_initialize(void); /* * Map a physical address to a virtual address */ -void map_page(void *physical_address, void *virtual_address); +void vmm_map_page(void *physical_address, void *virtual_address); /* * Unmap a page starting at virtual address */ -void unmap_page(void *virtual_address); +void vmm_unmap_page(void *virtual_address); /* * Find a virtual address with n consecutive free addresses. */ -void *find_free_pages(uint32_t n_pages); +void *vmm_find_free_pages(uint32_t n_pages); /* * Allocate and map n pages. */ -void *alloc_pages(uint32_t n_pages); +void *vmm_alloc_pages(uint32_t n_pages); /* * Free n pages from the starting address. */ -void free_pages(void *starting_address, uint32_t n_pages); - -} +void vmm_free_pages(void *starting_address, uint32_t n_pages); #endif diff --git a/kernel/include/stddef.h b/kernel/include/stddef.h index 46341d7..0510010 100644 --- a/kernel/include/stddef.h +++ b/kernel/include/stddef.h @@ -1,465 +1,29 @@ -/* Copyright (C) 1989-2025 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - -/* https://github.com/gcc-mirror/gcc/blob/master/gcc/ginclude/stddef.h */ - -/* - * ISO C Standard: 7.17 Common definitions <stddef.h> - */ -#if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \ - && !defined(__STDDEF_H__)) \ - || defined(__need_wchar_t) || defined(__need_size_t) \ - || defined(__need_ptrdiff_t) || defined(__need_NULL) \ - || defined(__need_wint_t) - -/* Any one of these symbols __need_* means that GNU libc - wants us just to define one data type. So don't define - the symbols that indicate this file's entire job has been done. */ -#if (!defined(__need_wchar_t) && !defined(__need_size_t) \ - && !defined(__need_ptrdiff_t) && !defined(__need_NULL) \ - && !defined(__need_wint_t)) +#ifndef _STDDEF_H #define _STDDEF_H -#define _STDDEF_H_ -/* snaroff@next.com says the NeXT needs this. */ -#define _ANSI_STDDEF_H -#endif -#ifndef __sys_stdtypes_h -/* This avoids lossage on SunOS but only if stdtypes.h comes first. - There's no way to win with the other order! Sun lossage. */ +#ifndef _BITSIZE_STDDEF_H +#define _BITSIZE_STDDEF_H -#if defined(__NetBSD__) -#include <machine/ansi.h> -#endif - -#if defined (__FreeBSD__) -#include <sys/_types.h> -#endif - -#if defined(__NetBSD__) -#if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_) #define _SIZE_T -#endif -#if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_) -#define _PTRDIFF_T -#endif -/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_ - instead of _WCHAR_T_. */ -#if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_) -#ifndef _BSD_WCHAR_T_ -#define _WCHAR_T -#endif -#endif -/* Undef _FOO_T_ if we are supposed to define foo_t. */ -#if defined (__need_ptrdiff_t) || defined (_STDDEF_H_) -#undef _PTRDIFF_T_ -#undef _BSD_PTRDIFF_T_ -#endif -#if defined (__need_size_t) || defined (_STDDEF_H_) -#undef _SIZE_T_ -#undef _BSD_SIZE_T_ -#endif -#if defined (__need_wchar_t) || defined (_STDDEF_H_) -#undef _WCHAR_T_ -#undef _BSD_WCHAR_T_ -#endif -#endif /* defined(__NetBSD__) */ - -/* Sequent's header files use _PTRDIFF_T_ in some conflicting way. - Just ignore it. */ -#if defined (__sequent__) && defined (_PTRDIFF_T_) -#undef _PTRDIFF_T_ -#endif - -/* On VxWorks, <type/vxTypesBase.h> may have defined macros like - _TYPE_size_t which will typedef size_t. fixincludes patched the - vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is - not defined, and so that defining this macro defines _GCC_SIZE_T. - If we find that the macros are still defined at this point, we must - invoke them so that the type is defined as expected. */ -#if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_)) -_TYPE_ptrdiff_t; -#undef _TYPE_ptrdiff_t -#endif -#if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_)) -_TYPE_size_t; -#undef _TYPE_size_t -#endif -#if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_)) -_TYPE_wchar_t; -#undef _TYPE_wchar_t -#endif - -/* In case nobody has defined these types, but we aren't running under - GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and - __WCHAR_TYPE__ have reasonable values. This can happen if the - parts of GCC is compiled by an older compiler, that actually - include gstddef.h, such as collect2. */ - -/* Signed type of difference of two pointers. */ - -/* Define this type if we are doing the whole job, - or if we want this type in particular. */ -#if defined (_STDDEF_H) || defined (__need_ptrdiff_t) -#ifndef _PTRDIFF_T /* in case <sys/types.h> has defined it. */ -#ifndef _T_PTRDIFF_ -#ifndef _T_PTRDIFF -#ifndef __PTRDIFF_T -#ifndef _PTRDIFF_T_ -#ifndef _BSD_PTRDIFF_T_ -#ifndef ___int_ptrdiff_t_h -#ifndef _GCC_PTRDIFF_T -#ifndef _PTRDIFF_T_DECLARED /* DragonFly */ -#ifndef __DEFINED_ptrdiff_t /* musl libc */ -#define _PTRDIFF_T -#define _T_PTRDIFF_ -#define _T_PTRDIFF -#define __PTRDIFF_T -#define _PTRDIFF_T_ -#define _BSD_PTRDIFF_T_ -#define ___int_ptrdiff_t_h -#define _GCC_PTRDIFF_T -#define _PTRDIFF_T_DECLARED -#define __DEFINED_ptrdiff_t -#ifndef __PTRDIFF_TYPE__ -#define __PTRDIFF_TYPE__ long int -#endif -typedef __PTRDIFF_TYPE__ ptrdiff_t; -#endif /* __DEFINED_ptrdiff_t */ -#endif /* _PTRDIFF_T_DECLARED */ -#endif /* _GCC_PTRDIFF_T */ -#endif /* ___int_ptrdiff_t_h */ -#endif /* _BSD_PTRDIFF_T_ */ -#endif /* _PTRDIFF_T_ */ -#endif /* __PTRDIFF_T */ -#endif /* _T_PTRDIFF */ -#endif /* _T_PTRDIFF_ */ -#endif /* _PTRDIFF_T */ - -/* If this symbol has done its job, get rid of it. */ -#undef __need_ptrdiff_t - -#endif /* _STDDEF_H or __need_ptrdiff_t. */ - -/* Unsigned type of `sizeof' something. */ - -/* Define this type if we are doing the whole job, - or if we want this type in particular. */ -#if defined (_STDDEF_H) || defined (__need_size_t) -#ifndef __size_t__ /* BeOS */ -#ifndef __SIZE_T__ /* Cray Unicos/Mk */ -#ifndef _SIZE_T /* in case <sys/types.h> has defined it. */ -#ifndef _SYS_SIZE_T_H -#ifndef _T_SIZE_ -#ifndef _T_SIZE -#ifndef __SIZE_T -#ifndef _SIZE_T_ -#ifndef _BSD_SIZE_T_ -#ifndef _SIZE_T_DEFINED_ -#ifndef _SIZE_T_DEFINED -#ifndef _BSD_SIZE_T_DEFINED_ /* Darwin */ -#ifndef _SIZE_T_DECLARED /* FreeBSD 5 */ -#ifndef __DEFINED_size_t /* musl libc */ -#ifndef ___int_size_t_h -#ifndef _GCC_SIZE_T -#ifndef _SIZET_ -#ifndef __size_t -#define __size_t__ /* BeOS */ -#define __SIZE_T__ /* Cray Unicos/Mk */ -#define _SIZE_T -#define _SYS_SIZE_T_H -#define _T_SIZE_ -#define _T_SIZE -#define __SIZE_T -#define _SIZE_T_ -#define _BSD_SIZE_T_ -#define _SIZE_T_DEFINED_ -#define _SIZE_T_DEFINED -#define _BSD_SIZE_T_DEFINED_ /* Darwin */ -#define _SIZE_T_DECLARED /* FreeBSD 5 */ -#define __DEFINED_size_t /* musl libc */ -#define ___int_size_t_h -#define _GCC_SIZE_T -#define _SIZET_ -#if defined (__FreeBSD__) \ - || defined(__DragonFly__) \ - || defined(__FreeBSD_kernel__) \ - || defined(__VMS__) -/* __size_t is a typedef, must not trash it. */ +#if defined(__s390__) || defined(__cris__) +typedef unsigned long size_t; #else -#define __size_t -#endif -#ifndef __SIZE_TYPE__ -#define __SIZE_TYPE__ long unsigned int -#endif -#if !(defined (__GNUG__) && defined (size_t)) -typedef __SIZE_TYPE__ size_t; -#ifdef __BEOS__ -typedef long ssize_t; -#endif /* __BEOS__ */ -#endif /* !(defined (__GNUG__) && defined (size_t)) */ -#endif /* __size_t */ -#endif /* _SIZET_ */ -#endif /* _GCC_SIZE_T */ -#endif /* ___int_size_t_h */ -#endif /* __DEFINED_size_t */ -#endif /* _SIZE_T_DECLARED */ -#endif /* _BSD_SIZE_T_DEFINED_ */ -#endif /* _SIZE_T_DEFINED */ -#endif /* _SIZE_T_DEFINED_ */ -#endif /* _BSD_SIZE_T_ */ -#endif /* _SIZE_T_ */ -#endif /* __SIZE_T */ -#endif /* _T_SIZE */ -#endif /* _T_SIZE_ */ -#endif /* _SYS_SIZE_T_H */ -#endif /* _SIZE_T */ -#endif /* __SIZE_T__ */ -#endif /* __size_t__ */ -#undef __need_size_t -#endif /* _STDDEF_H or __need_size_t. */ - - -/* Wide character type. - Locale-writers should change this as necessary to - be big enough to hold unique values not between 0 and 127, - and not (wchar_t) -1, for each defined multibyte character. */ - -/* Define this type if we are doing the whole job, - or if we want this type in particular. */ -#if defined (_STDDEF_H) || defined (__need_wchar_t) -#ifndef __wchar_t__ /* BeOS */ -#ifndef __WCHAR_T__ /* Cray Unicos/Mk */ -#ifndef _WCHAR_T -#ifndef _T_WCHAR_ -#ifndef _T_WCHAR -#ifndef __WCHAR_T -#ifndef _WCHAR_T_ -#ifndef _BSD_WCHAR_T_ -#ifndef _BSD_WCHAR_T_DEFINED_ /* Darwin */ -#ifndef _BSD_RUNE_T_DEFINED_ /* Darwin */ -#ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */ -#ifndef __DEFINED_wchar_t /* musl libc */ -#ifndef _WCHAR_T_DEFINED_ -#ifndef _WCHAR_T_DEFINED -#ifndef _WCHAR_T_H -#ifndef ___int_wchar_t_h -#ifndef __INT_WCHAR_T_H -#ifndef _GCC_WCHAR_T -#define __wchar_t__ /* BeOS */ -#define __WCHAR_T__ /* Cray Unicos/Mk */ -#define _WCHAR_T -#define _T_WCHAR_ -#define _T_WCHAR -#define __WCHAR_T -#define _WCHAR_T_ -#define _BSD_WCHAR_T_ -#define _WCHAR_T_DEFINED_ -#define _WCHAR_T_DEFINED -#define _WCHAR_T_H -#define ___int_wchar_t_h -#define __INT_WCHAR_T_H -#define _GCC_WCHAR_T -#define _WCHAR_T_DECLARED -#define __DEFINED_wchar_t - -/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_ - instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other - symbols in the _FOO_T_ family, stays defined even after its - corresponding type is defined). If we define wchar_t, then we - must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if - we undef _WCHAR_T_, then we must also define rune_t, since - headers like runetype.h assume that if machine/ansi.h is included, - and _BSD_WCHAR_T_ is not defined, then rune_t is available. - machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of - the same type." */ -#ifdef _BSD_WCHAR_T_ -#undef _BSD_WCHAR_T_ -#ifdef _BSD_RUNE_T_ -#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE) -typedef _BSD_RUNE_T_ rune_t; -#define _BSD_WCHAR_T_DEFINED_ -#define _BSD_RUNE_T_DEFINED_ /* Darwin */ -#if defined (__FreeBSD__) && (__FreeBSD__ < 5) -/* Why is this file so hard to maintain properly? In contrast to - the comment above regarding BSD/386 1.1, on FreeBSD for as long - as the symbol has existed, _BSD_RUNE_T_ must not stay defined or - redundant typedefs will occur when stdlib.h is included after this file. */ -#undef _BSD_RUNE_T_ -#endif -#endif -#endif -#endif -/* FreeBSD 5 can't be handled well using "traditional" logic above - since it no longer defines _BSD_RUNE_T_ yet still desires to export - rune_t in some cases... */ -#if defined (__FreeBSD__) && (__FreeBSD__ >= 5) -#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE) -#if __BSD_VISIBLE -#ifndef _RUNE_T_DECLARED -typedef __rune_t rune_t; -#define _RUNE_T_DECLARED -#endif -#endif -#endif +typedef unsigned int size_t; #endif -#ifndef __WCHAR_TYPE__ -#define __WCHAR_TYPE__ int -#endif -#ifndef __cplusplus -typedef __WCHAR_TYPE__ wchar_t; -#endif -#endif -#endif -#endif -#endif -#endif -#endif -#endif /* __DEFINED_wchar_t */ -#endif /* _WCHAR_T_DECLARED */ -#endif /* _BSD_RUNE_T_DEFINED_ */ -#endif -#endif -#endif -#endif -#endif -#endif -#endif -#endif /* __WCHAR_T__ */ -#endif /* __wchar_t__ */ -#undef __need_wchar_t -#endif /* _STDDEF_H or __need_wchar_t. */ - -#if defined (__need_wint_t) -#ifndef _WINT_T -#define _WINT_T - -#ifndef __WINT_TYPE__ -#define __WINT_TYPE__ unsigned int -#endif -typedef __WINT_TYPE__ wint_t; -#endif -#undef __need_wint_t -#endif - -#if defined(__NetBSD__) -/* The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_ - are probably typos and should be removed before 2.8 is released. */ -#ifdef _GCC_PTRDIFF_T_ -#undef _PTRDIFF_T_ -#undef _BSD_PTRDIFF_T_ -#endif -#ifdef _GCC_SIZE_T_ -#undef _SIZE_T_ -#undef _BSD_SIZE_T_ -#endif -#ifdef _GCC_WCHAR_T_ -#undef _WCHAR_T_ -#undef _BSD_WCHAR_T_ -#endif -/* The following ones are the real ones. */ -#ifdef _GCC_PTRDIFF_T -#undef _PTRDIFF_T_ -#undef _BSD_PTRDIFF_T_ -#endif -#ifdef _GCC_SIZE_T -#undef _SIZE_T_ -#undef _BSD_SIZE_T_ -#endif -#ifdef _GCC_WCHAR_T -#undef _WCHAR_T_ -#undef _BSD_WCHAR_T_ -#endif -#endif /* __NetBSD__ */ - -#endif /* __sys_stdtypes_h */ +#define _PTRDIFF_T +typedef signed int ptrdiff_t; -/* A null pointer constant. */ +#endif /* _BITSIZE_STDDEF_H */ -#if defined (_STDDEF_H) || defined (__need_NULL) -#undef NULL /* in case <stdio.h> has defined it. */ -#ifdef __GNUG__ -#define NULL __null -#else /* G++ */ -#ifndef __cplusplus -#define NULL ((void *)0) -#else /* C++ */ +#undef NULL +#ifdef __cplusplus #define NULL 0 -#endif /* C++ */ -#endif /* G++ */ -#endif /* NULL not defined and <stddef.h> or need NULL. */ -#undef __need_NULL - -#ifdef _STDDEF_H - -/* Offset of member MEMBER in a struct of type TYPE. */ -#undef offsetof /* in case a system header has defined it. */ -#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) - -#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) \ - || (defined(__cplusplus) && __cplusplus >= 201103L) -#ifndef _GCC_MAX_ALIGN_T -#define _GCC_MAX_ALIGN_T -/* Type whose alignment is supported in every context and is at least - as great as that of any standard type not using alignment - specifiers. */ -typedef struct { - long long __max_align_ll __attribute__((__aligned__(__alignof__(long long)))); - long double __max_align_ld __attribute__((__aligned__(__alignof__(long double)))); - /* _Float128 is defined as a basic type, so max_align_t must be - sufficiently aligned for it. This code must work in C++, so we - use __float128 here; that is only available on some - architectures, but only on i386 is extra alignment needed for - __float128. */ -#ifdef __i386__ - __float128 __max_align_f128 __attribute__((__aligned__(__alignof(__float128)))); -#endif -} max_align_t; -#endif -#endif /* C11 or C++11. */ - -#if defined(__cplusplus) && __cplusplus >= 201103L -#ifndef _GXX_NULLPTR_T -#define _GXX_NULLPTR_T - typedef decltype(nullptr) nullptr_t; -#endif -#endif /* C++11. */ - -#if (defined (__STDC_VERSION__) && __STDC_VERSION__ > 201710L) -#ifndef _GCC_NULLPTR_T -#define _GCC_NULLPTR_T - typedef __typeof__(nullptr) nullptr_t; -/* ??? This doesn't define __STDC_VERSION_STDDEF_H__ yet. */ -#endif -#endif /* C23. */ - -#if defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L -#define unreachable() (__builtin_unreachable ()) -#define __STDC_VERSION_STDDEF_H__ 202311L +#else +#define NULL ((void *) 0) #endif -#endif /* _STDDEF_H was defined this time */ +#undef offsetof +#define offsetof(t, m) ((size_t) &((t *) 0)->m) -#endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__ - || __need_XXX was not defined before */ +#endif /* _STDDEF_H */ |
