diff --git a/source/texk/web2c/luatexdir/lua/liolibext.c b/source/texk/web2c/luatexdir/lua/liolibext.c
index 4e46100f1556bfcff86fb31e37db27efe35084c7..76284ba335b7d5786f204795f74b3218209de3d4 100644
--- a/source/texk/web2c/luatexdir/lua/liolibext.c
+++ b/source/texk/web2c/luatexdir/lua/liolibext.c
@@ -181,12 +181,10 @@ static int read2dot14(lua_State *L) {
     FILE *f = tofile(L);
     int a = getc(f);
     int b = getc(f);
-    int c = getc(f);
-    int d = getc(f);
-    if (d == EOF) {
+    if (b == EOF) {
         lua_pushnil(L);
     } else {
-        int n = (0x1000000 * a + 0x10000 * b + 0x100 * c + d);
+        int n = 0x100 * a + b ;
         lua_pushnumber(L, (n >> 14) + ((n & 0x3fff) / 16384.0));
     }
     return 1;
@@ -377,12 +375,7 @@ static const luaL_Reg fiolib[] = {
     {NULL, NULL}
 };
 
-
 int luaopen_fio(lua_State *L) {
-     luaL_register(L, "fio", fiolib);
-#if defined(_MSC_VER)
-    return luaopen_io(L);
-#else
-     return 1;
-#endif /* _MSC_VER */
+    luaL_register(L, "fio", fiolib);
+    return 1;
 }
diff --git a/source/texk/web2c/luatexdir/lua/lstrlibext.c b/source/texk/web2c/luatexdir/lua/lstrlibext.c
index 8a474fd09c96f2626a6b723d0904cbfa198222ac..f9bd2177d9910da253634e43230b9a5344c2eaeb 100644
--- a/source/texk/web2c/luatexdir/lua/lstrlibext.c
+++ b/source/texk/web2c/luatexdir/lua/lstrlibext.c
@@ -1,5 +1,5 @@
 /* lstrlibext.c
-   
+
    Copyright 2012 Taco Hoekwater <taco@luatex.org>
 
    This file is part of LuaTeX.
@@ -92,7 +92,7 @@ static int str_split (lua_State *L) {
   }
   free(orig);
   return 1;
-} 
+}
 
 static int characters_aux (lua_State *L) {
   size_t ls;
@@ -152,7 +152,7 @@ static int utfcharacters_aux (lua_State *L) {
     }
   }
   return utf_failed(L,ind+1); /* we found a follow byte! */
-} 
+}
 
 
 static int str_utfcharacters (lua_State *L) {
@@ -180,7 +180,7 @@ static int utfvalues_aux (lua_State *L) {
 	if (i<0x80) {
 	  v = i;
 	} else if (i>=0xF0) {
-	  if ((ind+3)<(int)ls && ((unsigned)*(s+ind+1))>=0x80 
+	  if ((ind+3)<(int)ls && ((unsigned)*(s+ind+1))>=0x80
 		  && ((unsigned)*(s+ind+2))>=0x80 && ((unsigned)*(s+ind+3))>=0x80) {
 		numbytes  = 4;
 		j = ((unsigned)*(s+ind+1))-128;
@@ -237,7 +237,7 @@ static int characterpairs_aux (lua_State *L) {
 	b[0] = *(s+ind); b[1] = 0;
 	lua_pushlstring(L, b, 1);
 	if (ind+1<(int)ls) {
-	  b[0] = *(s+ind+1); 
+	  b[0] = *(s+ind+1);
 	  lua_pushlstring(L, b, 1);
 	} else {
 	  lua_pushlstring(L, b+1, 0);
@@ -350,7 +350,17 @@ static int str_dump (lua_State *L) {
   return 1;
 }
 
-
+static int str_bytetable (lua_State *L) {
+    size_t l;
+    int i;
+    const char *s = luaL_checklstring(L, 1, &l);
+    lua_createtable(L,l,0);
+    for (i=0;i<l;i++) {
+        lua_pushinteger(L,(unsigned char)*(s+i));
+        lua_rawseti(L,-2,i+1);
+    }
+    return 1;
+}
 
 static const luaL_Reg strlibext[] = {
   {"utfvalues", str_utfvalues},
@@ -359,6 +369,7 @@ static const luaL_Reg strlibext[] = {
   {"characterpairs", str_characterpairs},
   {"bytes", str_bytes},
   {"bytepairs", str_bytepairs},
+  {"bytetable", str_bytetable},
   {"explode", str_split},
   {"dump", str_dump},
   {NULL, NULL}
@@ -374,4 +385,3 @@ void open_strlibext(lua_State * L)
     }
     lua_pop(L,1);
 }
-