summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--page.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/page.c b/page.c
index e084705..1244df4 100644
--- a/page.c
+++ b/page.c
@@ -57,25 +57,31 @@ void free_page(struct page *page) {
}
void move_gap_forward(struct page *page) {
- page->elements[page->gap_start] = page->elements[page->gap_end];
- page->gap_start++;
- page->gap_end++;
+ if (page->gap_end < PAGE_SIZE) {
+ page->elements[page->gap_start] = page->elements[page->gap_end];
+ page->gap_start++;
+ page->gap_end++;
+ }
}
void move_gap_backward(struct page *page) {
- page->gap_end--;
- page->gap_start--;
- page->elements[page->gap_end] = page->elements[page->gap_start];
+ if (page->gap_start > 0) {
+ page->gap_end--;
+ page->gap_start--;
+ page->elements[page->gap_end] = page->elements[page->gap_start];
+ }
}
void insert_at_gap(struct page *page, uint8_t c) {
- page->elements[page->gap_start] = c;
- page->gap_start++;
- page->element_count++;
+ if (page->element_count < PAGE_SIZE) {
+ page->elements[page->gap_start] = c;
+ page->gap_start++;
+ page->element_count++;
+ }
}
void delete_at_gap(struct page *page) {
- if (page->gap_start) {
+ if (page->gap_start > 0) {
page->gap_start--;
page->element_count--;
}