From 4cd864236218bc974551586c46bea5b3a766859e Mon Sep 17 00:00:00 2001 From: Stefan Frederik Date: Mon, 6 Dec 2021 02:00:58 +0100 Subject: [PATCH] handle error conditions in tclget*var() functions --- src/scheduler.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/scheduler.c b/src/scheduler.c index 92adc49c..fb907027 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -2734,22 +2734,46 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg double tclgetdoublevar(const char *s) { - return atof(Tcl_GetVar(interp,s, TCL_GLOBAL_ONLY)); + const char *p; + p = Tcl_GetVar(interp, s, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG); + if(!p) { + dbg(0, "%s\n", tclresult()); + return 0.0; + } + return atof(p); } int tclgetintvar(const char *s) { - return atoi(Tcl_GetVar(interp,s, TCL_GLOBAL_ONLY)); + const char *p; + p = Tcl_GetVar(interp, s, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG); + if(!p) { + dbg(0, "%s\n", tclresult()); + return 0; + } + return atoi(p); } int tclgetboolvar(const char *s) { - return Tcl_GetVar(interp,s, TCL_GLOBAL_ONLY)[0] == '1' ? 1 : 0; + const char *p; + p = Tcl_GetVar(interp, s, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG); + if(!p) { + dbg(0, "%s\n", tclresult()); + return 0; + } + return p[0] == '1' ? 1 : 0; } const char *tclgetvar(const char *s) { - return Tcl_GetVar(interp,s, TCL_GLOBAL_ONLY); + const char *p; + p = Tcl_GetVar(interp, s, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG); + if(!p) { + dbg(0, "%s\n", tclresult()); + return ""; + } + return p; } const char *tcleval(const char str[])