diff options
author | Tim Newsome <tim@sifive.com> | 2017-12-13 14:32:11 -0800 |
---|---|---|
committer | Tim Newsome <tim@sifive.com> | 2017-12-14 12:36:42 -0800 |
commit | 7eceac758ca08c3feeb77167ee2eb9829b1d93bc (patch) | |
tree | adc4be7b0fe852771b98dc209738263702a2c6d7 | |
parent | 3624d5e5eb3810e1277b56f99d94242210cfc4d8 (diff) | |
download | riscv-openocd-7eceac758ca08c3feeb77167ee2eb9829b1d93bc.zip riscv-openocd-7eceac758ca08c3feeb77167ee2eb9829b1d93bc.tar.gz riscv-openocd-7eceac758ca08c3feeb77167ee2eb9829b1d93bc.tar.bz2 |
Use abstraction because Windows is not POSIX
Fixes #138
Change-Id: I4d9b49762e318fe91f1561ed315829b43daefef4
-rw-r--r-- | src/helper/replacements.h | 11 | ||||
-rw-r--r-- | src/jtag/drivers/remote_bitbang.c | 4 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/helper/replacements.h b/src/helper/replacements.h index 1e2fbf2..f43b7e0 100644 --- a/src/helper/replacements.h +++ b/src/helper/replacements.h @@ -199,6 +199,17 @@ static inline int close_socket(int sock) #endif } +static inline void socket_block(int fd) +{ +#ifdef _WIN32 + unsigned long nonblock = 0; + ioctlsocket(fd, FIONBIO, &nonblock); +#else + int oldopts = fcntl(fd, F_GETFL, 0); + fcntl(fd, F_SETFL, oldopts & ~O_NONBLOCK); +#endif +} + static inline void socket_nonblock(int fd) { #ifdef _WIN32 diff --git a/src/jtag/drivers/remote_bitbang.c b/src/jtag/drivers/remote_bitbang.c index 5e78ccb..4e1995c 100644 --- a/src/jtag/drivers/remote_bitbang.c +++ b/src/jtag/drivers/remote_bitbang.c @@ -59,7 +59,7 @@ static int remote_bitbang_buf_full(void) /* Read any incoming data, placing it into the buffer. */ static void remote_bitbang_fill_buf(void) { - fcntl(remote_bitbang_fd, F_SETFL, O_NONBLOCK); + socket_nonblock(remote_bitbang_fd); while (!remote_bitbang_buf_full()) { unsigned contiguous_available_space; if (remote_bitbang_end >= remote_bitbang_start) { @@ -148,7 +148,7 @@ static int remote_bitbang_rread(void) } /* Enable blocking access. */ - fcntl(remote_bitbang_fd, F_SETFL, 0); + socket_block(remote_bitbang_fd); char c; ssize_t count = read(remote_bitbang_fd, &c, 1); if (count == 1) { |