Changeset 684 for trunk


Ignore:
Timestamp:
Apr 27, 2007 4:58:10 PM (17 years ago)
Author:
mmc
Message:

Fixed the Rappture::encoding Tcl bindings to handle binary data
properly. Fixed the tests to reflect the changes.

Added an example of using a <string> object for binary data.

Location:
trunk
Files:
3 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/tcl/src/RpEncodeTclInterface.cc

    r671 r684  
    251251    err &= Rappture::encoding::encode(buf,flags);
    252252
    253     result = Tcl_GetObjResult(interp);
    254 
    255 
    256253    if (!err) {
    257         Tcl_DString dstPtr;
    258         Tcl_DStringInit(&dstPtr);
    259         Tcl_ExternalToUtfDString(NULL,buf.bytes(),buf.size(),&dstPtr);
    260         Tcl_AppendToObj(result,Tcl_DStringValue(&dstPtr),Tcl_DStringLength(&dstPtr));
    261         Tcl_DStringFree(&dstPtr);
     254        result = Tcl_NewByteArrayObj(
     255            (const unsigned char*)buf.bytes(), buf.size());
     256        Tcl_SetObjResult(interp, result);
    262257    }
    263258    else {
     259        result = Tcl_GetObjResult(interp);
    264260        Tcl_AppendStringsToObj( result, err.remark().c_str(),
    265261                                "\n", err.context().c_str(), NULL   );
    266262    }
    267 
    268 
    269263    return TCL_OK;
    270264}
     
    375369    err &= Rappture::encoding::decode(buf,flags);
    376370
    377     result = Tcl_GetObjResult(interp);
    378 
    379371    if (!err) {
    380         Tcl_DString dstPtr;
    381         Tcl_DStringInit(&dstPtr);
    382         Tcl_ExternalToUtfDString(NULL,buf.bytes(),buf.size(),&dstPtr);
    383         Tcl_AppendToObj(result,Tcl_DStringValue(&dstPtr),Tcl_DStringLength(&dstPtr));
    384         Tcl_DStringFree(&dstPtr);
     372        result = Tcl_NewByteArrayObj(
     373            (const unsigned char*)buf.bytes(), buf.size());
     374        Tcl_SetObjResult(interp, result);
    385375    }
    386376    else {
     377        result = Tcl_GetObjResult(interp);
    387378        Tcl_AppendStringsToObj( result, err.remark().c_str(),
    388379                                "\n", err.context().c_str(), NULL   );
    389380    }
    390 
    391381    return TCL_OK;
    392382}
  • trunk/src/tcl/tests/encode.test

    r655 r684  
    9191test encode-2.2.3 {Rappture::encoding::encode, -as z w/ string} {
    9292    list [catch {Rappture::encoding::encode -as z "hi"} msg] $msg
    93 } {0 {@@RP-ENC:z
    94 \xCB\xC8\x3F\x2A\x3F\xD8}}
     93} [list 0 "@@RP-ENC:z\n\037\213\010\000\000\000\000\000\000\003\313\310\004\000\254\052\223\330\002\000\000\000"]
    9594
    9695test encode-2.2.4 {Rappture::encoding::encode, -as b64 w/ string} {
     
    135134    set h "@@RP-ENC:zb64\nH4sIAAAAAAAAA8vIBACsKpPYAgAAAA=="
    136135    list [catch {Rappture::encoding::decode -as z $h} msg] $msg
    137 } {0 hi}
     136} {0 {@@RP-ENC:zb64
     137H4sIAAAAAAAAA8vIBACsKpPYAgAAAA==}}
    138138
    139139test decode-3.2.3 {Rappture::encoding::decode, -as flag, b64 w/ string} {
     
    142142} {0 hi}
    143143
     144test decode-3.2.4 {encode/decode reverse each other} {
     145    set msg "This is a test"
     146    Rappture::encoding::decode [Rappture::encoding::encode $msg]
     147} {This is a test}
     148
    144149
    145150::tcltest::cleanupTests
Note: See TracChangeset for help on using the changeset viewer.