Procházet zdrojové kódy

Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)

Philip Gladstone před 7 roky
rodič
revize
f9533ed85a
4 změnil soubory, kde provedl 12 přidání a 19 odebrání
  1. 8 17
      app/lua/liolib.c
  2. 1 1
      app/lua/luaconf.h
  3. 2 0
      app/modules/ow.c
  4. 1 1
      docs/en/modules/ow.md

+ 8 - 17
app/lua/liolib.c

@@ -343,28 +343,19 @@ static int read_line (lua_State *L, int f) {
 static int read_line (lua_State *L, int f) {
   luaL_Buffer b;
   luaL_buffinit(L, &b);
-  char *p = luaL_prepbuffer(&b);
-  signed char c = EOF;
-  int i = 0;
-  do{
+  signed char c;
+  do {
     c = (signed char)vfs_getc(f);
-    if(c==EOF){
+    if (c==EOF) {
       break;
     }
-    p[i++] = c;
-  }while((c!=EOF) && (c!='\n') && (i<LUAL_BUFFERSIZE) );
-
-  if(i>0 && p[i-1] == '\n')
-    i--;    /* do not include `eol' */
-
-  if(i==0){
-    luaL_pushresult(&b);  /* close buffer */
-    return (lua_objlen(L, -1) > 0);  /* check whether read something */
-  }
+    if (c != '\n') {
+      luaL_addchar(&b, c);
+    }
+  } while (c != '\n');
 
-  luaL_addsize(&b, i);
   luaL_pushresult(&b);  /* close buffer */
-  return 1;  /* read at least an `eol' */ 
+  return (lua_objlen(L, -1) > 0);  /* check whether read something */
 }
 #endif
 

+ 1 - 1
app/lua/luaconf.h

@@ -556,7 +556,7 @@ extern int readline4lua(const char *prompt, char *buffer, int length);
 ** For example: If set to 4K a call to string.gsub will need more than 
 ** 5k C stack space.
 */
-#define LUAL_BUFFERSIZE		BUFSIZ
+#define LUAL_BUFFERSIZE		256
 
 /* }================================================================== */
 

+ 2 - 0
app/modules/ow.c

@@ -134,6 +134,8 @@ static int ow_read_bytes( lua_State *L )
   if( size == 0 )
     return 0;
 
+  luaL_argcheck(L, size <= LUAL_BUFFERSIZE, 2, "Attempt to read too many characters");
+
   luaL_Buffer b;
   luaL_buffinit( L, &b );
   char *p = luaL_prepbuffer(&b);

+ 1 - 1
docs/en/modules/ow.md

@@ -84,7 +84,7 @@ Reads multi bytes.
 
 #### Parameters
 - `pin` 1~12, I/O index
-- `size` number of bytes to be read from slave device
+- `size` number of bytes to be read from slave device (up to 256)
 
 #### Returns
 `string` bytes read from slave device