Elektra  0.8.22
Functions
elektra/proposal.c File Reference

Implementation of proposed API enhancements. More...

#include <string.h>
#include <kdbprivate.h>
Include dependency graph for elektra/proposal.c:

Functions

Key * elektraKsPrev (KeySet *ks)
 Returns the previous Key in a KeySet. More...
 
KeySet * elektraRenameKeys (KeySet *config, const char *name)
 Takes the first key and cuts off this common part for all other keys, instead name will be prepended. More...
 
int elektraKeyLock (Key *key, enum elektraLockOptions what)
 Permanently locks a part of the key. More...
 
Key * elektraKsPopAtCursor (KeySet *ks, cursor_t pos)
 Pop key at given cursor position. More...
 

Detailed Description

Implementation of proposed API enhancements.

Function Documentation

◆ elektraKeyLock()

int elektraKeyLock ( Key *  key,
enum elektraLockOptions  what 
)

Permanently locks a part of the key.

This can be:

  • KEY_FLAG_LOCK_NAME to lock the name
  • KEY_FLAG_LOCK_VALUE to lock the value
  • KEY_FLAG_LOCK_META to lock the metadata

To unlock the key, duplicate it.

It is also possible to lock when the key is created with keyNew().

Some data structures need to lock the key (most likely its name), so that the ordering does not get confused.

Parameters
keywhich name should be locked
See also
keyNew(), keyDup(), ksAppendKey()
Return values
>0the bits that were successfully locked
0if everything was locked before
-1if it could not be locked (nullpointer)

◆ elektraKsPopAtCursor()

Key* elektraKsPopAtCursor ( KeySet *  ks,
cursor_t  pos 
)

Pop key at given cursor position.

Parameters
ksthe keyset to pop key from
cwhere to pop

The internal cursor will be rewinded using ksRewind(). You can use ksGetCursor() and ksSetCursor() jump back to the previous position. e.g. to pop at current position within ksNext() loop:

cursor_t c = ksGetCursor(ks);
ksSetCursor(ks, c);
ksPrev(ks); // to have correct key after next ksNext()
Warning
do not use, will be superseded by external iterator API
Returns
the popped key
Return values
0if ks is 0

◆ elektraKsPrev()

Key* elektraKsPrev ( KeySet *  ks)

Returns the previous Key in a KeySet.

KeySets have an internal cursor that can be reset with ksRewind(). Every time ksPrev() is called the cursor is decremented and the new current Key is returned.

You'll get a NULL pointer if the key before begin of the KeySet was reached.

Don't delete the key, use ksPop() if you want to delete it.

Returns
the new current Key
See also
ksRewind(), ksCurrent()

◆ elektraRenameKeys()

KeySet* elektraRenameKeys ( KeySet *  config,
const char *  name 
)

Takes the first key and cuts off this common part for all other keys, instead name will be prepended.

Returns
a new allocated keyset with keys in user namespace.

The first key is removed in the resulting keyset.