aboutsummaryrefslogtreecommitdiff
path: root/src/sc_parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sc_parse.c')
-rw-r--r--src/sc_parse.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/sc_parse.c b/src/sc_parse.c
index f2814b6..2607031 100644
--- a/src/sc_parse.c
+++ b/src/sc_parse.c
@@ -58,6 +58,7 @@ SCBlock *sc_block_new()
SCBlock *sc_block_next(const SCBlock *bl)
{
+ assert(bl != NULL);
return bl->next;
}
@@ -734,23 +735,27 @@ void sc_insert_block(SCBlock *b1, int o1, SCBlock *ins)
}
-void scblock_delete_text(SCBlock *b, size_t o1, size_t o2)
+/* Delete text from SCBlock contents. o2=-1 means "to the end".
+ * Returns the number of bytes deleted. */
+size_t scblock_delete_text(SCBlock *b, ssize_t o1, ssize_t o2)
{
-
size_t len;
if ( b->contents == NULL ) {
fprintf(stderr, "Deleting text from block \\%s\n", b->name);
- return;
+ return 0;
}
len = strlen(b->contents);
+ if ( o2 < 0 ) o2 = len;
if ( (o1 >= o2) || (o1 > len) || (o2 > len) ) {
fprintf(stderr, "Invalid delete: %i %i %i\n",
(int)o1, (int)o2, (int)len);
- return;
+ return 0;
}
memmove(b->contents+o1, b->contents+o2, len-o2+1);
+
+ return o2-o1;
}