mirror of https://gitee.com/openkylin/qemu.git
usb-mtp: replace the homebrew write with qemu_write_full
qemu_write_full takes care of partial blocking writes, as in cases of larger file sizes Suggested-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Bandan Das <bsd@redhat.com> Message-id: 20190129131908.27924-4-bsd@redhat.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
c1ef0f2519
commit
49f9e8d660
|
@ -1632,24 +1632,16 @@ static char *utf16_to_str(uint8_t len, uint16_t *arr)
|
||||||
/* Wrapper around write, returns 0 on failure */
|
/* Wrapper around write, returns 0 on failure */
|
||||||
static uint64_t write_retry(int fd, void *buf, uint64_t size, off_t offset)
|
static uint64_t write_retry(int fd, void *buf, uint64_t size, off_t offset)
|
||||||
{
|
{
|
||||||
uint64_t bytes_left = size, ret;
|
uint64_t ret = 0;
|
||||||
|
|
||||||
if (lseek(fd, offset, SEEK_SET) < 0) {
|
if (lseek(fd, offset, SEEK_SET) < 0) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (bytes_left > 0) {
|
ret = qemu_write_full(fd, buf, size);
|
||||||
ret = write(fd, buf, bytes_left);
|
|
||||||
if ((ret == -1) && (errno != EINTR || errno != EAGAIN ||
|
|
||||||
errno != EWOULDBLOCK)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
bytes_left -= ret;
|
|
||||||
buf += ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
return size - bytes_left;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usb_mtp_update_object(MTPObject *parent, char *name)
|
static void usb_mtp_update_object(MTPObject *parent, char *name)
|
||||||
|
|
Loading…
Reference in New Issue