From 643bb99892b6d99289e0dd098cf9f911fcb8ee52 Mon Sep 17 00:00:00 2001 From: Brendan Le Foll Date: Wed, 10 Dec 2014 15:29:08 +0000 Subject: [PATCH] mraa.c: fix error handling & leak in mraa_setup_mux_mapped Signed-off-by: Brendan Le Foll --- src/mraa.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/mraa.c b/src/mraa.c index a98045e..12180b2 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -125,15 +125,24 @@ mraa_result_t mraa_setup_mux_mapped(mraa_pin_t meta) { int mi; + for (mi = 0; mi < meta.mux_total; mi++) { mraa_gpio_context mux_i; mux_i = mraa_gpio_init_raw(meta.mux[mi].pin); - if (mux_i == NULL) + if (mux_i == NULL) { return MRAA_ERROR_INVALID_HANDLE; - mraa_gpio_dir(mux_i, MRAA_GPIO_OUT); - if (mraa_gpio_write(mux_i, meta.mux[mi].value) != MRAA_SUCCESS) + } + if (mraa_gpio_dir(mux_i, MRAA_GPIO_OUT) != MRAA_SUCCESS) { + mraa_gpio_close(mux_i); + return MRAA_ERROR_UNSPECIFIED; + } + if (mraa_gpio_write(mux_i, meta.mux[mi].value) != MRAA_SUCCESS) { + mraa_gpio_close(mux_i); return MRAA_ERROR_INVALID_RESOURCE; + } + mraa_gpio_close(mux_i); } + return MRAA_SUCCESS; }