Commit e899650e
2
files
+62
added
-1
deleted
@@ -1,6 +1,6 @@
1
1
pkgname: glib
2
2
pkgver: '2.88.3'
3
-pkgrel: '3'
3
+pkgrel: '4'
4
4
pkgdesc: The GLib package contains a low-level libraries useful for providing data structure handling
5
5
url: 'https://gitlab.gnome.org/GNOME/glib/'
6
6
arch: x86_64
@@ -36,13 +36,16 @@ source:
36
36
- 'https://download.gnome.org/sources/gobject-introspection/1.86/gobject-introspection-1.86.0.tar.xz'
37
37
- 'https://download.gnome.org/sources/glib/2.88/${pkgname}-${pkgver}.tar.xz'
38
38
- glib-skip_warnings-1.patch
39
+- glib-ffi-custom-pointer-1.patch
39
40
sha256sums:
40
41
- 920d1a3fcedeadc32acff95c2e203b319039dd4b4a08dd1a2dfd283d19c0b9ae
41
42
- ab24d24e698dfa1e408b7bcdb508f4aafc906185a8b8ce72fdf79bbbdc9b383b
42
43
- 8f9ee9f4a6a08c49c9c912241c63d55b969950c49f4d40337c6fd9557b9daa1b
44
+- 6ef3595de604a18dc660768334c88e0419614f72cb5db0476d365633f42e7657
43
45
build: |
44
46
# 1. Nałożenie patcha na glib
45
47
patch -d ${pkgname}-${pkgver} -Np1 -i ../glib-skip_warnings-1.patch
48
+ patch -d ${pkgname}-${pkgver} -Np1 -i ../glib-ffi-custom-pointer-1.patch
46
49
47
50
# 2. Pierwsze przejście GLib (bez introspection)
48
51
meson setup ${pkgname}-${pkgver} build-glib-1 \
49
52
new file mode 100644
@@ -0,0 +1,58 @@
1
+--- a/gobject/gclosure.c 2026-10-11 12:20:45.279155594 +0200
2
+@@ -1276,6 +1276,39 @@
3
+ }
4
+
5
+ #include <ffi.h>
6
++/* Typy z wlasnym fundamentalem (nie GObject/boxed), ktore trzymaja wartosc jako
7
++ * wskaznik w gvalue->data[0].v_pointer (np. DexObject z libdex). GLib nie ma dla
8
++ * nich galezi w value_to_ffi_type i podawal NULL do libffi, co konczylo sie SEGV.
9
++ * Rozpoznajemy "pointer-compatible" typy i przekazujemy realny wskaznik.
10
++ * Backport z GLib main (value_type_is_custom_pointer_compatible). */
11
++static gboolean
12
++value_type_is_custom_pointer_compatible (GType type)
13
++{
14
++ GTypeValueTable *value_table;
15
++
16
++ switch (g_type_fundamental (type))
17
++ {
18
++ case G_TYPE_STRING:
19
++ case G_TYPE_OBJECT:
20
++ case G_TYPE_BOXED:
21
++ case G_TYPE_PARAM:
22
++ case G_TYPE_POINTER:
23
++ case G_TYPE_INTERFACE:
24
++ case G_TYPE_VARIANT:
25
++ return FALSE;
26
++ default:
27
++ break;
28
++ }
29
++
30
++ value_table = g_type_value_table_peek (type);
31
++
32
++ return G_TYPE_IS_INSTANTIATABLE (type) &&
33
++ value_table != NULL &&
34
++ value_table->value_peek_pointer != NULL &&
35
++ value_table->collect_format != NULL &&
36
++ strcmp (value_table->collect_format, "p") == 0;
37
++}
38
++
39
+ static ffi_type *
40
+ value_to_ffi_type (const GValue *gvalue,
41
+ gpointer *value,
42
+@@ -1361,8 +1394,13 @@
43
+ break;
44
+ default:
45
+ rettype = &ffi_type_pointer;
46
+- *value = NULL;
47
+- g_critical ("value_to_ffi_type: Unsupported fundamental type: %s", g_type_name (type));
48
++ if (value_type_is_custom_pointer_compatible (G_VALUE_TYPE (gvalue)))
49
++ *value = (gpointer)&(gvalue->data[0].v_pointer);
50
++ else
51
++ {
52
++ *value = NULL;
53
++ g_critical ("value_to_ffi_type: Unsupported fundamental type: %s", g_type_name (type));
54
++ }
55
+ break;
56
+ }
57
+ return rettype;