[BACK]Return to echo.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

Diff for /src/usr.bin/mg/echo.c between version 1.46 and 1.47

version 1.46, 2006/04/02 17:18:58 version 1.47, 2009/06/02 17:57:30
Line 156 
Line 156 
         int      cc, rr;                /* saved ttcol, ttrow */          int      cc, rr;                /* saved ttcol, ttrow */
         char    *ret;                   /* return value */          char    *ret;                   /* return value */
   
           static char emptyval[] = "";    /* XXX hackish way to return err msg*/
   
 #ifndef NO_MACRO  #ifndef NO_MACRO
         if (inmacro) {          if (inmacro) {
                 if (dynbuf) {                  if (dynbuf) {
Line 288 
Line 290 
                                         size_t newsize = epos + epos + 16;                                          size_t newsize = epos + epos + 16;
                                         if ((newp = realloc(buf, newsize))                                          if ((newp = realloc(buf, newsize))
                                             == NULL)                                              == NULL)
                                                 goto fail;                                                  goto memfail;
                                         buf = newp;                                          buf = newp;
                                         nbuf = newsize;                                          nbuf = newsize;
                                 }                                  }
                                   if (!dynbuf && epos + 1 >= nbuf) {
                                           ewprintf("Line too long");
                                           return (emptyval);
                                   }
                                 for (t = epos; t > cpos; t--)                                  for (t = epos; t > cpos; t--)
                                         buf[t] = buf[t - 1];                                          buf[t] = buf[t - 1];
                                 buf[cpos++] = (char)y;                                  buf[cpos++] = (char)y;
Line 342 
Line 348 
                         if (macrodef) {                          if (macrodef) {
                                 struct line     *lp;                                  struct line     *lp;
   
                                 if ((lp = lalloc(cpos)) == NULL) {                                  if ((lp = lalloc(cpos)) == NULL)
                                         static char falseval[] = "";                                          goto memfail;
                                         /* XXX hackish */  
                                         if (dynbuf && buf != NULL)  
                                                 free(buf);  
                                         return (falseval);  
                                 }  
                                 lp->l_fp = maclcur->l_fp;                                  lp->l_fp = maclcur->l_fp;
                                 maclcur->l_fp = lp;                                  maclcur->l_fp = lp;
                                 lp->l_bp = maclcur;                                  lp->l_bp = maclcur;
Line 446 
Line 447 
                                 void *newp;                                  void *newp;
                                 size_t newsize = epos + epos + 16;                                  size_t newsize = epos + epos + 16;
                                 if ((newp = realloc(buf, newsize)) == NULL)                                  if ((newp = realloc(buf, newsize)) == NULL)
                                         goto fail;                                          goto memfail;
                                 buf = newp;                                  buf = newp;
                                 nbuf = newsize;                                  nbuf = newsize;
                         }                          }
                           if (!dynbuf && epos + 1 >= nbuf) {
                                   ewprintf("Line too long");
                                   return (emptyval);
                           }
                         for (i = epos; i > cpos; i--)                          for (i = epos; i > cpos; i--)
                                 buf[i] = buf[i - 1];                                  buf[i] = buf[i - 1];
                         buf[cpos++] = (char)c;                          buf[cpos++] = (char)c;
Line 473 
Line 478 
                 }                  }
         }          }
         return (ret);          return (ret);
 fail:  memfail:
           if (dynbuf && buf)
                   free(buf);
         ewprintf("Out of memory");          ewprintf("Out of memory");
         free(buf);          return (emptyval);
         return (NULL);  
 }  }
   
 /*  /*

Legend:
Removed from v.1.46  
changed lines
  Added in v.1.47