diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-01-25 16:12:11 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-01-25 16:12:11 (GMT) |
commit | 186f5c8cca88c9e09ac1273f16161b40da91d5dc (patch) | |
tree | 37426ce59d4e31e5b918f2ceff67655158699418 /generic/tkConfig.c | |
parent | 2863744760a2d204f11ad4d334f7ba3eb0af8d15 (diff) | |
download | tk-186f5c8cca88c9e09ac1273f16161b40da91d5dc.zip tk-186f5c8cca88c9e09ac1273f16161b40da91d5dc.tar.gz tk-186f5c8cca88c9e09ac1273f16161b40da91d5dc.tar.bz2 |
Implement TK_OPTION_NULL_OK for TK_OPTION_INT (working the same as for TK_OPTION_DOUBLE). Better error-messages.
Diffstat (limited to 'generic/tkConfig.c')
-rw-r--r-- | generic/tkConfig.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/generic/tkConfig.c b/generic/tkConfig.c index 533ff99..34dc12e 100644 --- a/generic/tkConfig.c +++ b/generic/tkConfig.c @@ -617,7 +617,11 @@ DoObjConfig( if (nullOK && ObjectIsEmpty(valuePtr)) { valuePtr = NULL; newBool = -1; - } else if (Tcl_GetBooleanFromObj(interp, valuePtr, &newBool) != TCL_OK) { + } else if (Tcl_GetBooleanFromObj(nullOK ? NULL : interp, valuePtr, &newBool) != TCL_OK) { + if (nullOK && interp) { + Tcl_AppendResult(interp, "expected boolean value or \"\" but got \"", + Tcl_GetString(valuePtr), "\"", NULL); + } return TCL_ERROR; } if (internalPtr != NULL) { @@ -629,7 +633,14 @@ DoObjConfig( case TK_OPTION_INT: { int newInt; - if (Tcl_GetIntFromObj(interp, valuePtr, &newInt) != TCL_OK) { + if (nullOK && ObjectIsEmpty(valuePtr)) { + valuePtr = NULL; + newInt = 0; + } else if (Tcl_GetIntFromObj(nullOK ? NULL : interp, valuePtr, &newInt) != TCL_OK) { + if (nullOK && interp) { + Tcl_AppendResult(interp, "expected integer or \"\" but got \"", + Tcl_GetString(valuePtr), "\"", NULL); + } return TCL_ERROR; } if (internalPtr != NULL) { @@ -666,7 +677,11 @@ DoObjConfig( valuePtr = NULL; newDbl = 0; } else { - if (Tcl_GetDoubleFromObj(interp, valuePtr, &newDbl) != TCL_OK) { + if (Tcl_GetDoubleFromObj(nullOK ? NULL : interp, valuePtr, &newDbl) != TCL_OK) { + if (nullOK && interp) { + Tcl_AppendResult(interp, "expected floating-point number or \"\" but got \"", + Tcl_GetString(valuePtr), "\"", NULL); + } return TCL_ERROR; } } |