diff --git a/input/device.c b/input/device.c
index c08ba18..7eac71e 100644
--- a/input/device.c
+++ b/input/device.c
struct btd_adapter *adapter = device_get_adapter(device);
struct input_device *idev;
char name[249], src_addr[18], dst_addr[18];
+ uint8_t dst_type;
idev = g_new0(struct input_device, 1);
adapter_get_address(adapter, &idev->src);
- device_get_address(device, &idev->dst, NULL);
+ device_get_address(device, &idev->dst, &dst_type);
idev->device = btd_device_ref(device);
idev->path = g_strdup(path);
idev->conn = dbus_connection_ref(conn);
ba2str(&idev->src, src_addr);
ba2str(&idev->dst, dst_addr);
- if (read_device_name(src_addr, dst_addr, name) == 0)
+
+ if (read_device_name(src_addr, dst_addr, dst_type, name) == 0)
idev->name = g_strdup(name);
if (g_dbus_register_interface(conn, idev->path, INPUT_DEVICE_INTERFACE,
diff --git a/src/adapter.c b/src/adapter.c
index 1546aed..505797f 100644
--- a/src/adapter.c
+++ b/src/adapter.c
eir_data.appearance);
if (eir_data.name != NULL && eir_data.name_complete)
- write_device_name(&adapter->bdaddr, bdaddr, eir_data.name);
+ write_device_name(&adapter->bdaddr, bdaddr, bdaddr_type,
+ eir_data.name);
dev = adapter_search_found_devices(adapter, bdaddr);
if (dev) {
diff --git a/src/device.c b/src/device.c
index c210bcb..09518f3 100644
--- a/src/device.c
+++ b/src/device.c
device->bdaddr_type = bdaddr_type;
adapter_get_address(adapter, &src);
ba2str(&src, srcaddr);
- read_device_name(srcaddr, address, device->name);
+
+ read_device_name(srcaddr, address, bdaddr_type, device->name);
if (read_device_alias(srcaddr, address, alias, sizeof(alias)) == 0)
device->alias = g_strdup(alias);
device->trusted = read_trust(&src, address, GLOBAL_TRUST);
diff --git a/src/event.c b/src/event.c
index ec5926f..17fc250 100644
--- a/src/event.c
+++ b/src/event.c
{
struct btd_adapter *adapter;
struct btd_device *device;
+ uint8_t peer_type;
struct remote_dev_info *dev_info;
if (!g_utf8_validate(name, -1, NULL)) {
g_strstrip(name);
}
- write_device_name(local, peer, name);
-
if (!get_adapter_and_device(local, peer, &adapter, &device, FALSE))
return;
+ peer_type = device_get_addr_type(device);
+
+ write_device_name(local, peer, peer_type, name);
+
dev_info = adapter_search_found_devices(adapter, peer);
if (dev_info) {
g_free(dev_info->name);
diff --git a/src/storage.c b/src/storage.c
index 17e8001..9289e07 100644
--- a/src/storage.c
+++ b/src/storage.c
return 0;
}
-int write_device_name(bdaddr_t *local, bdaddr_t *peer, char *name)
+int write_device_name(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
+ char *name)
{
- char filename[PATH_MAX + 1], addr[18], str[HCI_MAX_NAME_LENGTH + 1];
+ char filename[PATH_MAX + 1], key[20], str[HCI_MAX_NAME_LENGTH + 1];
int i;
memset(str, 0, sizeof(str));
create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
- ba2str(peer, addr);
- return textfile_put(filename, addr, str);
+ ba2str(peer, key);
+ sprintf(&key[17], "#%hhu", peer_type);
+
+ return textfile_put(filename, key, str);
}
-int read_device_name(const char *src, const char *dst, char *name)
+int read_device_name(const char *src, const char *dst, uint8_t dst_type,
+ char *name)
{
- char filename[PATH_MAX + 1], *str;
+ char filename[PATH_MAX + 1], *str, key[20];
int len;
create_name(filename, PATH_MAX, STORAGEDIR, src, "names");
- str = textfile_get(filename, dst);
- if (!str)
+ snprintf(key, sizeof(key), "%17s#%hhu", dst, dst_type);
+
+ str = textfile_get(filename, key);
+ if (str != NULL)
+ goto done;
+
+ /* Try old format (address only) */
+ key[17] = '\0';
+
+ str = textfile_get(filename, key);
+ if (str == NULL)
return -ENOENT;
+done:
len = strlen(str);
if (len > HCI_MAX_NAME_LENGTH)
str[HCI_MAX_NAME_LENGTH] = '\0';
diff --git a/src/storage.h b/src/storage.h
index cc00e97..07de39f 100644
--- a/src/storage.h
+++ b/src/storage.h
uint16_t *appearance);
int write_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class);
int read_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t *class);
-int write_device_name(bdaddr_t *local, bdaddr_t *peer, char *name);
-int read_device_name(const char *src, const char *dst, char *name);
+int write_device_name(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
+ char *name);
+int read_device_name(const char *src, const char *dst, uint8_t dst_type,
+ char *name);
int write_remote_eir(bdaddr_t *local, bdaddr_t *peer, uint8_t *data,
uint8_t data_len);
int read_remote_eir(bdaddr_t *local, bdaddr_t *peer, uint8_t *data);