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