tree 150923303456b41cb6e799436a7351432d49302c
parent fe3214e8b6a4ad1276d5b6782f914fdc6e452259
author George Liu <liuxiwei@inspur.com> 1640769888 +0800
committer George Liu <liuxiwei@inspur.com> 1640913585 +0800

Fix some warnings by cppcheck

Warning message:

```
dbusSensor.hpp:28:9: performance: Variable 'servName' is assigned in
constructor body. Consider performing initialization in
initialization list. [useInitializationList]
        servName = getService(bus, path, sensorIntf);
        ^
virtualSensor.hpp:69:55: performance: Function parameter 'path'
should be passed by const reference. [passedByValue]
  SensorParam(sdbusplus::bus::bus& bus, std::string path, void* ctx):
                                                      ^
virtualSensor.hpp:271:44: performance: Function parameter
'configFile' should be passed by const reference. [passedByValue]
    Json parseConfigFile(const std::string configFile);
                                           ^
virtualSensor.cpp:334:26: style: Local variable 'objPath' shadows
outer argument [shadowArgument]
   auto objPath = sensorDbusPath + sensorType + "/" + name;
                         ^
virtualSensor.cpp:255:58: note: Shadowed declaration
                                    const std::string& objPath)
                                                         ^
virtualSensor.cpp:334:26: note: Shadow variable
    auto objPath = sensorDbusPath + sensorType + "/" + name;
          ^
virtualSensor.cpp:338:33: style: Local variable 'name' shadows outer
variable [shadowVariable]
    std::string name = j["ParamName"];
                ^
virtualSensor.cpp:330:29: note: Shadowed declaration
    std::string name = desc.value("Name", "");
                ^
virtualSensor.cpp:338:33: note: Shadow variable
   std::string name = j["ParamName"];
               ^
virtualSensor.cpp:649:56: performance: Function parameter
'configFile' should be passed by const reference. [passedByValue]
Json VirtualSensors::parseConfigFile(const std::string configFile)
```

Tested: Verify that there are no such warnings in local CI.

Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: I8afaf35043c97d0ca6bfcbe9d50c847d126f8e2d
