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