- if (sizeof start < sizeof range)
- {
- regoff_t length_offset = length;
- regoff_t start_offset = start;
- if (BE (length_offset - start_offset < range, 0))
- range = length_offset - start_offset;
- else if (BE (range < - start_offset, 0))
- range = -start_offset;
- }
- else
- {
- if (BE (start + range > length, 0))
- range = length - start;
- else if (BE (start + range < 0, 0))
- range = -start;
- }
+ if (BE (length < last_start || (0 <= range && last_start < start), 0))
+ last_start = length;
+ else if (BE (last_start < 0 || (range < 0 && start <= last_start), 0))
+ last_start = 0;