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.
fd_set fds;
FD_ZERO(&fds);
FD_SET(fd, &fds);
-#ifndef _WIN32
+
+ /* Initializing errno here makes sure that for Win32 this loop will execute only once */
+ errno = 0;
do {
ret = select(fd + 1, &fds, 0, 0, 0);
} 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 */
}
if(ret <= 0)
fd = _xcb_open_abstract(protocol, file, filelen);
if (fd >= 0 || (errno != ENOENT && errno != ECONNREFUSED))
return fd;
-
#endif
return _xcb_open_unix(protocol, file);
#endif /* !_WIN32 */
+ return -1; /* if control reaches here then something has gone wrong */
}
static int _xcb_socket(int family, int type, int proto)