diff options
author | Alex Ray <aray@google.com> | 2013-09-11 16:20:07 -0700 |
---|---|---|
committer | Alex Ray <aray@google.com> | 2013-09-11 17:51:19 -0700 |
commit | d9d105a0ce6bbaa8d1d1cf70a255612a5dd33701 (patch) | |
tree | ec58f857468d2f78d142d7d67ece67cb8fd9b9d9 | |
parent | c900b4230c5f33abc1b7bc590c4ffe21ec8a59d0 (diff) | |
download | libhardware-d9d105a0ce6bbaa8d1d1cf70a255612a5dd33701.tar.gz |
consumer_ir: add array length to get carrier freqandroid-4.4_r0.7
Change-Id: Iefb424db6f16ffefa40da56c765c9b7a24bea397
-rw-r--r-- | include/hardware/consumerir.h | 4 | ||||
-rw-r--r-- | modules/consumerir/consumerir.c | 9 |
2 files changed, 8 insertions, 5 deletions
diff --git a/include/hardware/consumerir.h b/include/hardware/consumerir.h index 491f8522..5adf6be5 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 6a032a75..83eba757 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) |