| 1156 | */ |
| 1157 | |
| 1158 | static char *parse_text_line(char *pos) |
| 1159 | { |
| 1160 | int i, nr; |
| 1161 | char *row= pos; |
| 1162 | size_t len; |
| 1163 | DBUG_ENTER("parse_text_line"); |
| 1164 | |
| 1165 | len= strlen (pos); |
| 1166 | while (*pos) |
| 1167 | { |
| 1168 | if (*pos == '\\') |
| 1169 | { |
| 1170 | switch (*++pos) { |
| 1171 | case '\\': |
| 1172 | case '"': |
| 1173 | (void) memmove (pos - 1, pos, len - (row - pos)); |
| 1174 | break; |
| 1175 | case 'n': |
| 1176 | pos[-1]= '\n'; |
| 1177 | (void) memmove (pos, pos + 1, len - (row - pos)); |
| 1178 | break; |
| 1179 | default: |
| 1180 | if (*pos >= '0' && *pos < '8') |
| 1181 | { |
| 1182 | nr= 0; |
| 1183 | for (i= 0; i < 3 && (*pos >= '0' && *pos < '8'); i++) |
| 1184 | nr= nr * 8 + (*(pos++) - '0'); |
| 1185 | pos -= i; |
| 1186 | pos[-1]= nr; |
| 1187 | (void) memmove (pos, pos + i, len - (row - pos)); |
| 1188 | } |
| 1189 | else if (*pos) |
| 1190 | (void) memmove (pos - 1, pos, len - (row - pos)); /* Remove '\' */ |
| 1191 | } |
| 1192 | } |
| 1193 | else |
| 1194 | pos++; |
| 1195 | } |
| 1196 | while (pos > row + 1 && *pos != '"') |
| 1197 | pos--; |
| 1198 | *pos= 0; |
| 1199 | DBUG_RETURN(pos); |
| 1200 | } |
| 1201 | |
| 1202 | |
| 1203 | /* Copy rows from memory to file and remember position */ |
no outgoing calls
no test coverage detected