diff --git a/pvAccessApp/remote/blockingTCP.h b/pvAccessApp/remote/blockingTCP.h index 6398b86..2103a21 100644 --- a/pvAccessApp/remote/blockingTCP.h +++ b/pvAccessApp/remote/blockingTCP.h @@ -477,12 +477,12 @@ namespace epics { float beaconInterval, epics::pvData::int16 priority); public: - static BlockingClientTCPTransport::shared_pointer create(Context::shared_pointer const & context, SOCKET channel, + static shared_pointer create(Context::shared_pointer const & context, SOCKET channel, std::auto_ptr& responseHandler, int receiveBufferSize, TransportClient::shared_pointer client, epics::pvData::int8 remoteTransportRevision, float beaconInterval, epics::pvData::int16 priority) { - BlockingClientTCPTransport::shared_pointer thisPointer( + shared_pointer thisPointer( new BlockingClientTCPTransport(context, channel, responseHandler, receiveBufferSize, client, remoteTransportRevision, beaconInterval, priority) ); @@ -657,10 +657,10 @@ namespace epics { BlockingServerTCPTransport(Context::shared_pointer const & context, SOCKET channel, std::auto_ptr& responseHandler, int receiveBufferSize); public: - static BlockingServerTCPTransport::shared_pointer create(Context::shared_pointer const & context, SOCKET channel, + static shared_pointer create(Context::shared_pointer const & context, SOCKET channel, std::auto_ptr& responseHandler, int receiveBufferSize) { - BlockingServerTCPTransport::shared_pointer thisPointer( + shared_pointer thisPointer( new BlockingServerTCPTransport(context, channel, responseHandler, receiveBufferSize) ); thisPointer->start(); diff --git a/pvAccessApp/remote/blockingTCPTransport.cpp b/pvAccessApp/remote/blockingTCPTransport.cpp index fef7ad8..cbd2418 100644 --- a/pvAccessApp/remote/blockingTCPTransport.cpp +++ b/pvAccessApp/remote/blockingTCPTransport.cpp @@ -31,6 +31,10 @@ typedef SSIZE_T ssize_t; #endif +#ifdef __vxworks +#define INT64_MAX (0x7fffffffffffffffLL) +#endif + using namespace epics::pvData; using std::max; diff --git a/pvAccessApp/remote/blockingUDP.h b/pvAccessApp/remote/blockingUDP.h index 73a1117..646be2d 100644 --- a/pvAccessApp/remote/blockingUDP.h +++ b/pvAccessApp/remote/blockingUDP.h @@ -38,11 +38,11 @@ namespace epics { SOCKET channel, osiSockAddr& bindAddress, short remoteTransportRevision); public: - static BlockingUDPTransport::shared_pointer create(std::auto_ptr& responseHandler, + static shared_pointer create(std::auto_ptr& responseHandler, SOCKET channel, osiSockAddr& bindAddress, short remoteTransportRevision) { - BlockingUDPTransport::shared_pointer thisPointer( + shared_pointer thisPointer( new BlockingUDPTransport(responseHandler, channel, bindAddress, remoteTransportRevision) ); return thisPointer; diff --git a/pvAccessApp/remote/blockingUDPTransport.cpp b/pvAccessApp/remote/blockingUDPTransport.cpp index fac9ad3..8bb6444 100644 --- a/pvAccessApp/remote/blockingUDPTransport.cpp +++ b/pvAccessApp/remote/blockingUDPTransport.cpp @@ -182,7 +182,7 @@ namespace epics { { for(size_t i = 0; i <_ignoredAddresses->size(); i++) { - if(_ignoredAddresses->at(i).ia.sin_addr.s_addr==fromAddress.ia.sin_addr.s_addr) + if((*_ignoredAddresses)[i].ia.sin_addr.s_addr==fromAddress.ia.sin_addr.s_addr) { ignore = true; break; @@ -295,8 +295,17 @@ namespace epics { bool BlockingUDPTransport::send(ByteBuffer* buffer, const osiSockAddr& address) { buffer->flip(); - int retval = sendto(_channel, buffer->getArray(), - buffer->getLimit(), 0, &(address.sa), sizeof(sockaddr)); + int retval = sendto(_channel, +#ifdef __vxworks + (char *) +#endif + buffer->getArray(), + buffer->getLimit(), 0, +#ifdef __vxworks + (sockaddr*) +#endif + &(address.sa), sizeof(sockaddr)); + if(unlikely(retval<0)) { char errStr[64]; @@ -315,8 +324,16 @@ namespace epics { bool allOK = true; for(size_t i = 0; i<_sendAddresses->size(); i++) { - int retval = sendto(_channel, buffer->getArray(), - buffer->getLimit(), 0, &(_sendAddresses->at(i).sa), + int retval = sendto(_channel, +#ifdef __vxworks + (char *) +#endif + buffer->getArray(), + buffer->getLimit(), 0, +#ifdef __vxworks + (sockaddr*) +#endif + &(_sendAddresses->at(i).sa), sizeof(sockaddr)); if(unlikely(retval<0)) { diff --git a/pvAccessApp/remote/channelSearchManager.h b/pvAccessApp/remote/channelSearchManager.h index 1fd0761..066fa2a 100644 --- a/pvAccessApp/remote/channelSearchManager.h +++ b/pvAccessApp/remote/channelSearchManager.h @@ -10,7 +10,10 @@ #include #include +#ifndef __vxworks +/* why not use pvType.h here? */ #include +#endif namespace epics { namespace pvAccess { diff --git a/pvAccessApp/remote/transportRegistry.cpp b/pvAccessApp/remote/transportRegistry.cpp index 86df4ec..a924c02 100644 --- a/pvAccessApp/remote/transportRegistry.cpp +++ b/pvAccessApp/remote/transportRegistry.cpp @@ -77,7 +77,7 @@ auto_ptr TransportRegistry::get(String con prioritiesIter != priorities->end(); prioritiesIter++, i++) { - transportArray->at(i) = prioritiesIter->second; + (*transportArray)[i] = prioritiesIter->second; } return transportArray; } @@ -146,7 +146,7 @@ auto_ptr TransportRegistry::toArray() prioritiesIter != priorities->end(); prioritiesIter++, i++) { - transportArray->at(i) = prioritiesIter->second; + (*transportArray)[i] = prioritiesIter->second; } } diff --git a/pvAccessApp/remoteClient/clientContextImpl.cpp b/pvAccessApp/remoteClient/clientContextImpl.cpp index eee235d..38881e0 100644 --- a/pvAccessApp/remoteClient/clientContextImpl.cpp +++ b/pvAccessApp/remoteClient/clientContextImpl.cpp @@ -31,7 +31,7 @@ #include #include -#include +//#include using std::tr1::dynamic_pointer_cast; using std::tr1::static_pointer_cast; @@ -48,7 +48,8 @@ namespace epics { String emptyString; // TODO consider std::unordered_map - typedef std::tr1::unordered_map IOIDResponseRequestMap; + //typedef std::tr1::unordered_map IOIDResponseRequestMap; + typedef std::map IOIDResponseRequestMap; #define EXCEPTION_GUARD(code) try { code; } \ @@ -1697,9 +1698,9 @@ namespace epics { } public: - static ChannelGetFieldRequestImpl::shared_pointer create(ChannelImpl::shared_pointer const & channel, GetFieldRequester::shared_pointer const & callback, String const & subField) + static shared_pointer create(ChannelImpl::shared_pointer const & channel, GetFieldRequester::shared_pointer const & callback, String const & subField) { - ChannelGetFieldRequestImpl::shared_pointer thisPointer(new ChannelGetFieldRequestImpl(channel, callback, subField), delayed_destroyable_deleter()); + shared_pointer thisPointer(new ChannelGetFieldRequestImpl(channel, callback, subField), delayed_destroyable_deleter()); thisPointer->activate(); return thisPointer; } @@ -3957,9 +3958,9 @@ namespace epics { public: - static InternalClientContextImpl::shared_pointer create() + static shared_pointer create() { - InternalClientContextImpl::shared_pointer thisPointer(new InternalClientContextImpl(), delayed_destroyable_deleter()); + shared_pointer thisPointer(new InternalClientContextImpl(), delayed_destroyable_deleter()); static_cast(thisPointer.get())->activate(); return thisPointer; } @@ -4140,7 +4141,7 @@ TODO for (size_t i = 0; broadcastAddresses.get() && i < broadcastAddresses->size(); i++) LOG(logLevelDebug, - "Broadcast address #%d: %s", i, inetAddressToString(broadcastAddresses->at(i)).c_str()); + "Broadcast address #%d: %s", i, inetAddressToString((*broadcastAddresses)[i]).c_str()); // where to bind (listen) address osiSockAddr listenLocalAddress; diff --git a/pvAccessApp/server/responseHandlers.cpp b/pvAccessApp/server/responseHandlers.cpp index 4e91b3f..f4ead50 100644 --- a/pvAccessApp/server/responseHandlers.cpp +++ b/pvAccessApp/server/responseHandlers.cpp @@ -308,11 +308,11 @@ void ServerCreateChannelHandler::handleResponse(osiSockAddr* responseFrom, } // TODO !!! - //ServerChannelRequesterImpl::create(_providers.at(0), transport, channelName, cid); + //ServerChannelRequesterImpl::create(_providers[0], transport, channelName, cid); if (_providers.size() == 1) - ServerChannelRequesterImpl::create(_providers.at(0), transport, channelName, cid); + ServerChannelRequesterImpl::create(_providers[0], transport, channelName, cid); else ServerChannelRequesterImpl::create(ServerSearchHandler::s_channelNameToProvider[channelName].lock(), transport, channelName, cid); // TODO !!!! } diff --git a/pvAccessApp/utils/configuration.cpp b/pvAccessApp/utils/configuration.cpp index bd5219d..06aa450 100644 --- a/pvAccessApp/utils/configuration.cpp +++ b/pvAccessApp/utils/configuration.cpp @@ -7,6 +7,11 @@ #include #include +#if defined(__GNUC__) && __GNUC__ < 3 +#define OLDGCC +#define NO_STREAM_EXCEPTIONS +#endif + namespace epics { namespace pvAccess { @@ -77,11 +82,17 @@ void Properties::load() { _properties.clear(); +#ifdef NO_STREAM_EXCEPTIONS + _infile->open(_fileName.c_str(),ifstream::in); + if (_infile->fail()) +#else try { _infile->open(_fileName.c_str(),ifstream::in); } - catch (ifstream::failure& e) { + catch (ifstream::failure& e) +#endif + { string errMsg = "Error opening file: " + string(_fileName.c_str()); THROW_BASE_EXCEPTION(errMsg.c_str()); } @@ -89,13 +100,28 @@ void Properties::load() string line; string property; string key; +#ifndef NO_STREAM_EXCEPTIONS try { +#endif while(!_infile->eof()) { line.clear(); std::getline(*_infile,line); +#ifdef NO_STREAM_EXCEPTIONS + if (_infile->fail()) + { + _infile->close(); + if(_infile->eof()) + { + return; //end of file + } + string errMsg = "Error reading file: " + _fileName; + THROW_BASE_EXCEPTION(errMsg.c_str()); + } +#endif + //remove trailing spaces truncate(line); @@ -105,7 +131,7 @@ void Properties::load() continue; } // comment - if(line.at(0) == '#') + if(line[0] == '#') { continue; } @@ -124,6 +150,7 @@ void Properties::load() truncate(property); _properties[key] = property; } +#ifndef NO_STREAM_EXCEPTIONS } catch (ifstream::failure& e) { @@ -135,6 +162,7 @@ void Properties::load() string errMsg = "Error reading file: " + _fileName; THROW_BASE_EXCEPTION(errMsg.c_str()); } +#endif _infile->close(); } @@ -146,11 +174,17 @@ void Properties::load(const string &fileName) void Properties::store() { +#ifdef NO_STREAM_EXCEPTIONS + _outfile->open(_fileName.c_str(),ifstream::trunc); + if (_outfile->fail()) +#else try { _outfile->open(_fileName.c_str(),ifstream::trunc); } - catch (ofstream::failure& e) { + catch (ofstream::failure& e) +#endif + { string errMsg = "Error opening file: " + string(_fileName.c_str()); THROW_BASE_EXCEPTION(errMsg.c_str()); } @@ -160,12 +194,19 @@ void Properties::store() propertiesIterator != _properties.end(); propertiesIterator++ ) { +#ifndef NO_STREAM_EXCEPTIONS try { +#endif string line = string(propertiesIterator->first) + string("=") + string(propertiesIterator->second) + string("\n"); _outfile->write(line.c_str(),line.length()); +#ifdef NO_STREAM_EXCEPTIONS + if(_outfile->fail()) +#else } - catch (ofstream::failure& e) { + catch (ofstream::failure& e) +#endif + { _outfile->close(); string errMsg = "Error writing to file: " + string(_fileName.c_str()); THROW_BASE_EXCEPTION(errMsg.c_str()); diff --git a/pvAccessApp/utils/hexDump.cpp b/pvAccessApp/utils/hexDump.cpp index 735c127..0ef140e 100644 --- a/pvAccessApp/utils/hexDump.cpp +++ b/pvAccessApp/utils/hexDump.cpp @@ -68,7 +68,11 @@ void hexDump(String const & prologue, String const & name, const int8 *bs, if(((i-start)%16)==0) { out += chars; out += '\n'; +#if defined(__GNUC__) && __GNUC__ < 3 + chars.erase(); +#else chars.clear(); +#endif } chars += toAscii(bs[i]); diff --git a/pvAccessApp/utils/inetAddressUtil.cpp b/pvAccessApp/utils/inetAddressUtil.cpp index ab1dd45..9d3cb0c 100644 --- a/pvAccessApp/utils/inetAddressUtil.cpp +++ b/pvAccessApp/utils/inetAddressUtil.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -134,7 +135,7 @@ InetAddrVector* getSocketAddressList(String list, int defaultPort, if(appendList!=NULL) { for(size_t i = 0; isize(); i++) - iav->push_back(appendList->at(i)); + iav->push_back((*appendList)[i]); } return iav; } diff --git a/pvAccessApp/utils/introspectionRegistry.cpp b/pvAccessApp/utils/introspectionRegistry.cpp index e97e8cc..af26bb7 100644 --- a/pvAccessApp/utils/introspectionRegistry.cpp +++ b/pvAccessApp/utils/introspectionRegistry.cpp @@ -74,12 +74,20 @@ void IntrospectionRegistry::printKeysAndValues(string name) cout << "############## print of all key/values of " << name.c_str() << " registry : ###################" << endl; for(registryMap_t::iterator registryIter = _registry.begin(); registryIter != _registry.end(); registryIter++) { +#if defined(__GNUC__) && __GNUC__ < 3 + buffer.erase(); +#else buffer.clear(); +#endif cout << "\t" << "Key: "<< registryIter->first << endl; cout << "\t" << "Value: " << registryIter->second << endl; cout << "\t" << "References: " << buffer.c_str() << endl; +#if defined(__GNUC__) && __GNUC__ < 3 + buffer.erase(); +#else buffer.clear(); +#endif registryIter->second->toString(&buffer); cout << "\t" << "Value toString: " << buffer.c_str() << endl; } diff --git a/pvAccessApp/utils/likely.h b/pvAccessApp/utils/likely.h index 7112be4..5642411 100644 --- a/pvAccessApp/utils/likely.h +++ b/pvAccessApp/utils/likely.h @@ -7,7 +7,7 @@ #ifndef LIKELY_H_ #define LIKELY_H_ -#if defined(__GNUC__) +#if defined(__GNUC__) && __GNUC__ >= 3 #define likely(x) __builtin_expect (x, 1) #define unlikely(x) __builtin_expect (x, 0) #else diff --git a/pvAccessApp/utils/logger.cpp b/pvAccessApp/utils/logger.cpp index 81c59a1..1d7f938 100644 --- a/pvAccessApp/utils/logger.cpp +++ b/pvAccessApp/utils/logger.cpp @@ -17,6 +17,7 @@ #include #include #include +#include using namespace epics::pvData; using std::ofstream; diff --git a/pvAccessApp/utils/logger.h b/pvAccessApp/utils/logger.h index c009ae5..92f9fa8 100644 --- a/pvAccessApp/utils/logger.h +++ b/pvAccessApp/utils/logger.h @@ -39,7 +39,11 @@ namespace pvAccess { void pvAccessLog(pvAccessLogLevel level, const char* format, ...); void pvAccessSetLogLevel(pvAccessLogLevel level); - #define LOG(level, format, ...) pvAccessLog(level, format, ##__VA_ARGS__) + #if defined (__GNUC__) && __GNUC__ < 3 + #define LOG(level, format, ARGS...) pvAccessLog(level, format, ##ARGS) + #else + #define LOG(level, format, ...) pvAccessLog(level, format, ##__VA_ARGS__) + #endif #define SET_LOG_LEVEL(level) pvAccessSetLogLevel(level) // EPICS errlog