Original project changes: Fix issue with use of char * after std::string deallocated in multiple places

This commit is contained in:
Carsten Schmiemann 2022-10-03 12:38:52 +02:00
parent a2a079c812
commit 2f9e12f0f0
1 changed files with 25 additions and 15 deletions

View File

@ -1075,25 +1075,35 @@ OvmsVehicle::vehicle_command_t OvmsVehicle::CommandStat(int verbosity, OvmsWrite
writer->printf("SOC: %s\n", (char*) StdMetrics.ms_v_bat_soc->AsUnitString("-", Native, 1).c_str());
const char* range_ideal = StdMetrics.ms_v_bat_range_ideal->AsUnitString("-", rangeUnit, 0).c_str();
if (*range_ideal != '-')
writer->printf("Ideal range: %s\n", range_ideal);
if (StdMetrics.ms_v_bat_range_ideal->IsDefined())
{
const std::string& range_ideal = StdMetrics.ms_v_bat_range_ideal->AsUnitString("-", rangeUnit, 0);
writer->printf("Ideal range: %s\n", range_ideal.c_str());
}
const char* range_est = StdMetrics.ms_v_bat_range_est->AsUnitString("-", rangeUnit, 0).c_str();
if (*range_est != '-')
writer->printf("Est. range: %s\n", range_est);
if (StdMetrics.ms_v_bat_range_est->IsDefined())
{
const std::string& range_est = StdMetrics.ms_v_bat_range_est->AsUnitString("-", rangeUnit, 0);
writer->printf("Est. range: %s\n", range_est.c_str());
}
const char* odometer = StdMetrics.ms_v_pos_odometer->AsUnitString("-", rangeUnit, 1).c_str();
if (*odometer != '-')
writer->printf("ODO: %s\n", odometer);
if (StdMetrics.ms_v_pos_odometer->IsDefined())
{
const std::string& odometer = StdMetrics.ms_v_pos_odometer->AsUnitString("-", rangeUnit, 1);
writer->printf("ODO: %s\n", odometer.c_str());
}
const char* cac = StdMetrics.ms_v_bat_cac->AsUnitString("-", Native, 1).c_str();
if (*cac != '-')
writer->printf("CAC: %s\n", cac);
if (StdMetrics.ms_v_bat_cac->IsDefined())
{
const std::string& cac = StdMetrics.ms_v_bat_cac->AsUnitString("-", Native, 1);
writer->printf("CAC: %s\n", cac.c_str());
}
const char* soh = StdMetrics.ms_v_bat_soh->AsUnitString("-", Native, 0).c_str();
if (*soh != '-')
writer->printf("SOH: %s\n", soh);
if (StdMetrics.ms_v_bat_soh->IsDefined())
{
const std::string& soh = StdMetrics.ms_v_bat_soh->AsUnitString("-", Native, 0);
writer->printf("SOH: %s\n", soh.c_str());
}
return Success;
}