Fixed removing from device list with only one device info present

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23488 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2008-01-13 12:35:08 +00:00
parent 5671893fc0
commit 9cdfebb447
2 changed files with 12 additions and 16 deletions
@@ -55,15 +55,14 @@ void remove_device_info (my_device_info *my_dev)
{
assert (my_dev != NULL);
acquire_sem (my_device_list_lock);
if (my_device_list == my_dev)
if (my_device_list == my_dev) {
my_device_list = my_dev->next;
else
{
--my_device_count;
my_device_list_changed = true;
} else {
my_device_info *d;
for (d = my_device_list; d != NULL; d = d->next)
{
if (d->next == my_dev)
{
for (d = my_device_list; d != NULL; d = d->next) {
if (d->next == my_dev) {
d->next = my_dev->next;
--my_device_count;
my_device_list_changed = true;
@@ -80,8 +79,7 @@ my_device_info *search_device_info (const char* name)
my_device_info *my_dev;
acquire_sem (my_device_list_lock);
for (my_dev = my_device_list; my_dev != NULL; my_dev = my_dev->next)
{
for (my_dev = my_device_list; my_dev != NULL; my_dev = my_dev->next) {
if (strcmp(my_dev->name, name) == 0)
break;
}
@@ -104,8 +102,7 @@ void alloc_device_names (void)
void free_device_names (void)
{
if (my_device_names != NULL)
{
if (my_device_names != NULL) {
int i;
for (i = 0; my_device_names [i] != NULL; i++)
free (my_device_names [i]);
@@ -121,8 +118,7 @@ void rebuild_device_names (void)
assert (my_device_names != NULL);
acquire_sem (my_device_list_lock);
for (i = 0, my_dev = my_device_list; my_dev != NULL; my_dev = my_dev->next)
{
for (i = 0, my_dev = my_device_list; my_dev != NULL; my_dev = my_dev->next) {
my_device_names [i++] = strdup(my_dev->name);
DPRINTF_INFO ((MY_ID "publishing %s\n", my_dev->name));
}
@@ -540,9 +540,9 @@ uninit_driver (void)
DPRINTF_INFO ((MY_ID "uninit_driver()\n"));
usb->uninstall_notify (usb_midi_driver_name);
delete_sem (my_device_list_lock);
put_module (B_USB_MODULE_NAME);
free_device_names ();
delete_sem(my_device_list_lock);
put_module(B_USB_MODULE_NAME);
free_device_names();
}
/*