diff options
| author | Tyge Løvset <[email protected]> | 2021-05-27 10:33:28 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2021-05-27 10:33:28 +0200 |
| commit | 49578b87003a2c8e6ef98924824079e48bf5b71e (patch) | |
| tree | 8cbf1569bf45ed54ac368a96930b0e30567ac882 | |
| parent | c7a6f7c17e2d2a2b0144cbec87f4b2c93e8150dd (diff) | |
| download | STC-modified-49578b87003a2c8e6ef98924824079e48bf5b71e.tar.gz STC-modified-49578b87003a2c8e6ef98924824079e48bf5b71e.zip | |
Fix: Allow csview_substr() and csview_slice() to take larger negative position than size of view.
| -rw-r--r-- | include/stc/csview.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/include/stc/csview.h b/include/stc/csview.h index 9cfef3b6..87fde803 100644 --- a/include/stc/csview.h +++ b/include/stc/csview.h @@ -70,14 +70,14 @@ STC_INLINE csview_iter_t csview_end(const csview* self) STC_INLINE void csview_next(csview_iter_t* it) { ++it->ref; }
STC_INLINE csview csview_substr(csview sv, intptr_t pos, size_t n) {
- if (pos < 0) pos += sv.size;
+ if (pos < 0) pos += sv.size; if (pos < 0) pos = 0;
if (pos + n > sv.size) n = sv.size - pos;
sv.str += pos, sv.size = n; return sv;
}
STC_INLINE csview csview_slice(csview sv, intptr_t p1, intptr_t p2) {
if (p1 < 0) p1 += sv.size; if (p2 < 0) p2 += sv.size;
- if (p2 > sv.size) p2 = sv.size;
+ if (p1 < 0) p1 = 0; if (p2 < 0) p2 = 0; if (p2 > sv.size) p2 = sv.size;
sv.str += p1, sv.size = p2 > p1 ? p2 - p1 : 0; return sv;
}
|
