# HG changeset patch # User jbe # Date 1440260351 -7200 # Node ID 32b64f641761ad8106014e75da0dea94fbb4468a # Parent 54b5b59e3c10d3640b46e86ea033aeee3298b919 Workaround for issue with noncompliant (_GNU_SOURCE) strerror_r() implementation diff -r 54b5b59e3c10 -r 32b64f641761 libraries/extos/extos.c --- a/libraries/extos/extos.c Fri Aug 07 21:44:56 2015 +0200 +++ b/libraries/extos/extos.c Sat Aug 22 18:19:11 2015 +0200 @@ -17,6 +17,8 @@ #define EXTOS_MAX_ERRLEN 80 #define EXTOS_EXEC_MAX_ARGS 64 +#define EXTOS_STRERROR_R_MSG "Error detail unavailable due to noncompliant strerror_r() implementation" + static lua_Number extos_monotonic_start_time; static int extos_pfilter(lua_State *L) { @@ -44,7 +46,7 @@ int out_closed = 0; int err_closed = 0; void *newptr; - char errmsg[EXTOS_MAX_ERRLEN+1]; + char errmsg[EXTOS_MAX_ERRLEN+1] = EXTOS_STRERROR_R_MSG; in_buf = luaL_optlstring(L, 1, "", &in_len); filename = luaL_checkstring(L, 2); args[0] = filename; @@ -305,7 +307,7 @@ const char *filename; filename = luaL_checkstring(L, 1); if (fd == EXTOS_STAT_FOLLOW ? stat(filename, &sb) : lstat(filename, &sb)) { - char errmsg[EXTOS_MAX_ERRLEN+1]; + char errmsg[EXTOS_MAX_ERRLEN+1] = EXTOS_STRERROR_R_MSG; strerror_r(errno, errmsg, EXTOS_MAX_ERRLEN+1); if (errno == ENOENT) lua_pushboolean(L, 0); else lua_pushnil(L); @@ -314,7 +316,7 @@ } } else { if (fstat(fd, &sb)) { - char errmsg[EXTOS_MAX_ERRLEN+1]; + char errmsg[EXTOS_MAX_ERRLEN+1] = EXTOS_STRERROR_R_MSG; strerror_r(errno, errmsg, EXTOS_MAX_ERRLEN+1); lua_pushnil(L); lua_pushfstring(L, "Could not get file stats for open file: %s", errmsg);