version 1.98, 2010/08/20 01:02:07 |
version 1.99, 2010/08/24 12:48:43 |
Line 136 static int roff_res(struct roff *, |
|
Line 136 static int roff_res(struct roff *, |
|
char **, size_t *, int); |
char **, size_t *, int); |
static void roff_setstr(struct roff *, |
static void roff_setstr(struct roff *, |
const char *, const char *); |
const char *, const char *); |
|
static char *roff_strdup(const char *); |
|
|
/* See roff_hash_find() */ |
/* See roff_hash_find() */ |
|
|
Line 1035 roff_nr(ROFF_ARGS) |
|
Line 1036 roff_nr(ROFF_ARGS) |
|
} |
} |
|
|
|
|
|
static char * |
|
roff_strdup(const char *name) |
|
{ |
|
char *namecopy, *sv; |
|
|
|
/* |
|
* This isn't a nice simple mandoc_strdup() because we must |
|
* handle roff's stupid double-escape rule. |
|
*/ |
|
sv = namecopy = mandoc_malloc(strlen(name) + 1); |
|
while (*name) { |
|
if ('\\' == *name && '\\' == *(name + 1)) |
|
name++; |
|
*namecopy++ = *name++; |
|
} |
|
|
|
*namecopy = '\0'; |
|
return(sv); |
|
} |
|
|
|
|
static void |
static void |
roff_setstr(struct roff *r, const char *name, const char *string) |
roff_setstr(struct roff *r, const char *name, const char *string) |
{ |
{ |
Line 1054 roff_setstr(struct roff *r, const char *name, const ch |
|
Line 1076 roff_setstr(struct roff *r, const char *name, const ch |
|
} else |
} else |
free(n->string); |
free(n->string); |
|
|
ROFF_DEBUG("roff: new symbol: [%s] = [%s]\n", name, string); |
/* Don't use mandoc_strdup: clean out double-escapes. */ |
n->string = string ? strdup(string) : NULL; |
n->string = string ? roff_strdup(string) : NULL; |
|
ROFF_DEBUG("roff: new symbol: [%s] = [%s]\n", name, n->string); |
} |
} |
|
|
|
|