Browse Source

branches/zip:

Add const qualifier to the value returned by ha_storage_put().
It must not be changed as this will invalidate the hash.
pull/374/head
vasil 18 years ago
parent
commit
8dba58e45b
  1. 10
      ha/ha0storage.c
  2. 4
      include/ha0storage.h
  3. 2
      include/ha0storage.ic

10
ha/ha0storage.c

@ -22,7 +22,7 @@ Created September 22, 2007 Vasil Dimov
Retrieves a data from a storage. If it is present, a pointer to the
stored copy of data is returned, otherwise NULL is returned. */
static
void*
const void*
ha_storage_get(
/*===========*/
ha_storage_t* storage, /* in: hash storage */
@ -62,7 +62,7 @@ same data chunk is already present, then pointer to it is returned.
Data chunks are considered to be equal if len1 == len2 and
memcmp(data1, data2, len1) == 0. */
void*
const void*
ha_storage_put(
/*===========*/
ha_storage_t* storage, /* in/out: hash storage */
@ -71,7 +71,7 @@ ha_storage_put(
{
void* raw;
ha_storage_node_t* node;
void* data_copy;
const void* data_copy;
ulint fold;
/* check if data chunk is already present */
@ -91,7 +91,7 @@ ha_storage_put(
node = (ha_storage_node_t*) raw;
data_copy = (byte*) raw + sizeof(*node);
memcpy(data_copy, data, data_len);
memcpy((byte*) raw + sizeof(*node), data, data_len);
node->data_len = data_len;
node->data = data_copy;
@ -107,5 +107,7 @@ ha_storage_put(
fold, /* key */
node); /* add this data to the hash */
/* the output should not be changed because it will spoil the
hash table */
return(data_copy);
}

4
include/ha0storage.h

@ -41,7 +41,7 @@ same string is already present, then pointer to it is returned.
Strings are considered to be equal if strcmp(str1, str2) == 0. */
#define ha_storage_put_str(storage, str) \
ha_storage_put((storage), (str), strlen(str) + 1)
((const char*) ha_storage_put((storage), (str), strlen(str) + 1))
/***********************************************************************
Copies data into the storage and returns a pointer to the copy. If the
@ -49,7 +49,7 @@ same data chunk is already present, then pointer to it is returned.
Data chunks are considered to be equal if len1 == len2 and
memcmp(data1, data2, len1) == 0. */
void*
const void*
ha_storage_put(
/*===========*/
ha_storage_t* storage, /* in/out: hash storage */

2
include/ha0storage.ic

@ -24,7 +24,7 @@ struct ha_storage_struct {
typedef struct ha_storage_node_struct ha_storage_node_t;
struct ha_storage_node_struct {
ulint data_len;/* length of the data */
void* data; /* pointer to data */
const void* data; /* pointer to data */
ha_storage_node_t* next; /* next node in hash chain */
};

Loading…
Cancel
Save