| 220 | } |
| 221 | |
| 222 | void free_csv_record(csv_record *record) |
| 223 | { |
| 224 | enum csv_flags flags_holder; |
| 225 | str_list *prev; |
| 226 | |
| 227 | if (!record) |
| 228 | return; |
| 229 | |
| 230 | flags_holder = *(enum csv_flags *)(record + 1); |
| 231 | if (flags_holder & CSV_SHM) |
| 232 | free_f = osips_shm_free; |
| 233 | else |
| 234 | free_f = osips_pkg_free; |
| 235 | |
| 236 | while (record) { |
| 237 | prev = record; |
| 238 | record = record->next; |
| 239 | |
| 240 | if (flags_holder & CSV_DUP_FIELDS) |
| 241 | free_f(prev->s.s); |
| 242 | |
| 243 | free_f(prev); |
| 244 | } |
| 245 | } |
| 246 | |
| 247 | static int check_quote_csv_record(str *val, int *escape) |
| 248 | { |
no outgoing calls