remote_bitbang: De-duplicate init code and clean up on error
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>
Sun, 5 May 2013 22:09:03 +0000 (00:09 +0200)
committerSpencer Oliver <spen@spen-soft.co.uk>
Fri, 10 May 2013 14:46:55 +0000 (14:46 +0000)
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>
src/jtag/drivers/remote_bitbang.c

index 2151d049e5c6074e33fae79c749533e7261d8ffa..11a07883931d7d3d9f025317b65230f330455c20 100644 (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) {