diff options
Diffstat (limited to 'generic/tclObj.c')
-rw-r--r-- | generic/tclObj.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/generic/tclObj.c b/generic/tclObj.c index 416e5ed..0c95e7c 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.c @@ -2004,9 +2004,10 @@ static int ParseBoolean( register Tcl_Obj *objPtr) /* The object to parse/convert. */ { - int i, length, newBool; + int newBool; char lowerCase[6]; - const char *str = TclGetStringFromObj(objPtr, &length); + const char *str = TclGetString(objPtr); + size_t i, length = objPtr->length; if ((length == 0) || (length > 5)) { /* @@ -2029,6 +2030,18 @@ ParseBoolean( goto numericBoolean; } return TCL_ERROR; + case '-': + if (length == 1) { + newBool = 0; + goto goodBoolean; + } + return TCL_ERROR; + case '+': + if (length == 1) { + newBool = 1; + goto goodBoolean; + } + return TCL_ERROR; } /* @@ -2082,15 +2095,12 @@ ParseBoolean( } return TCL_ERROR; case 'o': - if (length < 2) { - return TCL_ERROR; - } - if (strncmp(lowerCase, "on", (size_t) length) == 0) { - newBool = 1; - goto goodBoolean; - } else if (strncmp(lowerCase, "off", (size_t) length) == 0) { + if (strncmp(lowerCase, "off", (size_t) length) == 0) { newBool = 0; goto goodBoolean; + } else if (strncmp(lowerCase, "on", (size_t) length) == 0) { + newBool = 1; + goto goodBoolean; } return TCL_ERROR; default: |