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

Reply via email to