MCPcopy Create free account
hub / github.com/AutoHotkey/AutoHotkey / WriteF

Method WriteF

source/Debugger.cpp:2417–2524  ·  view source on GitHub ↗

Write formatted data into the buffer. Supports %s (char*), %e (char*, "&'<> escaped), %i (int), %u (unsigned int), %p (UINT_PTR).

Source from the content-addressed store, hash-verified

2415
2416// Write formatted data into the buffer. Supports %s (char*), %e (char*, "&'<> escaped), %i (int), %u (unsigned int), %p (UINT_PTR).
2417int Debugger::Buffer::WriteF(const char *aFormat, ...)
2418{
2419 if (mFailed)
2420 {
2421 // A prior Write() failed and the now-invalid data hasn't yet been cleared
2422 // from the buffer. Abort. This allows numerous other parts of the code
2423 // to omit error-checking.
2424 return DEBUGGER_E_INTERNAL_ERROR;
2425 }
2426
2427 int i;
2428 size_t len;
2429 char c;
2430 const char *format_ptr, *s, *param_ptr, *entity;
2431 char number_buf[MAX_INTEGER_SIZE];
2432 va_list vl;
2433
2434 for (len = 0, i = 0; i < 2; ++i)
2435 {
2436 va_start(vl, aFormat);
2437
2438 // Calculate the required buffer size.
2439 for (format_ptr = aFormat; c = *format_ptr; ++format_ptr)
2440 {
2441 if (c == '%')
2442 {
2443 switch (format_ptr[1])
2444 {
2445 case 's': s = va_arg(vl, char*); break;
2446 case 'i': s = _itoa(va_arg(vl, int), number_buf, 10); break;
2447 case 'u': s = _ultoa(va_arg(vl, unsigned long), number_buf, 10); break;
2448 case 'p': s = Exp32or64(_ultoa,_ui64toa)(va_arg(vl, UINT_PTR), number_buf, 10); break;
2449
2450 case 'e': // String, replace "&'<> with appropriate XML entity.
2451 {
2452 s = va_arg(vl, char*);
2453 if (i == 0)
2454 {
2455 for (param_ptr = s; *param_ptr; ++param_ptr)
2456 {
2457 switch (*param_ptr)
2458 {
2459 case '"': case '\'': len += 6; break; // &quot; or &apos;
2460 case '&': len += 5; break; // &amp;
2461 case '<': case '>': len += 4; break; // &lt; or &gt;
2462 default: ++len;
2463 }
2464 }
2465 }
2466 else
2467 {
2468 for (param_ptr = s; c = *param_ptr; ++param_ptr)
2469 {
2470 switch (c)
2471 {
2472 case '"': entity = "quot"; break;
2473 case '\'': entity = "apos"; break;
2474 case '&': entity = "amp"; break;

Callers 12

DEBUGGER_COMMANDFunction · 0.80
WriteBreakpointXmlMethod · 0.80
WritePropertyXmlMethod · 0.80
WritePropertyDataMethod · 0.80
property_get_or_valueMethod · 0.80
redirect_stdMethod · 0.80
WriteStreamPacketMethod · 0.80
SendErrorResponseMethod · 0.80
SendStandardResponseMethod · 0.80
ConnectMethod · 0.80
BeginPropertyMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected