mirror of https://github.com/flysand7/ciabatta.git
Replace platform.h by more specific os.h and compiler.h
This commit is contained in:
parent
605412d34c
commit
b7c72f49ea
|
@ -1,45 +1,24 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <_platform.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <_compiler.h>
|
||||||
|
#include <_os.h>
|
||||||
|
|
||||||
// TODO: use abort() to break
|
// TODO: use abort() to break
|
||||||
#if defined(_compiler_msvc)
|
|
||||||
#include <intrin.h>
|
|
||||||
#define brk __debugbreak
|
|
||||||
#else
|
|
||||||
#define brk __builtin_trap
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_os_win)
|
extern void _assert_error(
|
||||||
#define WIN32_LEAN_AND_MEAN
|
char *cond,
|
||||||
#include <Windows.h>
|
char const *func,
|
||||||
|
char const *file,
|
||||||
// TODO: make it work via printf
|
char const *line
|
||||||
static void _assert_win32_prints(HANDLE conout, char const *str) {
|
) {
|
||||||
DWORD written = 0;
|
printf("Assertion failed: %s\n", cond);
|
||||||
WriteConsole(conout, str, strlen(str), &written, NULL);
|
if(*func != 0) {
|
||||||
}
|
printf("\tFunction: %s\n", func);
|
||||||
|
|
||||||
extern void _assert_error(char *cond, char const *func, char const *file, char const *line) {
|
|
||||||
HANDLE conout = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
||||||
if(conout != INVALID_HANDLE_VALUE) {
|
|
||||||
_assert_win32_prints(conout, "Assertion Failed: ");
|
|
||||||
_assert_win32_prints(conout, cond);
|
|
||||||
_assert_win32_prints(conout, "\n\tFile: ");
|
|
||||||
_assert_win32_prints(conout, file);
|
|
||||||
_assert_win32_prints(conout, "\n\tFunc: ");
|
|
||||||
_assert_win32_prints(conout, func);
|
|
||||||
_assert_win32_prints(conout, "\n\tLine: ");
|
|
||||||
_assert_win32_prints(conout, line);
|
|
||||||
}
|
}
|
||||||
else {
|
printf("\tFile: %s\n", file);
|
||||||
// TODO:
|
printf("\tLine: %s\n", line);
|
||||||
MessageBoxA(NULL,
|
_compiler_brk();
|
||||||
"Assertion Failed Somewhere, good luck finding it!\n",
|
|
||||||
"Error",
|
|
||||||
MB_OK);
|
|
||||||
}
|
|
||||||
brk();
|
|
||||||
}
|
}
|
||||||
#endif
|
|
|
@ -2,7 +2,7 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include <_platform.h>
|
#include <_os.h>
|
||||||
|
|
||||||
#define __STDC_WANT_LIB_EXT1__ 1
|
#define __STDC_WANT_LIB_EXT1__ 1
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
|
@ -195,7 +195,6 @@ size_t strlen(const char *s) {
|
||||||
|
|
||||||
size_t strnlen_s(const char *s, size_t maxsize) {
|
size_t strnlen_s(const char *s, size_t maxsize) {
|
||||||
if (s == NULL) return 0;
|
if (s == NULL) return 0;
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
while (s[i] && i < maxsize) {
|
while (s[i] && i < maxsize) {
|
||||||
i++;
|
i++;
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && !defined(__clang__)
|
||||||
|
#define _compiler_msvc
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__)
|
||||||
|
#define _compiler_gnu
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
#define _compiler_clang
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__CUIKC__)
|
||||||
|
#define _compiler_cuik
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !(defined(_compiler_msvc) \
|
||||||
|
|| defined(_compiler_gnu) \
|
||||||
|
|| defined(_compiler_cuik) \
|
||||||
|
|| defined(_compiler_clang))
|
||||||
|
#error "Unsupported Compiler"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_compiler_msvc)
|
||||||
|
#include <intrin.h>
|
||||||
|
#define _compiler_brk __debugbreak
|
||||||
|
#elif defined(_compiler_gcc) || defined(_compiler_clang)
|
||||||
|
#define _compiler_brk __builtin_trap
|
||||||
|
#else
|
||||||
|
#error "_compiler_brk is not implemented for this compiler"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_compiler_msvc)
|
||||||
|
#define _compiler_curfunc __FUNCTION__
|
||||||
|
#elif defined(_compiler_gcc) || defined(_compiler_clang)
|
||||||
|
#define _compiler_curfunc __func__
|
||||||
|
#else
|
||||||
|
#error "_compiler_curfunc not implemented for this compiler"
|
||||||
|
#endif
|
|
@ -6,10 +6,3 @@
|
||||||
|
|
||||||
#define _con(a,b) a ## b
|
#define _con(a,b) a ## b
|
||||||
|
|
||||||
#if !defined(_func)
|
|
||||||
#if defined(_compiler_msvc)
|
|
||||||
#define _func __FUNCTION__
|
|
||||||
#else
|
|
||||||
#define _func __func__
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define _os_win
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__linux__) && !defined(__ANDROID__)
|
||||||
|
#define _os_linux
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !(defined(_os_win) \
|
||||||
|
|| defined(_os_linux))
|
||||||
|
#error "Unsupported OS"
|
||||||
|
#endif
|
|
@ -1,54 +0,0 @@
|
||||||
#pragma once
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// Microsoft uses this to refer to the secure functions so we'll allow it
|
|
||||||
#ifdef __STDC_WANT_SECURE_LIB__
|
|
||||||
#define __STDC_WANT_LIB_EXT1__ 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Compiler Identification
|
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(__clang__)
|
|
||||||
#define _compiler_msvc
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__GNUC__) && !defined(__clang__)
|
|
||||||
#define _compiler_gnu
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__clang__)
|
|
||||||
#define _compiler_clang
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__CUIKC__)
|
|
||||||
#define _compiler_cuik
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !(defined(_compiler_msvc) \
|
|
||||||
|| defined(_compiler_gnu) \
|
|
||||||
|| defined(_compiler_cuik) \
|
|
||||||
|| defined(_compiler_clang))
|
|
||||||
#error "Unsupported Compiler"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// OS Identification
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
#define _os_win
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__linux__) && !defined(__ANDROID__)
|
|
||||||
#define _os_linux
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !(defined(_os_win) \
|
|
||||||
|| defined(_os_linux))
|
|
||||||
#error "Unsupported OS"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __STDC_WANT_LIB_EXT1__
|
|
||||||
typedef int errno_t;
|
|
||||||
typedef size_t rsize_t;
|
|
||||||
#endif
|
|
||||||
|
|
14
inc/assert.h
14
inc/assert.h
|
@ -1,8 +1,14 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "_compiler.h"
|
||||||
#include "_macros.h"
|
#include "_macros.h"
|
||||||
|
|
||||||
extern void _assert_error(char *cond, char const *func, char const *file, char const *line);
|
extern void _assert_error(
|
||||||
|
char *cond,
|
||||||
|
char const *func,
|
||||||
|
char const *file,
|
||||||
|
char const *line
|
||||||
|
);
|
||||||
|
|
||||||
#if defined(NDEBUG)
|
#if defined(NDEBUG)
|
||||||
#define assert(ignore) ((void)0)
|
#define assert(ignore) ((void)0)
|
||||||
|
@ -11,7 +17,11 @@ extern void _assert_error(char *cond, char const *func, char const *file, char c
|
||||||
#define assert(condition) \
|
#define assert(condition) \
|
||||||
do { \
|
do { \
|
||||||
if(!(condition)) { \
|
if(!(condition)) { \
|
||||||
_assert_error(#condition, _func, __FILE__, _str(__LINE__)); \
|
_assert_error( \
|
||||||
|
#condition, \
|
||||||
|
_compiler_curfunc, \
|
||||||
|
__FILE__, \
|
||||||
|
_str(__LINE__)); \
|
||||||
} \
|
} \
|
||||||
} while(0)
|
} while(0)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#error "Complex Numbers aren't implemented"
|
#error "Complex Numbers aren't implemented"
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "_platform.h"
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#define EDOM 1
|
#define EDOM 1
|
||||||
#define EILSEQ 2
|
#define EILSEQ 2
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
typedef unsigned long fexcept_t;
|
typedef unsigned long fexcept_t;
|
||||||
typedef struct fenv_t fenv_t;
|
typedef struct fenv_t fenv_t;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "_platform.h"
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
typedef float float_t;
|
typedef float float_t;
|
||||||
typedef double double_t;
|
typedef double double_t;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "_platform.h"
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
typedef int sig_atomic_t;
|
typedef int sig_atomic_t;
|
||||||
|
|
||||||
|
|
28
inc/stdio.h
28
inc/stdio.h
|
@ -1,8 +1,23 @@
|
||||||
#include "_platform.h"
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
typedef struct FILE FILE;
|
typedef struct FILE FILE;
|
||||||
typedef int64_t fpos_t;
|
typedef int64_t fpos_t;
|
||||||
|
|
||||||
|
#if !defined(__STDC_LIB_EXT1__)
|
||||||
|
#define __STDC_LIB_EXT1__
|
||||||
|
typedef int errno_t;
|
||||||
|
typedef size_t rsize_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __STDC_WANT_SECURE_LIB__
|
||||||
|
#if !defined(__STDC_WANT_LIB_EXT1__)
|
||||||
|
#define __STDC_WANT_LIB_EXT1__ 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#define _IOFBF 0x0000
|
#define _IOFBF 0x0000
|
||||||
#define _IOLBF 0x0040
|
#define _IOLBF 0x0040
|
||||||
#define _IONBF 0x0004
|
#define _IONBF 0x0004
|
||||||
|
@ -75,10 +90,9 @@ int feof(FILE *stream);
|
||||||
int ferror(FILE *stream);
|
int ferror(FILE *stream);
|
||||||
void perror(const char *s);
|
void perror(const char *s);
|
||||||
|
|
||||||
#ifdef __STDC_WANT_LIB_EXT1__
|
#if __STDC_WANT_LIB_EXT1__ == 1
|
||||||
#define L_tmpnam_s L_tmpnam
|
#define L_tmpnam_s L_tmpnam
|
||||||
#define TMP_MAX_S TMP_MAX
|
#define TMP_MAX_S TMP_MAX
|
||||||
|
errno_t tmpfile_s(FILE * restrict * restrict streamptr);
|
||||||
errno_t tmpfile_s(FILE * restrict * restrict streamptr);
|
errno_t tmpnam_s(char *s, rsize_t maxsize);
|
||||||
errno_t tmpnam_s(char *s, rsize_t maxsize);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
11
inc/stdlib.h
11
inc/stdlib.h
|
@ -1,9 +1,20 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#if !defined(NULL)
|
#if !defined(NULL)
|
||||||
#define NULL ((void *)0)
|
#define NULL ((void *)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__STDC_LIB_EXT1__)
|
||||||
|
#define __STDC_LIB_EXT1__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __STDC_WANT_SECURE_LIB__
|
||||||
|
#if !defined(__STDC_WANT_LIB_EXT1__)
|
||||||
|
#define __STDC_WANT_LIB_EXT1__ 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// typedef struct div_t {
|
// typedef struct div_t {
|
||||||
// int quot;
|
// int quot;
|
||||||
// int rem;
|
// int rem;
|
||||||
|
|
34
inc/string.h
34
inc/string.h
|
@ -5,6 +5,18 @@
|
||||||
#define NULL ((void *)0)
|
#define NULL ((void *)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__STDC_LIB_EXT1__)
|
||||||
|
#define __STDC_LIB_EXT1__
|
||||||
|
typedef int errno_t;
|
||||||
|
typedef size_t rsize_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __STDC_WANT_SECURE_LIB__ == 1
|
||||||
|
#if !defined(__STDC_WANT_LIB_EXT1__)
|
||||||
|
#define __STDC_WANT_LIB_EXT1__ 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// int _wcsicmp(const wchar_t *string1, const wchar_t *string2);
|
// int _wcsicmp(const wchar_t *string1, const wchar_t *string2);
|
||||||
|
|
||||||
void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
|
void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
|
||||||
|
@ -31,15 +43,15 @@ char *strerror(int errnum);
|
||||||
size_t strlen(const char *s);
|
size_t strlen(const char *s);
|
||||||
|
|
||||||
#if __STDC_WANT_LIB_EXT1__ == 1
|
#if __STDC_WANT_LIB_EXT1__ == 1
|
||||||
int memcpy_s(void * restrict s1, size_t s1max, const void * restrict s2, size_t n);
|
errno_t memcpy_s(void * restrict s1, rsize_t s1max, const void * restrict s2, rsize_t n);
|
||||||
int memmove_s(void *s1, size_t s1max, const void *s2, size_t n);
|
errno_t memmove_s(void *s1, rsize_t s1max, const void *s2, rsize_t n);
|
||||||
int strcpy_s(char * restrict s1, size_t s1max, const char * restrict s2);
|
errno_t strcpy_s(char * restrict s1, rsize_t s1max, const char * restrict s2);
|
||||||
int strncpy_s(char * restrict s1, size_t s1max,const char * restrict s2, size_t n);
|
errno_t strncpy_s(char * restrict s1, rsize_t s1max,const char * restrict s2, rsize_t n);
|
||||||
int strcat_s(char * restrict s1, size_t s1max, const char * restrict s2);
|
errno_t strcat_s(char * restrict s1, rsize_t s1max, const char * restrict s2);
|
||||||
int strncat_s(char * restrict s1, size_t s1max, const char * restrict s2, size_t n);
|
errno_t strncat_s(char * restrict s1, rsize_t s1max, const char * restrict s2, rsize_t n);
|
||||||
char *strtok_s(char * restrict s1, size_t * restrict s1max, const char * restrict s2, char ** restrict ptr);
|
char *strtok_s(char * restrict s1, rsize_t * restrict s1max, const char * restrict s2, char ** restrict ptr);
|
||||||
int memset_s(void *s, size_t smax, int c, size_t n);
|
errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n);
|
||||||
int strerror_s(char *s, size_t maxsize, int errnum);
|
errno_t strerror_s(char *s, rsize_t maxsize, errno_t errnum);
|
||||||
size_t strerrorlen_s(int errnum);
|
size_t strerrorlen_s(errno_t errnum);
|
||||||
size_t strnlen_s(const char *s, size_t maxsize);
|
size_t strnlen_s(const char *str, size_t strsz);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
/*
|
/*
|
||||||
these are type generic so they're macrod and use C11's _Generic
|
these are type generic so they're macrod and use C11's _Generic
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#define thread_local _Thread_local
|
#define thread_local _Thread_local
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "_platform.h"
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
typedef struct mbstate_t mbstate_t;
|
typedef struct mbstate_t mbstate_t;
|
||||||
typedef uint16_t char16_t;
|
typedef uint16_t char16_t;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// On linux this will be UTF-32, on windows it's UTF-16
|
|
||||||
#include "_platform.h"
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// On linux this will be UTF-32, on windows it's UTF-16 (or maybe UCS-2?)
|
||||||
typedef struct mbstate_t mbstate_t;
|
typedef struct mbstate_t mbstate_t;
|
||||||
typedef wchar_t wint_t;
|
typedef wchar_t wint_t;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "_platform.h"
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
typedef int wint_t;
|
typedef int wint_t;
|
||||||
wctrans_t;
|
wctrans_t;
|
||||||
|
|
Loading…
Reference in New Issue