*/
const char *yaffs_checkptrw_c_version =
- "$Id: yaffs_checkptrw.c,v 1.13 2007-02-14 01:09:06 wookey Exp $";
+ "$Id: yaffs_checkptrw.c,v 1.14 2007-05-15 20:07:40 charles Exp $";
#include "yaffs_checkptrw.h"
}
-
static int yaffs_CheckpointErase(yaffs_Device *dev)
{
dev->checkpointOpenForWrite = forWriting;
dev->checkpointByteCount = 0;
+ dev->checkpointSum = 0;
+ dev->checkpointXor = 0;
dev->checkpointCurrentBlock = -1;
dev->checkpointCurrentChunk = -1;
dev->checkpointNextBlock = dev->internalStartBlock;
return 1;
}
+int yaffs_GetCheckpointSum(yaffs_Device *dev, __u32 *sum)
+{
+ __u32 compositeSum;
+ compositeSum = (dev->checkpointSum << 8) | (dev->checkpointXor & 0xFF);
+ *sum = compositeSum;
+ return 1;
+}
+
static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
{
if(!dev->checkpointBuffer)
return 0;
+
+ if(!dev->checkpointOpenForWrite)
+ return -1;
while(i < nBytes && ok) {
- dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
+ dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
+ dev->checkpointSum += *dataBytes;
+ dev->checkpointXor ^= *dataBytes;
+
dev->checkpointByteOffset++;
i++;
dataBytes++;
if(!dev->checkpointBuffer)
return 0;
+ if(dev->checkpointOpenForWrite)
+ return -1;
+
while(i < nBytes && ok) {
if(ok){
*dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset];
+ dev->checkpointSum += *dataBytes;
+ dev->checkpointXor ^= *dataBytes;
dev->checkpointByteOffset++;
i++;
dataBytes++;