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

Diff for /src/usr.bin/file/Attic/funcs.c between version 1.3 and 1.3.6.1

version 1.3, 2005/04/11 16:31:35 version 1.3.6.1, 2007/07/09 17:32:51
Line 29 
Line 29 
  */   */
 #include "file.h"  #include "file.h"
 #include "magic.h"  #include "magic.h"
   #include <limits.h>
 #include <stdarg.h>  #include <stdarg.h>
   #include <stddef.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
 #include <ctype.h>  #include <ctype.h>
Line 44 
Line 46 
 file_printf(struct magic_set *ms, const char *fmt, ...)  file_printf(struct magic_set *ms, const char *fmt, ...)
 {  {
         va_list ap;          va_list ap;
         size_t len;          int len;
           size_t size;
         char *buf;          char *buf;
           ptrdiff_t diff;
   
         va_start(ap, fmt);          va_start(ap, fmt);
   
         len = vsnprintf(ms->o.ptr, ms->o.len, fmt, ap);          len = vsnprintf(ms->o.ptr, ms->o.left, fmt, ap);
         if (len == -1 || len >= ms->o.len) {          if (len == -1) {
                   file_error(ms, errno, "vsnprintf failed");
                   return -1;
           } else if (len >= ms->o.left) {
                 va_end(ap);                  va_end(ap);
                 if ((buf = realloc(ms->o.buf, len + 1024)) == NULL) {                  size = (ms->o.size - ms->o.left) + len + 1024;
                   if ((buf = realloc(ms->o.buf, size)) == NULL) {
                         file_oomem(ms);                          file_oomem(ms);
                         return -1;                          return -1;
                 }                  }
                 ms->o.ptr = buf + (ms->o.ptr - ms->o.buf);                  diff = ms->o.ptr - ms->o.buf;
                   ms->o.ptr = buf + diff;
                 ms->o.buf = buf;                  ms->o.buf = buf;
                 ms->o.len = ms->o.size - (ms->o.ptr - ms->o.buf);                  ms->o.left = size - diff;
                 ms->o.size = len + 1024;                  ms->o.size = size;
   
                 va_start(ap, fmt);                  va_start(ap, fmt);
                 len = vsnprintf(ms->o.ptr, ms->o.len, fmt, ap);                  len = vsnprintf(ms->o.ptr, ms->o.left, fmt, ap);
                   if (len == -1) {
                           file_error(ms, errno, "vsnprintf failed");
                           return -1;
                   }
         }          }
         ms->o.ptr += len;          ms->o.ptr += len;
         ms->o.len -= len;          ms->o.left -= len;
         va_end(ap);          va_end(ap);
         return 0;          return 0;
 }  }
Line 152 
Line 165 
 protected const char *  protected const char *
 file_getbuffer(struct magic_set *ms)  file_getbuffer(struct magic_set *ms)
 {  {
         char *nbuf, *op, *np;          char *pbuf, *op, *np;
         size_t nsize;          size_t psize, len;
   
         if (ms->haderr)          if (ms->haderr)
                 return NULL;                  return NULL;
Line 161 
Line 174 
         if (ms->flags & MAGIC_RAW)          if (ms->flags & MAGIC_RAW)
                 return ms->o.buf;                  return ms->o.buf;
   
         nsize = ms->o.len * 4 + 1;          len = ms->o.size - ms->o.left;
         if (ms->o.psize < nsize) {          if (len > (SIZE_T_MAX - 1) / 4) {
                 if ((nbuf = realloc(ms->o.pbuf, nsize)) == NULL) {                  file_oomem(ms);
                   return NULL;
           }
           /* * 4 is for octal representation, + 1 is for NUL */
           psize = len * 4 + 1;
           if (ms->o.psize < psize) {
                   if ((pbuf = realloc(ms->o.pbuf, psize)) == NULL) {
                         file_oomem(ms);                          file_oomem(ms);
                         return NULL;                          return NULL;
                 }                  }
                 ms->o.psize = nsize;                  ms->o.psize = psize;
                 ms->o.pbuf = nbuf;                  ms->o.pbuf = pbuf;
         }          }
   
         for (np = ms->o.pbuf, op = ms->o.buf; *op; op++) {          for (np = ms->o.pbuf, op = ms->o.buf; *op; op++) {

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.3.6.1