summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-05-27 11:38:37 +0200
committerTyge Løvset <[email protected]>2021-05-27 11:38:37 +0200
commit032b6d654a1125fe172ef225fdacb87ac3e1fdc5 (patch)
tree4d31802477795ec759c7b8eab9f70c9e8320fa4b
parentd5af990b7b16bbb338a455711f6b57caeeb07efb (diff)
downloadSTC-modified-032b6d654a1125fe172ef225fdacb87ac3e1fdc5.tar.gz
STC-modified-032b6d654a1125fe172ef225fdacb87ac3e1fdc5.zip
csview_substr() and csview_slice() should be 100% robust now.
-rw-r--r--include/stc/csview.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/include/stc/csview.h b/include/stc/csview.h
index 5d73fd9d..4a8f704b 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 = 0;
- if (pos + n > sv.size) n = sv.size - pos;
+ if (pos < 0) { pos += sv.size; if (pos < 0) pos = 0; }
+ if (pos > sv.size) pos = sv.size; 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 (p1 < 0) p1 = 0; if (p2 > sv.size) p2 = sv.size;
+ if (p1 < 0) { p1 += sv.size; if (p1 < 0) p1 = 0; }
+ if (p2 < 0) p2 += sv.size; if (p2 > sv.size) p2 = sv.size;
sv.str += p1, sv.size = p2 > p1 ? p2 - p1 : 0; return sv;
}