]> code.delx.au - osx-proxyconf/commitdiff
Autodetect value types
authorJames Bunton <jamesbunton@fastmail.fm>
Sat, 28 Jul 2007 03:12:04 +0000 (13:12 +1000)
committerJames Bunton <jamesbunton@fastmail.fm>
Sat, 28 Jul 2007 03:12:04 +0000 (13:12 +1000)
proxyconf.sh
sysconfig.c

index 61b0f50f86004adf93cba29b98ce79f85e5db396..78b537c43ea50a1dd43cb932afbafdeb387ba8da 100755 (executable)
@@ -1,17 +1,17 @@
 #!/bin/bash
 
-if [ "$(sysconfig -n "HTTPEnable")" -eq 1 ]; then
-       host="$(sysconfig -s "HTTPProxy")"
-       port="$(sysconfig -n "HTTPPort")"
+if [ "$(sysconfig "HTTPEnable")" -eq 1 ]; then
+       host="$(sysconfig "HTTPProxy")"
+       port="$(sysconfig "HTTPPort")"
        echo "export http_proxy=\"http://${host}:${port}\""
 fi
-if [ "$(sysconfig -n "HTTPSEnable")" -eq 1 ]; then
-       host="$(sysconfig -s "HTTPSProxy")"
-       port="$(sysconfig -n "HTTPSPort")"
+if [ "$(sysconfig "HTTPSEnable")" -eq 1 ]; then
+       host="$(sysconfig "HTTPSProxy")"
+       port="$(sysconfig "HTTPSPort")"
        echo "export https_proxy=\"http://${host}:${port}\""
 fi
-if [ "$(sysconfig -n "FTPEnable")" -eq 1 ]; then
-       host="$(sysconfig -s "FTPProxy")"
-       port="$(sysconfig -n "FTPPort")"
+if [ "$(sysconfig "FTPEnable")" -eq 1 ]; then
+       host="$(sysconfig "FTPProxy")"
+       port="$(sysconfig "FTPPort")"
        echo "export ftp_proxy=\"http://${host}:${port}\""
 fi
index d1028b2f08c4aefda826756601dc90ba3814bc3d..be9466248d7a55f03e175bbab673800a629a5e57 100644 (file)
@@ -5,69 +5,57 @@ const char* KEYFILE = "/System/Library/Frameworks/SystemConfiguration.framework/
 
 
 Boolean
-getNumberValue(int* numberVal, const void* numberKey)
+getDictValue(CFTypeRef* value, CFStringRef key)
 {
-       assert(numberVal != NULL);
-       assert(numberKey != NULL);
+       assert(value != NULL);
+       assert(key != NULL);
 
        Boolean result;
        CFDictionaryRef dictRef;
-       CFNumberRef numberRef;
-
-
        dictRef = SCDynamicStoreCopyProxies((SCDynamicStoreRef)NULL);
        result = (dictRef != NULL);
        if(result) {
-               numberRef = (CFNumberRef)CFDictionaryGetValue(dictRef, numberKey);
-               result = (numberRef != NULL &&
-                         CFGetTypeID(numberRef) == CFNumberGetTypeID());
+               *value = (CFNumberRef)CFDictionaryGetValue(dictRef, key);
        }
-       if(result) {
-               result = CFNumberGetValue(numberRef, kCFNumberIntType, numberVal);
+       if(*value != NULL) {
+               CFRetain(*value);
        }
 
-
        if(dictRef != NULL) {
                CFRelease(dictRef);
        }
        if(!result) {
-               *numberVal = 0;
+               *value = NULL;
        }
        return result;
 }
 
 Boolean
-getStringValue(char* strVal, size_t strSize, const void* strKey)
+printNumber(CFNumberRef numberRef)
 {
-       assert(strVal != NULL);
-       assert(strKey != NULL);
-
-       Boolean result;
-       CFDictionaryRef dictRef;
-       CFStringRef strRef;
-
+       assert(numberRef != NULL);
 
-       dictRef = SCDynamicStoreCopyProxies((SCDynamicStoreRef)NULL);
-       result = (dictRef != NULL);
-
-       if(result) {
-               strRef = (CFStringRef)CFDictionaryGetValue(dictRef, strKey);
-               result = (strRef != NULL) &&
-                    (CFGetTypeID(strRef) == CFStringGetTypeID());
-       }
-       if(result) {
-               result = CFStringGetCString(strRef, strVal, (CFIndex)strSize,
-                                       kCFStringEncodingASCII);
+       int numberVal = 0;
+       if(CFNumberGetValue(numberRef, kCFNumberIntType, &numberVal)) {
+               printf("%d\n", numberVal);
+               return TRUE;
        }
+       return FALSE;
+}
 
-       
-       if(dictRef != NULL) {
-               CFRelease(dictRef);
-       }
-       if(!result) {
-               *strVal = 0;
+Boolean
+printString(CFStringRef strRef)
+{
+       assert(strRef != NULL);
+
+       char strVal[1024];
+       if(CFStringGetCString(strRef, strVal, (CFIndex)1024,
+                             kCFStringEncodingASCII))
+       {
+               printf("%s\n", strVal);
+               return TRUE;
        }
-       return result;
+       return FALSE;
 }
 
 CFStringRef
@@ -81,43 +69,57 @@ createCFString(const char* str)
 void
 usage(const char* program)
 {
-       fprintf(stderr, "Usage: %s (-n NumberKey) | (-s StringKey)\n", program);
+       fprintf(stderr, "Usage: %s [-q] key\n", program);
        fprintf(stderr, "Look in %s for keys. Eg, HTTPProxy\n\n", KEYFILE);
 }
 
 int
 main(int argc, char** argv)
 {
-       if(argc != 3) {
+       int quiet = 0;
+       const char* key;
+       if(argc == 2) {
+               key = argv[1];
+       } else if(argc == 3 && strcmp("-q", argv[1]) == 0) {
+               quiet = 1;
+               key = argv[2];
+       } else {
                usage(argv[0]);
                return 1;
        }
 
-       CFStringRef keyRef = createCFString(argv[2]);
+
+       CFStringRef keyRef = createCFString(argv[1]);
        if(keyRef == NULL) {
                fprintf(stderr, "Fatal error: Couldn't create CFStringRef from arg2\n");
                return 1;
        }
 
-       Boolean result;
-       if(strcmp("-n", argv[1]) == 0) {
-               int var = 0;
-               result = getNumberValue(&var, keyRef);
-               if(result) {
-                       printf("%d\n", var);
-               }
-       } else if(strcmp("-s", argv[1]) == 0) {
-               char str[1024];
-               result = getStringValue(str, 1024, keyRef);
-               if(result) {
-                       printf("%s\n", str);
+       CFTypeRef valueRef = NULL;
+       if(!getDictValue(&valueRef, keyRef)) {
+               fprintf(stderr, "Fatal error: Error accessing dictionary\n");
+               return 1;
+       }
+
+       if(valueRef == NULL) {
+               if(!quiet) {
+                       fprintf(stderr, "No value for that key\n");
                }
+               return 0;
+       }
+       else if(CFStringGetTypeID() == CFGetTypeID(valueRef)) {
+               printString((CFStringRef)valueRef);
+       }
+       else if(CFNumberGetTypeID() == CFGetTypeID(valueRef)) {
+               printNumber((CFNumberRef)valueRef);
        }
        else {
-               usage(argv[0]);
+               fprintf(stderr, "Fatal error: Unsupported value type in dictionary\n");
+               CFRelease(valueRef);
                return 1;
        }
 
+       CFRelease(valueRef);
        return 0;
 }