X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Fcrc.h;h=1aa73dcce7f38594a91519b24f02707b207b0488;hb=0053f1a862cd0c2f359a4d12f0fdd35b17d18906;hp=28d59acf6eba1997f511194ebb33b8af5a8b5c23;hpb=078dd50e9e9d322db3f5ac8d0c434ebeeac10a79;p=libucw.git diff --git a/ucw/crc.h b/ucw/crc.h index 28d59acf..1aa73dcc 100644 --- a/ucw/crc.h +++ b/ucw/crc.h @@ -16,20 +16,28 @@ * Adapted for LibUCW by Martin Mares in 2012. */ +#ifndef _UCW_CRC_H +#define _UCW_CRC_H + +#ifdef CONFIG_UCW_CLEAN_ABI +#define crc32_hash_buffer ucw_crc32_hash_buffer +#define crc32_init ucw_crc32_init +#endif + /** * Internal CRC calculator context. * You should use it just as an opaque handle only. */ typedef struct crc32_context { u32 state; - void (*update_func)(struct crc32_context *ctx, const byte *buf, uns len); + void (*update_func)(struct crc32_context *ctx, const byte *buf, uint len); } crc32_context; /** * Initialize new calculation of CRC in a given context. * @crc_mode selects which algorithm should be used. **/ -void crc32_init(crc32_context *ctx, uns crc_mode); +void crc32_init(crc32_context *ctx, uint crc_mode); /** * Algorithm used for CRC calculation. The algorithms differ by the amount @@ -44,7 +52,7 @@ enum crc_mode { }; /** Feed @len bytes starting at @buf to the CRC calculator. **/ -static inline void crc32_update(crc32_context *ctx, const byte *buf, uns len) +static inline void crc32_update(crc32_context *ctx, const byte *buf, uint len) { ctx->update_func(ctx, buf, len); } @@ -54,3 +62,16 @@ static inline u32 crc32_final(crc32_context *ctx) { return ctx->state ^ 0xffffffff; } + +/** + * A convenience one-shot function for CRC. + * It is equivalent to this snippet of code: + * + * crc32_context ctx; + * crc32_init(&ctx, CRC_MODE_DEFAULT); + * crc32_update(&ctx, buf, len); + * return crc32_final(&ctx); + */ +u32 crc32_hash_buffer(const byte *buf, uint len); + +#endif