From: Uwe Bonnes Date: Sun, 18 Dec 2011 15:34:16 +0000 (+0100) Subject: Ignore NULL bytes at flash end when reading X-Git-Url: https://git.gag.com/?p=fw%2Fstlink;a=commitdiff_plain;h=6f194ad388fedf287a6200ea7efb16c4118ca4c1 Ignore NULL bytes at flash end when reading --- diff --git a/src/stlink-common.c b/src/stlink-common.c index 632c222..fac7b68 100644 --- a/src/stlink-common.c +++ b/src/stlink-common.c @@ -803,6 +803,7 @@ int stlink_fread(stlink_t* sl, const char* path, stm32_addr_t addr, size_t size) int error = -1; size_t off; + int num_zero = 0; const int fd = open(path, O_RDWR | O_TRUNC | O_CREAT, 00700); if (fd == -1) { @@ -814,6 +815,7 @@ int stlink_fread(stlink_t* sl, const char* path, stm32_addr_t addr, size_t size) for (off = 0; off < size; off += 1024) { size_t read_size = 1024; size_t rounded_size; + size_t index; if ((off + read_size) > size) read_size = size - off; @@ -824,12 +826,21 @@ int stlink_fread(stlink_t* sl, const char* path, stm32_addr_t addr, size_t size) stlink_read_mem32(sl, addr + off, rounded_size); + for(index = 0; index < read_size; index ++) { + if (sl->q_buf[index] == 0) + num_zero ++; + else + num_zero = 0; + } if (write(fd, sl->q_buf, read_size) != (ssize_t) read_size) { fprintf(stderr, "write() != read_size\n"); goto on_error; } } + /* Ignore NULL Bytes at end of file */ + ftruncate(fd, size - num_zero); + /* success */ error = 0;