Skip to content
Snippets Groups Projects
Commit f4c34cd7 authored by Jakob Olsson's avatar Jakob Olsson
Browse files

moved list_del out of del device, fixes to add_device

parent a95bec3c
No related branches found
No related tags found
No related merge requests found
......@@ -90,8 +90,11 @@ int tag_missing_devices(void)
}
dev->missing++;
if (dev->missing == 1)
if (dev->missing == 1) {
/* TEMPORARY FIX -- TODO: HOW TO CHECK IF IT CONTAINS ELEMENT */
list_del(&dev->list);
delete_device(dev);
}
}
return 0;
......@@ -100,34 +103,35 @@ int tag_missing_devices(void)
int add_device(struct device *new_dev)
{
struct device *dev;
dev = search_list(new_dev->usb.if_name);
if (dev) {
if (dev->ip)
free(dev->ip);
dev->ip = new_dev->ip;
if (!dev->ubus_obj && dev->ip)
dev->ubus_obj = dongle_create_dynamic_object(new_dev);
else if (dev->ubus_obj && !dev->ip) {
if (new_dev->ip)
dev->ip = strdup(new_dev->ip);
else
dev->ip = NULL;
if (!dev->ubus_obj && dev->ip) {
dev->ubus_obj = dongle_create_dynamic_object(dev);
if (dev->ubus_obj)
publish_ubus_object(global_ctx, dev->ubus_obj);
} else if (dev->ubus_obj && !dev->ip) {
unpublish_ubus_object(global_ctx, dev->ubus_obj);
dongle_destroy_dynamic_object(dev->ubus_obj);
}
dev->present = true;
delete_device(new_dev);
goto already_present;
}
new_dev->present = true;
if (list_empty(&devices))
INIT_LIST_HEAD(&devices);
list_add_tail(&new_dev->list, &devices);
if (new_dev->ip) {
new_dev->ubus_obj = dongle_create_dynamic_object(new_dev);
if (new_dev->ubus_obj)
publish_ubus_object(global_ctx, new_dev->ubus_obj);
}
return 0;
already_present:
return -1;
......@@ -138,6 +142,8 @@ int delete_all_devices(void)
struct device *dev, *tmp;
list_for_each_entry_safe(dev, tmp, &devices, list) {
/* TEMPORARY FIX -- TODO: HOW TO CHECK IF IT CONTAINS ELEMENT */
list_del(&dev->list);
delete_device(dev);
}
......@@ -151,7 +157,8 @@ int delete_device_by_name(char *name)
list_for_each_entry_safe(dev, tmp, &devices, list) {
if (strncmp(dev->usb.if_name, name, 128) != 0)
continue;
/* TEMPORARY FIX -- TODO: HOW TO CHECK IF IT CONTAINS ELEMENT */
list_del(&dev->list);
delete_device(dev);
return 0;
}
......@@ -166,7 +173,8 @@ int delete_device(struct device *dev)
dongle_destroy_dynamic_object(dev->ubus_obj);
}
list_del(&dev->list);
/*if (dev->list) // how to check if list contains this element?
list_del(&dev->list);*/
free_device(dev);
return 0;
}
......@@ -367,32 +375,28 @@ int get_devices(void)
perror("opendir");
goto fail_dr;
}
while ((de = readdir(dir)) != NULL) {
if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0)
continue;
if (strstr(de->d_name, ":") || strstr(de->d_name, "usb"))
continue;
snprintf(product_path, PATH_MAX, "%s%s/product", usb_path, de->d_name);
memset(&st, 0, sizeof(st));
rv = stat(product_path, &st);
if (rv < 0) {
//perror("stat");
continue;
}
snprintf(path, PATH_MAX, "%s%s/", usb_path, de->d_name);
name = get_device_name(path);
if (!name)
continue;
dev = (struct device *)calloc(1, sizeof(*dev));
if (!dev) {
perror("calloc");
goto fail_dev;
}
dev->usb.product = get_usb_stat(usb_path, de->d_name, "product");
dev->usb.product_id = get_usb_stat(usb_path, de->d_name, "idProduct");
dev->usb.vendor_id = get_usb_stat(usb_path, de->d_name, "idVendor");
......@@ -401,7 +405,6 @@ int get_devices(void)
add_device(dev);
}
closedir(dir);
return 0;
fail_dev:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment