Overview
The C-Util Project is a collection of utility libraries for the C11 language. The libraries follow common rules and are designed in a consistent style. Prominent properties include:
-
Unbundled: The different projects implement each only a single functionality, mostly provided independently of the other projects. Bundling is avoided if possible, but it is not discouraged. On the contrary, if provided as shared library on a target system, downstream bundling is encouraged.
-
Self-Contained: The libraries aim to be self-contained, with minimal external, mandatory dependencies. This means, the APIs are designed to allow for the library user to choose and provide the required resources, rather than depending directly on a specific project.
-
C11+: C11 is mandatory! Furthermore, several non-standard compiler features are used to provide ergonomic APIs and make C less cumbersome to use. This includes automatic variable cleanup, block expressions, automatic type deduction, and more.
The C-Util project is a loose collection of mostly independent utility libraries. There is no overall scope which these libraries try to cover. On the contrary, the scope to cover is in no way limited. Their only connection is the common development style and project maintenance.
Projects
-
c-bus1: Bus1 Capability-based IPC Bindings for ISO-C11
The c-bus1 project provides access to the bus1 APIs from standard C code. The bus1 APIs implement object-oriented Inter-Process Communication in a scalable way for services and operating system tasks to share signals, data, and resources, while at the same time providing maximum isolation of the different communication entities.
- Repository: @github
-
c-dvar: D-Bus Variant Type-System
The c-dvar project implements the D-Bus Variant Type-System. It is a simple stream encoder and decoder, according to the D-Bus Specification. It is a self-contained implementation centered around the D-Bus Variant Type-System, suitable for any project handling D-Bus.
- Repository: @github
-
c-ini: Ini-File Handling
The c-ini project implements APIs to deal with ini-files. Different formats can be supported, but all share common ini-file properties, mainly that they are human-readable, grouped key-value pairs.
- Repository: @github
-
c-json: Streaming-capable JSON Implementation
The c-json project implements a streaming API for json serialization and deserialization in Standard ISO-C11. For API documentation, see the
c-json.h
header file, as well as the docbook comments for each function.- Repository: @github
-
c-list: Circular Intrusive Double Linked List Collection
The c-list project implements an intrusive collection based on circular double linked lists in ISO-C11.
- Repository: @github
-
c-rbtree: Intrusive Red-Black Tree Collection
The c-rbtree project implements an intrusive collection based on red-black-trees in ISO-C11. Its API guarantees the user full control over its data-structures, and rather limits itself to just the tree-specific rebalancing and coloring operations.
- Repository: @github
-
c-shquote: POSIX Shell Compatible Argument Parser
The c-shquote project is a standalone implementation of POSIX Shell compatible argument parsing.
- Repository: @github
-
c-siphash: Streaming-capable SipHash Implementation
The c-siphash project provides streaming-capable APIs to compute data hashes according to the SipHash algorithm.
- Repository: @github
-
c-stdaux: Auxiliary macros and functions for the C standard library
The c-stdaux project contains support-macros and auxiliary functions around the functionality of common C standard libraries. This includes helpers for the ISO-C Standard Library, but also other common specifications like POSIX or common extended features of wide-spread compilers like gcc and clang.
- Repository: @github
-
c-utf8: UTF-8 Handling in Standard ISO-C11
The c-utf8 project implements utility functions around handling UTF-8 in ISO-C11.
- Repository: @github
Maintenance
All c-util projects are released under the terms of the Apache Software License 2.0, Copyright © 2015-2022 Red Hat, Inc. as well as the terms of the Lesser General Public License 2.1+.
- License: Apache Software License 2.0
- License: Lesser General Public License 2.1+
- Maintainers: David Rheinsberg, Tom Gundersen
- Mailing-List: bus1-devel @googlegroups