Ignore:
Timestamp:
Oct 19, 2021, 9:55:27 PM (3 years ago)
Author:
Michael Brooks <mlbrooks@…>
Branches:
ADT, ast-experimental, enum, master, pthread-emulation, qualifiedEnum
Children:
2b30370
Parents:
fe18b46
Message:

String hybrid testing and fixing the overwrite cases

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/containers/string_res.cfa

    rfe18b46 r0ca15b7  
    405405
    406406    verify( shareEditSetEndPeer->Handle.s >= shareEditSetStartPeer->Handle.s );
    407     size_t editSetLength = shareEditSetEndPeer->Handle.s + shareEditSetEndPeer->Handle.lnth - shareEditSetStartPeer->Handle.s;
    408     verify( editSetLength >= this.Handle.lnth );
     407    size_t origEditSetLength = shareEditSetEndPeer->Handle.s + shareEditSetEndPeer->Handle.lnth - shareEditSetStartPeer->Handle.s;
     408    verify( origEditSetLength >= this.Handle.lnth );
    409409
    410410    if ( this.shareEditSet_owns_ulink ) {                 // assigning to private context
     
    418418        if ( char * oldBytes = VbyteTryAdjustLast( *this.Handle.ulink, delta ) ) {
    419419            // growing: copy from old to new
    420             char * dest = VbyteAlloc( *this.Handle.ulink, editSetLength );
     420            char * dest = VbyteAlloc( *this.Handle.ulink, origEditSetLength + delta );
    421421            char *destCursor = dest;  memcpy(destCursor, prefixStartOrig, prefixLen);
    422422            destCursor += prefixLen;  memcpy(destCursor, buffer         , bsize    );
     
    424424            assignEditSet(this, shareEditSetStartPeer, shareEditSetEndPeer,
    425425                dest,
    426                 editSetLength,
     426                origEditSetLength + delta,
    427427                0p, bsize);
    428428            free( oldBytes );
     
    434434            assignEditSet(this, shareEditSetStartPeer, shareEditSetEndPeer,
    435435                shareEditSetStartPeer->Handle.s,
    436                 editSetLength,
     436                origEditSetLength + delta,
    437437                0p, bsize);
    438438        }
    439439
    440440    } else if (                                           // assigning to shared context
    441         this.Handle.lnth == editSetLength &&              // overwriting entire run of SES
     441        this.Handle.lnth == origEditSetLength &&          // overwriting entire run of SES
    442442        & valSrc &&                                       // sourcing from a managed string
    443443        valSrc.Handle.ulink == this.Handle.ulink  ) {     // sourcing from same heap
Note: See TracChangeset for help on using the changeset viewer.