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

Diff for /src/usr.bin/make/buf.c between version 1.27 and 1.28

version 1.27, 2015/04/29 00:42:12 version 1.28, 2019/12/21 15:26:47
Line 66 
Line 66 
  *      Functions for automatically expanded buffers.   *      Functions for automatically expanded buffers.
  */   */
   
   #include <assert.h>
 #include <ctype.h>  #include <ctype.h>
 #include <limits.h>  #include <limits.h>
 #include <stddef.h>  #include <stddef.h>
Line 96 
Line 97 
         exit(2);          exit(2);
 }  }
   
 /* BufExpand(bp, nb)  #define BUF_DEF_SIZE    256U    /* Default buffer size */
  *      Expand buffer bp to hold upto nb additional  #define BUF_MARGIN      256U    /* Make sure we are comfortable */
  *      chars.  Makes sure there's room for an extra '\0' char at  
  *      the end of the buffer to terminate the string.  */  
 #define BufExpand(bp,nb)                                \  
 do {                                                    \  
         size_t   occupied = (bp)->inPtr - (bp)->buffer; \  
         size_t   size = (bp)->endPtr - (bp)->buffer;    \  
         DO_STAT_BUF(bp, nb);                            \  
                                                         \  
         do {                                            \  
                 if (size <= SIZE_MAX/2) {               \  
                         size *= 2 ;                     \  
                 } else {                                \  
                         fatal_overflow();               \  
                 }                                       \  
         } while (size - occupied < (nb)+1+BUF_MARGIN);  \  
         (bp)->buffer = (bp)->inPtr = (bp)->endPtr =     \  
                 erealloc((bp)->buffer, size);           \  
         (bp)->inPtr += occupied;                        \  
         (bp)->endPtr += size;                           \  
 } while (0);  
   
 #define BUF_DEF_SIZE    256     /* Default buffer size */  /* BufExpand(bp, nb)
 #define BUF_MARGIN      256     /* Make sure we are comfortable */   *      Expand buffer bp to hold up to nb additional
    *      chars.  Makes sure there's always room for an extra '\0' char
 /* the hard case for Buf_AddChar: buffer must be expanded to accommodate   *      at the end of the buffer for Buf_Retrieve. */
  * one more char.  */  
 void  void
 BufOverflow(Buffer bp)  BufExpand(Buffer bp, size_t nb)
 {  {
         BufExpand(bp, 1);          size_t   occupied = bp->inPtr - bp->buffer;
           size_t   size = bp->endPtr - bp->buffer;
           DO_STAT_BUF(bp, nb);
   
           do {
                   if (size <= SIZE_MAX/2) {
                           size *= 2 ;
                   } else {
                           fatal_overflow();
                   }
                   assert(size >= occupied);
           } while (size - occupied < nb+1+BUF_MARGIN);
           bp->buffer = erealloc(bp->buffer, size);
           bp->inPtr = bp->buffer +occupied;
           bp->endPtr = bp->buffer + size;
 }  }
   
   
 void  void
 Buf_AddChars(Buffer bp, size_t numBytes, const char *bytesPtr)  Buf_AddChars(Buffer bp, size_t numBytes, const char *bytesPtr)
 {  {
           assert(bp->endPtr >= bp->inPtr);
         if ((size_t)(bp->endPtr - bp->inPtr) < numBytes+1)          if ((size_t)(bp->endPtr - bp->inPtr) < numBytes+1)
                 BufExpand(bp, numBytes);                  BufExpand(bp, numBytes);
   
Line 150 
Line 143 
         va_start(va, fmt);          va_start(va, fmt);
         n = vsnprintf(bp->inPtr, bp->endPtr - bp->inPtr, fmt, va);          n = vsnprintf(bp->inPtr, bp->endPtr - bp->inPtr, fmt, va);
         va_end(va);          va_end(va);
         if (n > bp->endPtr - bp->inPtr) {          if (n+1 > bp->endPtr - bp->inPtr) {
                 va_list vb;                  va_list vb;
                 BufExpand(bp, n);                  BufExpand(bp, n);
                 va_start(vb, fmt);                  va_start(vb, fmt);

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.28