X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fstore.c;h=af25ca366eb4ddbab12d0d1b940104b234d31832;hb=bf1b396c85d03f9c16eee6cd84c71c82503c3ec4;hp=23e70472ae257593ab449eee7f2e1de755df51f4;hpb=a099afff8856bd80a1d974530c06fa78452e6c8c;p=bluesky.git diff --git a/bluesky/store.c b/bluesky/store.c index 23e7047..af25ca3 100644 --- a/bluesky/store.c +++ b/bluesky/store.c @@ -87,6 +87,11 @@ void bluesky_store_free(BlueSkyStore *store) g_free(store); } +char *bluesky_store_lookup_last(BlueSkyStore *store, const char *prefix) +{ + return store->impl->lookup_last(store->handle, prefix); +} + BlueSkyStoreAsync *bluesky_store_async_new(BlueSkyStore *store) { BlueSkyStoreAsync *async; @@ -494,11 +499,61 @@ static void filestore_cleanup(gpointer store, BlueSkyStoreAsync *async) { } +static char *filestore_lookup_last(gpointer store, const char *prefix) +{ + char *last = NULL; + GDir *dir = g_dir_open(".", 0, NULL); + if (dir == NULL) { + g_warning("Unable to open directory for listing"); + return NULL; + } + + const gchar *file; + while ((file = g_dir_read_name(dir)) != NULL) { + if (strncmp(file, prefix, strlen(prefix)) == 0) { + if (last == NULL || strcmp(file, last) > 0) { + g_free(last); + last = g_strdup(file); + } + } + } + g_dir_close(dir); + + return last; +} + static BlueSkyStoreImplementation filestore_impl = { .create = filestore_create, .destroy = filestore_destroy, .submit = filestore_submit, .cleanup = filestore_cleanup, + .lookup_last = filestore_lookup_last, +}; + +/* A store implementation which simply discards all data, for testing. */ +static gpointer nullstore_create(const gchar *path) +{ + return (gpointer)nullstore_create; +} + +static void nullstore_destroy(gpointer store) +{ +} + +static void nullstore_submit(gpointer s, BlueSkyStoreAsync *async) +{ + bluesky_store_async_mark_complete(async); +} + +static void nullstore_cleanup(gpointer store, BlueSkyStoreAsync *async) +{ +} + +static BlueSkyStoreImplementation nullstore_impl = { + .create = nullstore_create, + .destroy = nullstore_destroy, + .submit = nullstore_submit, + .cleanup = nullstore_cleanup, }; void bluesky_store_init() @@ -508,4 +563,5 @@ void bluesky_store_init() bluesky_max_threads, FALSE, NULL); bluesky_store_register(&memstore_impl, "mem"); bluesky_store_register(&filestore_impl, "file"); + bluesky_store_register(&nullstore_impl, "null"); }