File 0012-std-add-std_i32_idx.patch of Package libsigrok

From ae4ac18ef0ecf6d24c93f1685343bad3fe9318f4 Mon Sep 17 00:00:00 2001
From: Mikhail Paulyshka <me@mixaill.net>
Date: Sun, 14 Dec 2025 22:56:11 +0300
Subject: [PATCH 12/17] std: add std_i32_idx()

---
 src/libsigrok-internal.h |  1 +
 src/std.c                | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h
index 8d509eba6..7acd7557e 100644
--- a/src/libsigrok-internal.h
+++ b/src/libsigrok-internal.h
@@ -1958,6 +1958,7 @@ SR_PRIV GVariant *std_gvar_array_str(const char *a[], unsigned int n);
 SR_PRIV GVariant *std_gvar_thresholds(const double a[][2], unsigned int n);
 
 SR_PRIV int std_str_idx(GVariant *data, const char *a[], unsigned int n);
+SR_PRIV int std_i32_idx(GVariant *data, const int32_t a[], unsigned int n);
 SR_PRIV int std_u64_idx(GVariant *data, const uint64_t a[], unsigned int n);
 SR_PRIV int std_u8_idx(GVariant *data, const uint8_t a[], unsigned int n);
 
diff --git a/src/std.c b/src/std.c
index 959d00056..8917c7ebd 100644
--- a/src/std.c
+++ b/src/std.c
@@ -787,8 +787,10 @@ static int find_in_array(GVariant *data, const GVariantType *type,
 	const char *s;
 	const uint64_t *u64arr;
 	const uint8_t *u8arr;
+	const int32_t *i32arr;
 	uint64_t u64;
 	uint8_t u8;
+	int32_t i32;
 	unsigned int i;
 
 	if (!g_variant_is_of_type(data, type))
@@ -803,6 +805,14 @@ static int find_in_array(GVariant *data, const GVariantType *type,
 			if (!strcmp(s, sarr[i]))
 				return i;
 		break;
+	case G_VARIANT_CLASS_INT32:
+		i32 = g_variant_get_int32(data);
+		i32arr = arr;
+
+		for (i = 0; i < n; i++)
+			if (i32 == i32arr[i])
+				return i;
+		break;
 	case G_VARIANT_CLASS_UINT64:
 		u64 = g_variant_get_uint64(data);
 		u64arr = arr;
@@ -830,6 +840,11 @@ SR_PRIV int std_str_idx(GVariant *data, const char *a[], unsigned int n)
 	return find_in_array(data, G_VARIANT_TYPE_STRING, a, n);
 }
 
+SR_PRIV int std_i32_idx(GVariant *data, const int32_t a[], unsigned int n)
+{
+	return find_in_array(data, G_VARIANT_TYPE_INT32, a, n);
+}
+
 SR_PRIV int std_u64_idx(GVariant *data, const uint64_t a[], unsigned int n)
 {
 	return find_in_array(data, G_VARIANT_TYPE_UINT64, a, n);
-- 
2.52.0

openSUSE Build Service is sponsored by