rem: printf((i > 0 ? ", %s" : "%s"), value.c_str());
add: print_to_string(&string, &length, (i > 0 ? ", %s" : "%s"), value.c_str());
context: print_syscall(debug_post_syscall &message, MemoryReader &memoryReader,	bool printArguments, bool getContents, bool printReturnValue,	bool colorize){	int32 syscallNumber = message.syscall;	Syscall *syscall = sSyscallVector[syscallNumber];	// print syscall name	if (colorize) {		printf("[%6ld] %s%s%s(", message.origin.thread, kTerminalTextRed,			syscall->Name().c_str(), kTerminalTextNormal);	} else {		printf("[%6ld] %s(", message.origin.thread, syscall->Name().c_str());	}	// print arguments	if (printArguments) {		int32 count = syscall->CountParameters();		for (int32 i = 0; i < count; i++) {			// get the value			Parameter *parameter = syscall->ParameterAt(i);			TypeHandler *handler = parameter->Handler();			string value = handler->GetParameterValue(				(char*)message.args + parameter->Offset(), getContents,				memoryReader);			printf((i > 0 ? ", %s" : "%s"), value.c_str());		}	}	printf(")");	// print return value	if (printReturnValue) {		Type *returnType = syscall->ReturnType();		TypeHandler *handler = returnType->Handler();		string value = handler->GetReturnValue(message.return_value,			getContents, memoryReader);		if (value.length() > 0) {			printf(" = %s", value.c_str());			// if the return type is status_t or ssize_t, print human-readable			// error codes			if (returnType->TypeName() == "status_t"				|| returnType->TypeName() == "ssize_t"					&& message.return_value < 0) {				printf(" %s", strerror(message.return_value));			}		}	}	if (colorize) {		printf(" %s(%lld us)%s\n", kTerminalTextMagenta,			message.end_time - message.start_time, kTerminalTextNormal);	} else {		printf(" (%lld us)\n", message.end_time - message.start_time);	}//for (int32 i = 0; i < 16; i++) {//	if (i % 4 == 0) {//		if (i > 0)//			printf("\n");//		printf("  ");//	} else//		printf(" ");//	printf("%08lx", message.args[i]);//}//printf("\n");}