summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2023-10-27 08:12:36 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2023-10-27 08:12:36 +0200
commit886a7741698522f457f81ba98941acdf810d982f (patch)
treec38613562cff02d986592b891d3b350776aeb0ed /scripts
parent2454839b1cb977b17985e745051361700a19e9a4 (diff)
parent5a433c939bffcee9350afd0bc123bc22fd5cc3f5 (diff)
downloadbarebox-886a7741698522f457f81ba98941acdf810d982f.tar.gz
barebox-886a7741698522f457f81ba98941acdf810d982f.tar.xz
Merge branch 'for-next/imx'
Diffstat (limited to 'scripts')
-rw-r--r--scripts/common.c5
-rw-r--r--scripts/imx/imx-usb-loader.c8
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);