filter.duplicate = false;
}
-static const struct filter_clear {
+struct clear_entry {
const char *name;
void (*clear) (void);
-} filter_clear[] = {
+};
+
+static const struct clear_entry filter_clear[] = {
{ "uuids", filter_clear_uuids },
{ "rssi", filter_clear_rssi },
{ "pathloss", filter_clear_pathloss },
return NULL;
}
-static void cmd_scan_filter_clear(int argc, char *argv[])
+static gboolean data_clear(const struct clear_entry *entry_table,
+ const char *name)
{
- const struct filter_clear *fc;
+ const struct clear_entry *entry;
bool all = false;
- if (argc < 2 || !strlen(argv[1]))
+ if (!name || !strlen(name) || !strcmp("all", name))
all = true;
- for (fc = filter_clear; fc && fc->name; fc++) {
- if (all || !strcmp(fc->name, argv[1])) {
- fc->clear();
- filter.set = false;
+ for (entry = entry_table; entry && entry->name; entry++) {
+ if (all || !strcmp(entry->name, name)) {
+ entry->clear();
if (!all)
goto done;
}
}
if (!all) {
- bt_shell_printf("Invalid argument %s\n", argv[1]);
- return;
+ bt_shell_printf("Invalid argument %s\n", name);
+ return FALSE;
}
done:
+ return TRUE;
+}
+
+static void cmd_scan_filter_clear(int argc, char *argv[])
+{
+ bool all = false;
+
+ if (argc < 2 || !strlen(argv[1]))
+ all = true;
+
+ if (!data_clear(filter_clear, all ? "all" : argv[1]))
+ return;
+
+ filter.set = false;
+
if (check_default_ctrl() == FALSE)
return;