From: Eder Ruiz Maria <eder.ruiz@xxxxxxxxxxxxx> --- emulator/btdev.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/emulator/btdev.c b/emulator/btdev.c index 52b58ce..30022d1 100644 --- a/emulator/btdev.c +++ b/emulator/btdev.c @@ -115,6 +115,23 @@ struct btdev { static struct btdev *btdev_list[MAX_BTDEV_ENTRIES] = { }; +static int get_hook_index(struct btdev *btdev, enum btdev_hook_type type, + uint16_t opcode) +{ + int i; + + for (i = 0; i < MAX_HOOK_ENTRIES; i++) { + if (btdev->hook_list[i] == NULL) + continue; + + if (btdev->hook_list[i]->type == type && + btdev->hook_list[i]->opcode == opcode) + return i; + } + + return -1; +} + static inline int add_btdev(struct btdev *btdev) { int i, index = -1; @@ -1710,6 +1727,9 @@ int btdev_add_hook(struct btdev *btdev, enum btdev_hook_type type, if (!btdev) return -1; + if (get_hook_index(btdev, type, opcode) > 0) + return -1; + for (i = 0; i < MAX_HOOK_ENTRIES; i++) { if (btdev->hook_list[i] == NULL) { btdev->hook_list[i] = malloc(sizeof(struct hook)); -- 1.7.9.5 -- 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