The branch main has been updated by tsoome:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=80aa931900c863a5d088c49b560488ab32f2d1d9

commit 80aa931900c863a5d088c49b560488ab32f2d1d9
Author:     Toomas Soome <tso...@freebsd.org>
AuthorDate: 2021-01-02 19:29:24 +0000
Commit:     Toomas Soome <tso...@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 ***
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to