/** * Check whether a key is under the @p user namespace or not. * * @param key the key object to work with * @retval 1 if key name begins with @p user, 0 otherwise * @retval -1 on NULL pointer * @see keyIsSystem(), keySetName(), keyName() * @ingroup keytest * */ int keyIsUser(const Key *key) { if (!key) return -1; if (key->key) return keyNameIsUser(key->key); else return 0; }
/** * @internal */ static int keyGetNameNamespace(const char *name) { if (!name) return KEY_NS_EMPTY; if (!strcmp(name, "")) return KEY_NS_EMPTY; if (name[0] == '/') return KEY_NS_CASCADING; else if (keyNameIsSpec(name)) return KEY_NS_SPEC; else if (keyNameIsProc(name)) return KEY_NS_PROC; else if (keyNameIsDir(name)) return KEY_NS_DIR; else if (keyNameIsUser(name)) return KEY_NS_USER; else if (keyNameIsSystem(name)) return KEY_NS_SYSTEM; return KEY_NS_META; }
/** * Bytes needed to store the key name including user domain and ending NULL. * * @param key the key object to work with * @return number of bytes needed to store key name including user domain * @retval 1 on empty name * @retval -1 on NULL pointer * @see keyGetFullName(), keyGetNameSize() * @ingroup keyname */ ssize_t keyGetFullNameSize (const Key * key) { size_t returnedSize = 0; if (!key) return -1; if (!key->key) return 1; returnedSize = elektraStrLen (key->key); if (keyNameIsUser (key->key) && keyGetMeta (key, "owner")) returnedSize += keyGetOwnerSize (key); /* After 2 elektraStrLen() calls looks like we counted one more NULL. But we need this byte count because a full key name has an additional ':' char. */ return returnedSize; }
static void test_keyNamespace () { Key * key; printf ("Test namespaces\n"); succeed_if (keyGetNamespace (0) == KEY_NS_NONE, "null key"); key = keyNew (0); succeed_if (keyGetNamespace (key) == KEY_NS_EMPTY, "empty namespace not empty"); succeed_if (keyNameIsSystem (keyName (key)) == 0, "empty name is not system"); succeed_if (keyIsSystem (key) == 0, "empty key is not system"); succeed_if (keyNameIsUser (keyName (key)) == 0, "empty name is not user"); succeed_if (keyIsUser (key) == 0, "empty key is not user"); keyDel (key); key = keyNew ("", KEY_END); succeed_if (keyGetNamespace (key) == KEY_NS_EMPTY, "empty namespace not empty"); succeed_if (keyNameIsSystem (keyName (key)) == 0, "empty name is not system"); succeed_if (keyIsSystem (key) == 0, "empty key is not system"); succeed_if (keyNameIsUser (keyName (key)) == 0, "empty name is not user"); succeed_if (keyIsUser (key) == 0, "empty key is not user"); keyDel (key); key = keyNew ("user", KEY_END); succeed_if (keyGetNamespace (key) == KEY_NS_USER, "user namespace not KEY_NS_USER"); succeed_if (keyNameIsSystem (keyName (key)) == 0, "user name is not system"); succeed_if (keyIsSystem (key) == 0, "user key is not system"); succeed_if (keyNameIsUser (keyName (key)) == 1, "user name is not user"); succeed_if (keyIsUser (key) == 1, "user key is not user"); keyDel (key); key = keyNew ("user/key", KEY_END); succeed_if (keyGetNamespace (key) == KEY_NS_USER, "user namespace not KEY_NS_USER"); succeed_if (keyNameIsSystem (keyName (key)) == 0, "user name is not system"); succeed_if (keyIsSystem (key) == 0, "user key is not system"); succeed_if (keyNameIsUser (keyName (key)) == 1, "user name is not user"); succeed_if (keyIsUser (key) == 1, "user key is not user"); keyDel (key); key = keyNew ("user:owner/key", KEY_END); succeed_if (keyGetNamespace (key) == KEY_NS_USER, "user namespace not KEY_NS_USER"); succeed_if (keyNameIsSystem (keyName (key)) == 0, "user name is not system"); succeed_if (keyIsSystem (key) == 0, "user key is not system"); succeed_if (keyNameIsUser (keyName (key)) == 1, "user name is not user"); succeed_if (keyIsUser (key) == 1, "user key is not user"); keyDel (key); key = keyNew ("system", KEY_END); succeed_if (keyGetNamespace (key) == KEY_NS_SYSTEM, "system namespace not KEY_NS_SYSTEM"); succeed_if (keyNameIsSystem (keyName (key)) == 1, "system name is not system"); succeed_if (keyIsSystem (key) == 1, "system key is not system"); succeed_if (keyNameIsUser (keyName (key)) == 0, "system name is not system"); succeed_if (keyIsUser (key) == 0, "system key is not system"); keyDel (key); key = keyNew ("system/key", KEY_END); succeed_if (keyGetNamespace (key) == KEY_NS_SYSTEM, "system namespace not KEY_NS_SYSTEM"); succeed_if (keyNameIsSystem (keyName (key)) == 1, "system name is not system"); succeed_if (keyIsSystem (key) == 1, "system key is not system"); succeed_if (keyNameIsUser (keyName (key)) == 0, "system name is not system"); succeed_if (keyIsUser (key) == 0, "system key is not system"); keyDel (key); key = keyNew ("spec/key", KEY_END); succeed_if (keyGetNamespace (key) == KEY_NS_SPEC, "Spec namespace not KEY_NS_SPEC"); succeed_if (keyNameIsSpec (keyName (key)) == 1, "Spec name is not Spec"); succeed_if (keyIsSpec (key) == 1, "Spec key is not Spec"); succeed_if (keyNameIsUser (keyName (key)) == 0, "Spec name is not Spec"); succeed_if (keyIsUser (key) == 0, "Spec key is not Spec"); keyDel (key); key = keyNew ("/key", KEY_CASCADING_NAME, KEY_END); succeed_if (keyGetNamespace (key) == KEY_NS_CASCADING, "not correct namespace"); keyDel (key); key = keyNew ("type", KEY_META_NAME, KEY_END); succeed_if (keyGetNamespace (key) == KEY_NS_META, "not correct namespace"); keyDel (key); }