]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - stand/liblua/lerrno.c
ident(1): Normalizing date format
[FreeBSD/FreeBSD.git] / stand / liblua / lerrno.c
1 /*-
2  * Copyright (c) 2018 Conrad Meyer <cem@FreeBSD.org>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  */
26
27 #include <sys/cdefs.h>
28 __FBSDID("$FreeBSD$");
29
30 #define _WANT_KERNEL_ERRNO      1
31 #include <errno.h>
32
33 #include <lua.h>
34 #include "lauxlib.h"
35 #include "lerrno.h"
36
37 #ifndef nitems
38 #define nitems(x)       (sizeof((x)) / sizeof((x)[0]))
39 #endif
40
41 /*
42  * Populated with:
43  * $ egrep "^#define.E" sys/sys/errno.h | \
44  *   awk '{ print "\tENTRY(" $2 ")," }' >> lerrno.c
45  */
46 #define ENTRY(name)     { #name, name }
47 static const struct err_name_number {
48         const char *err_name;
49         int err_num;
50 } errnoconstants[] = {
51         ENTRY(EPERM),
52         ENTRY(ENOENT),
53         ENTRY(ESRCH),
54         ENTRY(EINTR),
55         ENTRY(EIO),
56         ENTRY(ENXIO),
57         ENTRY(E2BIG),
58         ENTRY(ENOEXEC),
59         ENTRY(EBADF),
60         ENTRY(ECHILD),
61         ENTRY(EDEADLK),
62         ENTRY(ENOMEM),
63         ENTRY(EACCES),
64         ENTRY(EFAULT),
65         ENTRY(ENOTBLK),
66         ENTRY(EBUSY),
67         ENTRY(EEXIST),
68         ENTRY(EXDEV),
69         ENTRY(ENODEV),
70         ENTRY(ENOTDIR),
71         ENTRY(EISDIR),
72         ENTRY(EINVAL),
73         ENTRY(ENFILE),
74         ENTRY(EMFILE),
75         ENTRY(ENOTTY),
76         ENTRY(ETXTBSY),
77         ENTRY(EFBIG),
78         ENTRY(ENOSPC),
79         ENTRY(ESPIPE),
80         ENTRY(EROFS),
81         ENTRY(EMLINK),
82         ENTRY(EPIPE),
83         ENTRY(EDOM),
84         ENTRY(ERANGE),
85         ENTRY(EAGAIN),
86         ENTRY(EWOULDBLOCK),
87         ENTRY(EINPROGRESS),
88         ENTRY(EALREADY),
89         ENTRY(ENOTSOCK),
90         ENTRY(EDESTADDRREQ),
91         ENTRY(EMSGSIZE),
92         ENTRY(EPROTOTYPE),
93         ENTRY(ENOPROTOOPT),
94         ENTRY(EPROTONOSUPPORT),
95         ENTRY(ESOCKTNOSUPPORT),
96         ENTRY(EOPNOTSUPP),
97         ENTRY(ENOTSUP),
98         ENTRY(EPFNOSUPPORT),
99         ENTRY(EAFNOSUPPORT),
100         ENTRY(EADDRINUSE),
101         ENTRY(EADDRNOTAVAIL),
102         ENTRY(ENETDOWN),
103         ENTRY(ENETUNREACH),
104         ENTRY(ENETRESET),
105         ENTRY(ECONNABORTED),
106         ENTRY(ECONNRESET),
107         ENTRY(ENOBUFS),
108         ENTRY(EISCONN),
109         ENTRY(ENOTCONN),
110         ENTRY(ESHUTDOWN),
111         ENTRY(ETOOMANYREFS),
112         ENTRY(ETIMEDOUT),
113         ENTRY(ECONNREFUSED),
114         ENTRY(ELOOP),
115         ENTRY(ENAMETOOLONG),
116         ENTRY(EHOSTDOWN),
117         ENTRY(EHOSTUNREACH),
118         ENTRY(ENOTEMPTY),
119         ENTRY(EPROCLIM),
120         ENTRY(EUSERS),
121         ENTRY(EDQUOT),
122         ENTRY(ESTALE),
123         ENTRY(EREMOTE),
124         ENTRY(EBADRPC),
125         ENTRY(ERPCMISMATCH),
126         ENTRY(EPROGUNAVAIL),
127         ENTRY(EPROGMISMATCH),
128         ENTRY(EPROCUNAVAIL),
129         ENTRY(ENOLCK),
130         ENTRY(ENOSYS),
131         ENTRY(EFTYPE),
132         ENTRY(EAUTH),
133         ENTRY(ENEEDAUTH),
134         ENTRY(EIDRM),
135         ENTRY(ENOMSG),
136         ENTRY(EOVERFLOW),
137         ENTRY(ECANCELED),
138         ENTRY(EILSEQ),
139         ENTRY(ENOATTR),
140         ENTRY(EDOOFUS),
141         ENTRY(EBADMSG),
142         ENTRY(EMULTIHOP),
143         ENTRY(ENOLINK),
144         ENTRY(EPROTO),
145         ENTRY(ENOTCAPABLE),
146         ENTRY(ECAPMODE),
147         ENTRY(ENOTRECOVERABLE),
148         ENTRY(EOWNERDEAD),
149         ENTRY(EINTEGRITY),
150         ENTRY(ELAST),
151         ENTRY(ERESTART),
152         ENTRY(EJUSTRETURN),
153         ENTRY(ENOIOCTL),
154         ENTRY(EDIRIOCTL),
155         ENTRY(ERELOOKUP),
156 };
157 #undef ENTRY
158
159 static void
160 lerrno_register(lua_State *L)
161 {
162         size_t i;
163
164         for (i = 0; i < nitems(errnoconstants); i++) {
165                 lua_pushinteger(L, errnoconstants[i].err_num);
166                 lua_setfield(L, -2, errnoconstants[i].err_name);
167         }
168 }
169
170 static const struct luaL_Reg errnolib[] = {
171         /* Extra bogus entry required by luaL_newlib API */
172         { NULL, NULL },
173 };
174
175 int
176 luaopen_errno(lua_State *L)
177 {
178         luaL_newlib(L, errnolib);
179         lerrno_register(L);
180         return 1;
181 }