]>
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";
7 printCFTypeRef(CFTypeRef value
);
11 getDictValue(CFTypeRef
* value
, CFStringRef key
)
13 assert(value
!= NULL
);
17 CFDictionaryRef dictRef
;
18 dictRef
= SCDynamicStoreCopyProxies((SCDynamicStoreRef
)NULL
);
19 result
= (dictRef
!= NULL
);
21 *value
= (CFNumberRef
)CFDictionaryGetValue(dictRef
, key
);
37 printNumber(CFNumberRef numberRef
)
39 assert(numberRef
!= NULL
);
42 if(CFNumberGetValue(numberRef
, kCFNumberIntType
, &numberVal
)) {
43 printf("%d\n", numberVal
);
50 printString(CFStringRef strRef
)
52 assert(strRef
!= NULL
);
55 if(CFStringGetCString(strRef
, strVal
, (CFIndex
)1024,
56 kCFStringEncodingASCII
))
58 printf("%s\n", strVal
);
65 printArray(CFArrayRef arrayRef
)
67 assert(arrayRef
!= NULL
);
69 int length
= CFArrayGetCount(arrayRef
);
70 for(int i
= 0; i
< length
; ++i
) {
71 if(!printCFTypeRef(CFArrayGetValueAtIndex(arrayRef
, i
))) {
80 printCFTypeRef(CFTypeRef value
)
85 else if(CFStringGetTypeID() == CFGetTypeID(value
)) {
86 return printString((CFStringRef
)value
);
88 else if(CFNumberGetTypeID() == CFGetTypeID(value
)) {
89 return printNumber((CFNumberRef
)value
);
91 else if(CFArrayGetTypeID() == CFGetTypeID(value
)) {
92 return printArray((CFArrayRef
)value
);
100 createCFString(const char* str
)
102 return CFStringCreateWithCStringNoCopy(NULL
, str
,
103 kCFStringEncodingASCII
,
108 usage(const char* program
)
110 fprintf(stderr
, "Usage: %s [-q] key\n", program
);
111 fprintf(stderr
, "Look in %s for keys. Eg, HTTPProxy\n\n", KEYFILE
);
115 main(int argc
, char** argv
)
121 } else if(argc
== 3 && strcmp("-q", argv
[1]) == 0) {
130 CFStringRef keyRef
= createCFString(key
);
132 fprintf(stderr
, "Fatal error: Couldn't create CFStringRef from arg2\n");
136 CFTypeRef valueRef
= NULL
;
137 if(!getDictValue(&valueRef
, keyRef
)) {
138 fprintf(stderr
, "Fatal error: Error accessing dictionary\n");
142 if(valueRef
== NULL
) {
144 fprintf(stderr
, "No value for that key\n");
148 if(!printCFTypeRef(valueRef
)) {
149 fprintf(stderr
, "Fatal error: Unsupported value type in dictionary\n");