Exemplo n.º 1
0
static pascal void PrintPropertyListCallback(CFTypeRef key, CFTypeRef node, void *context)
	// A callback routine used by PrintPropertyList to print 
	// a property list in a nicely formatted way.
{
	#pragma unused(key)
	int i;
	int depth;
	
	depth = (int)context;
	
	for (i = 0; i < depth; i++) {
		fprintf(stderr, "  ");
	}

	{
		CFStringRef fullDesc;
		CFStringRef typeDesc;
		CFStringRef valueDesc;

		fullDesc = NULL;		
		typeDesc = CFCopyTypeIDDescription(CFGetTypeID(node));
		valueDesc = NULL;
		if ( CFQPropertyListIsLeaf(node) ) {
			if ( CFGetTypeID(node) == CFStringGetTypeID() ) {
				valueDesc = (CFStringRef) CFRetain(node);
			} else if ( CFGetTypeID(node) == CFNumberGetTypeID() ) {
				valueDesc = (CFStringRef) CFRetain(node);
			} else {
				valueDesc = CFCopyDescription(node);
			}
			fullDesc = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@ : %@ [%d] = %@"), key, typeDesc, CFGetRetainCount(node), valueDesc);
		} else {
			fullDesc = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@ : %@ [%d]"), key, typeDesc, CFGetRetainCount(node));
		}
		CFShow(fullDesc);
		CFQRelease(fullDesc);
		CFQRelease(valueDesc);
		CFQRelease(typeDesc);
	}

	if ( ! CFQPropertyListIsLeaf(node) ) {
		CFQPropertyListShallowApplyFunction(node, PrintPropertyListCallback, (void *) (depth + 1) );
	}
}
Exemplo n.º 2
0
void DigestTransform::AttributeChanged(CFStringRef name, CFTypeRef value)
{
	if (CFStringCompare(name, kSecTransformInputAttributeName, 0) == kCFCompareEqualTo)
	{
		if (value == NULL)
		{
			// we are done, finalize the digest and send the result forward
			const void* result = mDigest->Finalize();
			
			// send the result
			CFDataRef resultRef = CFDataCreate(NULL, (UInt8*) result, mDigest->DigestLength());
			SendAttribute(kSecTransformOutputAttributeName, resultRef);
			CFRelease(resultRef);
			
			// send the EOS
			SendAttribute(kSecTransformOutputAttributeName, NULL);
		}
		else
		{
			// if we got an error, just pass it on
			CFTypeID valueType = CFGetTypeID(value);
			if (valueType == CFErrorGetTypeID())
			{
				SendAttribute(kSecTransformOutputAttributeName, value);
			}
			else if (valueType != CFDataGetTypeID())
			{
				CFStringRef idType = CFCopyTypeIDDescription(valueType);
				CFErrorRef result = CreateSecTransformErrorRef(kSecTransformErrorInvalidType, "value is not a CFDataRef -- it's a %@ instead", idType);
				CFRelease(idType);
				SetAttributeNoCallback(kSecTransformOutputAttributeName, result);
			}
			else
			{
				CFDataRef valueRef = (CFDataRef) value;
				mDigest->Update(CFDataGetBytePtr(valueRef), CFDataGetLength(valueRef));
			}
		}
	}
}
Exemplo n.º 3
0
void PrintCFTypeInternalFormat(CFTypeRef value, uint32_t depth) {
	bool foundType = false;
	CFStringRef valueType = CFCopyTypeIDDescription(CFGetTypeID(value));
	CFStringRef dictionaryType = CFCopyTypeIDDescription(CFDictionaryGetTypeID());
	if (CFStringCompare(valueType, dictionaryType, 0x0) == kCFCompareEqualTo) {
		foundType = true;
		printf("{\n");
		PrintCFDictionaryInternalFormatting(value, depth+0x1);
		PrintDepth(depth,"}\n");
	}
	CFSafeRelease(dictionaryType);
	
	CFStringRef booleanType = CFCopyTypeIDDescription(CFBooleanGetTypeID());
	if (CFStringCompare(valueType, booleanType, 0x0) == kCFCompareEqualTo) {
		foundType = true;
		printf("%s\n",(CFBooleanGetValue(value) ? "True" : "False"));
	}
	CFSafeRelease(booleanType);
	
	CFStringRef stringType = CFCopyTypeIDDescription(CFStringGetTypeID());
	if (CFStringCompare(valueType, stringType, 0x0) == kCFCompareEqualTo) {
		foundType = true;
		printf("%s\n",(char*)CFStringGetCStringPtr(value,kCFStringEncodingUTF8));
	}
	CFSafeRelease(stringType);
	
	CFStringRef numberType = CFCopyTypeIDDescription(CFNumberGetTypeID());
	if (CFStringCompare(valueType, numberType, 0x0) == kCFCompareEqualTo) {
		foundType = true;
		CFIndex numberType = CFNumberGetType(value);
		switch (numberType) {
			case kCFNumberSInt8Type: {
				SInt8 number;
				CFNumberGetValue(value, numberType, &number);
				printf("%hhd\n",number);
				break;
			};
			case kCFNumberSInt16Type: {
				SInt16 number;
				CFNumberGetValue(value, numberType, &number);
				printf("%hd\n",number);
				break;
			};
			case kCFNumberSInt32Type: {
				SInt32 number;
				CFNumberGetValue(value, numberType, &number);
				printf("%d\n",(int32_t)number);
				break;
			};
			case kCFNumberSInt64Type: {
				SInt64 number;
				CFNumberGetValue(value, numberType, &number);
				printf("%lld\n",number);
				break;
			};
			case kCFNumberFloat32Type: {
				Float32 number;
				CFNumberGetValue(value, numberType, &number);
				printf("%.f\n",number);
				break;
			};
			case kCFNumberFloat64Type: {
				Float64 number;
				CFNumberGetValue(value, numberType, &number);
				printf("%.f\n",number);
				break;
			};
			case kCFNumberCharType: {
				char number;
				CFNumberGetValue(value, numberType, &number);
				printf("%c\n",number);
				break;
			};
			case kCFNumberShortType: {
				short number;
				CFNumberGetValue(value, numberType, &number);
				printf("%hd\n",number);
				break;
			};
			case kCFNumberIntType: {
				int number;
				CFNumberGetValue(value, numberType, &number);
				printf("%d\n",number);
				break;
			};
			case kCFNumberLongType: {
				long number;
				CFNumberGetValue(value, numberType, &number);
				printf("%ld\n",number);
				break;
			};
			case kCFNumberLongLongType: {
				long long number;
				CFNumberGetValue(value, numberType, &number);
				printf("%qd\n",number);
				break;
			};
			case kCFNumberFloatType: {
				float number;
				CFNumberGetValue(value, numberType, &number);
				printf("%.f\n",number);
				break;
			};
			case kCFNumberDoubleType: {
				double number;
				CFNumberGetValue(value, numberType, &number);
				printf("%.f\n",number);
				break;
			};
			case kCFNumberCFIndexType: {
				CFIndex number;
				CFNumberGetValue(value, numberType, &number);
				printf("%ld\n",number);
				break;
			};
			case kCFNumberNSIntegerType: {
				NSInteger number;
				CFNumberGetValue(value, numberType, &number);
				printf("%ld\n",(long)number);
				break;
			};
			case kCFNumberCGFloatType: {
				CGFloat number;
				CFNumberGetValue(value, numberType, &number);
				printf("%.f\n",number);
				break;
			};
			default: {
				break;
			};
		}
	}
	CFSafeRelease(numberType);
	
	CFStringRef arrayType = CFCopyTypeIDDescription(CFArrayGetTypeID());
	if (CFStringCompare(valueType, arrayType, 0x0) == kCFCompareEqualTo) {
		foundType = true;
		CFIndex count = CFArrayGetCount(value);
		printf("[\n");
		for (CFIndex i = 0x0; i < count; i++) {
			CFTypeRef item = CFArrayGetValueAtIndex(value, i);
			PrintDepth(depth+0x1,"");
			PrintCFTypeInternalFormat(item, depth+0x1);
		}
		PrintDepth(depth,"]\n");
	}
	CFSafeRelease(arrayType);
	
	if (!foundType) {
		CFStringRef description = CFCopyDescription(value);
		printf("%s\n",(char*)CFStringGetCStringPtr(description,kCFStringEncodingUTF8));
		CFSafeRelease(description);
	}
	
	CFSafeRelease(valueType);
}
void PrintCFDictionaryInternalFormatting(CFDictionaryRef dictionary, uint32_t depth) {
	CFIndex keyCount = CFDictionaryGetCount(dictionary);
	Pointer keys[keyCount];
	Pointer values[keyCount];
	CFDictionaryGetKeysAndValues(dictionary, PtrCast(keys,const void**), PtrCast(values,const void**));
	for (uint32_t i = 0x0; i < keyCount; i++) {
		CFStringRef key = PtrCast(keys[i],CFStringRef);
		CFTypeRef value = PtrCast(values[i],CFTypeRef);
		PrintDepth(depth,"%s: ",(char*)CFStringGetCStringPtr(key,kCFStringEncodingUTF8));
		
		CFStringRef valueType = CFCopyTypeIDDescription(CFGetTypeID(value));
		if (CFStringCompare(valueType, CFCopyTypeIDDescription(CFDictionaryGetTypeID()), 0x0) == kCFCompareEqualTo) {
			printf("\n");
			PrintCFDictionaryInternalFormatting(value, depth+0x1);
			printf("\n");
		}
		if (CFStringCompare(valueType, CFCopyTypeIDDescription(CFBooleanGetTypeID()), 0x0) == kCFCompareEqualTo) {
			printf("%s\n",(CFBooleanGetValue(value) ? "True" : "False"));
		}
		if (CFStringCompare(valueType, CFCopyTypeIDDescription(CFStringGetTypeID()), 0x0) == kCFCompareEqualTo) {
			printf("%s\n",(char*)CFStringGetCStringPtr(value,kCFStringEncodingUTF8));
		}
		if (CFStringCompare(valueType, CFCopyTypeIDDescription(CFNumberGetTypeID()), 0x0) == kCFCompareEqualTo) {
			CFIndex numberType = CFNumberGetType(value);
			switch (numberType) {
				case kCFNumberSInt8Type: {
					SInt8 number;
					CFNumberGetValue(value, numberType, &number);
					printf("%hhd\n",number);
					break;
				};
				case kCFNumberSInt16Type: {
					SInt16 number;
					CFNumberGetValue(value, numberType, &number);
					printf("%hd\n",number);
					break;
				};
				case kCFNumberSInt32Type: {
					SInt32 number;
					CFNumberGetValue(value, numberType, &number);
					printf("%dz\n",number);
					break;
				};
				case kCFNumberSInt64Type: {
					SInt64 number;
					CFNumberGetValue(value, numberType, &number);
					printf("%lldz\n",number);
					break;
				};
				case kCFNumberFloat32Type: {
					Float32 number;
					CFNumberGetValue(value, numberType, &number);
					printf("%.f\n",number);
					break;
				};
				case kCFNumberFloat64Type: {
					Float64 number;
					CFNumberGetValue(value, numberType, &number);
					printf("%.f\n",number);
					break;
				};
				case kCFNumberCharType: {
					char number;
					CFNumberGetValue(value, numberType, &number);
					printf("%c\n",number);
					break;
				};
				case kCFNumberShortType: {
					short number;
					CFNumberGetValue(value, numberType, &number);
					printf("%hd\n",number);
					break;
				};
				case kCFNumberIntType: {
					int number;
					CFNumberGetValue(value, numberType, &number);
					printf("%dz\n",number);
					break;
				};
				case kCFNumberLongType: {
					long number;
					CFNumberGetValue(value, numberType, &number);
					printf("%ldz\n",number);
					break;
				};
				case kCFNumberLongLongType: {
					long long number;
					CFNumberGetValue(value, numberType, &number);
					printf("%qdz\n",number);
					break;
				};
				case kCFNumberFloatType: {
					float number;
					CFNumberGetValue(value, numberType, &number);
					printf("%.f\n",number);
					break;
				};
				case kCFNumberDoubleType: {
					double number;
					CFNumberGetValue(value, numberType, &number);
					printf("%.f\n",number);
					break;
				};
				case kCFNumberCFIndexType: {
					CFIndex number;
					CFNumberGetValue(value, numberType, &number);
					printf("%ldz\n",number);
					break;
				};
				case kCFNumberNSIntegerType: {
					NSInteger number;
					CFNumberGetValue(value, numberType, &number);
					printf("%ldz\n",number);
					break;
				};
				case kCFNumberCGFloatType: {
					CGFloat number;
					CFNumberGetValue(value, numberType, &number);
					printf("%.f\n",number);
					break;
				};
				default: {
					break;
				};
			}
		}
	}
}