summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormcgreer%netscape.com <devnull@localhost>2000-10-11 06:52:06 +0000
committermcgreer%netscape.com <devnull@localhost>2000-10-11 06:52:06 +0000
commitfc2befca0c8f7dd09344ab48e9c1adf36fe1638d (patch)
treea6444794dbfe28d88f0a94733263581cc21171b4
parenta21e3a2432b8c0c67e1fe7210edcdf9da90f717f (diff)
downloadnss-hg-fc2befca0c8f7dd09344ab48e9c1adf36fe1638d.tar.gz
fix output of DER's on windows
-rw-r--r--security/nss/cmd/smimetools/cmsutil.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/security/nss/cmd/smimetools/cmsutil.c b/security/nss/cmd/smimetools/cmsutil.c
index b4b726927..1829214fc 100644
--- a/security/nss/cmd/smimetools/cmsutil.c
+++ b/security/nss/cmd/smimetools/cmsutil.c
@@ -1050,7 +1050,12 @@ main(int argc, char **argv)
break;
case 'o':
- if ((outFile = fopen(optstate->value, "w")) == NULL) {
+ if (mode == DECODE) {
+ outFile = fopen(optstate->value, "w");
+ } else {
+ outFile = fopen(optstate->value, "wb");
+ }
+ if (outFile == NULL) {
fprintf(stderr, "%s: unable to open \"%s\" for writing\n",
progName, optstate->value);
exit(1);
@@ -1114,6 +1119,21 @@ main(int argc, char **argv)
exit(1);
}
+#if defined(WIN32)
+ if (outFile == stdout && mode != DECODE) {
+ /* If we're going to write binary data to stdout, we must put stdout
+ ** into O_BINARY mode or else incoming \r\n's will become \n's.
+ */
+ int smrv = _setmode(_fileno(stdout), _O_BINARY);
+ if (smrv == -1) {
+ fprintf(stderr,
+ "%s: Cannot change stdout to binary mode. Use -o option instead.\n",
+ progName);
+ return smrv;
+ }
+ }
+#endif
+
exitstatus = 0;
switch (mode) {
case DECODE: