Skip to content

Commit 8b36d9e

Browse files
committed
Ignore exception if string desc unavailable
1 parent 555f630 commit 8b36d9e

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

java-does-usb/src/main/java/net/codecrete/usb/windows/WindowsUSBDeviceRegistry.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package net.codecrete.usb.windows;
99

1010
import net.codecrete.usb.USBDevice;
11+
import net.codecrete.usb.USBException;
1112
import net.codecrete.usb.common.ForeignMemory;
1213
import net.codecrete.usb.common.USBDeviceImpl;
1314
import net.codecrete.usb.common.USBDeviceRegistry;
@@ -347,6 +348,9 @@ private String getStringDescriptor(Addressable hubHandle, int usbPortNumber, int
347348
var stringDesc = new StringDescriptor(getDescriptor(hubHandle, usbPortNumber, STRING_DESCRIPTOR_TYPE, index,
348349
DEFAULT_LANGUAGE, session));
349350
return stringDesc.string();
351+
} catch (USBException e) {
352+
System.err.printf("Info: [JavaDoesUSB] failed to retrieve string descriptor %d (%s) - ignoring%n", index, e.getMessage());
353+
return null;
350354
}
351355
}
352356

java-does-usb/src/main/java/net/codecrete/usb/windows/WindowsUSBException.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,11 @@ static void throwLastError(String message, Object... args) {
7575
private static String getErrorMessage(int errorCode) {
7676
try (var session = MemorySession.openConfined()) {
7777
var messagePointerHolder = session.allocate(ADDRESS);
78-
Kernel32.FormatMessageW(Kernel32.FORMAT_MESSAGE_ALLOCATE_BUFFER()
78+
int res = Kernel32.FormatMessageW(Kernel32.FORMAT_MESSAGE_ALLOCATE_BUFFER()
7979
| Kernel32.FORMAT_MESSAGE_FROM_SYSTEM() | Kernel32.FORMAT_MESSAGE_IGNORE_INSERTS(),
8080
NULL, errorCode, 0, messagePointerHolder, 0, NULL);
81+
if (res == 0)
82+
return "unspecified error";
8183
var messagePointer = messagePointerHolder.get(ADDRESS, 0);
8284
String message = Win.createStringFromSegment(MemorySegment.ofAddress(messagePointer, 4000, session));
8385
Kernel32.LocalFree(messagePointer);

0 commit comments

Comments
 (0)