teach object_key_increment() key types.

This is so we can increment all integer types correctly.


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2512 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
Angus Salkeld 2009-10-11 22:53:13 +00:00
parent 73b7aa19bb
commit 0c9a6c49ff

View File

@ -968,9 +968,45 @@ static int object_key_increment (
break;
}
}
if (found && object_key->value_len == sizeof(int)) {
(*(int *)object_key->value)++;
*value = *(int *)object_key->value;
if (found) {
switch (object_key->value_type) {
case OBJDB_VALUETYPE_INT16:
(*(int16_t *)object_key->value)++;
break;
case OBJDB_VALUETYPE_UINT16:
(*(uint16_t *)object_key->value)++;
break;
case OBJDB_VALUETYPE_INT32:
(*(int32_t *)object_key->value)++;
break;
case OBJDB_VALUETYPE_UINT32:
(*(uint32_t *)object_key->value)++;
break;
case OBJDB_VALUETYPE_INT64:
(*(int64_t *)object_key->value)++;
break;
case OBJDB_VALUETYPE_UINT64:
(*(uint64_t *)object_key->value)++;
break;
case OBJDB_VALUETYPE_ANY:
/* for backwards compatibilty */
if (object_key->value_len == sizeof(int)) {
(*(int *)object_key->value)++;
}
else {
res = -1;
}
break;
default:
res = -1;
break;
}
if (res == 0) {
/* nasty, not sure why we need to return this typed
* instead of void* */
*value = *(int *)object_key->value;
}
}
else {
res = -1;
@ -1014,9 +1050,46 @@ static int object_key_decrement (
break;
}
}
if (found && object_key->value_len == sizeof(int)) {
(*(int *)object_key->value)--;
*value = *(int *)object_key->value;
if (found) {
switch (object_key->value_type) {
case OBJDB_VALUETYPE_INT16:
(*(int16_t *)object_key->value)--;
break;
case OBJDB_VALUETYPE_UINT16:
(*(uint16_t *)object_key->value)--;
break;
case OBJDB_VALUETYPE_INT32:
(*(int32_t *)object_key->value)--;
break;
case OBJDB_VALUETYPE_UINT32:
(*(uint32_t *)object_key->value)--;
break;
case OBJDB_VALUETYPE_INT64:
(*(int64_t *)object_key->value)--;
break;
case OBJDB_VALUETYPE_UINT64:
(*(uint64_t *)object_key->value)--;
break;
case OBJDB_VALUETYPE_ANY:
/* for backwards compatibilty */
if (object_key->value_len == sizeof(int)) {
(*(int *)object_key->value)--;
}
else {
res = -1;
}
break;
default:
res = -1;
break;
}
if (res == 0) {
/* nasty, not sure why we need to return this typed
* instead of void* */
*value = *(int *)object_key->value;
}
}
else {
res = -1;