From d9d105a0ce6bbaa8d1d1cf70a255612a5dd33701 Mon Sep 17 00:00:00 2001 From: Alex Ray Date: Wed, 11 Sep 2013 16:20:07 -0700 Subject: [PATCH] consumer_ir: add array length to get carrier freq Change-Id: Iefb424db6f16ffefa40da56c765c9b7a24bea397 --- include/hardware/consumerir.h | 4 ++-- 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 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) -- 2.11.0