Elektra
0.8.10
|
Methods to do various operations on Key values. More...
Functions | |
const void * | keyValue (const Key *key) |
const char * | keyString (const Key *key) |
ssize_t | keyGetValueSize (const Key *key) |
ssize_t | keyGetString (const Key *key, char *returnedString, size_t maxSize) |
ssize_t | keySetString (Key *key, const char *newStringValue) |
ssize_t | keyGetBinary (const Key *key, void *returnedBinary, size_t maxSize) |
ssize_t | keySetBinary (Key *key, const void *newBinary, size_t dataSize) |
const char * | keyComment (const Key *key) |
ssize_t | keyGetCommentSize (const Key *key) |
ssize_t | keyGetComment (const Key *key, char *returnedComment, size_t maxSize) |
ssize_t | keySetComment (Key *key, const char *newComment) |
Methods to do various operations on Key values.
A key can contain a value in different format. The most likely situation is, that the value is interpreted as text. Use keyGetString() for that. You can save any Unicode Symbols and Elektra will take care that you get the same back, independent of your current environment.
In some situations this idea fails. When you need exactly the same value back without any interpretation of the characters, there is keySetBinary(). If you use that, its very likely that your Configuration is not according to the standard. Also for Numbers, Booleans and Date you should use keyGetString(). To do so, you might use strtod() strtol() and then atol() or atof() to convert back.
To use them:
const char* keyComment | ( | const Key * | key | ) |
Return a pointer to the real internal key
comment.
This is a much more efficient version of keyGetComment() and you should use it if you are responsible enough to not mess up things. You are not allowed to change anything in the memory region the returned pointer points to.
keyComment() returns "" when there is no keyComment. The reason is
See keySetComment() for more information on comments.
key | the key object to work with |
ssize_t keyGetBinary | ( | const Key * | key, |
void * | returnedBinary, | ||
size_t | maxSize | ||
) |
Get the value of a key as a binary.
If the type is not binary -1 will be returned.
When the binary data is empty (this is not the same as ""!) 0 will be returned and the returnedBinary will not be changed.
For string values see keyGetString() and keyIsString().
When the returnedBinary is to small to hold the data (its maximum size is given by maxSize), the returnedBinary will not be changed and -1 is returned.
key | the object to gather the value from |
returnedBinary | pre-allocated memory to store a copy of the key value |
maxSize | number of bytes of pre-allocated memory in returnedBinary |
returnedBinary
0 | if the binary is empty |
-1 | on NULL pointers |
-1 | if maxSize is 0 |
-1 | if maxSize is too small for string |
-1 | if maxSize is larger than SSIZE_MAX |
-1 | on type mismatch: binary expected, but found string |
ssize_t keyGetComment | ( | const Key * | key, |
char * | returnedComment, | ||
size_t | maxSize | ||
) |
Get the key comment.
A Key comment is description for humans what this key is for. It may be a textual explanation of valid values, when and why a user or administrator changed the key or any other text that helps the user or administrator related to that key.
Don't depend on a comment in your program. A user is always allowed to remove or change it in any way he wants to. But you are allowed or even encouraged to always show the content of the comment to the user and allow him to change it.
key | the key object to work with |
returnedComment | pre-allocated memory to copy the comments to |
maxSize | number of bytes that will fit returnedComment |
returnedString
, including final NULL ssize_t keyGetCommentSize | ( | const Key * | key | ) |
Calculates number of bytes needed to store a key comment, including final NULL.
Use this method to know to size for allocated memory to retrieve a key comment.
See keySetComment() for more information on comments.
For an empty key name you need one byte to store the ending NULL. For that reason 1 is returned.
key | the key object to work with |
ssize_t keyGetString | ( | const Key * | key, |
char * | returnedString, | ||
size_t | maxSize | ||
) |
Get the value of a key as a string.
When there is no value inside the string, 1 will be returned and the returnedString will be empty "" to avoid programming errors that old strings are shown to the user.
For binary values see keyGetBinary() and keyIsBinary().
key | the object to gather the value from |
returnedString | pre-allocated memory to store a copy of the key value |
maxSize | number of bytes of allocated memory in returnedString |
returnedString
, including final NULL 1 | if the string is empty |
-1 | on any NULL pointers |
-1 | on type mismatch: string expected, but found binary |
-1 | maxSize is 0 |
-1 | if maxSize is too small for string |
-1 | if maxSize is larger than SSIZE_MAX |
ssize_t keyGetValueSize | ( | const Key * | key | ) |
Returns the number of bytes needed to store the key value, including the NULL terminator.
It returns the correct size, independent of the Key Type. If it is a binary there might be '\0' values in it.
For an empty string you need one byte to store the ending NULL. For that reason 1 is returned. This is not true for binary data, so there might be returned 0 too.
A binary key has no '\0' termination. String types have it, so to there length will be added 1 to have enough space to store it.
This method can be used with malloc() before keyGetString() or keyGetBinary() is called.
key | the key object to work with |
ssize_t keySetBinary | ( | Key * | key, |
const void * | newBinary, | ||
size_t | dataSize | ||
) |
Set the value of a key as a binary.
A private copy of newBinary
will allocated and saved inside key
, so the parameter can be deallocated after the call.
Binary values might be encoded in another way then string values depending on the plugin. Typically character encodings should not take place on binary data. Consider using a string key instead.
When newBinary is a NULL pointer the binary will be freed and 0 will be returned.
key | the object on which to set the value |
newBinary | is a pointer to any binary data or NULL to free the previous set data |
dataSize | number of bytes to copy from newBinary |
ssize_t keySetComment | ( | Key * | key, |
const char * | newComment | ||
) |
Set a comment for a key.
A key comment is like a configuration file comment. See keySetComment() for more information.
key | the key object to work with |
newComment | the comment, that can be freed after this call. |
ssize_t keySetString | ( | Key * | key, |
const char * | newStringValue | ||
) |
Set the value for key
as newStringValue
.
The function will allocate and save a private copy of newStringValue
, so the parameter can be freed after the call.
String values will be saved in backend storage, when kdbSetKey() will be called, in UTF-8 universal encoding, regardless of the program's current encoding, when iconv plugin is present.
key | the key to set the string value |
newStringValue | NULL-terminated text string to be set as key's value |
1 | if newStringValue is a NULL pointer, this will make the string empty (string only containing null termination) |
-1 | if key is a NULL pointer |
const char* keyString | ( | const Key * | key | ) |
Get the c-string representing the value.
Will return (null) on null pointers. Will return (binary) on binary data not ended with a null byte.
It is not checked if it is actually a string, only if it terminates for security reasons.
(null) | on null keys |
"" | if no data found |
(binary) | on binary keys |
key | the key object to get the string from |
const void* keyValue | ( | const Key * | key | ) |
Return a pointer to the real internal key
value.
This is a much more efficient version of keyGetString() keyGetBinary(), and you should use it if you are responsible enough to not mess up things. You are not allowed to modify anything in the returned string. If you need a copy of the Value, consider to use keyGetString() or keyGetBinary() instead.
If key
is string (keyIsString()), you may cast the returned as a "char *"
because you'll get a NULL terminated regular string.
keyValue() returns "" in string mode when there is no value. The reason is
If the data is binary, the size of the value must be determined by keyGetValueSize(), any strlen() operations are not suitable to determine the size.
keyValue() returns 0 in binary mode when there is no value. The reason is
key | the key object to work with |