No one?

On 07/02/17 19:58, Martijn van Duren wrote:
> Any takers?
> 
> On 06/22/17 21:32, Martijn van Duren wrote:
>> Hello tech@,
>>
>> Attached a patch to remove the binc function from vi and replace it with
>> recallocarray. The functions effectively do the same thing since
>> BINC_{GOTO,RET} already do the nlen > llen comparison. I've run
>> this without any issues, but since recallocarray does extra checks and
>> binc ALWAYS allocates A LOT more than requested there might be some
>> bugs lurking.
>>
>> I haven't changed the name since the size component is always one and
>> hence they don't expose a similar interface.
>>
>> OK?
>>
>> martijn@
>>
>> Index: common/mem.h
>> ===================================================================
>> RCS file: /cvs/src/usr.bin/vi/common/mem.h,v
>> retrieving revision 1.9
>> diff -u -p -r1.9 mem.h
>> --- common/mem.h     7 May 2016 14:03:01 -0000       1.9
>> +++ common/mem.h     22 Jun 2017 19:02:28 -0000
>> @@ -14,30 +14,30 @@
>>  /* Increase the size of a malloc'd buffer.  Two versions, one that
>>   * returns, one that jumps to an error label.
>>   */
>> -#define     BINC_GOTO(sp, lp, llen, nlen) {                                 
>> \
>> -    void *L__bincp;                                                 \
>> +#define     BINC_GOTO(sp, p, llen, nlen) {                                  
>> \
>> +    void *tmpp;                                                     \
>>      if ((nlen) > (llen)) {                                          \
>> -            if ((L__bincp = binc((sp), (lp), &(llen), (nlen)))      \
>> -                == NULL)                                            \
>> +            if (((tmpp) = recallocarray((p), (llen), (nlen), 1))    \
>> +                == NULL) {                                          \
>> +                    msgq((sp), M_SYSERR, NULL);                     \
>> +                    free(p);                                        \
>>                      goto alloc_err;                                 \
>> -            /*                                                      \
>> -             * !!!                                                  \
>> -             * Possible pointer conversion.                         \
>> -             */                                                     \
>> -            (lp) = L__bincp;                                        \
>> +            }                                                       \
>> +            llen = nlen;                                            \
>> +            (p) = tmpp;                                             \
>>      }                                                               \
>>  }
>> -#define     BINC_RET(sp, lp, llen, nlen) {                                  
>> \
>> -    void *L__bincp;                                                 \
>> +#define     BINC_RET(sp, p, llen, nlen) {                                   
>> \
>> +    void *tmpp;                                                     \
>>      if ((nlen) > (llen)) {                                          \
>> -            if ((L__bincp = binc((sp), (lp), &(llen), (nlen)))      \
>> -                == NULL)                                            \
>> +            if (((tmpp) = recallocarray((p), (llen), (nlen), 1))    \
>> +                == NULL) {                                          \
>> +                    msgq((sp), M_SYSERR, NULL);                     \
>> +                    free(p);                                        \
>>                      return (1);                                     \
>> -            /*                                                      \
>> -             * !!!                                                  \
>> -             * Possible pointer conversion.                         \
>> -             */                                                     \
>> -            (lp) = L__bincp;                                        \
>> +            }                                                       \
>> +            llen = nlen;                                            \
>> +            (p) = tmpp;                                             \
>>      }                                                               \
>>  }
>>  
>> Index: common/util.c
>> ===================================================================
>> RCS file: /cvs/src/usr.bin/vi/common/util.c,v
>> retrieving revision 1.15
>> diff -u -p -r1.15 util.c
>> --- common/util.c    27 May 2016 09:18:11 -0000      1.15
>> +++ common/util.c    22 Jun 2017 19:02:28 -0000
>> @@ -24,43 +24,6 @@
>>  
>>  #include "common.h"
>>  
>> -#define MAXIMUM(a, b)       (((a) > (b)) ? (a) : (b))
>> -
>> -/*
>> - * binc --
>> - *  Increase the size of a buffer.
>> - *
>> - * PUBLIC: void *binc(SCR *, void *, size_t *, size_t);
>> - */
>> -void *
>> -binc(SCR *sp, void *bp, size_t *bsizep, size_t min)
>> -{
>> -    size_t csize;
>> -
>> -    /* If already larger than the minimum, just return. */
>> -    if (min && *bsizep >= min)
>> -            return (bp);
>> -
>> -    csize = *bsizep + MAXIMUM(min, 256);
>> -    REALLOC(sp, bp, csize);
>> -
>> -    if (bp == NULL) {
>> -            /*
>> -             * Theoretically, realloc is supposed to leave any already
>> -             * held memory alone if it can't get more.  Don't trust it.
>> -             */
>> -            *bsizep = 0;
>> -            return (NULL);
>> -    }
>> -    /*
>> -     * Memory is guaranteed to be zero-filled, various parts of
>> -     * nvi depend on this.
>> -     */
>> -    memset((char *)bp + *bsizep, 0, csize - *bsizep);
>> -    *bsizep = csize;
>> -    return (bp);
>> -}
>> -
>>  /*
>>   * nonblank --
>>   *  Set the column number of the first non-blank character
>> Index: include/com_extern.h
>> ===================================================================
>> RCS file: /cvs/src/usr.bin/vi/include/com_extern.h,v
>> retrieving revision 1.14
>> diff -u -p -r1.14 com_extern.h
>> --- include/com_extern.h     27 May 2016 09:18:12 -0000      1.14
>> +++ include/com_extern.h     22 Jun 2017 19:02:28 -0000
>> @@ -103,7 +103,6 @@ void seq_close(GS *);
>>  int seq_dump(SCR *, seq_t, int);
>>  int seq_save(SCR *, FILE *, char *, seq_t);
>>  int e_memcmp(CHAR_T *, EVENT *, size_t);
>> -void *binc(SCR *, void *, size_t *, size_t);
>>  int nonblank(SCR *, recno_t, size_t *);
>>  CHAR_T *v_strdup(SCR *, const CHAR_T *, size_t);
>>  enum nresult nget_uslong(u_long *, const char *, char **, int);
>>
> 

Reply via email to