Go to the first, previous, next, last section, table of contents.

# 12. Customizing

## 12.1 Error handling

When a fatal error occurs, an error message is output to the standard error output stream, and the function `cl_abort` is called. The default version of this function (provided in the library) terminates the application. To catch such a fatal error, you need to define the function `cl_abort` yourself, with the prototype

    #include <cln/abort.h>
    void cl_abort (void);

This function must not return control to its caller.

## 12.2 Floating-point underflow

Floating point underflow denotes the situation when a floating-point number is to be created which is so close to `0` that its exponent is too low to be represented internally. By default, this causes a fatal error. If you set the global variable

    cl_boolean cl_inhibit_floating_point_underflow

to `cl_true`, the error will be inhibited, and a floating-point zero will be generated instead. The default value of `cl_inhibit_floating_point_underflow` is `cl_false`.

## 12.3 Customizing I/O

The output of the function `fprint` may be customized by changing the value of the global variable `default_print_flags`.

## 12.4 Customizing the memory allocator

Every memory allocation of CLN is done through the function pointer `malloc_hook`. Freeing of this memory is done through the function pointer `free_hook`. The default versions of these functions, provided in the library, call `malloc` and `free` and check the `malloc` result against `NULL`. If you want to provide another memory allocator, you need to define the variables `malloc_hook` and `free_hook` yourself, like this:

    #include <cln/malloc.h>
    namespace cln {
            void* (*malloc_hook) (size_t size) = ...;
            void (*free_hook) (void* ptr)      = ...;
    }

The `cl_malloc_hook` function must not return a `NULL` pointer.

It is not possible to change the memory allocator at runtime, because it is already called at program startup by the constructors of some global variables.

Go to the first, previous, next, last section, table of contents.