Date: Friday, May 5, 2006 @ 19:00:56
Author: gilles
Path: /cvsroot/carob/carob
Modified: Makefile (1.39 -> 1.40) contrib/CPP/read_example.cpp (1.5 ->
1.6) include/Common.hpp (1.43 -> 1.44)
include/ConnectionParameters.hpp (1.21 -> 1.22)
include/CriticalSection.hpp (1.7 -> 1.8) include/JavaSocket.hpp
(1.27 -> 1.28) src/BigDecimal.cpp (1.27 -> 1.28) src/Common.cpp
(1.39 -> 1.40) src/Connection.cpp (1.74 -> 1.75)
src/DriverResultSet.cpp (1.52 -> 1.53) src/JavaSocket.cpp (1.46
-> 1.47) src/ParameterStatement.cpp (1.28 -> 1.29)
src/SQLDataSerialization.cpp (1.33 -> 1.34)
test/10-Connection/TestFailOver.cpp (1.2 -> 1.3)
test/30-ResultSet/TestBigDecimal.cpp (1.7 -> 1.8)
test/40-Parameter-PreparedStatement/TestIEEE754.cpp (1.12 ->
1.13)
Various fixes for windows (mingw + stlport) compilation
-----------------------------------------------------+
Makefile | 2
contrib/CPP/read_example.cpp | 30 +++++++++--
include/Common.hpp | 7 ++
include/ConnectionParameters.hpp | 8 ++-
include/CriticalSection.hpp | 6 +-
include/JavaSocket.hpp | 6 +-
src/BigDecimal.cpp | 3 -
src/Common.cpp | 3 -
src/Connection.cpp | 4 +
src/DriverResultSet.cpp | 12 ++--
src/JavaSocket.cpp | 48 +++++++++++++-----
src/ParameterStatement.cpp | 13 +++-
src/SQLDataSerialization.cpp | 2
test/10-Connection/TestFailOver.cpp | 4 +
test/30-ResultSet/TestBigDecimal.cpp | 4 -
test/40-Parameter-PreparedStatement/TestIEEE754.cpp | 8 ++-
16 files changed, 123 insertions(+), 37 deletions(-)
Index: carob/Makefile
diff -u carob/Makefile:1.39 carob/Makefile:1.40
--- carob/Makefile:1.39 Tue May 2 12:34:59 2006
+++ carob/Makefile Fri May 5 19:00:56 2006
@@ -94,7 +94,7 @@
$(MAKE) -C test
${LIB_CAROB_LIB}: ${OBJS}
- ${CXX} ${LDFLAGS} -o ${LIB_CAROB_LIB} ${OBJS}
+ ${CXX} ${OBJS} ${LDFLAGS} -o ${LIB_CAROB_LIB}
- ${LN} ${LIB_CAROB_LIB} ${LIB_CAROB_LIB_SHORT}
${LIB_CAROB_STATIC}: ${OBJS}
Index: carob/contrib/CPP/read_example.cpp
diff -u carob/contrib/CPP/read_example.cpp:1.5
carob/contrib/CPP/read_example.cpp:1.6
--- carob/contrib/CPP/read_example.cpp:1.5 Tue Apr 4 18:35:58 2006
+++ carob/contrib/CPP/read_example.cpp Fri May 5 19:00:56 2006
@@ -26,12 +26,17 @@
* Compilation: use makefile or:
* g++ -I../../include -L../.. -lcarob read_example.cpp -o read_example
*/
-#include <iostream>
-#include "Connection.hpp"
-#include "DriverResultSet.hpp"
#include "ResultSetMetaData.hpp"
+#include "DriverResultSet.hpp"
#include "Statement.hpp"
+#include "Connection.hpp"
+#include "Common.hpp"
+#include <iostream>
+#ifdef __WIN32__
+ //#pragma comment(lib, "ws2_32.lib")
+ #include <winsock2.h>
+#endif
using namespace CarobNS;
using std::wcout;
@@ -39,10 +44,24 @@
int main(int argc, char *argv[])
{
+#ifdef __WIN32__
+ //init windows socket lib
+ WSADATA WSAData;
+ if (isInfoEnabled())
+ logInfo(L"read_example", L"Initializing windows socket library");
+ if (WSAStartup(MAKEWORD(2,0), &WSAData) != 0)
+ {
+ if (isErrorEnabled())
+ logError(L"read_example", L"Unable to find suitable windows socket
library");
+ throw ConnectionException(L"Unable to find suitable windows socket
library");
+ return false;
+ }
+#endif
+ setLogLevel(LOG_LEVEL_DEBUG);
// 1- Connecting:
// 1.1 Create the parameters of the connection
- ConnectionParameters connectionPrms(L"localhost",
+ ConnectionParameters connectionPrms(L"192.168.0.39",
25322,
L"myDB",
L"user",
@@ -93,4 +112,7 @@
{
wcout<<L"An unknow error occured"<<endl;
}
+#ifdef __WIN32__
+ WSACleanup();
+#endif
}
Index: carob/include/Common.hpp
diff -u carob/include/Common.hpp:1.43 carob/include/Common.hpp:1.44
--- carob/include/Common.hpp:1.43 Thu Mar 23 17:10:04 2006
+++ carob/include/Common.hpp Fri May 5 19:00:56 2006
@@ -36,6 +36,13 @@
#define WIDENMACRO(macro) WIDENLITERAL(macro)
#define __WFILE__ WIDENMACRO(__FILE__)
+#ifdef __WIN32__
+ #define _UNICODE
+ #define _WIN32_WINNT 0x0501 // workaround to have getaddrinfo function
+
+ typedef uint16_t in_port_t;
+ typedef uint32_t in_addr_t;
+#endif
namespace CarobNS {
/** Java byte (signed) */
Index: carob/include/ConnectionParameters.hpp
diff -u carob/include/ConnectionParameters.hpp:1.21
carob/include/ConnectionParameters.hpp:1.22
--- carob/include/ConnectionParameters.hpp:1.21 Tue Apr 4 18:35:58 2006
+++ carob/include/ConnectionParameters.hpp Fri May 5 19:00:56 2006
@@ -24,7 +24,13 @@
#include "CarobException.hpp"
-#include <netinet/in.h> // in_port_t
+#ifdef __WIN32__
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
+ #include "Common.hpp" //for in_port_t
+#else
+ #include <netinet/in.h> // in_port_t
+#endif
#include <string>
#include <vector>
namespace CarobNS {
Index: carob/include/CriticalSection.hpp
diff -u carob/include/CriticalSection.hpp:1.7
carob/include/CriticalSection.hpp:1.8
--- carob/include/CriticalSection.hpp:1.7 Thu Mar 23 17:10:04 2006
+++ carob/include/CriticalSection.hpp Fri May 5 19:00:56 2006
@@ -98,7 +98,7 @@
virtual ~CriticalSection()
{
#ifdef WIN32
- DeleteCriticalSection(&C);
+ DeleteCriticalSection(&mutex);
#else
pthread_mutex_unlock(&mutex);
pthread_mutex_destroy(&mutex);
@@ -110,7 +110,7 @@
void Enter() const
{
#ifdef WIN32
- EnterCriticalSection(&C);
+ EnterCriticalSection(&mutex);
#else
pthread_mutex_lock(&mutex);
#endif
@@ -121,7 +121,7 @@
void Leave() const
{
#ifdef WIN32
- LeaveCriticalSection(&C);
+ LeaveCriticalSection(&mutex);
#else
pthread_mutex_unlock(&mutex);
#endif
Index: carob/include/JavaSocket.hpp
diff -u carob/include/JavaSocket.hpp:1.27 carob/include/JavaSocket.hpp:1.28
--- carob/include/JavaSocket.hpp:1.27 Thu Mar 23 17:10:04 2006
+++ carob/include/JavaSocket.hpp Fri May 5 19:00:56 2006
@@ -29,7 +29,11 @@
#include <string>
-#include <netinet/in.h> //for in_addr_t
+#ifdef __WIN32__
+ #include <winsock2.h>
+#else
+ #include <netinet/in.h> //for in_addr_t
+#endif
namespace CarobNS {
Index: carob/src/BigDecimal.cpp
diff -u carob/src/BigDecimal.cpp:1.27 carob/src/BigDecimal.cpp:1.28
--- carob/src/BigDecimal.cpp:1.27 Tue May 2 12:34:59 2006
+++ carob/src/BigDecimal.cpp Fri May 5 19:00:56 2006
@@ -361,7 +361,8 @@
if (sRetLength <= scale)
{
// add heading zeros as needed
- sRet.insert(0, scale - sRetLength + 1, L'0');
+ sRet.insert(static_cast<size_t>(0),
+ static_cast<size_t>(scale - sRetLength + 1), L'0');
}
// insert the decimal point
sRet.insert(sRet.length()-scale, 1, decimal_point);
Index: carob/src/Common.cpp
diff -u carob/src/Common.cpp:1.39 carob/src/Common.cpp:1.40
--- carob/src/Common.cpp:1.39 Thu Apr 20 12:26:00 2006
+++ carob/src/Common.cpp Fri May 5 19:00:56 2006
@@ -29,6 +29,7 @@
#include <log4cxx/logger.h>
#endif
+#ifndef __WIN32__
#include <stdint.h> // for uint8_t, int32_t, uint32_t, int64_t, uint64_t
// Alternative:
// #include <cstdint>
@@ -39,7 +40,7 @@
// See:
// - "Incompatibilities Between ISO C and ISO C++" - David R. Tribble
// - C++ Technical Report 1 (TR1)
-
+#endif
#include <iostream>
#include <sstream> //for wostringstream
#include <stdexcept>
Index: carob/src/Connection.cpp
diff -u carob/src/Connection.cpp:1.74 carob/src/Connection.cpp:1.75
--- carob/src/Connection.cpp:1.74 Thu Mar 23 17:18:23 2006
+++ carob/src/Connection.cpp Fri May 5 19:00:56 2006
@@ -32,6 +32,10 @@
#include <string>
+#ifdef __WIN32__
+ #define sleep _sleep
+#endif
+
using std::wstring;
using namespace CarobNS;
Index: carob/src/DriverResultSet.cpp
diff -u carob/src/DriverResultSet.cpp:1.52 carob/src/DriverResultSet.cpp:1.53
--- carob/src/DriverResultSet.cpp:1.52 Mon Mar 27 09:11:08 2006
+++ carob/src/DriverResultSet.cpp Fri May 5 19:00:56 2006
@@ -31,9 +31,11 @@
#include "Common.hpp"
#include <sstream> //for wostringstream
+#include <algorithm> //for transform
using std::wstring;
using std::vector;
+using std::transform;
using namespace CarobNS;
@@ -355,7 +357,7 @@
if(!wstringTo<int>(ret, valAsString))
{
//Last chance: is it a boolean ?
- transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
tolower);
+ transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
(int(*)(int))std::tolower); //see
http://lists.debian.org/debian-gcc/2002/04/msg00092.html
if (L"true" == valAsString)
ret = 1;
else if (L"false" == valAsString)
@@ -459,7 +461,7 @@
if(!wstringTo<int64_t>(ret, valAsString))
{
//Last chance: is it a boolean ?
- transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
tolower);
+ transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
(int(*)(int))std::tolower);
if (L"true" == valAsString)
ret = 1;
else if (L"false" == valAsString)
@@ -543,7 +545,7 @@
if(!wstringTo<uint64_t>(ret, valAsString))
{
//Last chance: is it a boolean ?
- transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
tolower);
+ transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
(int(*)(int))std::tolower);
if (L"true" == valAsString)
ret = 1;
else if (L"false" == valAsString)
@@ -649,7 +651,7 @@
if(!wstringTo<float>(ret, valAsString))
{
//Last chance: is it a boolean ?
- transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
tolower);
+ transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
(int(*)(int))std::tolower);
if (L"true" == valAsString)
ret = 1;
else if (L"false" == valAsString)
@@ -753,7 +755,7 @@
if(!wstringTo<double>(ret, valAsString))
{
//Last chance: is it a boolean ?
- transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
tolower);
+ transform(valAsString.begin(),valAsString.end(), valAsString.begin(),
(int(*)(int))std::tolower);
if (L"true" == valAsString)
ret = 1;
else if (L"false" == valAsString)
Index: carob/src/JavaSocket.cpp
diff -u carob/src/JavaSocket.cpp:1.46 carob/src/JavaSocket.cpp:1.47
--- carob/src/JavaSocket.cpp:1.46 Tue Mar 7 12:18:57 2006
+++ carob/src/JavaSocket.cpp Fri May 5 19:00:56 2006
@@ -24,8 +24,13 @@
#include "Common.hpp"
#include "SystemDependantDefs.hpp"
-#include <netdb.h> // getaddrinfo() etc.
-#include <netinet/tcp.h> // TCP_NODELAY etc.
+#ifdef __WIN32__
+ #include <ws2tcpip.h>
+ #define __BYTE_ORDER BYTE_ORDER
+#else
+ #include <netdb.h> // getaddrinfo() etc.
+ #include <netinet/tcp.h> // TCP_NODELAY etc.
+#endif
#include <errno.h>
#include <fcntl.h>
@@ -57,7 +62,7 @@
SOCK_STREAM,
0);
- if (!socketFd)
+ if (socketFd == -1)
{
if (isErrorEnabled())
logError(fctName, L"Socket creation failed");
@@ -67,10 +72,15 @@
if (!blocking)
{
- // Win: (to be tested)
- // int var = 1;
- // ioctlsocket(socketFd, FIONBIO, (u_long FAR*) &var);
-
+#ifdef __WIN32__
+ int var = 1;
+ ioctlsocket(socketFd, FIONBIO, (u_long FAR*) &var);
+ if (var == 0)
+ {
+ if (isErrorEnabled())
+ logError(fctName, L"Could not turn socket to non-blocking mode.");
+ }
+#else
// *nix:
int flags;
flags = fcntl(socketFd, F_GETFL, 0);
@@ -83,6 +93,7 @@
if (isErrorEnabled())
logError(fctName, L"Could not turn socket to non-blocking mode");
}
+#endif
}
//Set socket options
int opt_value = 1;
@@ -107,7 +118,7 @@
bool JavaSocket::connectTo(const std::wstring& host, in_port_t port)
throw (ConnectionException, UnexpectedException)
{
- wstring fctName(L"JavaSocket::Connect");
+ wstring fctName(L"JavaSocket::connectTo");
if (isDebugEnabled())
logDebug(fctName, L"Connecting...");
if (!isValid())
@@ -136,8 +147,12 @@
if (error)
{
+#ifdef __WIN32__
+ wstring wMsg = L"Error while executing getaddrinfo().";
+#else
const char* gaiMsg = gai_strerror(error);
wstring wMsg = fromString(gaiMsg);
+#endif
if (isDebugEnabled())
logDebug(fctName, wMsg);
connected = false;
@@ -181,9 +196,18 @@
wstring fctName(L"closeSocket");
if (isValid())
{
+#ifdef __WIN32__
+ if (closesocket(socketFd) != 0)
+#else
if (close(socketFd) != 0)
+#endif
{
- wstring msg(L"Could not close socket. Error code is "+toWString(errno));
+ wstring msg(L"Could not close socket. Error code is ");
+#ifdef __WIN32__
+ msg += toWString(WSAGetLastError());
+#else
+ msg += toWString(errno);
+#endif
throw SocketIOException(msg);
return false;
}
@@ -327,8 +351,8 @@
while (alreadyRead < len)
{
readThisTime = recv(socketFd,
- static_cast<uint8_t*>(
- ((static_cast<uint8_t*>(buf))+alreadyRead)),
+ (char*)(static_cast<uint8_t*>(
+
((static_cast<uint8_t*>(buf))+alreadyRead))),
len-alreadyRead,
flags);
if (readThisTime <= 0)
@@ -347,7 +371,7 @@
{
// in non blocking mode, send will block until len bytes are send. So no need
// to loop here
- int ret = send(socketFd, buf, len, flags);
+ int ret = send(socketFd, static_cast<const char*>(buf), len, flags);
if ( ret == -1 )
{
throw SocketIOException(L'(' + fctName + L"): could not write "
Index: carob/src/ParameterStatement.cpp
diff -u carob/src/ParameterStatement.cpp:1.28
carob/src/ParameterStatement.cpp:1.29
--- carob/src/ParameterStatement.cpp:1.28 Fri Apr 7 19:01:13 2006
+++ carob/src/ParameterStatement.cpp Fri May 5 19:00:56 2006
@@ -28,8 +28,15 @@
#include <sstream>
-#include <cmath>
-
+#ifdef __WIN32__
+ #include "math.h"
+#else
+ #include <cmath>
+#endif
+
+#ifndef __WIN32__
+using std::signbit;
+#endif
namespace CarobNS {
/**
@@ -300,7 +307,7 @@
// now the exceptional cases
// Bug: java.lang.FloatingDecimal#readJavaFormatString()
// ignores negative sign of NaN
- if (std::signbit(value))
+ if (signbit(value))
wrapped_stream << L"-";
// Too bad Standard C99 and Java could not agree on the same strings :-(
Index: carob/src/SQLDataSerialization.cpp
diff -u carob/src/SQLDataSerialization.cpp:1.33
carob/src/SQLDataSerialization.cpp:1.34
--- carob/src/SQLDataSerialization.cpp:1.33 Thu Mar 23 15:34:06 2006
+++ carob/src/SQLDataSerialization.cpp Fri May 5 19:00:56 2006
@@ -35,7 +35,7 @@
// - same standard binary representation as the one sent
// by Java's DataOutput class
-#ifndef __STDC_IEC_559__
+#if !defined __STDC_IEC_559__ && !defined __WIN32__
#error "only IEEE 754 platforms are supported"
#endif
// run-time equivalent is: numeric_limits<double|float>.is_iec559()
Index: carob/test/10-Connection/TestFailOver.cpp
diff -u carob/test/10-Connection/TestFailOver.cpp:1.2
carob/test/10-Connection/TestFailOver.cpp:1.3
--- carob/test/10-Connection/TestFailOver.cpp:1.2 Tue Apr 4 18:35:58 2006
+++ carob/test/10-Connection/TestFailOver.cpp Fri May 5 19:00:56 2006
@@ -31,6 +31,10 @@
using std::wstring;
+#ifdef __WIN32__
+ #define sleep _sleep
+#endif
+
using namespace CarobNS;
void TestFailOver::setUp()
Index: carob/test/30-ResultSet/TestBigDecimal.cpp
diff -u carob/test/30-ResultSet/TestBigDecimal.cpp:1.7
carob/test/30-ResultSet/TestBigDecimal.cpp:1.8
--- carob/test/30-ResultSet/TestBigDecimal.cpp:1.7 Wed Mar 22 19:23:19 2006
+++ carob/test/30-ResultSet/TestBigDecimal.cpp Fri May 5 19:00:56 2006
@@ -158,10 +158,10 @@
// CPPUNIT_ASSERT(drsPtr->getAsString(3) ==
toWString(numeric_limits<double>::max()));
drsPtr->next();
logInfo(fctName, wstring(L"-123456789012345678901234567890") +
use_facet<numpunct<wchar_t> >(std::locale()).decimal_point() +
L"123456789012345678901234567890 - getAsString=" + drsPtr->getAsString(3));
- CPPUNIT_ASSERT(drsPtr->getAsString(3) == L"-123456789012345678901234567890"
+ fromString(localeconv()->decimal_point) + L"123456789012345678901234567890");
+ CPPUNIT_ASSERT(drsPtr->getAsString(3) == L"-123456789012345678901234567890"
+ fromString(::localeconv()->decimal_point) +
L"123456789012345678901234567890");
drsPtr->next();
logInfo(fctName, wstring(L"123456789012345678901234567890") +
use_facet<numpunct<wchar_t> >(std::locale()).decimal_point() +
L"123456789012345678901234567890 - getAsString=" + drsPtr->getAsString(3));
- CPPUNIT_ASSERT(drsPtr->getAsString(3) == L"123456789012345678901234567890" +
fromString(localeconv()->decimal_point) + L"123456789012345678901234567890");
+ CPPUNIT_ASSERT(drsPtr->getAsString(3) == L"123456789012345678901234567890" +
fromString(::localeconv()->decimal_point) + L"123456789012345678901234567890");
}
//TODO: display as strings (when logging) in order to see where the test
crashes
Index: carob/test/40-Parameter-PreparedStatement/TestIEEE754.cpp
diff -u carob/test/40-Parameter-PreparedStatement/TestIEEE754.cpp:1.12
carob/test/40-Parameter-PreparedStatement/TestIEEE754.cpp:1.13
--- carob/test/40-Parameter-PreparedStatement/TestIEEE754.cpp:1.12 Fri Mar
3 16:54:13 2006
+++ carob/test/40-Parameter-PreparedStatement/TestIEEE754.cpp Fri May 5
19:00:56 2006
@@ -36,13 +36,17 @@
#define INSERT_STMT L"insert into " TABLE_NAME L" values (?, ?, ?)"
#define RETRIEVE_STMT L"select * from " TABLE_NAME
-#ifndef __STDC_IEC_559__
+#if !defined __STDC_IEC_559__ && !defined __WIN32__
#error only IEEE 754 platforms are supported
#endif
#include <iostream>
+#ifndef __WIN32__
+using std::signbit;
+#endif
+
using namespace CarobNS;
namespace {
@@ -73,7 +77,7 @@
better_equal(FP a, FP b)
{
if (isnan(a)) // isnan() is C99 but not C++98
- return (isnan(b) && (std::signbit(a) == std::signbit(b)));
+ return (isnan(b) && (signbit(a) == signbit(b)));
else
return (a == b);
}
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits