Set errno=0 in read_block. On Win32 there is no errno and this makes the
do..while loop execute only once. Also set the return value to -1 in _xcb_open if control reaches the end - if all goes well it shouldn't reach there.
This commit is contained in:
parent
0e0c80e749
commit
56962e42a5
|
@ -297,15 +297,12 @@ static int read_block(const int fd, void *buf, const ssize_t len)
|
||||||
fd_set fds;
|
fd_set fds;
|
||||||
FD_ZERO(&fds);
|
FD_ZERO(&fds);
|
||||||
FD_SET(fd, &fds);
|
FD_SET(fd, &fds);
|
||||||
#ifndef _WIN32
|
|
||||||
|
/* Initializing errno here makes sure that for Win32 this loop will execute only once */
|
||||||
|
errno = 0;
|
||||||
do {
|
do {
|
||||||
ret = select(fd + 1, &fds, 0, 0, 0);
|
ret = select(fd + 1, &fds, 0, 0, 0);
|
||||||
} while (ret == -1 && errno == EINTR);
|
} while (ret == -1 && errno == EINTR);
|
||||||
#else
|
|
||||||
/* the do while loop used for the non-windows version isn't required*/
|
|
||||||
/* for windows since there are no signals in Windows hence no EINTR*/
|
|
||||||
ret = select(fd + 1, &fds, 0, 0, 0);
|
|
||||||
#endif /* !_WIN32 */
|
|
||||||
#endif /* USE_POLL */
|
#endif /* USE_POLL */
|
||||||
}
|
}
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
|
|
|
@ -180,10 +180,10 @@ static int _xcb_open(char *host, char *protocol, const int display)
|
||||||
fd = _xcb_open_abstract(protocol, file, filelen);
|
fd = _xcb_open_abstract(protocol, file, filelen);
|
||||||
if (fd >= 0 || (errno != ENOENT && errno != ECONNREFUSED))
|
if (fd >= 0 || (errno != ENOENT && errno != ECONNREFUSED))
|
||||||
return fd;
|
return fd;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
return _xcb_open_unix(protocol, file);
|
return _xcb_open_unix(protocol, file);
|
||||||
#endif /* !_WIN32 */
|
#endif /* !_WIN32 */
|
||||||
|
return -1; /* if control reaches here then something has gone wrong */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _xcb_socket(int family, int type, int proto)
|
static int _xcb_socket(int family, int type, int proto)
|
||||||
|
|
Loading…
Reference in New Issue