- socket_nonblock(remote_bitbang_fd);
- while (!remote_bitbang_buf_full()) {
- unsigned int contiguous_available_space;
- if (remote_bitbang_recv_buf_end >= remote_bitbang_recv_buf_start) {
- contiguous_available_space = sizeof(remote_bitbang_recv_buf) -
- remote_bitbang_recv_buf_end;
- if (remote_bitbang_recv_buf_start == 0)
- contiguous_available_space -= 1;
- } else {
- contiguous_available_space = remote_bitbang_recv_buf_start -
- remote_bitbang_recv_buf_end - 1;
+ return remote_bitbang_recv_buf_start == remote_bitbang_recv_buf_end;
+}
+
+static unsigned int remote_bitbang_recv_buf_contiguous_available_space(void)
+{
+ if (remote_bitbang_recv_buf_end >= remote_bitbang_recv_buf_start) {
+ unsigned int space = sizeof(remote_bitbang_recv_buf) -
+ remote_bitbang_recv_buf_end;
+ if (remote_bitbang_recv_buf_start == 0)
+ space -= 1;
+ return space;
+ } else {
+ return remote_bitbang_recv_buf_start -
+ remote_bitbang_recv_buf_end - 1;
+ }
+}
+
+static int remote_bitbang_flush(void)
+{
+ if (remote_bitbang_send_buf_used <= 0)
+ return ERROR_OK;
+
+ unsigned int offset = 0;
+ while (offset < remote_bitbang_send_buf_used) {
+ ssize_t written = write_socket(remote_bitbang_fd, remote_bitbang_send_buf + offset,
+ remote_bitbang_send_buf_used - offset);
+ if (written < 0) {
+ log_socket_error("remote_bitbang_putc");
+ remote_bitbang_send_buf_used = 0;
+ return ERROR_FAIL;