git: 80aa931900c8 - main - contrib: setup pnglite

Toomas Soome tsoome at FreeBSD.org
Sat Jan 2 19:51:37 UTC 2021


The branch main has been updated by tsoome:

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

commit 80aa931900c863a5d088c49b560488ab32f2d1d9
Author:     Toomas Soome <tsoome at FreeBSD.org>
AuthorDate: 2021-01-02 19:29:24 +0000
Commit:     Toomas Soome <tsoome at 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 ***


More information about the dev-commits-src-all mailing list