#ifdef SC_LOG_HANDLE
#include <os/log.h>
os_log_t SC_LOG_HANDLE(void);
#endif //SC_LOG_HANDLE
#include "SCDynamicStoreInternal.h"
Boolean
_SCDynamicStoreCacheIsActive(SCDynamicStoreRef store)
{
SCDynamicStorePrivateRef storePrivate = (SCDynamicStorePrivateRef)store;
if (store == NULL) {
_SCErrorSet(kSCStatusNoStoreSession);
return FALSE;
}
return storePrivate->cache_active;
}
static void
__SCDynamicStoreCacheRelease(SCDynamicStoreRef store)
{
SCDynamicStorePrivateRef storePrivate = (SCDynamicStorePrivateRef)store;
if (storePrivate->cached_keys != NULL) {
CFRelease(storePrivate->cached_keys);
storePrivate->cached_keys = NULL;
}
if (storePrivate->cached_set != NULL) {
CFRelease(storePrivate->cached_set);
storePrivate->cached_set = NULL;
}
if (storePrivate->cached_removals != NULL) {
CFRelease(storePrivate->cached_removals);
storePrivate->cached_removals = NULL;
}
if (storePrivate->cached_notifys != NULL) {
CFRelease(storePrivate->cached_notifys);
storePrivate->cached_notifys = NULL;
}
return;
}
Boolean
_SCDynamicStoreCacheOpen(SCDynamicStoreRef store)
{
SCDynamicStorePrivateRef storePrivate = (SCDynamicStorePrivateRef)store;
if (store == NULL) {
_SCErrorSet(kSCStatusNoStoreSession);
return FALSE;
}
__SCDynamicStoreCacheRelease(store); storePrivate->cache_active = TRUE;
return TRUE;
}
Boolean
_SCDynamicStoreCacheCommitChanges(SCDynamicStoreRef store)
{
Boolean ok = TRUE;
SCDynamicStorePrivateRef storePrivate = (SCDynamicStorePrivateRef)store;
if (store == NULL) {
_SCErrorSet(kSCStatusNoStoreSession);
return FALSE;
}
if (!storePrivate->cache_active) {
_SCErrorSet(kSCStatusFailed);
return FALSE;
}
if ((storePrivate->cached_set != NULL) ||
(storePrivate->cached_removals != NULL) ||
(storePrivate->cached_notifys != NULL)) {
ok = SCDynamicStoreSetMultiple(store,
storePrivate->cached_set,
storePrivate->cached_removals,
storePrivate->cached_notifys);
__SCDynamicStoreCacheRelease(store);
}
return ok;
}
Boolean
_SCDynamicStoreCacheClose(SCDynamicStoreRef store)
{
SCDynamicStorePrivateRef storePrivate = (SCDynamicStorePrivateRef)store;
if (store == NULL) {
_SCErrorSet(kSCStatusNoStoreSession);
return FALSE;
}
if (!storePrivate->cache_active) {
_SCErrorSet(kSCStatusFailed);
return FALSE;
}
__SCDynamicStoreCacheRelease(store);
storePrivate->cache_active = FALSE;
return TRUE;
}