X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fstore.c;h=52cc6b356d5116f5d3d881b07ff36ddab5979c5d;hb=0325ee9e9afb02b08bdec3497e8cc54cb942989d;hp=9e0fca1e631c725912e35fd8159e972e1cb65ba8;hpb=07eac8709bced5f814a65fa0d5dd62e4bd649a9a;p=bluesky.git diff --git a/bluesky/store.c b/bluesky/store.c index 9e0fca1..52cc6b3 100644 --- a/bluesky/store.c +++ b/bluesky/store.c @@ -10,7 +10,7 @@ #include #include -#include "bluesky.h" +#include "bluesky-private.h" /* Interaction with cloud storage. We expose very simple GET/PUT style * interface, which different backends can implement. Available backends @@ -64,59 +64,6 @@ void bluesky_store_put(BlueSkyStore *store, store->impl->put(store->handle, key, val); } -/* Create and return a new reference-counted string. The reference count is - * initially one. The newly-returned string takes ownership of the memory - * pointed at by data, and will call g_free on it when the reference count - * drops to zero. */ -BlueSkyRCStr *bluesky_string_new(gpointer data, gsize len) -{ - BlueSkyRCStr *string = g_new(BlueSkyRCStr, 1); - string->data = data; - string->len = len; - g_atomic_int_set(&string->refcount, 1); - return string; -} - -void bluesky_string_ref(BlueSkyRCStr *string) -{ - if (string == NULL) - return; - - g_atomic_int_inc(&string->refcount); -} - -void bluesky_string_unref(BlueSkyRCStr *string) -{ - if (string == NULL) - return; - - if (g_atomic_int_dec_and_test(&string->refcount)) { - g_free(string->data); - g_free(string); - } -} - -/* Duplicate and return a new reference-counted string, containing a copy of - * the original data, with a reference count of 1. As an optimization, if the - * passed-in string already has a reference count of 1, the original is - * returned. Can be used to make a mutable copy of a shared string. For this - * to truly be safe, it is probably needed that there be some type of lock - * protecting access to the string. */ -BlueSkyRCStr *bluesky_string_dup(BlueSkyRCStr *string) -{ - if (string == NULL) - return NULL; - - if (g_atomic_int_dec_and_test(&string->refcount)) { - /* There are no other shared copies, so return this one. */ - g_atomic_int_inc(&string->refcount); - return string; - } else { - return bluesky_string_new(g_memdup(string->data, string->len), - string->len); - } -} - /* Simple in-memory data store for test purposes. */ typedef struct { GMutex *lock;