Mercurial > hg > dmlib
changeset 2516:5fcc9f7b8ad8
Change dmC64DecodeBMP() probeOffs and dataOffs to ssize_t, and use default
values if negative values are provided. Also implement support for
load-addressless formats.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 12 May 2020 20:27:00 +0300 |
parents | a40de347fcb0 |
children | 106f4426c729 |
files | tools/64vw.c tools/gfxconv.c tools/lib64gfx.c tools/lib64gfx.h |
diffstat | 4 files changed, 16 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/tools/64vw.c Tue May 12 20:06:24 2020 +0300 +++ b/tools/64vw.c Tue May 12 20:27:00 2020 +0300 @@ -222,7 +222,7 @@ if (optProbeOnly) ret = dmC64ProbeBMP(&tmp, fmt) != DM_PROBE_SCORE_FALSE ? DMERR_OK : DMERR_NOT_SUPPORTED; else - ret = dmC64DecodeBMP(cimage, &tmp, 0, 2, fmt, forced); + ret = dmC64DecodeBMP(cimage, &tmp, -1, -1, fmt, forced); exit: dmFree(dataBuf);
--- a/tools/gfxconv.c Tue May 12 20:06:24 2020 +0300 +++ b/tools/gfxconv.c Tue May 12 20:27:00 2020 +0300 @@ -2770,7 +2770,7 @@ res = dmC64DecodeBMP(&inC64Image, dmGrowBufConstCreateFrom(&tbuf, dataBuf, dataSize), - 0, 2, &inC64Fmt, forced); + -1, -1, &inC64Fmt, forced); if (forced == NULL && inC64Fmt != NULL && res == DMERR_OK) {
--- a/tools/lib64gfx.c Tue May 12 20:06:24 2020 +0300 +++ b/tools/lib64gfx.c Tue May 12 20:27:00 2020 +0300 @@ -1512,7 +1512,7 @@ int dmC64DecodeBMP(DMC64Image **img, const DMGrowBuf *buf, - const size_t probeOffs, const size_t loadOffs, + ssize_t probeOffs, ssize_t dataOffs, const DMC64ImageFormat **fmt, const DMC64ImageFormat *forced) { DMGrowBuf tmp; @@ -1526,7 +1526,10 @@ else { // Nope, perform a generic probe - if (probeOffs >= buf->len) + if (probeOffs < 0) + probeOffs = 0; + + if ((size_t) probeOffs >= buf->len) return DMERR_OUT_OF_DATA; dmGrowBufConstCopyOffs(&tmp, buf, probeOffs); @@ -1534,9 +1537,6 @@ return DMERR_NOT_SUPPORTED; } - if (loadOffs >= buf->len) - return DMERR_INVALID_ARGS; - if (*fmt == NULL) return DMERR_NOT_SUPPORTED; @@ -1548,7 +1548,14 @@ if ((*img = dmC64ImageAlloc(*fmt)) == NULL) return DMERR_MALLOC; - dmGrowBufConstCopyOffs(&tmp, buf, loadOffs); + // If the format has a loading address, adjust buffer + if (dataOffs < 0) + dataOffs = 2; + + if ((*fmt)->addr >= 0) + dmGrowBufConstCopyOffs(&tmp, buf, dataOffs); + else + dmGrowBufConstCopy(&tmp, buf); // Decode the bitmap to memory layout if ((*fmt)->decode != NULL)
--- a/tools/lib64gfx.h Tue May 12 20:06:24 2020 +0300 +++ b/tools/lib64gfx.h Tue May 12 20:27:00 2020 +0300 @@ -424,7 +424,7 @@ int dmC64ConvertBMP2Image(DMImage **pdst, const DMC64Image *src, const DMC64ImageConvSpec *spec); int dmC64ConvertImage2BMP(DMC64Image **pdst, const DMImage *src, const DMC64ImageFormat *fmt, const DMC64ImageConvSpec *spec); -int dmC64DecodeBMP(DMC64Image **img, const DMGrowBuf *buf, const size_t probeOffs, const size_t loadOffs, const DMC64ImageFormat **fmt, const DMC64ImageFormat *forced); +int dmC64DecodeBMP(DMC64Image **img, const DMGrowBuf *buf, ssize_t probeOffs, ssize_t dataOffs, const DMC64ImageFormat **fmt, const DMC64ImageFormat *forced); int dmC64EncodeBMP(DMGrowBuf *buf, const DMC64Image *img, const DMC64ImageFormat *fmt); int dmGenericRLEAnalyze(const DMGrowBuf *buf, DMCompParams *cfg);