]> source.dussan.org Git - tigervnc.git/commitdiff
Porting changes for LynxOS 2.3.
authorConstantin Kaplinsky <const@tightvnc.com>
Thu, 2 Mar 2006 12:03:30 +0000 (12:03 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Thu, 2 Mar 2006 12:03:30 +0000 (12:03 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@499 3789f03b-4d11-0410-bbf8-ca57d06f2519

14 files changed:
network/TcpSocket.cxx
rdr/FdInStream.cxx
rdr/FdOutStream.cxx
rfb/FileInfo.cxx
rfb/FileManager.cxx
rfb/PixelFormat.cxx
rfb/encodings.cxx
rfb/util.cxx
rfb/util.h
tx/TXImage.cxx
tx/TXImage.h
tx/Timer.cxx
x0vncserver/TimeMillis.cxx
x0vncserver/x0vncserver.cxx

index 1d0de9f2f4bf980c5d023f0e212e340142f56a09..035c7f261f348b182ab427b0579ed0ae8dc03ca4 100644 (file)
@@ -48,6 +48,9 @@
 #ifndef INADDR_NONE
 #define INADDR_NONE ((unsigned long)-1)
 #endif
+#ifndef INADDR_LOOPBACK
+#define INADDR_LOOPBACK ((unsigned long)0x7F000001)
+#endif
 
 using namespace network;
 using namespace rdr;
@@ -118,12 +121,12 @@ TcpSocket::TcpSocket(const char *host, int port)
   struct sockaddr_in addr;
   memset(&addr, 0, sizeof(addr));
   addr.sin_family = AF_INET;
-  addr.sin_addr.s_addr = inet_addr(host);
+  addr.sin_addr.s_addr = inet_addr((char *)host);
   addr.sin_port = htons(port);
   if ((int)addr.sin_addr.s_addr == -1) {
     // Host was not an IP address - try resolving as DNS name
     struct hostent *hostinfo;
-    hostinfo = gethostbyname(host);
+    hostinfo = gethostbyname((char *)host);
     if (hostinfo && hostinfo->h_addr) {
       addr.sin_addr.s_addr = ((struct in_addr *)hostinfo->h_addr)->s_addr;
     } else {
@@ -285,7 +288,7 @@ TcpListener::TcpListener(int port, bool localhostOnly, int sock, bool close_)
 
   int one = 1;
   if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
-                (const char *)&one, sizeof(one)) < 0) {
+                (char *)&one, sizeof(one)) < 0) {
     int e = errorNumber;
     closesocket(fd);
     throw SocketException("unable to create listening socket", e);
@@ -396,7 +399,7 @@ TcpFilter::~TcpFilter() {
 
 static bool
 patternMatchIP(const TcpFilter::Pattern& pattern, const char* value) {
-  unsigned long address = inet_addr(value);
+  unsigned long address = inet_addr((char *)value);
   if (address == INADDR_NONE) return false;
   return ((pattern.address & pattern.mask) == (address & pattern.mask));
 }
index f64f68e172593d0746723ab7a71b139109d9e7a1..2b11973555ad917917399f156e7d07224b652a41 100644 (file)
 #include <sys/select.h>
 #endif
 
+// XXX Lynx/OS 2.3: protos for gettimeofday(), select(), bzero()
+#ifdef Lynx
+#include <sys/proto.h>
+#endif
+
 #include <rdr/FdInStream.h>
 #include <rdr/Exception.h>
 
index e65133dac83c327b42c95fbfa37bfe51f6fd19a5..07ac04c206ed01dd1ceb429a8c7875ead59b7a9d 100644 (file)
 #include <sys/time.h>
 #endif
 
+// XXX Lynx/OS 2.3: protos for select(), bzero()
+#ifdef Lynx
+#include <sys/proto.h>
+#endif
+
 #include <rdr/FdOutStream.h>
 #include <rdr/Exception.h>
 
index 5b151d9680aacd1e2d58f6c0d76f757989eb30b0..21e18f24037e4cf404af2820064f7dc2c0f7912c 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 #include <rfb/FileInfo.h>
+#include <rfb/util.h>
 
 #ifdef _WIN32
 #define strcasecmp _stricmp
index 44d789069415c723130aa453b96fde0aaba05149..c0403a7826709e5ca4172ad35de268719f604c80 100644 (file)
@@ -70,4 +70,4 @@ bool
 FileManager::isCreated()
 {
   if (m_pFile != NULL) return true; else return false;
-}
\ No newline at end of file
+}
index d20be93c96ca0c1d0fc7e66da8493e8a005fc05f..8809fb5df06fde2ccb262ecb9365baecfa6eb2a7 100644 (file)
@@ -20,6 +20,7 @@
 #include <rdr/InStream.h>
 #include <rdr/OutStream.h>
 #include <rfb/PixelFormat.h>
+#include <rfb/util.h>
 
 #ifdef _WIN32
 #define strcasecmp _stricmp
index db6e1e2589259e356fa83dc3b924bb63e6320238..d3b0ccb9a57e39a6bcab3bdb8b7d036129984fa8 100644 (file)
@@ -20,6 +20,7 @@
 #define strcasecmp _stricmp
 #endif
 #include <rfb/encodings.h>
+#include <rfb/util.h>
 
 int rfb::encodingNum(const char* name)
 {
index 2dbc2df437cf250d574871577baf953368f4ec21..94aa63270714f16db1125a1f6bf7ab832d880db5 100644 (file)
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  * USA.
  */
+
+/*
+ * The following applies to stcasecmp and strncasecmp implementations:
+ *
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of California at Berkeley. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific written prior permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
 #include <rfb/util.h>
 
+// Provide strcasecmp() and/or strncasecmp() if absent on this system.
+
+#ifndef WIN32
+#if !defined(HAVE_STRCASECMP) || !defined(HAVE_STRNCASECMP)
+
+extern "C" {
+
+/*
+ * This array is designed for mapping upper and lower case letter
+ * together for a case independent comparison.  The mappings are
+ * based upon ascii character sequences.
+ */
+static unsigned char s_charmap[] = {
+       '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
+       '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
+       '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
+       '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
+       '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
+       '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
+       '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
+       '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
+       '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+       '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+       '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+       '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
+       '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+       '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+       '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+       '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
+       '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
+       '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
+       '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
+       '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
+       '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
+       '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
+       '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
+       '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
+       '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+       '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+       '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
+       '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
+       '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+       '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+       '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
+       '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
+};
+
+#ifndef HAVE_STRCASECMP
+int
+strcasecmp(const char *s1, const char *s2)
+{
+    unsigned char u1, u2;
+
+    for (;;) {
+       u1 = (unsigned char) *s1++;
+       u2 = (unsigned char) *s2++;
+       if (s_charmap[u1] != s_charmap[u2]) {
+           return s_charmap[u1] - s_charmap[u2];
+       }
+       if (u1 == '\0') {
+           return 0;
+       }
+    }
+}
+#endif // !defined(HAVE_STRCASECMP)
+
+#ifndef HAVE_STRNCASECMP
+int
+strncasecmp(const char *s1, const char *s2, size_t n)
+{
+    unsigned char u1, u2;
+
+    for (; n != 0; --n) {
+       u1 = (unsigned char) *s1++;
+       u2 = (unsigned char) *s2++;
+       if (s_charmap[u1] != s_charmap[u2]) {
+           return s_charmap[u1] - s_charmap[u2];
+       }
+       if (u1 == '\0') {
+           return 0;
+       }
+    }
+    return 0;
+}
+#endif // !defined(HAVE_STRNCASECMP)
+
+} // extern "C"
+
+#endif // !defined(HAVE_STRCASECMP) || !defined(HAVE_STRNCASECMP)
+#endif // defined(WIN32)
+
 namespace rfb {
 
   char* strDup(const char* s) {
index b65417004e4efc61cfc60c6d37ec820bae519e23..02183d742ed0ebbae0b2eef2be2d27742af954b5 100644 (file)
@@ -72,8 +72,21 @@ namespace rfb {
   // Copies src to dest, up to specified length-1, and guarantees termination
   void strCopy(char* dest, const char* src, int destlen);
 }
+
+// Declare strcasecmp() and/or strncasecmp() if absent on this system.
+
+#if !defined(WIN32) && !defined(HAVE_STRCASECMP)
+extern "C" {
+  int strcasecmp(const char *s1, const char *s2);
+}
+#endif
+#if !defined(WIN32) && !defined(HAVE_STRNCASECMP)
+extern "C" {
+  int strncasecmp(const char *s1, const char *s2, size_t n);
+}
 #endif
 
+#endif // __RFB_UTIL_H__
 
 // -=- PLATFORM SPECIFIC UTILITY FUNCTIONS/IMPLEMENTATIONS
 #ifdef WIN32
index caaeec43c3a1a8f090f6e42d3133bbf5c5d165ae..7801578ccf6efeaba8c20376554af3849b28424d 100644 (file)
@@ -39,8 +39,11 @@ using namespace rfb;
 static rfb::LogWriter vlog("TXImage");
 
 TXImage::TXImage(Display* d, int width, int height, Visual* vis_, int depth_)
-  : xim(0), dpy(d), vis(vis_), depth(depth_), shminfo(0), tig(0), cube(0)
+  : xim(0), dpy(d), vis(vis_), depth(depth_), tig(0), cube(0)
 {
+#ifdef HAVE_MITSHM
+  shminfo = 0;
+#endif
   width_ = width;
   height_ = height;
   for (int i = 0; i < 256; i++)
@@ -140,11 +143,13 @@ void TXImage::put(Window win, GC gc, const rfb::Rect& r)
     tig->getImage(ximDataStart, r,
                   xim->bytes_per_line / (xim->bits_per_pixel / 8));
   }
+#ifdef HAVE_MITSHM
   if (usingShm()) {
     XShmPutImage(dpy, win, gc, xim, x, y, x, y, w, h, False);
-  } else {
-    XPutImage(dpy, win, gc, xim, x, y, x, y, w, h);
+    return;
   }
+#endif
+  XPutImage(dpy, win, gc, xim, x, y, x, y, w, h);
 }
 
 void TXImage::setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs)
@@ -168,7 +173,7 @@ void TXImage::lookup(int index, int* r, int* g, int* b)
   *b = colourMap[index].b;
 }
 
-
+#ifdef HAVE_MITSHM
 static bool caughtError = false;
 
 static int XShmAttachErrorHandler(Display *dpy, XErrorEvent *error)
@@ -187,10 +192,15 @@ public:
 };
 
 static TXImageCleanup imageCleanup;
+#endif
 
 void TXImage::createXImage()
 {
-  if (XShmQueryExtension(dpy)) {
+#ifdef HAVE_MITSHM
+  int major, minor;
+  Bool pixmaps;
+
+  if (XShmQueryVersion(dpy, &major, &minor, &pixmaps)) {
     shminfo = new XShmSegmentInfo;
 
     xim = XShmCreateImage(dpy, vis, depth, ZPixmap,
@@ -240,6 +250,7 @@ void TXImage::createXImage()
     delete shminfo;
     shminfo = 0;
   }
+#endif
 
   xim = XCreateImage(dpy, vis, depth, ZPixmap,
                      0, 0, width(), height(), BitmapPad(dpy), 0);
@@ -253,6 +264,7 @@ void TXImage::createXImage()
 
 void TXImage::destroyXImage()
 {
+#ifdef HAVE_MITSHM
   if (shminfo) {
     vlog.debug("Freeing shared memory XImage");
     shmdt(shminfo->shmaddr);
@@ -261,6 +273,7 @@ void TXImage::destroyXImage()
     shminfo = 0;
     imageCleanup.images.remove(this);
   }
+#endif
   // XDestroyImage() will free(xim->data) if appropriate
   if (xim) XDestroyImage(xim);
   xim = 0;
index a90a6945a3055c49069e930a24db5a1f0b108a2f..8185366ae81b602627eec791911f4e08cd2c54eb 100644 (file)
@@ -37,7 +37,9 @@
 #include <rfb/PixelBuffer.h>
 #include <rfb/ColourMap.h>
 #include <rfb/ColourCube.h>
+#ifdef HAVE_MITSHM
 #include <X11/extensions/XShm.h>
+#endif
 
 namespace rfb { class TransImageGetter; }
 
@@ -59,7 +61,11 @@ public:
   void setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs);
   void updateColourMap();
 
+#ifdef HAVE_MITSHM
   bool usingShm() { return shminfo; }
+#else
+  bool usingShm() { return 0; }
+#endif
 
   // PixelBuffer methods
   // width(), height(), getPF() etc are inherited from PixelBuffer
@@ -79,7 +85,9 @@ private:
   Display* dpy;
   Visual* vis;
   int depth;
+#ifdef HAVE_MITSHM
   XShmSegmentInfo* shminfo;
+#endif
   rfb::TransImageGetter* tig;
   rfb::Colour colourMap[256];
   rfb::PixelFormat nativePF;
index 78cff1c2fa9e40af1f075c419cf7590d797b02c6..3acb631b671562e9716b8391e7715a3ea5ee1d69 100644 (file)
 // Timer.cxx
 //
 
+// XXX Lynx/OS 2.3: get proto for gettimeofday()
+#ifdef Lynx
+#include <sys/proto.h>
+#endif
+
 #include "Timer.h"
 
 static Timer* timers;
index b5054c91724310887311ca0c9fcd3a433d3857df..059c043b35a377d3faf4b1e3df5b2ac3442d10a6 100644 (file)
 
 #include <x0vncserver/TimeMillis.h>
 
+// XXX Lynx/OS 2.3: get proto for gettimeofday()
+#ifdef Lynx
+#include <sys/proto.h>
+#endif
+
 TimeMillis::TimeMillis()
 {
   update();
index a9b114f268147160e7d0dc1753c72649ac328a15..ac65c0bef5a9ad3f542b9ce610640111d8a59a97 100644 (file)
 #include <x0vncserver/PollingManager.h>
 #include <x0vncserver/PollingScheduler.h>
 
+// XXX Lynx/OS 2.3: protos for select(), bzero()
+#ifdef Lynx
+#include <sys/proto.h>
+#endif
+
 using namespace rfb;
 using namespace network;