diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/builtin.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/Src/builtin.c b/Src/builtin.c index 557487c87..04d8f11d9 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -4872,17 +4872,20 @@ bin_print(char *name, char **args, Options ops, int func) if (OPT_ISSET(ops,'z') || OPT_ISSET(ops,'s') || OPT_ISSET(ops,'v')) { #ifdef HAVE_OPEN_MEMSTREAM - putc(0, fout); + putc(0, fout); /* not needed? open_memstream() maintains? */ fclose(fout); fout = NULL; + rcount = mcount; /* now includes the trailing NUL we added */ #else rewind(fout); buf = (char *)zalloc(count + 1); - fread(buf, count, 1, fout); - buf[count] = '\0'; + rcount = fread(buf, count, 1, fout); + if (rcount < count) + zwarnnam(name, "i/o error: %e", errno); + buf[rcount] = '\0'; #endif queue_signals(); - stringval = metafy(buf, -1, META_REALLOC); + stringval = metafy(buf, rcount - 1, META_REALLOC); if (OPT_ISSET(ops,'z')) { zpushnode(bufstack, stringval); } else if (OPT_ISSET(ops,'v')) { |