Ejemplo n.º 1
0
static void test_keyGetBaseName (const size_t storagePlugin, const char * tmpFile)
{
	Key * parentKey = keyNew (TEST_ROOT_KEY, KEY_VALUE, tmpFile, KEY_END);
	open_storage_plugin (storagePlugin);
	Plugin * plugin = plugins[storagePlugin];

	KeySet * ks = metaTestKeySet ();
	succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "kdbSet was not successful");
	succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "kdbGet was not successful");

	const char * name = "user/tests/storage/a";
	Key * found = ksLookupByName (ks, name, 0);
	succeed_if (found, "did not find key");

	const char * constBaseName = "a";
	size_t constBaseNameSize = elektraStrLen (constBaseName);
	ssize_t baseNameSize = keyGetFullNameSize (found);
	char * baseName = elektraMalloc (baseNameSize);
	ssize_t ret = keyGetBaseName (found, baseName, baseNameSize);
	if (ret < 1)
	{
		yield_error ("Key base name NULL or size error");
	}
	else
	{
		succeed_if ((size_t) ret == elektraStrLen (constBaseName), "Key base name has wrong size");
	}

	succeed_if (elektraStrNCmp (constBaseName, baseName, constBaseNameSize) == 0, "Key base name is wrong");

	elektraFree (baseName);
	keyDel (parentKey);
	ksDel (ks);
	closeStoragePlugin (storagePlugin);
}
Ejemplo n.º 2
0
/**
 * Get key full name, including the user domain name.
 *
 * @return number of bytes written
 * @retval 1 on empty name
 * @retval -1 on NULL pointers
 * @retval -1 if maxSize is 0 or larger than SSIZE_MAX
 * @param key the key object
 * @param returnedName pre-allocated memory to write the key name
 * @param maxSize maximum number of bytes that will fit in returnedName, including the final NULL
 * @ingroup keyname
 */
ssize_t keyGetFullName (const Key * key, char * returnedName, size_t maxSize)
{
	size_t userSize = sizeof ("user") - 1;
	size_t ownerSize;
	ssize_t length;
	ssize_t maxSSize;
	char * cursor;

	if (!key) return -1;
	if (!returnedName) return -1;
	if (!maxSize) return -1;

	if (maxSize > SSIZE_MAX) return -1;
	maxSSize = maxSize;

	length = keyGetFullNameSize (key);
	if (length == 1)
	{
		/*errno=KDB_ERR_NOKEY;*/
		returnedName[0] = 0;
		return length;
	}
	else if (length < 0)
		return length;
	else if (length > maxSSize)
	{
		/* errno=KDB_ERR_TRUNC; */
		return -1;
	}

	cursor = returnedName;
	if (keyIsUser (key))
	{
		strncpy (cursor, key->key, userSize);
		cursor += userSize;
		if (keyGetMeta (key, "owner"))
		{
			*cursor = ':';
			++cursor;
			ownerSize = keyGetValueSize (keyGetMeta (key, "owner")) - 1;
			strncpy (cursor, keyValue (keyGetMeta (key, "owner")), ownerSize);
			cursor += ownerSize;
		}
		strcpy (cursor, key->key + userSize);
	}
	else
		strcpy (cursor, key->key);

	return length;
}