output quoted string in CSV
| 2050 | |
| 2051 | // output quoted string in CSV |
| 2052 | void Output::csv(const char *data, size_t size) |
| 2053 | { |
| 2054 | const char *s = data; |
| 2055 | const char *e = data + size; |
| 2056 | const char *t = s; |
| 2057 | |
| 2058 | chr('"'); |
| 2059 | |
| 2060 | while (s < e) |
| 2061 | { |
| 2062 | int c = *s; |
| 2063 | |
| 2064 | if ((c & 0x80) == 0) |
| 2065 | { |
| 2066 | if (c == '"') |
| 2067 | { |
| 2068 | str(t, s - t); |
| 2069 | t = s + 1; |
| 2070 | str("\"\"", 2); |
| 2071 | } |
| 2072 | else if ((c < 0x20 && c != '\t') || c == '\\') |
| 2073 | { |
| 2074 | str(t, s - t); |
| 2075 | t = s + 1; |
| 2076 | |
| 2077 | switch (c) |
| 2078 | { |
| 2079 | case '\b': |
| 2080 | c = 'b'; |
| 2081 | break; |
| 2082 | |
| 2083 | case '\f': |
| 2084 | c = 'f'; |
| 2085 | break; |
| 2086 | |
| 2087 | case '\n': |
| 2088 | c = 'n'; |
| 2089 | break; |
| 2090 | |
| 2091 | case '\r': |
| 2092 | c = 'r'; |
| 2093 | break; |
| 2094 | |
| 2095 | case '\t': |
| 2096 | c = 't'; |
| 2097 | break; |
| 2098 | } |
| 2099 | |
| 2100 | if (c > 0x20) |
| 2101 | { |
| 2102 | chr('\\'); |
| 2103 | chr(c); |
| 2104 | } |
| 2105 | else |
| 2106 | { |
| 2107 | str("\\x", 2); |
| 2108 | hex(c, 2); |
| 2109 | } |
nothing calls this directly
no outgoing calls
no test coverage detected