| 6 | #include <string.h> |
| 7 | |
| 8 | avifResult avifRWDataRealloc(avifRWData * raw, size_t newSize) |
| 9 | { |
| 10 | if (raw->size != newSize) { |
| 11 | if (newSize == 0) { |
| 12 | // avifAlloc(0) returns NULL, so handle the shrink-to-zero case by freeing the buffer. |
| 13 | avifRWDataFree(raw); |
| 14 | return AVIF_RESULT_OK; |
| 15 | } |
| 16 | uint8_t * newData = (uint8_t *)avifAlloc(newSize); |
| 17 | AVIF_CHECKERR(newData, AVIF_RESULT_OUT_OF_MEMORY); |
| 18 | if (raw->size) { |
| 19 | memcpy(newData, raw->data, AVIF_MIN(raw->size, newSize)); |
| 20 | } |
| 21 | avifFree(raw->data); |
| 22 | raw->data = newData; |
| 23 | raw->size = newSize; |
| 24 | } |
| 25 | return AVIF_RESULT_OK; |
| 26 | } |
| 27 | |
| 28 | avifResult avifRWDataSet(avifRWData * raw, const uint8_t * data, size_t len) |
| 29 | { |