summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/piece-table.c7
-rw-r--r--src/piece-table.h2
-rw-r--r--tests/piece-table-delete.c26
3 files changed, 30 insertions, 5 deletions
diff --git a/src/piece-table.c b/src/piece-table.c
index ba88103..c7f9381 100644
--- a/src/piece-table.c
+++ b/src/piece-table.c
@@ -186,8 +186,8 @@ piece_table_piece_split(piece_table *pt, piece *p, size_t pos)
/* Returns the first piece */
piece *second;
assert(pos < p->length);
- assert(p->start != 0); /* Not a sentinel piece */
- assert(p->length != 0); /* Not an empty piece (they should not exist) */
+ assert(p->buffer != NULL); /* Not a sentinel piece */
+ assert(p->length != 0); /* Not an empty piece (they should not exist) */
if ( pos == 0 )
{
return p->prev;
@@ -196,6 +196,7 @@ piece_table_piece_split(piece_table *pt, piece *p, size_t pos)
second->length = p->length - pos;
p->length = pos;
second->next = p->next;
+ second->next->prev = second;
p->next = second;
second->prev = p;
second->start = p->start + pos;
@@ -385,7 +386,7 @@ piece_table_create (char *orig)
pt->sentinel->prev = original;
pt->empty = NULL;
- pt->cached = NULL;
+ pt->cached = original;
pt->cached_offset = 0;
return pt;
}
diff --git a/src/piece-table.h b/src/piece-table.h
index 59972ee..0e95550 100644
--- a/src/piece-table.h
+++ b/src/piece-table.h
@@ -27,7 +27,7 @@ void piece_table_destroy (piece_table * piece_table);
char piece_table_index (piece_table *pt, size_t pos);
void piece_table_insert (piece_table *pt, size_t pos, char *in, size_t len);
-void piece_table_delete (piece_table *pt, size_t start, size_t end);
+void piece_table_delete (piece_table *pt, size_t pos, size_t len);
void piece_table_print (piece_table *pt);
char *piece_table_to_string (piece_table *pt);
diff --git a/tests/piece-table-delete.c b/tests/piece-table-delete.c
index 852f6b1..c883b34 100644
--- a/tests/piece-table-delete.c
+++ b/tests/piece-table-delete.c
@@ -1,10 +1,34 @@
+#include <stdio.h>
+#include <string.h>
#include "../src/piece-table.h"
int
main()
{
- piece_table *pt = piece_table_create("1234567890");
+ piece_table *pt = piece_table_create("0123456789");
piece_table_delete(pt, 0, 10);
+ if (strcmp(piece_table_to_string(pt), ""))
+ return 1;
piece_table_destroy(pt);
+
+ pt = piece_table_create("0123456789");
+ piece_table_delete(pt, 0, 1);
+ if (strcmp(piece_table_to_string(pt), "123456789"))
+ return 2;
+ piece_table_destroy(pt);
+
+ pt = piece_table_create("0123456789");
+ piece_table_delete(pt, 9, 1);
+ if (strcmp(piece_table_to_string(pt), "012345678"))
+ return 3;
+ piece_table_destroy(pt);
+
+ pt = piece_table_create("0123456789");
+ piece_table_delete(pt, 7, 1);
+ piece_table_delete(pt, 0, 1);
+ if (strcmp(piece_table_to_string(pt), "12345689"))
+ return 4;
+ piece_table_destroy(pt);
+
return 0;
}