Loading applypatch/applypatch.c +3 −15 Original line number Diff line number Diff line Loading @@ -424,20 +424,18 @@ int WriteToPartition(unsigned char* data, size_t len, { size_t start = 0; int success = 0; int fd = open(partition, O_RDWR | O_SYNC); int fd = open(partition, O_RDWR); if (fd < 0) { printf("failed to open %s: %s\n", partition, strerror(errno)); return -1; } int attempt; for (attempt = 0; attempt < 10; ++attempt) { size_t next_sync = start + (1<<20); printf("raw O_SYNC write %s attempt %d start at %d\n", partition, attempt+1, start); for (attempt = 0; attempt < 2; ++attempt) { lseek(fd, start, SEEK_SET); while (start < len) { size_t to_write = len - start; if (to_write > 4096) to_write = 4096; if (to_write > 1<<20) to_write = 1<<20; ssize_t written = write(fd, data+start, to_write); if (written < 0) { Loading @@ -450,10 +448,6 @@ int WriteToPartition(unsigned char* data, size_t len, } } start += written; if (start >= next_sync) { fsync(fd); next_sync = start + (1<<20); } } fsync(fd); Loading Loading @@ -506,8 +500,6 @@ int WriteToPartition(unsigned char* data, size_t len, success = true; break; } sleep(2); } if (!success) { Loading @@ -519,11 +511,7 @@ int WriteToPartition(unsigned char* data, size_t len, printf("error closing %s (%s)\n", partition, strerror(errno)); return -1; } // hack: sync and sleep after closing in hopes of getting // the data actually onto flash. printf("sleeping after close\n"); sync(); sleep(5); break; } } Loading Loading
applypatch/applypatch.c +3 −15 Original line number Diff line number Diff line Loading @@ -424,20 +424,18 @@ int WriteToPartition(unsigned char* data, size_t len, { size_t start = 0; int success = 0; int fd = open(partition, O_RDWR | O_SYNC); int fd = open(partition, O_RDWR); if (fd < 0) { printf("failed to open %s: %s\n", partition, strerror(errno)); return -1; } int attempt; for (attempt = 0; attempt < 10; ++attempt) { size_t next_sync = start + (1<<20); printf("raw O_SYNC write %s attempt %d start at %d\n", partition, attempt+1, start); for (attempt = 0; attempt < 2; ++attempt) { lseek(fd, start, SEEK_SET); while (start < len) { size_t to_write = len - start; if (to_write > 4096) to_write = 4096; if (to_write > 1<<20) to_write = 1<<20; ssize_t written = write(fd, data+start, to_write); if (written < 0) { Loading @@ -450,10 +448,6 @@ int WriteToPartition(unsigned char* data, size_t len, } } start += written; if (start >= next_sync) { fsync(fd); next_sync = start + (1<<20); } } fsync(fd); Loading Loading @@ -506,8 +500,6 @@ int WriteToPartition(unsigned char* data, size_t len, success = true; break; } sleep(2); } if (!success) { Loading @@ -519,11 +511,7 @@ int WriteToPartition(unsigned char* data, size_t len, printf("error closing %s (%s)\n", partition, strerror(errno)); return -1; } // hack: sync and sleep after closing in hopes of getting // the data actually onto flash. printf("sleeping after close\n"); sync(); sleep(5); break; } } Loading