OSDN Git Service

tools: Remove GLib mainloop requirement from btmgmt utility
authorMarcel Holtmann <marcel@holtmann.org>
Sun, 12 Jan 2014 10:23:01 +0000 (02:23 -0800)
committerMarcel Holtmann <marcel@holtmann.org>
Sun, 12 Jan 2014 10:23:01 +0000 (02:23 -0800)
Makefile.tools
tools/btmgmt.c

index 02798ae..338365d 100644 (file)
@@ -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
index 97215ba..c0e0422 100644 (file)
 #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;
 }