Skip to content

Commit b1c3fad

Browse files
committed
Reduce unaligned transfer buffer size
1 parent 7b3bdbd commit b1c3fad

2 files changed

Lines changed: 9 additions & 2 deletions

File tree

include/ogc/usbstorage.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
usbstorage.h -- Bulk-only USB mass storage support
44
5-
Copyright (C) 2008 - 2025
5+
Copyright (C) 2008 - 2026
66
Sven Peter (svpe) <svpe@gmx.net>
77
Michael Wiedenbauer (shagkur)
88
Dave Murphy (WinterMute)
@@ -81,6 +81,7 @@ typedef struct
8181
u8 suspended;
8282

8383
u8 *buffer;
84+
u32 buffer_size;
8485
} usbstorage_handle;
8586

8687
#define B_RAW_DEVICE_DATA_IN 0x01

libogc/usbstorage.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,9 @@ static s32 __cycle(usbstorage_handle *dev, u8 lun, u8 *buffer, u32 len, u8 *cb,
318318
u32 thisLen = _len > max_size ? max_size : _len;
319319

320320
if (!SYS_IsDMAAddress(_buffer, 32) || !SYS_IsDMAAddress(_buffer + thisLen, 1)) {
321+
if (thisLen > dev->buffer_size)
322+
thisLen = dev->buffer_size;
323+
321324
if (write) memcpy(dev->buffer, _buffer, thisLen);
322325
retval = __USB_BlkMsgTimeout(dev, ep, thisLen, dev->buffer, usbtimeout);
323326
if (!write && retval > 0)
@@ -535,8 +538,11 @@ s32 USBStorage_Open(usbstorage_handle *dev, s32 device_id, u16 vid, u16 pid)
535538
//USB_ClearHalt(dev->usb_fd, dev->ep_in);
536539
//USB_ClearHalt(dev->usb_fd, dev->ep_out);
537540

541+
if(!dev->buffer_size)
542+
dev->buffer_size = MAX_TRANSFER_SIZE_V0;
543+
538544
if(!dev->buffer)
539-
dev->buffer = __lwp_heap_allocate(&__heap, MAX_TRANSFER_SIZE_V5);
545+
dev->buffer = __lwp_heap_allocate(&__heap, dev->buffer_size);
540546

541547
if(!dev->buffer) {
542548
retval = IPC_ENOMEM;

0 commit comments

Comments
 (0)