]>
code.delx.au - osx-proxyconf/blob - sysconfig.c
1 #include <CoreFoundation/CoreFoundation.h>
2 #include <SystemConfiguration/SCDynamicStoreCopySpecific.h>
4 const char* KEYFILE
= "/System/Library/Frameworks/SystemConfiguration.framework/Headers/SCSchemaDefinitions.h";
8 getDictValue(CFTypeRef
* value
, CFStringRef key
)
10 assert(value
!= NULL
);
14 CFDictionaryRef dictRef
;
15 dictRef
= SCDynamicStoreCopyProxies((SCDynamicStoreRef
)NULL
);
16 result
= (dictRef
!= NULL
);
18 *value
= (CFNumberRef
)CFDictionaryGetValue(dictRef
, key
);
34 printNumber(CFNumberRef numberRef
)
36 assert(numberRef
!= NULL
);
39 if(CFNumberGetValue(numberRef
, kCFNumberIntType
, &numberVal
)) {
40 printf("%d\n", numberVal
);
47 printString(CFStringRef strRef
)
49 assert(strRef
!= NULL
);
52 if(CFStringGetCString(strRef
, strVal
, (CFIndex
)1024,
53 kCFStringEncodingASCII
))
55 printf("%s\n", strVal
);
62 createCFString(const char* str
)
64 return CFStringCreateWithCStringNoCopy(NULL
, str
,
65 kCFStringEncodingASCII
,
70 usage(const char* program
)
72 fprintf(stderr
, "Usage: %s [-q] key\n", program
);
73 fprintf(stderr
, "Look in %s for keys. Eg, HTTPProxy\n\n", KEYFILE
);
77 main(int argc
, char** argv
)
83 } else if(argc
== 3 && strcmp("-q", argv
[1]) == 0) {
92 CFStringRef keyRef
= createCFString(argv
[1]);
94 fprintf(stderr
, "Fatal error: Couldn't create CFStringRef from arg2\n");
98 CFTypeRef valueRef
= NULL
;
99 if(!getDictValue(&valueRef
, keyRef
)) {
100 fprintf(stderr
, "Fatal error: Error accessing dictionary\n");
104 if(valueRef
== NULL
) {
106 fprintf(stderr
, "No value for that key\n");
110 else if(CFStringGetTypeID() == CFGetTypeID(valueRef
)) {
111 printString((CFStringRef
)valueRef
);
113 else if(CFNumberGetTypeID() == CFGetTypeID(valueRef
)) {
114 printNumber((CFNumberRef
)valueRef
);
117 fprintf(stderr
, "Fatal error: Unsupported value type in dictionary\n");