mirror of https://github.com/hak5/openwrt-owl.git
mtd: improve support for reading input from a pipe. fixes sysupgrade
SVN-Revision: 12706owl
parent
d58b9ba0d0
commit
5a0a3cbc00
|
@ -246,7 +246,7 @@ static int
|
||||||
mtd_write(int imagefd, const char *mtd)
|
mtd_write(int imagefd, const char *mtd)
|
||||||
{
|
{
|
||||||
int fd, result;
|
int fd, result;
|
||||||
size_t r, w, e;
|
ssize_t r, w, e;
|
||||||
|
|
||||||
fd = mtd_check_open(mtd);
|
fd = mtd_check_open(mtd);
|
||||||
if(fd < 0) {
|
if(fd < 0) {
|
||||||
|
@ -263,11 +263,27 @@ mtd_write(int imagefd, const char *mtd)
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
/* buffer may contain data already (from trx check) */
|
/* buffer may contain data already (from trx check) */
|
||||||
r = read(imagefd, buf + buflen, erasesize - buflen);
|
do {
|
||||||
if (r < 0)
|
r = read(imagefd, buf + buflen, erasesize - buflen);
|
||||||
break;
|
if (r < 0) {
|
||||||
|
if ((errno == EINTR) || (errno == EAGAIN))
|
||||||
|
continue;
|
||||||
|
else {
|
||||||
|
perror("read");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buflen += r;
|
if (r == 0) {
|
||||||
|
fprintf(stderr, "No more data left\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
buflen += r;
|
||||||
|
} while (buflen < erasesize);
|
||||||
|
|
||||||
|
if (buflen == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
if (jffs2file) {
|
if (jffs2file) {
|
||||||
if (memcmp(buf, JFFS2_EOF, sizeof(JFFS2_EOF)) == 0) {
|
if (memcmp(buf, JFFS2_EOF, sizeof(JFFS2_EOF)) == 0) {
|
||||||
|
@ -309,10 +325,6 @@ mtd_write(int imagefd, const char *mtd)
|
||||||
}
|
}
|
||||||
w += buflen;
|
w += buflen;
|
||||||
|
|
||||||
/* not enough data - eof */
|
|
||||||
if (buflen < erasesize)
|
|
||||||
break;
|
|
||||||
|
|
||||||
buflen = 0;
|
buflen = 0;
|
||||||
}
|
}
|
||||||
if (!quiet)
|
if (!quiet)
|
||||||
|
|
Loading…
Reference in New Issue