@@ -89,40 +89,42 @@ std::shared_ptr<const TrackDataFlux> AbstractDecoder::decodeToSectors(
8989
9090 /* Read the sector record. */
9191
92- Fluxmap::Position before = fmr.tell ();
92+ Fluxmap::Position before_sector = fmr.tell ();
9393 decodeSectorRecord ();
94- Fluxmap::Position after = fmr.tell ();
95- pushRecord (before, after );
94+ Fluxmap::Position after_sector = fmr.tell ();
95+ pushRecord (before_sector, after_sector );
9696
9797 if (_sector->status != Sector::DATA_MISSING)
9898 {
99- _sector->position = before .bytes ;
100- _sector->dataStartTime = before .ns ();
101- _sector->dataEndTime = after .ns ();
99+ _sector->position = before_sector .bytes ;
100+ _sector->dataStartTime = before_sector .ns ();
101+ _sector->dataEndTime = after_sector .ns ();
102102 }
103103 else
104104 {
105105 /* The data is in a separate record. */
106+ Fluxmap::Position before_data = before_sector;
107+ Fluxmap::Position after_data = after_sector;
106108
107109 for (;;)
108110 {
109- _sector->headerStartTime = before .ns ();
110- _sector->headerEndTime = after .ns ();
111+ _sector->headerStartTime = before_data .ns ();
112+ _sector->headerEndTime = after_data .ns ();
111113
112114 _sector->clock = advanceToNextRecord ();
113115 if (fmr.eof () || !_sector->clock )
114116 break ;
115117
116- before = fmr.tell ();
118+ before_data = fmr.tell ();
117119 decodeDataRecord ();
118- after = fmr.tell ();
120+ after_data = fmr.tell ();
119121
120122 if (_sector->status != Sector::DATA_MISSING)
121123 {
122- _sector->position = before .bytes ;
123- _sector->dataStartTime = before .ns ();
124- _sector->dataEndTime = after .ns ();
125- pushRecord (before, after );
124+ _sector->position = before_data .bytes ;
125+ _sector->dataStartTime = before_data .ns ();
126+ _sector->dataEndTime = after_data .ns ();
127+ pushRecord (before_data, after_data );
126128 break ;
127129 }
128130
@@ -131,6 +133,9 @@ std::shared_ptr<const TrackDataFlux> AbstractDecoder::decodeToSectors(
131133 }
132134 }
133135
136+ /* Allow decode of overlapping records. */
137+ fmr.seek (after_sector);
138+
134139 if (_sector->status != Sector::MISSING)
135140 _trackdata->sectors .push_back (_sector);
136141 }
0 commit comments