cl_log(LOG_ERR, "ra_dirname is:%s", ra_dirname->str);
execra( const char * ra_name, const char * op, 	GHashTable * cmd_params, GHashTable * env_params ){	char *ra_name_dup, *base_name;	GString * ra_dirname;		uniform_ret_execra_t exit_value;	cl_log(LOG_DEBUG, "To execute a RA %s", ra_name);	/* Prepare the call parameter */	if (!cmd_params) {		if (g_hash_table_size(cmd_params) > 0) {			cl_log(LOG_ERR, "OCF RA should have no "\				"command-line parameters.");		}	}		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);	/* execute the RA */	raexec_setenv(env_params);	cl_log(LOG_ERR, "ra_dirname is:%s", ra_dirname->str);	execl(ra_dirname->str, ra_dirname->str, op, NULL); 		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;	}	cl_log(LOG_ERR, "execl error when to execute RA %s.", ra_name);	g_string_free(ra_dirname, TRUE);	exit(exit_value);}