diff --git a/site_ansto/ansto_tclmotdriv.c b/site_ansto/ansto_tclmotdriv.c index 8a09e198..3f6b7859 100644 --- a/site_ansto/ansto_tclmotdriv.c +++ b/site_ansto/ansto_tclmotdriv.c @@ -54,9 +54,12 @@ static int buildStandardCommandPart(TCLDriv *pDriv, char *command, if(status != 1) { return 0; } - snprintf(tclCommand,commandLen,"%s %s ", tclFunc, pDriv->motName); + //snprintf(tclCommand,commandLen,"%s %s ", tclFunc, pDriv->motName); + snprintf(tclCommand,commandLen,"%s", tclFunc); return 1; } + + /*----------------------------------------------------------------------------*/ static int GetTclPos(void *self, float *fPos){ TCLDriv *pDriv; @@ -280,9 +283,6 @@ static int TclSetPar(void *self, SConnection *pCon, char *name, float newValue){ int status; const char *result = NULL; - char tclCommand[1024]; - char tclCommandPara[1024]; - TCLDriv *pDriv = (TCLDriv *) self; assert(self); @@ -301,27 +301,36 @@ static int TclSetPar(void *self, SConnection *pCon, char *name, float newValue){ strncpy(pDriv->long_name, &newValue, 255); return 1; } else { + char *tclCommand = (char *)calloc(1024, sizeof(char)); if (StringDictExists(pDriv->mappings, name)) { if (!buildStandardCommandPart(pDriv, name, tclCommand, 1023)){ pDriv->errorCode = FUNCNOTFOUND; - return HWFault; + free(tclCommand); + return HWFault; } - sscanf(tclCommandPara, "%s %f", tclCommand, &newValue); + char *tclCommandPara = (char *)calloc(1024, sizeof(char)); + sprintf(tclCommandPara, "%s %f", tclCommand, newValue); status = Tcl_Eval(pServ->pSics->pTcl,tclCommandPara); result = Tcl_GetStringResult(pServ->pSics->pTcl); if (result == NULL){ pDriv->errorCode = NOTCLRESULT; - return HWFault; + free(tclCommand); + free(tclCommandPara);; + return HWFault; } if (status != TCL_OK){ pDriv->errorCode = TCLERROR; strncpy(pDriv->tclError,result,1023); - return HWFault; + free(tclCommand); + free(tclCommandPara);; + return HWFault; } + free(tclCommand); + free(tclCommandPara);; return OKOK; } else { pDriv->errorCode = PARANOTFOUND; - return HWFault; + return 0; } return OKOK; @@ -332,9 +341,7 @@ static int TclListPar(void *self, char *motorname, SConnection *pCon) { SDE sVal; int iRet; - char pBueffel[512]; - char *funcText[] = {"getpos", "run", "status", @@ -342,7 +349,6 @@ static int TclListPar(void *self, char *motorname, SConnection *pCon) { "geterror", "fixit", NULL}; - TCLDriv *pDriv = (TCLDriv *)self; iRet = LLDnodePtr2First(pDriv->mappings->iList); @@ -368,7 +374,6 @@ static int TclListPar(void *self, char *motorname, SConnection *pCon) { int TclGetPar(void *self, char *name, float *value) { int status; - char tclCommand[1024]; const char *result = NULL; TCLDriv *pDriv = (TCLDriv *) self; @@ -385,27 +390,33 @@ int TclGetPar(void *self, char *name, float *value) { *value = (float)pDriv->fLower; return OKOK; } else { + char *tclCommand = (char *)calloc(1024, sizeof(char)); if (StringDictExists(pDriv->mappings, name)) { if(!buildStandardCommandPart(pDriv, name, tclCommand, 1023)){ pDriv->errorCode = FUNCNOTFOUND; - return HWFault; + free(tclCommand); + return HWFault; } status = Tcl_Eval(pServ->pSics->pTcl,tclCommand); result = Tcl_GetStringResult(pServ->pSics->pTcl); if(result == NULL){ pDriv->errorCode = NOTCLRESULT; - return HWFault; + free(tclCommand); + return HWFault; } if(status != TCL_OK){ pDriv->errorCode = TCLERROR; strncpy(pDriv->tclError,result,1023); - return HWFault; + free(tclCommand); + return HWFault; } sscanf(result,"%f", value); + free(tclCommand); return OKOK; } else { - pDriv->errorCode = PARANOTFOUND; - return HWFault; + pDriv->errorCode = PARANOTFOUND; + free(tclCommand); + return 0; } return OKOK;