=================================================================== RCS file: /cvs/mandoc/roff.c,v retrieving revision 1.161 retrieving revision 1.162 diff -u -p -r1.161 -r1.162 --- mandoc/roff.c 2011/07/27 14:58:28 1.161 +++ mandoc/roff.c 2011/07/27 17:25:30 1.162 @@ -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 ch /* 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 ch 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. */