aboutsummaryrefslogtreecommitdiff
path: root/src/jtag/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/jtag/drivers')
-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 2151d049..11a07883 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) {