void l(Key *k) { // receive g_c keyCopyMeta(k, g_c, "type"); // the caller will see the changed key k // with the metadata "type" from g_c }
static void test_mmap_metacopy (const char * tmpFile) { Key * parentKey = keyNew (TEST_ROOT_KEY, KEY_VALUE, tmpFile, KEY_END); KeySet * conf = ksNew (0, KS_END); PLUGIN_OPEN ("mmapstorage"); KeySet * ks = metaTestKeySet (); Key * shareMeta = keyNew (0); keySetMeta (shareMeta, "sharedmeta", "shared meta key test"); Key * current; ksRewind (ks); while ((current = ksNext (ks)) != 0) { keyCopyMeta (current, shareMeta, "sharedmeta"); } KeySet * expected = ksDeepDup (ks); succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "kdbSet was not successful"); KeySet * returned = ksNew (0, KS_END); succeed_if (plugin->kdbGet (plugin, returned, parentKey) == 1, "kdbGet was not successful"); compare_keyset (expected, returned); ksDel (expected); ksDel (returned); keyDel (parentKey); keyDel (shareMeta); ksDel (ks); PLUGIN_CLOSE (); }
int main () { Key * k; Key * c; const Key * meta; k = keyNew ("user/metakey", KEY_END); c = keyNew ("user/metacopy", KEY_END); keySetMeta (k, "hello", "hello_world"); keySetMeta (k, "mode", "0644"); keySetMeta (k, "time", "1271234264"); keySetMeta (k, "empty", ""); meta = keyGetMeta (k, "hello"); printf ("Metadata %s has the value %s with the value size %zd\n", keyName (meta), (const char *)keyValue (meta), keyGetValueSize (meta)); printf ("Metadata mode has the value %s\n", (const char *)keyValue (keyGetMeta (k, "mode"))); printf ("Metadata time has the value %s\n", (const char *)keyValue (keyGetMeta (k, "time"))); printf ("Metadata empty has the value %s\n", (const char *)keyValue (keyGetMeta (k, "empty"))); if (!keyGetMeta (k, "nonexist")) printf ("Check if a metadata exist\n"); keySetMeta (k, "hello", "between"); keyCopyMeta (c, k, "hello"); if (keyGetMeta (k, "hello") == keyGetMeta (c, "hello")) printf ("Check if they point to the same metadata after a copy\n"); printf ("Metadata hello now has the value %s\n", (const char *)keyValue (keyGetMeta (k, "hello"))); keySetMeta (k, "hello", 0); printf ("Metadata hello now has the value %s (after dropping)\n", (const char *)keyValue (keyGetMeta (k, "hello"))); keySetMeta (k, "hello", "goodbye"); printf ("Metadata hello now has the value %s\n", (const char *)keyValue (keyGetMeta (k, "hello"))); printf ("Now we will output all metadata of the key:\n"); keyRewindMeta (k); while ((meta = keyNextMeta (k)) != 0) { printf ("%s=%s\n", keyName (meta), (const char *)keyValue (meta)); } keyDel (k); return 0; }
void test_copy() { printf ("Test key meta copy\n"); Key *key1; Key *key2; succeed_if (key1 = keyNew(0), "could not create key"); succeed_if (key2 = keyNew(0), "could not create key"); succeed_if (keyCopyMeta(key2, key1, "nonexist") == 0, "could not do anything"); succeed_if (keyValue(keyGetMeta(key2, "nonexist")) == 0, "should not be there"); keyDel (key1); keyDel (key2); succeed_if (key1 = keyNew(0), "could not create key"); succeed_if (key2 = keyNew(0), "could not create key"); succeed_if (keySetMeta(key1, "mymeta", "a longer meta value") == sizeof("a longer meta value"), "could not set meta value"); succeed_if (keyCopyMeta(key2, key1, "mymeta") == 1, "could not copy meta value"); succeed_if (!strcmp(keyValue(keyGetMeta(key1, "mymeta")), "a longer meta value"), "old meta data should be unchanged"); succeed_if (!strcmp(keyValue(keyGetMeta(key2, "mymeta")), "a longer meta value"), "old meta data should be unchanged"); succeed_if (keyGetMeta(key1, "mymeta") == keyGetMeta(key2, "mymeta"), "reference to the same key"); succeed_if (keyCopyMeta(key1, key2, "mymeta") == 1, "did nothing in the end"); succeed_if (!strcmp(keyValue(keyGetMeta(key1, "mymeta")), "a longer meta value"), "old meta data should be unchanged"); succeed_if (!strcmp(keyValue(keyGetMeta(key2, "mymeta")), "a longer meta value"), "old meta data should be unchanged"); succeed_if (keyGetMeta(key1, "mymeta") == keyGetMeta(key2, "mymeta"), "reference to the same key"); keyDel (key1); keyDel (key2); succeed_if (key1 = keyNew(0), "could not create key"); succeed_if (key2 = keyNew(0), "could not create key"); succeed_if (keySetMeta(key1, "mymeta", "a longer meta value") == sizeof("a longer meta value"), "could not set meta value"); succeed_if (keyCopyMeta(key2, key1, "mymeta") == 1, "could not copy meta value"); succeed_if (!strcmp(keyValue(keyGetMeta(key1, "mymeta")), "a longer meta value"), "old meta data should be unchanged"); succeed_if (!strcmp(keyValue(keyGetMeta(key2, "mymeta")), "a longer meta value"), "old meta data should be unchanged"); succeed_if (keyGetMeta(key1, "mymeta") == keyGetMeta(key2, "mymeta"), "reference to the same key"); succeed_if (keySetMeta(key1, "mymeta", "a longer meta value") == sizeof("a longer meta value"), "could not set meta value"); succeed_if (!strcmp(keyValue(keyGetMeta(key1, "mymeta")), "a longer meta value"), "old meta data should be unchanged"); succeed_if (!strcmp(keyValue(keyGetMeta(key2, "mymeta")), "a longer meta value"), "old meta data should be unchanged"); succeed_if (keyGetMeta(key1, "mymeta") != keyGetMeta(key2, "mymeta"), "reference to another key"); succeed_if (keySetMeta(key1, "mymeta", "a longer meta value2") == sizeof("a longer meta value2"), "could not set meta value2"); succeed_if (!strcmp(keyValue(keyGetMeta(key1, "mymeta")), "a longer meta value2"), "old meta data should be unchanged"); succeed_if (!strcmp(keyValue(keyGetMeta(key2, "mymeta")), "a longer meta value"), "old meta data should be unchanged"); succeed_if (keyGetMeta(key1, "mymeta") != keyGetMeta(key2, "mymeta"), "reference to another key (with another value)"); keyDel (key1); keyDel (key2); Key *k; Key *c; k=keyNew ("user/metakey", KEY_META, "t", "test1", KEY_META, "a", "another", KEY_META, "cya", "see the meta data later", KEY_META, "mode", "0775", KEY_END); c=keyNew ("user/metacopy", KEY_END); succeed_if (keyGetMeta(k, "t") != 0, "could not get meta key"); succeed_if (keyGetMeta(k, "a") != 0, "could not get meta key"); succeed_if (keyGetMeta(c, "t") == 0, "could get meta key not there"); succeed_if (keyGetMeta(c, "a") == 0, "could get meta key not there"); succeed_if (keyCopyMeta(c, k, "t") == 1, "could not copy meta data"); succeed_if (keyGetMeta(k, "t") == keyGetMeta(c, "t"), "not the same meta data after copy"); succeed_if (keyCopyMeta(c, k, "a") == 1, "could not copy meta data"); succeed_if (keyGetMeta(k, "a") == keyGetMeta(c, "a"), "not the same meta data after copy"); keyDel (k); keyDel (c); }