Commit 29709852 authored by Pavel Vainerman's avatar Pavel Vainerman

Coverity scan:

[fixed]: Uninitialized variables (UNINIT) [fixed]: Error handling issues (UNCAUGHT_EXCEPT) [fixed]: Control flow issues (NO_EFFECT) [fixed]: Uninitialized scalar variable (UNINIT)
parent a7d8e78a
...@@ -479,7 +479,7 @@ int main( int argc, char** argv ) ...@@ -479,7 +479,7 @@ int main( int argc, char** argv )
cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl; cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl;
for( int i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
{ {
cout << i << ": (" << ModbusRTU::dat2str( reg + i ) << ") = " << (int)(ret.data[i]) cout << i << ": (" << ModbusRTU::dat2str( reg + i ) << ") = " << (int)(ret.data[i])
<< " (" << " ("
...@@ -507,7 +507,7 @@ int main( int argc, char** argv ) ...@@ -507,7 +507,7 @@ int main( int argc, char** argv )
cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl; cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl;
for( int i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
{ {
cout << i << ": (" << ModbusRTU::dat2str( reg + i ) << ") = " << (int)(ret.data[i]) cout << i << ": (" << ModbusRTU::dat2str( reg + i ) << ") = " << (int)(ret.data[i])
<< " (" << " ("
......
...@@ -421,7 +421,7 @@ int main( int argc, char** argv ) ...@@ -421,7 +421,7 @@ int main( int argc, char** argv )
cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl; cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl;
for( int i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
{ {
cout << i << ": (" << ModbusRTU::dat2str( reg + i ) << ") = " << (int)(ret.data[i]) cout << i << ": (" << ModbusRTU::dat2str( reg + i ) << ") = " << (int)(ret.data[i])
<< " (" << " ("
...@@ -449,7 +449,7 @@ int main( int argc, char** argv ) ...@@ -449,7 +449,7 @@ int main( int argc, char** argv )
cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl; cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl;
for( int i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
{ {
cout << i << ": (" << ModbusRTU::dat2str( reg + i ) << ") = " << (int)(ret.data[i]) cout << i << ": (" << ModbusRTU::dat2str( reg + i ) << ") = " << (int)(ret.data[i])
<< " (" << " ("
......
...@@ -79,7 +79,7 @@ int main( int argc, char* argv[], char* envp[] ) ...@@ -79,7 +79,7 @@ int main( int argc, char* argv[], char* envp[] )
while( true ) while( true )
{ {
size_t r = read(fileno(stdin), buf, sizeof(buf) - 1); ssize_t r = read(fileno(stdin), buf, sizeof(buf) - 1);
if( r > 0 ) if( r > 0 )
{ {
......
...@@ -858,11 +858,13 @@ end_private(false) ...@@ -858,11 +858,13 @@ end_private(false)
resetMsgTime = uni_atoi(init3_str(conf->getArgParam("--" + argprefix + "resetMsgTime"),conf->getProp(cnode,"resetMsgTime"),s_resetTime)); resetMsgTime = uni_atoi(init3_str(conf->getArgParam("--" + argprefix + "resetMsgTime"),conf->getProp(cnode,"resetMsgTime"),s_resetTime));
ptResetMsg.setTiming(resetMsgTime); ptResetMsg.setTiming(resetMsgTime);
smReadyTimeout = conf->getArgInt("--" + argprefix + "sm-ready-timeout","<xsl:call-template name="settings"><xsl:with-param name="varname" select="'smReadyTimeout'"/></xsl:call-template>"); int sm_tout = conf->getArgInt("--" + argprefix + "sm-ready-timeout","<xsl:call-template name="settings"><xsl:with-param name="varname" select="'smReadyTimeout'"/></xsl:call-template>");
if( smReadyTimeout == 0 ) if( sm_tout == 0 )
smReadyTimeout = 60000; smReadyTimeout = 60000;
else if( smReadyTimeout &lt; 0 ) else if( sm_tout &lt; 0 )
smReadyTimeout = UniSetTimer::WaitUpTime; smReadyTimeout = UniSetTimer::WaitUpTime;
else
smReadyTimeout = sm_tout;
smTestID = conf->getSensorID(init3_str(conf->getArgParam("--" + argprefix + "sm-test-id"),conf->getProp(cnode,"smTestID"),"")); smTestID = conf->getSensorID(init3_str(conf->getArgParam("--" + argprefix + "sm-test-id"),conf->getProp(cnode,"smTestID"),""));
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
...@@ -1267,11 +1269,13 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000)) ...@@ -1267,11 +1269,13 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000))
resetMsgTime = uni_atoi(init3_str(conf->getArgParam("--" + argprefix + "resetMsgTime"),conf->getProp(cnode,"resetMsgTime"),s_resetTime)); resetMsgTime = uni_atoi(init3_str(conf->getArgParam("--" + argprefix + "resetMsgTime"),conf->getProp(cnode,"resetMsgTime"),s_resetTime));
ptResetMsg.setTiming(resetMsgTime); ptResetMsg.setTiming(resetMsgTime);
smReadyTimeout = conf->getArgInt("--" + argprefix + "sm-ready-timeout","<xsl:call-template name="settings"><xsl:with-param name="varname" select="'smReadyTimeout'"/></xsl:call-template>"); int sm_tout = conf->getArgInt("--" + argprefix + "sm-ready-timeout","<xsl:call-template name="settings"><xsl:with-param name="varname" select="'smReadyTimeout'"/></xsl:call-template>");
if( smReadyTimeout == 0 ) if( sm_tout == 0 )
smReadyTimeout = 60000; smReadyTimeout = 60000;
else if( smReadyTimeout &lt; 0 ) else if( sm_tout &lt; 0 )
smReadyTimeout = UniSetTimer::WaitUpTime; smReadyTimeout = UniSetTimer::WaitUpTime;
else
smReadyTimeout = sm_tout;
smTestID = conf->getSensorID(init3_str(conf->getArgParam("--" + argprefix + "sm-test-id"),conf->getProp(cnode,"smTestID"),"")); smTestID = conf->getSensorID(init3_str(conf->getArgParam("--" + argprefix + "sm-test-id"),conf->getProp(cnode,"smTestID"),""));
...@@ -1454,11 +1458,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( UniSetTypes::Object ...@@ -1454,11 +1458,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( UniSetTypes::Object
{ {
<xsl:if test="normalize-space($onlymsg)=''"> <xsl:if test="normalize-space($onlymsg)=''">
</xsl:if> </xsl:if>
// приходится искуственно использовать третий параметр, SensorMessage _sm( <xsl:value-of select="@name"/>, (long)<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> );
// что-бы компилятор выбрал
// правильный(для аналоговых) конструктор у SensorMessage
IOController_i::CalibrateInfo _ci;
SensorMessage _sm( <xsl:value-of select="@name"/>, (long)<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>, _ci);
_sm.sensor_type = UniversalIO::AI; _sm.sensor_type = UniversalIO::AI;
sensorInfo(&amp;_sm); sensorInfo(&amp;_sm);
} }
......
...@@ -303,7 +303,10 @@ void DBServer_PostgreSQL::createTables( std::shared_ptr<PostgreSQLInterface>& db ...@@ -303,7 +303,10 @@ void DBServer_PostgreSQL::createTables( std::shared_ptr<PostgreSQLInterface>& db
throw Exception(); throw Exception();
} }
for( it.goChildren(); it; it.goNext() ) if( !it.goChildren() )
return;
for( ; it; it.goNext() )
{ {
if( it.getName() != "comment" ) if( it.getName() != "comment" )
{ {
......
...@@ -203,11 +203,11 @@ PostgreSQLResult::~PostgreSQLResult() ...@@ -203,11 +203,11 @@ PostgreSQLResult::~PostgreSQLResult()
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
PostgreSQLResult::PostgreSQLResult( const pqxx::result& res ) PostgreSQLResult::PostgreSQLResult( const pqxx::result& res )
{ {
for (result::const_iterator c = res.begin(); c != res.end(); ++c) for( result::const_iterator c = res.begin(); c != res.end(); ++c )
{ {
COL col; COL col;
for( pqxx::result::tuple::size_type i = 0; i < c.size(); i++ ) for( auto i = 0; i < c.size(); i++ )
col.push_back( c[i].as<string>() ); col.push_back( c[i].as<string>() );
row.push_back(col); row.push_back(col);
......
...@@ -306,7 +306,10 @@ void DBServer_SQLite::createTables( SQLiteInterface* db ) ...@@ -306,7 +306,10 @@ void DBServer_SQLite::createTables( SQLiteInterface* db )
throw Exception(); throw Exception();
} }
for( it.goChildren(); it; it.goNext() ) if( !it.goChildren() )
return;
for( ; it; it.goNext() )
{ {
if( it.getName() != "comment" ) if( it.getName() != "comment" )
{ {
......
...@@ -1569,12 +1569,15 @@ void IOControl::buildCardsList() ...@@ -1569,12 +1569,15 @@ void IOControl::buildCardsList()
UniXML::iterator it1(nnode); UniXML::iterator it1(nnode);
it1.goChildren(); it1.goChildren();
for( ; it1.getCurrent(); it1.goNext() ) if( it1.goChildren() )
{ {
if( it1.getProp("name") == conf->getLocalNodeName() ) for( ; it1.getCurrent(); it1.goNext() )
{ {
mynode = it1.getCurrent(); if( it1.getProp("name") == conf->getLocalNodeName() )
break; {
mynode = it1.getCurrent();
break;
}
} }
} }
......
...@@ -188,7 +188,13 @@ int main(int argc, char* argv[]) ...@@ -188,7 +188,13 @@ int main(int argc, char* argv[])
cout << "\r" << "data: " << setw(5) << data << " " << flush; cout << "\r" << "data: " << setw(5) << data << " " << flush;
int temp = read(fd, &buf, sizeof(buf)); ssize_t temp = read(fd, &buf, sizeof(buf));
if( temp == -1 )
{
close(fd);
cerr << "can't read from stdin.. error: " << strerror(errno) << endl;
exit(EXIT_FAILURE);
}
if(temp == 1) if(temp == 1)
readCalibr(data); readCalibr(data);
...@@ -319,9 +325,21 @@ void readCalibr(int fixed) ...@@ -319,9 +325,21 @@ void readCalibr(int fixed)
cout << " Enter calibrated value for data=" << fixed << "\n cal = " << flush; cout << " Enter calibrated value for data=" << fixed << "\n cal = " << flush;
int f = open("/dev/stdin", O_RDONLY ); int f = open("/dev/stdin", O_RDONLY );
if( f == -1 )
{
cerr << "read calibrate fail.. error: " << strerror(errno) << endl;
return;
}
memset(rbuf, 0, sizeof(rbuf)); memset(rbuf, 0, sizeof(rbuf));
int temp = read(f, &rbuf, sizeof(rbuf)); ssize_t temp = read(f, &rbuf, sizeof(rbuf));
if( temp == -1 )
{
cerr << "read calibrate fail.. error: " << strerror(errno) << endl;
close(f);
return;
}
if (temp > 1) if (temp > 1)
{ {
int s; int s;
...@@ -336,6 +354,8 @@ void readCalibr(int fixed) ...@@ -336,6 +354,8 @@ void readCalibr(int fixed)
} }
else else
cout << " you must input only any digits!" << endl; cout << " you must input only any digits!" << endl;
close(f);
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -533,7 +553,7 @@ void sortData(bool rise, bool cal) ...@@ -533,7 +553,7 @@ void sortData(bool rise, bool cal)
list<int>::iterator ite; list<int>::iterator ite;
int tt = *(temp.begin()); int tt = *(temp.begin());
for(itl = temp.end(); itl != temp.begin(); --itl) for(itl = --temp.end(); itl != temp.begin(); --itl)
{ {
if(tt == *itl)continue; if(tt == *itl)continue;
......
...@@ -12,23 +12,23 @@ using namespace UniSetTypes; ...@@ -12,23 +12,23 @@ using namespace UniSetTypes;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int main(int argc, char* argv[] ) int main(int argc, char* argv[] )
{ {
Catch::Session session; try
if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
{ {
cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl; Catch::Session session;
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("tests"); if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
return 0; {
} cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl;
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("tests");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error if( returnCode != 0 ) // Indicates a command line error
return returnCode; return returnCode;
try
{
auto conf = uniset_init(argc, argv, "lp-configure.xml"); auto conf = uniset_init(argc, argv, "lp-configure.xml");
auto act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
......
...@@ -130,7 +130,11 @@ void RTUStorage::poll( const std::shared_ptr<ModbusRTUMaster>& mb ) throw( Modbu ...@@ -130,7 +130,11 @@ void RTUStorage::poll( const std::shared_ptr<ModbusRTUMaster>& mb ) throw( Modbu
if( ret.getData(b, bits) ) if( ret.getData(b, bits) )
{ {
for( unsigned int i = 0; i < 8; i++ ) for( unsigned int i = 0; i < 8; i++ )
unio_do[i + 8 * b] = bits[i]; {
int k = i + 8 * b;
if( k<48 )
unio_do[k] = bits[i];
}
} }
} }
} }
...@@ -145,7 +149,11 @@ void RTUStorage::poll( const std::shared_ptr<ModbusRTUMaster>& mb ) throw( Modbu ...@@ -145,7 +149,11 @@ void RTUStorage::poll( const std::shared_ptr<ModbusRTUMaster>& mb ) throw( Modbu
if( ret.getData(b, bits) ) if( ret.getData(b, bits) )
{ {
for( unsigned int i = 0; i < 8; i++ ) for( unsigned int i = 0; i < 8; i++ )
unio_di[i + 8 * b] = bits[i]; {
int k = i + 8 * b;
if( k<48 )
unio_di[k] = bits[i];
}
} }
} }
} }
......
...@@ -18,24 +18,24 @@ std::shared_ptr<SharedMemory> shm; ...@@ -18,24 +18,24 @@ std::shared_ptr<SharedMemory> shm;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int main(int argc, char* argv[] ) int main(int argc, char* argv[] )
{ {
Catch::Session session; try
if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
{ {
cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl; Catch::Session session;
SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl; if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
session.showHelp("tests_mbtcpmaster"); {
return 0; cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl;
} SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("tests_mbtcpmaster");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error if( returnCode != 0 ) // Indicates a command line error
return returnCode; return returnCode;
try
{
auto conf = uniset_init(argc, argv); auto conf = uniset_init(argc, argv);
dlog()->logFile("./smtest.log"); dlog()->logFile("./smtest.log");
......
...@@ -15,24 +15,24 @@ using namespace UniSetExtensions; ...@@ -15,24 +15,24 @@ using namespace UniSetExtensions;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int main(int argc, char* argv[] ) int main(int argc, char* argv[] )
{ {
Catch::Session session; try
if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
{ {
cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl; Catch::Session session;
SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl; if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
session.showHelp("test_mbtcpmultimaster"); {
return 0; cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl;
} SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("test_mbtcpmultimaster");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error if( returnCode != 0 ) // Indicates a command line error
return returnCode; return returnCode;
try
{
auto conf = uniset_init(argc, argv); auto conf = uniset_init(argc, argv);
dlog()->logFile("./smtest.log"); dlog()->logFile("./smtest.log");
......
...@@ -15,24 +15,24 @@ using namespace UniSetExtensions; ...@@ -15,24 +15,24 @@ using namespace UniSetExtensions;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int main(int argc, char* argv[] ) int main(int argc, char* argv[] )
{ {
Catch::Session session; try
if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
{ {
cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl; Catch::Session session;
SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl; if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
session.showHelp("test_with_sm"); {
return 0; cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl;
} SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("test_with_sm");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error if( returnCode != 0 ) // Indicates a command line error
return returnCode; return returnCode;
try
{
auto conf = uniset_init(argc, argv); auto conf = uniset_init(argc, argv);
bool apart = findArgParam("--apart", argc, argv) != -1; bool apart = findArgParam("--apart", argc, argv) != -1;
......
...@@ -2,7 +2,7 @@ if HAVE_TESTS ...@@ -2,7 +2,7 @@ if HAVE_TESTS
noinst_PROGRAMS = tests noinst_PROGRAMS = tests
tests_SOURCES = NullSM.cc TestObject_SK.cc TestObject.cc tests.cc test_sm.cc tests_SOURCES = NullSM.cc TestObject_SK.h TestObject_SK.cc TestObject.cc tests.cc test_sm.cc
tests_LDADD = $(top_builddir)/lib/libUniSet2.la $(top_builddir)/extensions/lib/libUniSet2Extensions.la \ tests_LDADD = $(top_builddir)/lib/libUniSet2.la $(top_builddir)/extensions/lib/libUniSet2Extensions.la \
$(top_builddir)/extensions/SharedMemory/libUniSet2SharedMemory.la \ $(top_builddir)/extensions/SharedMemory/libUniSet2SharedMemory.la \
$(SIGC_LIBS) $(COMCPP_LIBS) $(SIGC_LIBS) $(COMCPP_LIBS)
......
...@@ -18,24 +18,24 @@ std::shared_ptr<TestObject> obj; ...@@ -18,24 +18,24 @@ std::shared_ptr<TestObject> obj;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int main(int argc, char* argv[] ) int main(int argc, char* argv[] )
{ {
Catch::Session session; try
if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
{ {
cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl; Catch::Session session;
SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl; if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
session.showHelp("tests"); {
return 0; cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl;
} SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("tests");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error if( returnCode != 0 ) // Indicates a command line error
return returnCode; return returnCode;
try
{
auto conf = uniset_init(argc, argv); auto conf = uniset_init(argc, argv);
auto shm = SharedMemory::init_smemory(argc, argv); auto shm = SharedMemory::init_smemory(argc, argv);
......
...@@ -28,6 +28,8 @@ namespace UniSetUDP ...@@ -28,6 +28,8 @@ namespace UniSetUDP
unsigned long num; unsigned long num;
long nodeID; long nodeID;
long procID; long procID;
//!\todo может лучше использовать системно-независимый unsigned long, чем size_t?
size_t dcount; /*!< количество булевых величин */ size_t dcount; /*!< количество булевых величин */
size_t acount; /*!< количество аналоговых величин */ size_t acount; /*!< количество аналоговых величин */
...@@ -35,7 +37,7 @@ namespace UniSetUDP ...@@ -35,7 +37,7 @@ namespace UniSetUDP
friend std::ostream& operator<<( std::ostream& os, UDPHeader* p ); friend std::ostream& operator<<( std::ostream& os, UDPHeader* p );
} __attribute__((packed)); } __attribute__((packed));
const unsigned long MaxPacketNum = std::numeric_limits<unsigned long>::max(); const size_t MaxPacketNum = std::numeric_limits<size_t>::max();
struct UDPAData struct UDPAData
{ {
...@@ -100,18 +102,18 @@ namespace UniSetUDP ...@@ -100,18 +102,18 @@ namespace UniSetUDP
{ {
return !((dcount < MaxDCount) && (acount < MaxACount)); return !((dcount < MaxDCount) && (acount < MaxACount));
} }
inline int dsize() const inline size_t dsize() const
{ {
return dcount; return dcount;
} }
inline int asize() const inline size_t asize() const
{ {
return acount; return acount;
} }
unsigned short getDataCRC(); unsigned short getDataCRC();
// количество байт в пакете с булевыми переменными... // количество байт в пакете с булевыми переменными...
int d_byte() const size_t d_byte() const
{ {
return dcount * sizeof(long) + dcount; return dcount * sizeof(long) + dcount;
} }
......
...@@ -158,12 +158,14 @@ TEST_CASE("[UNetUDP]: UDPMessage", "[unetudp][udpmessage]") ...@@ -158,12 +158,14 @@ TEST_CASE("[UNetUDP]: UDPMessage", "[unetudp][udpmessage]")
{ {
// создаём сообщение, преобразуем к Package.. потом обратно.. проверяём, что информация не исказилась // создаём сообщение, преобразуем к Package.. потом обратно.. проверяём, что информация не исказилась
UniSetUDP::UDPMessage u; UniSetUDP::UDPMessage u;
int a = u.addAData(100, 100); size_t a = u.addAData(100, 100);
int d = u.addDData(110, true); size_t d = u.addDData(110, true);
UniSetUDP::UDPPacket p; UniSetUDP::UDPPacket p;
size_t len = u.transport_msg(p); size_t len = u.transport_msg(p);
CHECK( len != 0 ); CHECK( len != 0 );
CHECK( a < UniSetUDP::MaxACount );
CHECK( a < UniSetUDP::MaxDCount );
UniSetUDP::UDPMessage u2(p); UniSetUDP::UDPMessage u2(p);
REQUIRE( u2.a_dat[a].id == 100 ); REQUIRE( u2.a_dat[a].id == 100 );
...@@ -194,7 +196,7 @@ TEST_CASE("[UNetUDP]: check sender", "[unetudp][sender]") ...@@ -194,7 +196,7 @@ TEST_CASE("[UNetUDP]: check sender", "[unetudp][sender]")
REQUIRE( pack.asize() == 4 ); REQUIRE( pack.asize() == 4 );
REQUIRE( pack.dsize() == 2 ); REQUIRE( pack.dsize() == 2 );
for( int i = 0; i < pack.asize(); i++ ) for( size_t i = 0; i < pack.asize(); i++ )
{ {
REQUIRE( pack.a_dat[i].val == i + 1 ); REQUIRE( pack.a_dat[i].val == i + 1 );
} }
......
...@@ -15,24 +15,24 @@ using namespace UniSetExtensions; ...@@ -15,24 +15,24 @@ using namespace UniSetExtensions;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int main(int argc, char* argv[] ) int main(int argc, char* argv[] )
{ {
Catch::Session session; try
if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
{ {
cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl; Catch::Session session;
SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl; if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
session.showHelp("test_with_sm"); {
return 0; cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl;
} SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("test_with_sm");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error if( returnCode != 0 ) // Indicates a command line error
return returnCode; return returnCode;
try
{
uniset_init(argc, argv); uniset_init(argc, argv);
UNetExchange* unet = UNetExchange::init_unetexchange(argc, argv, getSharedMemoryID()); UNetExchange* unet = UNetExchange::init_unetexchange(argc, argv, getSharedMemoryID());
......
...@@ -15,24 +15,24 @@ using namespace UniSetExtensions; ...@@ -15,24 +15,24 @@ using namespace UniSetExtensions;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int main(int argc, char* argv[] ) int main(int argc, char* argv[] )
{ {
Catch::Session session; try
if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
{ {
cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl; Catch::Session session;
SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl; if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
session.showHelp("test_with_sm"); {
return 0; cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl;
} SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("test_with_sm");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error if( returnCode != 0 ) // Indicates a command line error
return returnCode; return returnCode;
try
{
auto conf = uniset_init(argc, argv); auto conf = uniset_init(argc, argv);
bool apart = findArgParam("--apart", argc, argv) != -1; bool apart = findArgParam("--apart", argc, argv) != -1;
......
...@@ -166,9 +166,6 @@ int main(int argc, char* argv[]) ...@@ -166,9 +166,6 @@ int main(int argc, char* argv[])
return -1; return -1;
} }
if( tout < 0 )
tout = TIMEOUT_INF;
ost::Thread::setException(ost::Thread::throwException); ost::Thread::setException(ost::Thread::throwException);
try try
......
...@@ -65,6 +65,12 @@ struct IOBase ...@@ -65,6 +65,12 @@ struct IOBase
si.node = UniSetTypes::DefaultObjectId; si.node = UniSetTypes::DefaultObjectId;
cal.minRaw = cal.maxRaw = cal.minCal = cal.maxCal = cal.precision = 0; cal.minRaw = cal.maxRaw = cal.minCal = cal.maxCal = cal.precision = 0;
ti.invert = false; ti.invert = false;
ti.hilimit = 0;
ti.lowlimit = 0;
ti.id = UniSetTypes::DefaultObjectId;
ti.state = IONotifyController_i::NormalThreshold;
ti.tv_sec = 0;
ti.tv_usec = 0;
} }
bool check_channel_break( long val ); /*!< проверка обрыва провода */ bool check_channel_break( long val ); /*!< проверка обрыва провода */
......
...@@ -293,6 +293,7 @@ namespace MTR ...@@ -293,6 +293,7 @@ namespace MTR
T5( long v ) T5( long v )
{ {
raw.lval = v; raw.lval = v;
val = raw.u2.val * pow( (long)10, (long)raw.u2.exp );
} }
T5( const ModbusRTU::ModbusData* data, int size ) T5( const ModbusRTU::ModbusData* data, int size )
...@@ -355,6 +356,7 @@ namespace MTR ...@@ -355,6 +356,7 @@ namespace MTR
T6( long v ) T6( long v )
{ {
raw.lval = v; raw.lval = v;
val = raw.u2.val * pow( (long)10, (long)raw.u2.exp );
} }
T6( const ModbusRTU::ModbusData* data, int size ) T6( const ModbusRTU::ModbusData* data, int size )
...@@ -381,7 +383,7 @@ namespace MTR ...@@ -381,7 +383,7 @@ namespace MTR
return mtT6; return mtT6;
} }
// ------------------------------------------ // ------------------------------------------
double val; double val = { 0.0 };
T6mem raw; T6mem raw;
}; };
std::ostream& operator<<(std::ostream& os, T6& t ); std::ostream& operator<<(std::ostream& os, T6& t );
...@@ -417,6 +419,7 @@ namespace MTR ...@@ -417,6 +419,7 @@ namespace MTR
T7( const long v ) T7( const long v )
{ {
raw.lval = v; raw.lval = v;
val = raw.u2.val * pow( (long)10, (long) - 4 );
} }
T7( const ModbusRTU::ModbusData* data, int size ) T7( const ModbusRTU::ModbusData* data, int size )
...@@ -443,7 +446,7 @@ namespace MTR ...@@ -443,7 +446,7 @@ namespace MTR
return mtT7; return mtT7;
} }
// ------------------------------------------ // ------------------------------------------
double val; double val = { 0.0 };
T7mem raw; T7mem raw;
}; };
std::ostream& operator<<(std::ostream& os, T7& t ); std::ostream& operator<<(std::ostream& os, T7& t );
......
...@@ -69,6 +69,8 @@ void SingleProcess::set_signals( bool ask ) ...@@ -69,6 +69,8 @@ void SingleProcess::set_signals( bool ask )
struct sigaction act, oact; struct sigaction act, oact;
sigemptyset(&act.sa_mask); sigemptyset(&act.sa_mask);
act.sa_flags = SA_RESETHAND;
// добавляем сигналы, которые будут игнорироваться // добавляем сигналы, которые будут игнорироваться
// при обработке сигнала // при обработке сигнала
sigaddset(&act.sa_mask, SIGINT); sigaddset(&act.sa_mask, SIGINT);
......
...@@ -6,10 +6,10 @@ ...@@ -6,10 +6,10 @@
int main( int argc, char* argv[] ) int main( int argc, char* argv[] )
{ {
Catch::Session session;
try try
{ {
Catch::Session session;
UniSetTypes::uniset_init(argc, argv); UniSetTypes::uniset_init(argc, argv);
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
......
...@@ -45,24 +45,24 @@ shared_ptr<SMInterface> smiInstance() ...@@ -45,24 +45,24 @@ shared_ptr<SMInterface> smiInstance()
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int main(int argc, char* argv[] ) int main(int argc, char* argv[] )
{ {
Catch::Session session; try
if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
{ {
cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl; Catch::Session session;
SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl; if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
session.showHelp("test_with_sm"); {
return 0; cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl;
} SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("test_with_sm");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error if( returnCode != 0 ) // Indicates a command line error
return returnCode; return returnCode;
try
{
auto conf = uniset_init(argc, argv); auto conf = uniset_init(argc, argv);
shm = SharedMemory::init_smemory(argc, argv); shm = SharedMemory::init_smemory(argc, argv);
......
...@@ -102,10 +102,7 @@ class HourGlass ...@@ -102,10 +102,7 @@ class HourGlass
if( cur > _size ) if( cur > _size )
cur = _size; cur = _size;
_sand -= cur; _sand = ( _sand > cur ) ? (_sand - cur) : 0;
if( _sand < 0 )
_sand = 0;
t.setTiming(cur); t.setTiming(cur);
} }
......
...@@ -542,7 +542,7 @@ namespace ModbusRTU ...@@ -542,7 +542,7 @@ namespace ModbusRTU
// преобразовании в ModbusMessage. // преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно. // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg() // Используйте специальную функцию transport_msg()
int count = { 0 }; /*!< фактическое количество данных в сообщении */ size_t count = { 0 }; /*!< фактическое количество данных в сообщении */
}; };
std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage& m ); std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage& m );
...@@ -633,7 +633,7 @@ namespace ModbusRTU ...@@ -633,7 +633,7 @@ namespace ModbusRTU
// преобразовании в ModbusMessage. // преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно. // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg() // Используйте специальную функцию transport_msg()
int count = { 0 }; /*!< фактическое количество данных в сообщении */ size_t count = { 0 }; /*!< фактическое количество данных в сообщении */
}; };
std::ostream& operator<<(std::ostream& os, ReadInputRetMessage& m ); std::ostream& operator<<(std::ostream& os, ReadInputRetMessage& m );
...@@ -1291,7 +1291,7 @@ namespace ModbusRTU ...@@ -1291,7 +1291,7 @@ namespace ModbusRTU
// преобразовании в ModbusMessage. // преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно. // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg() // Используйте специальную функцию transport_msg()
int count = { 0 }; /*!< фактическое количество данных в сообщении */ size_t count = { 0 }; /*!< фактическое количество данных в сообщении */
}; };
std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage& m ); std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage& m );
...@@ -1440,7 +1440,7 @@ namespace ModbusRTU ...@@ -1440,7 +1440,7 @@ namespace ModbusRTU
// Это поле не входит в стандарт modbus // Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при // оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage. // преобразовании в ModbusMessage.
unsigned int count = { 0 }; /*!< фактическое количество данных в сообщении */ size_t count = { 0 }; /*!< фактическое количество данных в сообщении */
}; };
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
...@@ -1484,7 +1484,7 @@ namespace ModbusRTU ...@@ -1484,7 +1484,7 @@ namespace ModbusRTU
bool checkFormat(); bool checkFormat();
// это поле служебное и не используется в релальном обмене // это поле служебное и не используется в релальном обмене
int count = { 0 }; /*!< фактическое количество данных */ size_t count = { 0 }; /*!< фактическое количество данных */
}; };
std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage& m ); std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage& m );
......
...@@ -28,9 +28,9 @@ void pyUInterface::uniset_init( int argc, char* argv[], const char* xmlfile )thr ...@@ -28,9 +28,9 @@ void pyUInterface::uniset_init( int argc, char* argv[], const char* xmlfile )thr
{ {
throw UException(ex.what()); throw UException(ex.what());
} }
catch( ... ) catch( std::exception& ex )
{ {
throw UException(); throw UException(ex.what());
} }
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -70,9 +70,9 @@ long pyUInterface::getValue( long id )throw(UException) ...@@ -70,9 +70,9 @@ long pyUInterface::getValue( long id )throw(UException)
{ {
throw UException(ex.what()); throw UException(ex.what());
} }
catch( ... ) catch( std::exception& ex )
{ {
throw UException("(getValue): catch..."); throw UException(ex.what());
} }
throw UException("(getValue): unknown error"); throw UException("(getValue): unknown error");
...@@ -114,9 +114,9 @@ void pyUInterface::setValue( long id, long val )throw(UException) ...@@ -114,9 +114,9 @@ void pyUInterface::setValue( long id, long val )throw(UException)
{ {
throw UException(ex.what()); throw UException(ex.what());
} }
catch( ... ) catch( std::exception& ex )
{ {
throw UException("(setValue): catch..."); throw UException(ex.what());
} }
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -135,7 +135,7 @@ const char* pyUInterface::getName( long id ) ...@@ -135,7 +135,7 @@ const char* pyUInterface::getName( long id )
auto conf = UniSetTypes::uniset_conf(); auto conf = UniSetTypes::uniset_conf();
if( conf ) if( conf )
return conf->oind->getMapName(id).c_str(); return UniSetTypes::uni_strdup(conf->oind->getMapName(id));
return ""; return "";
} }
...@@ -145,7 +145,7 @@ const char* pyUInterface::getShortName( long id ) ...@@ -145,7 +145,7 @@ const char* pyUInterface::getShortName( long id )
auto conf = UniSetTypes::uniset_conf(); auto conf = UniSetTypes::uniset_conf();
if( conf ) if( conf )
return ORepHelpers::getShortName(conf->oind->getMapName(id)).c_str(); return UniSetTypes::uni_strdup(ORepHelpers::getShortName(conf->oind->getMapName(id)));
return ""; return "";
} }
...@@ -155,7 +155,7 @@ const char* pyUInterface::getTextName( long id ) ...@@ -155,7 +155,7 @@ const char* pyUInterface::getTextName( long id )
auto conf = UniSetTypes::uniset_conf(); auto conf = UniSetTypes::uniset_conf();
if( conf ) if( conf )
return conf->oind->getTextName(id).c_str(); return UniSetTypes::uni_strdup(conf->oind->getTextName(id));
return ""; return "";
} }
...@@ -165,7 +165,7 @@ const char* pyUInterface::getConfFileName() ...@@ -165,7 +165,7 @@ const char* pyUInterface::getConfFileName()
auto conf = UniSetTypes::uniset_conf(); auto conf = UniSetTypes::uniset_conf();
if( conf ) if( conf )
return conf->getConfFileName().c_str(); return UniSetTypes::uni_strdup(conf->getConfFileName());
return ""; return "";
......
...@@ -51,7 +51,7 @@ const char* UConnector::getConfFileName() ...@@ -51,7 +51,7 @@ const char* UConnector::getConfFileName()
{ {
// return xmlfile; // return xmlfile;
if( conf ) if( conf )
return conf->getConfFileName().c_str(); return UniSetTypes::uni_strdup(conf->getConfFileName());
return ""; return "";
...@@ -73,12 +73,10 @@ long UConnector::getValue( long id, long node )throw(UException) ...@@ -73,12 +73,10 @@ long UConnector::getValue( long id, long node )throw(UException)
{ {
throw UException(ex.what()); throw UException(ex.what());
} }
catch( ... ) catch( std::exception& ex )
{ {
throw UException("(getValue): catch..."); throw UException(ex.what());
} }
throw UException("(getValue): unknown error");
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
void UConnector::setValue( long id, long val, long node )throw(UException) void UConnector::setValue( long id, long val, long node )throw(UException)
...@@ -98,9 +96,9 @@ void UConnector::setValue( long id, long val, long node )throw(UException) ...@@ -98,9 +96,9 @@ void UConnector::setValue( long id, long val, long node )throw(UException)
{ {
throw UException(ex.what()); throw UException(ex.what());
} }
catch( ... ) catch( std::exception& ex )
{ {
throw UException("(setValue): catch..."); throw UException(ex.what());
} }
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -123,7 +121,7 @@ long UConnector::getNodeID( const char* name ) ...@@ -123,7 +121,7 @@ long UConnector::getNodeID( const char* name )
const char* UConnector::getName( long id ) const char* UConnector::getName( long id )
{ {
if( conf ) if( conf )
return conf->oind->getMapName(id).c_str(); return UniSetTypes::uni_strdup(conf->oind->getMapName(id));
return ""; return "";
} }
...@@ -131,7 +129,7 @@ const char* UConnector::getName( long id ) ...@@ -131,7 +129,7 @@ const char* UConnector::getName( long id )
const char* UConnector::getShortName( long id ) const char* UConnector::getShortName( long id )
{ {
if( conf ) if( conf )
return ORepHelpers::getShortName(conf->oind->getMapName(id)).c_str(); return UniSetTypes::uni_strdup(ORepHelpers::getShortName(conf->oind->getMapName(id)));
return ""; return "";
} }
...@@ -139,7 +137,7 @@ const char* UConnector::getShortName( long id ) ...@@ -139,7 +137,7 @@ const char* UConnector::getShortName( long id )
const char* UConnector::getTextName( long id ) const char* UConnector::getTextName( long id )
{ {
if( conf ) if( conf )
return conf->oind->getTextName(id).c_str(); return UniSetTypes::uni_strdup(conf->oind->getTextName(id));
return ""; return "";
} }
......
...@@ -997,8 +997,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -997,8 +997,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
while( (rlen+2) < sizeof(rbuf) && onum < mPreRDI.objNum ) while( (rlen+2) < sizeof(rbuf) && onum < mPreRDI.objNum )
{ {
// сперва получаем два байта, для определения длины последующих данных // сперва получаем два байта, для определения длины последующих данных
int szDataLen = 2; // object id + len size_t szDataLen = 2; // object id + len
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])), szDataLen); size_t rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])), szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
{ {
......
...@@ -260,7 +260,7 @@ ModbusMessage ErrorRetMessage::transport_msg() ...@@ -260,7 +260,7 @@ ModbusMessage ErrorRetMessage::transport_msg()
memcpy(&mm.data, &ecode, sizeof(ecode)); memcpy(&mm.data, &ecode, sizeof(ecode));
int ind = sizeof(ecode); size_t ind = sizeof(ecode);
// пересчитываем CRC по перевёрнутым данным // пересчитываем CRC по перевёрнутым данным
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + ind ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + ind );
...@@ -308,7 +308,7 @@ ModbusMessage ReadCoilMessage::transport_msg() ...@@ -308,7 +308,7 @@ ModbusMessage ReadCoilMessage::transport_msg()
// копируем данные (переворачиваем байты) // копируем данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(count) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(count) };
int last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! ) size_t last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! )
// копируем // копируем
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
...@@ -509,7 +509,7 @@ void ReadCoilRetMessage::init( ModbusMessage& m ) ...@@ -509,7 +509,7 @@ void ReadCoilRetMessage::init( ModbusMessage& m )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ReadCoilRetMessage::getDataLen( ModbusMessage& m ) int ReadCoilRetMessage::getDataLen( ModbusMessage& m )
{ {
if( m.len < 0 ) if( m.len == 0 )
return 0; return 0;
return m.data[0]; return m.data[0];
...@@ -572,7 +572,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg() ...@@ -572,7 +572,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg()
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
memcpy(&mm.data, &bcnt, sizeof(bcnt)); memcpy(&mm.data, &bcnt, sizeof(bcnt));
int ind = sizeof(bcnt); size_t ind = sizeof(bcnt);
// копируем данные // копируем данные
memcpy(&(mm.data[ind]), data, bcnt); memcpy(&(mm.data[ind]), data, bcnt);
...@@ -627,7 +627,7 @@ ModbusMessage ReadInputStatusMessage::transport_msg() ...@@ -627,7 +627,7 @@ ModbusMessage ReadInputStatusMessage::transport_msg()
// копируем данные (переворачиваем байты) // копируем данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(count) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(count) };
int last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! ) size_t last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! )
// копируем // копируем
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
...@@ -711,7 +711,7 @@ void ReadInputStatusRetMessage::init( ModbusMessage& m ) ...@@ -711,7 +711,7 @@ void ReadInputStatusRetMessage::init( ModbusMessage& m )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ReadInputStatusRetMessage::getDataLen( ModbusMessage& m ) int ReadInputStatusRetMessage::getDataLen( ModbusMessage& m )
{ {
if( m.len < 0 ) if( m.len == 0 )
return 0; return 0;
return m.data[0]; return m.data[0];
...@@ -774,7 +774,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg() ...@@ -774,7 +774,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg()
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
memcpy(&mm.data, &bcnt, sizeof(bcnt)); memcpy(&mm.data, &bcnt, sizeof(bcnt));
int ind = sizeof(bcnt); size_t ind = sizeof(bcnt);
// копируем данные // копируем данные
memcpy(&(mm.data[ind]), data, bcnt); memcpy(&(mm.data[ind]), data, bcnt);
...@@ -830,7 +830,7 @@ ModbusMessage ReadOutputMessage::transport_msg() ...@@ -830,7 +830,7 @@ ModbusMessage ReadOutputMessage::transport_msg()
// копируем данные (переворачиваем байты) // копируем данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(count) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(count) };
int last(sizeof(d)); // индекс в массиве данных ( байтовый массив!!! ) size_t last(sizeof(d)); // индекс в массиве данных ( байтовый массив!!! )
// копируем // копируем
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
...@@ -929,7 +929,7 @@ void ReadOutputRetMessage::init( ModbusMessage& m ) ...@@ -929,7 +929,7 @@ void ReadOutputRetMessage::init( ModbusMessage& m )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ReadOutputRetMessage::getDataLen( ModbusMessage& m ) int ReadOutputRetMessage::getDataLen( ModbusMessage& m )
{ {
if( m.len < 0 ) if( m.len == 0 )
return 0; return 0;
return m.data[0]; return m.data[0];
...@@ -974,7 +974,7 @@ ModbusMessage ReadOutputRetMessage::transport_msg() ...@@ -974,7 +974,7 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
int ind = 0; size_t ind = 0;
bcnt = count * sizeof(ModbusData); bcnt = count * sizeof(ModbusData);
// copy bcnt // copy bcnt
...@@ -982,28 +982,24 @@ ModbusMessage ReadOutputRetMessage::transport_msg() ...@@ -982,28 +982,24 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
ind += sizeof(bcnt); ind += sizeof(bcnt);
// копируем данные // копируем данные
// int dlen = count*sizeof(ModbusData); if( count > 0 )
// прямое копирование {
// memcpy(&(mm.data[sizeof(bcnt)]),data,dlen); // Создаём временно массив, переворачиваем байты
ModbusData* dtmp = new ModbusData[count];
// Создаём временно массив, переворачиваем байты
ModbusData* dtmp = new ModbusData[count];
for( ssize_t i = 0; i < count; i++ ) for( size_t i = 0; i < count; i++ )
dtmp[i] = SWAPSHORT(data[i]); dtmp[i] = SWAPSHORT(data[i]);
// копируем // копируем
memcpy(&(mm.data[ind]), dtmp, bcnt); memcpy(&(mm.data[ind]), dtmp, bcnt);
delete[] dtmp; delete[] dtmp;
ind += bcnt;
ind += bcnt;
}
// пересчитываем CRC по перевёрнутым данным // пересчитываем CRC по перевёрнутым данным
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + sizeof(bcnt) + bcnt ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + sizeof(bcnt) + bcnt );
// crc = SWAPSHORT(crc);
// копируем CRC (последний элемент). Без переворачивания... // копируем CRC (последний элемент). Без переворачивания...
memcpy(&(mm.data[ind]), &crc, szCRC); memcpy(&(mm.data[ind]), &crc, szCRC);
ind += szCRC; ind += szCRC;
...@@ -1051,7 +1047,7 @@ ModbusMessage ReadInputMessage::transport_msg() ...@@ -1051,7 +1047,7 @@ ModbusMessage ReadInputMessage::transport_msg()
// копируем данные (переворачиваем байты) // копируем данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(count) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(count) };
int last(sizeof(d)); // индекс в массиве данных ( байтовый массив!!! ) size_t last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! )
// копируем // копируем
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
...@@ -1145,13 +1141,13 @@ void ReadInputRetMessage::init( ModbusMessage& m ) ...@@ -1145,13 +1141,13 @@ void ReadInputRetMessage::init( ModbusMessage& m )
void ReadInputRetMessage::swapData() void ReadInputRetMessage::swapData()
{ {
// переворачиваем данные // переворачиваем данные
for( ssize_t i = 0; i < count; i++ ) for( size_t i = 0; i < count; i++ )
data[i] = SWAPSHORT(data[i]); data[i] = SWAPSHORT(data[i]);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ReadInputRetMessage::getDataLen( ModbusMessage& m ) int ReadInputRetMessage::getDataLen( ModbusMessage& m )
{ {
if( m.len < 0 ) if( m.len == 0 )
return 0; return 0;
return m.data[0]; return m.data[0];
...@@ -1191,26 +1187,28 @@ ModbusMessage ReadInputRetMessage::transport_msg() ...@@ -1191,26 +1187,28 @@ ModbusMessage ReadInputRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
int ind = 0; size_t ind = 0;
bcnt = count * sizeof(ModbusData); bcnt = count * sizeof(ModbusData);
// copy bcnt // copy bcnt
memcpy(&mm.data, &bcnt, sizeof(bcnt)); memcpy(&mm.data, &bcnt, sizeof(bcnt));
ind += sizeof(bcnt); ind += sizeof(bcnt);
// Создаём временно массив, переворачиваем байты if( count > 0 )
ModbusData* dtmp = new ModbusData[count]; {
// Создаём временно массив, переворачиваем байты
for( ssize_t i = 0; i < count; i++ ) ModbusData* dtmp = new ModbusData[count];
dtmp[i] = SWAPSHORT(data[i]);
// копируем for( size_t i = 0; i < count; i++ )
memcpy(&(mm.data[ind]), dtmp, bcnt); dtmp[i] = SWAPSHORT(data[i]);
delete[] dtmp; // копируем
memcpy(&(mm.data[ind]), dtmp, bcnt);
ind += bcnt; delete[] dtmp;
ind += bcnt;
}
// пересчитываем CRC по перевёрнутым данным // пересчитываем CRC по перевёрнутым данным
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + sizeof(bcnt) + bcnt ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + sizeof(bcnt) + bcnt );
...@@ -1315,7 +1313,7 @@ ModbusMessage ForceCoilsMessage::transport_msg() ...@@ -1315,7 +1313,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
// копируем заголовок // копируем заголовок
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
int ind = 0; size_t ind = 0;
// данные (переворачиваем байты) // данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(quant) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(quant) };
...@@ -1403,7 +1401,7 @@ size_t ForceCoilsMessage::szData() ...@@ -1403,7 +1401,7 @@ size_t ForceCoilsMessage::szData()
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ForceCoilsMessage::getDataLen( ModbusMessage& m ) int ForceCoilsMessage::getDataLen( ModbusMessage& m )
{ {
if( m.len < 0 ) if( m.len == 0 )
return 0; return 0;
ForceCoilsMessage wm(m); ForceCoilsMessage wm(m);
...@@ -1490,7 +1488,7 @@ ModbusMessage ForceCoilsRetMessage::transport_msg() ...@@ -1490,7 +1488,7 @@ ModbusMessage ForceCoilsRetMessage::transport_msg()
// данные (переворачиваем байты) // данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(quant) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(quant) };
int last(sizeof(d)); size_t last = sizeof(d);
// копируем // копируем
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
...@@ -1550,7 +1548,7 @@ ModbusMessage WriteOutputMessage::transport_msg() ...@@ -1550,7 +1548,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
// копируем заголовок // копируем заголовок
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
int ind = 0; size_t ind = 0;
// данные (переворачиваем байты) // данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(quant) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(quant) };
...@@ -1567,7 +1565,7 @@ ModbusMessage WriteOutputMessage::transport_msg() ...@@ -1567,7 +1565,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
// Создаём временно массив, переворачиваем байты // Создаём временно массив, переворачиваем байты
ModbusData* dtmp = new ModbusData[quant]; ModbusData* dtmp = new ModbusData[quant];
for( ssize_t i = 0; i < quant; i++ ) for( size_t i = 0; i < quant; i++ )
dtmp[i] = SWAPSHORT(data[i]); dtmp[i] = SWAPSHORT(data[i]);
// копируем данные // копируем данные
...@@ -1749,7 +1747,7 @@ ModbusMessage WriteOutputRetMessage::transport_msg() ...@@ -1749,7 +1747,7 @@ ModbusMessage WriteOutputRetMessage::transport_msg()
// данные (переворачиваем байты) // данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(quant) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(quant) };
int last(sizeof(d)); size_t last = sizeof(d);
// копируем // копируем
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
...@@ -1788,7 +1786,7 @@ ModbusMessage ForceSingleCoilMessage::transport_msg() ...@@ -1788,7 +1786,7 @@ ModbusMessage ForceSingleCoilMessage::transport_msg()
ModbusMessage mm; ModbusMessage mm;
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(data) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(data) };
int last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! ) size_t last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! )
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
// пересчитываем CRC по перевёрнутым данным // пересчитываем CRC по перевёрнутым данным
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + last ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + last );
...@@ -1917,7 +1915,7 @@ ModbusMessage ForceSingleCoilRetMessage::transport_msg() ...@@ -1917,7 +1915,7 @@ ModbusMessage ForceSingleCoilRetMessage::transport_msg()
// копируем данные (переворачиваем байты) // копируем данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(data) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(data) };
int last(sizeof(d)); // индекс в массиве данных ( байтовый массив!!! ) size_t last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! )
// копируем // копируем
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
...@@ -1959,7 +1957,7 @@ ModbusMessage WriteSingleOutputMessage::transport_msg() ...@@ -1959,7 +1957,7 @@ ModbusMessage WriteSingleOutputMessage::transport_msg()
ModbusMessage mm; ModbusMessage mm;
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(data) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(data) };
int last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! ) size_t last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! )
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
// пересчитываем CRC по перевёрнутым данным // пересчитываем CRC по перевёрнутым данным
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + last ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + last );
...@@ -2095,7 +2093,7 @@ ModbusMessage WriteSingleOutputRetMessage::transport_msg() ...@@ -2095,7 +2093,7 @@ ModbusMessage WriteSingleOutputRetMessage::transport_msg()
// копируем данные (переворачиваем байты) // копируем данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(data) }; ModbusData d[2] = { SWAPSHORT(start), SWAPSHORT(data) };
int last(sizeof(d)); // индекс в массиве данных ( байтовый массив!!! ) size_t last = sizeof(d); // индекс в массиве данных ( байтовый массив!!! )
// копируем // копируем
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
...@@ -2217,7 +2215,7 @@ void DiagnosticMessage::init( ModbusMessage& m ) ...@@ -2217,7 +2215,7 @@ void DiagnosticMessage::init( ModbusMessage& m )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int DiagnosticMessage::getDataLen( ModbusMessage& m ) int DiagnosticMessage::getDataLen( ModbusMessage& m )
{ {
if( m.len < 0 ) if( m.len == 0 )
return 0; return 0;
// data[0] = subfunction // data[0] = subfunction
...@@ -2267,24 +2265,27 @@ ModbusMessage DiagnosticMessage::transport_msg() ...@@ -2267,24 +2265,27 @@ ModbusMessage DiagnosticMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
int ind = 0; size_t ind = 0;
// copy bcnt // copy bcnt
ModbusData d = SWAPSHORT(subf); ModbusData d = SWAPSHORT(subf);
memcpy(&mm.data, &d, sizeof(d)); memcpy(&mm.data, &d, sizeof(d));
ind += sizeof(subf); ind += sizeof(subf);
// Создаём временно массив, переворачиваем байты if( count > 0 )
ModbusData* dtmp = new ModbusData[count]; {
// Создаём временно массив, переворачиваем байты
ModbusData* dtmp = new ModbusData[count];
for( ssize_t i = 0; i < count; i++ ) for( ssize_t i = 0; i < count; i++ )
dtmp[i] = SWAPSHORT(data[i]); dtmp[i] = SWAPSHORT(data[i]);
// копируем // копируем
memcpy(&(mm.data[ind]), dtmp, sizeof(ModbusData)*count); memcpy(&(mm.data[ind]), dtmp, sizeof(ModbusData)*count);
delete[] dtmp; delete[] dtmp;
ind += sizeof(ModbusData) * count; ind += sizeof(ModbusData) * count;
}
// пересчитываем CRC по перевёрнутым данным // пересчитываем CRC по перевёрнутым данным
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + sizeof(subf) + sizeof(ModbusData) * count ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + sizeof(subf) + sizeof(ModbusData) * count );
...@@ -2380,7 +2381,7 @@ ModbusMessage MEIMessageRDI::transport_msg() ...@@ -2380,7 +2381,7 @@ ModbusMessage MEIMessageRDI::transport_msg()
mm.data[0] = type; mm.data[0] = type;
mm.data[1] = devID; mm.data[1] = devID;
mm.data[2] = objID; mm.data[2] = objID;
int ind = 3; size_t ind = 3;
// пересчитываем CRC по перевёрнутым данным // пересчитываем CRC по перевёрнутым данным
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + ind ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + ind );
...@@ -2606,7 +2607,7 @@ ModbusMessage MEIMessageRetRDI::transport_msg() ...@@ -2606,7 +2607,7 @@ ModbusMessage MEIMessageRetRDI::transport_msg()
mm.data[3] = mf; mm.data[3] = mf;
mm.data[4] = objID; mm.data[4] = objID;
mm.data[5] = objNum; mm.data[5] = objNum;
int ind = 6; size_t ind = 6;
for( auto it = dlist.begin(); it != dlist.end() && ind <= MAXLENPACKET; ++it ) for( auto it = dlist.begin(); it != dlist.end() && ind <= MAXLENPACKET; ++it )
{ {
...@@ -2762,7 +2763,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg() ...@@ -2762,7 +2763,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
int ind = 0; size_t ind = 0;
bcnt = count * sizeof(ModbusData); bcnt = count * sizeof(ModbusData);
// copy bcnt // copy bcnt
...@@ -2772,18 +2773,21 @@ ModbusMessage JournalCommandRetMessage::transport_msg() ...@@ -2772,18 +2773,21 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
// -------------------- // --------------------
// копируем данные // копируем данные
// -------------------- // --------------------
// копирование с переворотом данных (для ModbusData) if( count > 0 )
ModbusData* dtmp = new ModbusData[count]; {
// копирование с переворотом данных (для ModbusData)
ModbusData* dtmp = new ModbusData[count];
for( ssize_t i = 0; i < count; i++ ) for( size_t i = 0; i < count; i++ )
dtmp[i] = SWAPSHORT(data[i]); dtmp[i] = SWAPSHORT(data[i]);
// копируем // копируем
memcpy(&(mm.data[ind]), dtmp, bcnt); memcpy(&(mm.data[ind]), dtmp, bcnt);
delete[] dtmp; delete[] dtmp;
ind += bcnt; ind += bcnt;
}
// пересчитываем CRC по данным // пересчитываем CRC по данным
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + ind ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader + ind );
...@@ -3025,7 +3029,7 @@ ModbusMessage SetDateTimeMessage::transport_msg() ...@@ -3025,7 +3029,7 @@ ModbusMessage SetDateTimeMessage::transport_msg()
mm.data[5] = year; mm.data[5] = year;
mm.data[6] = century; mm.data[6] = century;
*/ */
int bcnt = 7; size_t bcnt = 7;
memcpy( mm.data, &hour, bcnt ); memcpy( mm.data, &hour, bcnt );
// пересчитываем CRC // пересчитываем CRC
...@@ -3099,7 +3103,7 @@ ModbusMessage SetDateTimeRetMessage::transport_msg() ...@@ -3099,7 +3103,7 @@ ModbusMessage SetDateTimeRetMessage::transport_msg()
mm.data[5] = year; mm.data[5] = year;
mm.data[6] = century; mm.data[6] = century;
*/ */
int bcnt = 7; size_t bcnt = 7;
memcpy( mm.data, &hour, bcnt ); memcpy( mm.data, &hour, bcnt );
// пересчитываем CRC // пересчитываем CRC
...@@ -3211,7 +3215,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg() ...@@ -3211,7 +3215,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
int ind = 0; size_t ind = 0;
bcnt = count * sizeof(ModbusByte); bcnt = count * sizeof(ModbusByte);
// copy bcnt // copy bcnt
...@@ -3277,7 +3281,7 @@ void ReadFileRecordMessage::init( ModbusMessage& m ) ...@@ -3277,7 +3281,7 @@ void ReadFileRecordMessage::init( ModbusMessage& m )
count = bcnt / sizeof(SubRequest); count = bcnt / sizeof(SubRequest);
for( ssize_t i = 0; i < count; i++ ) for( size_t i = 0; i < count; i++ )
{ {
data[i].numfile = SWAPSHORT(data[i].numfile); data[i].numfile = SWAPSHORT(data[i].numfile);
data[i].numrec = SWAPSHORT(data[i].numrec); data[i].numrec = SWAPSHORT(data[i].numrec);
...@@ -3329,7 +3333,7 @@ ModbusMessage FileTransferMessage::transport_msg() ...@@ -3329,7 +3333,7 @@ ModbusMessage FileTransferMessage::transport_msg()
// копируем данные (переворачиваем байты) // копируем данные (переворачиваем байты)
ModbusData d[2] = { SWAPSHORT(numfile), SWAPSHORT(numpacket) }; ModbusData d[2] = { SWAPSHORT(numfile), SWAPSHORT(numpacket) };
int last = sizeof(d); size_t last = sizeof(d);
memcpy(mm.data, &d, last); memcpy(mm.data, &d, last);
// пересчитываем CRC по перевёрнутым данным // пересчитываем CRC по перевёрнутым данным
...@@ -3469,7 +3473,7 @@ ModbusMessage FileTransferRetMessage::transport_msg() ...@@ -3469,7 +3473,7 @@ ModbusMessage FileTransferRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm, this, szModbusHeader); memcpy(&mm, this, szModbusHeader);
int ind = 0; size_t ind = 0;
bcnt = szData() - szCRC - 1; // -1 - это сам байт содержащий количество байт (bcnt)... bcnt = szData() - szCRC - 1; // -1 - это сам байт содержащий количество байт (bcnt)...
// copy bcnt // copy bcnt
......
...@@ -928,7 +928,6 @@ namespace UniSetTypes ...@@ -928,7 +928,6 @@ namespace UniSetTypes
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
string Configuration::getRepSectionName( const string& sec, xmlNode* secnode ) string Configuration::getRepSectionName( const string& sec, xmlNode* secnode )
{ {
secnode = 0;
xmlNode* node = unixml->findNode(unixml->getFirstNode(), sec); xmlNode* node = unixml->findNode(unixml->getFirstNode(), sec);
if( node == NULL ) if( node == NULL )
......
...@@ -6,10 +6,10 @@ ...@@ -6,10 +6,10 @@
int main( int argc, char* argv[] ) int main( int argc, char* argv[] )
{ {
Catch::Session session;
try try
{ {
Catch::Session session;
UniSetTypes::uniset_init(argc, argv); UniSetTypes::uniset_init(argc, argv);
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore ); int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment