Software / code / prosody
Comparison
util-src/windows.c @ 4128:b6d072a3668d
windows.c: Return nil,err from functions instead of throwing errors.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sat, 29 Jan 2011 04:40:43 +0500 |
| parent | 3868:72d68f996f45 |
| child | 5864:22b1d18eb919 |
comparison
equal
deleted
inserted
replaced
| 4127:f80b7a92da67 | 4128:b6d072a3668d |
|---|---|
| 36 lua_pushstring(L, ip_str); | 36 lua_pushstring(L, ip_str); |
| 37 lua_rawseti(L, -2, i+1); | 37 lua_rawseti(L, -2, i+1); |
| 38 } | 38 } |
| 39 return 1; | 39 return 1; |
| 40 } else { | 40 } else { |
| 41 luaL_error(L, "DnsQueryConfig returned %d", status); | 41 lua_pushnil(L); |
| 42 return 0; // unreachable, but prevents a compiler warning | 42 lua_pushfstring(L, "DnsQueryConfig returned %d", status); |
| 43 return 2; | |
| 43 } | 44 } |
| 44 } | 45 } |
| 45 | 46 |
| 46 static void lassert(lua_State *L, BOOL test, char* string) { | 47 static int lerror(lua_State *L, char* string) { |
| 47 if (!test) { | 48 lua_pushnil(L); |
| 48 luaL_error(L, "%s: %d", string, GetLastError()); | 49 lua_pushfstring(L, "%s: %d", string, GetLastError()); |
| 49 } | 50 return 2; |
| 50 } | 51 } |
| 51 | 52 |
| 52 static int Lget_consolecolor(lua_State *L) { | 53 static int Lget_consolecolor(lua_State *L) { |
| 53 HWND console = GetStdHandle(STD_OUTPUT_HANDLE); | 54 HWND console = GetStdHandle(STD_OUTPUT_HANDLE); |
| 54 WORD color; DWORD read_len; | 55 WORD color; DWORD read_len; |
| 55 | 56 |
| 56 CONSOLE_SCREEN_BUFFER_INFO info; | 57 CONSOLE_SCREEN_BUFFER_INFO info; |
| 57 | 58 |
| 58 lassert(L, console != INVALID_HANDLE_VALUE, "GetStdHandle"); | 59 if (console == INVALID_HANDLE_VALUE) return lerror(L, "GetStdHandle"); |
| 59 lassert(L, GetConsoleScreenBufferInfo(console, &info), "GetConsoleScreenBufferInfo"); | 60 if (!GetConsoleScreenBufferInfo(console, &info)) return lerror(L, "GetConsoleScreenBufferInfo"); |
| 60 lassert(L, ReadConsoleOutputAttribute(console, &color, sizeof(WORD), info.dwCursorPosition, &read_len), "ReadConsoleOutputAttribute"); | 61 if (!ReadConsoleOutputAttribute(console, &color, sizeof(WORD), info.dwCursorPosition, &read_len)) return lerror(L, "ReadConsoleOutputAttribute"); |
| 61 | 62 |
| 62 lua_pushnumber(L, color); | 63 lua_pushnumber(L, color); |
| 63 return 1; | 64 return 1; |
| 64 } | 65 } |
| 65 static int Lset_consolecolor(lua_State *L) { | 66 static int Lset_consolecolor(lua_State *L) { |
| 66 int color = luaL_checkint(L, 1); | 67 int color = luaL_checkint(L, 1); |
| 67 HWND console = GetStdHandle(STD_OUTPUT_HANDLE); | 68 HWND console = GetStdHandle(STD_OUTPUT_HANDLE); |
| 68 lassert(L, console != INVALID_HANDLE_VALUE, "GetStdHandle"); | 69 if (console == INVALID_HANDLE_VALUE) return lerror(L, "GetStdHandle"); |
| 69 lassert(L, SetConsoleTextAttribute(console, color), "SetConsoleTextAttribute"); | 70 if (!SetConsoleTextAttribute(console, color)) return lerror(L, "SetConsoleTextAttribute"); |
| 70 return 0; | 71 lua_pushboolean(L, 1); |
| 72 return 1; | |
| 71 } | 73 } |
| 72 | 74 |
| 73 static const luaL_Reg Reg[] = | 75 static const luaL_Reg Reg[] = |
| 74 { | 76 { |
| 75 { "get_nameservers", Lget_nameservers }, | 77 { "get_nameservers", Lget_nameservers }, |