⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 racommon.c

📁 linux集群服务器软件代码包
💻 C
字号:
#include <portability.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <dirent.h>#include <libgen.h>  /* Add it for compiling on OSX */#include <glib.h>#include <sys/stat.h>#include <clplumbing/cl_log.h>#include <lrm/raexec.h>#include <lrm/racommon.h>voidget_ra_pathname(const char* class_path, const char* type, const char* provider,		char pathname[]){	char* type_dup;	char* base_name;	type_dup = strndup(type, RA_MAX_NAME_LENGTH);	if (type_dup == NULL) {		cl_log(LOG_ERR, "No enough memory to allocate.");		pathname[0] = '\0';		return;	}	base_name = basename(type_dup);	if ( strncmp(type, base_name, RA_MAX_NAME_LENGTH) == 0 ) {		/*the type does not include path*/		if (provider) {			snprintf(pathname, RA_MAX_NAME_LENGTH, "%s/%s/%s",				class_path, provider, type);		}else{			snprintf(pathname, RA_MAX_NAME_LENGTH, "%s/%s",				class_path,type);		}	}else{		/*the type includes path, just copy it to pathname*/		strncpy(pathname, type, RA_MAX_NAME_LENGTH);	}	free(type_dup);}/* *    Description:   Filter a file. *    Return Value: *		     TRUE:  the file is qualified. *		     FALSE: the file is unqualified. *    Notes: A qalifed file is a regular file with execute bits. */gbooleanfiltered(char * file_name){	struct stat buf;	if ( stat(file_name, &buf) != 0 ) {		return FALSE;	}	if (   S_ISREG(buf.st_mode)            && (   ( buf.st_mode & S_IXUSR ) || ( buf.st_mode & S_IXGRP )		|| ( buf.st_mode & S_IXOTH ) ) ) {		return TRUE;	}	return FALSE;}intget_runnable_list(const char* class_path, GList ** rsc_info){	struct dirent **namelist;	int file_num;	if ( rsc_info == NULL ) {		cl_log(LOG_ERR, "Parameter error: get_resource_list");		return -2;	}	if ( *rsc_info != NULL ) {		cl_log(LOG_ERR, "Parameter error: get_resource_list."\			"will cause memory leak.");		*rsc_info = NULL;	}	file_num = scandir(class_path, &namelist, 0, alphasort);	if (file_num < 0) {		cl_log(LOG_ERR, "scandir failed in RA plugin");		return -2;	} else{		while (file_num--) {			char tmp_buffer[FILENAME_MAX+1];			tmp_buffer[0] = '\0';			tmp_buffer[FILENAME_MAX] = '\0';			snprintf(tmp_buffer, FILENAME_MAX, "%s/%s", 				 class_path, namelist[file_num]->d_name );			if ( filtered(tmp_buffer) == TRUE ) {				*rsc_info = g_list_append(*rsc_info,						g_strdup(namelist[file_num]->d_name));			}			free(namelist[file_num]);		}		free(namelist);	}	return g_list_length(*rsc_info);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -