| 544 | } |
| 545 | |
| 546 | static bencode_item_t *__bencode_decode_integer(bencode_buffer_t *buf, const char *s, const char *end) { |
| 547 | long long int i; |
| 548 | const char *orig = s; |
| 549 | char *convend; |
| 550 | bencode_item_t *ret; |
| 551 | |
| 552 | if (*s != 'i') |
| 553 | return NULL; |
| 554 | s++; |
| 555 | |
| 556 | if (s >= end) |
| 557 | return NULL; |
| 558 | |
| 559 | if (*s == '0') { |
| 560 | i = 0; |
| 561 | s++; |
| 562 | goto done; |
| 563 | } |
| 564 | |
| 565 | i = strtoll(s, &convend, 10); |
| 566 | if (convend == s) |
| 567 | return NULL; |
| 568 | s += (convend - s); |
| 569 | |
| 570 | done: |
| 571 | if (s >= end) |
| 572 | return NULL; |
| 573 | if (*s != 'e') |
| 574 | return NULL; |
| 575 | s++; |
| 576 | |
| 577 | ret = __bencode_item_alloc(buf, 0); |
| 578 | if (!ret) |
| 579 | return NULL; |
| 580 | ret->type = BENCODE_INTEGER; |
| 581 | ret->iov[0].iov_base = (void *) orig; |
| 582 | ret->iov[0].iov_len = s - orig; |
| 583 | ret->iov[1].iov_base = NULL; |
| 584 | ret->iov[1].iov_len = 0; |
| 585 | ret->iov_cnt = 1; |
| 586 | ret->str_len = s - orig; |
| 587 | ret->value = i; |
| 588 | |
| 589 | return ret; |
| 590 | } |
| 591 | |
| 592 | static bencode_item_t *__bencode_decode_string(bencode_buffer_t *buf, const char *s, const char *end) { |
| 593 | unsigned long int sl; |
no test coverage detected