diff options
Diffstat (limited to 'src/jtag/drivers/remote_bitbang.c')
-rw-r--r-- | src/jtag/drivers/remote_bitbang.c | 44 |
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) { |