Steve,
NACK, because this code is NEEDED for change notifications.
Steven Dake wrote:
> inc and dec operations in icmap were retrieving the key then setting it.
> As part of this process there was a memcpy operation and some extra
> operations that are not necessary when executing an increment
> operation.
>
> This patch gets the key's value and then modifies it directly.
>
> Signed-off-by: Steven Dake <sdake@xxxxxxxxxx>
> ---
> exec/icmap.c | 28 ++++++++++++----------------
> 1 files changed, 12 insertions(+), 16 deletions(-)
>
> diff --git a/exec/icmap.c b/exec/icmap.c
> index 14390d4..fdd6e49 100644
> --- a/exec/icmap.c
> +++ b/exec/icmap.c
> @@ -630,10 +630,10 @@ cs_error_t icmap_adjust_int(
> int32_t step)
> {
> struct icmap_item *item;
> - uint8_t u8;
> - uint16_t u16;
> - uint32_t u32;
> - uint64_t u64;
> + uint8_t *u8;
> + uint16_t *u16;
> + uint32_t *u32;
> + uint64_t *u64;
> cs_error_t err = CS_OK;
>
> if (key_name == NULL) {
> @@ -648,27 +648,23 @@ cs_error_t icmap_adjust_int(
> switch (item->type) {
> case ICMAP_VALUETYPE_INT8:
> case ICMAP_VALUETYPE_UINT8:
> - memcpy(&u8, item->value, sizeof(u8));
> - u8 += step;
> - err = icmap_set(key_name, &u8, sizeof(u8), item->type);
> + u8 = (uint8_t *)item->value;
> + *u8 += step;
> break;
> case ICMAP_VALUETYPE_INT16:
> case ICMAP_VALUETYPE_UINT16:
> - memcpy(&u16, item->value, sizeof(u16));
> - u16 += step;
> - err = icmap_set(key_name, &u16, sizeof(u16), item->type);
> + u16 = (uint16_t *)item->value;
> + *u16 += step;
> break;
> case ICMAP_VALUETYPE_INT32:
> case ICMAP_VALUETYPE_UINT32:
> - memcpy(&u32, item->value, sizeof(u32));
> - u32 += step;
> - err = icmap_set(key_name, &u32, sizeof(u32), item->type);
> + u32 = (uint32_t *)item->value;
> + *u32 += step;
> break;
> case ICMAP_VALUETYPE_INT64:
> case ICMAP_VALUETYPE_UINT64:
> - memcpy(&u64, item->value, sizeof(u64));
> - u64 += step;
> - err = icmap_set(key_name, &u64, sizeof(u64), item->type);
> + u64 = (uint64_t *)item->value;
> + *u64 += step;
> break;
> case ICMAP_VALUETYPE_FLOAT:
> case ICMAP_VALUETYPE_DOUBLE:
_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss
[Corosync Project]
[Linux USB Devel]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Free Online Dating]
[Linux Kernel]
[Linux SCSI]
[XFree86]