windows.c: Return nil,err from functions instead of throwing errors.
authorWaqas Hussain <waqas20@gmail.com>
Sat, 29 Jan 2011 04:40:43 +0500
changeset 4128 b6d072a3668d
parent 4127 f80b7a92da67
child 4129 c86b68abe12e
windows.c: Return nil,err from functions instead of throwing errors.
util-src/windows.c
--- a/util-src/windows.c	Wed Jan 26 13:23:39 2011 +0000
+++ b/util-src/windows.c	Sat Jan 29 04:40:43 2011 +0500
@@ -38,15 +38,16 @@
 		}
 		return 1;
 	} else {
-		luaL_error(L, "DnsQueryConfig returned %d", status);
-		return 0; // unreachable, but prevents a compiler warning
+		lua_pushnil(L);
+		lua_pushfstring(L, "DnsQueryConfig returned %d", status);
+		return 2;
 	}
 }
 
-static void lassert(lua_State *L, BOOL test, char* string) {
-	if (!test) {
-		luaL_error(L, "%s: %d", string, GetLastError());
-	}
+static int lerror(lua_State *L, char* string) {
+	lua_pushnil(L);
+	lua_pushfstring(L, "%s: %d", string, GetLastError());
+	return 2;
 }
 
 static int Lget_consolecolor(lua_State *L) {
@@ -55,9 +56,9 @@
 	
 	CONSOLE_SCREEN_BUFFER_INFO info;
 	
-	lassert(L, console != INVALID_HANDLE_VALUE, "GetStdHandle");
-	lassert(L, GetConsoleScreenBufferInfo(console, &info), "GetConsoleScreenBufferInfo");
-	lassert(L, ReadConsoleOutputAttribute(console, &color, sizeof(WORD), info.dwCursorPosition, &read_len), "ReadConsoleOutputAttribute");
+	if (console == INVALID_HANDLE_VALUE) return lerror(L, "GetStdHandle");
+	if (!GetConsoleScreenBufferInfo(console, &info)) return lerror(L, "GetConsoleScreenBufferInfo");
+	if (!ReadConsoleOutputAttribute(console, &color, sizeof(WORD), info.dwCursorPosition, &read_len)) return lerror(L, "ReadConsoleOutputAttribute");
 
 	lua_pushnumber(L, color);
 	return 1;
@@ -65,9 +66,10 @@
 static int Lset_consolecolor(lua_State *L) {
 	int color = luaL_checkint(L, 1);
 	HWND console = GetStdHandle(STD_OUTPUT_HANDLE);
-	lassert(L, console != INVALID_HANDLE_VALUE, "GetStdHandle");
-	lassert(L, SetConsoleTextAttribute(console, color), "SetConsoleTextAttribute");
-	return 0;
+	if (console == INVALID_HANDLE_VALUE) return lerror(L, "GetStdHandle");
+	if (!SetConsoleTextAttribute(console, color)) return lerror(L, "SetConsoleTextAttribute");
+	lua_pushboolean(L, 1);
+	return 1;
 }
 
 static const luaL_Reg Reg[] =