From b1a95619dec73a50fd32c953230ae6d3d11d6f17 Mon Sep 17 00:00:00 2001 From: Paulo Alcantara Date: Fri, 27 Jul 2012 16:43:18 -0300 Subject: [PATCH] storage: Store address type in "profiles" file --- src/adapter.c | 9 +++++++-- src/device.c | 5 +++-- src/storage.c | 11 +++++++---- src/storage.h | 3 ++- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index f0b4bebf7..8d18f40ae 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -1674,15 +1674,20 @@ static const GDBusSignalTable adapter_signals[] = { static void create_stored_device_from_profiles(char *key, char *value, void *user_data) { + char address[18]; + uint8_t bdaddr_type; struct btd_adapter *adapter = user_data; GSList *list, *uuids = bt_string2list(value); struct btd_device *device; + if (sscanf(key, "%17s#%hhu", address, &bdaddr_type) < 2) + bdaddr_type = BDADDR_BREDR; + if (g_slist_find_custom(adapter->devices, - key, (GCompareFunc) device_address_cmp)) + address, (GCompareFunc) device_address_cmp)) return; - device = device_create(connection, adapter, key, BDADDR_BREDR); + device = device_create(connection, adapter, address, bdaddr_type); if (!device) return; diff --git a/src/device.c b/src/device.c index 4459fd52b..f94116ae3 100644 --- a/src/device.c +++ b/src/device.c @@ -1540,12 +1540,13 @@ static void store_profiles(struct btd_device *device) adapter_get_address(adapter, &src); if (!device->uuids) { - write_device_profiles(&src, &device->bdaddr, ""); + write_device_profiles(&src, &device->bdaddr, + device->bdaddr_type, ""); return; } str = bt_list2string(device->uuids); - write_device_profiles(&src, &device->bdaddr, str); + write_device_profiles(&src, &device->bdaddr, device->bdaddr_type, str); g_free(str); } diff --git a/src/storage.c b/src/storage.c index c10f9aed3..05fb0a8cc 100644 --- a/src/storage.c +++ b/src/storage.c @@ -807,9 +807,10 @@ gboolean read_trust(const bdaddr_t *local, const char *addr, const char *service return ret; } -int write_device_profiles(bdaddr_t *src, bdaddr_t *dst, const char *profiles) +int write_device_profiles(bdaddr_t *src, bdaddr_t *dst, uint8_t dst_type, + const char *profiles) { - char filename[PATH_MAX + 1], addr[18]; + char filename[PATH_MAX + 1], key[20]; if (!profiles) return -EINVAL; @@ -818,8 +819,10 @@ int write_device_profiles(bdaddr_t *src, bdaddr_t *dst, const char *profiles) create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - ba2str(dst, addr); - return textfile_put(filename, addr, profiles); + ba2str(dst, key); + sprintf(&key[17], "#%hhu", dst_type); + + return textfile_put(filename, key, profiles); } int delete_entry(bdaddr_t *src, const char *storage, bdaddr_t *dst, diff --git a/src/storage.h b/src/storage.h index cd7b1611a..6af2475ec 100644 --- a/src/storage.h +++ b/src/storage.h @@ -63,7 +63,8 @@ int read_link_key(bdaddr_t *local, bdaddr_t *peer, unsigned char *key, uint8_t * ssize_t read_pin_code(bdaddr_t *local, bdaddr_t *peer, char *pin); gboolean read_trust(const bdaddr_t *local, const char *addr, const char *service); int write_trust(const char *src, const char *addr, const char *service, gboolean trust); -int write_device_profiles(bdaddr_t *src, bdaddr_t *dst, const char *profiles); +int write_device_profiles(bdaddr_t *src, bdaddr_t *dst, uint8_t dst_type, + const char *profiles); int delete_entry(bdaddr_t *src, const char *storage, bdaddr_t *dst, uint8_t dst_type); int store_record(const gchar *src, const gchar *dst, sdp_record_t *rec); -- 2.47.3