From 08971ae0d318ca4384957d962d049ba2a3a3f8a7 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 | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'roff.c') diff --git a/roff.c b/roff.c index bfe388fa..b2332224 100644 --- a/roff.c +++ b/roff.c @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.161 2011/07/27 14:58:28 kristaps Exp $ */ +/* $Id: roff.c,v 1.162 2011/07/27 17:25:30 kristaps Exp $ */ /* * Copyright (c) 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010, 2011 Ingo Schwarze @@ -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 v1.2.3-56-ge451