s32 USBStorageOGC_Close(usbstorage_handle *dev) { if(dev != NULL) { important_storage_data *d = (important_storage_data*)0x932C1000; d->sector_size = __sector_size; d->sector_count = __sector_count; d->lun = __lun; d->vid = __vid; d->pid = __pid; d->tag = dev->tag; d->interface = dev->interface; d->usb_fd = dev->usb_fd; d->ep_in = dev->ep_in; d->ep_out = dev->ep_out; DCFlushRange((void*)0x932C1000, sizeof(important_storage_data)); } __mounted = false; __lun = 0; __vid = 0; __pid = 0; if (dev->usb_fd != -1) USB_OGC_CloseDevice(&dev->usb_fd); LWP_MutexDestroy(dev->lock); SYS_RemoveAlarm(dev->alarm); if(dev->sector_size) free(dev->sector_size); if (dev->buffer) __lwp_heap_free(&__heap, dev->buffer); memset(dev, 0, sizeof(*dev)); dev->usb_fd = -1; return 0; }
s32 USBStorage_Close(usbstorage_handle *dev) { __mounted = false; __lun = 0; __vid = 0; __pid = 0; if (dev->usb_fd != -1) USB_CloseDevice(&dev->usb_fd); LWP_MutexDestroy(dev->lock); SYS_RemoveAlarm(dev->alarm); if(dev->sector_size) free(dev->sector_size); if (dev->buffer) __lwp_heap_free(&__heap, dev->buffer); memset(dev, 0, sizeof(*dev)); dev->usb_fd = -1; return 0; }