




































bind y echo test on a QWERTZ keyboard layout then you instead activate the bind with the Z key.
This is detrimental for #7393, which uses Ctrl+Z/Y for the undo/redo actions respectively, which are swapped when using a QWERTZ keyboard layout.
Maybe we could detect the keyboard layout and translate the keys transparently.





















for(int i = MAX_LINES; i > 0; i--) where MAX_LINES is array size





CC=clang CXX=clang++ CXXFLAGS='-fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer' CFLAGS='-fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer' cmake .. -DCMAKE_BUILD_TYPE=Debug

-fsanitize-recover=address is probably a bad idea, you don't want to continue executing after OOB accesses








variables.h are moved to config_variables.h instead of being included with the preprocessor. The file variables.h is removed, so all config variables can be found in a single file instead of being spread over two files without any clear structure. The original declaration order of config variables is preserved. The unnecessary header guard GAME_VARIABLES_H from variables.h is removed, as the comment // This file can be included several times. already serves the sam...
CRegister is such a complicated class for what it does




unique_locks with CLockScope 


std::mutex had thread-safety annotations, then we wouldn't need the wrappers

std::mutex had thread-safety annotations, then we wouldn't need the wrappers use std::sync::Mutex;
let mutex = Mutex::new(0);
let mut guard = mutex.lock().unwrap();
*guard += 20;
// out of scope unlocks, or u can manually drop()




























It doesn't link 


2


CNameBans in the existing name_ban.cpp/h files. The previously global function IsNameBanned is now the member function CNameBans::IsBanned. T...

(edited)