device: Fix bogus errors on load_att_info
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 15 Dec 2021 22:48:07 +0000 (14:48 -0800)
committerAyush Garg <ayush.garg@samsung.com>
Fri, 11 Mar 2022 13:38:38 +0000 (19:08 +0530)
load_att_info would attempt to load attributes file from the storage but
in case it doesn't exists it would print an error instead of just
bailing out as attributes file is created on demand when there are
something to be stored.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
src/device.c

index 058780a..71c9dad 100644 (file)
@@ -21,6 +21,7 @@
 #include <errno.h>
 #include <dirent.h>
 #include <time.h>
+#include <sys/stat.h>
 
 #include <glib.h>
 #include <dbus/dbus.h>
@@ -6139,6 +6140,7 @@ static void load_att_info(struct btd_device *device, const char *local,
                                const char *peer)
 {
        char filename[PATH_MAX];
+       struct stat st;
        GKeyFile *key_file;
        GError *gerr = NULL;
        char *prim_uuid, *str;
@@ -6148,12 +6150,13 @@ static void load_att_info(struct btd_device *device, const char *local,
        char tmp[3];
        int i;
 
-       sdp_uuid16_create(&uuid, GATT_PRIM_SVC_UUID);
-       prim_uuid = bt_uuid2string(&uuid);
-
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/attributes", local,
                        peer);
 
+       /* Check if attributes file exists */
+       if (stat(filename, &st) < 0)
+               return;
+
        key_file = g_key_file_new();
        if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) {
                error("Unable to load key file from %s: (%s)", filename,
@@ -6162,6 +6165,9 @@ static void load_att_info(struct btd_device *device, const char *local,
        }
        groups = g_key_file_get_groups(key_file, NULL);
 
+       sdp_uuid16_create(&uuid, GATT_PRIM_SVC_UUID);
+       prim_uuid = bt_uuid2string(&uuid);
+
        for (handle = groups; *handle; handle++) {
                gboolean uuid_ok;
                int end;