From: Andreas Fritiofson Date: Sun, 5 May 2013 22:09:03 +0000 (+0200) Subject: remote_bitbang: De-duplicate init code and clean up on error X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=70a2ffac8e2db994e691065259422fa6886ee67f;hp=00ba179dbc1861bf51a67565abd4fa687831573f;p=fw%2Fopenocd 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 --- diff --git a/src/jtag/drivers/remote_bitbang.c b/src/jtag/drivers/remote_bitbang.c index 2151d049e..11a078839 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) {