VirtualBox

source: vbox/trunk/src/libs/libpng-1.6.45/contrib/tools/checksum-icc.c@ 108378

最後變更 在這個檔案從108378是 103316,由 vboxsync 提交於 13 月 前

libpng-1.6.42: Applied and adjusted our libpng changes to 1.6.42. bugref:8515

  • 屬性 svn:eol-style 設為 native
檔案大小: 2.3 KB
 
1/* checksum-icc.c
2 *
3 * Copyright (c) 2013 John Cunningham Bowler
4 *
5 * This code is released under the libpng license.
6 * For conditions of distribution and use, see the disclaimer
7 * and license in png.h
8 *
9 * Generate crc32 and adler32 checksums of the given input files, used to
10 * generate check-codes for use when matching ICC profiles within libpng.
11 */
12
13#include <stdio.h>
14#include <zlib.h>
15
16static int
17read_one_file(FILE *ip, const char *name)
18{
19 uLong length = 0;
20 uLong a32 = adler32(0, NULL, 0);
21 uLong c32 = crc32(0, NULL, 0);
22 Byte header[132];
23
24 for (;;)
25 {
26 int ch = getc(ip);
27 Byte b;
28
29 if (ch == EOF) break;
30
31 b = (Byte)ch;
32
33 if (length < sizeof header)
34 header[length] = b;
35
36 ++length;
37 a32 = adler32(a32, &b, 1);
38 c32 = crc32(c32, &b, 1);
39 }
40
41 if (ferror(ip))
42 return 0;
43
44 /* Success */
45 printf("PNG_ICC_CHECKSUM(0x%8.8lx, 0x%8.8lx,\n PNG_MD5("
46 "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,"
47 " 0x%2.2x%2.2x%2.2x%2.2x), %d,\n"
48 " \"%4.4d/%2.2d/%2.2d %2.2d:%2.2d:%2.2d\", %lu, \"%s\")\n",
49 (unsigned long)a32, (unsigned long)c32,
50 header[84], header[85], header[86], header[87],
51 header[88], header[89], header[90], header[91],
52 header[92], header[93], header[94], header[95],
53 header[96], header[97], header[98], header[99],
54# define u16(x) (header[x] * 256 + header[x+1])
55# define u32(x) (u16(x) * 65536 + u16(x+2))
56 u32(64), u16(24), u16(26), u16(28), u16(30), u16(32), u16(34),
57 (unsigned long)length, name);
58
59 return 1;
60}
61
62int main(int argc, char **argv)
63{
64 int err = 0;
65
66 printf("/* adler32, crc32, MD5[16], intent, date, length, file-name */\n");
67
68 if (argc > 1)
69 {
70 int i;
71
72 for (i=1; i<argc; ++i)
73 {
74 FILE *ip = fopen(argv[i], "rb");
75
76 if (ip == NULL || !read_one_file(ip, argv[i]))
77 {
78 err = 1;
79 perror(argv[i]);
80 fprintf(stderr, "%s: read error\n", argv[i]);
81 printf("/* ERROR: %s */\n", argv[i]);
82 }
83
84 (void)fclose(ip);
85 }
86 }
87
88 else
89 {
90 if (!read_one_file(stdin, "-"))
91 {
92 err = 1;
93 perror("stdin");
94 fprintf(stderr, "stdin: read error\n");
95 printf("/* ERROR: stdin */\n");
96 }
97 }
98
99 return err;
100}
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette