diff options
Diffstat (limited to 'Build/source/libs/libpng/libpng-1.6.14/contrib/tools/checksum-icc.c')
-rw-r--r-- | Build/source/libs/libpng/libpng-1.6.14/contrib/tools/checksum-icc.c | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/Build/source/libs/libpng/libpng-1.6.14/contrib/tools/checksum-icc.c b/Build/source/libs/libpng/libpng-1.6.14/contrib/tools/checksum-icc.c new file mode 100644 index 00000000000..581e7088a62 --- /dev/null +++ b/Build/source/libs/libpng/libpng-1.6.14/contrib/tools/checksum-icc.c @@ -0,0 +1,102 @@ +/* checksum-icc.c + * + * Copyright (c) 2013 John Cunningham Bowler + * + * Last changed in libpng 1.6.0 [February 14, 2013] + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + * + * Generate crc32 and adler32 checksums of the given input files, used to + * generate check-codes for use when matching ICC profiles within libpng. + */ +#include <stdio.h> + +#include <zlib.h> + +static int +read_one_file(FILE *ip, const char *name) +{ + uLong length = 0; + uLong a32 = adler32(0, NULL, 0); + uLong c32 = crc32(0, NULL, 0); + Byte header[132]; + + for (;;) + { + int ch = getc(ip); + Byte b; + + if (ch == EOF) break; + + b = (Byte)ch; + + if (length < sizeof header) + header[length] = b; + + ++length; + a32 = adler32(a32, &b, 1); + c32 = crc32(c32, &b, 1); + } + + if (ferror(ip)) + return 0; + + /* Success */ + printf("PNG_ICC_CHECKSUM(0x%8.8lx, 0x%8.8lx,\n PNG_MD5(" + "0x%2.2x%2.2x%2.2x%2.2x, 0x%2.2x%2.2x%2.2x%2.2x, 0x%2.2x%2.2x%2.2x%2.2x," + " 0x%2.2x%2.2x%2.2x%2.2x), %d,\n" + " \"%4.4d/%2.2d/%2.2d %2.2d:%2.2d:%2.2d\", %lu, \"%s\")\n", + (unsigned long)a32, (unsigned long)c32, + header[84], header[85], header[86], header[87], + header[88], header[89], header[90], header[91], + header[92], header[93], header[94], header[95], + header[96], header[97], header[98], header[99], +# define u16(x) (header[x] * 256 + header[x+1]) +# define u32(x) (u16(x) * 65536 + u16(x+2)) + u32(64), u16(24), u16(26), u16(28), u16(30), u16(32), u16(34), + (unsigned long)length, name); + + return 1; +} + +int main(int argc, char **argv) +{ + int err = 0; + + printf("/* adler32, crc32, MD5[16], intent, date, length, file-name */\n"); + + if (argc > 1) + { + int i; + + for (i=1; i<argc; ++i) + { + FILE *ip = fopen(argv[i], "rb"); + + if (ip == NULL || !read_one_file(ip, argv[i])) + { + err = 1; + perror(argv[i]); + fprintf(stderr, "%s: read error\n", argv[i]); + printf("/* ERROR: %s */\n", argv[i]); + } + + (void)fclose(ip); + } + } + + else + { + if (!read_one_file(stdin, "-")) + { + err = 1; + perror("stdin"); + fprintf(stderr, "stdin: read error\n"); + printf("/* ERROR: stdin */\n"); + } + } + + return err; +} |