From f16799219c0ecf8336e67b47a9c3ba4f58a339b4 Mon Sep 17 00:00:00 2001 From: MarkRivers Date: Fri, 20 Dec 2013 05:06:47 +0000 Subject: [PATCH] Bug fix: it was passing a const char* pointer to epicsStrtok_r, which is incorrect and crashes on some systems --- motorApp/MclennanSrc/drvPM304.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/motorApp/MclennanSrc/drvPM304.cc b/motorApp/MclennanSrc/drvPM304.cc index e7030827..273992cd 100644 --- a/motorApp/MclennanSrc/drvPM304.cc +++ b/motorApp/MclennanSrc/drvPM304.cc @@ -356,6 +356,7 @@ STATIC RTN_STATUS send_mess(int card, const char *com, char *name) { char *p, *tok_save; char response[BUFF_SIZE]; + char temp[BUFF_SIZE]; struct PM304controller *cntrl; size_t nwrite, nread; int eomReason; @@ -372,7 +373,8 @@ STATIC RTN_STATUS send_mess(int card, const char *com, char *name) /* Device support can send us multiple commands separated with ';' * characters. The PM304 cannot handle more than 1 command on a line * so send them separately */ - for (p = epicsStrtok_r((char *) com, ";", &tok_save); + strcpy(temp, com); + for (p = epicsStrtok_r(temp, ";", &tok_save); ((p != NULL) && (strlen(p) != 0)); p = epicsStrtok_r(NULL, ";", &tok_save)) { Debug(2, "send_mess: sending message to card %d, message=%s\n", card, p); @@ -487,7 +489,8 @@ STATIC int send_recv_mess(int card, const char *out, char *response) /* Device support can send us multiple commands separated with ';' * characters. The PM304 cannot handle more than 1 command on a line * so send them separately */ - for (p = epicsStrtok_r((char *) out, ";", &tok_save); + strcpy(temp, out); + for (p = epicsStrtok_r(temp, ";", &tok_save); ((p != NULL) && (strlen(p) != 0)); p = epicsStrtok_r(NULL, ";", &tok_save)) { Debug(2, "send_recv_mess: sending message to card %d, message=%s\n", card, p);