[Openais] [PATCH corosync/trunk] teach object_key_increment() key types.

Steven Dake sdake at redhat.com
Sun Oct 11 15:38:34 PDT 2009


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



More information about the Openais mailing list