cl_log(LOG_ERR, "execl error when to execute RA %s.", ra_name);
cl_log(LOG_ERR, "execl error when to execute RA %s.", rsc_type);
execra( const char * ra_name, const char * op, 	GHashTable * cmd_params, GHashTable * env_params ){	RA_ARGV params_argv;	uniform_ret_execra_t exit_value;	char *ra_name_dup, *base_name;	GString * ra_dirname;	GString * debug_info;	int index_tmp = 0;	cl_log(LOG_DEBUG, "To execute a RA %s.", ra_name);	/* Prepare the call parameter */	if (0 > prepare_cmd_parameters(ra_name, op, cmd_params, params_argv)) {		cl_log(LOG_ERR, "HB RA: Error of preparing parameters");		return -1;	}	ra_dirname = g_string_new(ra_name);	ra_name_dup = strndup(ra_name, RA_MAX_DIRNAME_LENGTH);	base_name = basename(ra_name_dup);	/*	 * If ra_name only contains basename, then append RA_PATH.	 * If ra_name is a pathname, then don't deal with it.	 */	if ( strncmp(ra_name, base_name, RA_MAX_BASENAME_LENGTH) == 0 ) {		g_string_insert(ra_dirname, 0, RA_PATH);	}	free(ra_name_dup);	/* For heartbeat scripts, no definite specification for parameters	 * Not set calling parameters	 */	raexec_setenv(env_params);		debug_info = g_string_new("");	do {		g_string_append(debug_info, params_argv[index_tmp]);		g_string_append(debug_info, " ");	} while (params_argv[++index_tmp] != NULL);	debug_info->str[debug_info->len-1] = '\0';	cl_log(LOG_INFO, "Will execute a heartbeat RA: %s", debug_info->str);	g_string_free(debug_info, TRUE);		if ( execv(ra_dirname->str, params_argv) < 0 ) {		cl_log(LOG_ERR, "execl error when to execute RA %s.", ra_name);	}	switch (errno) {		case ENOENT:   /* No such file or directory */		case EISDIR:   /* Is a directory */			exit_value = EXECRA_NO_RA;			break;		default:			exit_value = EXECRA_EXEC_UNKNOWN_ERROR;        }	g_string_free(ra_dirname, TRUE);        cl_log(LOG_ERR, "execl error when to execute RA %s.", ra_name);        exit(exit_value);}