| 77 | |
| 78 | |
| 79 | size_t Archive::SearchRR() |
| 80 | { |
| 81 | // If locator extra field is available for recovery record, let's utilize it. |
| 82 | if (MainHead.Locator && MainHead.RROffset!=0) |
| 83 | { |
| 84 | uint64 CurPos=Tell(); |
| 85 | Seek(MainHead.RROffset,SEEK_SET); |
| 86 | size_t Size=ReadHeader(); |
| 87 | if (Size!=0 && !BrokenHeader && GetHeaderType()==HEAD_SERVICE && SubHead.CmpName(SUBHEAD_TYPE_RR)) |
| 88 | return Size; |
| 89 | Seek(CurPos,SEEK_SET); |
| 90 | } |
| 91 | // Otherwise scan the entire archive to find the recovery record. |
| 92 | return SearchSubBlock(SUBHEAD_TYPE_RR); |
| 93 | } |
| 94 | |
| 95 | |
| 96 | void Archive::UnexpEndArcMsg() |