]> git.cameronkatri.com Git - mandoc.git/blobdiff - term.c
Memory-corruption fix.
[mandoc.git] / term.c
diff --git a/term.c b/term.c
index bc44fc6177df3cdb6411ab92e72e2728ea43e959..a4c75df634ca48554f1f48b66a48964b68cc5e6b 100644 (file)
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.42 2009/03/05 13:12:12 kristaps Exp $ */
+/* $Id: term.c,v 1.43 2009/03/06 14:13:47 kristaps Exp $ */
 /*
  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -166,6 +166,7 @@ DECL_PRE(termp_xr);
 DECL_POST(termp___);
 DECL_POST(termp_bl);
 DECL_POST(termp_bx);
+DECL_POST(termp_lb);
 
 const  struct termact __termacts[MDOC_MAX] = {
        { NULL, NULL }, /* \" */
@@ -274,6 +275,7 @@ const       struct termact __termacts[MDOC_MAX] = {
        { NULL, NULL }, /* Hf */
        { NULL, NULL }, /* Fr */
        { termp_ud_pre, NULL }, /* Ud */
+       { NULL, termp_lb_post }, /* lb */
 };
 
 const struct termact *termacts = __termacts;
@@ -721,14 +723,13 @@ termp_pp_pre(DECL_ARGS)
 static int
 termp_st_pre(DECL_ARGS)
 {
-       const char      *tp;
+       const char      *cp;
 
-       assert(1 == node->data.elem.argc);
-
-       tp = mdoc_st2a(node->data.elem.argv[0].arg);
-       word(p, tp);
-
-       return(1);
+       /* XXX - if child isn't text? */
+       if (node->child) 
+               if ((cp = mdoc_a2st(node->child->data.text.string)))
+                       word(p, cp);
+       return(0);
 }
 
 
@@ -967,6 +968,15 @@ termp_bt_pre(DECL_ARGS)
 }
 
 
+/* ARGSUSED */
+static void
+termp_lb_post(DECL_ARGS)
+{
+
+       newln(p);
+}
+
+
 /* ARGSUSED */
 static int
 termp_ud_pre(DECL_ARGS)
@@ -1480,15 +1490,19 @@ termp_in_post(DECL_ARGS)
 static int
 termp_at_pre(DECL_ARGS)
 {
-       enum mdoc_att    c;
+       const char      *att;
+
+       att = NULL;
 
-       c = ATT_DEFAULT;
        if (node->child) {
                assert(MDOC_TEXT == node->child->type);
-               c = mdoc_atoatt(node->child->data.text.string);
+               att = mdoc_a2att(node->child->data.text.string);
        }
 
-       word(p, mdoc_att2a(c));
+       if (NULL == att)
+               att = "AT&T UNIX";
+
+       word(p, att);
        return(0);
 }