#include <SystemConfiguration/SCP.h>
#include "SCPPrivate.h"
#include <SystemConfiguration/SCD.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/errno.h>
static CFComparisonResult
sort_keys(const void *p1, const void *p2, void *context) {
CFStringRef key1 = (CFStringRef)p1;
CFStringRef key2 = (CFStringRef)p2;
return CFStringCompare(key1, key2, 0);
}
SCPStatus
SCPList(SCPSessionRef session, CFArrayRef *keys)
{
SCPSessionPrivateRef sessionPrivate;
CFIndex prefsCnt;
void **prefsKeys;
CFArrayRef allKeys;
CFMutableArrayRef sortedKeys;
if (session == NULL) {
return SCP_FAILED;
}
sessionPrivate = (SCPSessionPrivateRef)session;
prefsCnt = CFDictionaryGetCount(sessionPrivate->prefs);
prefsKeys = CFAllocatorAllocate(NULL, prefsCnt * sizeof(CFStringRef), 0);
CFDictionaryGetKeysAndValues(sessionPrivate->prefs, prefsKeys, NULL);
allKeys = CFArrayCreate(NULL, prefsKeys, prefsCnt, &kCFTypeArrayCallBacks);
CFAllocatorDeallocate(NULL, prefsKeys);
sortedKeys = CFArrayCreateMutableCopy(NULL, prefsCnt, allKeys);
CFRelease(allKeys);
CFArraySortValues(sortedKeys,
CFRangeMake(0, prefsCnt),
sort_keys,
NULL);
*keys = sortedKeys;
return SCP_OK;
}