Hi, I may be missing something, but it looks to me like there could be a small memory leak in this bit of code from hal_device_added(): /* HAL match rule: we look for pda.platform == 'palm' * (or the legacy info.bus == 'usb_device') * and then try to match the usb_device.product_id and usb_device.vendor_id * against the list in devices.xml. */ if (platform = libhal_device_get_property_string (hal_ctx, udi, "pda.platform", NULL)) { if (strcmp (platform, "palm") != 0) { libhal_free_string (platform); return; } } else if (bus = libhal_device_get_property_string (hal_ctx, udi, "info.bus", NULL)) { if (strcmp (bus, "usb_device") != 0) { libhal_free_string (bus); return; } } else { return; } Specifically, libhal_free_string() is only called if pda.platform is not "palm", or info.bus is not "usb_device". Would the following code be an improvement: if (platform = libhal_device_get_property_string (hal_ctx, udi, "pda.platform", NULL)) { i = strcmp (platform, "palm"); libhal_free_string (platform); if (i != 0) return; } else .... // same change for info.bus (Note: I'm only using "i" here because its used in a similar way later in the function). Cheers Bruce |