- fixed bug and refactored ClientPut
This commit is contained in:
78
macro.c
78
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,92 +630,42 @@ 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 (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);
|
||||
if (pMessage) {
|
||||
|
||||
Reference in New Issue
Block a user