[BACK]Return to roff.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/roff.c between version 1.377 and 1.382

version 1.377, 2021/06/27 17:57:55 version 1.382, 2022/04/24 13:38:46
Line 1 
Line 1 
 /* $Id$ */  /* $Id$ */
 /*  /*
  * Copyright (c) 2010-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010-2015, 2017-2022 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
Line 861  void
Line 861  void
 roff_man_free(struct roff_man *man)  roff_man_free(struct roff_man *man)
 {  {
         roff_man_free1(man);          roff_man_free1(man);
           free(man->os_r);
         free(man);          free(man);
 }  }
   
Line 1400  roff_expand(struct roff *r, struct buf *buf, int ln, i
Line 1401  roff_expand(struct roff *r, struct buf *buf, int ln, i
   
                 term = '\0';                  term = '\0';
                 cp = stesc + 1;                  cp = stesc + 1;
                 if (*cp == 'E')                  while (*cp == 'E')
                         cp++;                          cp++;
                 esct = cp;                  esct = cp;
                 switch (*esct) {                  switch (*esct) {
Line 3667  roff_char(ROFF_ARGS)
Line 3668  roff_char(ROFF_ARGS)
                 case ESCAPE_FONTITALIC:                  case ESCAPE_FONTITALIC:
                 case ESCAPE_FONTBOLD:                  case ESCAPE_FONTBOLD:
                 case ESCAPE_FONTBI:                  case ESCAPE_FONTBI:
                 case ESCAPE_FONTCW:                  case ESCAPE_FONTCR:
                   case ESCAPE_FONTCB:
                   case ESCAPE_FONTCI:
                 case ESCAPE_FONTPREV:                  case ESCAPE_FONTPREV:
                         font++;                          font++;
                         break;                          break;
Line 3867  static int
Line 3870  static int
 roff_shift(ROFF_ARGS)  roff_shift(ROFF_ARGS)
 {  {
         struct mctx     *ctx;          struct mctx     *ctx;
         int              levels, i;          int              argpos, levels, i;
   
           argpos = pos;
         levels = 1;          levels = 1;
         if (buf->buf[pos] != '\0' &&          if (buf->buf[pos] != '\0' &&
             roff_evalnum(r, ln, buf->buf, &pos, &levels, 0) == 0) {              roff_evalnum(r, ln, buf->buf, &pos, &levels, 0) == 0) {
Line 3883  roff_shift(ROFF_ARGS)
Line 3887  roff_shift(ROFF_ARGS)
         ctx = r->mstack + r->mstackpos;          ctx = r->mstack + r->mstackpos;
         if (levels > ctx->argc) {          if (levels > ctx->argc) {
                 mandoc_msg(MANDOCERR_SHIFT,                  mandoc_msg(MANDOCERR_SHIFT,
                     ln, pos, "%d, but max is %d", levels, ctx->argc);                      ln, argpos, "%d, but max is %d", levels, ctx->argc);
                 levels = ctx->argc;                  levels = ctx->argc;
         }          }
           if (levels < 0) {
                   mandoc_msg(MANDOCERR_ARG_NEG, ln, argpos, "shift %d", levels);
                   levels = 0;
           }
         if (levels == 0)          if (levels == 0)
                 return ROFF_IGN;                  return ROFF_IGN;
         for (i = 0; i < levels; i++)          for (i = 0; i < levels; i++)
Line 3947  roff_userdef(ROFF_ARGS)
Line 3955  roff_userdef(ROFF_ARGS)
                 r->mstacksz += 8;                  r->mstacksz += 8;
         }          }
         ctx = r->mstack + r->mstackpos;          ctx = r->mstack + r->mstackpos;
         ctx->argsz = 0;  
         ctx->argc = 0;          ctx->argc = 0;
         ctx->argv = NULL;  
   
         /*          /*
          * Collect pointers to macro argument strings,           * Collect pointers to macro argument strings,

Legend:
Removed from v.1.377  
changed lines
  Added in v.1.382

CVSweb