]> code.delx.au - osx-proxyconf/commitdiff
Can now print CFArrays
authorJames Bunton <jamesbunton@fastmail.fm>
Sat, 28 Jul 2007 03:25:58 +0000 (13:25 +1000)
committerJames Bunton <jamesbunton@fastmail.fm>
Sat, 28 Jul 2007 03:25:58 +0000 (13:25 +1000)
sysconfig.c

index be9466248d7a55f03e175bbab673800a629a5e57..77ad88f592f924580fbb03234ffa3d082e5fb924 100644 (file)
@@ -3,6 +3,9 @@
 
 const char* KEYFILE = "/System/Library/Frameworks/SystemConfiguration.framework/Headers/SCSchemaDefinitions.h";
 
+Boolean
+printCFTypeRef(CFTypeRef value);
+
 
 Boolean
 getDictValue(CFTypeRef* value, CFStringRef key)
@@ -58,6 +61,41 @@ printString(CFStringRef strRef)
        return FALSE;
 }
 
+Boolean
+printArray(CFArrayRef arrayRef)
+{
+       assert(arrayRef != NULL);
+
+       int length = CFArrayGetCount(arrayRef);
+       for(int i = 0; i < length; ++i) {
+               if(!printCFTypeRef(CFArrayGetValueAtIndex(arrayRef, i))) {
+                       return FALSE;
+               }
+       }
+
+       return TRUE;
+}
+
+Boolean
+printCFTypeRef(CFTypeRef value)
+{
+       if(value == NULL) {
+               return FALSE;
+       }
+       else if(CFStringGetTypeID() == CFGetTypeID(value)) {
+               return printString((CFStringRef)value);
+       }
+       else if(CFNumberGetTypeID() == CFGetTypeID(value)) {
+               return printNumber((CFNumberRef)value);
+       }
+       else if(CFArrayGetTypeID()  == CFGetTypeID(value)) {
+               return printArray((CFArrayRef)value);
+       }
+       else {
+               return FALSE;
+       }
+}
+
 CFStringRef
 createCFString(const char* str)
 {
@@ -89,7 +127,7 @@ main(int argc, char** argv)
        }
 
 
-       CFStringRef keyRef = createCFString(argv[1]);
+       CFStringRef keyRef = createCFString(key);
        if(keyRef == NULL) {
                fprintf(stderr, "Fatal error: Couldn't create CFStringRef from arg2\n");
                return 1;
@@ -107,13 +145,7 @@ main(int argc, char** argv)
                }
                return 0;
        }
-       else if(CFStringGetTypeID() == CFGetTypeID(valueRef)) {
-               printString((CFStringRef)valueRef);
-       }
-       else if(CFNumberGetTypeID() == CFGetTypeID(valueRef)) {
-               printNumber((CFNumberRef)valueRef);
-       }
-       else {
+       if(!printCFTypeRef(valueRef)) {
                fprintf(stderr, "Fatal error: Unsupported value type in dictionary\n");
                CFRelease(valueRef);
                return 1;