diff options
| author | Johan Hedberg <johan.hedberg@nokia.com> | 2007-04-13 11:51:00 +0000 | 
|---|---|---|
| committer | Johan Hedberg <johan.hedberg@nokia.com> | 2007-04-13 11:51:00 +0000 | 
| commit | 260b175f47f5006b34a8eceda9914f67ef0caa12 (patch) | |
| tree | 87000802c02956ea2e8ce6689dbe9f32eced060a /audio/manager.c | |
| parent | 1a02bbc361299198257ca32969d2d804ee9fb74c (diff) | |
Cleanup and small fixes
Diffstat (limited to 'audio/manager.c')
| -rw-r--r-- | audio/manager.c | 41 | 
1 files changed, 25 insertions, 16 deletions
| diff --git a/audio/manager.c b/audio/manager.c index 07aa7b60..87dd4b01 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -134,24 +134,29 @@ static gboolean unix_event(GIOChannel *chan, GIOCondition cond, gpointer data)  	return TRUE;  } -void manager_add_headset(char *path) +void manager_add_headset(const char *path)  { -	if (g_slist_find_custom(headsets, path, (GCompareFunc) strcmp)) -		return; +	char *my_path = g_strdup(path); -	headsets = g_slist_append(headsets, path); +	headsets = g_slist_append(headsets, my_path); -	manager_signal(connection, "HeadsetCreated", path); +	manager_signal(connection, "HeadsetCreated", my_path);  	if (!default_hs) { -		default_hs = path; -		manager_signal(connection, "DefaultHeadsetChanged", path); +		default_hs = my_path; +		manager_signal(connection, "DefaultHeadsetChanged", my_path);  	}  } +static void manager_remove_headset(char *path) +{ +	headset_remove(path); +	g_free(path); +} +  static DBusHandlerResult am_create_headset(DBusMessage *msg)  { -	char *hs_path; +	const char *hs_path;  	const char *address;  	bdaddr_t bda;  	DBusMessage *reply; @@ -175,13 +180,16 @@ static DBusHandlerResult am_create_headset(DBusMessage *msg)  		return DBUS_HANDLER_RESULT_NEED_MEMORY;  	str2ba(address, &bda); -	/* This returns an existing path if the headset already exists */ -	hs_path = headset_add(&bda); -	if (!hs_path) -		return error_reply(connection, msg, -				"org.bluez.Error.Failed", -				"Unable to create new headset object"); -	manager_add_headset(hs_path); + +	hs_path = headset_get(&bda); +	if (!hs_path) { +		hs_path = headset_add(&bda); +		if (!hs_path) +			return error_reply(connection, msg, +					"org.bluez.Error.Failed", +					"Unable to create new headset object"); +		manager_add_headset(hs_path); +	}  	dbus_message_append_args(reply, DBUS_TYPE_STRING, &hs_path,  					DBUS_TYPE_INVALID); @@ -221,6 +229,7 @@ static DBusHandlerResult am_remove_headset(DBusMessage *msg)  	path = match->data;  	headsets = g_slist_remove(headsets, path); +	g_free(path);  	if (default_hs == path) {  		if (!headsets) @@ -407,7 +416,7 @@ void audio_exit(void)  	unix_sock = -1;  	if (headsets) { -		g_slist_foreach(headsets, (GFunc) headset_remove, NULL); +		g_slist_foreach(headsets, (GFunc) manager_remove_headset, NULL);  		g_slist_free(headsets);  		headsets = NULL;  	} | 
