浏览代码

package/mtd: write remaining data after adding file to the jffs2 partition

SVN-Revision: 22881
Gabor Juhos 15 年之前
父节点
当前提交
2a541325d3
共有 3 个文件被更改,包括 32 次插入10 次删除
  1. 2 2
      package/mtd/Makefile
  2. 1 1
      package/mtd/src/jffs2.c
  3. 29 7
      package/mtd/src/mtd.c

+ 2 - 2
package/mtd/Makefile

@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2006-2009 OpenWrt.org
+# Copyright (C) 2006-2010 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mtd
-PKG_RELEASE:=13
+PKG_RELEASE:=14
 
 PKG_BUILD_DIR := $(KERNEL_BUILD_DIR)/$(PKG_NAME)
 STAMP_PREPARED := $(STAMP_PREPARED)_$(call confvar,CONFIG_MTD_REDBOOT_PARTS)

+ 1 - 1
package/mtd/src/jffs2.c

@@ -247,7 +247,7 @@ int mtd_replace_jffs2(const char *mtd, int fd, int ofs, const char *filename)
 #ifdef target_brcm
 	trx_fixup(outfd, mtd);
 #endif
-	return 0;
+	return (mtdofs - ofs);
 }
 
 void mtd_parse_jffs2data(const char *buf, const char *dir)

+ 29 - 7
package/mtd/src/mtd.c

@@ -367,6 +367,16 @@ mtd_refresh(const char *mtd)
 	return 0;
 }
 
+static void
+indicate_writing(const char *mtd)
+{
+	if (quiet < 2)
+		fprintf(stderr, "\nWriting from %s to %s ... ", imagefile, mtd);
+
+	if (!quiet)
+		fprintf(stderr, " [ ]");
+}
+
 static int
 mtd_write(int imagefd, const char *mtd, char *fis_layout)
 {
@@ -374,6 +384,7 @@ mtd_write(int imagefd, const char *mtd, char *fis_layout)
 	char *str = NULL;
 	int fd, result;
 	ssize_t r, w, e;
+	ssize_t skip = 0;
 	uint32_t offset = 0;
 
 #ifdef FIS_SUPPORT
@@ -451,13 +462,9 @@ resume:
 		exit(1);
 	}
 
-	if (quiet < 2)
-		fprintf(stderr, "Writing from %s to %s ... ", imagefile, mtd);
+	indicate_writing(mtd);
 
 	w = e = 0;
-	if (!quiet)
-		fprintf(stderr, " [ ]");
-
 	for (;;) {
 		/* buffer may contain data already (from trx check or last mtd partition write attempt) */
 		while (buflen < erasesize) {
@@ -480,6 +487,15 @@ resume:
 		if (buflen == 0)
 			break;
 
+		if (skip > 0) {
+			skip -= buflen;
+			buflen = 0;
+			if (skip <= 0)
+				indicate_writing(mtd);
+
+			continue;
+		}
+
 		if (jffs2file) {
 			if (memcmp(buf, JFFS2_EOF, sizeof(JFFS2_EOF) - 1) == 0) {
 				if (!quiet)
@@ -487,8 +503,14 @@ resume:
 				if (quiet < 2)
 					fprintf(stderr, "\nAppending jffs2 data from %s to %s...", jffs2file, mtd);
 				/* got an EOF marker - this is the place to add some jffs2 data */
-				mtd_replace_jffs2(mtd, fd, e, jffs2file);
-				goto done;
+				skip = mtd_replace_jffs2(mtd, fd, e, jffs2file);
+
+				w += skip;
+				e += skip;
+				skip -= buflen;
+				buflen = 0;
+				offset = 0;
+				continue;
 			}
 			/* no EOF marker, make sure we figure out the last inode number
 			 * before appending some data */