diff options
Diffstat (limited to 'libgfortran/io/write_float.def')
-rw-r--r-- | libgfortran/io/write_float.def | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def index 99f6ff8..1b345f8 100644 --- a/libgfortran/io/write_float.def +++ b/libgfortran/io/write_float.def @@ -1277,7 +1277,13 @@ write_float (st_parameter_dt *dtp, const fnode *f, const char *source, \ trailing null, and finally some extra digits depending on the requested precision. */ const size_t size = 4932 + 3 + precision; - char buffer[size]; +#define BUF_STACK_SZ 5000 + char buf_stack[BUF_STACK_SZ]; + char *buffer; + if (size > BUF_STACK_SZ) + buffer = xmalloc (size); + else + buffer = buf_stack; switch (len) { @@ -1306,4 +1312,6 @@ write_float (st_parameter_dt *dtp, const fnode *f, const char *source, \ default: internal_error (NULL, "bad real kind"); } + if (size > BUF_STACK_SZ) + free (buffer); } |