Date: Sat, 2 Jan 2021 19:51:36 GMT From: Toomas Soome <tsoome@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 80aa931900c8 - main - contrib: setup pnglite Message-ID: <202101021951.102JpaLb058399@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by tsoome: URL: https://cgit.FreeBSD.org/src/commit/?id=80aa931900c863a5d088c49b560488ab32f2d1d9 commit 80aa931900c863a5d088c49b560488ab32f2d1d9 Author: Toomas Soome <tsoome@FreeBSD.org> AuthorDate: 2021-01-02 19:29:24 +0000 Commit: Toomas Soome <tsoome@FreeBSD.org> CommitDate: 2021-01-02 19:29:24 +0000 contrib: setup pnglite --- contrib/pnglite/README.md | 2 +- contrib/pnglite/pnglite.c | 892 +++++++++++++++++----------------------------- contrib/pnglite/pnglite.h | 289 ++++++--------- 3 files changed, 443 insertions(+), 740 deletions(-) diff --git a/contrib/pnglite/README.md b/contrib/pnglite/README.md index 4d2929600228..bbb5209b38b3 100644 --- a/contrib/pnglite/README.md +++ b/contrib/pnglite/README.md @@ -2,4 +2,4 @@ pnglite ==== #### A pretty small png library -Currently all documentation resides in pnglite.h. +Currently all documentation resides in pnglite.h. diff --git a/contrib/pnglite/pnglite.c b/contrib/pnglite/pnglite.c index 4899f24b6a85..e3cc2f866c6f 100644 --- a/contrib/pnglite/pnglite.c +++ b/contrib/pnglite/pnglite.c @@ -1,131 +1,86 @@ -/* pnglite.c - pnglite library - For conditions of distribution and use, see copyright notice in pnglite.h -*/ -#define DO_CRC_CHECKS 1 -#define USE_ZLIB 1 - -#if USE_ZLIB -#include <zlib.h> +/* + * pnglite.c - pnglite library + * For conditions of distribution and use, see copyright notice in pnglite.h + */ + +/* + * Note: this source is updated to enable build for FreeBSD boot loader. + */ + +#ifdef _STANDALONE +#include <sys/cdefs.h> +#include <stand.h> #else -#include "zlite.h" -#endif - #include <stdio.h> #include <stdlib.h> -#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#endif +#include <zlib.h> #include "pnglite.h" -static png_alloc_t png_alloc; -static png_free_t png_free; +#ifndef abs +#define abs(x) ((x) < 0? -(x):(x)) +#endif -static size_t file_read(png_t* png, void* out, size_t size, size_t numel) -{ - size_t result; - if(png->read_fun) - { - result = png->read_fun(out, size, numel, png->user_pointer); - } - else - { - if(!out) - { - result = fseek(png->user_pointer, (long)(size*numel), SEEK_CUR); - } - else - { - result = fread(out, size, numel, png->user_pointer); - } - } +#define PNG_32b(b, s) ((uint32_t)(b) << (s)) +#define PNG_U32(b1, b2, b3, b4) \ + (PNG_32b(b1, 24) | PNG_32b(b2, 16) | PNG_32b(b3, 8) | PNG_32b(b4, 0)) - return result; -} +#define png_IDAT PNG_U32(73, 68, 65, 84) +#define png_IEND PNG_U32(73, 69, 78, 68) -static size_t file_write(png_t* png, void* p, size_t size, size_t numel) +static ssize_t +file_read(png_t *png, void *out, size_t size, size_t numel) { - size_t result; + ssize_t result; + off_t offset = (off_t)(size * numel); - if(png->write_fun) - { - result = png->write_fun(p, size, numel, png->user_pointer); - } - else - { - result = fwrite(p, size, numel, png->user_pointer); + if (offset < 0) + return (PNG_FILE_ERROR); + + if (!out) { + result = lseek(png->fd, offset, SEEK_CUR); + } else { + result = read(png->fd, out, size * numel); } - return result; + return (result); } -static int file_read_ul(png_t* png, unsigned *out) +static int +file_read_ul(png_t *png, unsigned *out) { - unsigned char buf[4]; + uint8_t buf[4]; - if(file_read(png, buf, 1, 4) != 4) - return PNG_FILE_ERROR; + if (file_read(png, buf, 1, 4) != 4) + return (PNG_FILE_ERROR); *out = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; - return PNG_NO_ERROR; + return (PNG_NO_ERROR); } -static int file_write_ul(png_t* png, unsigned in) -{ - unsigned char buf[4]; - - buf[0] = (in>>24) & 0xff; - buf[1] = (in>>16) & 0xff; - buf[2] = (in>>8) & 0xff; - buf[3] = (in) & 0xff; - - if(file_write(png, buf, 1, 4) != 4) - return PNG_FILE_ERROR; - - return PNG_NO_ERROR; -} - -static unsigned get_ul(unsigned char* buf) +static unsigned +get_ul(uint8_t *buf) { unsigned result; - unsigned char foo[4]; + uint8_t foo[4]; memcpy(foo, buf, 4); result = (foo[0]<<24) | (foo[1]<<16) | (foo[2]<<8) | foo[3]; - return result; -} - -static unsigned set_ul(unsigned char* buf, unsigned in) -{ - buf[0] = (in>>24) & 0xff; - buf[1] = (in>>16) & 0xff; - buf[2] = (in>>8) & 0xff; - buf[3] = (in) & 0xff; - - return PNG_NO_ERROR; + return (result); } -int png_init(png_alloc_t pngalloc, png_free_t pngfree) -{ - if(pngalloc) - png_alloc = pngalloc; - else - png_alloc = &malloc; - - if(pngfree) - png_free = pngfree; - else - png_free = &free; - - return PNG_NO_ERROR; -} - -static int png_get_bpp(png_t* png) +static int +png_get_bpp(png_t *png) { int bpp; - switch(png->color_type) - { + switch (png->color_type) { case PNG_GREYSCALE: bpp = 1; break; case PNG_TRUECOLOR: @@ -137,44 +92,40 @@ static int png_get_bpp(png_t* png) case PNG_TRUECOLOR_ALPHA: bpp = 4; break; default: - return PNG_FILE_ERROR; + return (PNG_FILE_ERROR); } - bpp *= png->depth/8; + bpp *= png->depth / 8; - return bpp; + return (bpp); } -static int png_read_ihdr(png_t* png) +static int +png_read_ihdr(png_t *png) { - unsigned length; -#if DO_CRC_CHECKS + unsigned length = 0; unsigned orig_crc; unsigned calc_crc; -#endif - unsigned char ihdr[13+4]; /* length should be 13, make room for type (IHDR) */ + uint8_t ihdr[13+4]; /* length should be 13, make room for type (IHDR) */ - file_read_ul(png, &length); + if (file_read_ul(png, &length) != PNG_NO_ERROR) + return (PNG_FILE_ERROR); - if(length != 13) - { - printf("%d\n", length); - return PNG_CRC_ERROR; - } + if (length != 13) + return (PNG_CRC_ERROR); + + if (file_read(png, ihdr, 1, 13+4) != 13+4) + return (PNG_EOF_ERROR); - if(file_read(png, ihdr, 1, 13+4) != 13+4) - return PNG_EOF_ERROR; -#if DO_CRC_CHECKS - file_read_ul(png, &orig_crc); + if (file_read_ul(png, &orig_crc) != PNG_NO_ERROR) + return (PNG_FILE_ERROR); - calc_crc = crc32(0L, 0, 0); + calc_crc = crc32(0L, Z_NULL, 0); calc_crc = crc32(calc_crc, ihdr, 13+4); - if(orig_crc != calc_crc) - return PNG_CRC_ERROR; -#else - file_read_ul(png); -#endif + if (orig_crc != calc_crc) { + return (PNG_CRC_ERROR); + } png->width = get_ul(ihdr+4); png->height = get_ul(ihdr+8); @@ -184,51 +135,20 @@ static int png_read_ihdr(png_t* png) png->filter_method = ihdr[15]; png->interlace_method = ihdr[16]; - if(png->color_type == PNG_INDEXED) - return PNG_NOT_SUPPORTED; - - if(png->depth != 8 && png->depth != 16) - return PNG_NOT_SUPPORTED; + if (png->color_type == PNG_INDEXED) + return (PNG_NOT_SUPPORTED); - if(png->interlace_method) - return PNG_NOT_SUPPORTED; + if (png->depth != 8 && png->depth != 16) + return (PNG_NOT_SUPPORTED); - return PNG_NO_ERROR; -} - -static int png_write_ihdr(png_t* png) -{ - unsigned char ihdr[13+4]; - unsigned char *p = ihdr; - unsigned crc; - - file_write(png, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 1, 8); - - file_write_ul(png, 13); - - *p = 'I'; p++; - *p = 'H'; p++; - *p = 'D'; p++; - *p = 'R'; p++; - set_ul(p, png->width); p+=4; - set_ul(p, png->height); p+=4; - *p = png->depth; p++; - *p = png->color_type; p++; - *p = 0; p++; - *p = 0; p++; - *p = 0; p++; + if (png->interlace_method) + return (PNG_NOT_SUPPORTED); - file_write(png, ihdr, 1, 13+4); - - crc = crc32(0L, 0, 0); - crc = crc32(crc, ihdr, 13+4); - - file_write_ul(png, crc); - - return PNG_NO_ERROR; + return (PNG_NO_ERROR); } -void png_print_info(png_t* png) +void +png_print_info(png_t *png) { printf("PNG INFO:\n"); printf("\twidth:\t\t%d\n", png->width); @@ -236,416 +156,287 @@ void png_print_info(png_t* png) printf("\tdepth:\t\t%d\n", png->depth); printf("\tcolor:\t\t"); - switch(png->color_type) - { - case PNG_GREYSCALE: printf("greyscale\n"); break; - case PNG_TRUECOLOR: printf("truecolor\n"); break; - case PNG_INDEXED: printf("palette\n"); break; - case PNG_GREYSCALE_ALPHA: printf("greyscale with alpha\n"); break; - case PNG_TRUECOLOR_ALPHA: printf("truecolor with alpha\n"); break; - default: printf("unknown, this is not good\n"); break; + switch (png->color_type) { + case PNG_GREYSCALE: + printf("greyscale\n"); break; + case PNG_TRUECOLOR: + printf("truecolor\n"); break; + case PNG_INDEXED: + printf("palette\n"); break; + case PNG_GREYSCALE_ALPHA: + printf("greyscale with alpha\n"); break; + case PNG_TRUECOLOR_ALPHA: + printf("truecolor with alpha\n"); break; + default: + printf("unknown, this is not good\n"); break; } - printf("\tcompression:\t%s\n", png->compression_method?"unknown, this is not good":"inflate/deflate"); - printf("\tfilter:\t\t%s\n", png->filter_method?"unknown, this is not good":"adaptive"); - printf("\tinterlace:\t%s\n", png->interlace_method?"interlace":"no interlace"); + printf("\tcompression:\t%s\n", + png->compression_method? + "unknown, this is not good":"inflate/deflate"); + printf("\tfilter:\t\t%s\n", + png->filter_method? "unknown, this is not good":"adaptive"); + printf("\tinterlace:\t%s\n", + png->interlace_method? "interlace":"no interlace"); } -int png_open_read(png_t* png, png_read_callback_t read_fun, void* user_pointer) +int +png_open(png_t *png, const char *filename) { char header[8]; int result; - png->read_fun = read_fun; - png->write_fun = 0; - png->user_pointer = user_pointer; - - if(!read_fun && !user_pointer) - return PNG_WRONG_ARGUMENTS; + png->image = NULL; + png->fd = open(filename, O_RDONLY); + if (png->fd == -1) + return (PNG_FILE_ERROR); - if(file_read(png, header, 1, 8) != 8) - return PNG_EOF_ERROR; + if (file_read(png, header, 1, 8) != 8) { + result = PNG_EOF_ERROR; + goto done; + } - if(memcmp(header, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 8) != 0) - return PNG_HEADER_ERROR; + if (memcmp(header, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 8) != 0) { + result = PNG_HEADER_ERROR; + goto done; + } result = png_read_ihdr(png); + if (result == PNG_NO_ERROR) { + result = png_get_bpp(png); + if (result > 0) { + png->bpp = (uint8_t)result; + result = PNG_NO_ERROR; + } + } - png->bpp = (unsigned char)png_get_bpp(png); - - return result; -} - -int png_open_write(png_t* png, png_write_callback_t write_fun, void* user_pointer) -{ - png->write_fun = write_fun; - png->read_fun = 0; - png->user_pointer = user_pointer; - - if(!write_fun && !user_pointer) - return PNG_WRONG_ARGUMENTS; - - return PNG_NO_ERROR; -} - -int png_open(png_t* png, png_read_callback_t read_fun, void* user_pointer) -{ - return png_open_read(png, read_fun, user_pointer); -} - -int png_open_file_read(png_t *png, const char* filename) -{ - FILE* fp = fopen(filename, "rb"); - - if(!fp) - return PNG_FILE_ERROR; - - return png_open_read(png, 0, fp); -} - -int png_open_file_write(png_t *png, const char* filename) -{ - FILE* fp = fopen(filename, "wb"); - - if(!fp) - return PNG_FILE_ERROR; +done: + if (result == PNG_NO_ERROR) { + uint64_t size = png->width * png->height * png->bpp; - return png_open_write(png, 0, fp); -} + if (size < UINT_MAX) + png->image = malloc(size); + if (png->image == NULL) + result = PNG_MEMORY_ERROR; + } -int png_open_file(png_t *png, const char* filename) -{ - return png_open_file_read(png, filename); -} + if (result == PNG_NO_ERROR) + result = png_get_data(png, png->image); -int png_close_file(png_t* png) -{ - fclose(png->user_pointer); + if (result != PNG_NO_ERROR) { + free(png->image); + (void) close(png->fd); + png->fd = -1; + return (result); + } - return PNG_NO_ERROR; + return (result); } -static int png_init_deflate(png_t* png, unsigned char* data, int datalen) +int +png_close(png_t *png) { - z_stream *stream; - png->zs = png_alloc(sizeof(z_stream)); - - stream = png->zs; - - if(!stream) - return PNG_MEMORY_ERROR; - - memset(stream, 0, sizeof(z_stream)); + (void) close(png->fd); + png->fd = -1; + free(png->image); + png->image = NULL; - if(deflateInit(stream, Z_DEFAULT_COMPRESSION) != Z_OK) - return PNG_ZLIB_ERROR; - - stream->next_in = data; - stream->avail_in = datalen; - - return PNG_NO_ERROR; + return (PNG_NO_ERROR); } -static int png_init_inflate(png_t* png) +static int +png_init_inflate(png_t *png) { -#if USE_ZLIB z_stream *stream; - png->zs = png_alloc(sizeof(z_stream)); -#else - zl_stream *stream; - png->zs = png_alloc(sizeof(zl_stream)); -#endif + png->zs = calloc(1, sizeof (z_stream)); stream = png->zs; - if(!stream) - return PNG_MEMORY_ERROR; + if (!stream) + return (PNG_MEMORY_ERROR); -#if USE_ZLIB - memset(stream, 0, sizeof(z_stream)); - if(inflateInit(stream) != Z_OK) - return PNG_ZLIB_ERROR; -#else - memset(stream, 0, sizeof(zl_stream)); - if(z_inflateInit(stream) != Z_OK) - return PNG_ZLIB_ERROR; -#endif + if (inflateInit(stream) != Z_OK) { + free(png->zs); + png->zs = NULL; + return (PNG_ZLIB_ERROR); + } stream->next_out = png->png_data; stream->avail_out = png->png_datalen; - return PNG_NO_ERROR; + return (PNG_NO_ERROR); } -static int png_end_deflate(png_t* png) +static int +png_end_inflate(png_t *png) { z_stream *stream = png->zs; + int rc = PNG_NO_ERROR; - if(!stream) - return PNG_MEMORY_ERROR; + if (!stream) + return (PNG_MEMORY_ERROR); - deflateEnd(stream); - - png_free(png->zs); - - return PNG_NO_ERROR; -} - -static int png_end_inflate(png_t* png) -{ -#if USE_ZLIB - z_stream *stream = png->zs; -#else - zl_stream *stream = png->zs; -#endif - - if(!stream) - return PNG_MEMORY_ERROR; - -#if USE_ZLIB - if(inflateEnd(stream) != Z_OK) -#else - if(z_inflateEnd(stream) != Z_OK) -#endif - { + if (inflateEnd(stream) != Z_OK) { printf("ZLIB says: %s\n", stream->msg); - return PNG_ZLIB_ERROR; + rc = PNG_ZLIB_ERROR; } - png_free(png->zs); + free(png->zs); + png->zs = NULL; - return PNG_NO_ERROR; + return (rc); } -static int png_inflate(png_t* png, unsigned char* data, int len) +static int +png_inflate(png_t *png, uint8_t *data, int len) { int result; -#if USE_ZLIB z_stream *stream = png->zs; -#else - zl_stream *stream = png->zs; -#endif - if(!stream) - return PNG_MEMORY_ERROR; + if (!stream) + return (PNG_MEMORY_ERROR); stream->next_in = data; stream->avail_in = len; -#if USE_ZLIB result = inflate(stream, Z_SYNC_FLUSH); -#else - result = z_inflate(stream); -#endif - - if(result != Z_STREAM_END && result != Z_OK) - { - printf("%s\n", stream->msg); - return PNG_ZLIB_ERROR; - } - - if(stream->avail_in != 0) - return PNG_ZLIB_ERROR; - - return PNG_NO_ERROR; -} - -static int png_deflate(png_t* png, char* outdata, int outlen, int *outwritten) -{ - int result; - - z_stream *stream = png->zs; - - if(!stream) - return PNG_MEMORY_ERROR; - stream->next_out = (unsigned char*)outdata; - stream->avail_out = outlen; - - result = deflate(stream, Z_SYNC_FLUSH); - - *outwritten = outlen - stream->avail_out; - - if(result != Z_STREAM_END && result != Z_OK) - { + if (result != Z_STREAM_END && result != Z_OK) { printf("%s\n", stream->msg); - return PNG_ZLIB_ERROR; + return (PNG_ZLIB_ERROR); } - return result; -} + if (stream->avail_in != 0) + return (PNG_ZLIB_ERROR); -static int png_write_idats(png_t* png, unsigned char* data) -{ - unsigned char *chunk; - unsigned long written; - unsigned long crc; - unsigned size = png->width * png->height * png->bpp + png->height; - unsigned chunk_size = compressBound(size); - - (void)png_init_deflate; - (void)png_end_deflate; - (void)png_deflate; - - chunk = png_alloc(chunk_size + 4); - memcpy(chunk, "IDAT", 4); - - written = chunk_size; - compress(chunk+4, &written, data, size); - - crc = crc32(0L, Z_NULL, 0); - crc = crc32(crc, chunk, written+4); - set_ul(chunk+written+4, crc); - file_write_ul(png, written); - file_write(png, chunk, 1, written+8); - png_free(chunk); - - file_write_ul(png, 0); - file_write(png, "IEND", 1, 4); - crc = crc32(0L, (const unsigned char *)"IEND", 4); - file_write_ul(png, crc); - - return PNG_NO_ERROR; + return (PNG_NO_ERROR); } -static int png_read_idat(png_t* png, unsigned length) +static int +png_read_idat(png_t *png, unsigned length) { -#if DO_CRC_CHECKS unsigned orig_crc; unsigned calc_crc; -#endif + ssize_t len = length; - if(!png->readbuf || png->readbuflen < length) - { - if (png->readbuf) - { - png_free(png->readbuf); - } - png->readbuf = png_alloc(length); + if (!png->readbuf || png->readbuflen < length) { + png->readbuf = realloc(png->readbuf, length); png->readbuflen = length; } - if(!png->readbuf) - { - return PNG_MEMORY_ERROR; - } + if (!png->readbuf) + return (PNG_MEMORY_ERROR); - if(file_read(png, png->readbuf, 1, length) != length) - { - return PNG_FILE_ERROR; - } + if (file_read(png, png->readbuf, 1, length) != len) + return (PNG_FILE_ERROR); -#if DO_CRC_CHECKS calc_crc = crc32(0L, Z_NULL, 0); - calc_crc = crc32(calc_crc, (unsigned char*)"IDAT", 4); - calc_crc = crc32(calc_crc, (unsigned char*)png->readbuf, length); + calc_crc = crc32(calc_crc, (uint8_t *)"IDAT", 4); + calc_crc = crc32(calc_crc, (uint8_t *)png->readbuf, length); - file_read_ul(png, &orig_crc); + if (file_read_ul(png, &orig_crc) != PNG_NO_ERROR) + return (PNG_FILE_ERROR); - if(orig_crc != calc_crc) - { - return PNG_CRC_ERROR; - } -#else - file_read_ul(png); -#endif + if (orig_crc != calc_crc) + return (PNG_CRC_ERROR); - return png_inflate(png, png->readbuf, length); + return (png_inflate(png, png->readbuf, length)); } -static int png_process_chunk(png_t* png) +static int +png_process_chunk(png_t *png) { int result = PNG_NO_ERROR; unsigned type; unsigned length; - file_read_ul(png, &length); - - if(file_read(png, &type, 1, 4) != 4) - return PNG_FILE_ERROR; - - if(type == *(unsigned int*)"IDAT") /* if we found an idat, all other idats should be followed with no other chunks in between */ - { - if(!png->png_data) /* first IDAT */ - { - png->png_datalen = png->width * png->height * png->bpp + png->height; - png->png_data = png_alloc(png->png_datalen); + if (file_read_ul(png, &length) != PNG_NO_ERROR) + return (PNG_FILE_ERROR); + + if (file_read_ul(png, &type) != PNG_NO_ERROR) + return (PNG_FILE_ERROR); + + /* + * if we found an idat, all other idats should be followed with no + * other chunks in between + */ + if (type == png_IDAT) { + if (!png->png_data) { /* first IDAT */ + png->png_datalen = png->width * png->height * + png->bpp + png->height; + png->png_data = malloc(png->png_datalen); } - if(!png->png_data) - return PNG_MEMORY_ERROR; + if (!png->png_data) + return (PNG_MEMORY_ERROR); - if(!png->zs) - { + if (!png->zs) { result = png_init_inflate(png); - if(result != PNG_NO_ERROR) - return result; + if (result != PNG_NO_ERROR) + return (result); } - return png_read_idat(png, length); - } - else if(type == *(unsigned int*)"IEND") - { - return PNG_DONE; - } + return (png_read_idat(png, length)); + } else if (type == png_IEND) + return (PNG_DONE); else - { - file_read(png, 0, 1, length + 4); /* unknown chunk */ - } + (void) file_read(png, 0, 1, length + 4); /* unknown chunk */ - return result; + return (result); } -static void png_filter_sub(int stride, unsigned char* in, unsigned char* out, int len) +static void +png_filter_sub(unsigned stride, uint8_t *in, uint8_t *out, unsigned len) { - int i; - unsigned char a = 0; + unsigned i; + uint8_t a = 0; - for(i = 0; i < len; i++) - { - if(i >= stride) + for (i = 0; i < len; i++) { + if (i >= stride) a = out[i - stride]; out[i] = in[i] + a; } } -static void png_filter_up(int stride, unsigned char* in, unsigned char* out, unsigned char* prev_line, int len) +static void +png_filter_up(unsigned stride __unused, uint8_t *in, uint8_t *out, + uint8_t *prev_line, unsigned len) { - int i; + unsigned i; - if(prev_line) - { - for(i = 0; i < len; i++) - out[i] = in[i] + prev_line[i]; - } - else + if (prev_line) { + for (i = 0; i < len; i++) + out[i] = in[i] + prev_line[i]; + } else memcpy(out, in, len); } -static void png_filter_average(int stride, unsigned char* in, unsigned char* out, unsigned char* prev_line, int len) +static void +png_filter_average(unsigned stride, uint8_t *in, uint8_t *out, + uint8_t *prev_line, unsigned len) { - int i; - unsigned char a = 0; - unsigned char b = 0; + unsigned int i; + uint8_t a = 0; + uint8_t b = 0; unsigned int sum = 0; - for(i = 0; i < len; i++) - { - if(prev_line) + for (i = 0; i < len; i++) { + if (prev_line) b = prev_line[i]; - if(i >= stride) + if (i >= stride) a = out[i - stride]; sum = a; sum += b; - out[i] = (char)(in[i] + sum/2); + out[i] = in[i] + sum/2; } } -static unsigned char png_paeth(unsigned char a, unsigned char b, unsigned char c) +static uint8_t +png_paeth(uint8_t a, uint8_t b, uint8_t c) { int p = (int)a + b - c; int pa = abs(p - a); @@ -654,39 +445,37 @@ static unsigned char png_paeth(unsigned char a, unsigned char b, unsigned char c int pr; - if(pa <= pb && pa <= pc) + if (pa <= pb && pa <= pc) pr = a; - else if(pb <= pc) + else if (pb <= pc) pr = b; else pr = c; - return (char)pr; + return (pr); } -static void png_filter_paeth(int stride, unsigned char* in, unsigned char* out, unsigned char* prev_line, int len) +static void +png_filter_paeth(unsigned stride, uint8_t *in, uint8_t *out, uint8_t *prev_line, + unsigned len) { - int i; - unsigned char a; - unsigned char b; - unsigned char c; - - for(i = 0; i < len; i++) - { - if(prev_line && i >= stride) - { + unsigned i; + uint8_t a; + uint8_t b; + uint8_t c; + + for (i = 0; i < len; i++) { + if (prev_line && i >= stride) { a = out[i - stride]; b = prev_line[i]; c = prev_line[i - stride]; - } - else - { - if(prev_line) + } else { + if (prev_line) b = prev_line[i]; else b = 0; - if(i >= stride) + if (i >= stride) a = out[i - stride]; else a = 0; @@ -698,72 +487,80 @@ static void png_filter_paeth(int stride, unsigned char* in, unsigned char* out, } } -static int png_filter(png_t* png, unsigned char* data) -{ - return PNG_NO_ERROR; -} - -static int png_unfilter(png_t* png, unsigned char* data) +static int *** 565 LINES SKIPPED ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202101021951.102JpaLb058399>