[PATCH 09/13] proximity: Use new storage architecture

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 profiles/proximity/monitor.c |   72 ++++++++++++++++++++----------------------
 1 file changed, 34 insertions(+), 38 deletions(-)

diff --git a/profiles/proximity/monitor.c b/profiles/proximity/monitor.c
index d9ed3ff..0be0ae4 100644
--- a/profiles/proximity/monitor.c
+++ b/profiles/proximity/monitor.c
@@ -83,51 +83,52 @@ struct monitor {
 	guint attioid;
 };
 
-static inline int create_filename(char *buf, size_t size,
-				const bdaddr_t *bdaddr, const char *name)
+static void write_proximity_config(struct btd_device *device, const char *alert,
+					const char *level)
 {
-	char addr[18];
+	char *filename;
+	GKeyFile *key_file;
+	char *data;
+	gsize length = 0;
 
-	ba2str(bdaddr, addr);
+	filename = btd_device_get_storage_path(device, "proximity");
 
-	return create_name(buf, size, STORAGEDIR, addr, name);
-}
-
-static int write_proximity_config(const bdaddr_t *sba, const bdaddr_t *dba,
-					const char *alert, const char *level)
-{
-	char filename[PATH_MAX + 1], addr[18], key[38];
-
-	create_filename(filename, PATH_MAX, sba, "proximity");
+	key_file = g_key_file_new();
+	g_key_file_load_from_file(key_file, filename, 0, NULL);
 
-	create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+	if (level)
+		g_key_file_set_string(key_file, alert, "Level", level);
+	else
+		g_key_file_remove_group(key_file, alert, NULL);
 
-	ba2str(dba, addr);
-
-	snprintf(key, sizeof(key), "%17s#%s", addr, alert);
+	data = g_key_file_to_data(key_file, &length, NULL);
+	if (length > 0) {
+		create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+		g_file_set_contents(filename, data, length, NULL);
+	}
 
-	return textfile_put(filename, key, level);
+	g_free(data);
+	g_free(filename);
+	g_key_file_free(key_file);
 }
 
-static char *read_proximity_config(const bdaddr_t *sba, const bdaddr_t *dba,
-							const char *alert)
+static char *read_proximity_config(struct btd_device *device, const char *alert)
 {
-	char filename[PATH_MAX + 1], addr[18], key[38];
-	char *str, *strnew;
+	char *filename;
+	GKeyFile *key_file;
+	char *str;
 
-	create_filename(filename, PATH_MAX, sba, "proximity");
+	filename = btd_device_get_storage_path(device, "proximity");
 
-	ba2str(dba, addr);
-	snprintf(key, sizeof(key), "%17s#%s", addr, alert);
+	key_file = g_key_file_new();
+	g_key_file_load_from_file(key_file, filename, 0, NULL);
 
-	str = textfile_caseget(filename, key);
-	if (str == NULL)
-		return NULL;
+	str = g_key_file_get_string(key_file, alert, "Level", NULL);
 
-	strnew = g_strdup(str);
-	free(str);
+	g_free(filename);
+	g_key_file_free(key_file);
 
-	return strnew;
+	return str;
 }
 
 static uint8_t str2level(const char *level)
@@ -417,7 +418,6 @@ static void property_set_link_loss_level(const GDBusPropertyTable *property,
 		DBusMessageIter *iter, GDBusPendingPropertySet id, void *data)
 {
 	struct monitor *monitor = data;
-	struct btd_device *device = monitor->device;
 	const char *level;
 
 	if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_STRING)
@@ -438,9 +438,7 @@ static void property_set_link_loss_level(const GDBusPropertyTable *property,
 	g_free(monitor->linklosslevel);
 	monitor->linklosslevel = g_strdup(level);
 
-	write_proximity_config(adapter_get_address(device_get_adapter(device)),
-					device_get_address(device),
-					"LinkLossAlertLevel", level);
+	write_proximity_config(monitor->device, "LinkLossAlertLevel", level);
 
 	if (monitor->attrib)
 		write_alert_level(monitor);
@@ -601,9 +599,7 @@ int monitor_register(struct btd_device *device,
 	struct monitor *monitor;
 	char *level;
 
-	level = read_proximity_config(
-			adapter_get_address(device_get_adapter(device)),
-			device_get_address(device), "LinkLossAlertLevel");
+	level = read_proximity_config(device, "LinkLossAlertLevel");
 
 	monitor = g_new0(struct monitor, 1);
 	monitor->device = btd_device_ref(device);
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux