#include <sys/types.h>
#include "scutil.h"
void
do_list(int argc, char **argv)
{
CFStringRef key;
int regexOptions = 0;
SCDStatus status;
CFArrayRef list;
CFIndex listCnt;
int i;
key = CFStringCreateWithCString(NULL,
(argc >= 1) ? argv[0] : "",
kCFStringEncodingMacRoman);
if (argc == 2)
regexOptions = kSCDRegexKey;
status = SCDList(session, key, regexOptions, &list);
CFRelease(key);
if (status != SCD_OK) {
SCDLog(LOG_INFO, CFSTR("SCDList: %s"), SCDError(status));
return;
}
listCnt = CFArrayGetCount(list);
if (listCnt > 0) {
for (i=0; i<listCnt; i++) {
SCDLog(LOG_NOTICE, CFSTR(" subKey [%d] = %@"), i, CFArrayGetValueAtIndex(list, i));
}
} else {
SCDLog(LOG_NOTICE, CFSTR(" no subKey's"));
}
CFRelease(list);
return;
}
void
do_add(int argc, char **argv)
{
CFStringRef key;
SCDStatus status;
key = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingMacRoman);
if (argc < 2) {
status = SCDAdd(session, key, data);
if (status != SCD_OK) {
SCDLog(LOG_INFO, CFSTR("SCDAdd: %s"), SCDError(status));
}
} else {
status = SCDAddSession(session, key, data);
if (status != SCD_OK) {
SCDLog(LOG_INFO, CFSTR("SCDAddSession: %s"), SCDError(status));
}
}
CFRelease(key);
return;
}
void
do_get(int argc, char **argv)
{
SCDStatus status;
CFStringRef key;
SCDHandleRef newData = NULL;
key = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingMacRoman);
status = SCDGet(session, key, &newData);
CFRelease(key);
if (status != SCD_OK) {
SCDLog(LOG_INFO, CFSTR("SCDGet: %s"), SCDError(status));
if (newData != NULL) {
SCDHandleRelease(newData);
}
return;
}
if (data != NULL) {
SCDHandleRelease(data);
}
data = newData;
return;
}
void
do_set(int argc, char **argv)
{
SCDStatus status;
CFStringRef key;
key = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingMacRoman);
status = SCDSet(session, key, data);
CFRelease(key);
if (status != SCD_OK) {
SCDLog(LOG_INFO, CFSTR("SCDSet: %s"), SCDError(status));
}
return;
}
void
do_remove(int argc, char **argv)
{
SCDStatus status;
CFStringRef key;
key = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingMacRoman);
status = SCDRemove(session, key);
CFRelease(key);
if (status != SCD_OK) {
SCDLog(LOG_INFO, CFSTR("SCDRemove: %s"), SCDError(status));
}
return;
}
void
do_touch(int argc, char **argv)
{
SCDStatus status;
CFStringRef key;
key = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingMacRoman);
status = SCDTouch(session, key);
CFRelease(key);
if (status != SCD_OK) {
SCDLog(LOG_INFO, CFSTR("SCDTouch: %s"), SCDError(status));
}
return;
}