From 935260ceb87a4d744509f5624be9035ab2299de9 Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Mon, 18 Mar 2024 16:23:24 +0100 Subject: [PATCH] girparser: Recognize usage of dev_t/gid_t/pid_t/uid_t/socklen_t and don't rely on given GIR type --- tests/Makefile.am | 5 +++++ tests/gir/dev_t.gir | 28 +++++++++++++++++++++++++ tests/gir/dev_t.vapi-expected | 7 +++++++ tests/gir/gid_t.gir | 28 +++++++++++++++++++++++++ tests/gir/gid_t.vapi-expected | 7 +++++++ tests/gir/pid_t.gir | 28 +++++++++++++++++++++++++ tests/gir/pid_t.vapi-expected | 7 +++++++ tests/gir/socklen_t.gir | 28 +++++++++++++++++++++++++ tests/gir/socklen_t.vapi-expected | 7 +++++++ tests/gir/uid_t.gir | 28 +++++++++++++++++++++++++ tests/gir/uid_t.vapi-expected | 7 +++++++ vala/valagirparser.vala | 22 ++++++++++++++++--- vapi/glib-2.0.vapi | 35 +++++++++++++++++++++++++++++++ 13 files changed, 234 insertions(+), 3 deletions(-) create mode 100644 tests/gir/dev_t.gir create mode 100644 tests/gir/dev_t.vapi-expected create mode 100644 tests/gir/gid_t.gir create mode 100644 tests/gir/gid_t.vapi-expected create mode 100644 tests/gir/pid_t.gir create mode 100644 tests/gir/pid_t.vapi-expected create mode 100644 tests/gir/socklen_t.gir create mode 100644 tests/gir/socklen_t.vapi-expected create mode 100644 tests/gir/uid_t.gir create mode 100644 tests/gir/uid_t.vapi-expected diff --git a/tests/Makefile.am b/tests/Makefile.am index 507b4e19c..9932c40e4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -902,8 +902,10 @@ TESTS = \ gir/delegate-array-length-type.gir \ gir/delegate-closure-destroy-index-conflict.gir \ gir/delegate-error-pos.gir \ + gir/dev_t.gir \ gir/enum.gir \ gir/errordomain.gir \ + gir/gid_t.gir \ gir/gtype-struct-name.gir \ gir/instance-parameter-owned.gir \ gir/method-array-length-type.gir \ @@ -914,13 +916,16 @@ TESTS = \ gir/parameter-array-length-type.gir \ gir/parameter-array-out.gir \ gir/parameter-nullable-out-simple-type.gir \ + gir/pid_t.gir \ gir/property-non-readable.gir \ gir/signal-virtual.gir \ gir/record-copy-free-func.gir \ + gir/socklen_t.gir \ gir/symbol-redefined.gir \ gir/symbol-type-csuffix.gir \ gir/symbol-without-name.gir \ gir/time_t.gir \ + gir/uid_t.gir \ gir/union.gir \ gir/union-transparent.gir \ girwriter/class-final.test \ diff --git a/tests/gir/dev_t.gir b/tests/gir/dev_t.gir new file mode 100644 index 000000000..a00d75347 --- /dev/null +++ b/tests/gir/dev_t.gir @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/gir/dev_t.vapi-expected b/tests/gir/dev_t.vapi-expected new file mode 100644 index 000000000..311f075e1 --- /dev/null +++ b/tests/gir/dev_t.vapi-expected @@ -0,0 +1,7 @@ +[CCode (cprefix = "Test", gir_namespace = "Test", gir_version = "1.0", lower_case_cprefix = "test_")] +namespace Test { + [CCode (cheader_filename = "test.h")] + public static dev_t function (dev_t device); + [CCode (cheader_filename = "test.h")] + public static dev_t function_compat (dev_t device); +} diff --git a/tests/gir/gid_t.gir b/tests/gir/gid_t.gir new file mode 100644 index 000000000..16c716872 --- /dev/null +++ b/tests/gir/gid_t.gir @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/gir/gid_t.vapi-expected b/tests/gir/gid_t.vapi-expected new file mode 100644 index 000000000..84ec964f9 --- /dev/null +++ b/tests/gir/gid_t.vapi-expected @@ -0,0 +1,7 @@ +[CCode (cprefix = "Test", gir_namespace = "Test", gir_version = "1.0", lower_case_cprefix = "test_")] +namespace Test { + [CCode (cheader_filename = "test.h")] + public static gid_t function (gid_t group); + [CCode (cheader_filename = "test.h")] + public static gid_t function_compat (gid_t group); +} diff --git a/tests/gir/pid_t.gir b/tests/gir/pid_t.gir new file mode 100644 index 000000000..f92dc191b --- /dev/null +++ b/tests/gir/pid_t.gir @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/gir/pid_t.vapi-expected b/tests/gir/pid_t.vapi-expected new file mode 100644 index 000000000..8851ec53f --- /dev/null +++ b/tests/gir/pid_t.vapi-expected @@ -0,0 +1,7 @@ +[CCode (cprefix = "Test", gir_namespace = "Test", gir_version = "1.0", lower_case_cprefix = "test_")] +namespace Test { + [CCode (cheader_filename = "test.h")] + public static pid_t function (pid_t process); + [CCode (cheader_filename = "test.h")] + public static pid_t function_compat (pid_t process); +} diff --git a/tests/gir/socklen_t.gir b/tests/gir/socklen_t.gir new file mode 100644 index 000000000..8686f39b1 --- /dev/null +++ b/tests/gir/socklen_t.gir @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/gir/socklen_t.vapi-expected b/tests/gir/socklen_t.vapi-expected new file mode 100644 index 000000000..6b1523107 --- /dev/null +++ b/tests/gir/socklen_t.vapi-expected @@ -0,0 +1,7 @@ +[CCode (cprefix = "Test", gir_namespace = "Test", gir_version = "1.0", lower_case_cprefix = "test_")] +namespace Test { + [CCode (cheader_filename = "test.h")] + public static socklen_t function (socklen_t msg); + [CCode (cheader_filename = "test.h")] + public static socklen_t function_compat (socklen_t msg); +} diff --git a/tests/gir/uid_t.gir b/tests/gir/uid_t.gir new file mode 100644 index 000000000..afdb04204 --- /dev/null +++ b/tests/gir/uid_t.gir @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/gir/uid_t.vapi-expected b/tests/gir/uid_t.vapi-expected new file mode 100644 index 000000000..a66a5ae40 --- /dev/null +++ b/tests/gir/uid_t.vapi-expected @@ -0,0 +1,7 @@ +[CCode (cprefix = "Test", gir_namespace = "Test", gir_version = "1.0", lower_case_cprefix = "test_")] +namespace Test { + [CCode (cheader_filename = "test.h")] + public static uid_t function (uid_t user); + [CCode (cheader_filename = "test.h")] + public static uid_t function_compat (uid_t user); +} diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala index 7118864d9..e670b0e17 100644 --- a/vala/valagirparser.vala +++ b/vala/valagirparser.vala @@ -2889,9 +2889,21 @@ public class Vala.GirParser : CodeVisitor { } else if (type_name == "gushort") { type_name = "ushort"; } else if (type_name == "gint") { - type_name = "int"; + if (ctype != null && ctype.has_prefix ("dev_t")) { + type_name = "dev_t"; + } else if (ctype != null && ctype.has_prefix ("pid_t")) { + type_name = "pid_t"; + } else { + type_name = "int"; + } } else if (type_name == "guint") { - type_name = "uint"; + if (ctype != null && ctype.has_prefix ("gid_t")) { + type_name = "gid_t"; + } else if (ctype != null && ctype.has_prefix ("uid_t")) { + type_name = "uid_t"; + } else { + type_name = "uint"; + } } else if (type_name == "glong") { if (ctype != null && ctype.has_prefix ("gssize")) { type_name = "ssize_t"; @@ -2919,7 +2931,11 @@ public class Vala.GirParser : CodeVisitor { } else if (type_name == "guint16") { type_name = "uint16"; } else if (type_name == "gint32") { - type_name = "int32"; + if (ctype != null && ctype.has_prefix ("socklen_t")) { + type_name = "socklen_t"; + } else { + type_name = "int32"; + } } else if (type_name == "guint32") { type_name = "uint32"; } else if (type_name == "gint64") { diff --git a/vapi/glib-2.0.vapi b/vapi/glib-2.0.vapi index 0863d7a67..55c90cd30 100644 --- a/vapi/glib-2.0.vapi +++ b/vapi/glib-2.0.vapi @@ -1025,6 +1025,41 @@ public struct double { public struct off_t { } +//FIXME [GIR (name = "pid_t")] +[GIR (name = "gint")] +[IntegerType (rank = 9)] +[CCode (cheader_filename = "sys/types.h", has_type_id = false, default_value = "0")] +public struct pid_t { +} + +//FIXME [GIR (name = "uid_t")] +[GIR (name = "guint")] +[IntegerType (rank = 9)] +[CCode (cheader_filename = "sys/types.h", has_type_id = false, default_value = "0")] +public struct uid_t { +} + +//FIXME [GIR (name = "gid_t")] +[GIR (name = "guint")] +[IntegerType (rank = 9)] +[CCode (cheader_filename = "sys/types.h", has_type_id = false, default_value = "0")] +public struct gid_t { +} + +//FIXME [GIR (name = "dev_t")] +[GIR (name = "gint")] +[IntegerType (rank = 9)] +[CCode (cheader_filename = "sys/types.h", has_type_id = false, default_value = "0")] +public struct dev_t { +} + +//FIXME [GIR (name = "socklen_t")] +[GIR (name = "gint32")] +[IntegerType (rank = 9)] +[CCode (cheader_filename = "sys/socket.h", has_type_id = false, default_value = "0")] +public struct socklen_t { +} + //FIXME [GIR (name = "time_t")] [GIR (name = "glong")] [CCode (cheader_filename = "time.h", has_type_id = false, default_value = "0")] -- 2.47.2