Diff between 87b9e0dc77a84c22cb2fb0d11abf51ef4a2e8f9f and d94debd256a6f4bd402b4d0510df1d0451a03d8d

Changed Files

File Additions Deletions Status
Makefile.tools +2 -1 modified
tools/btmgmt.c +44 -44 modified

Full Patch

diff --git a/Makefile.tools b/Makefile.tools
index 02798ae..338365d 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -223,7 +223,8 @@ tools_hwdb_LDADD = lib/libbluetooth-internal.la
 tools_hcieventmask_LDADD = lib/libbluetooth-internal.la
 
 tools_btmgmt_SOURCES = tools/btmgmt.c src/glib-helper.c src/eir.c \
-				src/shared/io.h src/shared/io-glib.c \
+				monitor/mainloop.h monitor/mainloop.c \
+				src/shared/io.h src/shared/io-mainloop.c \
 				src/shared/queue.h src/shared/queue.c \
 				src/shared/util.h src/shared/util.c \
 				src/shared/mgmt.h src/shared/mgmt.c
diff --git a/tools/btmgmt.c b/tools/btmgmt.c
index 97215ba..c0e0422 100644
--- a/tools/btmgmt.c
+++ b/tools/btmgmt.c
@@ -41,14 +41,14 @@
 #include <bluetooth/sdp_lib.h>
 
 #include <glib.h>
+#include "glib-helper.h"
 
+#include "monitor/mainloop.h"
+#include "src/shared/util.h"
 #include "src/shared/mgmt.h"
-#include "glib-helper.h"
 #include "lib/mgmt.h"
 #include "eir.h"
 
-static GMainLoop *event_loop = NULL;
-
 static bool monitor = false;
 static bool discovery = false;
 static bool resolve_names = true;
@@ -138,7 +138,7 @@ static void discovering(uint16_t index, uint16_t len, const void *param,
 	}
 
 	if (ev->discovering == 0 && discovery) {
-		g_main_loop_quit(event_loop);
+		mainloop_quit();
 		return;
 	}
 
@@ -376,7 +376,7 @@ static void pin_rsp(uint8_t status, uint16_t len, const void *param,
 		fprintf(stderr,
 			"PIN Code reply failed with status 0x%02x (%s)\n",
 						status, mgmt_errstr(status));
-		g_main_loop_quit(event_loop);
+		mainloop_quit();
 		return;
 	}
 
@@ -405,7 +405,7 @@ static void pin_neg_rsp(uint8_t status, uint16_t len, const void *param,
 		fprintf(stderr,
 			"PIN Neg reply failed with status 0x%02x (%s)\n",
 						status, mgmt_errstr(status));
-		g_main_loop_quit(event_loop);
+		mainloop_quit();
 		return;
 	}
 
@@ -470,7 +470,7 @@ static void confirm_rsp(uint8_t status, uint16_t len, const void *param,
 		fprintf(stderr,
 			"User Confirm reply failed. status 0x%02x (%s)\n",
 						status, mgmt_errstr(status));
-		g_main_loop_quit(event_loop);
+		mainloop_quit();
 		return;
 	}
 
@@ -496,7 +496,7 @@ static void confirm_neg_rsp(uint8_t status, uint16_t len, const void *param,
 		fprintf(stderr,
 			"Confirm Neg reply failed. status 0x%02x (%s)\n",
 						status, mgmt_errstr(status));
-		g_main_loop_quit(event_loop);
+		mainloop_quit();
 		return;
 	}
 
@@ -590,7 +590,7 @@ static void version_rsp(uint8_t status, uint16_t len, const void *param,
 						bt_get_le16(&rp->revision));
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_version(struct mgmt *mgmt, uint16_t index, int argc,
@@ -650,7 +650,7 @@ static void commands_rsp(uint8_t status, uint16_t len, const void *param,
 	}
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_commands(struct mgmt *mgmt, uint16_t index, int argc,
@@ -667,7 +667,7 @@ static void info_rsp(uint8_t status, uint16_t len, const void *param,
 							void *user_data)
 {
 	const struct mgmt_rp_read_info *rp = param;
-	int id = GPOINTER_TO_INT(user_data);
+	uint16_t index = PTR_TO_UINT(user_data);
 	char addr[18];
 
 	pending--;
@@ -675,7 +675,7 @@ static void info_rsp(uint8_t status, uint16_t len, const void *param,
 	if (status != 0) {
 		fprintf(stderr,
 			"Reading hci%u info failed with status 0x%02x (%s)\n",
-					id, status, mgmt_errstr(status));
+					index, status, mgmt_errstr(status));
 		goto done;
 	}
 
@@ -686,8 +686,8 @@ static void info_rsp(uint8_t status, uint16_t len, const void *param,
 
 	ba2str(&rp->bdaddr, addr);
 	printf("hci%u:\taddr %s version %u manufacturer %u"
-			" class 0x%02x%02x%02x\n",
-			id, addr, rp->version, bt_get_le16(&rp->manufacturer),
+			" class 0x%02x%02x%02x\n", index,
+			addr, rp->version, bt_get_le16(&rp->manufacturer),
 			rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
 
 	printf("\tsupported settings: ");
@@ -703,7 +703,7 @@ static void info_rsp(uint8_t status, uint16_t len, const void *param,
 		return;
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void index_rsp(uint8_t status, uint16_t len, const void *param,
@@ -755,7 +755,7 @@ static void index_rsp(uint8_t status, uint16_t len, const void *param,
 		if (monitor)
 			printf("hci%u ", index);
 
-		data = GINT_TO_POINTER((int) index);
+		data = UINT_TO_PTR(index);
 
 		if (mgmt_send(mgmt, MGMT_OP_READ_INFO, index, 0, NULL,
 						info_rsp, data, NULL) == 0) {
@@ -772,7 +772,7 @@ static void index_rsp(uint8_t status, uint16_t len, const void *param,
 	return;
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_info(struct mgmt *mgmt, uint16_t index, int argc, char **argv)
@@ -790,7 +790,7 @@ static void cmd_info(struct mgmt *mgmt, uint16_t index, int argc, char **argv)
 		return;
 	}
 
-	data = GINT_TO_POINTER((int) index);
+	data = UINT_TO_PTR(index);
 
 	if (mgmt_send(mgmt, MGMT_OP_READ_INFO, index, 0, NULL, info_rsp,
 							data, NULL) == 0) {
@@ -824,14 +824,17 @@ static unsigned int send_cmd(struct mgmt *mgmt, uint16_t op, uint16_t id,
 	struct command_data *data;
 	unsigned int send_id;
 
-	data = g_new0(struct command_data, 1);
+	data = new0(struct command_data, 1);
+	if (!data)
+		return 0;
+
 	data->id = id;
 	data->op = op;
 	data->callback = cb;
 
-	send_id = mgmt_send(mgmt, op, id, len, param, cmd_rsp, data, g_free);
+	send_id = mgmt_send(mgmt, op, id, len, param, cmd_rsp, data, free);
 	if (send_id == 0)
-		g_free(data);
+		free(data);
 
 	return send_id;
 }
@@ -859,7 +862,7 @@ static void setting_rsp(uint16_t op, uint16_t id, uint8_t status, uint16_t len,
 	printf("\n");
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_setting(struct mgmt *mgmt, uint16_t index, uint16_t op,
@@ -1025,7 +1028,7 @@ static void class_rsp(uint16_t op, uint16_t id, uint8_t status, uint16_t len,
 		rp->class_of_dev[2], rp->class_of_dev[1], rp->class_of_dev[0]);
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_class(struct mgmt *mgmt, uint16_t index, int argc, char **argv)
@@ -1078,7 +1081,7 @@ static void disconnect_rsp(uint8_t status, uint16_t len, const void *param,
 				addr, status, mgmt_errstr(status));
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_disconnect(struct mgmt *mgmt, uint16_t index, int argc,
@@ -1131,7 +1134,7 @@ static void con_rsp(uint8_t status, uint16_t len, const void *param,
 	}
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_con(struct mgmt *mgmt, uint16_t index, int argc, char **argv)
@@ -1153,7 +1156,7 @@ static void find_rsp(uint8_t status, uint16_t len, const void *param,
 		fprintf(stderr,
 			"Unable to start discovery. status 0x%02x (%s)\n",
 						status, mgmt_errstr(status));
-		g_main_loop_quit(event_loop);
+		mainloop_quit();
 		return;
 	}
 
@@ -1229,7 +1232,7 @@ static void name_rsp(uint8_t status, uint16_t len, const void *param,
 						"with status 0x%02x (%s)\n",
 						status, mgmt_errstr(status));
 
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_name(struct mgmt *mgmt, uint16_t index, int argc, char **argv)
@@ -1287,7 +1290,7 @@ static void pair_rsp(uint8_t status, uint16_t len, const void *param,
 	printf("Paired with %s\n", addr);
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void pair_usage(void)
@@ -1379,7 +1382,7 @@ static void cancel_pair_rsp(uint8_t status, uint16_t len, const void *param,
 	printf("Pairing Cancelled with %s\n", addr);
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cancel_pair_usage(void)
@@ -1465,7 +1468,7 @@ static void unpair_rsp(uint8_t status, uint16_t len, const void *param,
 	printf("%s unpaired\n", addr);
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_unpair(struct mgmt *mgmt, uint16_t index, int argc,
@@ -1501,7 +1504,7 @@ static void keys_rsp(uint8_t status, uint16_t len, const void *param,
 	else
 		printf("Keys successfully loaded\n");
 
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_keys(struct mgmt *mgmt, uint16_t index, int argc, char **argv)
@@ -1549,7 +1552,7 @@ static void block_rsp(uint16_t op, uint16_t id, uint8_t status, uint16_t len,
 	printf("%s %s succeeded\n", mgmt_opstr(op), addr);
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void block_usage(void)
@@ -1784,7 +1787,7 @@ static void local_oob_rsp(uint8_t status, uint16_t len, const void *param,
 	printf("\n");
 
 done:
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void cmd_local_oob(struct mgmt *mgmt, uint16_t index,
@@ -1810,7 +1813,7 @@ static void did_rsp(uint8_t status, uint16_t len, const void *param,
 	else
 		printf("Device ID successfully set\n");
 
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void did_usage(void)
@@ -1873,7 +1876,7 @@ static void static_addr_rsp(uint8_t status, uint16_t len, const void *param,
 	else
 		printf("Static address successfully set\n");
 
-	g_main_loop_quit(event_loop);
+	mainloop_quit();
 }
 
 static void static_addr_usage(void)
@@ -1978,6 +1981,7 @@ int main(int argc, char *argv[])
 	int opt, i;
 	uint16_t index = MGMT_INDEX_NONE;
 	struct mgmt *mgmt;
+	int exit_status;
 
 	while ((opt = getopt_long(argc, argv, "+hvi:",
 						main_options, NULL)) != -1) {
@@ -2008,13 +2012,12 @@ int main(int argc, char *argv[])
 		return 0;
 	}
 
-	event_loop = g_main_loop_new(NULL, FALSE);
+	mainloop_init();
 
 	mgmt = mgmt_new_default();
 	if (!mgmt) {
 		fprintf(stderr, "Unable to open mgmt_socket\n");
-		g_main_loop_unref(event_loop);
-		return -1;
+		return EXIT_FAILURE;
 	}
 
 	for (i = 0; command[i].cmd; i++) {
@@ -2028,8 +2031,7 @@ int main(int argc, char *argv[])
 	if (command[i].cmd == NULL) {
 		fprintf(stderr, "Unknown command: %s\n", argv[0]);
 		mgmt_unref(mgmt);
-		g_main_loop_unref(event_loop);
-		return -1;
+		return EXIT_FAILURE;
 	}
 
 	mgmt_register(mgmt, MGMT_EV_CONTROLLER_ERROR, index, controller_error,
@@ -2061,13 +2063,11 @@ int main(int argc, char *argv[])
 	mgmt_register(mgmt, MGMT_EV_USER_CONFIRM_REQUEST, index, user_confirm,
 								mgmt, NULL);
 
-	g_main_loop_run(event_loop);
+	exit_status = mainloop_run();
 
 	mgmt_cancel_all(mgmt);
 	mgmt_unregister_all(mgmt);
 	mgmt_unref(mgmt);
 
-	g_main_loop_unref(event_loop);
-
-	return 0;
+	return exit_status;
 }