summaryrefslogtreecommitdiffstats
path: root/generic/tclTest.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-10-22 23:48:10 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-10-22 23:48:10 (GMT)
commit9cfb05d5b2abc38b205ed1c41781ffde314f72b6 (patch)
treea454e3f88ddef08dc92d5af9eea480b179015094 /generic/tclTest.c
parent500e1529f18c04152dbf1a395c6c7a61f08f63b3 (diff)
parentc541afcd1abf1c09cd079d8b50a7abd33b8dc739 (diff)
downloadtcl-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.c24
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;
}