|
Packit |
352660 |
#include "../src/fchash.c"
|
|
Packit |
352660 |
#include "../src/fcstr.c"
|
|
Packit |
352660 |
|
|
Packit |
352660 |
FcChar8 *
|
|
Packit |
352660 |
FcLangNormalize (const FcChar8 *lang)
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
return NULL;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
|
|
Packit |
352660 |
FcChar8 *
|
|
Packit |
352660 |
FcConfigHome (void)
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
return NULL;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
|
|
Packit |
352660 |
typedef struct _Test
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
FcHashTable *table;
|
|
Packit |
352660 |
} Test;
|
|
Packit |
352660 |
|
|
Packit |
352660 |
static Test *
|
|
Packit |
352660 |
init (void)
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
Test *ret;
|
|
Packit |
352660 |
|
|
Packit |
352660 |
ret = malloc (sizeof (Test));
|
|
Packit |
352660 |
if (ret)
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret->table = FcHashTableCreate ((FcHashFunc) FcStrHashIgnoreCase,
|
|
Packit |
352660 |
(FcCompareFunc) FcStrCmp,
|
|
Packit |
352660 |
FcHashStrCopy,
|
|
Packit |
352660 |
FcHashUuidCopy,
|
|
Packit |
352660 |
(FcDestroyFunc) FcStrFree,
|
|
Packit |
352660 |
FcHashUuidFree);
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
|
|
Packit |
352660 |
return ret;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
|
|
Packit |
352660 |
static void
|
|
Packit |
352660 |
fini (Test *test)
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
FcHashTableDestroy (test->table);
|
|
Packit |
352660 |
free (test);
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
|
|
Packit |
352660 |
static FcBool
|
|
Packit |
352660 |
test_add (Test *test, FcChar8 *key, FcBool replace)
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
uuid_t uuid;
|
|
Packit |
352660 |
void *u;
|
|
Packit |
352660 |
FcBool (*hash_add) (FcHashTable *, void *, void *);
|
|
Packit |
352660 |
FcBool ret = FcFalse;
|
|
Packit |
352660 |
|
|
Packit |
352660 |
uuid_generate_random (uuid);
|
|
Packit |
352660 |
if (replace)
|
|
Packit |
352660 |
hash_add = FcHashTableReplace;
|
|
Packit |
352660 |
else
|
|
Packit |
352660 |
hash_add = FcHashTableAdd;
|
|
Packit |
352660 |
if (!hash_add (test->table, key, uuid))
|
|
Packit |
352660 |
return FcFalse;
|
|
Packit |
352660 |
if (!FcHashTableFind (test->table, key, &u))
|
|
Packit |
352660 |
return FcFalse;
|
|
Packit |
352660 |
ret = (uuid_compare (uuid, u) == 0);
|
|
Packit |
352660 |
FcHashUuidFree (u);
|
|
Packit |
352660 |
|
|
Packit |
352660 |
return ret;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
|
|
Packit |
352660 |
static FcBool
|
|
Packit |
352660 |
test_remove (Test *test, FcChar8 *key)
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
void *u;
|
|
Packit |
352660 |
|
|
Packit |
352660 |
if (!FcHashTableFind (test->table, key, &u))
|
|
Packit |
352660 |
return FcFalse;
|
|
Packit |
352660 |
FcHashUuidFree (u);
|
|
Packit |
352660 |
if (!FcHashTableRemove (test->table, key))
|
|
Packit |
352660 |
return FcFalse;
|
|
Packit |
352660 |
if (FcHashTableFind (test->table, key, &u))
|
|
Packit |
352660 |
return FcFalse;
|
|
Packit |
352660 |
|
|
Packit |
352660 |
return FcTrue;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
|
|
Packit |
352660 |
int
|
|
Packit |
352660 |
main (void)
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
Test *test;
|
|
Packit |
352660 |
uuid_t uuid;
|
|
Packit |
352660 |
int ret = 0;
|
|
Packit |
352660 |
|
|
Packit |
352660 |
test = init ();
|
|
Packit |
352660 |
/* first op to add */
|
|
Packit |
352660 |
if (!test_add (test, "foo", FcFalse))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
/* second op to add */
|
|
Packit |
352660 |
if (!test_add (test, "bar", FcFalse))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
/* dup not allowed */
|
|
Packit |
352660 |
if (test_add (test, "foo", FcFalse))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
/* replacement */
|
|
Packit |
352660 |
if (!test_add (test, "foo", FcTrue))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
/* removal */
|
|
Packit |
352660 |
if (!test_remove (test, "foo"))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
/* not found to remove */
|
|
Packit |
352660 |
if (test_remove (test, "foo"))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
/* complex op in pointer */
|
|
Packit |
352660 |
if (!test_add (test, "foo", FcFalse))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
if (test_add (test, "foo", FcFalse))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
if (!test_remove (test, "foo"))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
if (!test_add (test, "foo", FcFalse))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
if (!test_remove (test, "bar"))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
/* completely remove */
|
|
Packit |
352660 |
if (!test_remove (test, "foo"))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
/* completely remove from the last one */
|
|
Packit |
352660 |
if (!test_add (test, "foo", FcFalse))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
if (!test_add (test, "bar", FcFalse))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
if (!test_remove (test, "bar"))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
if (!test_remove (test, "foo"))
|
|
Packit |
352660 |
{
|
|
Packit |
352660 |
ret = 1;
|
|
Packit |
352660 |
goto bail;
|
|
Packit |
352660 |
}
|
|
Packit |
352660 |
bail:
|
|
Packit |
352660 |
fini (test);
|
|
Packit |
352660 |
|
|
Packit |
352660 |
return ret;
|
|
Packit |
352660 |
}
|