From 30322f8ac5a440167f4e15c0f58ca979c260bc12 Mon Sep 17 00:00:00 2001 From: Longwei Su Date: Tue, 22 Mar 2016 14:22:16 +0000 Subject: [PATCH] imraa.c: General imraa cleanup after static analysis Signed-off-by: Longwei Su Signed-off-by: Brendan Le Foll --- imraa/imraa.c | 82 +++++++++++++++++++++++++++++++-------------------- src/mraa.c | 6 +++- 2 files changed, 55 insertions(+), 33 deletions(-) diff --git a/imraa/imraa.c b/imraa/imraa.c index 023dfdf..8fd8c50 100644 --- a/imraa/imraa.c +++ b/imraa/imraa.c @@ -223,10 +223,10 @@ imraa_handle_subplatform(struct json_object* jobj, bool force_update) { struct json_object* platform; int i, ionum; - const char* dfu_loc; - const char* lockfile_loc; - const char* flash_loc; - const char* usbserial; + const char* dfu_loc = NULL; + const char* lockfile_loc = NULL; + const char* flash_loc = NULL; + const char* usbserial = NULL; struct json_object* dfu_location; if (json_object_object_get_ex(jobj, "dfu-utils-location", &dfu_location) == true) { @@ -247,6 +247,7 @@ imraa_handle_subplatform(struct json_object* jobj, bool force_update) fprintf(stderr, "lock file string incorrectly parsed\n"); } } + if (json_object_object_get_ex(jobj, "Platform", &platform) == true) { if (json_object_is_type(platform, json_type_array)) { ionum = json_object_array_length(platform); @@ -266,6 +267,19 @@ imraa_handle_subplatform(struct json_object* jobj, bool force_update) fprintf(stderr, "platform string incorrectly parsed\n"); } } + if (flash_loc == NULL || usbserial == NULL ) { + printf("conf didn't give image location or usb serial, skip flashing\n"); + return; + } + if (!dfu_loc) { + dfu_loc = "/usr/bin"; + printf("No dfu path found, using default path /usr/bin instead"); + } + if (!lockfile_loc) { + lockfile_loc = "/tmp/imraa.lock"; + printf("No lock path found, using default lock file /tmp/imraa.lock instead"); + } + // got flash? do flash if (access(lockfile_loc, F_OK) != -1 && force_update == false) { printf("already exist a lock file, skip flashing\n"); @@ -276,29 +290,25 @@ imraa_handle_subplatform(struct json_object* jobj, bool force_update) if (force_update) { fprintf(stdout, "**Caution: force update mode**\n"); } - // dfu_loc = "/usr/bin"; + // TODO flash img checksum, and serialport validation? const char* detected_serialport = imraa_list_serialport(); if (detected_serialport == NULL) { - printf("No subplatform detected, skip flashing\n"); + printf("No subplatform detected, check USB connection, skip flashing\n"); return; } if (strcmp(usbserial, "auto") != 0 && strcmp(usbserial, detected_serialport) != 0) { printf("given serial port didn't match detected serial port, skip flashing\n"); return; } - detected_serialport = "/dev/ttyACM0"; - if (dfu_loc != NULL && flash_loc != NULL && usbserial != NULL) { - if (imraa_flash_101(dfu_loc, flash_loc, detected_serialport) == 0) { - imraa_write_lockfile(lockfile_loc, detected_serialport); - } else { - fprintf(stderr, "Flash failed, push master reset and try again\n"); - } + if (imraa_flash_101(dfu_loc, flash_loc, detected_serialport) == 0) { + imraa_write_lockfile(lockfile_loc, detected_serialport); } else { fprintf(stderr, "invalid flashing paramenters, please check agian\n"); fprintf(stderr, "DFU Util location: %s\n", dfu_loc); fprintf(stderr, "Flash Img location: %s\n", dfu_loc); fprintf(stderr, "USB Serial: %s\n", usbserial); + fprintf(stderr, "Flash failed, push master reset and try again\n"); } } } @@ -343,56 +353,61 @@ imraa_handle_IO(struct json_object* jobj) if (strcmp(mraa_io_obj[i].type, "gpio") == 0) { mraa_gpio_context gpio = NULL; if (mraa_io_obj[i].raw) { - printf("gpio raw init\n"); gpio = mraa_gpio_init_raw(mraa_io_obj[i].index); } else { - printf("gpio init\n"); gpio = mraa_gpio_init(mraa_io_obj[i].index); } - mraa_result_t r = mraa_gpio_owner(gpio, 0); - if (r != MRAA_SUCCESS) { - mraa_result_print(r); + if (gpio != NULL) { + mraa_result_t r = mraa_gpio_owner(gpio, 0); + if (r != MRAA_SUCCESS) { + mraa_result_print(r); + } + mraa_gpio_close(gpio); } } else if (strcmp(mraa_io_obj[i].type, "i2c") == 0) { mraa_i2c_context i2c = NULL; if (mraa_io_obj[i].raw) { - printf("i2c raw init\n"); i2c = mraa_i2c_init_raw(mraa_io_obj[i].index); } else { - printf("i2c init\n"); i2c = mraa_i2c_init(mraa_io_obj[i].index); } + if (i2c != NULL) { + mraa_i2c_stop(i2c); + } } else if (strcmp(mraa_io_obj[i].type, "pwm") == 0) { mraa_pwm_context pwm = NULL; if (mraa_io_obj[i].raw) { - printf("pwm raw init\n"); pwm = mraa_pwm_init_raw(index2, mraa_io_obj[i].index); } else { - printf("pwm init\n"); pwm = mraa_pwm_init(mraa_io_obj[i].index); } - mraa_result_t r = mraa_pwm_owner(pwm, 0); - if (r != MRAA_SUCCESS) { - mraa_result_print(r); + if (pwm != NULL) { + mraa_result_t r = mraa_pwm_owner(pwm, 0); + if (r != MRAA_SUCCESS) { + mraa_result_print(r); + } + mraa_pwm_close(pwm); } } else if (strcmp(mraa_io_obj[i].type, "spi") == 0) { mraa_spi_context spi = NULL; if (mraa_io_obj[i].raw) { - printf("spi raw init\n"); spi = mraa_spi_init_raw(mraa_io_obj[i].index, index2); } else { - printf("spi init\n"); spi = mraa_spi_init(mraa_io_obj[i].index); } + if (spi != NULL) { + mraa_spi_stop(spi); + } } else if (strcmp(mraa_io_obj[i].type, "uart") == 0) { mraa_uart_context uart = NULL; if (mraa_io_obj[i].raw) { - printf("uart raw init\n"); uart = mraa_uart_init_raw(mraa_io_obj[i].label); } else { - printf("uart init\n"); uart = mraa_uart_init(mraa_io_obj[i].index); } + if (uart != NULL) { + mraa_uart_stop(uart); + } } } } else { @@ -459,10 +474,10 @@ main(int argc, char** argv) if (argc > 1) { if (strcmp(argv[1], "help") == 0) { print_help(); - return; + return EXIT_SUCCESS; } else if (strcmp(argv[1], "version") == 0) { print_version(); - return; + return EXIT_SUCCESS; } else if (strcmp(argv[1], "force") == 0) { force_update = true; } else { @@ -482,7 +497,10 @@ main(int argc, char** argv) fseek(fh, 0, SEEK_SET); buffer = calloc(fsize, sizeof(char)); if (buffer != NULL) { - fread(buffer, sizeof(char), fsize, fh); + int result = fread(buffer, sizeof(char), fsize, fh); + if (result != fsize) { + printf("imraa conf reading error"); + } } else { printf("imraa read_conf buffer can't allocated\n"); exit(1); diff --git a/src/mraa.c b/src/mraa.c index ff36240..fcf9bde 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -1009,7 +1009,10 @@ mraa_add_from_lockfile(const char* imraa_lock_file) { fseek(flock, 0, SEEK_SET); buffer = (char*) calloc(fsize, sizeof(char)); if (buffer != NULL) { - fread(buffer, sizeof(char), fsize, flock); + int result = fread(buffer, sizeof(char), fsize, flock); + if (result != fsize) { + printf("imraa lockfile reading error"); + } } json_object* jobj_lock = json_tokener_parse(buffer); @@ -1043,6 +1046,7 @@ mraa_add_from_lockfile(const char* imraa_lock_file) { } json_object_put(jobj_lock); free(buffer); + fclose(flock); return subplat_num; } #endif