diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/devices/usb.c | 24 | 
1 files changed, 20 insertions, 4 deletions
| diff --git a/modules/devices/usb.c b/modules/devices/usb.c index 62fe258c..b8d9e305 100644 --- a/modules/devices/usb.c +++ b/modules/devices/usb.c @@ -313,7 +313,6 @@ void __scan_usb_lsusb_add_device(char *buffer, FILE *lsusb, int usb_device_numbe  			      vendor_id, product_id, bus);      moreinfo_add_with_prefix("DEV", tmp, strhash); -      g_free(vendor);      g_free(product);      g_free(max_power); @@ -327,6 +326,7 @@ gboolean __scan_usb_lsusb(void)      static gchar *lsusb_path = NULL;      int usb_device_number = 0;      FILE *lsusb; +    FILE *temp_lsusb;      char buffer[512], *temp;      if (!lsusb_path) { @@ -345,6 +345,22 @@ gboolean __scan_usb_lsusb(void)          return FALSE;      } +    temp_lsusb = tmpfile(); +    if (!temp_lsusb) { +        DEBUG("cannot create temporary file for lsusb"); + +        return FALSE; +    } + +    while (fgets(buffer, sizeof(buffer), lsusb)) { +        fputs(buffer, temp_lsusb); +    } + +    pclose(lsusb); + +    // rewind file so we can read from it +    fseek(temp_lsusb, 0, SEEK_SET); +      g_free(temp);      if (usb_list) { @@ -353,13 +369,13 @@ gboolean __scan_usb_lsusb(void)      }      usb_list = g_strdup("[USB Devices]\n"); -    while (fgets(buffer, sizeof(buffer), lsusb)) { +    while (fgets(buffer, sizeof(buffer), temp_lsusb)) {          if (g_str_has_prefix(buffer, "Bus ")) { -           __scan_usb_lsusb_add_device(buffer, lsusb, ++usb_device_number); +           __scan_usb_lsusb_add_device(buffer, temp_lsusb, ++usb_device_number);          }      } -    pclose(lsusb); +    fclose(temp_lsusb);      return usb_device_number > 0;  } | 
