diff --git a/dongle.c b/dongle.c index 2bc9ef9808c27bc86ff112e75a928f35b6e66051..a931f06b82de473bbb37fe8a50c4d0a91b310ab2 100644 --- a/dongle.c +++ b/dongle.c @@ -285,12 +285,12 @@ void remove_newline(char *input) *pos = '\0'; } -char *get_usb_stat(char *path, char *dir, char *stat) +char *get_usb_stat(char *path, char *file) { char stat_path[PATH_MAX], contents[1024]; FILE *f; - snprintf(stat_path, PATH_MAX, "%s/%s/%s", path, dir, stat); + snprintf(stat_path, PATH_MAX, "%s%s", path, file); f = fopen(stat_path, "r"); if (!f) { perror("fopen"); @@ -417,18 +417,20 @@ int get_devices_from_path(char *input_path) continue; } snprintf(path, PATH_MAX, "%s/", input_path); + name = get_device_name(path); if (!name) continue; - printf("found device inside _from_path %s\n", name); + dev = (struct device *)calloc(1, sizeof(*dev)); if (!dev) { perror("calloc"); goto fail_dev; } - dev->usb.product = get_usb_stat(input_path, "", "product"); - dev->usb.product_id = get_usb_stat(input_path, "", "idProduct"); - dev->usb.vendor_id = get_usb_stat(input_path, "", "idVendor"); + + dev->usb.product = get_usb_stat(path, "product"); + dev->usb.product_id = get_usb_stat(path, "idProduct"); + dev->usb.vendor_id = get_usb_stat(path, "idVendor"); dev->usb.if_name = name; dev->ip = get_device_ip(dev->usb.if_name); @@ -466,12 +468,14 @@ int get_devices(void) 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) @@ -481,9 +485,10 @@ int get_devices(void) 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"); + + dev->usb.product = get_usb_stat(path, "product"); + dev->usb.product_id = get_usb_stat(path, "idProduct"); + dev->usb.vendor_id = get_usb_stat(path, "idVendor"); dev->usb.if_name = name; dev->ip = get_device_ip(dev->usb.if_name); diff --git a/dongle.h b/dongle.h index 4f102189cf723f73129419bb8b4ae44a103549cb..add5d8154d8146884f1e272059b4e3eb41d23744 100644 --- a/dongle.h +++ b/dongle.h @@ -35,7 +35,7 @@ void free_usb(struct USB *usb); struct device *search_list(char *name); char *lexer(char **input, char *delimiter); void remove_newline(char *input); -char *get_usb_stat(char *path, char *dir, char *stat); +char *get_usb_stat(char *path, char *file); char *get_device_name(char *dir_name); char *get_device_ip(char *device_name); int list_to_blob(struct blob_buf *bb);