📄 getgroups.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 + -