diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-10-22 23:48:10 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-10-22 23:48:10 (GMT) |
| commit | 9cfb05d5b2abc38b205ed1c41781ffde314f72b6 (patch) | |
| tree | a454e3f88ddef08dc92d5af9eea480b179015094 /generic/tclTest.c | |
| parent | 500e1529f18c04152dbf1a395c6c7a61f08f63b3 (diff) | |
| parent | c541afcd1abf1c09cd079d8b50a7abd33b8dc739 (diff) | |
| download | tcl-9cfb05d5b2abc38b205ed1c41781ffde314f72b6.zip tcl-9cfb05d5b2abc38b205ed1c41781ffde314f72b6.tar.gz tcl-9cfb05d5b2abc38b205ed1c41781ffde314f72b6.tar.bz2 | |
TIP #643: Provide a public API to retrieve nul terminator length for an encoding
Diffstat (limited to 'generic/tclTest.c')
| -rw-r--r-- | generic/tclTest.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/generic/tclTest.c b/generic/tclTest.c index ee6062b..c9bad56 100644 --- a/generic/tclTest.c +++ b/generic/tclTest.c @@ -1996,12 +1996,17 @@ TestencodingObjCmd( const char *string; TclEncoding *encodingPtr; static const char *const optionStrings[] = { - "create", "delete", NULL + "create", "delete", "nullength", NULL }; enum options { - ENC_CREATE, ENC_DELETE + ENC_CREATE, ENC_DELETE, ENC_NULLENGTH }; + if (objc < 2) { + Tcl_WrongNumArgs(interp, 1, objv, "command ?args?"); + return TCL_ERROR; + } + if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, &index) != TCL_OK) { return TCL_ERROR; @@ -2012,6 +2017,7 @@ TestencodingObjCmd( Tcl_EncodingType type; if (objc != 5) { + Tcl_WrongNumArgs(interp, 2, objv, "name toutfcmd fromutfcmd"); return TCL_ERROR; } encodingPtr = (TclEncoding*)ckalloc(sizeof(TclEncoding)); @@ -2048,6 +2054,20 @@ TestencodingObjCmd( Tcl_FreeEncoding(encoding); /* Free to match CREATE */ TclFreeInternalRep(objv[2]); /* Free the cached ref */ break; + + case ENC_NULLENGTH: + if (objc > 3) { + Tcl_WrongNumArgs(interp, 2, objv, "?encoding?"); + return TCL_ERROR; + } + encoding = + Tcl_GetEncoding(interp, objc == 2 ? NULL : Tcl_GetString(objv[2])); + if (encoding == NULL) { + return TCL_ERROR; + } + Tcl_SetObjResult(interp, + Tcl_NewIntObj(Tcl_GetEncodingNulLength(encoding))); + Tcl_FreeEncoding(encoding); } return TCL_OK; } |
