summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorMiguel Sofer <miguel.sofer@gmail.com>2004-05-02 20:49:55 (GMT)
committerMiguel Sofer <miguel.sofer@gmail.com>2004-05-02 20:49:55 (GMT)
commit0a1f66b1c502875f43acf2671f8d7770a830e4cc (patch)
tree4ef2a6bb90b92ecca5b6376fbdfd5e130c5d76ca /generic
parent996718aef341744dcfd658a3b81262bb2aa95bac (diff)
downloadtcl-0a1f66b1c502875f43acf2671f8d7770a830e4cc.zip
tcl-0a1f66b1c502875f43acf2671f8d7770a830e4cc.tar.gz
tcl-0a1f66b1c502875f43acf2671f8d7770a830e4cc.tar.bz2
* generic/tclProc.c (TclObjInvokeProc):
* tests/proc.test (proc-3.6): fix for bad quoting of multi-word proc names in error messages [Bug 942757]
Diffstat (limited to 'generic')
-rw-r--r--generic/tclProc.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/generic/tclProc.c b/generic/tclProc.c
index e1a4116..d99266e 100644
--- a/generic/tclProc.c
+++ b/generic/tclProc.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclProc.c,v 1.50 2004/03/09 12:59:05 vincentdarley Exp $
+ * RCS: @(#) $Id: tclProc.c,v 1.51 2004/05/02 20:49:56 msofer Exp $
*/
#include "tclInt.h"
@@ -909,7 +909,6 @@ TclObjInterpProc(clientData, interp, objc, objv)
register CompiledLocal *localPtr;
char *procName;
int nameLen, localCt, numArgs, argCt, i, result;
- Tcl_Obj *objResult = Tcl_GetObjResult(interp);
/*
* This procedure generates an array "compiledLocals" that holds the
@@ -1036,13 +1035,32 @@ TclObjInterpProc(clientData, interp, objc, objv)
localPtr = localPtr->nextPtr;
}
if (argCt > 0) {
+ Tcl_Obj *objResult;
+ int len, flags;
+
incorrectArgs:
/*
* Build up equivalent to Tcl_WrongNumArgs message for proc
*/
+
Tcl_ResetResult(interp);
- Tcl_AppendStringsToObj(objResult,
- "wrong # args: should be \"", procName, (char *) NULL);
+ objResult = Tcl_GetObjResult(interp);
+ Tcl_AppendToObj(objResult, "wrong # args: should be \"", -1);
+
+ /*
+ * Quote the proc name if it contains spaces (Bug 942757).
+ */
+
+ len = Tcl_ScanCountedElement(procName, nameLen, &flags);
+ if (len != nameLen) {
+ char *procName1 = ckalloc((unsigned) len);
+ len = Tcl_ConvertCountedElement(procName, nameLen, procName1, flags);
+ Tcl_AppendToObj(objResult, procName1, len);
+ ckfree(procName1);
+ } else {
+ Tcl_AppendToObj(objResult, procName, len);
+ }
+
localPtr = procPtr->firstLocalPtr;
for (i = 1; i <= numArgs; i++) {
if (localPtr->defValuePtr != NULL) {