aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>2013-05-06 00:09:03 +0200
committerSpencer Oliver <spen@spen-soft.co.uk>2013-05-10 14:46:55 +0000
commit70a2ffac8e2db994e691065259422fa6886ee67f (patch)
tree287a040338509268ff87893050afb1b3b696e9df
parent00ba179dbc1861bf51a67565abd4fa687831573f (diff)
downloadriscv-openocd-70a2ffac8e2db994e691065259422fa6886ee67f.zip
riscv-openocd-70a2ffac8e2db994e691065259422fa6886ee67f.tar.gz
riscv-openocd-70a2ffac8e2db994e691065259422fa6886ee67f.tar.bz2
remote_bitbang: De-duplicate init code and clean up on error
Change-Id: I8be413a9e1683f96f835232f9ff25d9bd42099de Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Reviewed-on: http://openocd.zylin.com/1380 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com> Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
-rw-r--r--src/jtag/drivers/remote_bitbang.c44
1 files changed, 20 insertions, 24 deletions
diff --git a/src/jtag/drivers/remote_bitbang.c b/src/jtag/drivers/remote_bitbang.c
index 2151d04..11a0788 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) {