"WINDOW_TYPE" ,
"ARG_TYPE" ,
"LABEL" ,
- NULL ,
+ '\0' ,
};
/* Max Number of fields in Action Keyword Table */
"MAP_ACTION" ,
"TYPE" ,
"LABEL" ,
- NULL ,
+ '\0' ,
};
/* Max Number of fields in Filetype Keyword Table */
rewind(fp);
/* Initialize the ActionData structure passed */
if(ActionDataptr)
- memset((ActionData *)ActionDataptr,
- NULL,sizeof(ActionData));
+ memset(ActionDataptr,
+ 0,sizeof(ActionData));
else {
#ifdef DEBUG
printf("ActionDataptr is NULL\n");
{
ActionDataptr->pszCmd = execstr[0];
ActionDataptr->pszPrompt = execstr[1];
+ free(execstr);
}
/* Got the ActionData,so, go get the FiletypeData */
ActionDataptr->papFiletypes =
return NULL;
}
/* Everything looks right so process the exec_string */
- if( !(execstr = ProcessExecString((char *)ppFiletypeData[nfiletypes]->pszPrintCmd)) )
- ppFiletypeData[nfiletypes]->pszPrintCmd=NULL;
- else
- ppFiletypeData[nfiletypes]->pszPrintCmd=execstr[0];
+ if( !(execstr = ProcessExecString((char *)ppFiletypeData[nfiletypes]->pszPrintCmd)) )
+ ppFiletypeData[nfiletypes]->pszPrintCmd=NULL;
+ else {
+ ppFiletypeData[nfiletypes]->pszPrintCmd=execstr[0];
+ free(execstr);
+ }
nfiletypes++;
/* Allocate a new filetypedata record */
if( (ppFiletypeData[nfiletypes] =
ppFiletypeData[nfiletypes] = 0;
/* return number of filetypes */
*nftypes = nfiletypes+1;
+ free(execstr);
return ppFiletypeData;
}
++s;
if (!args[0])
{
- args[0] = (char *)malloc (s - wordStart + 1);
+ int szArgs0 = s - wordStart + 1;
+ args[0] = (char *)malloc (szArgs0);
if (!args[0])
return NULL;
- memset(args[0],0,sizeof(args[0]));
+ memset(args[0],0,szArgs0);
}
strncpy (args[0], wordStart, s - wordStart);
args[0][s-wordStart] = '\0';
if (!args[1])
{
- if(s)
- args[1] = (char *)malloc (strlen(s)+1);
+ int szArgs1 = strlen(s) + 1;
+ args[1] = (char *)malloc (szArgs1);
if (!args[1])
{
if(args[0])
free(args[0]);
return NULL;
}
- memset(args[1],0,sizeof(args[1]));
+ memset(args[1],0,szArgs1);
}
/* Skip all leading spaces */
while (*s && isspace (*s))
** **
** Limitation : Supports only ONE prompt. **
** **
-** Output : returns 0 (No error). **
-** returns >0 (Error). **
+** Output : Pointer to 3-element result array from malloc, **
+** or NULL on error **
** **
** Assumptions: a) Arg fields start with a '%' character. **
** b) Prompt string start and end with '"' chara- **
ProcessExecString(char *cmd)
{
-char *s1, *s2,*s3,*s4,*argbuf,*exec_args[3];
+char *s1, *s2,*s3,*s4,*argbuf,**exec_args;
int done=FALSE, argfound=FALSE,promptfound=FALSE;
if (!cmd) {
return((char **)NULL);
}
s1=s2=s3=s4=argbuf=NULL;
+ exec_args = calloc(3, sizeof(char*));
+ if (!exec_args) return NULL;
/* Allocate buffer for the cmd string */
exec_args[0] = (char *)calloc(1,strlen(cmd)+1);
exec_args[1] = exec_args[2] = NULL;
covers the complete string
between %'s
*/
- if(argbuf) free(argbuf);
+ if(argbuf) { free(argbuf); argbuf = NULL; }
if(s2)
{
argbuf = (char *)calloc(1,(s2-s1)+2);
continue;
}
}
- else if (s1 && *s1)
+ else if (*s1)
{
strcat(exec_args[0],s1);
- if(argbuf) free(argbuf);
+ if(argbuf) { free(argbuf); argbuf = NULL; }
done = TRUE;
continue;
}
argfound = FALSE;
s1=s2;
}
- if(argbuf) free(argbuf);
+ if(argbuf) { free(argbuf); argbuf = NULL; }
return exec_args;
}
pFtD->fsFlags|=CA_FT_CNTLONG;
else if ( !strcmp(buf,"short") )
pFtD->fsFlags|=CA_FT_CNTSHORT;
- else
+ else {
+ free(cts);
return (-1);
+ }
}
while( *tmp && isspace(*tmp) ) tmp++;
s2=tmp;