Files
K1NG-Driver/includes/tomlc17-R260618/OPTIONS.md
T
2026-07-30 13:18:41 +02:00

70 lines
1.9 KiB
Markdown

# tomlc17 Options
## Setting Options: Custom Allocators
By default, `tomlc17` uses the standard C library `realloc()` and `free()`
functions for memory management. You can override this behavior by setting
custom allocator functions using `toml_set_option()`.
This is useful when you need to:
- Use a custom memory pool or arena allocator
- Track memory allocations for debugging
- Enforce memory constraints in embedded or resource-limited environments
- Integrate with a specialized memory management system
### Example: Using Custom Allocators
```c
#include "tomlc17.h"
#include <stdlib.h>
// Custom realloc function
void* my_realloc(void *ptr, size_t size) {
// Your custom allocation logic here
if (size == 0) {
free(ptr);
return NULL;
}
return realloc(ptr, size);
}
// Custom free function
void my_free(void *ptr) {
// Your custom deallocation logic here
free(ptr);
}
int main() {
// Set custom allocators
toml_option_t opt = toml_default_option();
opt.mem_realloc = my_realloc;
opt.mem_free = my_free;
toml_set_option(opt);
// Now all subsequent parse calls will use your custom allocators
toml_result_t result = toml_parse_file_ex("config.toml");
if (result.ok) {
// Use the parsed data
toml_free(result);
}
return 0;
}
```
### Important Notes
- **Initialization:** Call `toml_set_option()` once during program startup, before
any parsing operations.
- **Thread Safety:** `toml_set_option()` is not thread-safe. Set options only during
initialization in a single-threaded context.
- **Custom Allocator Requirements:** Your custom `mem_realloc` function should behave
like standard `realloc()`:
- When `size > 0`: allocate or resize memory, return pointer or NULL on failure
- When `size == 0`: free memory and return NULL
- Your custom `mem_free` function should handle NULL pointers gracefully
For more details, see the [`toml_set_option()` documentation](API.md#toml_set_option)
in API.md.