From 88e6132e8d91d11833d83234c6965fbda9db2a09 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Wed, 27 Jul 2011 17:25:30 +0000 Subject: Have roffstr keep track of string lengths. --- roff.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'roff.c') diff --git a/roff.c b/roff.c index 19d6d29c..d7672a55 100644 --- a/roff.c +++ b/roff.c @@ -83,7 +83,9 @@ struct reg { struct roffstr { char *key; /* key of symbol */ + size_t keysz; char *val; /* current value */ + size_t valsz; struct roffstr *next; /* next in list */ }; @@ -1472,13 +1474,16 @@ roff_setstr(struct roff *r, const char *name, const char *string, /* Create a new string table entry. */ n = mandoc_malloc(sizeof(struct roffstr)); n->key = mandoc_strdup(name); + n->keysz = strlen(name); n->val = NULL; + n->valsz = 0; n->next = r->first_string; r->first_string = n; } else if (0 == multiline) { /* In multiline mode, append; else replace. */ free(n->val); n->val = NULL; + n->valsz = 0; } if (NULL == string) @@ -1492,10 +1497,12 @@ roff_setstr(struct roff *r, const char *name, const char *string, if (NULL == n->val) { n->val = mandoc_malloc(newch); *n->val = '\0'; + n->valsz = newch - 1; oldch = 0; } else { - oldch = strlen(n->val); - n->val = mandoc_realloc(n->val, oldch + newch); + oldch = n->valsz; + n->val = mandoc_realloc(n->val, n->valsz + newch); + n->valsz += newch - 1; } /* Skip existing content in the destination buffer. */ -- cgit