diff --git a/src/adapter.c b/src/adapter.c
index 010ec2e..c7b9b7e 100644
--- a/src/adapter.c
+++ b/src/adapter.c
return addr_type;
}
+static unsigned char dirent_type(const char *parent, const char *name)
+{
+ char filename[PATH_MAX];
+ struct stat st;
+
+ snprintf(filename, sizeof(filename), "%s/%s", parent, name);
+ if (lstat(filename, &st) == 0 && S_ISDIR(st.st_mode))
+ return DT_DIR;
+
+ return DT_UNKNOWN;
+}
+
static void load_devices(struct btd_adapter *adapter)
{
- char filename[PATH_MAX + 1];
+ char filename[PATH_MAX + 1], dirname[PATH_MAX + 1];
char srcaddr[18];
GSList *keys = NULL;
GSList *ltks = NULL;
ba2str(&adapter->bdaddr, srcaddr);
- snprintf(filename, PATH_MAX, STORAGEDIR "/%s", srcaddr);
- filename[PATH_MAX] = '\0';
+ snprintf(dirname, PATH_MAX, STORAGEDIR "/%s", srcaddr);
+ dirname[PATH_MAX] = '\0';
- dir = opendir(filename);
+ dir = opendir(dirname);
if (!dir) {
error("Unable to open adapter storage directory: %s", filename);
return;
struct conn_param *param;
uint8_t bdaddr_type;
+ if (entry->d_type == DT_UNKNOWN)
+ entry->d_type = dirent_type(dirname, entry->d_name);
+
if (entry->d_type != DT_DIR || bachk(entry->d_name) < 0)
continue;