=================================================================== RCS file: /cvs/docbook2mdoc/parse.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -p -r1.59 -r1.60 --- docbook2mdoc/parse.c 2019/05/02 11:58:18 1.59 +++ docbook2mdoc/parse.c 2019/05/07 23:41:48 1.60 @@ -1,4 +1,4 @@ -/* $Id: parse.c,v 1.59 2019/05/02 11:58:18 schwarze Exp $ */ +/* $Id: parse.c,v 1.60 2019/05/07 23:41:48 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -376,7 +376,7 @@ xml_entity(struct parse *p, const char *name) struct pnode *n; const char *ccp; char *cp; - unsigned int codepoint; + long codepoint; enum pstate pstate; if (p->del > 0) @@ -421,8 +421,16 @@ xml_entity(struct parse *p, const char *name) } } if (*name == '#') { - codepoint = strtonum(name + 1, 0, 0x10ffff, &ccp); - if (ccp == NULL) { + errno = 0; + if (name[1] == 'x') { + ccp = name + 2; + codepoint = strtol(ccp, &cp, 16); + } else { + ccp = name + 1; + codepoint = strtol(ccp, &cp, 10); + } + if (*ccp != '\0' && *cp == '\0' && errno != ERANGE && + codepoint >= 0 && codepoint <= 0x10ffff) { n = pnode_alloc(p->cur); xasprintf(&n->b, "\\[u%4.4X]", codepoint); goto done;