Update kernel configuration and add profiles and per-profile kernel configuration...
[openwrt.git] / package / mtd / src / mtd.c
index 18c3e97..761139f 100644 (file)
@@ -138,9 +138,11 @@ int mtd_write_buffer(int fd, const char *buf, int offset, int length)
 static int
 image_check(int imagefd, const char *mtd)
 {
+       int ret = 1;
 #ifdef target_brcm
-       return trx_check(imagefd, mtd, buf, &buflen);
+       ret = trx_check(imagefd, mtd, buf, &buflen);
 #endif
+       return ret;
 }
 
 static int mtd_check(const char *mtd)
@@ -246,7 +248,7 @@ static int
 mtd_write(int imagefd, const char *mtd)
 {
        int fd, result;
-       size_t r, w, e;
+       ssize_t r, w, e;
 
        fd = mtd_check_open(mtd);
        if(fd < 0) {
@@ -263,11 +265,25 @@ mtd_write(int imagefd, const char *mtd)
 
        for (;;) {
                /* buffer may contain data already (from trx check) */
-               r = read(imagefd, buf + buflen, erasesize - buflen);
-               if (r < 0)
-                       break;
+               do {
+                       r = read(imagefd, buf + buflen, erasesize - buflen);
+                       if (r < 0) {
+                               if ((errno == EINTR) || (errno == EAGAIN))
+                                       continue;
+                               else {
+                                       perror("read");
+                                       break;
+                               }
+                       }
+
+                       if (r == 0)
+                               break;
 
-               buflen += r;
+                       buflen += r;
+               } while (buflen < erasesize);
+
+               if (buflen == 0)
+                       break;
 
                if (jffs2file) {
                        if (memcmp(buf, JFFS2_EOF, sizeof(JFFS2_EOF)) == 0) {
@@ -309,10 +325,6 @@ mtd_write(int imagefd, const char *mtd)
                }
                w += buflen;
 
-               /* not enough data - eof */
-               if (buflen < erasesize)
-                       break;
-
                buflen = 0;
        }
        if (!quiet)
This page took 0.020262 seconds and 4 git commands to generate.