GString * debug_info;
execra( const char * rsc_id, const char * rsc_type, const char * provider,	const char * op_type, const int timeout, GHashTable * params){	uniform_ret_execra_t exit_value;	RA_ARGV params_argv;	char ra_pathname[RA_MAX_NAME_LENGTH];	char * optype_tmp = NULL;	GString * debug_info;	int index_tmp = 0;	/* Specially handle the operation "metameta-data". To build up its	 * output from templet, dummy data and its comment head.	 */	if ( 0 == STRNCMP_CONST(op_type, "meta-data")) {		printf("%s", get_resource_meta(rsc_type, provider));		exit(0);	}	/* To simulate the 'monitor' operation with 'status'.	 * Now suppose there is no 'monitor' operation for LSB scripts.	 */	if (0 == STRNCMP_CONST(op_type, "monitor")) {		optype_tmp = g_strdup("status");	} else {		optype_tmp = g_strdup(op_type);	}	/* Prepare the call parameter */	if ( prepare_cmd_parameters(rsc_type, optype_tmp, params, params_argv)		 != 0) {		cl_log(LOG_ERR, "lsb RA: Error of preparing parameters");		g_free(optype_tmp);		return -1;	}	g_free(optype_tmp);	get_ra_pathname(RA_PATH, rsc_type, NULL, ra_pathname);	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_DEBUG, "RA instance %s executing: lsb::%s"				, rsc_id, debug_info->str);	*/	g_string_free(debug_info, TRUE);	execv(ra_pathname, params_argv);        cl_log(LOG_ERR, "execv error when to execute a LSB RA %s.", rsc_type);        switch (errno) {                case ENOENT:   /* No such file or directory */			/* Fall down */                case EISDIR:   /* Is a directory */                        exit_value = EXECRA_NO_RA;        		cl_log(LOG_ERR, "Cause: No such file or directory.");                        break;                default:                        exit_value = EXECRA_EXEC_UNKNOWN_ERROR;        		cl_log(LOG_ERR, "Cause: execv unknow error.");        }        exit(exit_value);}