예제 #1
0
void
mowgli_global_storage_put(char *name, void *value)
{
	mowgli_spinlock_lock(mowgli_global_storage_lock, NULL, name);
	mowgli_dictionary_add(mowgli_global_storage_dict, name, value);
	mowgli_spinlock_unlock(mowgli_global_storage_lock, NULL, name);
}
예제 #2
0
static void read_all_frames (VFSFile * handle, gint version, gboolean syncsafe,
 gint data_size, mowgli_dictionary_t * dict)
{
    gint pos;

    for (pos = 0; pos < data_size; )
    {
        gint frame_size, size;
        gchar key[5];
        guchar * data;
        GenericFrame * frame;

        if (! read_frame (handle, data_size - pos, version, syncsafe,
         & frame_size, key, & data, & size))
            break;

        pos += frame_size;

        if (mowgli_dictionary_retrieve (dict, key) != NULL)
        {
            TAGDBG ("Discarding duplicate frame %s.\n", key);
            g_free (data);
            continue;
        }

        frame = g_malloc (sizeof (GenericFrame));
        strcpy (frame->key, key);
        frame->data = data;
        frame->size = size;

        mowgli_dictionary_add (dict, key, frame);
    }
}
예제 #3
0
static GenericFrame * add_generic_frame (gint id, gint size,
 mowgli_dictionary_t * dict)
{
    GenericFrame * frame = mowgli_dictionary_retrieve (dict, id3_frames[id]);

    if (frame == NULL)
    {
        frame = g_malloc (sizeof (GenericFrame));
        strcpy (frame->key, id3_frames[id]);
        mowgli_dictionary_add (dict, frame->key, frame);
    }
    else
        g_free (frame->data);

    frame->data = g_malloc (size);
    frame->size = size;
    return frame;
}
예제 #4
0
파일: format.c 프로젝트: kaniini/conspire
Formatter *
formatter_register(const gchar *key, const gchar *format, int args)
{
    Formatter *f;

    if (!formatter_initialized)
    {
        formatters = mowgli_dictionary_create(g_ascii_strcasecmp);
        formatter_initialized++;
    }

    f = g_slice_new0(Formatter);
    f->key = g_strdup(key);
    f->format = g_strdup(format);
    f->args = args;

    mowgli_dictionary_add(formatters, key, f);

    return f;
}
예제 #5
0
int main(int argc, const char *argv[])
{
    mowgli_dictionary_t *test_dict;
    mowgli_random_t *r;
    char key[10];
    long ans[100], i;
    int pass = 0, fail = 0;

    mowgli_init();

    test_dict = mowgli_dictionary_create(strcasecmp);
    r = mowgli_random_create();

    for (i = 0; i < 100; i++)
    {
        ans[i] = mowgli_random_int(r);
        snprintf(key, 10, "%ldkey%ld", i, i);
        mowgli_dictionary_add(test_dict, key, (void *) ans[i]);
    }

    for (i = 0; i < 100; i++)
    {
        snprintf(key, 10, "%ldkey%ld", i, i);

        if ( (long) mowgli_dictionary_retrieve(test_dict, key) != ans[i])
        {
            printf("FAIL %ld %p[%p]\n", i, mowgli_dictionary_retrieve(test_dict, key), (void*) ans[i]);
            fail++;
        }
        else
        {
            printf("PASS %ld %p[%p]\n", i, mowgli_dictionary_retrieve(test_dict, key), (void*) ans[i]);
            pass++;
        }
    }

    printf("%d tests failed, %d tests passed.\n", fail, pass);
    return 0;
}