$darkmode
Elektra 0.11.0
Enumerations | Functions
kdbhelper.h File Reference

Helper for memory management. More...

#include <kdbmacros.h>
#include <kdbtypes.h>
#include <stdarg.h>
#include <stddef.h>
Include dependency graph for kdbhelper.h:
This graph shows which files directly or indirectly include this file:

Enumerations

enum  elektraLookupOptions {
  KDB_O_SPEC = 1 << 15 , KDB_O_CREATE = 1 << 16 , KDB_O_NOCASCADING = 1 << 17 , KDB_O_NOSPEC = 1 << 18 ,
  KDB_O_NODEFAULT = 1 << 19 , KDB_O_CALLBACK = 1 << 20 , KDB_O_OPMPHM = 1 << 21 , KDB_O_BINSEARCH = 1 << 22
}
 More lookup options. More...
 

Functions

void * elektraMalloc (size_t size)
 Allocate memory for Elektra. More...
 
void * elektraCalloc (size_t size)
 Allocate memory for Elektra. More...
 
void elektraFree (void *ptr)
 Free memory of Elektra or its backends. More...
 
int elektraRealloc (void **buffer, size_t size)
 Reallocate Storage in a save way. More...
 
char * elektraStrDup (const char *s)
 Copy string into new allocated memory. More...
 
void * elektraMemDup (const void *s, size_t l)
 Copy buffer into new allocated memory. More...
 
char char * elektraVFormat (const char *format, va_list arg_list)
 Does string formatting in fresh allocated memory. More...
 
int elektraStrCmp (const char *s1, const char *s2)
 Compare Strings. More...
 
int elektraStrNCmp (const char *s1, const char *s2, size_t n)
 Compare Strings up to a maximum length. More...
 
int elektraStrCaseCmp (const char *s1, const char *s2)
 Compare Strings ignoring case. More...
 
int elektraStrNCaseCmp (const char *s1, const char *s2, size_t n)
 Compare Strings ignoring case up to a maximum length. More...
 
int elektraMemCaseCmp (const char *s1, const char *s2, size_t size)
 Compare two memory regions but make cmp chars uppercase before comparison. More...
 
size_t elektraStrLen (const char *s)
 Calculates the length in bytes of a string. More...
 

Detailed Description

Helper for memory management.

Should be always preferred. Can be used for profiling and tracing.

Enumeration Type Documentation

◆ elektraLookupOptions

More lookup options.

Enumerator
KDB_O_SPEC 

Use the passed key as specification, instead of looking up the specification first.

KDB_O_CREATE 

Create the key if it was not found.

KDB_O_NOCASCADING 

Disable cascading search for keys starting with /.

KDB_O_NOSPEC 

Do not use specification for cascading keys (internal)

KDB_O_NODEFAULT 

Do not honor the default spec (internal)

KDB_O_CALLBACK 

For spec:/ lookups that traverse deeper into hierarchy (callback in ksLookup())

KDB_O_OPMPHM 

Overrule ksLookup search predictor to use OPMPHM, make sure to set ENABLE_OPTIMIZATIONS=ON at cmake.

KDB_O_BINSEARCH 

Overrule ksLookup search predictor to use Binary search for lookup.

Function Documentation

◆ elektraCalloc()

void* elektraCalloc ( size_t  size)

Allocate memory for Elektra.

Memory will be set to 0.

Parameters
sizethe requested size
See also
elektraMalloc

◆ elektraFree()

void elektraFree ( void *  ptr)

Free memory of Elektra or its backends.

Parameters
ptrthe pointer to free

If ptr is NULL, no operation is performed.

See also
elektraMalloc

◆ elektraMalloc()

void* elektraMalloc ( size_t  size)

Allocate memory for Elektra.

if ((buffer = elektraMalloc (length)) == 0) {
// here comes the failure handler
// no allocation happened here, so don't use buffer
#if DEBUG
fprintf (stderr, "Allocation error");
#endif
// return with error
}
void * elektraMalloc(size_t size)
Allocate memory for Elektra.
Definition: internal.c:274
Parameters
sizethe requested size

This function is compatible to ANSI-C malloc

See also
elektraFree
elektraCalloc

◆ elektraMemCaseCmp()

int elektraMemCaseCmp ( const char *  s1,
const char *  s2,
size_t  size 
)

Compare two memory regions but make cmp chars uppercase before comparison.

Parameters
s1The first string to be compared
s2The second string to be compared
sizeto be compared
Returns
a negative number if s1 is less than s2
Return values
0if s1 matches s2
Returns
a positive number if s1 is greater than s2

◆ elektraMemDup()

void* elektraMemDup ( const void *  s,
size_t  n 
)

Copy buffer into new allocated memory.

You need to free the memory yourself.

This function also works with \0 characters in the buffer. The length is taken as given, it must be correct.

Returns
0 if out of memory, a pointer otherwise
Parameters
smust be an allocated buffer
nthe number of bytes to copy from s

◆ elektraRealloc()

int elektraRealloc ( void **  buffer,
size_t  size 
)

Reallocate Storage in a save way.

if (elektraRealloc ((void **) & buffer, new_length) < 0) {
// here comes the failure handler
// you can still use the old buffer
#if DEBUG
fprintf (stderr, "Reallocation error\n");
#endif
elektraFree (buffer);
buffer = 0;
// return with error
}
void elektraFree(void *ptr)
Free memory of Elektra or its backends.
Definition: internal.c:306
int elektraRealloc(void **buffer, size_t size)
Reallocate Storage in a save way.
Definition: internal.c:234
Parameters
bufferis a pointer to a elektraMalloc
sizeis the new size for the memory
Return values
-1on failure
0on success

◆ elektraStrCaseCmp()

int elektraStrCaseCmp ( const char *  s1,
const char *  s2 
)

Compare Strings ignoring case.

Parameters
s1The first string to be compared
s2The second string to be compared
Returns
a negative number if s1 is less than s2
Return values
0if s1 matches s2
Returns
a positive number if s1 is greater than s2

◆ elektraStrCmp()

int elektraStrCmp ( const char *  s1,
const char *  s2 
)

Compare Strings.

Parameters
s1The first string to be compared
s2The second string to be compared
Returns
a negative number if s1 is less than s2
Return values
0if s1 matches s2
Returns
a positive number if s1 is greater than s2

◆ elektraStrDup()

char* elektraStrDup ( const char *  s)

Copy string into new allocated memory.

You need to free the memory yourself.

Note
that size is determined at runtime. So if you have a size information, don't use that function.
Parameters
sthe null-terminated string to duplicate
Returns
0 if out of memory, a pointer otherwise
Precondition
s must be a c-string.
See also
elektraFree
elektraStrLen
elektraMemDup

◆ elektraStrLen()

size_t elektraStrLen ( const char *  s)

Calculates the length in bytes of a string.

This function differs from strlen() because it is Unicode and multibyte chars safe. While strlen() counts characters and ignores the final NULL, elektraStrLen() count bytes including the ending NULL.

It must not be used to search for / in the name, because it does not consider escaping. Instead use the unescaped name.

See also
keyUnescapedName()
Parameters
sthe string to get the length from
Returns
number of bytes used by the string, including the final NULL.

◆ elektraStrNCaseCmp()

int elektraStrNCaseCmp ( const char *  s1,
const char *  s2,
size_t  n 
)

Compare Strings ignoring case up to a maximum length.

Parameters
s1The first string to be compared
s2The second string to be compared
nThe maximum length to be compared
Returns
a negative number if s1 is less than s2
Return values
0if s1 matches s2
Returns
a positive number if s1 is greater than s2

◆ elektraStrNCmp()

int elektraStrNCmp ( const char *  s1,
const char *  s2,
size_t  n 
)

Compare Strings up to a maximum length.

Parameters
s1The first string to be compared
s2The second string to be compared
nThe maximum length to be compared
Returns
a negative number if s1 is less than s2
Return values
0if s1 matches s2
Returns
a positive number if s1 is greater than s2

◆ elektraVFormat()

char char* elektraVFormat ( const char *  format,
va_list  arg_list 
)

Does string formatting in fresh allocated memory.

Parameters
formatas in vprintf()
arg_listas in vprintf()
Returns
new allocated memory (free with elektraFree)