Changeset 167

Show
Ignore:
Timestamp:
06/04/06 04:58:45 (2 years ago)
Author:
krobillard
Message:

Fixed a couple cases where reading beyond end of buffer.
Optimized ur_arrayErase() when elemSize == 16 and WORDSIZE == 64.

Location:
trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/orca/array.c

    r42 r167  
    127127    else if( elemSize == 16 ) 
    128128    { 
     129#if __WORDSIZE == 64 
     130        uint64_t* buf; 
     131        uint64_t* src; 
     132        uint64_t* end; 
     133 
     134        buf = ((uint64_t*) arr->buf) + (index * 2); 
     135        src = buf + (count * 2); 
     136        end = ((uint64_t*) arr->buf) + (arr->used * 2); 
     137 
     138        while( src != end ) 
     139        { 
     140            *buf++ = *src++; 
     141            *buf++ = *src++; 
     142        } 
     143#else 
    129144        uint32_t* buf; 
    130145        uint32_t* src; 
     
    142157            *buf++ = *src++; 
    143158        } 
     159#endif 
    144160    } 
    145161    else 
     
    147163        char* buf;  
    148164        buf = arr->charArray + (elemSize * index); 
    149         memMove( buf, buf + elemSize, elemSize * (arr->used - index) ); 
     165        memMove( buf, buf + (elemSize * count), 
     166                 elemSize * (arr->used - index - count) ); 
    150167    } 
    151168 
  • trunk/thune/array.c

    r1 r167  
    131131    else if( elemSize == 16 ) 
    132132    { 
     133#if __WORDSIZE == 64 
     134        uint64_t* buf; 
     135        uint64_t* src; 
     136        uint64_t* end; 
     137 
     138        buf = ((uint64_t*) arr->ptr.i) + (index * 2); 
     139        src = buf + (count * 2); 
     140        end = ((uint64_t*) arr->ptr.i) + (arr->used * 2); 
     141 
     142        while( src != end ) 
     143        { 
     144            *buf++ = *src++; 
     145            *buf++ = *src++; 
     146        } 
     147#else 
    133148        uint32_t* buf; 
    134149        uint32_t* src; 
     
    146161            *buf++ = *src++; 
    147162        } 
     163#endif 
    148164    } 
    149165    else 
     
    151167        char* buf;  
    152168        buf = arr->ptr.c + (elemSize * index); 
    153         memMove( buf, buf + elemSize, elemSize * (arr->used - index) ); 
     169        memMove( buf, buf + (elemSize * count), 
     170                 elemSize * (arr->used - index - count) ); 
    154171    } 
    155172 
  • trunk/thune/make.c

    r166 r167  
    142142    if( ur_stringSlice( cell, &cpA, &cpB ) ) 
    143143    { 
    144         int count; 
    145144        int size; 
    146145        UBinary* bin; 
    147146 
    148         count = cpB - cpA; 
    149         size =  count * ur_encCharSize( cell ); 
     147        size = cpB - cpA; 
    150148        binN = ur_makeBinary( size ); 
    151149        if( size ) 
     
    153151            bin = ur_binPtr( binN ); 
    154152            memCpy( bin->ptr.b, cpA, size ); 
    155             bin->used = count; 
     153            bin->used = size; 
    156154        } 
    157155    }