* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * $Id$
*
* The code is based on the linux-mtd examples.
*/
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)
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) {
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) {
}
w += buflen;
- /* not enough data - eof */
- if (buflen < erasesize)
- break;
-
buflen = 0;
}
if (!quiet)