#ifndef _S_CFUTIL_H
#define _S_CFUTIL_H
#include <CoreFoundation/CFPropertyList.h>
#include <CoreFoundation/CFString.h>
#include <CoreFoundation/CFArray.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <stdint.h>
#include <stdbool.h>
#include "symbol_scope.h"
void
my_CFRelease(void * t);
CFPropertyListRef
my_CFPropertyListCreateFromFile(const char * filename);
int
my_CFPropertyListWriteFile(CFPropertyListRef plist, const char * filename,
mode_t perms);
Boolean
my_CFStringArrayToCStringArray(CFArrayRef arr, void * buffer, int * buffer_size,
int * ret_count);
Boolean
my_CFStringArrayToEtherArray(CFArrayRef array, char * buffer, int * buffer_size,
int * ret_count);
bool
my_CFStringToIPAddress(CFStringRef str, struct in_addr * ret_ip);
int
my_CFStringToCStringAndLengthExt(CFStringRef cfstr, char * str, int len,
boolean_t is_external);
static __inline__ int
my_CFStringToCStringAndLength(CFStringRef cfstr, char * str, int len)
{
return (my_CFStringToCStringAndLengthExt(cfstr, str, len, FALSE));
}
bool
my_CFTypeToNumber(CFTypeRef element, uint32_t * l_p);
bool
my_CFStringToNumber(CFStringRef str, uint32_t * ret_val);
void
my_CFDictionarySetTypeAsArrayValue(CFMutableDictionaryRef dict,
CFStringRef prop, CFTypeRef val);
void
my_CFDictionarySetIPAddressAsArrayValue(CFMutableDictionaryRef dict,
CFStringRef prop,
struct in_addr ip_addr);
void
my_CFArrayAppendUniqueValue(CFMutableArrayRef arr, CFTypeRef new);
CFStringRef
my_CFStringCopyComponent(CFStringRef path, CFStringRef separator,
CFIndex component_index);
CFStringRef
my_CFStringCreateWithIPAddress(const struct in_addr ip);
CFStringRef
my_CFStringCreateWithIPv6Address(const void * ip6_addr);
void
my_CFStringAppendBytesAsHex(CFMutableStringRef str, const uint8_t * bytes,
int length, char sep);
char *
my_CFStringToCString(CFStringRef cfstr, CFStringEncoding encoding);
Boolean
my_CFEqual(CFTypeRef val1, CFTypeRef val2);
#define STRING_APPEND(__string, __format, ...) \
CFStringAppendFormat(__string, NULL, \
CFSTR(__format), \
## __VA_ARGS__)
#endif