mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Replace strtol, strtoll, stroul and strtoull with ParseInteger.
parent
cdafc50c94
commit
98481ecc01
|
@ -5,6 +5,7 @@
|
||||||
#include "../../../stdafx.h"
|
#include "../../../stdafx.h"
|
||||||
#include "../../fmt/format.h"
|
#include "../../fmt/format.h"
|
||||||
|
|
||||||
|
#include "../../../core/string_consumer.hpp"
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
#include "sqstring.h"
|
#include "sqstring.h"
|
||||||
|
@ -27,9 +28,9 @@ bool str2num(const SQChar *s,SQObjectPtr &res)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
SQInteger r = SQInteger(strtol(s,&end,10));
|
auto val = ParseInteger<int64_t>(s);
|
||||||
if(s == end) return false;
|
if (!val.has_value()) return false;
|
||||||
res = r;
|
res = *val;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "sqlexer.h"
|
#include "sqlexer.h"
|
||||||
|
|
||||||
#include "../../../core/utf8.hpp"
|
#include "../../../core/utf8.hpp"
|
||||||
|
#include "../../../core/string_consumer.hpp"
|
||||||
|
|
||||||
#include "../../../safeguards.h"
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
|
@ -310,16 +311,16 @@ SQInteger SQLexer::ReadString(char32_t ndelim,bool verbatim)
|
||||||
case 'x': NEXT(); {
|
case 'x': NEXT(); {
|
||||||
if(!isxdigit(CUR_CHAR)) Error("hexadecimal number expected");
|
if(!isxdigit(CUR_CHAR)) Error("hexadecimal number expected");
|
||||||
const SQInteger maxdigits = 4;
|
const SQInteger maxdigits = 4;
|
||||||
SQChar temp[maxdigits+1];
|
SQChar temp[maxdigits];
|
||||||
SQInteger n = 0;
|
size_t n = 0;
|
||||||
while(isxdigit(CUR_CHAR) && n < maxdigits) {
|
while(isxdigit(CUR_CHAR) && n < maxdigits) {
|
||||||
temp[n] = CUR_CHAR;
|
temp[n] = CUR_CHAR;
|
||||||
n++;
|
n++;
|
||||||
NEXT();
|
NEXT();
|
||||||
}
|
}
|
||||||
temp[n] = 0;
|
auto val = ParseInteger(std::string_view{temp, n}, 16);
|
||||||
SQChar *sTemp;
|
if (!val.has_value()) Error("hexadecimal number expected");
|
||||||
APPEND_CHAR((SQChar)strtoul(temp,&sTemp,16));
|
APPEND_CHAR(static_cast<SQChar>(*val));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 't': APPEND_CHAR('\t'); NEXT(); break;
|
case 't': APPEND_CHAR('\t'); NEXT(); break;
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include "object_cmd.h"
|
#include "object_cmd.h"
|
||||||
#include "timer/timer.h"
|
#include "timer/timer.h"
|
||||||
#include "timer/timer_window.h"
|
#include "timer/timer_window.h"
|
||||||
|
#include "core/string_consumer.hpp"
|
||||||
|
|
||||||
#include "widgets/company_widget.h"
|
#include "widgets/company_widget.h"
|
||||||
|
|
||||||
|
@ -1692,7 +1693,9 @@ public:
|
||||||
if (!str.has_value()) return;
|
if (!str.has_value()) return;
|
||||||
/* Set a new company manager face number */
|
/* Set a new company manager face number */
|
||||||
if (!str->empty()) {
|
if (!str->empty()) {
|
||||||
this->face = std::strtoul(str->c_str(), nullptr, 10);
|
auto val = ParseInteger(*str);
|
||||||
|
if (!val.has_value()) return;
|
||||||
|
this->face = *val;
|
||||||
ScaleAllCompanyManagerFaceBits(this->face);
|
ScaleAllCompanyManagerFaceBits(this->face);
|
||||||
ShowErrorMessage(GetEncodedString(STR_FACE_FACECODE_SET), {}, WL_INFO);
|
ShowErrorMessage(GetEncodedString(STR_FACE_FACECODE_SET), {}, WL_INFO);
|
||||||
this->UpdateData();
|
this->UpdateData();
|
||||||
|
@ -2455,7 +2458,9 @@ struct CompanyWindow : Window
|
||||||
default: NOT_REACHED();
|
default: NOT_REACHED();
|
||||||
|
|
||||||
case WID_C_GIVE_MONEY: {
|
case WID_C_GIVE_MONEY: {
|
||||||
Money money = std::strtoull(str->c_str(), nullptr, 10) / GetCurrency().rate;
|
auto value = ParseInteger<uint64_t>(*str);
|
||||||
|
if (!value.has_value()) return;
|
||||||
|
Money money = *value / GetCurrency().rate;
|
||||||
Command<CMD_GIVE_MONEY>::Post(STR_ERROR_CAN_T_GIVE_MONEY, money, this->window_number);
|
Command<CMD_GIVE_MONEY>::Post(STR_ERROR_CAN_T_GIVE_MONEY, money, this->window_number);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -609,9 +609,11 @@ struct NewGRFInspectWindow : Window {
|
||||||
|
|
||||||
void OnQueryTextFinished(std::optional<std::string> str) override
|
void OnQueryTextFinished(std::optional<std::string> str) override
|
||||||
{
|
{
|
||||||
if (!str.has_value() || str->empty()) return;
|
if (!str.has_value()) return;
|
||||||
|
|
||||||
NewGRFInspectWindow::var60params[GetFeatureNum(this->window_number)][this->current_edit_param - 0x60] = std::strtol(str->c_str(), nullptr, 16);
|
auto val = ParseInteger<int32_t>(*str);
|
||||||
|
if (!val.has_value()) return;
|
||||||
|
NewGRFInspectWindow::var60params[GetFeatureNum(this->window_number)][this->current_edit_param - 0x60] = *val;
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -636,7 +636,13 @@ int openttd_main(std::span<char * const> arguments)
|
||||||
_skip_all_newgrf_scanning += 1;
|
_skip_all_newgrf_scanning += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'G': scanner->generation_seed = std::strtoul(mgo.opt, nullptr, 10); break;
|
case 'G':
|
||||||
|
if (auto value = ParseInteger(mgo.opt); value.has_value()) {
|
||||||
|
scanner->generation_seed = *value;
|
||||||
|
} else {
|
||||||
|
fmt::print(stderr, "Invalid generation seed: {}\n", mgo.opt);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'c': _config_file = mgo.opt; break;
|
case 'c': _config_file = mgo.opt; break;
|
||||||
case 'x': scanner->save_config = false; break;
|
case 'x': scanner->save_config = false; break;
|
||||||
case 'X': only_local_path = true; break;
|
case 'X': only_local_path = true; break;
|
||||||
|
|
|
@ -55,6 +55,10 @@
|
||||||
#define atoi SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
#define atoi SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
||||||
#define atol SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
#define atol SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
||||||
#define atoll SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
#define atoll SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
||||||
|
#define strtol SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
||||||
|
#define strtoll SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
||||||
|
#define strtoul SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
||||||
|
#define strtoull SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
||||||
|
|
||||||
/* Use fmt::print instead. */
|
/* Use fmt::print instead. */
|
||||||
#define printf SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
#define printf SAFEGUARD_DO_NOT_USE_THIS_METHOD
|
||||||
|
|
|
@ -1010,10 +1010,26 @@ static void GraphicsSetLoadConfig(IniFile &ini)
|
||||||
if (const IniItem *item = group->GetItem("name"); item != nullptr && item->value) BaseGraphics::ini_data.name = *item->value;
|
if (const IniItem *item = group->GetItem("name"); item != nullptr && item->value) BaseGraphics::ini_data.name = *item->value;
|
||||||
|
|
||||||
if (const IniItem *item = group->GetItem("shortname"); item != nullptr && item->value && item->value->size() == 8) {
|
if (const IniItem *item = group->GetItem("shortname"); item != nullptr && item->value && item->value->size() == 8) {
|
||||||
BaseGraphics::ini_data.shortname = std::byteswap<uint32_t>(std::strtoul(item->value->c_str(), nullptr, 16));
|
auto val = ParseInteger<uint32_t>(*item->value, 16);
|
||||||
|
if (val.has_value()) {
|
||||||
|
BaseGraphics::ini_data.shortname = std::byteswap<uint32_t>(*val);
|
||||||
|
} else {
|
||||||
|
ShowErrorMessage(GetEncodedString(STR_CONFIG_ERROR),
|
||||||
|
GetEncodedString(STR_CONFIG_ERROR_INVALID_VALUE, *item->value, BaseGraphics::ini_data.name),
|
||||||
|
WL_CRITICAL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (const IniItem *item = group->GetItem("extra_version"); item != nullptr && item->value) BaseGraphics::ini_data.extra_version = std::strtoul(item->value->c_str(), nullptr, 10);
|
if (const IniItem *item = group->GetItem("extra_version"); item != nullptr && item->value) {
|
||||||
|
auto val = ParseInteger<uint32_t>(*item->value);
|
||||||
|
if (val.has_value()) {
|
||||||
|
BaseGraphics::ini_data.extra_version = *val;
|
||||||
|
} else {
|
||||||
|
ShowErrorMessage(GetEncodedString(STR_CONFIG_ERROR),
|
||||||
|
GetEncodedString(STR_CONFIG_ERROR_INVALID_VALUE, *item->value, BaseGraphics::ini_data.name),
|
||||||
|
WL_CRITICAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (const IniItem *item = group->GetItem("extra_params"); item != nullptr && item->value) {
|
if (const IniItem *item = group->GetItem("extra_params"); item != nullptr && item->value) {
|
||||||
auto params = ParseIntList(item->value->c_str());
|
auto params = ParseIntList(item->value->c_str());
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "settings_type.h"
|
#include "settings_type.h"
|
||||||
#include "timetable_cmd.h"
|
#include "timetable_cmd.h"
|
||||||
#include "timetable.h"
|
#include "timetable.h"
|
||||||
|
#include "core/string_consumer.hpp"
|
||||||
|
|
||||||
#include "widgets/timetable_widget.h"
|
#include "widgets/timetable_widget.h"
|
||||||
|
|
||||||
|
@ -747,7 +748,7 @@ struct TimetableWindow : Window {
|
||||||
if (!str.has_value()) return;
|
if (!str.has_value()) return;
|
||||||
|
|
||||||
const Vehicle *v = this->vehicle;
|
const Vehicle *v = this->vehicle;
|
||||||
uint64_t val = str->empty() ? 0 : std::strtoul(str->c_str(), nullptr, 10);
|
uint64_t val = ParseInteger<uint64_t>(*str).value_or(0);
|
||||||
auto [order_id, mtf] = PackTimetableArgs(v, this->sel_index, query_widget == WID_VT_CHANGE_SPEED);
|
auto [order_id, mtf] = PackTimetableArgs(v, this->sel_index, query_widget == WID_VT_CHANGE_SPEED);
|
||||||
|
|
||||||
switch (query_widget) {
|
switch (query_widget) {
|
||||||
|
|
Loading…
Reference in New Issue