Diff for /rpl/src/asprintf.c between versions 1.2 and 1.3

version 1.2, 2010/01/29 16:49:23 version 1.3, 2010/02/01 14:05:03
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.10    RPL/2 (R) version 4.0.10
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2010 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 27 Line 27
 int  int
 valsprintf(unsigned char **strp, const char *fmt, va_list ap)  valsprintf(unsigned char **strp, const char *fmt, va_list ap)
 {  {
   size_t            bs;      size_t          bs;
   size_t            s;      size_t          s;
   unsigned char     *b = NULL;      unsigned char   *b = NULL;
   
   for(bs = 1024;; bs *= 2)  
   {  
     if (b != NULL)  
     {  
         free(b);  
     }  
   
     if ((b = malloc(sizeof(*b) * bs)) == NULL)      for(bs = 1024;; bs *= 2)
     {      {
         return -1;          if (b != NULL)
           {
               free(b);
           }
   
               if ((b = malloc(sizeof(*b) * bs)) == NULL)
           {
               return -1;
           }
   
               if (((int) (s = vsnprintf(b, bs, fmt, ap))) < 0)
           {
               free(b);
               return -1;
           }
   
               if (s < bs)
           {
               break;
           }
     }      }
   
     if (((int) (s = vsnprintf(b, bs, fmt, ap))) < 0)      if (((*strp) = realloc(b, ((s = strlen(b)) + 1) * sizeof(*b))) == NULL)
     {      {
         free(b);          free(b);
         return -1;          return -1;
     }      }
   
     if (s < bs)      return s;
     {  
         break;  
     }  
   }  
   
   if (((*strp) = realloc(b, ((s = strlen(b)) + 1) * sizeof(*b))) == NULL)  
   {  
       free(b);  
       return -1;  
   }  
   
   return s;  
 }  }
   
   
 int  int
 alsprintf(unsigned char **strp, const char *fmt, ...)  alsprintf(unsigned char **strp, const char *fmt, ...)
 {  {
   int           done;      int         done;
   va_list       arg;      va_list     arg;
   
   va_start(arg, fmt);      va_start(arg, fmt);
   done = valsprintf(strp, fmt, arg);      done = valsprintf(strp, fmt, arg);
   va_end(arg);      va_end(arg);
   
   return(done);      return(done);
 }  }
   
 // vim: ts=4  // vim: ts=4

Removed from v.1.2  
changed lines
  Added in v.1.3


CVSweb interface <joel.bertrand@systella.fr>