1 ?RCS: $Id: d_union_semun.U,v $
3 ?RCS: Copyright (c) 1998 Andy Dougherty
5 ?RCS: You may distribute under the terms of either the GNU General Public
6 ?RCS: License or the Artistic License, as specified in the README file.
8 ?RCS: $Log: d_union_semun.U,v $
10 ?MAKE:d_union_semun d_semctl_semun d_semctl_semid_ds: Compile Setvar Myread run \
12 ?MAKE: -pick add $@ %<
14 ?S: This variable conditionally defines HAS_UNION_SEMUN if the
15 ?S: union semun is defined by including <sys/sem.h>.
18 ?S: This variable conditionally defines USE_SEMCTL_SEMUN, which
19 ?S: indicates that union semun is to be used for semctl IPC_STAT.
22 ?S: This variable conditionally defines USE_SEMCTL_SEMID_DS, which
23 ?S: indicates that struct semid_ds * is to be used for semctl IPC_STAT.
26 ?C: This symbol, if defined, indicates that the union semun is
27 ?C: defined by including <sys/sem.h>. If not, the user code
28 ?C: probably needs to define it as:
31 ?C: struct semid_ds *buf;
32 ?C: unsigned short *array;
36 ?C: This symbol, if defined, indicates that union semun is
37 ?C: used for semctl IPC_STAT.
39 ?C:USE_SEMCTL_SEMID_DS:
40 ?C: This symbol, if defined, indicates that struct semid_ds * is
41 ?C: used for semctl IPC_STAT.
43 ?H:#$d_union_semun HAS_UNION_SEMUN /**/
44 ?H:#$d_semctl_semun USE_SEMCTL_SEMUN /**/
45 ?H:#$d_semctl_semid_ds USE_SEMCTL_SEMID_DS /**/
49 ?LINT: set d_union_semun d_semctl_semun d_semctl_semid_ds
50 : see whether sys/sem.h defines union semun
53 #include <sys/types.h>
56 int main () { union semun semun; semun.buf = 0; }
59 if eval $compile; then
60 echo "You have union semun in <sys/sem.h>." >&4
63 echo "You do not have union semun in <sys/sem.h>." >&4
70 : see how to do semctl IPC_STAT
74 ?X: use tryh.h instead of try.h because $rm_try cleans up try.*
78 # define S_IRUSR S_IREAD
79 # define S_IWUSR S_IWRITE
80 # define S_IXUSR S_IEXEC
86 # define S_IRGRP (S_IRUSR>>3)
87 # define S_IWGRP (S_IWUSR>>3)
88 # define S_IXGRP (S_IXUSR>>3)
89 # define S_IROTH (S_IRUSR>>6)
90 # define S_IWOTH (S_IWUSR>>6)
91 # define S_IXOTH (S_IXUSR>>6)
94 # define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
95 # define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
96 # define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
99 : see whether semctl IPC_STAT can use union semun
100 case "$d_semctl_semun" in
104 #include <sys/types.h>
107 #include <sys/stat.h>
114 #$d_union_semun HAS_UNION_SEMUN
117 #ifndef HAS_UNION_SEMUN
120 struct semid_ds *buf;
121 unsigned short *array;
127 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
128 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
130 struct semid_ds argbuf;
133 st = semctl(sem, 0, IPC_STAT, arg);
137 # endif /* IPC_STAT */
138 printf("semctl IPC_STAT failed: errno = %d\n", errno);
140 if (semctl(sem, 0, IPC_RMID, arg) != 0)
141 # endif /* IPC_RMID */
142 printf("semctl IPC_RMID failed: errno = %d\n", errno);
144 #endif /* IPC_PRIVATE && ... */
145 printf("semget failed: errno = %d\n", errno);
150 if eval $compile; then
153 semun) val="$define" ;;
161 case "$d_semctl_semun" in
163 echo "You can use union semun for semctl IPC_STAT." >&4
166 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
171 : see whether semctl IPC_STAT can use struct semid_ds pointer
172 case "$d_semctl_semid_ds" in
176 #include <sys/types.h>
179 #include <sys/stat.h>
190 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
191 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
194 st = semctl(sem, 0, IPC_STAT, &arg);
196 printf("semid_ds\n");
198 # endif /* IPC_STAT */
199 printf("semctl IPC_STAT failed: errno = %d\n", errno);
201 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
202 # endif /* IPC_RMID */
203 printf("semctl IPC_RMID failed: errno = %d\n", errno);
205 #endif /* IPC_PRIVATE && ... */
206 printf("semget failed: errno = %d\n", errno);
212 if eval $compile; then
215 semid_ds) val="$define" ;;
219 set d_semctl_semid_ds
223 case "$d_semctl_semid_ds" in
225 echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
227 *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
233 # We do not have the full sem*(2) library, so assume we can not
239 set d_semctl_semid_ds