*/
const char *yaffs_guts_c_version =
- "$Id: yaffs_guts.c,v 1.20 2005-10-07 02:46:49 charles Exp $";
+ "$Id: yaffs_guts.c,v 1.21 2005-10-09 07:55:00 charles Exp $";
#include "yportenv.h"
/* Set up dynamic blockinfo stuff. */
dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8;
dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
+ if(!dev->chunkBits){
+ dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
+ dev->chunkBitsAlt = 1;
+ }
+ else
+ dev->chunkBitsAlt = 0;
+
if (dev->blockInfo && dev->chunkBits) {
memset(dev->blockInfo, 0, nBlocks * sizeof(yaffs_BlockInfo));
memset(dev->chunkBits, 0, dev->chunkBitmapStride * nBlocks);
dev->blockInfoAlt = 0;
dev->blockInfo = NULL;
- YFREE(dev->chunkBits);
+
+ if(dev->chunkBitsAlt)
+ YFREE_ALT(dev->chunkBits);
+ else
+ YFREE(dev->chunkBits);
+ dev->chunkBitsAlt = 0;
dev->chunkBits = NULL;
}
*
* Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
*
- * $Id: yaffs_guts.h,v 1.15 2005-10-07 02:46:50 charles Exp $
+ * $Id: yaffs_guts.h,v 1.16 2005-10-09 07:55:00 charles Exp $
*/
#ifndef __YAFFS_GUTS_H__
/* Block Info */
yaffs_BlockInfo *blockInfo;
- int blockInfoAlt; /* was allocated using alternative strategy */
__u8 *chunkBits; /* bitmap of chunks in use */
+ unsigned blockInfoAlt:1; /* was allocated using alternative strategy */
+ unsigned chunkBitsAlt:1; /* was allocated using alternative strategy */
int chunkBitmapStride; /* Number of bytes of chunkBits per block.
* Must be consistent with nChunksPerBlock.
*/