Commit 75e7ac27 authored by Pavel Vainerman's avatar Pavel Vainerman

fixes afer coverity scan (https://scan.coverity.com)

parent 8abc23cb
......@@ -2162,7 +2162,7 @@ namespace uniset
{
p.nbyte = uniset::uni_atoi(sbyte.c_str());
if( p.nbyte < 0 || p.nbyte > VTypes::Byte::bsize )
if( p.nbyte > VTypes::Byte::bsize )
{
mbwarn << myname << "(initRSProperty): BAD nbyte=" << p.nbyte
<< ". (0 >= nbyte < " << VTypes::Byte::bsize << ")." << endl;
......
......@@ -95,10 +95,10 @@ namespace uniset
public IOBase
{
// only for RTU
short nbit; /*!< bit number (-1 - not used) */
int16_t nbit; /*!< bit number (-1 - not used) */
VTypes::VType vType; /*!< type of value */
unsigned short rnum; /*!< count of registers */
unsigned short nbyte; /*!< byte number (1-2) */
uint16_t rnum; /*!< count of registers */
uint16_t nbyte; /*!< byte number (1-2) */
RSProperty():
nbit(-1), vType(VTypes::vtUnknown),
......
......@@ -204,21 +204,36 @@ MBTCPMultiMaster::~MBTCPMultiMaster()
{
if( pollThread )
{
try
{
pollThread->stop();
if( pollThread->isRunning() )
pollThread->join();
}
catch( Poco::NullPointerException& ex )
{
}
}
if( checkThread )
{
try
{
checkThread->stop();
if( checkThread->isRunning() )
checkThread->join();
}
catch( Poco::NullPointerException& ex )
{
}
}
mbi = mblist.rend();
}
// -----------------------------------------------------------------------------
std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
......@@ -504,6 +519,7 @@ void MBTCPMultiMaster::check_thread()
<< " respond_id=" << it->respond_id
<< " respond_force=" << it->respond_force
<< " respond=" << it->respond
<< " respond_invert=" << it->respond_invert
<< " activated=" << checkProcActive()
<< " ]"
<< endl;
......
......@@ -512,12 +512,19 @@ namespace uniset
if( tcpserver && tcpserver->isActive() )
tcpserver->terminate();
try
{
if( thr && thr->isRunning() )
{
thr->stop();
// thr->join();
}
}
catch( Poco::NullPointerException& ex )
{
}
}
// -----------------------------------------------------------------------------
void MBSlave::finalThread()
{
......
......@@ -65,6 +65,8 @@ namespace uniset
*
* \note Каждый экземпляр класса CallbackTimer создает поток, поэтому \b желательно не создавать больше одного экземпляра,
* для одного процесса (чтобы не порождать много потоков).
*
* \todo Можно уже переписать с использованием c++11 и далее..
*/
template <class Caller>
class CallbackTimer
......
......@@ -121,6 +121,7 @@ static UTypes::ShortIOInfo toUTypes( IOController_i::ShortIOInfo i )
ret.tv_sec = i.tv_sec;
ret.tv_nsec = i.tv_nsec;
ret.supplier = i.supplier;
ret.supplier_node = UTypes::DefaultID;
return ret;
}
......
......@@ -215,14 +215,13 @@ namespace uniset
DebugStream::IosFlagSaver ifs(os);
// << setiosflags(ios::showbase) // для вывода в формате 0xNN
os << hex << showbase << setfill('0'); // << showbase;
ostringstream s;
s << hex << showbase << setfill('0'); // << showbase;
for( size_t i = 0; i < len; i++ )
os << setw(2) << (short)(m[i]) << " ";
// s << "<" << setw(2) << (int)(m[i]) << ">";
s << setw(2) << (short)(m[i]) << " ";
return os;
return os << s.str();
}
// -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, const ModbusHeader& m )
......@@ -495,7 +494,12 @@ namespace uniset
{
os << "[";
for( size_t i = d.b.size() - 1; i >= 0; i-- )
int max = d.b.size();
if( max > 0 )
max--;
// вывод в обратном порядке
for( int i = max; i >= 0; i-- )
os << d.b[i];
os << "]";
......@@ -556,7 +560,13 @@ namespace uniset
{
os << "[";
for( size_t i = d.b.size() - 1; i >= 0; i-- )
int sz = d.b.size();
if( sz > 0 )
sz--;
// выводим в обратном порядке
for( int i = sz; i >= 0; i-- )
os << d.b[i];
os << "]";
......@@ -1351,13 +1361,13 @@ namespace uniset
DataBits b(data[bcnt - 1]);
b.b[qnum] = state;
data[bcnt - 1] = b.mbyte();
quant++;
++quant;
return (quant - 1);
}
// -------------------------------------------------------------------------
bool ForceCoilsMessage::setBit( uint8_t nbit, bool state )
{
if( nbit < 0 || nbit >= quant )
if( nbit >= quant )
return false;
size_t bnum = nbit / BitsPerByte;
......@@ -2768,7 +2778,7 @@ namespace uniset
{
assert( m.pduhead.func == fnJournalCommand );
//memset(this, 0, sizeof(*this));
memcpy(this, &m.pduhead, sizeof(*this)); // m.len
memcpy(this, &m.pduhead, sizeof(m.pduhead)); // m.len
// переворачиваем слова
cmd = SWAPSHORT(cmd);
......@@ -2779,7 +2789,7 @@ namespace uniset
{
assert( m.pduhead.func == fnJournalCommand );
// memset(this, 0, sizeof(*this));
memcpy(this, &m.pduhead, sizeof(*this)); // m.len
memcpy(this, &m.pduhead, sizeof(m.pduhead)); // m.len
// переворачиваем слова
cmd = SWAPSHORT(cmd);
......@@ -3034,14 +3044,14 @@ namespace uniset
{
assert( m.pduhead.func == fnSetDateTime );
memset(this, 0, sizeof(*this));
memcpy(this, &m.pduhead, sizeof(*this)); // m.len
memcpy(this, &m.pduhead, sizeof(m.pduhead)); // m.len
}
// -------------------------------------------------------------------------
SetDateTimeMessage& SetDateTimeMessage::operator=( const ModbusMessage& m )
{
assert( m.pduhead.func == fnSetDateTime );
memset(this, 0, sizeof(*this));
memcpy(this, &m.pduhead, sizeof(*this)); // m.len
memcpy(this, &m.pduhead, sizeof(m.pduhead)); // m.len
return *this;
}
// -------------------------------------------------------------------------
......@@ -3055,7 +3065,8 @@ namespace uniset
{
DebugStream::IosFlagSaver ifs(os);
os << setfill('0')
ostringstream s;
s << setfill('0')
<< setw(2) << (int)m.day << "-"
<< setw(2) << (int)m.mon << "-"
<< setw(2) << (int)m.century
......@@ -3064,7 +3075,7 @@ namespace uniset
<< setw(2) << (int)m.min << ":"
<< setw(2) << (int)m.sec;
return os;
return os << s.str();
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage* m )
......@@ -3102,7 +3113,7 @@ namespace uniset
ModbusMessage SetDateTimeMessage::transport_msg()
{
ModbusMessage mm;
assert( sizeof(ModbusMessage) >= (unsigned int)szModbusHeader + szData() );
assert( sizeof(ModbusMessage) >= szModbusHeader + szData() );
// копируем заголовок и данные
memcpy(&mm.pduhead, this, szModbusHeader);
......@@ -3142,7 +3153,7 @@ namespace uniset
{
assert( m.pduhead.func == fnSetDateTime );
memset(this, 0, sizeof(*this));
memcpy(this, &m.pduhead, sizeof(*this)); // m.len
memcpy(this, &m.pduhead, sizeof(m.pduhead)); // m.len
}
// -------------------------------------------------------------------------
SetDateTimeRetMessage::SetDateTimeRetMessage( ModbusAddr _from )
......@@ -3175,7 +3186,7 @@ namespace uniset
ModbusMessage SetDateTimeRetMessage::transport_msg()
{
ModbusMessage mm;
assert( sizeof(ModbusMessage) >= (unsigned int)szModbusHeader + szData() );
assert( sizeof(ModbusMessage) >= szModbusHeader + szData() );
// копируем заголовок и данные
memcpy(&mm.pduhead, this, szModbusHeader);
......@@ -3290,7 +3301,7 @@ namespace uniset
ModbusMessage RemoteServiceRetMessage::transport_msg()
{
ModbusMessage mm;
assert( sizeof(ModbusMessage) >= (unsigned int)szModbusHeader + szData() );
assert( sizeof(ModbusMessage) >= szModbusHeader + szData() );
// копируем заголовок и данные
memcpy(&mm.pduhead, this, szModbusHeader);
......@@ -3545,7 +3556,7 @@ namespace uniset
ModbusMessage FileTransferRetMessage::transport_msg()
{
ModbusMessage mm;
assert( sizeof(ModbusMessage) >= (unsigned int)(szModbusHeader + szData()) );
assert( sizeof(ModbusMessage) >= (szModbusHeader + szData()) );
// копируем заголовок и данные
memcpy(&mm.pduhead, this, szModbusHeader);
......
......@@ -1332,10 +1332,10 @@ namespace uniset
void UInterface::CacheOfResolve::erase( const uniset::ObjectId id, const uniset::ObjectId node ) const noexcept
{
uniset::uniset_rwmutex_wrlock l(cmutex);
try
{
uniset::uniset_rwmutex_wrlock l(cmutex);
auto it = mcache.find( uniset::key(id, node) );
if( it != mcache.end() )
......
......@@ -116,7 +116,8 @@ namespace uniset
}
SensorMessage::SensorMessage( int dummy ) noexcept:
Message(1) // вызываем dummy-конструктор, который не инициализирует данные (оптимизация)
Message(1), // вызываем dummy-конструктор, который не инициализирует данные (оптимизация)
ci(IOController_i::CalibrateInfo())
{
type = Message::SensorInfo;
}
......
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