Ejemplo n.º 1
0
/**
 * @internal
 *
 * @brief Call this function after every key name changing operation
 *
 * @pre key->key and key->keySize are set accordingly and the size of
 * allocation is twice as what you actually needed.
 *
 * @post we get a unsynced key with a correctly terminated
 * key name suitable for ordering and the name getter methods
 *
 * It will duplicate the key length and put a second name afterwards
 * that is used for sorting keys.
 *
 * @param key
 */
ssize_t elektraFinalizeName (Key * key)
{
	key->key[key->keySize - 1] = 0; /* finalize string */

	key->keyUSize = elektraUnescapeKeyName (key->key, key->key + key->keySize);

	key->flags |= KEY_FLAG_SYNC;

	return key->keySize;
}
Ejemplo n.º 2
0
static void test_elektraUnescapeKeyName (void)
{
	printf ("test unescape key name \n");

	char dest[2000];
	char * p = NULL;

	succeed_if (elektraUnescapeKeyName ("abc", dest) == 4, "size of unescaping wrong");
	succeed_if_same_string ("abc", dest);

	succeed_if (elektraUnescapeKeyName ("\\\\.", dest) == 3, "size of unescaping wrong");
	succeed_if_same_string ("\\.", dest);

	succeed_if (elektraUnescapeKeyName ("abc/def", dest) == 8, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("abc", p);
	p += 4;
	succeed_if_same_string ("def", p);

	succeed_if (elektraUnescapeKeyName ("abc\\/def", dest) == 8, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("abc/def", p);

	succeed_if (elektraUnescapeKeyName ("abc/%/def", dest) == 9, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("abc", p);
	p += 4;
	succeed_if_same_string ("", p);
	p += 1;
	succeed_if_same_string ("def", p);

	succeed_if (elektraUnescapeKeyName ("abc/\\%/def", dest) == 10, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("abc", p);
	p += 4;
	succeed_if_same_string ("%", p);
	p += 2;
	succeed_if_same_string ("def", p);

	succeed_if (elektraUnescapeKeyName ("abc/\\./def", dest) == 10, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("abc", p);
	p += 4;
	succeed_if_same_string (".", p);
	p += 2;
	succeed_if_same_string ("def", p);

	succeed_if (elektraUnescapeKeyName ("abc/\\../def", dest) == 11, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("abc", p);
	p += 4;
	succeed_if_same_string ("..", p);
	p += 3;
	succeed_if_same_string ("def", p);

	succeed_if (elektraUnescapeKeyName ("abc/\\\\../def", dest) == 12, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("abc", p);
	p += 4;
	succeed_if_same_string ("\\..", p);
	p += 4;
	succeed_if_same_string ("def", p);

	succeed_if (elektraUnescapeKeyName ("a\\c/\\../d\\f", dest) == 11, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("a\\c", p);
	p += 4;
	succeed_if_same_string ("..", p);
	p += 3;
	succeed_if_same_string ("d\\f", p);

	succeed_if (elektraUnescapeKeyName ("\\bc/\\%/\\ef", dest) == 10, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("\\bc", p);
	p += 4;
	succeed_if_same_string ("%", p);
	p += 2;
	succeed_if_same_string ("\\ef", p);

	succeed_if (elektraUnescapeKeyName ("\\b/\\%/\\e", dest) == 8, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("\\b", p);
	p += 3;
	succeed_if_same_string ("%", p);
	p += 2;
	succeed_if_same_string ("\\e", p);

	succeed_if (elektraUnescapeKeyName ("\\b/\\\\%/\\e", dest) == 9, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("\\b", p);
	p += 3;
	succeed_if_same_string ("\\%", p);
	p += 3;
	succeed_if_same_string ("\\e", p);

	succeed_if (elektraUnescapeKeyName ("a\\/\\/def", dest) == 7, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("a//def", p);

	succeed_if (elektraUnescapeKeyName ("\\/\\/\\/def", dest) == 7, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("///def", p);

	succeed_if (elektraUnescapeKeyName ("\\/\\/\\/def", dest) == 7, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("///def", p);

	succeed_if (elektraUnescapeKeyName ("\\/\\/\\/\\/\\/\\/", dest) == 7, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("//////", p);

	succeed_if (elektraUnescapeKeyName ("\\/\\/%\\/\\/\\/", dest) == 7, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("//%///", p);

	succeed_if (elektraUnescapeKeyName ("\\/\\/..\\/\\/", dest) == 7, "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("//..//", p);

	succeed_if (elektraUnescapeKeyName ("bar\\/foo_bar\\/", dest) == sizeof ("bar/foo_bar/"), "size of unescaping wrong");
	p = dest;
	succeed_if_same_string ("bar/foo_bar/", p);
}