summaryrefslogtreecommitdiff
path: root/apps/gendh.c
diff options
context:
space:
mode:
authorlevitte <levitte>2000-09-20 13:55:17 +0000
committerlevitte <levitte>2000-09-20 13:55:17 +0000
commit2bbcf14c9c4f1e8fcbee2d896553b7886377633b (patch)
treeea06864cfaca7798535f93cde1dde8b84558794a /apps/gendh.c
parenta9e7a61864e3c6988739c8112c82c06e4c68408a (diff)
downloadopenssl-2bbcf14c9c4f1e8fcbee2d896553b7886377633b.tar.gz
On VMS, stdout may very well lead to a file that is written to in a
record-oriented fashion. That means that every write() will write a separate record, which will be read separately by the programs trying to read from it. This can be very confusing. The solution is to put a BIO filter in the way that will buffer text until a linefeed is reached, and then write everything a line at a time, so every record written will be an actual line, not chunks of lines and not (usually doesn't happen, but I've seen it once) several lines in one record. Voila, BIO_f_linebuffer() is born. Since we're so close to release time, I'm making this VMS-only for now, just to make sure no code is needlessly broken by this. After the release, this BIO method will be enabled on all other platforms as well.
Diffstat (limited to 'apps/gendh.c')
-rw-r--r--apps/gendh.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/apps/gendh.c b/apps/gendh.c
index caf5e8d73..e0c7889a3 100644
--- a/apps/gendh.c
+++ b/apps/gendh.c
@@ -142,7 +142,15 @@ bad:
}
if (outfile == NULL)
+ {
BIO_set_fp(out,stdout,BIO_NOCLOSE);
+#ifdef VMS
+ {
+ BIO *tmpbio = BIO_new(BIO_f_linebuffer());
+ out = BIO_push(tmpbio, out);
+ }
+#endif
+ }
else
{
if (BIO_write_filename(out,outfile) <= 0)
@@ -174,7 +182,7 @@ bad:
end:
if (ret != 0)
ERR_print_errors(bio_err);
- if (out != NULL) BIO_free(out);
+ if (out != NULL) BIO_free_all(out);
if (dh != NULL) DH_free(dh);
EXIT(ret);
}