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>
This commit is contained in:
Andreas Fritiofson 2013-05-06 00:09:03 +02:00 committed by Spencer Oliver
parent 00ba179dbc
commit 70a2ffac8e
1 changed files with 20 additions and 24 deletions

View File

@ -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) {