/* We save the parent object in the chunkId */
ptt->chunkId = EXTRA_HEADER_INFO_FLAG
| t->extraParentObjectId;
- if (t->extraIsShrinkHeader) {
+ if (t->extraIsShrinkHeader)
ptt->chunkId |= EXTRA_SHRINK_FLAG;
- }
- if (t->extraShadows) {
+ if (t->extraShadows)
ptt->chunkId |= EXTRA_SHADOWS_FLAG;
- }
ptt->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
ptt->objectId |=
(t->extraObjectType << EXTRA_OBJECT_TYPE_SHIFT);
- if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
+ if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK)
ptt->byteCount = t->extraEquivalentObjectId;
- } else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE) {
+ else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE)
ptt->byteCount = t->extraFileLength;
- } else {
+ else
ptt->byteCount = 0;
- }
}
yaffs_DumpPackedTags2TagsPart(ptt);
}
-void yaffs_PackTags2(yaffs_PackedTags2 *pt, const yaffs_ExtendedTags *t)
+void yaffs_PackTags2(yaffs_Device *dev, yaffs_PackedTags2 *pt, const yaffs_ExtendedTags *t)
{
yaffs_PackTags2TagsPart(&pt->t, t);
-#ifndef YAFFS_IGNORE_TAGS_ECC
- {
+ if(!dev->noTagsECC)
yaffs_ECCCalculateOther((unsigned char *)&pt->t,
sizeof(yaffs_PackedTags2TagsPart),
&pt->ecc);
- }
-#endif
}
ptt->objectId >> EXTRA_OBJECT_TYPE_SHIFT;
t->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
- if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
+ if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK)
t->extraEquivalentObjectId = ptt->byteCount;
- } else {
+ else
t->extraFileLength = ptt->byteCount;
- }
}
}
}
-void yaffs_UnpackTags2(yaffs_ExtendedTags *t, yaffs_PackedTags2 *pt)
+void yaffs_UnpackTags2(yaffs_Device *dev, yaffs_ExtendedTags *t, yaffs_PackedTags2 *pt)
{
yaffs_ECCResult eccResult = YAFFS_ECC_RESULT_NO_ERROR;
- if (pt->t.sequenceNumber != 0xFFFFFFFF) {
- /* Page is in use */
-#ifndef YAFFS_IGNORE_TAGS_ECC
- {
- yaffs_ECCOther ecc;
- int result;
- yaffs_ECCCalculateOther((unsigned char *)&pt->t,
- sizeof
- (yaffs_PackedTags2TagsPart),
- &ecc);
- result =
- yaffs_ECCCorrectOther((unsigned char *)&pt->t,
- sizeof
- (yaffs_PackedTags2TagsPart),
- &pt->ecc, &ecc);
- switch (result) {
+ if (pt->t.sequenceNumber != 0xFFFFFFFF &&
+ !dev->noTagsECC){
+ /* Chunk is in use and we need to do ECC */
+
+ yaffs_ECCOther ecc;
+ int result;
+ yaffs_ECCCalculateOther((unsigned char *)&pt->t,
+ sizeof(yaffs_PackedTags2TagsPart),
+ &ecc);
+ result = yaffs_ECCCorrectOther((unsigned char *)&pt->t,
+ sizeof(yaffs_PackedTags2TagsPart),
+ &pt->ecc, &ecc);
+ switch (result) {
case 0:
eccResult = YAFFS_ECC_RESULT_NO_ERROR;
break;
break;
default:
eccResult = YAFFS_ECC_RESULT_UNKNOWN;
- }
}
-#endif
}
yaffs_UnpackTags2TagsPart(t, &pt->t);
yaffs_DumpPackedTags2(pt);
yaffs_DumpTags2(t);
-
}