Initial commit
This commit is contained in:
60
.gitignore
vendored
Normal file
60
.gitignore
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# Directories
|
||||||
|
build/
|
||||||
|
build-*/
|
||||||
|
cmake-build-*/
|
||||||
|
.cache/
|
||||||
|
out/
|
||||||
|
out/Debug/
|
||||||
|
out/Release/
|
||||||
|
|
||||||
|
# xmake files
|
||||||
|
.xmake
|
||||||
|
.xmake/
|
||||||
|
.xmake/*
|
||||||
|
|
||||||
|
# Cmake files
|
||||||
|
CMakeCache.txt
|
||||||
|
cmake
|
||||||
|
CMakeFiles/
|
||||||
|
cmake_install.cmake
|
||||||
|
CTestTestfile.cmake
|
||||||
|
Testing/
|
||||||
|
compile_commands.json
|
||||||
|
../compile_commands.json
|
||||||
|
build/compile_commands.json
|
||||||
|
|
||||||
|
# Make / Ninja
|
||||||
|
Makefile
|
||||||
|
*.ninja
|
||||||
|
*.ninja_deps
|
||||||
|
*.ninja_log
|
||||||
|
rules.ninja
|
||||||
|
|
||||||
|
# Object files
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.lo
|
||||||
|
*.la
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
*.out
|
||||||
|
*.exe
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*.dylib
|
||||||
|
*.a
|
||||||
|
|
||||||
|
# Debug / Sanitizer
|
||||||
|
*.dSYM/
|
||||||
|
*.gcno
|
||||||
|
*.gcda
|
||||||
|
*.gcov
|
||||||
|
|
||||||
|
# Editors
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
20
include/allocator.h
Normal file
20
include/allocator.h
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#ifndef ALLOCATOR_H
|
||||||
|
#define ALLOCATOR_H
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
typedef struct Allocator Allocator;
|
||||||
|
|
||||||
|
Allocator allocator_default(void);
|
||||||
|
|
||||||
|
struct Allocator {
|
||||||
|
void *ctx;
|
||||||
|
|
||||||
|
void *(*alloc)(void *ctx, size_t size);
|
||||||
|
|
||||||
|
void *(*realloc)(void *ctx, void *ptr, size_t old_size, size_t new_size);
|
||||||
|
|
||||||
|
void (*free)(void *ctx, void *ptr, size_t size);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
29
src/allocator.c
Normal file
29
src/allocator.c
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#include "allocator.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static void *stdlib_alloc(void *ctx, size_t size) {
|
||||||
|
(void)ctx;
|
||||||
|
return malloc(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *stdlib_realloc(void *ctx, void *ptr, size_t old_size,
|
||||||
|
size_t new_size) {
|
||||||
|
(void)ctx;
|
||||||
|
(void)old_size;
|
||||||
|
return realloc(ptr, new_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void stdlib_free(void *ctx, void *ptr, size_t size) {
|
||||||
|
(void)ctx;
|
||||||
|
(void)size;
|
||||||
|
free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
Allocator allocator_default(void) {
|
||||||
|
return (Allocator){
|
||||||
|
.ctx = NULL,
|
||||||
|
.alloc = stdlib_alloc,
|
||||||
|
.realloc = stdlib_realloc,
|
||||||
|
.free = stdlib_free,
|
||||||
|
};
|
||||||
|
}
|
||||||
5
src/main.c
Normal file
5
src/main.c
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#include "allocator.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int main(void) { return EXIT_SUCCESS; }
|
||||||
8
test/test_allocator.c
Normal file
8
test/test_allocator.c
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include "allocator.h"
|
||||||
|
#include <cmocka.h>
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int main(void) { return EXIT_SUCCESS; }
|
||||||
81
xmake.lua
Normal file
81
xmake.lua
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
set_project("allocator")
|
||||||
|
set_version("1.0.0")
|
||||||
|
|
||||||
|
set_languages("c11")
|
||||||
|
|
||||||
|
add_rules("mode.debug", "mode.release")
|
||||||
|
|
||||||
|
-- Export compile_commands.json
|
||||||
|
add_rules("plugin.compile_commands.autoupdate")
|
||||||
|
|
||||||
|
-- =========================================================
|
||||||
|
-- Options
|
||||||
|
-- =========================================================
|
||||||
|
|
||||||
|
option("tests")
|
||||||
|
set_default(false)
|
||||||
|
set_showmenu(true)
|
||||||
|
option_end()
|
||||||
|
|
||||||
|
option("example")
|
||||||
|
set_default(true)
|
||||||
|
set_showmenu(true)
|
||||||
|
option_end()
|
||||||
|
|
||||||
|
option("asan")
|
||||||
|
set_default(false)
|
||||||
|
set_showmenu(true)
|
||||||
|
option_end()
|
||||||
|
|
||||||
|
-- =========================================================
|
||||||
|
-- Library
|
||||||
|
-- =========================================================
|
||||||
|
|
||||||
|
target("allocator")
|
||||||
|
set_kind("static")
|
||||||
|
|
||||||
|
add_files("src/allocator.c")
|
||||||
|
|
||||||
|
add_headerfiles("include/*.h")
|
||||||
|
|
||||||
|
add_includedirs("include", { public = true })
|
||||||
|
|
||||||
|
if is_mode("debug") then
|
||||||
|
add_cflags("-Wall", "-Wextra", "-Wpedantic")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- =========================================================
|
||||||
|
-- Example executable
|
||||||
|
-- =========================================================
|
||||||
|
|
||||||
|
if has_config("example") then
|
||||||
|
target("example")
|
||||||
|
set_kind("binary")
|
||||||
|
|
||||||
|
add_files("src/main.c")
|
||||||
|
|
||||||
|
add_deps("allocator")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- =========================================================
|
||||||
|
-- Tests
|
||||||
|
-- =========================================================
|
||||||
|
|
||||||
|
if has_config("tests") then
|
||||||
|
add_requires("cmocka")
|
||||||
|
|
||||||
|
target("test_mylib")
|
||||||
|
set_kind("binary")
|
||||||
|
|
||||||
|
add_files("test/test_allocator.c")
|
||||||
|
|
||||||
|
add_deps("allocator")
|
||||||
|
|
||||||
|
add_packages("cmocka")
|
||||||
|
|
||||||
|
if has_config("asan") then
|
||||||
|
add_cflags("-fsanitize=address", "-fno-omit-frame-pointer")
|
||||||
|
|
||||||
|
add_ldflags("-fsanitize=address")
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user