Hi Mihai,

On So 26 Feb 2012 09:18:53 CET Mihai Moldovan wrote:

The Mac OS X 10.5 SDK requires the second argument of FD_ISSET to be
writeable, although it does only access the data. Given that we have a
const pointer for a const struct, copy and pass that.

Note that this is merely a workaround for OS X 10.5, as 10.6 and later
define the second argument of FD_ISSET as const struct const *foo, too.

It it safe, as data is accessed read-only by FD_ISSET, even on 10.5.

Signed-off-by: Mihai Moldovan <[email protected]>
---
 nxcomp/Agent.h |   28 ++++++++++++++++++++--------
 1 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/nxcomp/Agent.h b/nxcomp/Agent.h
index fac5acd..ded344d 100644
--- a/nxcomp/Agent.h
+++ b/nxcomp/Agent.h
@@ -149,30 +149,38 @@ class Agent

   int remoteCanRead(const fd_set * const readSet)
   {
+    // OS X 10.5 requires the second argument to be non-const, so copy
readSet.
+    // It's safe though, as FD_ISSET does not operate on it.
+    fd_set readWorkSet = *readSet;
+
     #if defined(TEST) || defined(INFO)
     *logofs << "Agent: remoteCanRead() is " <<
-               (FD_ISSET(remoteFd_, readSet) && transport_ ->
dequeuable() != 0)
-            << " with FD_ISSET() " << (int) FD_ISSET(remoteFd_, readSet)
+               (FD_ISSET(remoteFd_, &readWorkSet) && transport_ ->
dequeuable() != 0)
+            << " with FD_ISSET() " << (int) FD_ISSET(remoteFd_,
&readWorkSet)
             << " and dequeuable " << transport_ -> dequeuable()
             << ".n" << logofs_flush;
     #endif

-    return (FD_ISSET(remoteFd_, readSet) &&
+    return (FD_ISSET(remoteFd_, &readWorkSet) &&
                 transport_ -> dequeuable() != 0);
   }

   int remoteCanWrite(const fd_set * const writeSet)
   {
+    // OS X 10.5 requires the second argument to be non-const, so copy
writeSet.
+    // It's safe though, as FD_ISSET does not operate on it.
+    fd_set writeWorkSet = *writeSet;
+
     #if defined(TEST) || defined(INFO)
     *logofs << "Agent: remoteCanWrite() is " <<
-               (FD_ISSET(remoteFd_, writeSet) && transport_ ->
+               (FD_ISSET(remoteFd_, &writeWorkSet) && transport_ ->
                queuable() != 0 && canRead_ == 1) << " with FD_ISSET() "
-            << (int) FD_ISSET(remoteFd_, writeSet) << " queueable "
+            << (int) FD_ISSET(remoteFd_, &writeWorkSet) << " queueable "
             << transport_ -> queuable() << " channel can read "
             << canRead_ << ".n" << logofs_flush;
     #endif

-    return (FD_ISSET(remoteFd_, writeSet) &&
+    return (FD_ISSET(remoteFd_, &writeWorkSet) &&
                 transport_ -> queuable() != 0 &&
                     canRead_ == 1);
   }
@@ -203,13 +211,17 @@ class Agent

   int proxyCanRead(const fd_set * const readSet)
   {
+    // OS X 10.5 requires the second argument to be non-const, so copy
readSet.
+    // It's safe though, as FD_ISSET does not operate on it.
+    fd_set readWorkSet = *readSet;
+
     #if defined(TEST) || defined(INFO)
     *logofs << "Agent: proxyCanRead() is "
-            << ((int) FD_ISSET(proxy -> getFd(), readSet)
+            << ((int) FD_ISSET(proxy -> getFd(), &readWorkSet)
             << ".n" << logofs_flush;
     #endif

-    return (FD_ISSET(proxy -> getFd(), readSet));
+    return (FD_ISSET(proxy -> getFd(), &readWorkSet));
   }

   int enqueueData(const char *data, const int size) const
--
1.7.9

patch applied...
http://code.x2go.org/gitweb?p=nx-libs.git;a=commitdiff;h=655173ff215dde1a167193eafe29bfc955a19561

I had to tweak the patch by hand so it could get applied fully. Not sure what went wrong, so I just place a reminder here to make sure patches apply against latest Git code well enough.

Mike

--

DAS-NETZWERKTEAM
mike gabriel, dorfstr. 27, 24245 barmissen
fon: +49 (4302) 281418, fax: +49 (4302) 281419

GnuPG Key ID 0xB588399B
mail: [email protected], http://das-netzwerkteam.de

freeBusy:
https://mail.das-netzwerkteam.de/freebusy/m.gabriel%40das-netzwerkteam.de.xfb

Attachment: pgpHtzYPJRbM3.pgp
Description: Digitale PGP-Unterschrift

_______________________________________________
X2Go-Dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/x2go-dev

Reply via email to