Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-10-19 13:57:49 +0400
committerIgor Sysoev <igor@sysoev.ru>2006-10-19 13:57:49 +0400
commit5569faa5e3847a00aa3766332dd71bea442e4428 (patch)
tree677f957093f0671605ad9a12c778d2ddbeb7b3be /src/core/ngx_crc32.h
parenta8503de5b34bbe751a1f9d7a9367ff2b0a09abd9 (diff)
split ngx_crc32() to short and long version
Diffstat (limited to 'src/core/ngx_crc32.h')
-rw-r--r--src/core/ngx_crc32.h28
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_ */