[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