From 1ce22c9aeaf67addcfcfe3425e14207bb32267fc Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 16 Jul 2025 21:57:09 +0530 Subject: [PATCH] MTP driver: Workaround for LibMTP no longer returning device serial numbers on some systems Fixes #2810 (MTP Kindle Serial not detected) --- src/calibre/devices/mtp/unix/libmtp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/calibre/devices/mtp/unix/libmtp.c b/src/calibre/devices/mtp/unix/libmtp.c index a2cecd7c49..8672ca6c14 100644 --- a/src/calibre/devices/mtp/unix/libmtp.c +++ b/src/calibre/devices/mtp/unix/libmtp.c @@ -265,10 +265,13 @@ Device_init(Device *self, PyObject *args, PyObject *kwds) if (self->model_name == NULL) { self->model_name = Py_None; Py_INCREF(Py_None); } if (serial_number != NULL) { - self->serial_number = PyUnicode_FromString(serial_number); + if (serial_number[0]) self->serial_number = PyUnicode_FromString(serial_number); free(serial_number); } - if (self->serial_number == NULL) { self->serial_number = Py_None; Py_INCREF(Py_None); } + if (self->serial_number == NULL) { + self->serial_number = usb_serialnum == NULL ? Py_None : usb_serialnum; + Py_INCREF(self->serial_number); + } if (device_version != NULL) { self->device_version = PyUnicode_FromString(device_version);