From 5602f809ffd1b54562736fc78345b95d83ba01d1 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Thu, 26 Oct 2023 01:31:54 +0300 Subject: [PATCH 38/38] Lua: Add versions_compare() method See osdn #48905 Signed-off-by: Marko Lindqvist --- common/scriptcore/api_common_utilities.c | 33 ++++++++++++++++++++++++ common/scriptcore/api_common_utilities.h | 2 ++ common/scriptcore/tolua_common_a.pkg | 2 ++ 3 files changed, 37 insertions(+) diff --git a/common/scriptcore/api_common_utilities.c b/common/scriptcore/api_common_utilities.c index 42ba7ada84..d4f027cdc2 100644 --- a/common/scriptcore/api_common_utilities.c +++ b/common/scriptcore/api_common_utilities.c @@ -17,6 +17,9 @@ #include +/* dependencies/cvercmp */ +#include "cvercmp.h" + /* utilities */ #include "deprecations.h" #include "log.h" @@ -90,6 +93,36 @@ const char *api_utilities_version_string(lua_State *L) return freeciv_datafile_version(); } +/********************************************************************//** + Compare two version strings. Return which one is bigger, or zero + if they are equal. +************************************************************************/ +int api_utilities_versions_compare(lua_State *L, + const char *ver1, const char *ver2) +{ + enum cvercmp_type result; + + LUASCRIPT_CHECK_STATE(L, 0); + LUASCRIPT_CHECK_ARG_NIL(L, ver1, 2, string, 0); + LUASCRIPT_CHECK_ARG_NIL(L, ver2, 3, string, 0); + + result = cvercmp_cmp(ver1, ver2); + + switch (result) { + case CVERCMP_EQUAL: + return 0; + case CVERCMP_GREATER: + return 1; + case CVERCMP_LESSER: + return -1; + default: + fc_assert(result == CVERCMP_EQUAL + || result == CVERCMP_GREATER + || result == CVERCMP_LESSER); + return 0; + } +} + /********************************************************************//** One log message. This module is used by script_game and script_auth. ************************************************************************/ diff --git a/common/scriptcore/api_common_utilities.h b/common/scriptcore/api_common_utilities.h index f5e2342a41..2689f63071 100644 --- a/common/scriptcore/api_common_utilities.h +++ b/common/scriptcore/api_common_utilities.h @@ -38,6 +38,8 @@ const char *api_utilities_name_version(lua_State *L); const char *api_utilities_comparable_version(lua_State *L); const char *api_utilities_version_string(lua_State *L); +int api_utilities_versions_compare(lua_State *L, const char *ver1, const char *ver2); + void api_utilities_log_base(lua_State *L, int level, const char *message); void api_utilities_deprecation_warning(lua_State *L, char *method, diff --git a/common/scriptcore/tolua_common_a.pkg b/common/scriptcore/tolua_common_a.pkg index 513ad66d4a..b703d51fda 100644 --- a/common/scriptcore/tolua_common_a.pkg +++ b/common/scriptcore/tolua_common_a.pkg @@ -128,6 +128,8 @@ const char *api_utilities_comparable_version const char *api_utilities_version_string @ version_string (lua_State *L); +int api_utilities_versions_compare + @ versions_compare (lua_State *L, const char *ver1, const char *ver2); $[ -- *************************************************************************** -- Dump the state of user scalar variables to a Lua code string. -- 2.42.0