summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-09-27 21:03:28 -0700
committerSage Weil <sage@inktank.com>2013-10-16 09:28:14 -0700
commit36e18ae997700f0b3b06d983d902826f034ac8cd (patch)
treec35cac8f612916a7ffc9b34dfc5681308c0ecb7a
parentc545fc2f4c78026278e626ce87e3232311367959 (diff)
downloadceph-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.c18
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;
}