| 631 | } |
| 632 | |
| 633 | static bencode_item_t *__bencode_decode(bencode_buffer_t *buf, const char *s, const char *end) { |
| 634 | if (s >= end) |
| 635 | return NULL; |
| 636 | |
| 637 | switch (*s) { |
| 638 | case 'd': |
| 639 | return __bencode_decode_dictionary(buf, s, end); |
| 640 | case 'l': |
| 641 | return __bencode_decode_list(buf, s, end); |
| 642 | case 'i': |
| 643 | return __bencode_decode_integer(buf, s, end); |
| 644 | case 'e': |
| 645 | return &__bencode_end_marker; |
| 646 | case '0': |
| 647 | case '1': |
| 648 | case '2': |
| 649 | case '3': |
| 650 | case '4': |
| 651 | case '5': |
| 652 | case '6': |
| 653 | case '7': |
| 654 | case '8': |
| 655 | case '9': |
| 656 | return __bencode_decode_string(buf, s, end); |
| 657 | default: |
| 658 | return NULL; |
| 659 | } |
| 660 | } |
| 661 | |
| 662 | bencode_item_t *bencode_decode(bencode_buffer_t *buf, const char *s, int len) { |
| 663 | assert(s != NULL); |
no test coverage detected