|
@@ -968,9 +968,45 @@ static int object_key_increment (
|
|
|
break;
|
|
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 {
|
|
else {
|
|
|
res = -1;
|
|
res = -1;
|
|
@@ -1014,9 +1050,46 @@ static int object_key_decrement (
|
|
|
break;
|
|
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 {
|
|
else {
|
|
|
res = -1;
|
|
res = -1;
|