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

version 1.2, 2010/01/29 16:49:23 version 1.36, 2012/05/21 17:25:40
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.10    RPL/2 (R) version 4.1.9
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 21 Line 21
   
   
 #include "rpl.h"  #include "rpl.h"
 #include <stdarg.h>  
   
   
 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;  
   
   for(bs = 1024;; bs *= 2)  
   {  
     if (b != NULL)  
     {  
         free(b);  
     }  
   
     if ((b = malloc(sizeof(*b) * bs)) == NULL)      unsigned char   *b = NULL;
   
       va_list         cap;
   
       for(bs = 1024;; bs *= 2)
     {      {
         return -1;          va_copy(cap, ap);
   
           if (b != NULL)
           {
               free(b);
           }
   
           if ((b = malloc(sizeof(*b) * bs)) == NULL)
           {
               return -1;
           }
   
           if (((int) (s = vsnprintf(b, bs, fmt, cap))) < 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.36


CVSweb interface <joel.bertrand@systella.fr>