diff --git a/src/c_wrapper/debug.cpp b/src/c_wrapper/debug.cpp index 95cb808432c7aaccfa3287eb413a323c0a5d8290..fbc69c908948b51da033b20c8ee1eb3b91f44d5d 100644 --- a/src/c_wrapper/debug.cpp +++ b/src/c_wrapper/debug.cpp @@ -7,9 +7,33 @@ namespace pyopencl { void dbg_print_str(std::ostream &stm, const char *str, size_t len) { - // TODO escape stm << '"'; - stm.write(str, len); + for (size_t i = 0;i < len;i++) { + char escaped = 0; +#define escape_char(in, out) \ + case in: \ + escaped = out; \ + break + switch (str[i]) { + escape_char('\'', '\''); + escape_char('\"', '\"'); + escape_char('\?', '\?'); + escape_char('\\', '\\'); + escape_char('\0', '0'); + escape_char('\a', 'a'); + escape_char('\b', 'b'); + escape_char('\f', 'f'); + escape_char('\r', 'r'); + escape_char('\v', 'v'); + default: + break; + } + if (escaped) { + stm << '\\' << escaped; + } else { + stm << str[i]; + } + } stm << '"'; }