DLibC
Description
Some custom C types and functions I often use. These are generally header-only, but if they have source files, they'll be in their own directories
They're generally designed for C23 onwards, but "should" work with older versions.
The goal is for the types themselves to be memory-safe, however keep in mind that they're still only as good as your usage of them.
Usage
Literally just copy the header file you want and let your favourite semi-usable build system do the rest.
List of "What we have"
dlibc/vector.h- A vector type for storing a dynamic amount of type T, with an optional destructor.dlibc/set.h- A set type for storing a dynamic amount of type T, with enforced uniqueness and an optional destructor and comparator.
Contributing
If you want to contribute, please make a pull request and I'll review it. If you want to contribute a new type or function, please make sure it is useful and not just a "cool" thing.
If you change an existing type, please run make in build/ directory and ctest to ensure compatibility hasn't been broken.
Since the whole point is memory safety, please also run the suite with the sanitizers before opening a pull request:
cmake -S . -B build-asan -DDLIBC_SANITIZE=ON && cmake --build build-asan
ctest --test-dir build-asan --output-on-failure
Use ctest -V to see every individual assertion, and -DDLIBC_C_STANDARD=23 to build against C23 instead of the default C11.
If it's new, please write a test for it in tests/test_.c so others can see the guidelines on how the type is used. The tests use a tiny in-tree harness, tests/dtest.h, which is just a list of named cases and some CHECK_ macros - there is no external framework to install.
Legal Mumbo Jumbo
Licensed under the MIT License (because GPL doesn't make sense for this (sorry Stallman))
Copyright (c) 2026 DcruBro