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

📄 getgroups.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
字号:
/* this tests whether getgroups actually returns lists of integers   rather than gid_t. The test only works if the user running   the test is in at least 1 group    The test is designed to check for those broken OSes that define   getgroups() as returning an array of gid_t but actually return a   array of ints! Ultrix is one culprit  */#if defined(HAVE_UNISTD_H)#include <unistd.h>#endif#include <sys/types.h>#include <stdio.h>#include <unistd.h>#include <grp.h>main(){	int i;	int *igroups;	char *cgroups;	int grp = 0;	int  ngroups = getgroups(0,&grp);	if (sizeof(gid_t) == sizeof(int)) {		fprintf(stderr,"gid_t and int are the same size\n");		exit(1);	}	if (ngroups <= 0)		ngroups = 32;	igroups = (int *)malloc(sizeof(int)*ngroups);	for (i=0;i<ngroups;i++)		igroups[i] = 0x42424242;	ngroups = getgroups(ngroups,(gid_t *)igroups);	if (igroups[0] == 0x42424242)		ngroups = 0;	if (ngroups == 0) {		printf("WARNING: can't determine getgroups return type\n");		exit(1);	}		cgroups = (char *)igroups;	if (ngroups == 1 && 	    cgroups[2] == 0x42 && cgroups[3] == 0x42) {		fprintf(stderr,"getgroups returns gid_t\n");		exit(1);	}	  	for (i=0;i<ngroups;i++) {		if (igroups[i] == 0x42424242) {			fprintf(stderr,"getgroups returns gid_t\n");			exit(1);		}	}	exit(0);}

⌨️ 快捷键说明

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