From ccec7a182f1373fb15051a1c03d28e44c4188cce Mon Sep 17 00:00:00 2001 From: Pali Rohár Date: Sun, 9 Jul 2017 14:57:41 +0200 Subject: disk: Close device file handle when freeing structures --- src/disk.c | 7 +++++++ src/disk.h | 1 + src/operations.c | 5 ++++- 3 files changed, 12 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/disk.c b/src/disk.c index 486f50d..b0d4499 100644 --- a/src/disk.c +++ b/src/disk.c @@ -413,6 +413,13 @@ int disk_init(struct usb_device_info * dev) { } +void disk_exit(struct usb_device_info * dev) { + + if ( dev->data >= 0 ) + close(dev->data); + +} + enum device disk_get_device(struct usb_device_info * dev) { return dev->device; diff --git a/src/disk.h b/src/disk.h index d5f367d..15eb127 100644 --- a/src/disk.h +++ b/src/disk.h @@ -24,6 +24,7 @@ #include "usb-device.h" int disk_init(struct usb_device_info * dev); +void disk_exit(struct usb_device_info * dev); enum device disk_get_device(struct usb_device_info * dev); diff --git a/src/operations.c b/src/operations.c index cd7ef44..b3be2c7 100644 --- a/src/operations.c +++ b/src/operations.c @@ -91,8 +91,11 @@ clean: void dev_free(struct device_info * dev) { - if ( dev->usb ) + if ( dev->usb ) { + if ( dev->usb->flash_device->protocol == FLASH_DISK ) + disk_exit(dev->usb); usb_close_device(dev->usb); + } free(dev); } -- cgit v1.2.3