* @brief read one request from a csv file * * @param reader * @param req * @return int */
| 346 | * @return int |
| 347 | */ |
| 348 | int csv_read_one_req(reader_t *const reader, request_t *const req) { |
| 349 | csv_params_t *csv_params = reader->reader_params; |
| 350 | struct csv_parser *csv_parser = csv_params->csv_parser; |
| 351 | char **line_buf_ptr = &reader->line_buf; |
| 352 | size_t *line_buf_size_ptr = &reader->line_buf_size; |
| 353 | |
| 354 | csv_params->request = req; |
| 355 | DEBUG_ASSERT(csv_params->curr_field_idx == 1); |
| 356 | |
| 357 | ssize_t read_size = getline(line_buf_ptr, line_buf_size_ptr, reader->file); |
| 358 | if (read_size == -1) { |
| 359 | req->valid = false; |
| 360 | return 1; |
| 361 | } |
| 362 | |
| 363 | if ((ssize_t)csv_parse(csv_parser, *line_buf_ptr, read_size, csv_cb1, csv_cb2, |
| 364 | reader) != read_size) { |
| 365 | WARN("parsing csv file error: %s\n", |
| 366 | csv_strerror(csv_error(csv_params->csv_parser))); |
| 367 | } |
| 368 | |
| 369 | csv_fini(csv_params->csv_parser, csv_cb1, csv_cb2, reader); |
| 370 | |
| 371 | if (req->obj_size == 0 && reader->ignore_size_zero_req) { |
| 372 | if (reader->read_direction == READ_FORWARD) { |
| 373 | return csv_read_one_req(reader, req); |
| 374 | } else { |
| 375 | return read_one_req_above(reader, req); |
| 376 | } |
| 377 | } |
| 378 | |
| 379 | if (reader->n_req_left > 0) reader->last_req_clock_time = req->clock_time; |
| 380 | |
| 381 | return 0; |
| 382 | } |
| 383 | |
| 384 | void csv_reset_reader(reader_t *reader) { |
| 385 | csv_params_t *csv_params = reader->reader_params; |
no test coverage detected