X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_checkptrw.c;h=2f3f875f75a65e677c6ee24688a3804550746077;hp=2f658e68aadacf37eca09f30e34bb584e018cd5a;hb=7b7ff60a62448da4850791aa986c2c19354e93f2;hpb=e1ac494e05a5dc7ab61d799af815d103a11d318c diff --git a/yaffs_checkptrw.c b/yaffs_checkptrw.c index 2f658e6..2f3f875 100644 --- a/yaffs_checkptrw.c +++ b/yaffs_checkptrw.c @@ -12,7 +12,7 @@ */ 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" @@ -32,7 +32,6 @@ static int yaffs_CheckpointSpaceOk(yaffs_Device *dev) } - static int yaffs_CheckpointErase(yaffs_Device *dev) { @@ -153,6 +152,8 @@ int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting) dev->checkpointOpenForWrite = forWriting; dev->checkpointByteCount = 0; + dev->checkpointSum = 0; + dev->checkpointXor = 0; dev->checkpointCurrentBlock = -1; dev->checkpointCurrentChunk = -1; dev->checkpointNextBlock = dev->internalStartBlock; @@ -180,6 +181,14 @@ int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting) 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) { @@ -243,12 +252,18 @@ int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes) 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++; @@ -279,6 +294,9 @@ int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes) if(!dev->checkpointBuffer) return 0; + if(dev->checkpointOpenForWrite) + return -1; + while(i < nBytes && ok) { @@ -320,6 +338,8 @@ int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes) if(ok){ *dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset]; + dev->checkpointSum += *dataBytes; + dev->checkpointXor ^= *dataBytes; dev->checkpointByteOffset++; i++; dataBytes++;