diff --git a/SystemInformation.cxx b/SystemInformation.cxx index 781452913ba1813d055a9a5683e0329d13a37c72..c06b4dd9ab17486e7913339737b97dd306bb7d43 100644 --- a/SystemInformation.cxx +++ b/SystemInformation.cxx @@ -3002,6 +3002,16 @@ kwsys_stl::string SystemInformationImplementation::ExtractValueFromCpuInfoFile(k size_t pos2 = buffer.find("\n",pos); if(pos!=buffer.npos && pos2!=buffer.npos) { + // It may happen that the beginning matches, but this is still not the requested key. + // An example is looking for "cpu" when "cpu family" comes first. So we check that + // we have only spaces from here to pos, otherwise we search again. + for(size_t i=this->CurrentPositionInFile+strlen(word); i < pos; ++i) + { + if(buffer[i] != ' ' && buffer[i] != '\t') + { + return this->ExtractValueFromCpuInfoFile(buffer, word, pos2); + } + } return buffer.substr(pos+2,pos2-pos-2); } }