diff options
Diffstat (limited to 'itcl/itcl/generic/itcl_ensemble.c')
-rw-r--r-- | itcl/itcl/generic/itcl_ensemble.c | 124 |
1 files changed, 57 insertions, 67 deletions
diff --git a/itcl/itcl/generic/itcl_ensemble.c b/itcl/itcl/generic/itcl_ensemble.c index a60b487ec1c..37f55bf3116 100644 --- a/itcl/itcl/generic/itcl_ensemble.c +++ b/itcl/itcl/generic/itcl_ensemble.c @@ -105,7 +105,7 @@ static int CreateEnsemble _ANSI_ARGS_((Tcl_Interp *interp, Ensemble *parentEnsData, char *ensName)); static int AddEnsemblePart _ANSI_ARGS_((Tcl_Interp *interp, - Ensemble* ensData, char* partName, char* usageInfo, + Ensemble* ensData, CONST char* partName, CONST char* usageInfo, Tcl_ObjCmdProc *objProc, ClientData clientData, Tcl_CmdDeleteProc *deleteProc, EnsemblePart **rVal)); @@ -115,15 +115,15 @@ static int FindEnsemble _ANSI_ARGS_((Tcl_Interp *interp, char **nameArgv, int nameArgc, Ensemble** ensDataPtr)); static int CreateEnsemblePart _ANSI_ARGS_((Tcl_Interp *interp, - Ensemble *ensData, char* partName, EnsemblePart **ensPartPtr)); + Ensemble *ensData, CONST char* partName, EnsemblePart **ensPartPtr)); static void DeleteEnsemblePart _ANSI_ARGS_((EnsemblePart *ensPart)); static int FindEnsemblePart _ANSI_ARGS_((Tcl_Interp *interp, - Ensemble *ensData, char* partName, EnsemblePart **rensPart)); + Ensemble *ensData, CONST char* partName, EnsemblePart **rensPart)); static int FindEnsemblePartIndex _ANSI_ARGS_((Ensemble *ensData, - char *partName, int *posPtr)); + CONST char *partName, int *posPtr)); static void ComputeMinChars _ANSI_ARGS_((Ensemble *ensData, int pos)); @@ -209,7 +209,7 @@ Itcl_EnsembleInit(interp) int Itcl_CreateEnsemble(interp, ensName) Tcl_Interp *interp; /* interpreter to be updated */ - char* ensName; /* name of the new ensemble */ + CONST char* ensName; /* name of the new ensemble */ { char **nameArgv = NULL; int nameArgc; @@ -219,7 +219,8 @@ Itcl_CreateEnsemble(interp, ensName) /* * Split the ensemble name into its path components. */ - if (Tcl_SplitList(interp, ensName, &nameArgc, &nameArgv) != TCL_OK) { + if (Tcl_SplitList(interp, (CONST84 char *)ensName, &nameArgc, + &nameArgv) != TCL_OK) { goto ensCreateFail; } if (nameArgc < 1) { @@ -310,9 +311,9 @@ Itcl_AddEnsemblePart(interp, ensName, partName, usageInfo, objProc, clientData, deleteProc) Tcl_Interp *interp; /* interpreter to be updated */ - char* ensName; /* ensemble containing this part */ - char* partName; /* name of the new part */ - char* usageInfo; /* usage info for argument list */ + CONST char* ensName; /* ensemble containing this part */ + CONST char* partName; /* name of the new part */ + CONST char* usageInfo; /* usage info for argument list */ Tcl_ObjCmdProc *objProc; /* handling procedure for part */ ClientData clientData; /* client data associated with part */ Tcl_CmdDeleteProc *deleteProc; /* procedure used to destroy client data */ @@ -326,7 +327,8 @@ Itcl_AddEnsemblePart(interp, ensName, partName, usageInfo, /* * Parse the ensemble name and look for a containing ensemble. */ - if (Tcl_SplitList(interp, ensName, &nameArgc, &nameArgv) != TCL_OK) { + if (Tcl_SplitList(interp, (CONST84 char *)ensName, &nameArgc, + &nameArgv) != TCL_OK) { goto ensPartFail; } if (FindEnsemble(interp, nameArgv, nameArgc, &ensData) != TCL_OK) { @@ -389,8 +391,8 @@ ensPartFail: int Itcl_GetEnsemblePart(interp, ensName, partName, infoPtr) Tcl_Interp *interp; /* interpreter to be updated */ - char *ensName; /* ensemble containing the part */ - char *partName; /* name of the desired part */ + CONST char *ensName; /* ensemble containing the part */ + CONST char *partName; /* name of the desired part */ Tcl_CmdInfo *infoPtr; /* returns: info associated with part */ { char **nameArgv = NULL; @@ -407,7 +409,8 @@ Itcl_GetEnsemblePart(interp, ensName, partName, infoPtr) */ state = Itcl_SaveInterpState(interp, TCL_OK); - if (Tcl_SplitList(interp, ensName, &nameArgc, &nameArgv) != TCL_OK) { + if (Tcl_SplitList(interp, (CONST84 char *)ensName, &nameArgc, + &nameArgv) != TCL_OK) { goto ensGetFail; } if (FindEnsemble(interp, nameArgv, nameArgc, &ensData) != TCL_OK) { @@ -501,7 +504,7 @@ Itcl_IsEnsemble(infoPtr) int Itcl_GetEnsembleUsage(interp, ensName, objPtr) Tcl_Interp *interp; /* interpreter containing the ensemble */ - char *ensName; /* name of the ensemble */ + CONST char *ensName; /* name of the ensemble */ Tcl_Obj *objPtr; /* returns: summary of usage info */ { char **nameArgv = NULL; @@ -516,7 +519,8 @@ Itcl_GetEnsembleUsage(interp, ensName, objPtr) */ state = Itcl_SaveInterpState(interp, TCL_OK); - if (Tcl_SplitList(interp, ensName, &nameArgc, &nameArgv) != TCL_OK) { + if (Tcl_SplitList(interp, (CONST84 char *)ensName, &nameArgc, + &nameArgv) != TCL_OK) { goto ensUsageFail; } if (FindEnsemble(interp, nameArgv, nameArgc, &ensData) != TCL_OK) { @@ -798,29 +802,22 @@ CreateEnsemble(interp, parentEnsData, ensName) return TCL_ERROR; } - ensData->cmd = parentEnsData->cmd; - ensData->parent = ensPart; - - cmdPtr = (Command*)ckalloc(sizeof(Command)); - cmdPtr->hPtr = NULL; - cmdPtr->nsPtr = ((Command*)ensData->cmd)->nsPtr; - cmdPtr->refCount = 0; - cmdPtr->cmdEpoch = 0; - cmdPtr->compileProc = NULL; - cmdPtr->objProc = HandleEnsemble; - cmdPtr->objClientData = (ClientData)ensData; - cmdPtr->proc = NULL; - cmdPtr->clientData = NULL; - cmdPtr->deleteProc = DeleteEnsemble; - cmdPtr->deleteData = cmdPtr->objClientData; - #if (TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION < 4) - cmdPtr->deleted = 0; - #else - cmdPtr->flags = 0; - #endif - cmdPtr->importRefPtr = NULL; - - ensPart->cmdPtr = cmdPtr; + ensData->cmd = parentEnsData->cmd; + ensData->parent = ensPart; + + /* + * Initialize non-NULL data only. This allows us to handle the + * structure differences between versions better. + */ + cmdPtr = (Command *) ckalloc(sizeof(Command)); + memset((VOID *) cmdPtr, 0, sizeof(Command)); + cmdPtr->nsPtr = ((Command *) ensData->cmd)->nsPtr; + cmdPtr->objProc = HandleEnsemble; + cmdPtr->objClientData = (ClientData)ensData; + cmdPtr->deleteProc = DeleteEnsemble; + cmdPtr->deleteData = cmdPtr->objClientData; + + ensPart->cmdPtr = cmdPtr; return TCL_OK; } @@ -860,8 +857,8 @@ AddEnsemblePart(interp, ensData, partName, usageInfo, Tcl_Interp *interp; /* interpreter to be updated */ Ensemble* ensData; /* ensemble that will contain this part */ - char* partName; /* name of the new part */ - char* usageInfo; /* usage info for argument list */ + CONST char* partName; /* name of the new part */ + CONST char* usageInfo; /* usage info for argument list */ Tcl_ObjCmdProc *objProc; /* handling procedure for part */ ClientData clientData; /* client data associated with part */ Tcl_CmdDeleteProc *deleteProc; /* procedure used to destroy client data */ @@ -882,27 +879,20 @@ AddEnsemblePart(interp, ensData, partName, usageInfo, strcpy(ensPart->usage, usageInfo); } - cmdPtr = (Command*)ckalloc(sizeof(Command)); - cmdPtr->hPtr = NULL; - cmdPtr->nsPtr = ((Command*)ensData->cmd)->nsPtr; - cmdPtr->refCount = 0; - cmdPtr->cmdEpoch = 0; - cmdPtr->compileProc = NULL; - cmdPtr->objProc = objProc; - cmdPtr->objClientData = (ClientData)clientData; - cmdPtr->proc = NULL; - cmdPtr->clientData = NULL; - cmdPtr->deleteProc = deleteProc; - cmdPtr->deleteData = (ClientData)clientData; -#if (TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION < 4) - cmdPtr->deleted = 0; -#else - cmdPtr->flags = 0; -#endif - cmdPtr->importRefPtr = NULL; - - ensPart->cmdPtr = cmdPtr; - *rVal = ensPart; + /* + * Initialize non-NULL data only. This allows us to handle the + * structure differences between versions better. + */ + cmdPtr = (Command *) ckalloc(sizeof(Command)); + memset((VOID *) cmdPtr, 0, sizeof(Command)); + cmdPtr->nsPtr = ((Command *) ensData->cmd)->nsPtr; + cmdPtr->objProc = objProc; + cmdPtr->objClientData = (ClientData)clientData; + cmdPtr->deleteProc = deleteProc; + cmdPtr->deleteData = (ClientData)clientData; + + ensPart->cmdPtr = cmdPtr; + *rVal = ensPart; return TCL_OK; } @@ -1055,7 +1045,7 @@ static int CreateEnsemblePart(interp, ensData, partName, ensPartPtr) Tcl_Interp *interp; /* interpreter containing the ensemble */ Ensemble *ensData; /* ensemble being modified */ - char* partName; /* name of the new part */ + CONST char* partName; /* name of the new part */ EnsemblePart **ensPartPtr; /* returns: new ensemble part */ { int i, pos, size; @@ -1201,7 +1191,7 @@ static int FindEnsemblePart(interp, ensData, partName, rensPart) Tcl_Interp *interp; /* interpreter containing the ensemble */ Ensemble *ensData; /* ensemble being searched */ - char* partName; /* name of the desired part */ + CONST char* partName; /* name of the desired part */ EnsemblePart **rensPart; /* returns: pointer to the desired part */ { int pos = 0; @@ -1316,7 +1306,7 @@ FindEnsemblePart(interp, ensData, partName, rensPart) static int FindEnsemblePartIndex(ensData, partName, posPtr) Ensemble *ensData; /* ensemble being searched */ - char *partName; /* name of desired part */ + CONST char *partName; /* name of desired part */ int *posPtr; /* returns: index for part */ { int pos = 0; @@ -1640,7 +1630,7 @@ Itcl_EnsembleCmd(clientData, interp, objc, objv) } if (FindEnsemblePart(interp, ensData, ensName, &ensPart) != TCL_OK) { - panic("Itcl_EnsembleCmd: can't create ensemble"); + Tcl_Panic("Itcl_EnsembleCmd: can't create ensemble"); } } @@ -1707,11 +1697,11 @@ Itcl_EnsembleCmd(clientData, interp, objc, objv) * Otherwise, the offending command is reported twice. */ if (status == TCL_ERROR) { - char *errInfo = Tcl_GetVar2(ensInfo->parser, "::errorInfo", + CONST char *errInfo = Tcl_GetVar2(ensInfo->parser, "::errorInfo", (char*)NULL, TCL_GLOBAL_ONLY); if (errInfo) { - Tcl_AddObjErrorInfo(interp, errInfo, -1); + Tcl_AddObjErrorInfo(interp, (CONST84 char *)errInfo, -1); } if (objc == 3) { |