diff options
-rw-r--r-- | src/piece-table.c | 7 | ||||
-rw-r--r-- | src/piece-table.h | 2 | ||||
-rw-r--r-- | tests/piece-table-delete.c | 26 |
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; } |