#include <SystemConfiguration/SystemConfiguration.h>
CFStringRef
SCDKeyCreateHostName()
{
return SCDKeyCreate(CFSTR("%@/%@"),
kSCCacheDomainSetup,
kSCCompSystem);
}
SCDStatus
SCDHostNameGet(CFStringRef *name, CFStringEncoding *nameEncoding)
{
CFDictionaryRef dict;
SCDHandleRef handle = NULL;
CFStringRef key;
SCDSessionRef session = NULL;
SCDStatus status;
if (name == NULL) {
return SCD_FAILED;
}
status = SCDOpen(&session, CFSTR("SCDHostNameGet"));
if (status != SCD_OK) {
goto done;
}
key = SCDKeyCreateHostName();
status = SCDGet(session, key, &handle);
CFRelease(key);
if (status != SCD_OK) {
goto done;
}
dict = SCDHandleGetData(handle);
*name = CFDictionaryGetValue(dict, kSCPropSystemComputerName);
if (*name == NULL) {
goto done;
}
CFRetain(*name);
if (nameEncoding) {
CFNumberRef num;
num = CFDictionaryGetValue(dict,
kSCPropSystemComputerNameEncoding);
if (num) {
CFNumberGetValue(num, kCFNumberIntType, nameEncoding);
} else {
*nameEncoding = CFStringGetSystemEncoding();
}
}
done :
if (handle) SCDHandleRelease(handle);
if (session) (void) SCDClose(&session);
return status;
}