Imported from libpng-1.0.4-pre1.tar
diff --git a/pngtest.c b/pngtest.c index a1ba8ec..30decde 100644 --- a/pngtest.c +++ b/pngtest.c
@@ -1,7 +1,7 @@ /* pngtest.c - a simple test program to test libpng * - * libpng 1.0.3 -January 14, 1999 + * libpng 1.0.4 - September 17, 1999 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger @@ -42,6 +42,8 @@ static char tIME_string[30] = "no tIME chunk present in file"; #endif /* PNG_TIME_RFC1123_SUPPORTED */ +static int verbose = 0; + int test_one_file PNGARG((PNG_CONST char *inname, PNG_CONST char *outname)); #ifdef __TURBOC__ @@ -60,12 +62,12 @@ void read_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass) { - if(png_ptr == NULL || row_number > 0x3fffffffL) return; + if(png_ptr == NULL || row_number > PNG_MAX_UINT) return; if(status_pass != pass) { fprintf(stdout,"\n Pass %d: ",pass); status_pass = pass; - status_dots = 30; + status_dots = 31; } status_dots--; if(status_dots == 0) @@ -79,11 +81,24 @@ void write_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass) { - if(png_ptr == NULL || row_number > 0x3fffffffL || pass > 7) return; + if(png_ptr == NULL || row_number > PNG_MAX_UINT || pass > 7) return; fprintf(stdout, "w"); } +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) +/* Example of using user transform callback (we don't transform anything, + but merely examine the row filters. We set this to 256 rather than + 5 in case illegal filter values are present.) */ +static png_uint_32 filters_used[256]; +void +count_filters(png_structp png_ptr, png_row_infop row_info, png_bytep data) +{ + if(png_ptr != NULL && row_info != NULL) + ++filters_used[*(data-1)]; +} +#endif + #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) /* example of using user transform callback (we don't transform anything, but merely count the zero samples) */ @@ -105,6 +120,7 @@ * png_byte pixel_depth bits per pixel (depth*channels) */ + /* counts the number of zero samples (or zero pixels if color_type is 3 */ if(row_info->color_type == 0 || row_info->color_type == 3) @@ -178,7 +194,6 @@ } #endif /* PNG_WRITE_USER_TRANSFORM_SUPPORTED */ -static int verbose = 0; static int wrote_question = 0; #if defined(PNG_NO_STDIO) @@ -584,10 +599,18 @@ png_set_read_status_fn(read_ptr, NULL); } -# if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) - zero_samples=0; - png_set_write_user_transform_fn(write_ptr, count_zero_samples); -# endif +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) + { + int i; + for(i=0; i<256; i++) + filters_used[i]=0; + png_set_read_user_transform_fn(read_ptr, count_filters); + } +#endif +#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + zero_samples=0; + png_set_write_user_transform_fn(write_ptr, count_zero_samples); +#endif png_debug(0, "Reading info struct\n"); png_read_info(read_ptr, read_info_ptr); @@ -859,7 +882,7 @@ if (png_memcmp(inbuf, outbuf, num_in)) { - fprintf(STDERR, "Files %s and %s are different\n", inname, outname); + fprintf(STDERR, "\nFiles %s and %s are different\n", inname, outname); if(wrote_question == 0) { fprintf(STDERR, @@ -885,8 +908,8 @@ /* input and output filenames */ #ifdef RISCOS -PNG_CONST char *inname = "pngtest/png"; -PNG_CONST char *outname = "pngout/png"; +static PNG_CONST char *inname = "pngtest/png"; +static PNG_CONST char *outname = "pngout/png"; #else static PNG_CONST char *inname = "pngtest.png"; static PNG_CONST char *outname = "pngout.png"; @@ -973,7 +996,7 @@ #endif for (i=2; i<argc; ++i) { - int kerror; + int k, kerror; fprintf(STDERR, "Testing %s:",argv[i]); kerror = test_one_file(argv[i], outname); if (kerror == 0) @@ -983,6 +1006,12 @@ #else fprintf(STDERR, " PASS\n"); #endif +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) + for (k=0; k<256; k++) + if(filters_used[k]) + fprintf(STDERR, " Filter %d was used %lu times\n", + k,filters_used[k]); +#endif #if defined(PNG_TIME_RFC1123_SUPPORTED) if(tIME_chunk_present != 0) fprintf(STDERR, " tIME = %s\n",tIME_string); @@ -1032,14 +1061,21 @@ { if(verbose == 1 || i == 2) { + int k; #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) fprintf(STDERR, " PASS (%lu zero samples)\n",zero_samples); #else fprintf(STDERR, " PASS\n"); #endif +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) + for (k=0; k<256; k++) + if(filters_used[k]) + fprintf(STDERR, " Filter %d was used %lu times\n", + k,filters_used[k]); +#endif #if defined(PNG_TIME_RFC1123_SUPPORTED) - if(tIME_chunk_present != 0) - fprintf(STDERR, " tIME = %s\n",tIME_string); + if(tIME_chunk_present != 0) + fprintf(STDERR, " tIME = %s\n",tIME_string); #endif /* PNG_TIME_RFC1123_SUPPORTED */ } }