250
|
1
|
|
2 /*
|
|
3 * Copyright (C) Igor Sysoev
|
|
4 */
|
|
5
|
|
6
|
|
7 #ifndef _NGX_CRC32_H_INCLUDED_
|
|
8 #define _NGX_CRC32_H_INCLUDED_
|
|
9
|
|
10
|
|
11 #include <ngx_config.h>
|
|
12 #include <ngx_core.h>
|
|
13
|
|
14
|
|
15 extern uint32_t *ngx_crc32_table_short;
|
|
16 extern uint32_t ngx_crc32_table256[];
|
|
17
|
|
18
|
|
19 static ngx_inline uint32_t
|
|
20 ngx_crc32_short(u_char *p, size_t len)
|
|
21 {
|
|
22 u_char c;
|
|
23 uint32_t crc;
|
|
24
|
|
25 crc = 0xffffffff;
|
|
26
|
|
27 while (len--) {
|
|
28 c = *p++;
|
|
29 crc = ngx_crc32_table_short[(crc ^ (c & 0xf)) & 0xf] ^ (crc >> 4);
|
|
30 crc = ngx_crc32_table_short[(crc ^ (c >> 4)) & 0xf] ^ (crc >> 4);
|
|
31 }
|
|
32
|
|
33 return crc ^ 0xffffffff;
|
|
34 }
|
|
35
|
|
36
|
|
37 static ngx_inline uint32_t
|
|
38 ngx_crc32_long(u_char *p, size_t len)
|
|
39 {
|
|
40 uint32_t crc;
|
|
41
|
|
42 crc = 0xffffffff;
|
|
43
|
|
44 while (len--) {
|
|
45 crc = ngx_crc32_table256[(crc ^ *p++) & 0xff] ^ (crc >> 8);
|
|
46 }
|
|
47
|
|
48 return crc ^ 0xffffffff;
|
|
49 }
|
|
50
|
|
51
|
356
|
52 #define ngx_crc32_init(crc) \
|
|
53 crc = 0xffffffff
|
|
54
|
|
55
|
|
56 static ngx_inline void
|
|
57 ngx_crc32_update(uint32_t *crc, u_char *p, size_t len)
|
|
58 {
|
|
59 uint32_t c;
|
|
60
|
|
61 c = *crc;
|
|
62
|
|
63 while (len--) {
|
|
64 c = ngx_crc32_table256[(c ^ *p++) & 0xff] ^ (c >> 8);
|
|
65 }
|
|
66
|
|
67 *crc = c;
|
|
68 }
|
|
69
|
|
70
|
|
71 #define ngx_crc32_final(crc) \
|
|
72 crc ^= 0xffffffff
|
|
73
|
|
74
|
|
75 ngx_int_t ngx_crc32_table_init(void);
|
250
|
76
|
|
77
|
|
78 #endif /* _NGX_CRC32_H_INCLUDED_ */
|