1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#include "JAPrint.h"
void JAPrint(CFStringRef format, ...)
{
va_list args;
va_start(args, format);
JAPrintWithArguments(format, args);
va_end(args);
}
void JAPrintWithArguments(CFStringRef format, va_list args)
{
JAFPrintWithArguments(stdout, format, args);
}
void JAFPrint(FILE *file, CFStringRef format, ...)
{
va_list args;
va_start(args, format);
JAFPrintWithArguments(file, format, args);
va_end(args);
}
void JAFPrintWithArguments(FILE *file, CFStringRef format, va_list args)
{
CFStringRef string = NULL;
char *cString = NULL;
Boolean freeBuffer = FALSE;
CFIndex size;
string = CFStringCreateWithFormatAndArguments(kCFAllocatorDefault, NULL, format, args);
if (string != NULL)
{
cString = (char *)CFStringGetCStringPtr(string, JAPRINT_ENCODING);
if (cString == NULL)
{
size = CFStringGetMaximumSizeForEncoding(CFStringGetLength(string), JAPRINT_ENCODING) + 1;
cString = malloc(size);
if (cString != NULL)
{
if (CFStringGetCString(string, cString, size, JAPRINT_ENCODING))
{
freeBuffer = TRUE;
}
else
{
free(cString);
cString = NULL;
}
}
if (cString != NULL)
{
fputs(cString, file);
}
if (freeBuffer) free(cString);
}
CFRelease(string);
}
}
|