From 70a2ffac8e2db994e691065259422fa6886ee67f Mon Sep 17 00:00:00 2001 From: Andreas Fritiofson Date: Mon, 6 May 2013 00:09:03 +0200 Subject: [PATCH] remote_bitbang: De-duplicate init code and clean up on error Change-Id: I8be413a9e1683f96f835232f9ff25d9bd42099de Signed-off-by: Andreas Fritiofson Reviewed-on: http://openocd.zylin.com/1380 Tested-by: jenkins Reviewed-by: Paul Fertser Reviewed-by: Spencer Oliver --- src/jtag/drivers/remote_bitbang.c | 44 ++++++++++++++----------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/src/jtag/drivers/remote_bitbang.c b/src/jtag/drivers/remote_bitbang.c index 2151d049e5..11a0788393 100644 --- a/src/jtag/drivers/remote_bitbang.c +++ b/src/jtag/drivers/remote_bitbang.c @@ -173,20 +173,7 @@ static int remote_bitbang_init_tcp(void) return ERROR_FAIL; } - remote_bitbang_in = fdopen(fd, "r"); - if (remote_bitbang_in == NULL) { - LOG_ERROR("fdopen: failed to open read stream"); - return ERROR_FAIL; - } - - remote_bitbang_out = fdopen(fd, "w"); - if (remote_bitbang_out == NULL) { - LOG_ERROR("fdopen: failed to open write stream"); - return ERROR_FAIL; - } - - LOG_INFO("remote_bitbang driver initialized"); - return ERROR_OK; + return fd; } static int remote_bitbang_init_unix(void) @@ -213,15 +200,34 @@ static int remote_bitbang_init_unix(void) return ERROR_FAIL; } + return fd; +} + +static int remote_bitbang_init(void) +{ + int fd; + bitbang_interface = &remote_bitbang_bitbang; + + LOG_INFO("Initializing remote_bitbang driver"); + if (remote_bitbang_port == NULL) + fd = remote_bitbang_init_unix(); + else + fd = remote_bitbang_init_tcp(); + + if (fd < 0) + return fd; + remote_bitbang_in = fdopen(fd, "r"); if (remote_bitbang_in == NULL) { LOG_ERROR("fdopen: failed to open read stream"); + close(fd); return ERROR_FAIL; } remote_bitbang_out = fdopen(fd, "w"); if (remote_bitbang_out == NULL) { LOG_ERROR("fdopen: failed to open write stream"); + fclose(remote_bitbang_in); return ERROR_FAIL; } @@ -229,16 +235,6 @@ static int remote_bitbang_init_unix(void) return ERROR_OK; } -static int remote_bitbang_init(void) -{ - bitbang_interface = &remote_bitbang_bitbang; - - LOG_INFO("Initializing remote_bitbang driver"); - if (remote_bitbang_port == NULL) - return remote_bitbang_init_unix(); - return remote_bitbang_init_tcp(); -} - COMMAND_HANDLER(remote_bitbang_handle_remote_bitbang_port_command) { if (CMD_ARGC == 1) { -- 2.30.2