Skip to content
Commits on Source (5)
......@@ -21,10 +21,10 @@ include(CheckCSourceRuns)
include(CMakeMacroLibtoolFile)
project(tigervnc)
set(VERSION 1.10.0)
set(VERSION 1.10.1)
# The RC version must always be four comma-separated numbers
set(RCVERSION 1,10,0,0)
set(RCVERSION 1,10,1,0)
# Installation paths
set(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin")
......
......@@ -41,7 +41,7 @@ if(BUILD_STATIC)
set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} -ltasn1")
endif()
if(NETTLE_LIBRARY)
set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} -lnettle -lhogweed -lgmp")
set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} -lhogweed -lnettle -lgmp")
endif()
if(GCRYPT_LIBRARY)
set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} -lgcrypt -lgpg-error")
......
......@@ -56,7 +56,7 @@ using namespace rdr;
enum { DEFAULT_BUF_SIZE = 8192,
MIN_BULK_SIZE = 1024 };
FdInStream::FdInStream(int fd_, int timeoutms_, int bufSize_,
FdInStream::FdInStream(int fd_, int timeoutms_, size_t bufSize_,
bool closeWhenDone_)
: fd(fd_), closeWhenDone(closeWhenDone_),
timeoutms(timeoutms_), blockCallback(0),
......@@ -67,7 +67,7 @@ FdInStream::FdInStream(int fd_, int timeoutms_, int bufSize_,
}
FdInStream::FdInStream(int fd_, FdInStreamBlockCallback* blockCallback_,
int bufSize_)
size_t bufSize_)
: fd(fd_), timeoutms(0), blockCallback(blockCallback_),
timing(false), timeWaitedIn100us(5), timedKbits(0),
bufSize(bufSize_ ? bufSize_ : DEFAULT_BUF_SIZE), offset(0)
......@@ -92,12 +92,12 @@ void FdInStream::setBlockCallback(FdInStreamBlockCallback* blockCallback_)
timeoutms = 0;
}
int FdInStream::pos()
size_t FdInStream::pos()
{
return offset + ptr - start;
}
void FdInStream::readBytes(void* data, int length)
void FdInStream::readBytes(void* data, size_t length)
{
if (length < MIN_BULK_SIZE) {
InStream::readBytes(data, length);
......@@ -106,7 +106,7 @@ void FdInStream::readBytes(void* data, int length)
U8* dataPtr = (U8*)data;
int n = end - ptr;
size_t n = end - ptr;
if (n > length) n = length;
memcpy(dataPtr, ptr, n);
......@@ -123,7 +123,7 @@ void FdInStream::readBytes(void* data, int length)
}
int FdInStream::overrun(int itemSize, int nItems, bool wait)
size_t FdInStream::overrun(size_t itemSize, size_t nItems, bool wait)
{
if (itemSize > bufSize)
throw Exception("FdInStream overrun: max itemSize exceeded");
......@@ -135,8 +135,8 @@ int FdInStream::overrun(int itemSize, int nItems, bool wait)
end -= ptr - start;
ptr = start;
int bytes_to_read;
while (end < start + itemSize) {
size_t bytes_to_read;
while ((size_t)(end - start) < itemSize) {
bytes_to_read = start + bufSize - end;
if (!timing) {
// When not timing, we must be careful not to read too much
......@@ -147,13 +147,15 @@ int FdInStream::overrun(int itemSize, int nItems, bool wait)
// bytes is ineffecient.
bytes_to_read = vncmin(bytes_to_read, vncmax(itemSize*nItems, 8));
}
int n = readWithTimeoutOrCallback((U8*)end, bytes_to_read, wait);
size_t n = readWithTimeoutOrCallback((U8*)end, bytes_to_read, wait);
if (n == 0) return 0;
end += n;
}
if (itemSize * nItems > end - ptr)
nItems = (end - ptr) / itemSize;
size_t nAvail;
nAvail = (end - ptr) / itemSize;
if (nAvail < nItems)
return nAvail;
return nItems;
}
......@@ -171,7 +173,7 @@ int FdInStream::overrun(int itemSize, int nItems, bool wait)
// returning EINTR.
//
int FdInStream::readWithTimeoutOrCallback(void* buf, int len, bool wait)
size_t FdInStream::readWithTimeoutOrCallback(void* buf, size_t len, bool wait)
{
struct timeval before, after;
if (timing)
......
......@@ -37,16 +37,17 @@ namespace rdr {
public:
FdInStream(int fd, int timeoutms=-1, int bufSize=0,
FdInStream(int fd, int timeoutms=-1, size_t bufSize=0,
bool closeWhenDone_=false);
FdInStream(int fd, FdInStreamBlockCallback* blockCallback, int bufSize=0);
FdInStream(int fd, FdInStreamBlockCallback* blockCallback,
size_t bufSize=0);
virtual ~FdInStream();
void setTimeout(int timeoutms);
void setBlockCallback(FdInStreamBlockCallback* blockCallback);
int getFd() { return fd; }
int pos();
void readBytes(void* data, int length);
size_t pos();
void readBytes(void* data, size_t length);
void startTiming();
void stopTiming();
......@@ -54,10 +55,10 @@ namespace rdr {
unsigned int timeWaited() { return timeWaitedIn100us; }
protected:
int overrun(int itemSize, int nItems, bool wait);
size_t overrun(size_t itemSize, size_t nItems, bool wait);
private:
int readWithTimeoutOrCallback(void* buf, int len, bool wait=true);
size_t readWithTimeoutOrCallback(void* buf, size_t len, bool wait=true);
int fd;
bool closeWhenDone;
......@@ -68,8 +69,8 @@ namespace rdr {
unsigned int timeWaitedIn100us;
unsigned int timedKbits;
int bufSize;
int offset;
size_t bufSize;
size_t offset;
U8* start;
};
......
......@@ -51,7 +51,7 @@ using namespace rdr;
enum { DEFAULT_BUF_SIZE = 16384 };
FdOutStream::FdOutStream(int fd_, bool blocking_, int timeoutms_, int bufSize_)
FdOutStream::FdOutStream(int fd_, bool blocking_, int timeoutms_, size_t bufSize_)
: fd(fd_), blocking(blocking_), timeoutms(timeoutms_),
bufSize(bufSize_ ? bufSize_ : DEFAULT_BUF_SIZE), offset(0)
{
......@@ -79,7 +79,7 @@ void FdOutStream::setBlocking(bool blocking_) {
blocking = blocking_;
}
int FdOutStream::length()
size_t FdOutStream::length()
{
return offset + ptr - sentUpTo;
}
......@@ -97,9 +97,9 @@ unsigned FdOutStream::getIdleTime()
void FdOutStream::flush()
{
while (sentUpTo < ptr) {
int n = writeWithTimeout((const void*) sentUpTo,
ptr - sentUpTo,
blocking? timeoutms : 0);
size_t n = writeWithTimeout((const void*) sentUpTo,
ptr - sentUpTo,
blocking? timeoutms : 0);
// Timeout?
if (n == 0) {
......@@ -120,7 +120,7 @@ void FdOutStream::flush()
}
int FdOutStream::overrun(int itemSize, int nItems)
size_t FdOutStream::overrun(size_t itemSize, size_t nItems)
{
if (itemSize > bufSize)
throw Exception("FdOutStream overrun: max itemSize exceeded");
......@@ -129,10 +129,10 @@ int FdOutStream::overrun(int itemSize, int nItems)
flush();
// Still not enough space?
if (itemSize > end - ptr) {
if (itemSize > (size_t)(end - ptr)) {
// Can we shuffle things around?
// (don't do this if it gains us less than 25%)
if ((sentUpTo - start > bufSize / 4) &&
if (((size_t)(sentUpTo - start) > bufSize / 4) &&
(itemSize < bufSize - (ptr - sentUpTo))) {
memmove(start, sentUpTo, ptr - sentUpTo);
ptr = start + (ptr - sentUpTo);
......@@ -149,9 +149,10 @@ int FdOutStream::overrun(int itemSize, int nItems)
}
}
// Can we fit all the items asked for?
if (itemSize * nItems > end - ptr)
nItems = (end - ptr) / itemSize;
size_t nAvail;
nAvail = (end - ptr) / itemSize;
if (nAvail < nItems)
return nAvail;
return nItems;
}
......@@ -166,7 +167,7 @@ int FdOutStream::overrun(int itemSize, int nItems)
// select() and send() returning EINTR.
//
int FdOutStream::writeWithTimeout(const void* data, int length, int timeoutms)
size_t FdOutStream::writeWithTimeout(const void* data, size_t length, int timeoutms)
{
int n;
......
......@@ -34,7 +34,7 @@ namespace rdr {
public:
FdOutStream(int fd, bool blocking=true, int timeoutms=-1, int bufSize=0);
FdOutStream(int fd, bool blocking=true, int timeoutms=-1, size_t bufSize=0);
virtual ~FdOutStream();
void setTimeout(int timeoutms);
......@@ -42,20 +42,20 @@ namespace rdr {
int getFd() { return fd; }
void flush();
int length();
size_t length();
int bufferUsage();
unsigned getIdleTime();
private:
int overrun(int itemSize, int nItems);
int writeWithTimeout(const void* data, int length, int timeoutms);
size_t overrun(size_t itemSize, size_t nItems);
size_t writeWithTimeout(const void* data, size_t length, int timeoutms);
int fd;
bool blocking;
int timeoutms;
int bufSize;
int offset;
size_t bufSize;
size_t offset;
U8* start;
U8* sentUpTo;
struct timeval lastWrite;
......
......@@ -48,7 +48,7 @@ void FileInStream::reset(void) {
ptr = end = b;
}
int FileInStream::pos()
size_t FileInStream::pos()
{
if (!file)
throw Exception("File is not open");
......@@ -56,9 +56,9 @@ int FileInStream::pos()
return ftell(file) + ptr - b;
}
int FileInStream::overrun(int itemSize, int nItems, bool wait)
size_t FileInStream::overrun(size_t itemSize, size_t nItems, bool wait)
{
if (itemSize > (int)sizeof(b))
if (itemSize > sizeof(b))
throw Exception("FileInStream overrun: max itemSize exceeded");
if (end - ptr != 0)
......@@ -68,7 +68,7 @@ int FileInStream::overrun(int itemSize, int nItems, bool wait)
ptr = b;
while (end < b + itemSize) {
while ((size_t)(end - b) < itemSize) {
size_t n = fread((U8 *)end, b + sizeof(b) - end, 1, file);
if (n == 0) {
if (ferror(file))
......@@ -80,8 +80,10 @@ int FileInStream::overrun(int itemSize, int nItems, bool wait)
end += b + sizeof(b) - end;
}
if (itemSize * nItems > end - ptr)
nItems = (end - ptr) / itemSize;
size_t nAvail;
nAvail = (end - ptr) / itemSize;
if (nAvail < nItems)
return nAvail;
return nItems;
}
......@@ -35,10 +35,10 @@ namespace rdr {
void reset(void);
int pos();
size_t pos();
protected:
int overrun(int itemSize, int nItems, bool wait = true);
size_t overrun(size_t itemSize, size_t nItems, bool wait = true);
private:
U8 b[131072];
......
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*/
//
// A FixedMemOutStream writes to a buffer of a fixed length.
//
#ifndef __RDR_FIXEDMEMOUTSTREAM_H__
#define __RDR_FIXEDMEMOUTSTREAM_H__
#include <rdr/OutStream.h>
#include <rdr/Exception.h>
namespace rdr {
class FixedMemOutStream : public OutStream {
public:
FixedMemOutStream(void* buf, int len) {
ptr = start = (U8*)buf;
end = start + len;
}
int length() { return ptr - start; }
void reposition(int pos) { ptr = start + pos; }
const void* data() { return (const void*)start; }
private:
int overrun(int itemSize, int nItems) { throw EndOfStream(); }
U8* start;
};
}
#endif
......@@ -28,7 +28,7 @@ const int DEFAULT_BUF_LEN = 16384;
static inline int min(int a, int b) {return a<b ? a : b;}
HexInStream::HexInStream(InStream& is, int bufSize_)
HexInStream::HexInStream(InStream& is, size_t bufSize_)
: bufSize(bufSize_ ? bufSize_ : DEFAULT_BUF_LEN), offset(0), in_stream(is)
{
ptr = end = start = new U8[bufSize];
......@@ -50,8 +50,8 @@ bool HexInStream::readHexAndShift(char c, int* v) {
return true;
}
bool HexInStream::hexStrToBin(const char* s, char** data, int* length) {
int l=strlen(s);
bool HexInStream::hexStrToBin(const char* s, char** data, size_t* length) {
size_t l=strlen(s);
if ((l % 2) == 0) {
delete [] *data;
*data = 0; *length = 0;
......@@ -59,7 +59,7 @@ bool HexInStream::hexStrToBin(const char* s, char** data, int* length) {
return true;
*data = new char[l/2];
*length = l/2;
for(int i=0;i<l;i+=2) {
for(size_t i=0;i<l;i+=2) {
int byte = 0;
if (!readHexAndShift(s[i], &byte) ||
!readHexAndShift(s[i+1], &byte))
......@@ -76,11 +76,11 @@ decodeError:
}
int HexInStream::pos() {
size_t HexInStream::pos() {
return offset + ptr - start;
}
int HexInStream::overrun(int itemSize, int nItems, bool wait) {
size_t HexInStream::overrun(size_t itemSize, size_t nItems, bool wait) {
if (itemSize > bufSize)
throw Exception("HexInStream overrun: max itemSize exceeded");
......@@ -91,15 +91,15 @@ int HexInStream::overrun(int itemSize, int nItems, bool wait) {
offset += ptr - start;
ptr = start;
while (end < ptr + itemSize) {
int n = in_stream.check(2, 1, wait);
while ((size_t)(end - ptr) < itemSize) {
size_t n = in_stream.check(2, 1, wait);
if (n == 0) return 0;
const U8* iptr = in_stream.getptr();
const U8* eptr = in_stream.getend();
int length = min((eptr - iptr)/2, start + bufSize - end);
size_t length = min((eptr - iptr)/2, start + bufSize - end);
U8* optr = (U8*) end;
for (int i=0; i<length; i++) {
for (size_t i=0; i<length; i++) {
int v = 0;
readHexAndShift(iptr[i*2], &v);
readHexAndShift(iptr[i*2+1], &v);
......@@ -110,8 +110,10 @@ int HexInStream::overrun(int itemSize, int nItems, bool wait) {
end += length;
}
if (itemSize * nItems > end - ptr)
nItems = (end - ptr) / itemSize;
size_t nAvail;
nAvail = (end - ptr) / itemSize;
if (nAvail < nItems)
return nAvail;
return nItems;
}
......@@ -26,21 +26,21 @@ namespace rdr {
class HexInStream : public InStream {
public:
HexInStream(InStream& is, int bufSize=0);
HexInStream(InStream& is, size_t bufSize=0);
virtual ~HexInStream();
int pos();
size_t pos();
static bool readHexAndShift(char c, int* v);
static bool hexStrToBin(const char* s, char** data, int* length);
static bool hexStrToBin(const char* s, char** data, size_t* length);
protected:
int overrun(int itemSize, int nItems, bool wait);
size_t overrun(size_t itemSize, size_t nItems, bool wait);
private:
int bufSize;
size_t bufSize;
U8* start;
int offset;
size_t offset;
InStream& in_stream;
};
......
......@@ -23,9 +23,9 @@ using namespace rdr;
const int DEFAULT_BUF_LEN = 16384;
static inline int min(int a, int b) {return a<b ? a : b;}
static inline size_t min(size_t a, size_t b) {return a<b ? a : b;}
HexOutStream::HexOutStream(OutStream& os, int buflen)
HexOutStream::HexOutStream(OutStream& os, size_t buflen)
: out_stream(os), offset(0), bufSize(buflen ? buflen : DEFAULT_BUF_LEN)
{
if (bufSize % 2)
......@@ -48,9 +48,9 @@ char HexOutStream::intToHex(int i) {
throw rdr::Exception("intToHex failed");
}
char* HexOutStream::binToHexStr(const char* data, int length) {
char* HexOutStream::binToHexStr(const char* data, size_t length) {
char* buffer = new char[length*2+1];
for (int i=0; i<length; i++) {
for (size_t i=0; i<length; i++) {
buffer[i*2] = intToHex((data[i] >> 4) & 15);
buffer[i*2+1] = intToHex((data[i] & 15));
if (!buffer[i*2] || !buffer[i*2+1]) {
......@@ -70,9 +70,9 @@ HexOutStream::writeBuffer() {
out_stream.check(2);
U8* optr = out_stream.getptr();
U8* oend = out_stream.getend();
int length = min(ptr-pos, (oend-optr)/2);
size_t length = min(ptr-pos, (oend-optr)/2);
for (int i=0; i<length; i++) {
for (size_t i=0; i<length; i++) {
optr[i*2] = intToHex((pos[i] >> 4) & 0xf);
optr[i*2+1] = intToHex(pos[i] & 0xf);
}
......@@ -84,7 +84,7 @@ HexOutStream::writeBuffer() {
ptr = start;
}
int HexOutStream::length()
size_t HexOutStream::length()
{
return offset + ptr - start;
}
......@@ -95,15 +95,17 @@ HexOutStream::flush() {
out_stream.flush();
}
int
HexOutStream::overrun(int itemSize, int nItems) {
size_t
HexOutStream::overrun(size_t itemSize, size_t nItems) {
if (itemSize > bufSize)
throw Exception("HexOutStream overrun: max itemSize exceeded");
writeBuffer();
if (itemSize * nItems > end - ptr)
nItems = (end - ptr) / itemSize;
size_t nAvail;
nAvail = (end - ptr) / itemSize;
if (nAvail < nItems)
return nAvail;
return nItems;
}
......
......@@ -26,24 +26,24 @@ namespace rdr {
class HexOutStream : public OutStream {
public:
HexOutStream(OutStream& os, int buflen=0);
HexOutStream(OutStream& os, size_t buflen=0);
virtual ~HexOutStream();
void flush();
int length();
size_t length();
static char intToHex(int i);
static char* binToHexStr(const char* data, int length);
static char* binToHexStr(const char* data, size_t length);
private:
void writeBuffer();
int overrun(int itemSize, int nItems);
size_t overrun(size_t itemSize, size_t nItems);
OutStream& out_stream;
U8* start;
int offset;
int bufSize;
size_t offset;
size_t bufSize;
};
}
......
......@@ -41,14 +41,17 @@ namespace rdr {
// for the bytes, zero is returned if the bytes are not immediately
// available.
inline int check(int itemSize, int nItems=1, bool wait=true)
inline size_t check(size_t itemSize, size_t nItems=1, bool wait=true)
{
if (ptr + itemSize * nItems > end) {
if (ptr + itemSize > end)
return overrun(itemSize, nItems, wait);
size_t nAvail;
if (itemSize > (size_t)(end - ptr))
return overrun(itemSize, nItems, wait);
nAvail = (end - ptr) / itemSize;
if (nAvail < nItems)
return nAvail;
nItems = (end - ptr) / itemSize;
}
return nItems;
}
......@@ -56,7 +59,7 @@ namespace rdr {
// be read without blocking. It returns true if this is the case, false
// otherwise. The length must be "small" (less than the buffer size).
inline bool checkNoWait(int length) { return check(length, 1, false)!=0; }
inline bool checkNoWait(size_t length) { return check(length, 1, false)!=0; }
// readU/SN() methods read unsigned and signed N-bit integers.
......@@ -82,9 +85,9 @@ namespace rdr {
static U32 maxStringLength;
inline void skip(int bytes) {
inline void skip(size_t bytes) {
while (bytes > 0) {
int n = check(1, bytes);
size_t n = check(1, bytes);
ptr += n;
bytes -= n;
}
......@@ -92,14 +95,13 @@ namespace rdr {
// readBytes() reads an exact number of bytes.
void readBytes(void* data, int length) {
U8* dataPtr = (U8*)data;
U8* dataEnd = dataPtr + length;
while (dataPtr < dataEnd) {
int n = check(1, dataEnd - dataPtr);
memcpy(dataPtr, ptr, n);
void readBytes(void* data, size_t length) {
while (length > 0) {
size_t n = check(1, length);
memcpy(data, ptr, n);
ptr += n;
dataPtr += n;
data = (U8*)data + n;
length -= n;
}
}
......@@ -114,7 +116,7 @@ namespace rdr {
// pos() returns the position in the stream.
virtual int pos() = 0;
virtual size_t pos() = 0;
// getptr(), getend() and setptr() are "dirty" methods which allow you to
// manipulate the buffer directly. This is useful for a stream which is a
......@@ -133,7 +135,7 @@ namespace rdr {
// instead of blocking to wait for the bytes, zero is returned if the bytes
// are not immediately available.
virtual int overrun(int itemSize, int nItems, bool wait=true) = 0;
virtual size_t overrun(size_t itemSize, size_t nItems, bool wait=true) = 0;
protected:
......
......@@ -36,7 +36,7 @@ namespace rdr {
public:
MemInStream(const void* data, int len, bool deleteWhenDone_=false)
MemInStream(const void* data, size_t len, bool deleteWhenDone_=false)
: start((const U8*)data), deleteWhenDone(deleteWhenDone_)
{
ptr = start;
......@@ -48,12 +48,12 @@ namespace rdr {
delete [] start;
}
int pos() { return ptr - start; }
void reposition(int pos) { ptr = start + pos; }
size_t pos() { return ptr - start; }
void reposition(size_t pos) { ptr = start + pos; }
private:
int overrun(int itemSize, int nItems, bool wait) { throw EndOfStream(); }
size_t overrun(size_t itemSize, size_t nItems, bool wait) { throw EndOfStream(); }
const U8* start;
bool deleteWhenDone;
};
......
......@@ -23,6 +23,7 @@
#ifndef __RDR_MEMOUTSTREAM_H__
#define __RDR_MEMOUTSTREAM_H__
#include <rdr/Exception.h>
#include <rdr/OutStream.h>
namespace rdr {
......@@ -40,16 +41,16 @@ namespace rdr {
delete [] start;
}
void writeBytes(const void* data, int length) {
void writeBytes(const void* data, size_t length) {
check(length);
memcpy(ptr, data, length);
ptr += length;
}
int length() { return ptr - start; }
size_t length() { return ptr - start; }
void clear() { ptr = start; };
void clearAndZero() { memset(start, 0, ptr-start); clear(); }
void reposition(int pos) { ptr = start + pos; }
void reposition(size_t pos) { ptr = start + pos; }
// data() returns a pointer to the buffer.
......@@ -60,11 +61,14 @@ namespace rdr {
// overrun() either doubles the buffer or adds enough space for nItems of
// size itemSize bytes.
int overrun(int itemSize, int nItems) {
int len = ptr - start + itemSize * nItems;
if (len < (end - start) * 2)
size_t overrun(size_t itemSize, size_t nItems) {
size_t len = ptr - start + itemSize * nItems;
if (len < (size_t)(end - start) * 2)
len = (end - start) * 2;
if (len < (size_t)(end - start))
throw Exception("Overflow in MemOutStream::overrun()");
U8* newStart = new U8[len];
memcpy(newStart, start, ptr - start);
ptr = newStart + (ptr - start);
......
......@@ -44,14 +44,17 @@ namespace rdr {
// itemSize bytes. Returns the number of items which fit (up to a maximum
// of nItems).
inline int check(int itemSize, int nItems=1)
inline size_t check(size_t itemSize, size_t nItems=1)
{
if (ptr + itemSize * nItems > end) {
if (ptr + itemSize > end)
return overrun(itemSize, nItems);
size_t nAvail;
if (itemSize > (size_t)(end - ptr))
return overrun(itemSize, nItems);
nAvail = (end - ptr) / itemSize;
if (nAvail < nItems)
return nAvail;
nItems = (end - ptr) / itemSize;
}
return nItems;
}
......@@ -76,13 +79,13 @@ namespace rdr {
writeBytes(str, len);
}
inline void pad(int bytes) {
inline void pad(size_t bytes) {
while (bytes-- > 0) writeU8(0);
}
inline void skip(int bytes) {
inline void skip(size_t bytes) {
while (bytes > 0) {
int n = check(1, bytes);
size_t n = check(1, bytes);
ptr += n;
bytes -= n;
}
......@@ -90,22 +93,21 @@ namespace rdr {
// writeBytes() writes an exact number of bytes.
void writeBytes(const void* data, int length) {
const U8* dataPtr = (const U8*)data;
const U8* dataEnd = dataPtr + length;
while (dataPtr < dataEnd) {
int n = check(1, dataEnd - dataPtr);
memcpy(ptr, dataPtr, n);
void writeBytes(const void* data, size_t length) {
while (length > 0) {
size_t n = check(1, length);
memcpy(ptr, data, n);
ptr += n;
dataPtr += n;
data = (U8*)data + n;
length -= n;
}
}
// copyBytes() efficiently transfers data between streams
void copyBytes(InStream* is, int length) {
void copyBytes(InStream* is, size_t length) {
while (length > 0) {
int n = check(1, length);
size_t n = check(1, length);
is->readBytes(ptr, n);
ptr += n;
length -= n;
......@@ -124,7 +126,7 @@ namespace rdr {
// length() returns the length of the stream.
virtual int length() = 0;
virtual size_t length() = 0;
// flush() requests that the stream be flushed.
......@@ -145,7 +147,7 @@ namespace rdr {
// the number of items which fit (up to a maximum of nItems). itemSize is
// supposed to be "small" (a few bytes).
virtual int overrun(int itemSize, int nItems) = 0;
virtual size_t overrun(size_t itemSize, size_t nItems) = 0;
protected:
......
......@@ -35,7 +35,7 @@ static rfb::LogWriter vlog("RandomStream");
using namespace rdr;
const int DEFAULT_BUF_LEN = 256;
const size_t DEFAULT_BUF_LEN = 256;
unsigned int RandomStream::seed;
......@@ -86,11 +86,11 @@ RandomStream::~RandomStream() {
#endif
}
int RandomStream::pos() {
size_t RandomStream::pos() {
return offset + ptr - start;
}
int RandomStream::overrun(int itemSize, int nItems, bool wait) {
size_t RandomStream::overrun(size_t itemSize, size_t nItems, bool wait) {
if (itemSize > DEFAULT_BUF_LEN)
throw Exception("RandomStream overrun: max itemSize exceeded");
......@@ -101,7 +101,7 @@ int RandomStream::overrun(int itemSize, int nItems, bool wait) {
offset += ptr - start;
ptr = start;
int length = start + DEFAULT_BUF_LEN - end;
size_t length = start + DEFAULT_BUF_LEN - end;
#ifdef RFB_HAVE_WINCRYPT
if (provider) {
......@@ -112,7 +112,7 @@ int RandomStream::overrun(int itemSize, int nItems, bool wait) {
#else
#ifndef WIN32
if (fp) {
int n = fread((U8*)end, length, 1, fp);
size_t n = fread((U8*)end, length, 1, fp);
if (n != 1)
throw rdr::SystemException("reading /dev/urandom or /dev/random failed",
errno);
......@@ -122,12 +122,14 @@ int RandomStream::overrun(int itemSize, int nItems, bool wait) {
{
#endif
#endif
for (int i=0; i<length; i++)
for (size_t i=0; i<length; i++)
*(U8*)end++ = (int) (256.0*rand()/(RAND_MAX+1.0));
}
if (itemSize * nItems > end - ptr)
nItems = (end - ptr) / itemSize;
size_t nAvail;
nAvail = (end - ptr) / itemSize;
if (nAvail < nItems)
return nAvail;
return nItems;
}
......@@ -39,14 +39,14 @@ namespace rdr {
RandomStream();
virtual ~RandomStream();
int pos();
size_t pos();
protected:
int overrun(int itemSize, int nItems, bool wait);
size_t overrun(size_t itemSize, size_t nItems, bool wait);
private:
U8* start;
int offset;
size_t offset;
static unsigned int seed;
#ifdef RFB_HAVE_WINCRYPT
......
......@@ -43,7 +43,7 @@ ssize_t TLSInStream::pull(gnutls_transport_ptr_t str, void* data, size_t size)
return -1;
}
if (in->getend() - in->getptr() < (ptrdiff_t)size)
if ((size_t)(in->getend() - in->getptr()) < size)
size = in->getend() - in->getptr();
in->readBytes(data, size);
......@@ -75,12 +75,12 @@ TLSInStream::~TLSInStream()
delete[] start;
}
int TLSInStream::pos()
size_t TLSInStream::pos()
{
return offset + ptr - start;
}
int TLSInStream::overrun(int itemSize, int nItems, bool wait)
size_t TLSInStream::overrun(size_t itemSize, size_t nItems, bool wait)
{
if (itemSize > bufSize)
throw Exception("TLSInStream overrun: max itemSize exceeded");
......@@ -92,20 +92,22 @@ int TLSInStream::overrun(int itemSize, int nItems, bool wait)
end -= ptr - start;
ptr = start;
while (end < start + itemSize) {
int n = readTLS((U8*) end, start + bufSize - end, wait);
while ((size_t)(end - start) < itemSize) {
size_t n = readTLS((U8*) end, start + bufSize - end, wait);
if (!wait && n == 0)
return 0;
end += n;
}
if (itemSize * nItems > end - ptr)
nItems = (end - ptr) / itemSize;
size_t nAvail;
nAvail = (end - ptr) / itemSize;
if (nAvail < nItems)
return nAvail;
return nItems;
}
int TLSInStream::readTLS(U8* buf, int len, bool wait)
size_t TLSInStream::readTLS(U8* buf, size_t len, bool wait)
{
int n;
......