[PATCH BlueZ 4/5] gdbus: use argument name in method introspection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 gdbus/object.c |   34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)

diff --git a/gdbus/object.c b/gdbus/object.c
index bfd1873..3f82865 100644
--- a/gdbus/object.c
+++ b/gdbus/object.c
@@ -66,6 +66,7 @@ static void print_arguments(GString *gstr, const char *sig,
 	int i;
 
 	for (i = 0; sig[i]; i++) {
+		char name[64];
 		char type[32];
 		int struct_level, dict_level;
 		unsigned int len;
@@ -113,15 +114,38 @@ static void print_arguments(GString *gstr, const char *sig,
 		}
 
 		type[len + 1] = '\0';
+		len = 0;
+
+		/* Check if there is an arg name */
+		if (sig[i + 1] == '[') {
+			len = sizeof(" name=\"") - 1;
+			memcpy(name, " name=\"", len);
+
+			for (i += 2; len < (sizeof(name) - 1); i++, len++) {
+				if (sig[i] == '\0') {
+					error("Unexpected signature: %s", sig);
+					return;
+				}
+
+				if (sig[i] == ']')
+					break;
+
+				name[len] = sig[i];
+			}
+
+			name[len++] = '\"';
+		}
+
+		name[len] = '\0';
 
 		if (direction)
 			g_string_append_printf(gstr,
-					"\t\t\t<arg type=\"%s\" direction=\"%s\"/>\n",
-					type, direction);
+					"\t\t\t<arg%s type=\"%s\" direction=\"%s\"/>\n",
+					name, type, direction);
 		else
 			g_string_append_printf(gstr,
-					"\t\t\t<arg type=\"%s\"/>\n",
-					type);
+					"\t\t\t<arg%s type=\"%s\"/>\n",
+					name, type);
 	}
 }
 
@@ -137,7 +161,7 @@ static void generate_interface_xml(GString *gstr, struct interface_data *iface)
 		else {
 			g_string_append_printf(gstr, "\t\t<method name=\"%s\">\n",
 								method->name);
-			print_arguments(gstr, method->signature, "in");
+			print_arguments(gstr, method->decorated_signature, "in");
 			print_arguments(gstr, method->reply, "out");
 			g_string_append_printf(gstr, "\t\t</method>\n");
 		}
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux