]> git.cameronkatri.com Git - mandoc.git/blobdiff - chars.c
Remove function calls to res() and so forth in term_word(). These were
[mandoc.git] / chars.c
diff --git a/chars.c b/chars.c
index 2e56f11dde296b24f2e6ff7524ed23aaba397d81..06a2a923f691958889c9142fdfbea4028c03c735 100644 (file)
--- a/chars.c
+++ b/chars.c
@@ -1,4 +1,4 @@
-/*     $Id: chars.c,v 1.38 2011/04/30 22:14:42 kristaps Exp $ */
+/*     $Id: chars.c,v 1.43 2011/05/15 22:29:50 kristaps Exp $ */
 /*
  * Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
 #endif
 
 #include <assert.h>
+#include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #include "mandoc.h"
+#include "libmandoc.h"
 
 #define        PRINT_HI         126
 #define        PRINT_LO         32
@@ -135,27 +137,23 @@ mchars_res2cp(struct mchars *arg, const char *p, size_t sz)
        return(ln->unicode);
 }
 
-
 /*
- * Numbered character to literal character,
- * represented as a null-terminated string for additional safety.
+ * Numbered character to literal character.
+ * This can only be a printable character (i.e., alnum, punct, space) so
+ * prevent the character from ruining our state (backspace, newline, and
+ * so on).
+ * If the character is illegal, returns '\0'.
  */
-const char *
+char
 mchars_num2char(const char *p, size_t sz)
 {
        int               i;
-       static char       c[2];
 
-       if (sz > 3)
-               return(NULL);
-       i = atoi(p);
-       if (i < 0 || i > 255)
-               return(NULL);
-       c[0] = (char)i;
-       c[1] = '\0';
-       return(c);
-}
+       if ((i = mandoc_strntou(p, sz, 10)) < 0)
+               return('\0');
 
+       return(isprint(i) ? i : '\0');
+}
 
 /* 
  * Special character to string array.
@@ -173,7 +171,6 @@ mchars_spec2str(struct mchars *arg, const char *p, size_t sz, size_t *rsz)
        return(ln->ascii);
 }
 
-
 /* 
  * Reserved word to string array.
  */