1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 // Copied from libcore/luni/src/main/native/android_system_OsConstants.cpp,
18 // changes annotated with [ravenwood-change].
19 
20 #define LOG_TAG "OsConstants"
21 
22 #include <errno.h>
23 #include <fcntl.h>
24 #include <netdb.h>
25 #include <netinet/icmp6.h>
26 #include <netinet/in.h>
27 #include <netinet/ip_icmp.h>
28 #include <netinet/tcp.h>
29 #include <poll.h>
30 #include <signal.h>
31 #include <stdlib.h>
32 #include <sys/ioctl.h>
33 #include <sys/mman.h>
34 #include <sys/prctl.h>
35 #include <sys/resource.h>
36 #include <sys/socket.h>
37 #include <sys/stat.h>
38 #include <sys/un.h>
39 #include <sys/wait.h>
40 #include <sys/xattr.h>
41 #include <unistd.h>
42 
43 #include <net/if_arp.h>
44 #include <linux/if_ether.h>
45 
46 // After the others because these are not necessarily self-contained in glibc.
47 #include <linux/if_addr.h>
48 #include <linux/rtnetlink.h>
49 
50 // Include linux socket constants for setting sockopts
51 #include <linux/udp.h>
52 
53 #include <net/if.h> // After <sys/socket.h> to work around a Mac header file bug.
54 
55 // [ravenwood-change] always include it
56 // #if defined(__BIONIC__)
57 #include <linux/capability.h>
58 // #endif
59 
60 #include <nativehelper/JNIHelp.h>
61 #include <nativehelper/jni_macros.h>
62 
63 // [ravenwood-change] -- can't access "Portability.h", so just inline it here.
64 // #include "Portability.h"
65 #include <byteswap.h>
66 #include <sys/sendfile.h>
67 #include <sys/statvfs.h>
68 #include <netdb.h>
69 #include <linux/vm_sockets.h>
70 
71 // For LOG_ALWAYS_FATAL_IF
72 #include "utils/Log.h"
73 
74 
initConstant(JNIEnv * env,jclass c,const char * fieldName,int value)75 static void initConstant(JNIEnv* env, jclass c, const char* fieldName, int value) {
76     jfieldID field = env->GetStaticFieldID(c, fieldName, "I");
77     env->SetStaticIntField(c, field, value);
78 }
79 
OsConstants_initConstants(JNIEnv * env,jclass)80 static void OsConstants_initConstants(JNIEnv* env, jclass) {
81     // [ravenwood-change] -- the constants are in the outer class, but this JNI method is in the
82     // nested class, so we need to get the outer class here.
83     jclass c = env->FindClass("android/system/OsConstants");
84     LOG_ALWAYS_FATAL_IF(c == NULL, "Unable to find class android/system/OsConstants");
85 
86     initConstant(env, c, "AF_INET", AF_INET);
87     initConstant(env, c, "AF_INET6", AF_INET6);
88     initConstant(env, c, "AF_PACKET", AF_PACKET);
89     initConstant(env, c, "AF_NETLINK", AF_NETLINK);
90     initConstant(env, c, "AF_UNIX", AF_UNIX);
91     initConstant(env, c, "AF_VSOCK", AF_VSOCK);
92     initConstant(env, c, "AF_UNSPEC", AF_UNSPEC);
93     initConstant(env, c, "AI_ADDRCONFIG", AI_ADDRCONFIG);
94     initConstant(env, c, "AI_ALL", AI_ALL);
95     initConstant(env, c, "AI_CANONNAME", AI_CANONNAME);
96     initConstant(env, c, "AI_NUMERICHOST", AI_NUMERICHOST);
97 #if defined(AI_NUMERICSERV)
98     initConstant(env, c, "AI_NUMERICSERV", AI_NUMERICSERV);
99 #endif
100     initConstant(env, c, "AI_PASSIVE", AI_PASSIVE);
101     initConstant(env, c, "AI_V4MAPPED", AI_V4MAPPED);
102     initConstant(env, c, "ARPHRD_ETHER", ARPHRD_ETHER);
103     initConstant(env, c, "VMADDR_PORT_ANY", VMADDR_PORT_ANY);
104     initConstant(env, c, "VMADDR_CID_ANY", VMADDR_CID_ANY);
105     initConstant(env, c, "VMADDR_CID_LOCAL", VMADDR_CID_LOCAL);
106     initConstant(env, c, "VMADDR_CID_HOST", VMADDR_CID_HOST);
107     initConstant(env, c, "ARPHRD_LOOPBACK", ARPHRD_LOOPBACK);
108 #if defined(CAP_LAST_CAP)
109     initConstant(env, c, "CAP_AUDIT_CONTROL", CAP_AUDIT_CONTROL);
110     initConstant(env, c, "CAP_AUDIT_WRITE", CAP_AUDIT_WRITE);
111     initConstant(env, c, "CAP_BLOCK_SUSPEND", CAP_BLOCK_SUSPEND);
112     initConstant(env, c, "CAP_CHOWN", CAP_CHOWN);
113     initConstant(env, c, "CAP_DAC_OVERRIDE", CAP_DAC_OVERRIDE);
114     initConstant(env, c, "CAP_DAC_READ_SEARCH", CAP_DAC_READ_SEARCH);
115     initConstant(env, c, "CAP_FOWNER", CAP_FOWNER);
116     initConstant(env, c, "CAP_FSETID", CAP_FSETID);
117     initConstant(env, c, "CAP_IPC_LOCK", CAP_IPC_LOCK);
118     initConstant(env, c, "CAP_IPC_OWNER", CAP_IPC_OWNER);
119     initConstant(env, c, "CAP_KILL", CAP_KILL);
120     initConstant(env, c, "CAP_LAST_CAP", CAP_LAST_CAP);
121     initConstant(env, c, "CAP_LEASE", CAP_LEASE);
122     initConstant(env, c, "CAP_LINUX_IMMUTABLE", CAP_LINUX_IMMUTABLE);
123     initConstant(env, c, "CAP_MAC_ADMIN", CAP_MAC_ADMIN);
124     initConstant(env, c, "CAP_MAC_OVERRIDE", CAP_MAC_OVERRIDE);
125     initConstant(env, c, "CAP_MKNOD", CAP_MKNOD);
126     initConstant(env, c, "CAP_NET_ADMIN", CAP_NET_ADMIN);
127     initConstant(env, c, "CAP_NET_BIND_SERVICE", CAP_NET_BIND_SERVICE);
128     initConstant(env, c, "CAP_NET_BROADCAST", CAP_NET_BROADCAST);
129     initConstant(env, c, "CAP_NET_RAW", CAP_NET_RAW);
130     initConstant(env, c, "CAP_SETFCAP", CAP_SETFCAP);
131     initConstant(env, c, "CAP_SETGID", CAP_SETGID);
132     initConstant(env, c, "CAP_SETPCAP", CAP_SETPCAP);
133     initConstant(env, c, "CAP_SETUID", CAP_SETUID);
134     initConstant(env, c, "CAP_SYS_ADMIN", CAP_SYS_ADMIN);
135     initConstant(env, c, "CAP_SYS_BOOT", CAP_SYS_BOOT);
136     initConstant(env, c, "CAP_SYS_CHROOT", CAP_SYS_CHROOT);
137     initConstant(env, c, "CAP_SYSLOG", CAP_SYSLOG);
138     initConstant(env, c, "CAP_SYS_MODULE", CAP_SYS_MODULE);
139     initConstant(env, c, "CAP_SYS_NICE", CAP_SYS_NICE);
140     initConstant(env, c, "CAP_SYS_PACCT", CAP_SYS_PACCT);
141     initConstant(env, c, "CAP_SYS_PTRACE", CAP_SYS_PTRACE);
142     initConstant(env, c, "CAP_SYS_RAWIO", CAP_SYS_RAWIO);
143     initConstant(env, c, "CAP_SYS_RESOURCE", CAP_SYS_RESOURCE);
144     initConstant(env, c, "CAP_SYS_TIME", CAP_SYS_TIME);
145     initConstant(env, c, "CAP_SYS_TTY_CONFIG", CAP_SYS_TTY_CONFIG);
146     initConstant(env, c, "CAP_WAKE_ALARM", CAP_WAKE_ALARM);
147 #endif
148     initConstant(env, c, "E2BIG", E2BIG);
149     initConstant(env, c, "EACCES", EACCES);
150     initConstant(env, c, "EADDRINUSE", EADDRINUSE);
151     initConstant(env, c, "EADDRNOTAVAIL", EADDRNOTAVAIL);
152     initConstant(env, c, "EAFNOSUPPORT", EAFNOSUPPORT);
153     initConstant(env, c, "EAGAIN", EAGAIN);
154     initConstant(env, c, "EAI_AGAIN", EAI_AGAIN);
155     initConstant(env, c, "EAI_BADFLAGS", EAI_BADFLAGS);
156     initConstant(env, c, "EAI_FAIL", EAI_FAIL);
157     initConstant(env, c, "EAI_FAMILY", EAI_FAMILY);
158     initConstant(env, c, "EAI_MEMORY", EAI_MEMORY);
159     initConstant(env, c, "EAI_NODATA", EAI_NODATA);
160     initConstant(env, c, "EAI_NONAME", EAI_NONAME);
161 #if defined(EAI_OVERFLOW)
162     initConstant(env, c, "EAI_OVERFLOW", EAI_OVERFLOW);
163 #endif
164     initConstant(env, c, "EAI_SERVICE", EAI_SERVICE);
165     initConstant(env, c, "EAI_SOCKTYPE", EAI_SOCKTYPE);
166     initConstant(env, c, "EAI_SYSTEM", EAI_SYSTEM);
167     initConstant(env, c, "EALREADY", EALREADY);
168     initConstant(env, c, "EBADF", EBADF);
169     initConstant(env, c, "EBADMSG", EBADMSG);
170     initConstant(env, c, "EBUSY", EBUSY);
171     initConstant(env, c, "ECANCELED", ECANCELED);
172     initConstant(env, c, "ECHILD", ECHILD);
173     initConstant(env, c, "ECONNABORTED", ECONNABORTED);
174     initConstant(env, c, "ECONNREFUSED", ECONNREFUSED);
175     initConstant(env, c, "ECONNRESET", ECONNRESET);
176     initConstant(env, c, "EDEADLK", EDEADLK);
177     initConstant(env, c, "EDESTADDRREQ", EDESTADDRREQ);
178     initConstant(env, c, "EDOM", EDOM);
179     initConstant(env, c, "EDQUOT", EDQUOT);
180     initConstant(env, c, "EEXIST", EEXIST);
181     initConstant(env, c, "EFAULT", EFAULT);
182     initConstant(env, c, "EFBIG", EFBIG);
183     initConstant(env, c, "EHOSTUNREACH", EHOSTUNREACH);
184     initConstant(env, c, "EIDRM", EIDRM);
185     initConstant(env, c, "EILSEQ", EILSEQ);
186     initConstant(env, c, "EINPROGRESS", EINPROGRESS);
187     initConstant(env, c, "EINTR", EINTR);
188     initConstant(env, c, "EINVAL", EINVAL);
189     initConstant(env, c, "EIO", EIO);
190     initConstant(env, c, "EISCONN", EISCONN);
191     initConstant(env, c, "EISDIR", EISDIR);
192     initConstant(env, c, "ELOOP", ELOOP);
193     initConstant(env, c, "EMFILE", EMFILE);
194     initConstant(env, c, "EMLINK", EMLINK);
195     initConstant(env, c, "EMSGSIZE", EMSGSIZE);
196     initConstant(env, c, "EMULTIHOP", EMULTIHOP);
197     initConstant(env, c, "ENAMETOOLONG", ENAMETOOLONG);
198     initConstant(env, c, "ENETDOWN", ENETDOWN);
199     initConstant(env, c, "ENETRESET", ENETRESET);
200     initConstant(env, c, "ENETUNREACH", ENETUNREACH);
201     initConstant(env, c, "ENFILE", ENFILE);
202     initConstant(env, c, "ENOBUFS", ENOBUFS);
203     initConstant(env, c, "ENODATA", ENODATA);
204     initConstant(env, c, "ENODEV", ENODEV);
205     initConstant(env, c, "ENOENT", ENOENT);
206     initConstant(env, c, "ENOEXEC", ENOEXEC);
207     initConstant(env, c, "ENOLCK", ENOLCK);
208     initConstant(env, c, "ENOLINK", ENOLINK);
209     initConstant(env, c, "ENOMEM", ENOMEM);
210     initConstant(env, c, "ENOMSG", ENOMSG);
211     initConstant(env, c, "ENONET", ENONET);
212     initConstant(env, c, "ENOPROTOOPT", ENOPROTOOPT);
213     initConstant(env, c, "ENOSPC", ENOSPC);
214     initConstant(env, c, "ENOSR", ENOSR);
215     initConstant(env, c, "ENOSTR", ENOSTR);
216     initConstant(env, c, "ENOSYS", ENOSYS);
217     initConstant(env, c, "ENOTCONN", ENOTCONN);
218     initConstant(env, c, "ENOTDIR", ENOTDIR);
219     initConstant(env, c, "ENOTEMPTY", ENOTEMPTY);
220     initConstant(env, c, "ENOTSOCK", ENOTSOCK);
221     initConstant(env, c, "ENOTSUP", ENOTSUP);
222     initConstant(env, c, "ENOTTY", ENOTTY);
223     initConstant(env, c, "ENXIO", ENXIO);
224     initConstant(env, c, "EOPNOTSUPP", EOPNOTSUPP);
225     initConstant(env, c, "EOVERFLOW", EOVERFLOW);
226     initConstant(env, c, "EPERM", EPERM);
227     initConstant(env, c, "EPIPE", EPIPE);
228     initConstant(env, c, "EPROTO", EPROTO);
229     initConstant(env, c, "EPROTONOSUPPORT", EPROTONOSUPPORT);
230     initConstant(env, c, "EPROTOTYPE", EPROTOTYPE);
231     initConstant(env, c, "ERANGE", ERANGE);
232     initConstant(env, c, "EROFS", EROFS);
233     initConstant(env, c, "ESPIPE", ESPIPE);
234     initConstant(env, c, "ESRCH", ESRCH);
235     initConstant(env, c, "ESTALE", ESTALE);
236     initConstant(env, c, "ETH_P_ALL", ETH_P_ALL);
237     initConstant(env, c, "ETH_P_ARP", ETH_P_ARP);
238     initConstant(env, c, "ETH_P_IP", ETH_P_IP);
239     initConstant(env, c, "ETH_P_IPV6", ETH_P_IPV6);
240     initConstant(env, c, "ETIME", ETIME);
241     initConstant(env, c, "ETIMEDOUT", ETIMEDOUT);
242     initConstant(env, c, "ETXTBSY", ETXTBSY);
243     initConstant(env, c, "EUSERS", EUSERS);
244 #if EWOULDBLOCK != EAGAIN
245 #error EWOULDBLOCK != EAGAIN
246 #endif
247     initConstant(env, c, "EXDEV", EXDEV);
248     initConstant(env, c, "EXIT_FAILURE", EXIT_FAILURE);
249     initConstant(env, c, "EXIT_SUCCESS", EXIT_SUCCESS);
250     initConstant(env, c, "FD_CLOEXEC", FD_CLOEXEC);
251     initConstant(env, c, "FIONREAD", FIONREAD);
252     initConstant(env, c, "F_DUPFD", F_DUPFD);
253     initConstant(env, c, "F_DUPFD_CLOEXEC", F_DUPFD_CLOEXEC);
254     initConstant(env, c, "F_GETFD", F_GETFD);
255     initConstant(env, c, "F_GETFL", F_GETFL);
256     initConstant(env, c, "F_GETLK", F_GETLK);
257 #if defined(F_GETLK64)
258     initConstant(env, c, "F_GETLK64", F_GETLK64);
259 #endif
260     initConstant(env, c, "F_GETOWN", F_GETOWN);
261     initConstant(env, c, "F_OK", F_OK);
262     initConstant(env, c, "F_RDLCK", F_RDLCK);
263     initConstant(env, c, "F_SETFD", F_SETFD);
264     initConstant(env, c, "F_SETFL", F_SETFL);
265     initConstant(env, c, "F_SETLK", F_SETLK);
266 #if defined(F_SETLK64)
267     initConstant(env, c, "F_SETLK64", F_SETLK64);
268 #endif
269     initConstant(env, c, "F_SETLKW", F_SETLKW);
270 #if defined(F_SETLKW64)
271     initConstant(env, c, "F_SETLKW64", F_SETLKW64);
272 #endif
273     initConstant(env, c, "F_SETOWN", F_SETOWN);
274     initConstant(env, c, "F_UNLCK", F_UNLCK);
275     initConstant(env, c, "F_WRLCK", F_WRLCK);
276     initConstant(env, c, "ICMP_ECHO", ICMP_ECHO);
277     initConstant(env, c, "ICMP_ECHOREPLY", ICMP_ECHOREPLY);
278     initConstant(env, c, "ICMP6_ECHO_REQUEST", ICMP6_ECHO_REQUEST);
279     initConstant(env, c, "ICMP6_ECHO_REPLY", ICMP6_ECHO_REPLY);
280 #if defined(IFA_F_DADFAILED)
281     initConstant(env, c, "IFA_F_DADFAILED", IFA_F_DADFAILED);
282 #endif
283 #if defined(IFA_F_DEPRECATED)
284     initConstant(env, c, "IFA_F_DEPRECATED", IFA_F_DEPRECATED);
285 #endif
286 #if defined(IFA_F_HOMEADDRESS)
287     initConstant(env, c, "IFA_F_HOMEADDRESS", IFA_F_HOMEADDRESS);
288 #endif
289 #if defined(IFA_F_MANAGETEMPADDR)
290     initConstant(env, c, "IFA_F_MANAGETEMPADDR", IFA_F_MANAGETEMPADDR);
291 #endif
292 #if defined(IFA_F_NODAD)
293     initConstant(env, c, "IFA_F_NODAD", IFA_F_NODAD);
294 #endif
295 #if defined(IFA_F_NOPREFIXROUTE)
296     initConstant(env, c, "IFA_F_NOPREFIXROUTE", IFA_F_NOPREFIXROUTE);
297 #endif
298 #if defined(IFA_F_OPTIMISTIC)
299     initConstant(env, c, "IFA_F_OPTIMISTIC", IFA_F_OPTIMISTIC);
300 #endif
301 #if defined(IFA_F_PERMANENT)
302     initConstant(env, c, "IFA_F_PERMANENT", IFA_F_PERMANENT);
303 #endif
304 #if defined(IFA_F_SECONDARY)
305     initConstant(env, c, "IFA_F_SECONDARY", IFA_F_SECONDARY);
306 #endif
307 #if defined(IFA_F_TEMPORARY)
308     initConstant(env, c, "IFA_F_TEMPORARY", IFA_F_TEMPORARY);
309 #endif
310 #if defined(IFA_F_TENTATIVE)
311     initConstant(env, c, "IFA_F_TENTATIVE", IFA_F_TENTATIVE);
312 #endif
313     initConstant(env, c, "IFF_ALLMULTI", IFF_ALLMULTI);
314 #if defined(IFF_AUTOMEDIA)
315     initConstant(env, c, "IFF_AUTOMEDIA", IFF_AUTOMEDIA);
316 #endif
317     initConstant(env, c, "IFF_BROADCAST", IFF_BROADCAST);
318     initConstant(env, c, "IFF_DEBUG", IFF_DEBUG);
319 #if defined(IFF_DYNAMIC)
320     initConstant(env, c, "IFF_DYNAMIC", IFF_DYNAMIC);
321 #endif
322     initConstant(env, c, "IFF_LOOPBACK", IFF_LOOPBACK);
323 #if defined(IFF_MASTER)
324     initConstant(env, c, "IFF_MASTER", IFF_MASTER);
325 #endif
326     initConstant(env, c, "IFF_MULTICAST", IFF_MULTICAST);
327     initConstant(env, c, "IFF_NOARP", IFF_NOARP);
328     initConstant(env, c, "IFF_NOTRAILERS", IFF_NOTRAILERS);
329     initConstant(env, c, "IFF_POINTOPOINT", IFF_POINTOPOINT);
330 #if defined(IFF_PORTSEL)
331     initConstant(env, c, "IFF_PORTSEL", IFF_PORTSEL);
332 #endif
333     initConstant(env, c, "IFF_PROMISC", IFF_PROMISC);
334     initConstant(env, c, "IFF_RUNNING", IFF_RUNNING);
335 #if defined(IFF_SLAVE)
336     initConstant(env, c, "IFF_SLAVE", IFF_SLAVE);
337 #endif
338     initConstant(env, c, "IFF_UP", IFF_UP);
339     initConstant(env, c, "IPPROTO_ICMP", IPPROTO_ICMP);
340     initConstant(env, c, "IPPROTO_ICMPV6", IPPROTO_ICMPV6);
341     initConstant(env, c, "IPPROTO_IP", IPPROTO_IP);
342     initConstant(env, c, "IPPROTO_IPV6", IPPROTO_IPV6);
343     initConstant(env, c, "IPPROTO_RAW", IPPROTO_RAW);
344     initConstant(env, c, "IPPROTO_TCP", IPPROTO_TCP);
345     initConstant(env, c, "IPPROTO_UDP", IPPROTO_UDP);
346     initConstant(env, c, "IPPROTO_ESP", IPPROTO_ESP);
347     initConstant(env, c, "IPV6_CHECKSUM", IPV6_CHECKSUM);
348     initConstant(env, c, "IPV6_MULTICAST_HOPS", IPV6_MULTICAST_HOPS);
349     initConstant(env, c, "IPV6_MULTICAST_IF", IPV6_MULTICAST_IF);
350     initConstant(env, c, "IPV6_MULTICAST_LOOP", IPV6_MULTICAST_LOOP);
351 #if defined(IPV6_PKTINFO)
352     initConstant(env, c, "IPV6_PKTINFO", IPV6_PKTINFO);
353 #endif
354 #if defined(IPV6_RECVDSTOPTS)
355     initConstant(env, c, "IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS);
356 #endif
357 #if defined(IPV6_RECVHOPLIMIT)
358     initConstant(env, c, "IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT);
359 #endif
360 #if defined(IPV6_RECVHOPOPTS)
361     initConstant(env, c, "IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS);
362 #endif
363 #if defined(IPV6_RECVPKTINFO)
364     initConstant(env, c, "IPV6_RECVPKTINFO", IPV6_RECVPKTINFO);
365 #endif
366 #if defined(IPV6_RECVRTHDR)
367     initConstant(env, c, "IPV6_RECVRTHDR", IPV6_RECVRTHDR);
368 #endif
369 #if defined(IPV6_RECVTCLASS)
370     initConstant(env, c, "IPV6_RECVTCLASS", IPV6_RECVTCLASS);
371 #endif
372 #if defined(IPV6_TCLASS)
373     initConstant(env, c, "IPV6_TCLASS", IPV6_TCLASS);
374 #endif
375     initConstant(env, c, "IPV6_UNICAST_HOPS", IPV6_UNICAST_HOPS);
376     initConstant(env, c, "IPV6_V6ONLY", IPV6_V6ONLY);
377     initConstant(env, c, "IP_MULTICAST_ALL", IP_MULTICAST_ALL);
378     initConstant(env, c, "IP_MULTICAST_IF", IP_MULTICAST_IF);
379     initConstant(env, c, "IP_MULTICAST_LOOP", IP_MULTICAST_LOOP);
380     initConstant(env, c, "IP_MULTICAST_TTL", IP_MULTICAST_TTL);
381     initConstant(env, c, "IP_RECVTOS", IP_RECVTOS);
382     initConstant(env, c, "IP_TOS", IP_TOS);
383     initConstant(env, c, "IP_TTL", IP_TTL);
384 #if defined(_LINUX_CAPABILITY_VERSION_3)
385     initConstant(env, c, "_LINUX_CAPABILITY_VERSION_3", _LINUX_CAPABILITY_VERSION_3);
386 #endif
387     initConstant(env, c, "MAP_FIXED", MAP_FIXED);
388     initConstant(env, c, "MAP_ANONYMOUS", MAP_ANONYMOUS);
389     initConstant(env, c, "MAP_POPULATE", MAP_POPULATE);
390     initConstant(env, c, "MAP_PRIVATE", MAP_PRIVATE);
391     initConstant(env, c, "MAP_SHARED", MAP_SHARED);
392 #if defined(MCAST_JOIN_GROUP)
393     initConstant(env, c, "MCAST_JOIN_GROUP", MCAST_JOIN_GROUP);
394 #endif
395 #if defined(MCAST_LEAVE_GROUP)
396     initConstant(env, c, "MCAST_LEAVE_GROUP", MCAST_LEAVE_GROUP);
397 #endif
398 #if defined(MCAST_JOIN_SOURCE_GROUP)
399     initConstant(env, c, "MCAST_JOIN_SOURCE_GROUP", MCAST_JOIN_SOURCE_GROUP);
400 #endif
401 #if defined(MCAST_LEAVE_SOURCE_GROUP)
402     initConstant(env, c, "MCAST_LEAVE_SOURCE_GROUP", MCAST_LEAVE_SOURCE_GROUP);
403 #endif
404 #if defined(MCAST_BLOCK_SOURCE)
405     initConstant(env, c, "MCAST_BLOCK_SOURCE", MCAST_BLOCK_SOURCE);
406 #endif
407 #if defined(MCAST_UNBLOCK_SOURCE)
408     initConstant(env, c, "MCAST_UNBLOCK_SOURCE", MCAST_UNBLOCK_SOURCE);
409 #endif
410     initConstant(env, c, "MCL_CURRENT", MCL_CURRENT);
411     initConstant(env, c, "MCL_FUTURE", MCL_FUTURE);
412 #if defined(MFD_CLOEXEC)
413     initConstant(env, c, "MFD_CLOEXEC", MFD_CLOEXEC);
414 #endif
415     initConstant(env, c, "MSG_CTRUNC", MSG_CTRUNC);
416     initConstant(env, c, "MSG_DONTROUTE", MSG_DONTROUTE);
417     initConstant(env, c, "MSG_EOR", MSG_EOR);
418     initConstant(env, c, "MSG_OOB", MSG_OOB);
419     initConstant(env, c, "MSG_PEEK", MSG_PEEK);
420     initConstant(env, c, "MSG_TRUNC", MSG_TRUNC);
421     initConstant(env, c, "MSG_WAITALL", MSG_WAITALL);
422     initConstant(env, c, "MS_ASYNC", MS_ASYNC);
423     initConstant(env, c, "MS_INVALIDATE", MS_INVALIDATE);
424     initConstant(env, c, "MS_SYNC", MS_SYNC);
425     initConstant(env, c, "NETLINK_NETFILTER", NETLINK_NETFILTER);
426     initConstant(env, c, "NETLINK_ROUTE", NETLINK_ROUTE);
427     initConstant(env, c, "NETLINK_INET_DIAG", NETLINK_INET_DIAG);
428     initConstant(env, c, "NETLINK_XFRM", NETLINK_XFRM);
429     initConstant(env, c, "NI_DGRAM", NI_DGRAM);
430     initConstant(env, c, "NI_NAMEREQD", NI_NAMEREQD);
431     initConstant(env, c, "NI_NOFQDN", NI_NOFQDN);
432     initConstant(env, c, "NI_NUMERICHOST", NI_NUMERICHOST);
433     initConstant(env, c, "NI_NUMERICSERV", NI_NUMERICSERV);
434     initConstant(env, c, "O_ACCMODE", O_ACCMODE);
435     initConstant(env, c, "O_APPEND", O_APPEND);
436     initConstant(env, c, "O_CLOEXEC", O_CLOEXEC);
437     initConstant(env, c, "O_CREAT", O_CREAT);
438     initConstant(env, c, "O_DIRECT", O_DIRECT);
439     initConstant(env, c, "O_EXCL", O_EXCL);
440     initConstant(env, c, "O_NOCTTY", O_NOCTTY);
441     initConstant(env, c, "O_NOFOLLOW", O_NOFOLLOW);
442     initConstant(env, c, "O_NONBLOCK", O_NONBLOCK);
443     initConstant(env, c, "O_RDONLY", O_RDONLY);
444     initConstant(env, c, "O_RDWR", O_RDWR);
445     initConstant(env, c, "O_SYNC", O_SYNC);
446     initConstant(env, c, "O_DSYNC", O_DSYNC);
447     initConstant(env, c, "O_TRUNC", O_TRUNC);
448     initConstant(env, c, "O_WRONLY", O_WRONLY);
449     initConstant(env, c, "POLLERR", POLLERR);
450     initConstant(env, c, "POLLHUP", POLLHUP);
451     initConstant(env, c, "POLLIN", POLLIN);
452     initConstant(env, c, "POLLNVAL", POLLNVAL);
453     initConstant(env, c, "POLLOUT", POLLOUT);
454     initConstant(env, c, "POLLPRI", POLLPRI);
455     initConstant(env, c, "POLLRDBAND", POLLRDBAND);
456     initConstant(env, c, "POLLRDNORM", POLLRDNORM);
457     initConstant(env, c, "POLLWRBAND", POLLWRBAND);
458     initConstant(env, c, "POLLWRNORM", POLLWRNORM);
459 #if defined(PR_CAP_AMBIENT)
460     initConstant(env, c, "PR_CAP_AMBIENT", PR_CAP_AMBIENT);
461 #endif
462 #if defined(PR_CAP_AMBIENT_RAISE)
463     initConstant(env, c, "PR_CAP_AMBIENT_RAISE", PR_CAP_AMBIENT_RAISE);
464 #endif
465 #if defined(PR_GET_DUMPABLE)
466     initConstant(env, c, "PR_GET_DUMPABLE", PR_GET_DUMPABLE);
467 #endif
468 #if defined(PR_SET_DUMPABLE)
469     initConstant(env, c, "PR_SET_DUMPABLE", PR_SET_DUMPABLE);
470 #endif
471 #if defined(PR_SET_NO_NEW_PRIVS)
472     initConstant(env, c, "PR_SET_NO_NEW_PRIVS", PR_SET_NO_NEW_PRIVS);
473 #endif
474     initConstant(env, c, "PROT_EXEC", PROT_EXEC);
475     initConstant(env, c, "PROT_NONE", PROT_NONE);
476     initConstant(env, c, "PROT_READ", PROT_READ);
477     initConstant(env, c, "PROT_WRITE", PROT_WRITE);
478     initConstant(env, c, "R_OK", R_OK);
479     initConstant(env, c, "RLIMIT_NOFILE", RLIMIT_NOFILE);
480 // NOTE: The RT_* constants are not preprocessor defines, they're enum
481 // members. The best we can do (barring UAPI / kernel version checks) is
482 // to hope they exist on all host linuxes we're building on. These
483 // constants have been around since 2.6.35 at least, so we should be ok.
484     initConstant(env, c, "RT_SCOPE_HOST", RT_SCOPE_HOST);
485     initConstant(env, c, "RT_SCOPE_LINK", RT_SCOPE_LINK);
486     initConstant(env, c, "RT_SCOPE_NOWHERE", RT_SCOPE_NOWHERE);
487     initConstant(env, c, "RT_SCOPE_SITE", RT_SCOPE_SITE);
488     initConstant(env, c, "RT_SCOPE_UNIVERSE", RT_SCOPE_UNIVERSE);
489     initConstant(env, c, "RTMGRP_IPV4_IFADDR", RTMGRP_IPV4_IFADDR);
490     initConstant(env, c, "RTMGRP_IPV4_MROUTE", RTMGRP_IPV4_MROUTE);
491     initConstant(env, c, "RTMGRP_IPV4_ROUTE", RTMGRP_IPV4_ROUTE);
492     initConstant(env, c, "RTMGRP_IPV4_RULE", RTMGRP_IPV4_RULE);
493     initConstant(env, c, "RTMGRP_IPV6_IFADDR", RTMGRP_IPV6_IFADDR);
494     initConstant(env, c, "RTMGRP_IPV6_IFINFO", RTMGRP_IPV6_IFINFO);
495     initConstant(env, c, "RTMGRP_IPV6_MROUTE", RTMGRP_IPV6_MROUTE);
496     initConstant(env, c, "RTMGRP_IPV6_PREFIX", RTMGRP_IPV6_PREFIX);
497     initConstant(env, c, "RTMGRP_IPV6_ROUTE", RTMGRP_IPV6_ROUTE);
498     initConstant(env, c, "RTMGRP_LINK", RTMGRP_LINK);
499     initConstant(env, c, "RTMGRP_NEIGH", RTMGRP_NEIGH);
500     initConstant(env, c, "RTMGRP_NOTIFY", RTMGRP_NOTIFY);
501     initConstant(env, c, "RTMGRP_TC", RTMGRP_TC);
502     initConstant(env, c, "SEEK_CUR", SEEK_CUR);
503     initConstant(env, c, "SEEK_END", SEEK_END);
504     initConstant(env, c, "SEEK_SET", SEEK_SET);
505     initConstant(env, c, "SHUT_RD", SHUT_RD);
506     initConstant(env, c, "SHUT_RDWR", SHUT_RDWR);
507     initConstant(env, c, "SHUT_WR", SHUT_WR);
508     initConstant(env, c, "SIGABRT", SIGABRT);
509     initConstant(env, c, "SIGALRM", SIGALRM);
510     initConstant(env, c, "SIGBUS", SIGBUS);
511     initConstant(env, c, "SIGCHLD", SIGCHLD);
512     initConstant(env, c, "SIGCONT", SIGCONT);
513     initConstant(env, c, "SIGFPE", SIGFPE);
514     initConstant(env, c, "SIGHUP", SIGHUP);
515     initConstant(env, c, "SIGILL", SIGILL);
516     initConstant(env, c, "SIGINT", SIGINT);
517     initConstant(env, c, "SIGIO", SIGIO);
518     initConstant(env, c, "SIGKILL", SIGKILL);
519     initConstant(env, c, "SIGPIPE", SIGPIPE);
520     initConstant(env, c, "SIGPROF", SIGPROF);
521 #if defined(SIGPWR)
522     initConstant(env, c, "SIGPWR", SIGPWR);
523 #endif
524     initConstant(env, c, "SIGQUIT", SIGQUIT);
525 #if defined(SIGRTMAX)
526     initConstant(env, c, "SIGRTMAX", SIGRTMAX);
527 #endif
528 #if defined(SIGRTMIN)
529     initConstant(env, c, "SIGRTMIN", SIGRTMIN);
530 #endif
531     initConstant(env, c, "SIGSEGV", SIGSEGV);
532 #if defined(SIGSTKFLT)
533     initConstant(env, c, "SIGSTKFLT", SIGSTKFLT);
534 #endif
535     initConstant(env, c, "SIGSTOP", SIGSTOP);
536     initConstant(env, c, "SIGSYS", SIGSYS);
537     initConstant(env, c, "SIGTERM", SIGTERM);
538     initConstant(env, c, "SIGTRAP", SIGTRAP);
539     initConstant(env, c, "SIGTSTP", SIGTSTP);
540     initConstant(env, c, "SIGTTIN", SIGTTIN);
541     initConstant(env, c, "SIGTTOU", SIGTTOU);
542     initConstant(env, c, "SIGURG", SIGURG);
543     initConstant(env, c, "SIGUSR1", SIGUSR1);
544     initConstant(env, c, "SIGUSR2", SIGUSR2);
545     initConstant(env, c, "SIGVTALRM", SIGVTALRM);
546     initConstant(env, c, "SIGWINCH", SIGWINCH);
547     initConstant(env, c, "SIGXCPU", SIGXCPU);
548     initConstant(env, c, "SIGXFSZ", SIGXFSZ);
549     initConstant(env, c, "SIOCGIFADDR", SIOCGIFADDR);
550     initConstant(env, c, "SIOCGIFBRDADDR", SIOCGIFBRDADDR);
551     initConstant(env, c, "SIOCGIFDSTADDR", SIOCGIFDSTADDR);
552     initConstant(env, c, "SIOCGIFNETMASK", SIOCGIFNETMASK);
553     initConstant(env, c, "SOCK_CLOEXEC", SOCK_CLOEXEC);
554     initConstant(env, c, "SOCK_DGRAM", SOCK_DGRAM);
555     initConstant(env, c, "SOCK_NONBLOCK", SOCK_NONBLOCK);
556     initConstant(env, c, "SOCK_RAW", SOCK_RAW);
557     initConstant(env, c, "SOCK_SEQPACKET", SOCK_SEQPACKET);
558     initConstant(env, c, "SOCK_STREAM", SOCK_STREAM);
559     initConstant(env, c, "SOL_SOCKET", SOL_SOCKET);
560 #if defined(SOL_UDP)
561     initConstant(env, c, "SOL_UDP", SOL_UDP);
562 #endif
563     initConstant(env, c, "SOL_PACKET", SOL_PACKET);
564 #if defined(SO_BINDTODEVICE)
565     initConstant(env, c, "SO_BINDTODEVICE", SO_BINDTODEVICE);
566 #endif
567     initConstant(env, c, "SO_BROADCAST", SO_BROADCAST);
568     initConstant(env, c, "SO_DEBUG", SO_DEBUG);
569 #if defined(SO_DOMAIN)
570     initConstant(env, c, "SO_DOMAIN", SO_DOMAIN);
571 #endif
572     initConstant(env, c, "SO_DONTROUTE", SO_DONTROUTE);
573     initConstant(env, c, "SO_ERROR", SO_ERROR);
574     initConstant(env, c, "SO_KEEPALIVE", SO_KEEPALIVE);
575     initConstant(env, c, "SO_LINGER", SO_LINGER);
576     initConstant(env, c, "SO_OOBINLINE", SO_OOBINLINE);
577 #if defined(SO_PASSCRED)
578     initConstant(env, c, "SO_PASSCRED", SO_PASSCRED);
579 #endif
580 #if defined(SO_PEERCRED)
581     initConstant(env, c, "SO_PEERCRED", SO_PEERCRED);
582 #endif
583 #if defined(SO_PROTOCOL)
584     initConstant(env, c, "SO_PROTOCOL", SO_PROTOCOL);
585 #endif
586     initConstant(env, c, "SO_RCVBUF", SO_RCVBUF);
587     initConstant(env, c, "SO_RCVLOWAT", SO_RCVLOWAT);
588     initConstant(env, c, "SO_RCVTIMEO", SO_RCVTIMEO);
589     initConstant(env, c, "SO_REUSEADDR", SO_REUSEADDR);
590     initConstant(env, c, "SO_SNDBUF", SO_SNDBUF);
591     initConstant(env, c, "SO_SNDLOWAT", SO_SNDLOWAT);
592     initConstant(env, c, "SO_SNDTIMEO", SO_SNDTIMEO);
593     initConstant(env, c, "SO_TYPE", SO_TYPE);
594 #if defined(PACKET_IGNORE_OUTGOING)
595     initConstant(env, c, "PACKET_IGNORE_OUTGOING", PACKET_IGNORE_OUTGOING);
596 #endif
597     initConstant(env, c, "SPLICE_F_MOVE", SPLICE_F_MOVE);
598     initConstant(env, c, "SPLICE_F_NONBLOCK", SPLICE_F_NONBLOCK);
599     initConstant(env, c, "SPLICE_F_MORE", SPLICE_F_MORE);
600     initConstant(env, c, "STDERR_FILENO", STDERR_FILENO);
601     initConstant(env, c, "STDIN_FILENO", STDIN_FILENO);
602     initConstant(env, c, "STDOUT_FILENO", STDOUT_FILENO);
603     initConstant(env, c, "ST_MANDLOCK", ST_MANDLOCK);
604     initConstant(env, c, "ST_NOATIME", ST_NOATIME);
605     initConstant(env, c, "ST_NODEV", ST_NODEV);
606     initConstant(env, c, "ST_NODIRATIME", ST_NODIRATIME);
607     initConstant(env, c, "ST_NOEXEC", ST_NOEXEC);
608     initConstant(env, c, "ST_NOSUID", ST_NOSUID);
609     initConstant(env, c, "ST_RDONLY", ST_RDONLY);
610     initConstant(env, c, "ST_RELATIME", ST_RELATIME);
611     initConstant(env, c, "ST_SYNCHRONOUS", ST_SYNCHRONOUS);
612     initConstant(env, c, "S_IFBLK", S_IFBLK);
613     initConstant(env, c, "S_IFCHR", S_IFCHR);
614     initConstant(env, c, "S_IFDIR", S_IFDIR);
615     initConstant(env, c, "S_IFIFO", S_IFIFO);
616     initConstant(env, c, "S_IFLNK", S_IFLNK);
617     initConstant(env, c, "S_IFMT", S_IFMT);
618     initConstant(env, c, "S_IFREG", S_IFREG);
619     initConstant(env, c, "S_IFSOCK", S_IFSOCK);
620     initConstant(env, c, "S_IRGRP", S_IRGRP);
621     initConstant(env, c, "S_IROTH", S_IROTH);
622     initConstant(env, c, "S_IRUSR", S_IRUSR);
623     initConstant(env, c, "S_IRWXG", S_IRWXG);
624     initConstant(env, c, "S_IRWXO", S_IRWXO);
625     initConstant(env, c, "S_IRWXU", S_IRWXU);
626     initConstant(env, c, "S_ISGID", S_ISGID);
627     initConstant(env, c, "S_ISUID", S_ISUID);
628     initConstant(env, c, "S_ISVTX", S_ISVTX);
629     initConstant(env, c, "S_IWGRP", S_IWGRP);
630     initConstant(env, c, "S_IWOTH", S_IWOTH);
631     initConstant(env, c, "S_IWUSR", S_IWUSR);
632     initConstant(env, c, "S_IXGRP", S_IXGRP);
633     initConstant(env, c, "S_IXOTH", S_IXOTH);
634     initConstant(env, c, "S_IXUSR", S_IXUSR);
635     initConstant(env, c, "TCP_NODELAY", TCP_NODELAY);
636 #if defined(TCP_USER_TIMEOUT)
637     initConstant(env, c, "TCP_USER_TIMEOUT", TCP_USER_TIMEOUT);
638 #endif
639     initConstant(env, c, "TIOCOUTQ", TIOCOUTQ);
640     initConstant(env, c, "UDP_ENCAP", UDP_ENCAP);
641     initConstant(env, c, "UDP_ENCAP_ESPINUDP_NON_IKE", UDP_ENCAP_ESPINUDP_NON_IKE);
642     initConstant(env, c, "UDP_ENCAP_ESPINUDP", UDP_ENCAP_ESPINUDP);
643 #if defined(UDP_GRO)
644     initConstant(env, c, "UDP_GRO", UDP_GRO);
645 #endif
646 #if defined(UDP_SEGMENT)
647     initConstant(env, c, "UDP_SEGMENT", UDP_SEGMENT);
648 #endif
649     // UNIX_PATH_MAX is mentioned in some versions of unix(7), but not actually declared.
650     initConstant(env, c, "UNIX_PATH_MAX", sizeof(sockaddr_un::sun_path));
651     initConstant(env, c, "WCONTINUED", WCONTINUED);
652     initConstant(env, c, "WEXITED", WEXITED);
653     initConstant(env, c, "WNOHANG", WNOHANG);
654     initConstant(env, c, "WNOWAIT", WNOWAIT);
655     initConstant(env, c, "WSTOPPED", WSTOPPED);
656     initConstant(env, c, "WUNTRACED", WUNTRACED);
657     initConstant(env, c, "W_OK", W_OK);
658     initConstant(env, c, "XATTR_CREATE", XATTR_CREATE);
659     initConstant(env, c, "XATTR_REPLACE", XATTR_REPLACE);
660     initConstant(env, c, "X_OK", X_OK);
661     initConstant(env, c, "_SC_2_CHAR_TERM", _SC_2_CHAR_TERM);
662     initConstant(env, c, "_SC_2_C_BIND", _SC_2_C_BIND);
663     initConstant(env, c, "_SC_2_C_DEV", _SC_2_C_DEV);
664 #if defined(_SC_2_C_VERSION)
665     initConstant(env, c, "_SC_2_C_VERSION", _SC_2_C_VERSION);
666 #endif
667     initConstant(env, c, "_SC_2_FORT_DEV", _SC_2_FORT_DEV);
668     initConstant(env, c, "_SC_2_FORT_RUN", _SC_2_FORT_RUN);
669     initConstant(env, c, "_SC_2_LOCALEDEF", _SC_2_LOCALEDEF);
670     initConstant(env, c, "_SC_2_SW_DEV", _SC_2_SW_DEV);
671     initConstant(env, c, "_SC_2_UPE", _SC_2_UPE);
672     initConstant(env, c, "_SC_2_VERSION", _SC_2_VERSION);
673     initConstant(env, c, "_SC_AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX);
674     initConstant(env, c, "_SC_AIO_MAX", _SC_AIO_MAX);
675     initConstant(env, c, "_SC_AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX);
676     initConstant(env, c, "_SC_ARG_MAX", _SC_ARG_MAX);
677     initConstant(env, c, "_SC_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO);
678     initConstant(env, c, "_SC_ATEXIT_MAX", _SC_ATEXIT_MAX);
679 #if defined(_SC_AVPHYS_PAGES)
680     initConstant(env, c, "_SC_AVPHYS_PAGES", _SC_AVPHYS_PAGES);
681 #endif
682     initConstant(env, c, "_SC_BC_BASE_MAX", _SC_BC_BASE_MAX);
683     initConstant(env, c, "_SC_BC_DIM_MAX", _SC_BC_DIM_MAX);
684     initConstant(env, c, "_SC_BC_SCALE_MAX", _SC_BC_SCALE_MAX);
685     initConstant(env, c, "_SC_BC_STRING_MAX", _SC_BC_STRING_MAX);
686     initConstant(env, c, "_SC_CHILD_MAX", _SC_CHILD_MAX);
687     initConstant(env, c, "_SC_CLK_TCK", _SC_CLK_TCK);
688     initConstant(env, c, "_SC_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX);
689     initConstant(env, c, "_SC_DELAYTIMER_MAX", _SC_DELAYTIMER_MAX);
690     initConstant(env, c, "_SC_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX);
691     initConstant(env, c, "_SC_FSYNC", _SC_FSYNC);
692     initConstant(env, c, "_SC_GETGR_R_SIZE_MAX", _SC_GETGR_R_SIZE_MAX);
693     initConstant(env, c, "_SC_GETPW_R_SIZE_MAX", _SC_GETPW_R_SIZE_MAX);
694     initConstant(env, c, "_SC_IOV_MAX", _SC_IOV_MAX);
695     initConstant(env, c, "_SC_JOB_CONTROL", _SC_JOB_CONTROL);
696     initConstant(env, c, "_SC_LINE_MAX", _SC_LINE_MAX);
697     initConstant(env, c, "_SC_LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX);
698     initConstant(env, c, "_SC_MAPPED_FILES", _SC_MAPPED_FILES);
699     initConstant(env, c, "_SC_MEMLOCK", _SC_MEMLOCK);
700     initConstant(env, c, "_SC_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE);
701     initConstant(env, c, "_SC_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION);
702     initConstant(env, c, "_SC_MESSAGE_PASSING", _SC_MESSAGE_PASSING);
703     initConstant(env, c, "_SC_MQ_OPEN_MAX", _SC_MQ_OPEN_MAX);
704     initConstant(env, c, "_SC_MQ_PRIO_MAX", _SC_MQ_PRIO_MAX);
705     initConstant(env, c, "_SC_NGROUPS_MAX", _SC_NGROUPS_MAX);
706     initConstant(env, c, "_SC_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF);
707     initConstant(env, c, "_SC_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN);
708     initConstant(env, c, "_SC_OPEN_MAX", _SC_OPEN_MAX);
709     initConstant(env, c, "_SC_PAGESIZE", _SC_PAGESIZE);
710     initConstant(env, c, "_SC_PAGE_SIZE", _SC_PAGE_SIZE);
711     initConstant(env, c, "_SC_PASS_MAX", _SC_PASS_MAX);
712 #if defined(_SC_PHYS_PAGES)
713     initConstant(env, c, "_SC_PHYS_PAGES", _SC_PHYS_PAGES);
714 #endif
715     initConstant(env, c, "_SC_PRIORITIZED_IO", _SC_PRIORITIZED_IO);
716     initConstant(env, c, "_SC_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING);
717     initConstant(env, c, "_SC_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS);
718     initConstant(env, c, "_SC_RE_DUP_MAX", _SC_RE_DUP_MAX);
719     initConstant(env, c, "_SC_RTSIG_MAX", _SC_RTSIG_MAX);
720     initConstant(env, c, "_SC_SAVED_IDS", _SC_SAVED_IDS);
721     initConstant(env, c, "_SC_SEMAPHORES", _SC_SEMAPHORES);
722     initConstant(env, c, "_SC_SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX);
723     initConstant(env, c, "_SC_SEM_VALUE_MAX", _SC_SEM_VALUE_MAX);
724     initConstant(env, c, "_SC_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS);
725     initConstant(env, c, "_SC_SIGQUEUE_MAX", _SC_SIGQUEUE_MAX);
726     initConstant(env, c, "_SC_STREAM_MAX", _SC_STREAM_MAX);
727     initConstant(env, c, "_SC_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO);
728     initConstant(env, c, "_SC_THREADS", _SC_THREADS);
729     initConstant(env, c, "_SC_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR);
730     initConstant(env, c, "_SC_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE);
731     initConstant(env, c, "_SC_THREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS);
732     initConstant(env, c, "_SC_THREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX);
733     initConstant(env, c, "_SC_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING);
734     initConstant(env, c, "_SC_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT);
735     initConstant(env, c, "_SC_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT);
736     initConstant(env, c, "_SC_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS);
737     initConstant(env, c, "_SC_THREAD_STACK_MIN", _SC_THREAD_STACK_MIN);
738     initConstant(env, c, "_SC_THREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX);
739     initConstant(env, c, "_SC_TIMERS", _SC_TIMERS);
740     initConstant(env, c, "_SC_TIMER_MAX", _SC_TIMER_MAX);
741     initConstant(env, c, "_SC_TTY_NAME_MAX", _SC_TTY_NAME_MAX);
742     initConstant(env, c, "_SC_TZNAME_MAX", _SC_TZNAME_MAX);
743     initConstant(env, c, "_SC_VERSION", _SC_VERSION);
744     initConstant(env, c, "_SC_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32);
745     initConstant(env, c, "_SC_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG);
746     initConstant(env, c, "_SC_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64);
747     initConstant(env, c, "_SC_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG);
748     initConstant(env, c, "_SC_XOPEN_CRYPT", _SC_XOPEN_CRYPT);
749     initConstant(env, c, "_SC_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N);
750     initConstant(env, c, "_SC_XOPEN_LEGACY", _SC_XOPEN_LEGACY);
751     initConstant(env, c, "_SC_XOPEN_REALTIME", _SC_XOPEN_REALTIME);
752     initConstant(env, c, "_SC_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS);
753     initConstant(env, c, "_SC_XOPEN_SHM", _SC_XOPEN_SHM);
754     initConstant(env, c, "_SC_XOPEN_UNIX", _SC_XOPEN_UNIX);
755     initConstant(env, c, "_SC_XOPEN_VERSION", _SC_XOPEN_VERSION);
756     initConstant(env, c, "_SC_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION);
757 }
758 
759 static JNINativeMethod gMethods[] = {
760     NATIVE_METHOD(OsConstants, initConstants, "()V"),
761 };
762 
register_android_system_OsConstants(JNIEnv * env)763 void register_android_system_OsConstants(JNIEnv* env) {
764     // [ravenwood-change] -- method moved to the nested class
765     jniRegisterNativeMethods(env, "android/system/OsConstants$Native", gMethods, NELEM(gMethods));
766 }
767