diff options
author | Sage Weil <sage@inktank.com> | 2013-09-27 21:03:28 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-10-16 09:28:14 -0700 |
commit | 36e18ae997700f0b3b06d983d902826f034ac8cd (patch) | |
tree | c35cac8f612916a7ffc9b34dfc5681308c0ecb7a | |
parent | c545fc2f4c78026278e626ce87e3232311367959 (diff) | |
download | ceph-36e18ae997700f0b3b06d983d902826f034ac8cd.tar.gz |
common/crc32c_intel_baseline: accept null data buffer
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/common/crc32c_intel_baseline.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/common/crc32c_intel_baseline.c b/src/common/crc32c_intel_baseline.c index 3a92c77b63c..390898171df 100644 --- a/src/common/crc32c_intel_baseline.c +++ b/src/common/crc32c_intel_baseline.c @@ -115,13 +115,21 @@ uint32_t ceph_crc32c_intel_baseline(uint32_t crc_init2, unsigned char const *buf unsigned int crc; unsigned char* p_buf; - p_buf = (unsigned char*)buffer; - unsigned char const * p_end = buffer + len; + if (buffer) { + p_buf = (unsigned char*)buffer; + unsigned char const * p_end = buffer + len; - crc = crc_init; + crc = crc_init; + + while (p_buf < (unsigned char *) p_end ){ + crc = (crc >> 8) ^ crc32_table_iscsi_base[(crc & 0x000000FF) ^ *p_buf++]; + } + } else { + crc = crc_init; + while (len--) { + crc = (crc >> 8) ^ crc32_table_iscsi_base[(crc & 0x000000FF)]; + } - while(p_buf < (unsigned char *) p_end ){ - crc = (crc >> 8) ^ crc32_table_iscsi_base[(crc & 0x000000FF) ^ *p_buf++] ; } return crc; } |