#include "scutil.h"
#include "session.h"
#include "notifications.h"
__private_extern__
void
do_open(int argc, char **argv)
{
if (store) {
CFRelease(store);
CFRelease(watchedKeys);
CFRelease(watchedPatterns);
}
if (argc < 1) {
store = SCDynamicStoreCreate(NULL, CFSTR("scutil"), storeCallback, NULL);
} else {
CFMutableDictionaryRef options;
options = CFDictionaryCreateMutable(NULL,
0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(options, kSCDynamicStoreUseSessionKeys, kCFBooleanTrue);
store = SCDynamicStoreCreateWithOptions(NULL,
CFSTR("scutil"),
options,
storeCallback,
NULL);
CFRelease(options);
}
if (store == NULL) {
SCPrint(TRUE, stdout, CFSTR(" %s\n"), SCErrorString(SCError()));
return;
}
watchedKeys = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
watchedPatterns = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
return;
}
__private_extern__
void
do_close(int argc, char **argv)
{
if (notifyRls) {
CFRunLoopSourceInvalidate(notifyRls);
CFRelease(notifyRls);
notifyRls = NULL;
}
if (notifyRl) {
CFRunLoopStop(notifyRl);
notifyRl = NULL;
}
if (store) {
CFRelease(store);
store = NULL;
CFRelease(watchedKeys);
watchedKeys = NULL;
CFRelease(watchedPatterns);
watchedPatterns = NULL;
}
return;
}
__private_extern__
void
do_lock(int argc, char **argv)
{
if (!SCDynamicStoreLock(store)) {
SCPrint(TRUE, stdout, CFSTR(" %s\n"), SCErrorString(SCError()));
}
return;
}
__private_extern__
void
do_unlock(int argc, char **argv)
{
if (!SCDynamicStoreUnlock(store)) {
SCPrint(TRUE, stdout, CFSTR(" %s\n"), SCErrorString(SCError()));
}
return;
}