diff --git a/macro.c b/macro.c index 37a72e75..ff47e975 100644 --- a/macro.c +++ b/macro.c @@ -613,9 +613,9 @@ int InternalFileEval(SConnection * pCon, SicsInterp * pInter, void *pData, int ClientPut(SConnection * pCon, SicsInterp * pInter, void *pData, int argc, char *argv[]) { - OutCode eOut = eLog; - int i = 0, iCode, iLen; - char *ppCode; + int eOut; + int i = 0, iCode; + size_t iLen; char *pMessage = NULL; assert(pCon); @@ -630,91 +630,41 @@ int ClientPut(SConnection * pCon, SicsInterp * pInter, void *pData, if (argc > 2) { /* the last one must be the code */ iCode = argc - 1; - ppCode = strdup(argv[iCode]); - strtolower(ppCode); - while (pCode[i] != NULL) { - if (strcmp(pCode[i], ppCode) == 0) { - break; - } - i++; - } - if (ppCode) { - free(ppCode); + eOut = OutCodeFromText(argv[iCode], NULL); + if (eOut < 0) { /* invalid code: assume it is content */ + iCode = argc; } } else { - i = eLog; - iCode = argc; - } - - switch (i) { - case 0: - eOut = eInternal; - break; - case 1: - eOut = eCommand; - break; - case 2: - eOut = eHWError; - break; - case 3: - eOut = eInError; - break; - case 4: - eOut = eStatus; - break; - case 5: - eOut = eValue; - break; - case 6: - eOut = eWarning; - break; - case 7: - eOut = eFinish; - break; - case 8: - eOut = eEvent; - break; - case 9: - eOut = eWarning; - break; - case 10: - eOut = eError; - break; - case 11: - eOut = eLog; - break; - case 12: - eOut = eLogError; - break; - default: eOut = eLog; iCode = argc; - break; } /* recombine the message */ /* find length */ - iLen = 0; + iLen = 1; for (i = 1; i < iCode; i++) { - iLen += strlen(argv[i]); + iLen += strlen(argv[i]) + 1; } - pMessage = (char *) malloc((iLen + 100) * sizeof(char)); + pMessage = (char *) malloc(iLen); if (!pMessage) { SCWrite(pCon, "ERROR: out of memory in clientput", eLogError); return 0; } - memset(pMessage, 0, (iLen + 100) * sizeof(char)); - Arg2Text(iCode - 1, &argv[1], pMessage, (iLen + 100) * sizeof(char)); + memset(pMessage, 0, iLen); + Arg2Text(iCode - 1, &argv[1], pMessage, iLen); /* as the outcode is optional we have to test the message in order to get proper outcodes for the log */ - if(strstr(pMessage,"ERROR") != NULL){ - eOut = eLogError; - } - if(strstr(pMessage,"WARNING") != NULL){ - eOut = eWarning; + if (eOut < 0) { /* code not given */ + eOut = eLog; + if(strstr(pMessage,"ERROR") != NULL){ + eOut = eLogError; + } + if(strstr(pMessage,"WARNING") != NULL){ + eOut = eWarning; + } } SCWrite(pCon, pMessage, eOut);