]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girparser: Recognize usage of dev_t/gid_t/pid_t/uid_t/socklen_t and don't rely on...
authorRico Tzschichholz <ricotz@ubuntu.com>
Mon, 18 Mar 2024 15:23:24 +0000 (16:23 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Fri, 22 Mar 2024 09:31:55 +0000 (10:31 +0100)
13 files changed:
tests/Makefile.am
tests/gir/dev_t.gir [new file with mode: 0644]
tests/gir/dev_t.vapi-expected [new file with mode: 0644]
tests/gir/gid_t.gir [new file with mode: 0644]
tests/gir/gid_t.vapi-expected [new file with mode: 0644]
tests/gir/pid_t.gir [new file with mode: 0644]
tests/gir/pid_t.vapi-expected [new file with mode: 0644]
tests/gir/socklen_t.gir [new file with mode: 0644]
tests/gir/socklen_t.vapi-expected [new file with mode: 0644]
tests/gir/uid_t.gir [new file with mode: 0644]
tests/gir/uid_t.vapi-expected [new file with mode: 0644]
vala/valagirparser.vala
vapi/glib-2.0.vapi

index 507b4e19cbdd406d105d26c97b2a80c0cf4b33a5..9932c40e400e15d0645b380ce8b9d2d3891f387d 100644 (file)
@@ -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 (file)
index 0000000..a00d753
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+<include name="GLib" version="2.0"/>
+<package name="test"/>
+<c:include name="test.h"/>
+<namespace name="Test" version="1.0" shared-library="test" c:prefix="Test" c:identifier-prefixes="Test" c:symbol-prefixes="test">
+<function name="function" c:identifier="test_function">
+  <return-value transfer-ownership="none">
+    <type name="dev_t" c:type="dev_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="device" transfer-ownership="none">
+      <type name="dev_t" c:type="dev_t"/>
+    </parameter>
+  </parameters>
+</function>
+<function name="function_compat" c:identifier="test_function_compat">
+  <return-value transfer-ownership="none">
+    <type name="gint" c:type="dev_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="device" transfer-ownership="none">
+      <type name="gint" c:type="dev_t"/>
+    </parameter>
+  </parameters>
+</function>
+</namespace>
+</repository>
diff --git a/tests/gir/dev_t.vapi-expected b/tests/gir/dev_t.vapi-expected
new file mode 100644 (file)
index 0000000..311f075
--- /dev/null
@@ -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 (file)
index 0000000..16c7168
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+<include name="GLib" version="2.0"/>
+<package name="test"/>
+<c:include name="test.h"/>
+<namespace name="Test" version="1.0" shared-library="test" c:prefix="Test" c:identifier-prefixes="Test" c:symbol-prefixes="test">
+<function name="function" c:identifier="test_function">
+  <return-value transfer-ownership="none">
+    <type name="gid_t" c:type="gid_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="group" transfer-ownership="none">
+      <type name="gid_t" c:type="gid_t"/>
+    </parameter>
+  </parameters>
+</function>
+<function name="function_compat" c:identifier="test_function_compat">
+  <return-value transfer-ownership="none">
+    <type name="guint" c:type="gid_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="group" transfer-ownership="none">
+      <type name="guint" c:type="gid_t"/>
+    </parameter>
+  </parameters>
+</function>
+</namespace>
+</repository>
diff --git a/tests/gir/gid_t.vapi-expected b/tests/gir/gid_t.vapi-expected
new file mode 100644 (file)
index 0000000..84ec964
--- /dev/null
@@ -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 (file)
index 0000000..f92dc19
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+<include name="GLib" version="2.0"/>
+<package name="test"/>
+<c:include name="test.h"/>
+<namespace name="Test" version="1.0" shared-library="test" c:prefix="Test" c:identifier-prefixes="Test" c:symbol-prefixes="test">
+<function name="function" c:identifier="test_function">
+  <return-value transfer-ownership="none">
+    <type name="pid_t" c:type="pid_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="process" transfer-ownership="none">
+      <type name="pid_t" c:type="pid_t"/>
+    </parameter>
+  </parameters>
+</function>
+<function name="function_compat" c:identifier="test_function_compat">
+  <return-value transfer-ownership="none">
+    <type name="gint" c:type="pid_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="process" transfer-ownership="none">
+      <type name="gint" c:type="pid_t"/>
+    </parameter>
+  </parameters>
+</function>
+</namespace>
+</repository>
diff --git a/tests/gir/pid_t.vapi-expected b/tests/gir/pid_t.vapi-expected
new file mode 100644 (file)
index 0000000..8851ec5
--- /dev/null
@@ -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 (file)
index 0000000..8686f39
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+<include name="GLib" version="2.0"/>
+<package name="test"/>
+<c:include name="test.h"/>
+<namespace name="Test" version="1.0" shared-library="test" c:prefix="Test" c:identifier-prefixes="Test" c:symbol-prefixes="test">
+<function name="function" c:identifier="test_function">
+  <return-value transfer-ownership="none">
+    <type name="socklen_t" c:type="socklen_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="msg" transfer-ownership="none">
+      <type name="socklen_t" c:type="socklen_t"/>
+    </parameter>
+  </parameters>
+</function>
+<function name="function_compat" c:identifier="test_function_compat">
+  <return-value transfer-ownership="none">
+    <type name="gint32" c:type="socklen_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="msg" transfer-ownership="none">
+      <type name="gint32" c:type="socklen_t"/>
+    </parameter>
+  </parameters>
+</function>
+</namespace>
+</repository>
diff --git a/tests/gir/socklen_t.vapi-expected b/tests/gir/socklen_t.vapi-expected
new file mode 100644 (file)
index 0000000..6b15231
--- /dev/null
@@ -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 (file)
index 0000000..afdb042
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+<include name="GLib" version="2.0"/>
+<package name="test"/>
+<c:include name="test.h"/>
+<namespace name="Test" version="1.0" shared-library="test" c:prefix="Test" c:identifier-prefixes="Test" c:symbol-prefixes="test">
+<function name="function" c:identifier="test_function">
+  <return-value transfer-ownership="none">
+    <type name="uid_t" c:type="uid_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="user" transfer-ownership="none">
+      <type name="uid_t" c:type="uid_t"/>
+    </parameter>
+  </parameters>
+</function>
+<function name="function_compat" c:identifier="test_function_compat">
+  <return-value transfer-ownership="none">
+    <type name="guint" c:type="uid_t"/>
+  </return-value>
+  <parameters>
+    <parameter name="user" transfer-ownership="none">
+      <type name="guint" c:type="uid_t"/>
+    </parameter>
+  </parameters>
+</function>
+</namespace>
+</repository>
diff --git a/tests/gir/uid_t.vapi-expected b/tests/gir/uid_t.vapi-expected
new file mode 100644 (file)
index 0000000..a66a5ae
--- /dev/null
@@ -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);
+}
index 7118864d99c2786e49d30d4a84e03d2635388931..e670b0e17408edeb32b0c7c81f5bb832d729297e 100644 (file)
@@ -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") {
index 0863d7a671e0a22585f8b52ed9aa02629b957889..55c90cd30906892c3f8f58c6477df133d5739db9 100644 (file)
@@ -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")]