From 6608c37b9eb69d03a07b2c1b64352af6bb055783 Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Wed, 12 Dec 2018 07:52:46 +0100
Subject: [PATCH] Fixes for cppcheck 1.86

cc: @valsson
---
 src/tools/HistogramBead.cpp        | 5 ++++-
 src/tools/IFile.cpp                | 9 ++++++---
 src/tools/SwitchingFunction.cpp    | 5 ++++-
 src/ves/FermiSwitchingFunction.cpp | 5 ++++-
 src/ves/MD_LinearExpansionPES.cpp  | 4 ++--
 5 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/src/tools/HistogramBead.cpp b/src/tools/HistogramBead.cpp
index 3c17ce144..ba54b8951 100644
--- a/src/tools/HistogramBead.cpp
+++ b/src/tools/HistogramBead.cpp
@@ -139,7 +139,10 @@ void HistogramBead::generateBins( const std::string& params, std::vector<std::st
 
 void HistogramBead::set( const std::string& params, std::string& errormsg ) {
   std::vector<std::string> data=Tools::getWords(params);
-  if(data.size()<1) errormsg="No input has been specified";
+  if(data.size()<1) {
+    errormsg="No input has been specified";
+    return;
+  }
 
   std::string name=data[0]; const double DP2CUTOFF=6.25;
   if(name=="GAUSSIAN") { type=gaussian; cutoff=sqrt(2.0*DP2CUTOFF); }
diff --git a/src/tools/IFile.cpp b/src/tools/IFile.cpp
index 7cb119d22..1c6c07faa 100644
--- a/src/tools/IFile.cpp
+++ b/src/tools/IFile.cpp
@@ -64,7 +64,8 @@ IFile& IFile::advanceField() {
   bool done=false;
   while(!done) {
     getline(line);
-    if(!*this) {return *this;}
+// using explicit conversion not to confuse cppcheck 1.86
+    if(!bool(*this)) {return *this;}
     std::vector<std::string> words=Tools::getWords(line);
     if(words.size()>=2 && words[0]=="#!" && words[1]=="FIELDS") {
       fields.clear();
@@ -124,7 +125,8 @@ IFile& IFile::open(const std::string&path) {
 
 IFile& IFile::scanFieldList(std::vector<std::string>&s) {
   if(!inMiddleOfField) advanceField();
-  if(!*this) return *this;
+// using explicit conversion not to confuse cppcheck 1.86
+  if(!bool(*this)) return *this;
   s.clear();
   for(unsigned i=0; i<fields.size(); i++)
     s.push_back(fields[i].name);
@@ -141,7 +143,8 @@ bool IFile::FieldExist(const std::string& s) {
 
 IFile& IFile::scanField(const std::string&name,std::string&str) {
   if(!inMiddleOfField) advanceField();
-  if(!*this) return *this;
+// using explicit conversion not to confuse cppcheck 1.86
+  if(!bool(*this)) return *this;
   unsigned i=findField(name);
   str=fields[i].value;
   fields[i].read=true;
diff --git a/src/tools/SwitchingFunction.cpp b/src/tools/SwitchingFunction.cpp
index 0ede23924..2acf4c7f4 100644
--- a/src/tools/SwitchingFunction.cpp
+++ b/src/tools/SwitchingFunction.cpp
@@ -186,7 +186,10 @@ void SwitchingFunction::registerKeywords( Keywords& keys ) {
 
 void SwitchingFunction::set(const std::string & definition,std::string& errormsg) {
   vector<string> data=Tools::getWords(definition);
-  if( data.size()<1 ) errormsg="missing all input for switching function";
+  if( data.size()<1 ) {
+    errormsg="missing all input for switching function";
+    return;
+  }
   string name=data[0];
   data.erase(data.begin());
   invr0=0.0;
diff --git a/src/ves/FermiSwitchingFunction.cpp b/src/ves/FermiSwitchingFunction.cpp
index a53ab6f6a..f0695c4e8 100644
--- a/src/ves/FermiSwitchingFunction.cpp
+++ b/src/ves/FermiSwitchingFunction.cpp
@@ -41,7 +41,10 @@ void FermiSwitchingFunction::registerKeywords( Keywords& keys ) {
 
 void FermiSwitchingFunction::set(const std::string& definition,std::string& errormsg) {
   std::vector<std::string> data=Tools::getWords(definition);
-  if( data.size()<1 ) errormsg="missing all input for switching function";
+  if( data.size()<1 ) {
+    errormsg="missing all input for switching function";
+    return;
+  }
   std::string name=data[0];
   data.erase(data.begin());
   if(name!="FERMI") {errormsg="only FERMI is supported";}
diff --git a/src/ves/MD_LinearExpansionPES.cpp b/src/ves/MD_LinearExpansionPES.cpp
index d44f0767d..f73489b11 100644
--- a/src/ves/MD_LinearExpansionPES.cpp
+++ b/src/ves/MD_LinearExpansionPES.cpp
@@ -236,8 +236,8 @@ int MD_LinearExpansionPES::main( FILE* in, FILE* out, PLMD::Communicator& pc) {
   parse("nstep",nsteps);
   double tstep;
   parse("tstep",tstep);
-  //
-  double temp;
+  // initialize to solve a cppcheck 1.86 warning
+  double temp=0.0;
   std::vector<double> temps_vec(0);
   parseVector("temperature",temps_vec);
   if(temps_vec.size()==1) {
-- 
GitLab