summaryrefslogtreecommitdiff
path: root/ndb/src/common/util/ConfigValues.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/src/common/util/ConfigValues.cpp')
-rw-r--r--ndb/src/common/util/ConfigValues.cpp44
1 files changed, 25 insertions, 19 deletions
diff --git a/ndb/src/common/util/ConfigValues.cpp b/ndb/src/common/util/ConfigValues.cpp
index 18ecf4bcdc4..7fc99bc526c 100644
--- a/ndb/src/common/util/ConfigValues.cpp
+++ b/ndb/src/common/util/ConfigValues.cpp
@@ -60,7 +60,7 @@ ConfigValues::ConfigValues(Uint32 sz, Uint32 dsz){
ConfigValues::~ConfigValues(){
for(Uint32 i = 0; i<m_stringCount; i++){
- free(getString(i));
+ free(* getString(i));
}
}
@@ -87,10 +87,10 @@ ConfigValues::getByPos(Uint32 pos, Entry * result) const {
result->m_int = val;
break;
case StringType:
- result->m_string = getString(val);
+ result->m_string = * getString(val);
break;
case Int64Type:
- result->m_int64 = get64(val);
+ result->m_int64 = * get64(val);
break;
case InvalidType:
default:
@@ -102,18 +102,23 @@ ConfigValues::getByPos(Uint32 pos, Entry * result) const {
return true;
}
-Uint64 &
+Uint64 *
ConfigValues::get64(Uint32 index) const {
assert(index < m_int64Count);
- Uint64 * ptr = (Uint64*)(&m_values[m_size << 1]);
- return ptr[index];
+ const Uint32 * data = m_values + (m_size << 1);
+ Uint64 * ptr = (Uint64*)data;
+ ptr += index;
+ return ptr;
}
-char * &
+char **
ConfigValues::getString(Uint32 index) const {
- assert(index < m_stringCount);
- char ** ptr = (char**)(((char *)&(m_values[m_size << 1])) + m_dataSize);
- return ptr[-index];
+ assert(index < m_stringCount);
+ const Uint32 * data = m_values + (m_size << 1);
+ char * ptr = (char*)data;
+ ptr += m_dataSize;
+ ptr -= (index * sizeof(char *));
+ return (char**)ptr;
}
bool
@@ -176,7 +181,7 @@ ConfigValues::Iterator::set(Uint32 key, Uint64 value){
return false;
}
- m_cfg.get64(m_cfg.m_values[pos+1]) = value;
+ * m_cfg.get64(m_cfg.m_values[pos+1]) = value;
return true;
}
@@ -191,9 +196,9 @@ ConfigValues::Iterator::set(Uint32 key, const char * value){
return false;
}
- char * & str = m_cfg.getString(m_cfg.m_values[pos+1]);
- free(str);
- str = strdup(value ? value : "");
+ char ** str = m_cfg.getString(m_cfg.m_values[pos+1]);
+ free(* str);
+ * str = strdup(value ? value : "");
return true;
}
@@ -457,7 +462,8 @@ ConfigValuesFactory::put(const ConfigValues::Entry & entry){
case ConfigValues::StringType:{
Uint32 index = m_cfg->m_stringCount++;
m_cfg->m_values[pos+1] = index;
- m_cfg->getString(index) = strdup(entry.m_string ? entry.m_string : "");
+ char ** ref = m_cfg->getString(index);
+ * ref = strdup(entry.m_string ? entry.m_string : "");
m_freeKeys--;
m_freeData -= sizeof(char *);
DEBUG printf("Putting at: %d(%d) (loop = %d) key: %d value(%d): %s\n",
@@ -470,7 +476,7 @@ ConfigValuesFactory::put(const ConfigValues::Entry & entry){
case ConfigValues::Int64Type:{
Uint32 index = m_cfg->m_int64Count++;
m_cfg->m_values[pos+1] = index;
- m_cfg->get64(index) = entry.m_int64;
+ * m_cfg->get64(index) = entry.m_int64;
m_freeKeys--;
m_freeData -= 8;
DEBUG printf("Putting at: %d(%d) (loop = %d) key: %d value64(%d): %lld\n",
@@ -558,7 +564,7 @@ ConfigValues::getPackedSize() const {
break;
case StringType:
size += 8; // key + len
- size += mod4(strlen(getString(m_values[i+1])) + 1);
+ size += mod4(strlen(* getString(m_values[i+1])) + 1);
break;
case InvalidType:
default:
@@ -587,7 +593,7 @@ ConfigValues::pack(void * _dst, Uint32 _len) const {
* (Uint32*)dst = htonl(val); dst += 4;
break;
case Int64Type:{
- Uint64 i64 = get64(val);
+ Uint64 i64 = * get64(val);
Uint32 hi = (i64 >> 32);
Uint32 lo = (i64 & 0xFFFFFFFF);
* (Uint32*)dst = htonl(key); dst += 4;
@@ -596,7 +602,7 @@ ConfigValues::pack(void * _dst, Uint32 _len) const {
}
break;
case StringType:{
- const char * str = getString(val);
+ const char * str = * getString(val);
Uint32 len = strlen(str) + 1;
* (Uint32*)dst = htonl(key); dst += 4;
* (Uint32*)dst = htonl(len); dst += 4;