diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-07-27 17:25:30 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-07-27 17:25:30 +0000 |
commit | 88e6132e8d91d11833d83234c6965fbda9db2a09 (patch) | |
tree | e28c134327f96740caf761e129f2d854613cc78e /roff.c | |
parent | 4e4c3f0679ca7e81dec55e57275df8005269ce1e (diff) | |
download | mandoc-88e6132e8d91d11833d83234c6965fbda9db2a09.tar.gz |
Have roffstr keep track of string lengths.
Diffstat (limited to 'roff.c')
-rw-r--r-- | roff.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -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. */ |