Ignore NULL bytes at flash end when reading

pull/40/head
Uwe Bonnes 2011-12-18 16:34:16 +01:00
rodzic 7f0e9ada38
commit 6f194ad388
1 zmienionych plików z 11 dodań i 0 usunięć

Wyświetl plik

@ -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;