瀏覽代碼

realloc: fix the memmove() call to use a proper size

Ioannis Koutras 12 年之前
父節點
當前提交
5dbc791f7e
共有 1 個文件被更改,包括 11 次插入3 次删除
  1. 11 3
      src/bitmap/bitmap_realloc.c

+ 11 - 3
src/bitmap/bitmap_realloc.c

@@ -18,7 +18,7 @@
 /**
  * @file   bitmap_realloc.c
  * @author Ilias Pliotas, Ioannis Koutras
- * @date   September, 2012
+ * @date   September 2012
  * @brief  realloc() implementation for bitmap-organized raw blocks
  */
 
@@ -48,8 +48,15 @@ void * bitmap_realloc(bitmap_rb_t *raw_block, void * ptr,
     chunk_header = (chunk_header_t *)((char *)ptr - CHUNK_HDR_SIZE);
 
     ret = malloc(req_size);
-    ret = memmove(ret, ptr,
-            chunk_header->num_of_cells * raw_block->bytes_per_cell);
+
+    if(req_size > chunk_header->num_of_cells * raw_block->bytes_per_cell -
+            CHUNK_HDR_SIZE) {
+        ret = memmove(ret, ptr, chunk_header->num_of_cells *
+                raw_block->bytes_per_cell - CHUNK_HDR_SIZE);
+    } else {
+        ret = memmove(ret, ptr, req_size);
+    }
+
 #ifdef HAVE_LOCKS
     raw_block_header_t *rb;
     rb = (raw_block_header_t *)((char *)raw_block - sizeof(raw_block_header_t));
@@ -59,5 +66,6 @@ void * bitmap_realloc(bitmap_rb_t *raw_block, void * ptr,
 #ifdef HAVE_LOCKS
     pthread_mutex_unlock(&rb->mutex);
 #endif /* HAVE_LOCKS */
+
     return ret;
 }