@ -44,6 +44,7 @@
# include <sys/reboot.h>
# include <sys/reboot.h>
# include <linux/reboot.h>
# include <linux/reboot.h>
# include <mtd/mtd-user.h>
# include <mtd/mtd-user.h>
# include "crc32.h"
# include "fis.h"
# include "fis.h"
# include "mtd.h"
# include "mtd.h"
@ -473,12 +474,14 @@ mtd_write(int imagefd, const char *mtd, char *fis_layout, size_t part_offset)
ssize_t r , w , e ;
ssize_t r , w , e ;
ssize_t skip = 0 ;
ssize_t skip = 0 ;
uint32_t offset = 0 ;
uint32_t offset = 0 ;
int buflen_raw = 0 ;
int jffs2_replaced = 0 ;
int jffs2_replaced = 0 ;
int skip_bad_blocks = 0 ;
int skip_bad_blocks = 0 ;
# ifdef FIS_SUPPORT
# ifdef FIS_SUPPORT
static struct fis_part new_parts [ MAX_ARGS ] ;
static struct fis_part new_parts [ MAX_ARGS ] ;
static struct fis_part old_parts [ MAX_ARGS ] ;
static struct fis_part old_parts [ MAX_ARGS ] ;
struct fis_part * cur_part = NULL ;
int n_new = 0 , n_old = 0 ;
int n_new = 0 , n_old = 0 ;
if ( fis_layout ) {
if ( fis_layout ) {
@ -488,6 +491,8 @@ mtd_write(int imagefd, const char *mtd, char *fis_layout, size_t part_offset)
memset ( & old_parts , 0 , sizeof ( old_parts ) ) ;
memset ( & old_parts , 0 , sizeof ( old_parts ) ) ;
memset ( & new_parts , 0 , sizeof ( new_parts ) ) ;
memset ( & new_parts , 0 , sizeof ( new_parts ) ) ;
if ( ! part_offset )
cur_part = new_parts ;
do {
do {
next = strchr ( tmp , ' : ' ) ;
next = strchr ( tmp , ' : ' ) ;
@ -588,6 +593,9 @@ resume:
buflen + = r ;
buflen + = r ;
}
}
if ( buflen_raw = = 0 )
buflen_raw = buflen ;
if ( buflen = = 0 )
if ( buflen = = 0 )
break ;
break ;
@ -599,6 +607,7 @@ resume:
if ( skip > 0 ) {
if ( skip > 0 ) {
skip - = buflen ;
skip - = buflen ;
buflen_raw = 0 ;
buflen = 0 ;
buflen = 0 ;
if ( skip < = 0 )
if ( skip < = 0 )
indicate_writing ( mtd ) ;
indicate_writing ( mtd ) ;
@ -622,6 +631,7 @@ resume:
w + = skip ;
w + = skip ;
e + = skip ;
e + = skip ;
skip - = buflen ;
skip - = buflen ;
buflen_raw = 0 ;
buflen = 0 ;
buflen = 0 ;
offset = 0 ;
offset = 0 ;
continue ;
continue ;
@ -687,6 +697,17 @@ resume:
}
}
w + = buflen ;
w + = buflen ;
# ifdef FIS_SUPPORT
if ( cur_part & & cur_part - > size
& & cur_part < & new_parts [ MAX_ARGS - 1 ]
& & cur_part - > length + buflen_raw > cur_part - > size )
cur_part + + ;
if ( cur_part ) {
cur_part - > length + = buflen_raw ;
cur_part - > crc = crc32 ( cur_part - > crc , buf , buflen_raw ) ;
}
# endif
buflen_raw = 0 ;
buflen = 0 ;
buflen = 0 ;
offset = 0 ;
offset = 0 ;
}
}