[Openais] [PATCH corosync/trunk] teach object_key_increment() key types.
angus salkeld
angus.salkeld at alliedtelesis.co.nz
Sun Oct 11 15:53:52 PDT 2009
Committed as revision 2512.
-Angus
On Sun, 2009-10-11 at 15:38 -0700, Steven Dake wrote:
> looks good
>
> On Mon, 2009-10-12 at 08:06 +1300, angus salkeld wrote:
> > 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
> > Openais at lists.linux-foundation.org
> > https://lists.linux-foundation.org/mailman/listinfo/openais
>
> _______________________________________________
> Openais mailing list
> Openais at lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/openais
More information about the Openais
mailing list