Blob Blame History Raw
From 3dce1d6b1885f326c55aed9e1d401ac79801396a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
Date: Thu, 23 Feb 2023 21:46:59 +0100
Subject: [PATCH 1/2] value: Use a signed char to old g_value_get_schar result

char and signed char are the same in most of platforms, but that's not
always true such as in arm64, s390x, ppc64el and others.

See: https://buildd.debian.org/status/fetch.php?pkg=gjs&arch=arm64&ver=1.75.2-1&stamp=1676991213&raw=0

Closes: #529
---
 gi/value.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gi/value.cpp b/gi/value.cpp
index 2e2f49aa2..651c21ad3 100644
--- a/gi/value.cpp
+++ b/gi/value.cpp
@@ -881,7 +881,7 @@ gjs_value_from_g_value_internal(JSContext             *context,
                 return false;
         }
     } else if (gtype == G_TYPE_CHAR) {
-        char v;
+        signed char v;
         v = g_value_get_schar(gvalue);
         value_p.setInt32(v);
     } else if (gtype == G_TYPE_UCHAR) {
-- 
GitLab


From 86a66ea412a725caa59d9fa41ea333117406768e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
Date: Thu, 23 Feb 2023 21:53:16 +0100
Subject: [PATCH 2/2] gi/value: Cleanup schar setting code

We still need to use an int32 to hold its result (as that's where a
signed char is stored in JS), but if the conversion is fine we need to
cast its value to signed char. Do it using C++ style now though.
---
 gi/value.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gi/value.cpp b/gi/value.cpp
index 651c21ad3..17db002f6 100644
--- a/gi/value.cpp
+++ b/gi/value.cpp
@@ -458,11 +458,11 @@ gjs_value_to_g_value_internal(JSContext      *context,
             return throw_expect_type(context, value, "string");
         }
     } else if (gtype == G_TYPE_CHAR) {
-        gint32 i;
+        int32_t i;
         if (Gjs::js_value_to_c_checked<signed char>(context, value, &i,
                                                     &out_of_range) &&
             !out_of_range) {
-            g_value_set_schar(gvalue, (signed char)i);
+            g_value_set_schar(gvalue, static_cast<signed char>(i));
         } else {
             return throw_expect_type(context, value, "char", 0, out_of_range);
         }
-- 
GitLab