From: Alex Ray Date: Wed, 11 Sep 2013 23:20:07 +0000 (-0700) Subject: consumer_ir: add array length to get carrier freq X-Git-Tag: android-x86-4.4-r1~13 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=d9d105a0;p=android-x86%2Fhardware-libhardware.git consumer_ir: add array length to get carrier freq Change-Id: Iefb424db6f16ffefa40da56c765c9b7a24bea397 --- diff --git a/include/hardware/consumerir.h b/include/hardware/consumerir.h index 491f852..5adf6be 100644 --- a/include/hardware/consumerir.h +++ b/include/hardware/consumerir.h @@ -66,12 +66,12 @@ typedef struct consumerir_device { * (*get_carrier_freqs)() is called by the ConsumerIrService to enumerate * which frequencies the IR transmitter supports. The HAL implementation * should fill an array of consumerir_freq_range structs with the - * appropriate values for the transmitter. + * appropriate values for the transmitter, up to len elements. * * returns: the number of ranges on success. A negative error code on error. */ int (*get_carrier_freqs)(struct consumerir_device *dev, - consumerir_freq_range_t *ranges); + size_t len, consumerir_freq_range_t *ranges); /* Reserved for future use. Must be NULL. */ void* reserved[8 - 3]; diff --git a/modules/consumerir/consumerir.c b/modules/consumerir/consumerir.c index 6a032a7..83eba75 100644 --- a/modules/consumerir/consumerir.c +++ b/modules/consumerir/consumerir.c @@ -54,10 +54,13 @@ static int consumerir_get_num_carrier_freqs(struct consumerir_device *dev) } static int consumerir_get_carrier_freqs(struct consumerir_device *dev, - consumerir_freq_range_t *ranges) + size_t len, consumerir_freq_range_t *ranges) { - memcpy(ranges, consumerir_freqs, sizeof(consumerir_freqs)); - return ARRAY_SIZE(consumerir_freqs); + size_t to_copy = ARRAY_SIZE(consumerir_freqs); + + to_copy = len < to_copy ? len : to_copy; + memcpy(ranges, consumerir_freqs, to_copy * sizeof(consumerir_freq_range_t)); + return to_copy; } static int consumerir_close(hw_device_t *dev)