util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
authorKim Alvefur <zash@zash.se>
Sun, 07 Jun 2020 02:25:56 +0200
changeset 10925 6eb5d2bb11af
parent 10924 c171b4c59bd1
child 10926 7d3dbb9eb3eb
util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions Actually just an alias of pushnil, but it does make it more obvious where the failure conditions are, which is good for readability.
util-src/encodings.c
util-src/net.c
util-src/poll.c
util-src/pposix.c
util-src/ringbuffer.c
util-src/windows.c
--- a/util-src/encodings.c	Sun Jun 07 02:14:55 2020 +0200
+++ b/util-src/encodings.c	Sun Jun 07 02:25:56 2020 +0200
@@ -24,6 +24,9 @@
 #if (LUA_VERSION_NUM == 501)
 #define luaL_setfuncs(L, R, N) luaL_register(L, NULL, R)
 #endif
+#if (LUA_VERSION_NUM < 504)
+#define luaL_pushfail lua_pushnil
+#endif
 
 /***************** BASE64 *****************/
 
@@ -247,7 +250,7 @@
 	size_t len;
 
 	if(!check_utf8(L, 1, &len)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushliteral(L, "invalid utf8");
 		return 2;
 	}
@@ -286,7 +289,7 @@
 	input = luaL_checklstring(L, 1, &input_len);
 
 	if(input_len >= 1024) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	}
 
@@ -301,14 +304,14 @@
 	u_strFromUTF8(unprepped, 1024, &unprepped_len, input, input_len, &err);
 
 	if(U_FAILURE(err)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	}
 
 	prepped_len = usprep_prepare(profile, unprepped, unprepped_len, prepped, 1024, flags, NULL, &err);
 
 	if(U_FAILURE(err)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	} else {
 		u_strToUTF8(output, 1024, &output_len, prepped, prepped_len, &err);
@@ -316,7 +319,7 @@
 		if(U_SUCCESS(err) && output_len < 1024) {
 			lua_pushlstring(L, output, output_len);
 		} else {
-			lua_pushnil(L);
+			luaL_pushfail(L);
 		}
 
 		return 1;
@@ -414,7 +417,7 @@
 	}
 
 	if(s == NULL || len >= 1024 || len != strlen(s)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1; /* TODO return error message */
 	}
 
@@ -425,7 +428,7 @@
 		lua_pushstring(L, string);
 		return 1;
 	} else {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1; /* TODO return error message */
 	}
 }
@@ -464,7 +467,7 @@
 	u_strFromUTF8(ustr, 1024, &ulen, s, len, &err);
 
 	if(U_FAILURE(err)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	}
 
@@ -472,7 +475,7 @@
 	dest_len = uidna_nameToASCII(icu_idna2008, ustr, ulen, dest, 256, &info, &err);
 
 	if(U_FAILURE(err) || info.errors) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	} else {
 		u_strToUTF8(output, 1024, &output_len, dest, dest_len, &err);
@@ -480,7 +483,7 @@
 		if(U_SUCCESS(err) && output_len < 1024) {
 			lua_pushlstring(L, output, output_len);
 		} else {
-			lua_pushnil(L);
+			luaL_pushfail(L);
 		}
 
 		return 1;
@@ -499,7 +502,7 @@
 	u_strFromUTF8(ustr, 1024, &ulen, s, len, &err);
 
 	if(U_FAILURE(err)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	}
 
@@ -507,7 +510,7 @@
 	dest_len = uidna_nameToUnicode(icu_idna2008, ustr, ulen, dest, 1024, &info, &err);
 
 	if(U_FAILURE(err) || info.errors) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	} else {
 		u_strToUTF8(output, 1024, &output_len, dest, dest_len, &err);
@@ -515,7 +518,7 @@
 		if(U_SUCCESS(err) && output_len < 1024) {
 			lua_pushlstring(L, output, output_len);
 		} else {
-			lua_pushnil(L);
+			luaL_pushfail(L);
 		}
 
 		return 1;
@@ -534,14 +537,14 @@
 	u_strFromUTF8(ustr, 1024, &ulen, s, len, &err);
 
 	if(U_FAILURE(err)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	}
 
 	dest_len = uspoof_getSkeleton(icu_spoofcheck, 0, ustr, ulen, dest, 1024, &err);
 
 	if(U_FAILURE(err)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	}
 
@@ -552,7 +555,7 @@
 		return 1;
 	}
 
-	lua_pushnil(L);
+	luaL_pushfail(L);
 	return 1;
 }
 
@@ -569,7 +572,7 @@
 	int ret;
 
 	if(s == NULL || len != strlen(s)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1; /* TODO return error message */
 	}
 
@@ -580,7 +583,7 @@
 		idn_free(output);
 		return 1;
 	} else {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		idn_free(output);
 		return 1; /* TODO return error message */
 	}
@@ -597,7 +600,7 @@
 		idn_free(output);
 		return 1;
 	} else {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		idn_free(output);
 		return 1; /* TODO return error message */
 	}
--- a/util-src/net.c	Sun Jun 07 02:14:55 2020 +0200
+++ b/util-src/net.c	Sun Jun 07 02:25:56 2020 +0200
@@ -33,6 +33,9 @@
 #if (LUA_VERSION_NUM == 501)
 #define luaL_setfuncs(L, R, N) luaL_register(L, NULL, R)
 #endif
+#if (LUA_VERSION_NUM < 504)
+#define luaL_pushfail lua_pushnil
+#endif
 
 /* Enumerate all locally configured IP addresses */
 
@@ -59,7 +62,7 @@
 #ifndef _WIN32
 
 	if(getifaddrs(&addr) < 0) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushfstring(L, "getifaddrs failed (%d): %s", errno,
 		                strerror(errno));
 		return 2;
@@ -141,14 +144,14 @@
 
 		case -1:
 			errno_ = errno;
-			lua_pushnil(L);
+			luaL_pushfail(L);
 			lua_pushstring(L, strerror(errno_));
 			lua_pushinteger(L, errno_);
 			return 3;
 
 		default:
 		case 0:
-			lua_pushnil(L);
+			luaL_pushfail(L);
 			lua_pushstring(L, strerror(EINVAL));
 			lua_pushinteger(L, EINVAL);
 			return 3;
@@ -170,7 +173,7 @@
 		family = AF_INET;
 	}
 	else {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(EAFNOSUPPORT));
 		lua_pushinteger(L, EAFNOSUPPORT);
 		return 3;
@@ -179,7 +182,7 @@
 	if(!inet_ntop(family, ipaddr, buf, INET6_ADDRSTRLEN))
 	{
 		errno_ = errno;
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(errno_));
 		lua_pushinteger(L, errno_);
 		return 3;
--- a/util-src/poll.c	Sun Jun 07 02:14:55 2020 +0200
+++ b/util-src/poll.c	Sun Jun 07 02:25:56 2020 +0200
@@ -37,6 +37,9 @@
 #if (LUA_VERSION_NUM == 501)
 #define luaL_setmetatable(L, tname) luaL_getmetatable(L, tname); lua_setmetatable(L, -2)
 #endif
+#if (LUA_VERSION_NUM < 504)
+#define luaL_pushfail lua_pushnil
+#endif
 
 /*
  * Structure to keep state for each type of API
@@ -67,7 +70,7 @@
 	int wantwrite = lua_toboolean(L, 4);
 
 	if(fd < 0) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(EBADF));
 		lua_pushinteger(L, EBADF);
 		return 3;
@@ -84,7 +87,7 @@
 
 	if(ret < 0) {
 		ret = errno;
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(ret));
 		lua_pushinteger(L, ret);
 		return 3;
@@ -96,14 +99,14 @@
 #else
 
 	if(fd > FD_SETSIZE) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(EBADF));
 		lua_pushinteger(L, EBADF);
 		return 3;
 	}
 
 	if(FD_ISSET(fd, &state->all)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(EEXIST));
 		lua_pushinteger(L, EEXIST);
 		return 3;
@@ -160,7 +163,7 @@
 	}
 	else {
 		ret = errno;
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(ret));
 		lua_pushinteger(L, ret);
 		return 3;
@@ -169,7 +172,7 @@
 #else
 
 	if(!FD_ISSET(fd, &state->all)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(ENOENT));
 		lua_pushinteger(L, ENOENT);
 		return 3;
@@ -218,7 +221,7 @@
 	}
 	else {
 		ret = errno;
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(ret));
 		lua_pushinteger(L, ret);
 		return 3;
@@ -227,7 +230,7 @@
 #else
 
 	if(!FD_ISSET(fd, &state->all)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(ENOENT));
 		lua_pushinteger(L, ENOENT);
 		return 3;
@@ -314,18 +317,20 @@
 #endif
 
 	if(ret == 0) {
+		/* Is this an error? */
 		lua_pushnil(L);
 		lua_pushstring(L, "timeout");
 		return 2;
 	}
 	else if(ret < 0 && errno == EINTR) {
+		/* Is this an error? */
 		lua_pushnil(L);
 		lua_pushstring(L, "signal");
 		return 2;
 	}
 	else if(ret < 0) {
 		ret = errno;
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(ret));
 		lua_pushinteger(L, ret);
 		return 3;
@@ -399,7 +404,7 @@
 	int epoll_fd = epoll_create1(EPOLL_CLOEXEC);
 
 	if(epoll_fd <= 0) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(errno));
 		lua_pushinteger(L, errno);
 		return 3;
--- a/util-src/pposix.c	Sun Jun 07 02:14:55 2020 +0200
+++ b/util-src/pposix.c	Sun Jun 07 02:25:56 2020 +0200
@@ -64,6 +64,9 @@
 #if (LUA_VERSION_NUM < 503)
 #define lua_isinteger(L, n) lua_isnumber(L, n)
 #endif
+#if (LUA_VERSION_NUM < 504)
+#define luaL_pushfail lua_pushnil
+#endif
 
 #include <fcntl.h>
 #if defined(__linux__)
@@ -413,7 +416,7 @@
 	struct passwd *p;
 
 	if(!lua_isstring(L, 1)) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, "invalid-username");
 		return 2;
 	}
@@ -421,7 +424,7 @@
 	p = getpwnam(lua_tostring(L, 1));
 
 	if(!p) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, "no-such-user");
 		return 2;
 	}
@@ -440,7 +443,7 @@
 			break;
 
 		default:
-			lua_pushnil(L);
+			luaL_pushfail(L);
 			lua_pushstring(L, "invalid-gid");
 			return 2;
 	}
@@ -450,17 +453,17 @@
 	if(ret) {
 		switch(errno) {
 			case ENOMEM:
-				lua_pushnil(L);
+				luaL_pushfail(L);
 				lua_pushstring(L, "no-memory");
 				break;
 
 			case EPERM:
-				lua_pushnil(L);
+				luaL_pushfail(L);
 				lua_pushstring(L, "permission-denied");
 				break;
 
 			default:
-				lua_pushnil(L);
+				luaL_pushfail(L);
 				lua_pushstring(L, "unknown-error");
 		}
 	} else {
@@ -672,7 +675,7 @@
 	struct utsname uname_info;
 
 	if(uname(&uname_info) != 0) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(errno));
 		return 2;
 	}
@@ -702,7 +705,7 @@
 	/* If the second argument is nil or nothing, unset the var */
 	if(lua_isnoneornil(L, 2)) {
 		if(unsetenv(var) != 0) {
-			lua_pushnil(L);
+			luaL_pushfail(L);
 			lua_pushstring(L, strerror(errno));
 			return 2;
 		}
@@ -714,7 +717,7 @@
 	value = luaL_checkstring(L, 2);
 
 	if(setenv(var, value, 1) != 0) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushstring(L, strerror(errno));
 		return 2;
 	}
@@ -776,7 +779,7 @@
 
 			case ENOSPC: /* No space left */
 			default: /* Other issues */
-				lua_pushnil(L);
+				luaL_pushfail(L);
 				lua_pushstring(L, strerror(err));
 				lua_pushinteger(L, err);
 				return 3;
@@ -803,7 +806,7 @@
 		return luaL_error(L, "atomic_append() failed in ftruncate(): %s", strerror(errno));
 	}
 
-	lua_pushnil(L);
+	luaL_pushfail(L);
 	lua_pushstring(L, strerror(err));
 	lua_pushinteger(L, err);
 	return 3;
--- a/util-src/ringbuffer.c	Sun Jun 07 02:14:55 2020 +0200
+++ b/util-src/ringbuffer.c	Sun Jun 07 02:25:56 2020 +0200
@@ -6,6 +6,10 @@
 #include <lua.h>
 #include <lauxlib.h>
 
+#if (LUA_VERSION_NUM < 504)
+#define luaL_pushfail lua_pushnil
+#endif
+
 typedef struct {
 	size_t rpos; /* read position */
 	size_t wpos; /* write position */
@@ -152,7 +156,7 @@
 	int peek = lua_toboolean(L, 3);
 
 	if(r > b->blen) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	}
 
@@ -204,7 +208,7 @@
 
 	/* Does `l` bytes fit? */
 	if((l + b->blen) > b->alen) {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		return 1;
 	}
 
--- a/util-src/windows.c	Sun Jun 07 02:14:55 2020 +0200
+++ b/util-src/windows.c	Sun Jun 07 02:25:56 2020 +0200
@@ -22,6 +22,9 @@
 #if (LUA_VERSION_NUM == 501)
 #define luaL_setfuncs(L, R, N) luaL_register(L, NULL, R)
 #endif
+#if (LUA_VERSION_NUM < 504)
+#define luaL_pushfail lua_pushnil
+#endif
 
 static int Lget_nameservers(lua_State *L) {
 	char stack_buffer[1024]; // stack allocated buffer
@@ -45,14 +48,14 @@
 
 		return 1;
 	} else {
-		lua_pushnil(L);
+		luaL_pushfail(L);
 		lua_pushfstring(L, "DnsQueryConfig returned %d", status);
 		return 2;
 	}
 }
 
 static int lerror(lua_State *L, char *string) {
-	lua_pushnil(L);
+	luaL_pushfail(L);
 	lua_pushfstring(L, "%s: %d", string, GetLastError());
 	return 2;
 }