Hi
This is so we can increment all integer types correctly.
Steve you wanted uint64_t stats counters and we will need this
patch to achieve this.
-Angus
diff --git a/exec/objdb.c b/exec/objdb.c
index 0e4d6e9..726b302 100644
--- a/exec/objdb.c
+++ b/exec/objdb.c
@@ -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;
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais