]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - Plugson/src/Core/ventoy_crc32.c
1. Fix the blank item in the last of Language select menu
[Ventoy.git] / Plugson / src / Core / ventoy_crc32.c
1 /******************************************************************************
2 * crc32.c ---- ventoy crc32
3 *
4 * Copyright (c) 2021, longpanda <admin@ventoy.net>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 3 of the
9 * License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
18 *
19 */
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <stdint.h>
23 #include <string.h>
24 #include <errno.h>
25 #if defined(_MSC_VER) || defined(WIN32)
26 #include <Windows.h>
27 #define uint32_t UINT32
28 #else
29 #include <unistd.h>
30 #endif
31
32 static uint32_t g_crc_table[256] = {
33 0x00000000,
34 0x77073096,
35 0xEE0E612C,
36 0x990951BA,
37 0x076DC419,
38 0x706AF48F,
39 0xE963A535,
40 0x9E6495A3,
41 0x0EDB8832,
42 0x79DCB8A4,
43 0xE0D5E91E,
44 0x97D2D988,
45 0x09B64C2B,
46 0x7EB17CBD,
47 0xE7B82D07,
48 0x90BF1D91,
49 0x1DB71064,
50 0x6AB020F2,
51 0xF3B97148,
52 0x84BE41DE,
53 0x1ADAD47D,
54 0x6DDDE4EB,
55 0xF4D4B551,
56 0x83D385C7,
57 0x136C9856,
58 0x646BA8C0,
59 0xFD62F97A,
60 0x8A65C9EC,
61 0x14015C4F,
62 0x63066CD9,
63 0xFA0F3D63,
64 0x8D080DF5,
65 0x3B6E20C8,
66 0x4C69105E,
67 0xD56041E4,
68 0xA2677172,
69 0x3C03E4D1,
70 0x4B04D447,
71 0xD20D85FD,
72 0xA50AB56B,
73 0x35B5A8FA,
74 0x42B2986C,
75 0xDBBBC9D6,
76 0xACBCF940,
77 0x32D86CE3,
78 0x45DF5C75,
79 0xDCD60DCF,
80 0xABD13D59,
81 0x26D930AC,
82 0x51DE003A,
83 0xC8D75180,
84 0xBFD06116,
85 0x21B4F4B5,
86 0x56B3C423,
87 0xCFBA9599,
88 0xB8BDA50F,
89 0x2802B89E,
90 0x5F058808,
91 0xC60CD9B2,
92 0xB10BE924,
93 0x2F6F7C87,
94 0x58684C11,
95 0xC1611DAB,
96 0xB6662D3D,
97 0x76DC4190,
98 0x01DB7106,
99 0x98D220BC,
100 0xEFD5102A,
101 0x71B18589,
102 0x06B6B51F,
103 0x9FBFE4A5,
104 0xE8B8D433,
105 0x7807C9A2,
106 0x0F00F934,
107 0x9609A88E,
108 0xE10E9818,
109 0x7F6A0DBB,
110 0x086D3D2D,
111 0x91646C97,
112 0xE6635C01,
113 0x6B6B51F4,
114 0x1C6C6162,
115 0x856530D8,
116 0xF262004E,
117 0x6C0695ED,
118 0x1B01A57B,
119 0x8208F4C1,
120 0xF50FC457,
121 0x65B0D9C6,
122 0x12B7E950,
123 0x8BBEB8EA,
124 0xFCB9887C,
125 0x62DD1DDF,
126 0x15DA2D49,
127 0x8CD37CF3,
128 0xFBD44C65,
129 0x4DB26158,
130 0x3AB551CE,
131 0xA3BC0074,
132 0xD4BB30E2,
133 0x4ADFA541,
134 0x3DD895D7,
135 0xA4D1C46D,
136 0xD3D6F4FB,
137 0x4369E96A,
138 0x346ED9FC,
139 0xAD678846,
140 0xDA60B8D0,
141 0x44042D73,
142 0x33031DE5,
143 0xAA0A4C5F,
144 0xDD0D7CC9,
145 0x5005713C,
146 0x270241AA,
147 0xBE0B1010,
148 0xC90C2086,
149 0x5768B525,
150 0x206F85B3,
151 0xB966D409,
152 0xCE61E49F,
153 0x5EDEF90E,
154 0x29D9C998,
155 0xB0D09822,
156 0xC7D7A8B4,
157 0x59B33D17,
158 0x2EB40D81,
159 0xB7BD5C3B,
160 0xC0BA6CAD,
161 0xEDB88320,
162 0x9ABFB3B6,
163 0x03B6E20C,
164 0x74B1D29A,
165 0xEAD54739,
166 0x9DD277AF,
167 0x04DB2615,
168 0x73DC1683,
169 0xE3630B12,
170 0x94643B84,
171 0x0D6D6A3E,
172 0x7A6A5AA8,
173 0xE40ECF0B,
174 0x9309FF9D,
175 0x0A00AE27,
176 0x7D079EB1,
177 0xF00F9344,
178 0x8708A3D2,
179 0x1E01F268,
180 0x6906C2FE,
181 0xF762575D,
182 0x806567CB,
183 0x196C3671,
184 0x6E6B06E7,
185 0xFED41B76,
186 0x89D32BE0,
187 0x10DA7A5A,
188 0x67DD4ACC,
189 0xF9B9DF6F,
190 0x8EBEEFF9,
191 0x17B7BE43,
192 0x60B08ED5,
193 0xD6D6A3E8,
194 0xA1D1937E,
195 0x38D8C2C4,
196 0x4FDFF252,
197 0xD1BB67F1,
198 0xA6BC5767,
199 0x3FB506DD,
200 0x48B2364B,
201 0xD80D2BDA,
202 0xAF0A1B4C,
203 0x36034AF6,
204 0x41047A60,
205 0xDF60EFC3,
206 0xA867DF55,
207 0x316E8EEF,
208 0x4669BE79,
209 0xCB61B38C,
210 0xBC66831A,
211 0x256FD2A0,
212 0x5268E236,
213 0xCC0C7795,
214 0xBB0B4703,
215 0x220216B9,
216 0x5505262F,
217 0xC5BA3BBE,
218 0xB2BD0B28,
219 0x2BB45A92,
220 0x5CB36A04,
221 0xC2D7FFA7,
222 0xB5D0CF31,
223 0x2CD99E8B,
224 0x5BDEAE1D,
225 0x9B64C2B0,
226 0xEC63F226,
227 0x756AA39C,
228 0x026D930A,
229 0x9C0906A9,
230 0xEB0E363F,
231 0x72076785,
232 0x05005713,
233 0x95BF4A82,
234 0xE2B87A14,
235 0x7BB12BAE,
236 0x0CB61B38,
237 0x92D28E9B,
238 0xE5D5BE0D,
239 0x7CDCEFB7,
240 0x0BDBDF21,
241 0x86D3D2D4,
242 0xF1D4E242,
243 0x68DDB3F8,
244 0x1FDA836E,
245 0x81BE16CD,
246 0xF6B9265B,
247 0x6FB077E1,
248 0x18B74777,
249 0x88085AE6,
250 0xFF0F6A70,
251 0x66063BCA,
252 0x11010B5C,
253 0x8F659EFF,
254 0xF862AE69,
255 0x616BFFD3,
256 0x166CCF45,
257 0xA00AE278,
258 0xD70DD2EE,
259 0x4E048354,
260 0x3903B3C2,
261 0xA7672661,
262 0xD06016F7,
263 0x4969474D,
264 0x3E6E77DB,
265 0xAED16A4A,
266 0xD9D65ADC,
267 0x40DF0B66,
268 0x37D83BF0,
269 0xA9BCAE53,
270 0xDEBB9EC5,
271 0x47B2CF7F,
272 0x30B5FFE9,
273 0xBDBDF21C,
274 0xCABAC28A,
275 0x53B39330,
276 0x24B4A3A6,
277 0xBAD03605,
278 0xCDD70693,
279 0x54DE5729,
280 0x23D967BF,
281 0xB3667A2E,
282 0xC4614AB8,
283 0x5D681B02,
284 0x2A6F2B94,
285 0xB40BBE37,
286 0xC30C8EA1,
287 0x5A05DF1B,
288 0x2D02EF8D
289 };
290
291 uint32_t ventoy_crc32(void *Buffer, uint32_t Length)
292 {
293 uint32_t i;
294 uint8_t *Ptr = Buffer;
295 uint32_t Crc = 0xFFFFFFFF;
296
297 for (i = 0; i < Length; i++, Ptr++)
298 {
299 Crc = (Crc >> 8) ^ g_crc_table[(uint8_t) Crc ^ *Ptr];
300 }
301
302 return Crc ^ 0xffffffff;
303 }
304