summaryrefslogtreecommitdiff
path: root/Build/source/libs/libpng/libpng-src/contrib/tools/checksum-icc.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/libpng/libpng-src/contrib/tools/checksum-icc.c')
-rw-r--r--Build/source/libs/libpng/libpng-src/contrib/tools/checksum-icc.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/Build/source/libs/libpng/libpng-src/contrib/tools/checksum-icc.c b/Build/source/libs/libpng/libpng-src/contrib/tools/checksum-icc.c
new file mode 100644
index 00000000000..581e7088a62
--- /dev/null
+++ b/Build/source/libs/libpng/libpng-src/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;
+}