]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Some smart tricks to eliminate win32 ifdefs that are creeping into portable files
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 27 Jul 2007 16:50:53 +0000 (16:50 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 27 Jul 2007 16:50:53 +0000 (16:50 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7589 e03df62e-2008-0410-955e-edbf42e46eb7

include/socketengine.h
src/inspsocket.cpp
src/socketengine.cpp
src/socketengine_iocp.cpp
src/users.cpp

index ce701beff4a14ac3f510737ecc42bc19c2467987..1124966568387bde492e1a5eb3cf7b5070283dc9 100644 (file)
@@ -290,6 +290,12 @@ public:
         * @return The socket engine name
         */
        virtual std::string GetName();
+
+       /** Returns true if the file descriptors in the
+        * given event handler are within sensible ranges
+        * which can be handled by the socket engine.
+        */
+       bool BoundsCheckFd(EventHandler* eh);
 };
 
 #endif
index edb58a05c7e74a19713b509212f465856036f245..3eddb6f6235c87b95f424734705bcb2852e57cfc 100644 (file)
@@ -378,6 +378,8 @@ std::string InspSocket::GetIP()
 
 char* InspSocket::Read()
 {
+       if (Instance->SE->BoundsCheckFd(this))
+               return NULL;
 #ifdef WINDOWS
        if ((fd < 0) || (m_internalFd > MAX_DESCRIPTORS))
 #else
index 48f7e11bf611d7e2f05df7af0d2e2dd7260c59b7..28ba8c25215c3d2921d909f219dc8ae026d617ab 100644 (file)
@@ -91,3 +91,12 @@ std::string SocketEngine::GetName()
        return "misconfigured";
 }
 
+bool SocketEngine::BoundsCheckFd(EventHandler* eh)
+{       
+       if (!eh)
+               return false;
+       if ((eh->GetFd() < 0) || (eh->GetFd() > MAX_DESCRIPTORS))
+               return false;
+       return true;
+}
+
index c61b440623e5fcbd3deb072eb1e337d131a35179..dad8b8a0aff722a551e321552c8a48e56e74f714 100644 (file)
@@ -420,6 +420,17 @@ bool IOCPEngine::HasFd(int fd)
        return (GetRef(fd) != 0);
 }
 
+bool IOCPEngine::BoundsCheckFd(EventHandler* eh)
+{
+       if (!eh)
+               return false;
+       if ((eh->m_internalFd < 0) || (eh->m_internalFd > MAX_DESCRIPTORS))
+               return false;
+       if ((eh->GetFd() < 0) || (eh->GetFd() > MAX_DESCRIPTORS))
+               return false;
+       return true;
+}
+
 EventHandler * IOCPEngine::GetIntRef(int fd)
 {
        if(fd < 0 || fd > MAX_DESCRIPTORS)
index 12742bbc9e6ad94a6854079c4593338202fab2c4..efaffd2dd40440931862e30cc9dc4c04ed703670 100644 (file)
@@ -1354,11 +1354,7 @@ const char* userrec::GetIPString(char* buf)
  */
 void userrec::Write(std::string text)
 {
-#ifdef WINDOWS
-       if ((this->fd < 0) || (this->m_internalFd > MAX_DESCRIPTORS))
-#else
-       if ((this->fd < 0) || (this->fd > MAX_DESCRIPTORS))
-#endif
+       if (ServerInstance->SE->BoundsCheckFd(this))
                return;
 
        try