Cleaned up externcmd_allocate and externcmd_free

This commit is contained in:
Markus Makela
2015-11-11 16:00:00 +02:00
parent 9ab5326960
commit d56843835c
2 changed files with 36 additions and 36 deletions

View File

@ -82,36 +82,33 @@ int tokenize_arguments(char* argstr, char** argv)
*/ */
EXTERNCMD* externcmd_allocate(char* argstr) EXTERNCMD* externcmd_allocate(char* argstr)
{ {
EXTERNCMD* cmd; EXTERNCMD* cmd = NULL;
if(argstr == NULL) if (argstr && (cmd = (EXTERNCMD*) malloc(sizeof(EXTERNCMD))) &&
return NULL; (cmd->argv = malloc(sizeof(char*) * MAXSCALE_EXTCMD_ARG_MAX)))
if((cmd = (EXTERNCMD*)malloc(sizeof(EXTERNCMD))) != NULL)
{ {
if(tokenize_arguments(argstr,cmd->parameters) == -1) if (tokenize_arguments(argstr, cmd->argv) == 0)
{ {
free(cmd); if (access(cmd->argv[0], X_OK) != 0)
return NULL; {
} if (access(cmd->argv[0], F_OK) != 0)
if(access(cmd->parameters[0],F_OK) != 0) {
{ skygw_log_write(LE, "Error: Cannot find file: %s", cmd->argv[0]);
skygw_log_write(LE, }
"Error: Cannot find file: %s", else
cmd->parameters[0]); {
externcmd_free(cmd); skygw_log_write(LE, "Error: Cannot execute file '%s'. Missing "
return NULL; "execution permissions.", cmd->argv[0]);
} }
externcmd_free(cmd);
if(access(cmd->parameters[0],X_OK) != 0) cmd = NULL;
{ }
skygw_log_write(LE, }
"Error: Cannot execute file '%s'. Missing execution permissions.", else
cmd->parameters[0]); {
externcmd_free(cmd); externcmd_free(cmd);
return NULL; cmd = NULL;
} }
skygw_log_write(LT, "Executing script %s.", cmd->parameters[0]);
} }
return cmd; return cmd;
} }
@ -122,13 +119,15 @@ EXTERNCMD* externcmd_allocate(char* argstr)
*/ */
void externcmd_free(EXTERNCMD* cmd) void externcmd_free(EXTERNCMD* cmd)
{ {
int i; if (cmd)
for(i = 0;cmd->parameters[i] != NULL;i++)
{ {
free(cmd->parameters[i]); for (int i = 0; cmd->argv[i]; i++)
{
free(cmd->argv[i]);
}
free(cmd->argv);
free(cmd);
} }
free(cmd);
} }
/** /**
@ -147,13 +146,13 @@ int externcmd_execute(EXTERNCMD* cmd)
{ {
char errbuf[STRERROR_BUFLEN]; char errbuf[STRERROR_BUFLEN];
skygw_log_write(LOGFILE_ERROR,"Error: Failed to execute command '%s', fork failed: [%d] %s", skygw_log_write(LOGFILE_ERROR,"Error: Failed to execute command '%s', fork failed: [%d] %s",
cmd->parameters[0],errno,strerror_r(errno, errbuf, sizeof(errbuf))); cmd->argv[0],errno,strerror_r(errno, errbuf, sizeof(errbuf)));
rval = -1; rval = -1;
} }
else if(pid == 0) else if(pid == 0)
{ {
/** Child process, execute command */ /** Child process, execute command */
execvp(cmd->parameters[0],cmd->parameters); execvp(cmd->argv[0],cmd->argv);
_exit(1); _exit(1);
} }
else else

View File

@ -9,7 +9,8 @@
#define MAXSCALE_EXTCMD_ARG_MAX 256 #define MAXSCALE_EXTCMD_ARG_MAX 256
typedef struct extern_cmd_t{ typedef struct extern_cmd_t{
char* parameters[MAXSCALE_EXTCMD_ARG_MAX]; /*< Command arguments */ char** argv; /*< Argument vector for the command, first being the actual command
* being executed. */
int n_exec; /*< Number of times executed */ int n_exec; /*< Number of times executed */
pid_t child; /*< PID of the child process */ pid_t child; /*< PID of the child process */
}EXTERNCMD; }EXTERNCMD;