Skip to content

Commit

Permalink
core: first attempt at keyname overhaul
Browse files Browse the repository at this point in the history
  • Loading branch information
kodebach committed Nov 27, 2019
1 parent f03bb14 commit 22ff913
Show file tree
Hide file tree
Showing 16 changed files with 870 additions and 1,072 deletions.
3 changes: 2 additions & 1 deletion src/include/kdbos.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,8 @@ typedef int option_t;

typedef int keyswitch_t;

typedef int elektraNamespace;
// defined as char to allow ++ for iteration over namespaces
typedef char elektraNamespace;

/**@brief Separator for key names.
*
Expand Down
31 changes: 18 additions & 13 deletions src/include/kdbprivate.h
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,8 @@ struct _Key
size_t dataSize;

/**
* The name of the key.
* @see keySetName(), keySetName()
* The canonical (escaped) name of the key.
* @see keyGetName(), keySetName()
*/
char * key;

Expand All @@ -223,6 +223,13 @@ struct _Key
*/
size_t keySize;

/**
* The unescaped name of the key.
* Note: This is NOT a standard null-terminated string.
* @see keyGetName(), keySetName()
*/
char * ukey;

/**
* Size of the unescaped key name in bytes, including all NULL.
* @see keyBaseName(), keyUnescapedName()
Expand Down Expand Up @@ -566,18 +573,7 @@ ssize_t ksSearchInternal (const KeySet * ks, const Key * toAppend);
ssize_t elektraMemcpy (Key ** array1, Key ** array2, size_t size);
ssize_t elektraMemmove (Key ** array1, Key ** array2, size_t size);

ssize_t elektraFinalizeName (Key * key);
ssize_t elektraFinalizeEmptyName (Key * key);

char * elektraEscapeKeyNamePart (const char * source, char * dest);

size_t elektraUnescapeKeyName (const char * source, char * dest);
int elektraUnescapeKeyNamePartBegin (const char * source, size_t size, char ** dest);
char * elektraUnescapeKeyNamePart (const char * source, size_t size, char * dest);


/*Internally used for array handling*/
int elektraValidateKeyName (const char * name, size_t size);
int elektraReadArrayNumber (const char * baseName, kdb_long_long_t * oldIndex);


Expand All @@ -598,6 +594,15 @@ int keyNameIsDir (const char * keyname);
int keyNameIsSystem (const char * keyname);
int keyNameIsUser (const char * keyname);

int keySetNamespace (Key * key, elektraNamespace ns);

elektraNamespace elektraReadNamespace (const char * namespaceStr, size_t len);

int elektraKeyNameValidate (const char * name, int fullKey);
size_t elektraKeyNameCanonicalize (const char * name, char ** canonicalName, size_t offset);
size_t elektraKeyNameUnescape (const char * name, char ** unescapedName, size_t offset);
size_t elektraKeyNameEscapePart (const char * part, char ** escapedPart);

/* global plugin calls */
int elektraGlobalGet (KDB * handle, KeySet * ks, Key * parentKey, int position, int subPosition);
int elektraGlobalSet (KDB * handle, KeySet * ks, Key * parentKey, int position, int subPosition);
Expand Down
2 changes: 2 additions & 0 deletions src/libs/ease/keyname.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
*/
const char * elektraKeyGetRelativeName (Key const * cur, Key const * parentKey)
{
if (cur == NULL || parentKey == NULL) return NULL;

ssize_t offset = 0;

if (strcmp (keyName (parentKey), "/"))
Expand Down

0 comments on commit 22ff913

Please sign in to comment.