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; return ERROR_FAIL;
} }
remote_bitbang_in = fdopen(fd, "r"); return fd;
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;
} }
static int remote_bitbang_init_unix(void) static int remote_bitbang_init_unix(void)
@ -213,15 +200,34 @@ static int remote_bitbang_init_unix(void)
return ERROR_FAIL; 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"); remote_bitbang_in = fdopen(fd, "r");
if (remote_bitbang_in == NULL) { if (remote_bitbang_in == NULL) {
LOG_ERROR("fdopen: failed to open read stream"); LOG_ERROR("fdopen: failed to open read stream");
close(fd);
return ERROR_FAIL; return ERROR_FAIL;
} }
remote_bitbang_out = fdopen(fd, "w"); remote_bitbang_out = fdopen(fd, "w");
if (remote_bitbang_out == NULL) { if (remote_bitbang_out == NULL) {
LOG_ERROR("fdopen: failed to open write stream"); LOG_ERROR("fdopen: failed to open write stream");
fclose(remote_bitbang_in);
return ERROR_FAIL; return ERROR_FAIL;
} }
@ -229,16 +235,6 @@ static int remote_bitbang_init_unix(void)
return ERROR_OK; 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) COMMAND_HANDLER(remote_bitbang_handle_remote_bitbang_port_command)
{ {
if (CMD_ARGC == 1) { if (CMD_ARGC == 1) {