core: Initialize g_buf dynamically, add MES_STRING_MAX override.

* 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.
This commit is contained in:
Jan Nieuwenhuizen 2019-02-10 06:56:06 +01:00
parent f43af6acc3
commit d3e694c529
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273
3 changed files with 16 additions and 4 deletions

View 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. 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 @item MES_DEBUG
@vindex MES_DEBUG @vindex MES_DEBUG

View file

@ -38,12 +38,16 @@ long STACK_SIZE = 20000;
long JAM_SIZE = 20000; long JAM_SIZE = 20000;
long GC_SAFETY = 2000; long GC_SAFETY = 2000;
long MAX_STRING = 524288;
char *g_arena = 0; char *g_arena = 0;
typedef long SCM; typedef long SCM;
int g_debug = 0; int g_debug = 0;
long g_free = 0; long g_free = 0;
char *g_buf = 0;
SCM g_continuations = 0; SCM g_continuations = 0;
SCM g_symbols = 0; SCM g_symbols = 0;
SCM g_stack = 0; SCM g_stack = 0;
@ -1647,6 +1651,10 @@ gc_init_cells () ///((internal))
g_cells++; g_cells++;
TYPE (0) = TCHAR; TYPE (0) = TCHAR;
VALUE (0) = 'c'; VALUE (0) = 'c';
// FIXME: remove MES_MAX_STRING, grow dynamically
g_buf = (char*)malloc (MAX_STRING);
return 0; return 0;
} }
@ -2276,6 +2284,8 @@ main (int argc, char *argv[])
GC_SAFETY = atoi (p); GC_SAFETY = atoi (p);
if (p = getenv ("MES_STACK")) if (p = getenv ("MES_STACK"))
STACK_SIZE = atoi (p); STACK_SIZE = atoi (p);
if (p = getenv ("MES_MAX_STRING"))
MAX_STRING = atoi (p);
g_stdin = STDIN; g_stdin = STDIN;
g_stdout = STDOUT; g_stdout = STDOUT;
g_stderr = STDERR; g_stderr = STDERR;

View file

@ -18,13 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. * along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#define MAX_STRING 524288
char g_buf[MAX_STRING];
void void
assert_max_string (size_t i, char const* msg, char* string) 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 (msg);
eputs (":string too long["); eputs (":string too long[");