diff --git a/site_ansto/motor_dmc2280.c b/site_ansto/motor_dmc2280.c index 383cfd7f..6bfca9cf 100644 --- a/site_ansto/motor_dmc2280.c +++ b/site_ansto/motor_dmc2280.c @@ -2953,14 +2953,6 @@ static void DMC2280Error(void *pData, int *iCode, char *error, int errLen){ self = (pDMC2280Driv)pData; assert(self != NULL); - /* Allocate errLen bytes for error messages */ - if (self->errorMsg == NULL) { - self->errorMsg = (char *) malloc(errLen); - if (self->errorMsg == NULL) { - *iCode = 0; - return; - } - } *iCode = self->errorCode; switch(*iCode){ case MOTCMDTMO: @@ -3037,7 +3029,16 @@ static void DMC2280Error(void *pData, int *iCode, char *error, int errLen){ snprintf(error, (size_t)errLen, "Unknown Motor Error: %d", self->errorCode); break; } + /* Allocate errLen bytes for error messages */ + if (self->errorMsg) + free(self->errorMsg); + self->errorMsg = (char *) malloc(errLen + 1); + if (self->errorMsg == NULL) { + *iCode = 0; + return; + } strncpy(self->errorMsg, error, (size_t)errLen); + self->errMsg[errLen] = '\0'; } /** \brief Attempts to recover from an error. Implements the TryAndFixIt