version 1.217, 2014/07/04 16:12:08 |
version 1.218, 2014/07/06 18:46:55 |
Line 500 roff_res(struct roff *r, char **bufp, size_t *szp, int |
|
Line 500 roff_res(struct roff *r, char **bufp, size_t *szp, int |
|
size_t naml; /* actual length of the escape name */ |
size_t naml; /* actual length of the escape name */ |
int expand_count; /* to avoid infinite loops */ |
int expand_count; /* to avoid infinite loops */ |
int npos; /* position in numeric expression */ |
int npos; /* position in numeric expression */ |
int irc; /* return code from roff_evalnum() */ |
int arg_complete; /* argument not interrupted by eol */ |
char term; /* character terminating the escape */ |
char term; /* character terminating the escape */ |
|
|
expand_count = 0; |
expand_count = 0; |
Line 585 roff_res(struct roff *r, char **bufp, size_t *szp, int |
|
Line 585 roff_res(struct roff *r, char **bufp, size_t *szp, int |
|
|
|
/* Advance to the end of the name. */ |
/* Advance to the end of the name. */ |
|
|
|
arg_complete = 1; |
for (naml = 0; 0 == maxl || naml < maxl; naml++, cp++) { |
for (naml = 0; 0 == maxl || naml < maxl; naml++, cp++) { |
if ('\0' == *cp) { |
if ('\0' == *cp) { |
mandoc_msg(MANDOCERR_BADESCAPE, r->parse, |
mandoc_msg(MANDOCERR_BADESCAPE, r->parse, |
ln, (int)(stesc - *bufp), NULL); |
ln, (int)(stesc - *bufp), NULL); |
|
arg_complete = 0; |
break; |
break; |
} |
} |
if (0 == maxl && *cp == term) { |
if (0 == maxl && *cp == term) { |
Line 604 roff_res(struct roff *r, char **bufp, size_t *szp, int |
|
Line 606 roff_res(struct roff *r, char **bufp, size_t *szp, int |
|
|
|
switch (stesc[1]) { |
switch (stesc[1]) { |
case '*': |
case '*': |
res = roff_getstrn(r, stnam, naml); |
if (arg_complete) |
|
res = roff_getstrn(r, stnam, naml); |
break; |
break; |
case 'B': |
case 'B': |
npos = 0; |
npos = 0; |
irc = roff_evalnum(stnam, &npos, NULL, 0); |
ubuf[0] = arg_complete && |
ubuf[0] = irc && stnam + npos + 1 == cp |
roff_evalnum(stnam, &npos, NULL, 0) && |
? '1' : '0'; |
stnam + npos + 1 == cp ? '1' : '0'; |
ubuf[1] = '\0'; |
ubuf[1] = '\0'; |
break; |
break; |
case 'n': |
case 'n': |
(void)snprintf(ubuf, sizeof(ubuf), "%d", |
if (arg_complete) |
roff_getregn(r, stnam, naml)); |
(void)snprintf(ubuf, sizeof(ubuf), "%d", |
|
roff_getregn(r, stnam, naml)); |
|
else |
|
ubuf[0] = '\0'; |
break; |
break; |
case 'w': |
case 'w': |
|
/* use even incomplete args */ |
(void)snprintf(ubuf, sizeof(ubuf), "%d", |
(void)snprintf(ubuf, sizeof(ubuf), "%d", |
24 * (int)naml); |
24 * (int)naml); |
break; |
break; |