diff options
author | Igor Sysoev <igor@sysoev.ru> | 2006-10-19 09:57:49 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2006-10-19 09:57:49 +0000 |
commit | 5569faa5e3847a00aa3766332dd71bea442e4428 (patch) | |
tree | 677f957093f0671605ad9a12c778d2ddbeb7b3be /src/core/ngx_crc32.h | |
parent | a8503de5b34bbe751a1f9d7a9367ff2b0a09abd9 (diff) | |
download | nginx-5569faa5e3847a00aa3766332dd71bea442e4428.tar.gz nginx-5569faa5e3847a00aa3766332dd71bea442e4428.zip |
split ngx_crc32() to short and long version
Diffstat (limited to 'src/core/ngx_crc32.h')
-rw-r--r-- | src/core/ngx_crc32.h | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/core/ngx_crc32.h b/src/core/ngx_crc32.h index 22da02c53..7c1827933 100644 --- a/src/core/ngx_crc32.h +++ b/src/core/ngx_crc32.h @@ -12,22 +12,44 @@ #include <ngx_core.h> -extern uint32_t ngx_crc32_table[]; +extern uint32_t *ngx_crc32_table_short; +extern uint32_t ngx_crc32_table256[]; static ngx_inline uint32_t -ngx_crc32(u_char *p, size_t len) +ngx_crc32_short(u_char *p, size_t len) { + u_char c; uint32_t crc; crc = 0xffffffff; while (len--) { - crc = ngx_crc32_table[(crc ^ *p++) & 0xff] ^ (crc >> 8); + c = *p++; + crc = ngx_crc32_table_short[(crc ^ (c & 0xf)) & 0xf] ^ (crc >> 4); + crc = ngx_crc32_table_short[(crc ^ (c >> 4)) & 0xf] ^ (crc >> 4); } return crc ^ 0xffffffff; } +static ngx_inline uint32_t +ngx_crc32_long(u_char *p, size_t len) +{ + uint32_t crc; + + crc = 0xffffffff; + + while (len--) { + crc = ngx_crc32_table256[(crc ^ *p++) & 0xff] ^ (crc >> 8); + } + + return crc ^ 0xffffffff; +} + + +ngx_int_t ngx_crc32_init(ngx_pool_t *pool); + + #endif /* _NGX_CRC32_H_INCLUDED_ */ |