| 580 | } |
| 581 | |
| 582 | static int test_same(void) |
| 583 | { |
| 584 | struct iovec vecs[2] = { }; |
| 585 | struct io_uring src; |
| 586 | int ret; |
| 587 | |
| 588 | ret = io_uring_queue_init(1, &src, 0); |
| 589 | if (ret) { |
| 590 | fprintf(stderr, "ring_init: %d\n", ret); |
| 591 | return T_EXIT_FAIL; |
| 592 | } |
| 593 | |
| 594 | if (posix_memalign(&vecs[0].iov_base, 4096, BUF_SIZE)) |
| 595 | return T_EXIT_SKIP; |
| 596 | vecs[0].iov_len = BUF_SIZE; |
| 597 | |
| 598 | vecs[1].iov_base = NULL; |
| 599 | vecs[1].iov_len = 0; |
| 600 | |
| 601 | ret = io_uring_register_buffers(&src, vecs, 2); |
| 602 | if (ret) { |
| 603 | fprintf(stderr, "reg buffers: %d\n", ret); |
| 604 | return T_EXIT_FAIL; |
| 605 | } |
| 606 | |
| 607 | ret = io_uring_clone_buffers_offset(&src, &src, 1, 0, 2, IORING_REGISTER_DST_REPLACE); |
| 608 | if (ret) { |
| 609 | fprintf(stderr, "clone offset: %d\n", ret); |
| 610 | return T_EXIT_FAIL; |
| 611 | } |
| 612 | |
| 613 | ret = io_uring_unregister_buffers(&src); |
| 614 | if (ret) { |
| 615 | fprintf(stderr, "rsc unregister buffers: %d\n", ret); |
| 616 | return T_EXIT_FAIL; |
| 617 | } |
| 618 | |
| 619 | free(vecs[0].iov_base); |
| 620 | io_uring_queue_exit(&src); |
| 621 | return T_EXIT_PASS; |
| 622 | } |
| 623 | |
| 624 | int main(int argc, char *argv[]) |
| 625 | { |
no test coverage detected