| 624 | } |
| 625 | |
| 626 | void* jpeg_decoder::alloc(size_t nSize, bool zero) |
| 627 | { |
| 628 | nSize = (JPGD_MAX(nSize, 1) + 3) & ~3; |
| 629 | char* rv = nullptr; |
| 630 | for (mem_block* b = m_pMem_blocks; b; b = b->m_pNext) |
| 631 | { |
| 632 | if ((b->m_used_count + nSize) <= b->m_size) |
| 633 | { |
| 634 | rv = b->m_data + b->m_used_count; |
| 635 | b->m_used_count += nSize; |
| 636 | break; |
| 637 | } |
| 638 | } |
| 639 | if (!rv) |
| 640 | { |
| 641 | int capacity = JPGD_MAX(32768 - 256, ((int)nSize + 2047) & ~2047); |
| 642 | mem_block* b = (mem_block*)jpgd_malloc(sizeof(mem_block) + capacity); |
| 643 | if (!b) |
| 644 | { |
| 645 | stop_decoding(JPGD_NOTENOUGHMEM); |
| 646 | } |
| 647 | |
| 648 | b->m_pNext = m_pMem_blocks; |
| 649 | m_pMem_blocks = b; |
| 650 | b->m_used_count = nSize; |
| 651 | b->m_size = capacity; |
| 652 | rv = b->m_data; |
| 653 | } |
| 654 | if (zero) memset(rv, 0, nSize); |
| 655 | return rv; |
| 656 | } |
| 657 | |
| 658 | void jpeg_decoder::word_clear(void* p, uint16 c, uint n) |
| 659 | { |
nothing calls this directly
no test coverage detected