]> source.dussan.org Git - tigervnc.git/commitdiff
Avoid redefining errno
authorPierre Ossman <ossman@cendio.se>
Sun, 20 Nov 2022 12:25:23 +0000 (13:25 +0100)
committerPierre Ossman <ossman@cendio.se>
Sat, 4 Feb 2023 13:03:13 +0000 (14:03 +0100)
This can have unexpected consequences as some code may rely on it being
a simple variable. Instead to what we do in Socket, which is to define a
unique name for getting socket error numbers.

common/rdr/FdInStream.cxx
common/rdr/FdOutStream.cxx

index 13d3a5a82802fa2f12842907d12f962a51328e35..4ddd12218fa35d84b7eff76c6b848fd30d5e93aa 100644 (file)
 #include <sys/time.h>
 #ifdef _WIN32
 #include <winsock2.h>
+#define errorNumber WSAGetLastError()
 #define close closesocket
-#undef errno
-#define errno WSAGetLastError()
 #include <os/winerrno.h>
 #else
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <unistd.h>
+#define errorNumber errno
 #endif
 
 /* Old systems have select() in sys/time.h */
@@ -89,20 +89,20 @@ size_t FdInStream::readFd(void* buf, size_t len)
     FD_ZERO(&fds);
     FD_SET(fd, &fds);
     n = select(fd+1, &fds, 0, 0, &tv);
-  } while (n < 0 && errno == EINTR);
+  } while (n < 0 && errorNumber == EINTR);
 
   if (n < 0)
-    throw SystemException("select",errno);
+    throw SystemException("select", errorNumber);
 
   if (n == 0)
     return 0;
 
   do {
     n = ::recv(fd, (char*)buf, len, 0);
-  } while (n < 0 && errno == EINTR);
+  } while (n < 0 && errorNumber == EINTR);
 
   if (n < 0)
-    throw SystemException("read",errno);
+    throw SystemException("read", errorNumber);
   if (n == 0)
     throw EndOfStream();
 
index f89fd34530cacfd83e5a02afceeaa9a17b8ff6ce..e630a4d770b65216ec0e31251b3469a1c073e614 100644 (file)
@@ -27,8 +27,7 @@
 #include <errno.h>
 #ifdef _WIN32
 #include <winsock2.h>
-#undef errno
-#define errno WSAGetLastError()
+#define errorNumber WSAGetLastError()
 #include <os/winerrno.h>
 #else
 #include <sys/types.h>
@@ -37,6 +36,7 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
+#define errorNumber errno
 #endif
 
 /* Old systems have select() in sys/time.h */
@@ -109,10 +109,10 @@ size_t FdOutStream::writeFd(const void* data, size_t length)
     FD_ZERO(&fds);
     FD_SET(fd, &fds);
     n = select(fd+1, 0, &fds, 0, &tv);
-  } while (n < 0 && errno == EINTR);
+  } while (n < 0 && errorNumber == EINTR);
 
   if (n < 0)
-    throw SystemException("select", errno);
+    throw SystemException("select", errorNumber);
 
   if (n == 0)
     return 0;
@@ -126,10 +126,10 @@ size_t FdOutStream::writeFd(const void* data, size_t length)
 #else
     n = ::send(fd, (const char*)data, length, MSG_DONTWAIT);
 #endif
-  } while (n < 0 && (errno == EINTR));
+  } while (n < 0 && (errorNumber == EINTR));
 
   if (n < 0)
-    throw SystemException("write", errno);
+    throw SystemException("write", errorNumber);
 
   gettimeofday(&lastWrite, NULL);