core: Initialize g_buf dynamically, add MES_STRING_MAX override.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 10 Feb 2019 05:56:06 +0000 (06:56 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 10 Feb 2019 05:56:06 +0000 (06:56 +0100)
* src/mes.c (g_buf, MAX_STRING): Move from strings.c.
(gc_init_cells): Initialize g_buf dynamically.
(main): Add environment override MES_MAX_STRING for MAX_STRING.
* doc/mes.texi (Environment Variables): Document it.

doc/mes.texi
src/mes.c
src/strings.c

index 1b0a72cdf5dae40ac707d446925c80f9a9766018..cef8cd0cb91a8c0d05fa2a81ce5823a4da1810cc 100644 (file)
@@ -757,6 +757,11 @@ The initial size of the arena @pxref{5.3,,, sicp, SICP} in cells.  Default: 20,0
 
 The maximum size of the arena in cells.  Default: 100,000,000.
 
+@item MES_MAX_STRING
+@vindex MES_MAX_STRING
+
+The maximum size of a string.  Default: 524,288.
+
 @item MES_DEBUG
 @vindex MES_DEBUG
 
index 804b8080ed8d1eed148fc5ba61857fcdefdc6d57..ae4e7509b8310d0aa4c29e1e4ab01b70b775d6c3 100644 (file)
--- a/src/mes.c
+++ b/src/mes.c
@@ -38,12 +38,16 @@ long STACK_SIZE = 20000;
 long JAM_SIZE = 20000;
 long GC_SAFETY = 2000;
 
+long MAX_STRING = 524288;
+
 char *g_arena = 0;
 typedef long SCM;
 
 int g_debug = 0;
 long g_free = 0;
 
+char *g_buf = 0;
+
 SCM g_continuations = 0;
 SCM g_symbols = 0;
 SCM g_stack = 0;
@@ -1647,6 +1651,10 @@ gc_init_cells () ///((internal))
   g_cells++;
   TYPE (0) = TCHAR;
   VALUE (0) = 'c';
+
+  // FIXME: remove MES_MAX_STRING, grow dynamically
+  g_buf = (char*)malloc (MAX_STRING);
+
   return 0;
 }
 
@@ -2276,6 +2284,8 @@ main (int argc, char *argv[])
     GC_SAFETY = atoi (p);
   if (p = getenv ("MES_STACK"))
     STACK_SIZE = atoi (p);
+  if (p = getenv ("MES_MAX_STRING"))
+    MAX_STRING = atoi (p);
   g_stdin = STDIN;
   g_stdout = STDOUT;
   g_stderr = STDERR;
index 7f03fa239eab888863b4cc2b8565600d5f7f9efb..3aec0f9f0c34786fc4aa22ef5fdd7836a190b875 100644 (file)
  * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#define MAX_STRING 524288
-char g_buf[MAX_STRING];
-
 void
 assert_max_string (size_t i, char const* msg, char* string)
 {
-  if (i > MAX_STRING) // Mes must be able to make g_buf
+  if (i > MAX_STRING)
     {
       eputs (msg);
       eputs (":string too long[");