diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2023-10-27 08:12:36 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2023-10-27 08:12:36 +0200 |
commit | 886a7741698522f457f81ba98941acdf810d982f (patch) | |
tree | c38613562cff02d986592b891d3b350776aeb0ed /scripts | |
parent | 2454839b1cb977b17985e745051361700a19e9a4 (diff) | |
parent | 5a433c939bffcee9350afd0bc123bc22fd5cc3f5 (diff) | |
download | barebox-886a7741698522f457f81ba98941acdf810d982f.tar.gz barebox-886a7741698522f457f81ba98941acdf810d982f.tar.xz |
Merge branch 'for-next/imx'
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/common.c | 5 | ||||
-rw-r--r-- | scripts/imx/imx-usb-loader.c | 8 |
2 files changed, 9 insertions, 4 deletions
diff --git a/scripts/common.c b/scripts/common.c index 88173bc977..49c468a1ea 100644 --- a/scripts/common.c +++ b/scripts/common.c @@ -11,6 +11,7 @@ #include <stdarg.h> #include "common.h" +#include "compiler.h" int read_file_2(const char *filename, size_t *size, void **outbuf, size_t max_size) { @@ -22,7 +23,7 @@ int read_file_2(const char *filename, size_t *size, void **outbuf, size_t max_si *size = 0; *outbuf = NULL; - fd = open(filename, O_RDONLY); + fd = open(filename, O_RDONLY | O_BINARY); if (fd < 0) { fprintf(stderr, "Cannot open %s: %s\n", filename, strerror(errno)); return -errno; @@ -75,8 +76,8 @@ int read_file_2(const char *filename, size_t *size, void **outbuf, size_t max_si ret = 0; goto close; free: + free(*outbuf); *outbuf = NULL; - free(buf); close: close(fd); return ret; diff --git a/scripts/imx/imx-usb-loader.c b/scripts/imx/imx-usb-loader.c index 676f077c25..ece4603b2b 100644 --- a/scripts/imx/imx-usb-loader.c +++ b/scripts/imx/imx-usb-loader.c @@ -484,12 +484,16 @@ static int transfer(int report, void *p, unsigned cnt, int *last_trans) err = libusb_bulk_transfer(usb_dev_handle, (report < 3) ? 1 : 2 + EP_IN, p, cnt, last_trans, 1000); } else { - unsigned char tmp[1028]; + unsigned char tmp[1028] = { 0 }; tmp[0] = (unsigned char)report; if (report < 3) { memcpy(&tmp[1], p, cnt); + + if (report == 2) + cnt = mach_id->max_transfer; + if (mach_id->hid_endpoint) { int trans; err = libusb_interrupt_transfer(usb_dev_handle, @@ -739,7 +743,7 @@ static int send_buf(void *buf, unsigned len) while (1) { int now = get_min(cnt, mach_id->max_transfer); - if (!now) + if (now <= 0) break; err = transfer(2, p, now, &now); |