aboutsummaryrefslogtreecommitdiff
path: root/src/sc_parse.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2016-04-21 22:56:10 +0200
committerThomas White <taw@bitwiz.org.uk>2016-04-21 22:56:10 +0200
commit2c85156b2bc8b68502b47c250bd4902ff6449c95 (patch)
treef6f76f8bd687634708c4a85614dcf3bdca353c1c /src/sc_parse.c
parent0a87aa482db59a13a7f3ffe32f50d1392680d74a (diff)
More WIP on slide adding
Diffstat (limited to 'src/sc_parse.c')
-rw-r--r--src/sc_parse.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/sc_parse.c b/src/sc_parse.c
index edad176..c8eea6f 100644
--- a/src/sc_parse.c
+++ b/src/sc_parse.c
@@ -103,6 +103,7 @@ SCBlock *sc_block_append(SCBlock *bl, char *name, char *opt, char *contents,
bln->next = NULL;
if ( bl != NULL ) {
+ bln->next = bl->next;
bl->next = bln;
}
@@ -124,6 +125,7 @@ SCBlock *sc_block_append_end(SCBlock *bl, char *name, char *opt, char *contents)
if ( bln == NULL ) return NULL;
while ( bl->next != NULL ) {
+ bln->next = bl->next;
bl = bl->next;
};
@@ -659,3 +661,34 @@ SCBlock *sc_block_copy(const SCBlock *bl)
return first_copy;
}
+
+
+static char *s_strdup(const char *a)
+{
+ if ( a == NULL ) return NULL;
+ return strdup(a);
+}
+
+
+SCBlock *sc_block_split(SCBlock *bl, size_t pos)
+{
+ SCBlock *n = sc_block_new();
+
+ if ( bl->child != NULL ) {
+ fprintf(stderr, "Splitting a block with a child!\n");
+ return NULL;
+ }
+
+ /* Second block */
+ n->name = s_strdup(bl->name);
+ n->options = s_strdup(bl->options);
+ n->contents = strdup(bl->contents+pos);
+
+ /* Truncate the first block */
+ bl->contents[pos] = '\0';
+
+ n->next = bl->next;
+ bl->next = n;
+
+ return n;
+}