X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_checkptrw.c;h=2f3f875f75a65e677c6ee24688a3804550746077;hp=0e6f7e1d2e1b564ef27b1da836f88d5f60e4f4a2;hb=b6a4e8ea42be221cca959a466199e568ac2ae698;hpb=6f1de4473200f31d1ca1cf4672baf7afcdec2db0 diff --git a/yaffs_checkptrw.c b/yaffs_checkptrw.c index 0e6f7e1..2f3f875 100644 --- a/yaffs_checkptrw.c +++ b/yaffs_checkptrw.c @@ -9,11 +9,10 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. - * */ const char *yaffs_checkptrw_c_version = - "$Id: yaffs_checkptrw.c,v 1.12 2007-02-12 16:55:25 wookey Exp $"; + "$Id: yaffs_checkptrw.c,v 1.14 2007-05-15 20:07:40 charles Exp $"; #include "yaffs_checkptrw.h" @@ -33,7 +32,6 @@ static int yaffs_CheckpointSpaceOk(yaffs_Device *dev) } - static int yaffs_CheckpointErase(yaffs_Device *dev) { @@ -154,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; @@ -181,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) { @@ -244,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++; @@ -280,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) { @@ -321,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++;