Porting changes for LynxOS 2.3.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@499 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/network/TcpSocket.cxx b/network/TcpSocket.cxx
index 1d0de9f..035c7f2 100644
--- a/network/TcpSocket.cxx
+++ b/network/TcpSocket.cxx
@@ -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 @@
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 @@
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 @@
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));
}
diff --git a/rdr/FdInStream.cxx b/rdr/FdInStream.cxx
index f64f68e..2b11973 100644
--- a/rdr/FdInStream.cxx
+++ b/rdr/FdInStream.cxx
@@ -48,6 +48,11 @@
#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>
diff --git a/rdr/FdOutStream.cxx b/rdr/FdOutStream.cxx
index e65133d..07ac04c 100644
--- a/rdr/FdOutStream.cxx
+++ b/rdr/FdOutStream.cxx
@@ -33,6 +33,11 @@
#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>
diff --git a/rfb/FileInfo.cxx b/rfb/FileInfo.cxx
index 5b151d9..21e18f2 100644
--- a/rfb/FileInfo.cxx
+++ b/rfb/FileInfo.cxx
@@ -20,6 +20,7 @@
*/
#include <rfb/FileInfo.h>
+#include <rfb/util.h>
#ifdef _WIN32
#define strcasecmp _stricmp
diff --git a/rfb/FileManager.cxx b/rfb/FileManager.cxx
index 44d7890..c0403a7 100644
--- a/rfb/FileManager.cxx
+++ b/rfb/FileManager.cxx
@@ -70,4 +70,4 @@
FileManager::isCreated()
{
if (m_pFile != NULL) return true; else return false;
-}
\ No newline at end of file
+}
diff --git a/rfb/PixelFormat.cxx b/rfb/PixelFormat.cxx
index d20be93..8809fb5 100644
--- a/rfb/PixelFormat.cxx
+++ b/rfb/PixelFormat.cxx
@@ -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
diff --git a/rfb/encodings.cxx b/rfb/encodings.cxx
index db6e1e2..d3b0ccb 100644
--- a/rfb/encodings.cxx
+++ b/rfb/encodings.cxx
@@ -20,6 +20,7 @@
#define strcasecmp _stricmp
#endif
#include <rfb/encodings.h>
+#include <rfb/util.h>
int rfb::encodingNum(const char* name)
{
diff --git a/rfb/util.cxx b/rfb/util.cxx
index 2dbc2df..94aa632 100644
--- a/rfb/util.cxx
+++ b/rfb/util.cxx
@@ -15,8 +15,114 @@
* 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) {
diff --git a/rfb/util.h b/rfb/util.h
index b654170..02183d7 100644
--- a/rfb/util.h
+++ b/rfb/util.h
@@ -72,8 +72,21 @@
// 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
diff --git a/tx/TXImage.cxx b/tx/TXImage.cxx
index caaeec4..7801578 100644
--- a/tx/TXImage.cxx
+++ b/tx/TXImage.cxx
@@ -39,8 +39,11 @@
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 @@
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 @@
*b = colourMap[index].b;
}
-
+#ifdef HAVE_MITSHM
static bool caughtError = false;
static int XShmAttachErrorHandler(Display *dpy, XErrorEvent *error)
@@ -187,10 +192,15 @@
};
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 @@
delete shminfo;
shminfo = 0;
}
+#endif
xim = XCreateImage(dpy, vis, depth, ZPixmap,
0, 0, width(), height(), BitmapPad(dpy), 0);
@@ -253,6 +264,7 @@
void TXImage::destroyXImage()
{
+#ifdef HAVE_MITSHM
if (shminfo) {
vlog.debug("Freeing shared memory XImage");
shmdt(shminfo->shmaddr);
@@ -261,6 +273,7 @@
shminfo = 0;
imageCleanup.images.remove(this);
}
+#endif
// XDestroyImage() will free(xim->data) if appropriate
if (xim) XDestroyImage(xim);
xim = 0;
diff --git a/tx/TXImage.h b/tx/TXImage.h
index a90a694..8185366 100644
--- a/tx/TXImage.h
+++ b/tx/TXImage.h
@@ -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 @@
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 @@
Display* dpy;
Visual* vis;
int depth;
+#ifdef HAVE_MITSHM
XShmSegmentInfo* shminfo;
+#endif
rfb::TransImageGetter* tig;
rfb::Colour colourMap[256];
rfb::PixelFormat nativePF;
diff --git a/tx/Timer.cxx b/tx/Timer.cxx
index 78cff1c..3acb631 100644
--- a/tx/Timer.cxx
+++ b/tx/Timer.cxx
@@ -19,6 +19,11 @@
// Timer.cxx
//
+// XXX Lynx/OS 2.3: get proto for gettimeofday()
+#ifdef Lynx
+#include <sys/proto.h>
+#endif
+
#include "Timer.h"
static Timer* timers;
diff --git a/x0vncserver/TimeMillis.cxx b/x0vncserver/TimeMillis.cxx
index b5054c9..059c043 100644
--- a/x0vncserver/TimeMillis.cxx
+++ b/x0vncserver/TimeMillis.cxx
@@ -22,6 +22,11 @@
#include <x0vncserver/TimeMillis.h>
+// XXX Lynx/OS 2.3: get proto for gettimeofday()
+#ifdef Lynx
+#include <sys/proto.h>
+#endif
+
TimeMillis::TimeMillis()
{
update();
diff --git a/x0vncserver/x0vncserver.cxx b/x0vncserver/x0vncserver.cxx
index a9b114f..ac65c0b 100644
--- a/x0vncserver/x0vncserver.cxx
+++ b/x0vncserver/x0vncserver.cxx
@@ -45,6 +45,11 @@
#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;