| Crinit -- Configurable Rootfs Init
    | 
Implementation of global option storage. More...
#include "globopt.h"#include <pthread.h>#include <stdlib.h>#include "common.h"#include "logio.h"
| Macros | |
| #define | crinitGlobOptSetErrPrint(keyStr) crinitErrPrint("Could not set default value for global option '%s'.", (keyStr)) | 
| #define | crinitGlobOptCommonLock() | 
| #define | crinitGlobOptCommonUnlock() | 
| Functions | |
| int | crinitGlobOptInitDefault (void) | 
| int | crinitGlobOptSetString (size_t memberOffset, const char *val) | 
| int | crinitGlobOptGetString (size_t memberOffset, char **val) | 
| int | crinitGlobOptSetBoolean (size_t memberOffset, bool val) | 
| int | crinitGlobOptGetBoolean (size_t memberOffset, bool *val) | 
| int | crinitGlobOptSetInteger (size_t memberOffset, int val) | 
| int | crinitGlobOptGetInteger (size_t memberOffset, int *val) | 
| int | crinitGlobOptSetUnsignedLL (size_t memberOffset, unsigned long long val) | 
| int | crinitGlobOptGetUnsignedLL (size_t memberOffset, unsigned long long *val) | 
| int | crinitGlobOptSetEnvSet (size_t memberOffset, const crinitEnvSet_t *val) | 
| int | crinitGlobOptGetEnvSet (size_t memberOffset, crinitEnvSet_t *val) | 
| crinitGlobOptStore_t * | crinitGlobOptBorrow (void) | 
| int | crinitGlobOptRemit (void) | 
| void | crinitGlobOptDestroy (void) | 
| Variables | |
| static crinitGlobOptStore_t | crinitGlobOpts | 
| static pthread_mutex_t | crinitOptLock = PTHREAD_MUTEX_INITIALIZER | 
Implementation of global option storage.
| #define crinitGlobOptCommonLock | ( | ) | 
Common boilerplate to acquire a lock on the global option storage.
| #define crinitGlobOptCommonUnlock | ( | ) | 
Common boilerplate to release a lock on the global option storage.
| #define crinitGlobOptSetErrPrint | ( | keyStr | ) | crinitErrPrint("Could not set default value for global option '%s'.", (keyStr)) | 
Common error message for crinitGlobOptInitDefault().
| crinitGlobOptStore_t * crinitGlobOptBorrow | ( | void | ) | 
Provide direct thread-safe access to the central global option storage.
Calling thread will hold an exclusive lock on the central instance of crinitGlobOptStore_t. After the calling thread has finished its operations on the global option storage, it must release the lock using crinitGlobOptRemit().
| void crinitGlobOptDestroy | ( | void | ) | 
Deletes all set global options from storage.
Any allocated memory is freed. The function uses mutexes internally and is thread-safe.
| int crinitGlobOptGetBoolean | ( | size_t | memberOffset, | 
| bool * | val | ||
| ) | 
Retrieves a boolean value from a global option.
Consider using the type-generic macro crinitGlobOptGet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
| memberOffset | The global option to set. | 
| val | Return pointer for the retrieved boolean value. | 
| int crinitGlobOptGetEnvSet | ( | size_t | memberOffset, | 
| crinitEnvSet_t * | val | ||
| ) | 
Retrieves a crinitEnvSet_t value from a global option.
Consider using the type-generic macro crinitGlobOptGet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
| memberOffset | The global option to set. | 
| val | Pointer to the crinitEnvSet_t instance to which the global one will be duplicated. | 
| int crinitGlobOptGetInteger | ( | size_t | memberOffset, | 
| int * | val | ||
| ) | 
Retrieves an integer value from a global option.
Consider using the type-generic macro crinitGlobOptGet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
| memberOffset | The global option to set. | 
| val | Return pointer for the retrieved integer value. | 
| int crinitGlobOptGetString | ( | size_t | memberOffset, | 
| char ** | val | ||
| ) | 
Retrieves a string value from a global option.
Consider using the type-generic macro crinitGlobOptGet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
Will allocate memory for the returned string. When no longer in use, free() should be called on the returned pointer to free the memory.
| memberOffset | The offset of the member of the global option struct to set. | 
| val | Return pointer for the retrieved string. Memory will be allocated. | 
| int crinitGlobOptGetUnsignedLL | ( | size_t | memberOffset, | 
| unsigned long long * | val | ||
| ) | 
Retrieves an unsigned long long value from a global option.
Consider using the type-generic macro crinitGlobOptGet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
| memberOffset | The global option to set. | 
| val | Return pointer for the unsigned long long integer value. | 
| int crinitGlobOptInitDefault | ( | void | ) | 
Sets global options to their default values.
Uses crinitGlobOptSet() and is therefore thread-safe.
| int crinitGlobOptRemit | ( | void | ) | 
Release the lock on the global option storage acquired via crinitGlobOptBorrow().
| int crinitGlobOptSetBoolean | ( | size_t | memberOffset, | 
| bool | val | ||
| ) | 
Stores a boolean value for a global option.
Consider using the type-generic macro crinitGlobOptSet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
| memberOffset | The global option to set. | 
| val | The boolean value to store. | 
| int crinitGlobOptSetEnvSet | ( | size_t | memberOffset, | 
| const crinitEnvSet_t * | val | ||
| ) | 
Stores a crinitEnvSet_t value for a global option.
Consider using the type-generic macro crinitGlobOptSet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
| memberOffset | The global option to set. | 
| val | Pointer to the crinitEnvSet_t which shall be stored. | 
| int crinitGlobOptSetInteger | ( | size_t | memberOffset, | 
| int | val | ||
| ) | 
Stores an integer value for a global option.
Consider using the type-generic macro crinitGlobOptSet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
| memberOffset | The global option to set. | 
| val | The boolean value to store. | 
| int crinitGlobOptSetString | ( | size_t | memberOffset, | 
| const char * | val | ||
| ) | 
Stores a string value for a global option.
Consider using the type-generic macro crinitGlobOptSet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
| memberOffset | The offset of the member of the global option struct to set. | 
| val | The string value to store, must be null-terminated. | 
| int crinitGlobOptSetUnsignedLL | ( | size_t | memberOffset, | 
| unsigned long long | val | ||
| ) | 
Stores an unsigned long long value for a global option.
Consider using the type-generic macro crinitGlobOptSet() which can be used with member names instead of offsets. Will lock the global option storage as long as needed and is thread-safe.
| memberOffset | The global option to set. | 
| val | The unsigned long long integer value to store. | 
| 
 | static | 
Central global option storage.
| 
 | static | 
Mutex to synchronize access to globOptArr