char *xdebug_join(char *delim, xdebug_arg *args, int begin, int end) { int i; xdebug_str *ret; xdebug_str_ptr_init(ret); if (begin < 0) { begin = 0; } if (end > args->c - 1) { end = args->c - 1; } for (i = begin; i < end; i++) { xdebug_str_add(ret, args->args[i], 0); xdebug_str_add(ret, delim, 0); } xdebug_str_add(ret, args->args[end], 0); return ret->d; }
void XDebugServer::sendMessage(xdebug_xml_node& xml) { // Convert xml to an xdebug_str xdebug_str xml_message = {0, 0, nullptr}; xdebug_xml_return_node(&xml, &xml_message); size_t msg_len = xml_message.l + sizeof(XML_MSG_HEADER) - 1; // Log the message log("-> %s\n\n", xml_message.d); logFlush(); // Format the message xdebug_str* message; xdebug_str_ptr_init(message); xdebug_str_add(message, xdebug_sprintf("%d", msg_len, 1), 1); xdebug_str_addl(message, "\0", 1, 0); xdebug_str_add(message, XML_MSG_HEADER, 0); xdebug_str_add(message, xml_message.d, 0); xdebug_str_addl(message, "\0", 1, 0); xdebug_str_dtor(xml_message); // Write the message write(m_socket, message->d, message->l); xdebug_str_ptr_dtor(message); }