src/core/ngx_crc32.h - nginx-1.7.10

Functions defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */


  5. #ifndef _NGX_CRC32_H_INCLUDED_
  6. #define _NGX_CRC32_H_INCLUDED_


  7. #include <ngx_config.h>
  8. #include <ngx_core.h>


  9. extern uint32_t  *ngx_crc32_table_short;
  10. extern uint32_t   ngx_crc32_table256[];


  11. static ngx_inline uint32_t
  12. ngx_crc32_short(u_char *p, size_t len)
  13. {
  14.     u_char    c;
  15.     uint32_t  crc;

  16.     crc = 0xffffffff;

  17.     while (len--) {
  18.         c = *p++;
  19.         crc = ngx_crc32_table_short[(crc ^ (c & 0xf)) & 0xf] ^ (crc >> 4);
  20.         crc = ngx_crc32_table_short[(crc ^ (c >> 4)) & 0xf] ^ (crc >> 4);
  21.     }

  22.     return crc ^ 0xffffffff;
  23. }


  24. static ngx_inline uint32_t
  25. ngx_crc32_long(u_char *p, size_t len)
  26. {
  27.     uint32_t  crc;

  28.     crc = 0xffffffff;

  29.     while (len--) {
  30.         crc = ngx_crc32_table256[(crc ^ *p++) & 0xff] ^ (crc >> 8);
  31.     }

  32.     return crc ^ 0xffffffff;
  33. }


  34. #define ngx_crc32_init(crc)                                                   \
  35.     crc = 0xffffffff


  36. static ngx_inline void
  37. ngx_crc32_update(uint32_t *crc, u_char *p, size_t len)
  38. {
  39.     uint32_t  c;

  40.     c = *crc;

  41.     while (len--) {
  42.         c = ngx_crc32_table256[(c ^ *p++) & 0xff] ^ (c >> 8);
  43.     }

  44.     *crc = c;
  45. }


  46. #define ngx_crc32_final(crc)                                                  \
  47.     crc ^= 0xffffffff


  48. ngx_int_t ngx_crc32_table_init(void);


  49. #endif /* _NGX_CRC32_H_INCLUDED_ */