* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
#include <jtag/interface.h>
#include "bitbang.h"
-#ifndef UNIX_PATH_LEN
-#define UNIX_PATH_LEN 108
-#endif
-
/* arbitrary limit on host name length: */
#define REMOTE_BITBANG_HOST_MAX 255
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)
struct sockaddr_un addr;
addr.sun_family = AF_UNIX;
- strncpy(addr.sun_path, remote_bitbang_host, UNIX_PATH_LEN);
- addr.sun_path[UNIX_PATH_LEN-1] = '\0';
+ strncpy(addr.sun_path, remote_bitbang_host, sizeof(addr.sun_path));
+ addr.sun_path[sizeof(addr.sun_path)-1] = '\0';
if (connect(fd, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0) {
LOG_ERROR("connect: %s", strerror(errno));
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;
}
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) {