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