From 7c1d2bef0e1ea273baa549aa530f5f3b72e37726 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 15 Feb 2023 22:53:02 +0000 Subject: [PATCH] Fix string parsing in scheduled dispatch window --- src/schdispatch_gui.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/schdispatch_gui.cpp b/src/schdispatch_gui.cpp index 00236b4bae..0d243c8ded 100644 --- a/src/schdispatch_gui.cpp +++ b/src/schdispatch_gui.cpp @@ -801,10 +801,12 @@ struct SchdispatchWindow : GeneralVehicleWindow { case WID_SCHDISPATCH_ADD: { if (!this->IsScheduleSelected()) break; - char *end; - int32 val = StrEmpty(str) ? -1 : strtoul(str, &end, 10); - if (val >= 0 && end && *end == 0) { + if (StrEmpty(str)) break; + + char *end; + int32 val = strtoul(str, &end, 10); + if (val >= 0 && end != nullptr && *end == 0) { uint minutes = (val % 100) % 60; uint hours = (val / 100) % 24; DateTicksScaled slot = MINUTES_DATE(MINUTES_DAY(CURRENT_MINUTE), hours, minutes); @@ -817,10 +819,12 @@ struct SchdispatchWindow : GeneralVehicleWindow { case WID_SCHDISPATCH_SET_START_DATE: { if (!this->IsScheduleSelected()) break; - char *end; - int32 val = StrEmpty(str) ? -1 : strtoul(str, &end, 10); - if (val >= 0 && end && *end == 0) { + if (StrEmpty(str)) break; + + char *end; + int32 val = strtoul(str, &end, 10); + if (val >= 0 && end != nullptr && *end == 0) { uint minutes = (val % 100) % 60; uint hours = (val / 100) % 24; DateTicksScaled start = MINUTES_DATE(MINUTES_DAY(CURRENT_MINUTE), hours, minutes); @@ -845,10 +849,12 @@ struct SchdispatchWindow : GeneralVehicleWindow { case WID_SCHDISPATCH_SET_DELAY: { if (!this->IsScheduleSelected()) break; - char *end; - int32 val = StrEmpty(str) ? -1 : strtoul(str, &end, 10); - if (val >= 0 && end && *end == 0) { + if (StrEmpty(str)) break; + + char *end; + int32 val = strtoul(str, &end, 10); + if (val >= 0 && end != nullptr && *end == 0) { if (!_settings_client.gui.timetable_in_ticks) val *= DATE_UNIT_SIZE; DoCommandP(0, v->index | (this->schedule_index << 20), val, CMD_SCHEDULED_DISPATCH_SET_DELAY | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE));