Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/features/botch.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
20
* *
21
***********************************************************************/
22
#pragma prototyped
23
/*
24
* Glenn Fowler
25
* AT&T Bell Laboratories
26
*
27
* generate ast traps for botched standard prototypes
28
*/
29
30
#include <sys/types.h>
31
32
#include "FEATURE/lib"
33
#include "FEATURE/sys"
34
35
#if _lib_getgroups
36
extern int getgroups(int, gid_t*);
37
#endif
38
39
int
40
main()
41
{
42
#if _lib_getgroups
43
if (sizeof(int) > sizeof(gid_t))
44
{
45
int n;
46
int i;
47
int r;
48
gid_t groups[32 * sizeof(int) / sizeof(gid_t)];
49
50
r = sizeof(int) / sizeof(gid_t);
51
if ((n = getgroups((sizeof(groups) / sizeof(groups[0])) / r, groups)) > 0)
52
for (i = 1; i <= n; i++)
53
{
54
groups[i] = ((gid_t)0);
55
if (getgroups(i, groups) != i)
56
goto botched;
57
if (groups[i] != ((gid_t)0))
58
goto botched;
59
groups[i] = ((gid_t)-1);
60
if (getgroups(i, groups) != i)
61
goto botched;
62
if (groups[i] != ((gid_t)-1))
63
goto botched;
64
}
65
}
66
return 0;
67
botched:
68
printf("#undef getgroups\n");
69
printf("#define getgroups _ast_getgroups /* implementation botches gid_t* arg */\n");
70
#endif
71
return 0;
72
}
73
74