Files
@ r24498:e9114d9ab04a
Branch filter:
Location: cpp/openttd-patchpack/source/src/safeguards.h - annotation
r24498:e9114d9ab04a
2.5 KiB
text/x-c
Fix #6468: don't store version of AIs-started-via-console in name
You can do: "startai myai.3", which starts version 3 of "myai".
This is very useful for testing save/load code between different
versions of your AI.
However, when using this syntax, the AI got saved as "myai.3" as
name of the AI, instead of "myai". This caused several problems,
like indicating to the user the AI could not be found, but still
load the AI. But in all cases, the AI never got the chance to
load the saved data, making the whole reason this exists pointless.
By splitting the name and version already in the console command,
the code becomes simpler and AIs started this way now follow the
normal flow after initialization.
You can do: "startai myai.3", which starts version 3 of "myai".
This is very useful for testing save/load code between different
versions of your AI.
However, when using this syntax, the AI got saved as "myai.3" as
name of the AI, instead of "myai". This caused several problems,
like indicating to the user the AI could not be found, but still
load the AI. But in all cases, the AI never got the chance to
load the saved data, making the whole reason this exists pointless.
By splitting the name and version already in the console command,
the code becomes simpler and AIs started this way now follow the
normal flow after initialization.
r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r23607:36c15679007d r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21410:ae5961f02724 r21400:0108b5ae8ebe r21383:942c32fb8b0e r21383:942c32fb8b0e r21410:ae5961f02724 r21415:c7541491a072 r21383:942c32fb8b0e r21383:942c32fb8b0e r21400:0108b5ae8ebe r21400:0108b5ae8ebe r21383:942c32fb8b0e r21383:942c32fb8b0e r21400:0108b5ae8ebe r21400:0108b5ae8ebe r21383:942c32fb8b0e r21383:942c32fb8b0e r21409:a0c4d2aff874 r21409:a0c4d2aff874 r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21383:942c32fb8b0e r21397:10b7bc8e92d3 r21383:942c32fb8b0e r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21534:f2ebd0eefb77 r21383:942c32fb8b0e | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file safeguards.h A number of safeguards to prevent using unsafe methods.
*
* Unsafe methods are, for example, strndup and strncpy because they may leave the
* string without a null termination, but also strdup and strndup because they can
* return nullptr and then all strdups would need to be guarded against that instead
* of using the current MallocT/ReallocT/CallocT technique of just giving the user
* an error that too much memory was used instead of spreading that code though
* the whole code base.
*/
#ifndef SAFEGUARDS_H
#define SAFEGUARDS_H
/* Use MallocT instead. */
#define malloc SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* Use MallocT instead. */
#define calloc SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* Use ReallocT instead. */
#define realloc SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* Use stredup instead. */
#define strdup SAFEGUARD_DO_NOT_USE_THIS_METHOD
#define strndup SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* Use strecpy instead. */
#define strcpy SAFEGUARD_DO_NOT_USE_THIS_METHOD
#define strncpy SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* Use strecat instead. */
#define strcat SAFEGUARD_DO_NOT_USE_THIS_METHOD
#define strncat SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* Use seprintf instead. */
#define sprintf SAFEGUARD_DO_NOT_USE_THIS_METHOD
#define snprintf SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* Use vseprintf instead. */
#define vsprintf SAFEGUARD_DO_NOT_USE_THIS_METHOD
#define vsnprintf SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* Use fgets instead. */
#define gets SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* No clear replacement. */
#define strtok SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* Use our own templated implementation instead of a macro or function with only one type. */
#ifdef min
#undef min
#endif
/* Use our own templated implementation instead of a macro or function with only one type. */
#ifdef max
#undef max
#endif
/* Use our own templated implementation instead of a macro or function with only one type. */
#ifdef abs
#undef abs
#endif
#endif /* SAFEGUARDS_H */
|