From 5db3a782089c3387bfbe71cbdf9d4d3a9682ac7b Mon Sep 17 00:00:00 2001 From: Yuguo Zhang Date: Sun, 22 Jul 2018 14:12:59 +0800 Subject: [PATCH] ecl_open_stream, close invalid fd cause crash on windows platform. actually, the build process will terminated when loading cmp/cmpos-features.lsp related function is: (with-open-file (s fc :direction :output :if-exists :overwrite :if-does-not-exists :create) it's a MS feature called security-enhanced CRT. --- src/c/file.d | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/c/file.d b/src/c/file.d index 56b095531..235c95be9 100755 --- a/src/c/file.d +++ b/src/c/file.d @@ -5146,7 +5146,7 @@ ecl_open_stream(cl_object filename, enum ecl_smmode smm, cl_object if_exists, fd = safe_open(fname, O_WRONLY|O_CREAT, mode); unlikely_if (fd < 0) FEcannot_open(filename); safe_close(fd); - exists = 1; + fd = -1; } switch (smm) { case ecl_smm_probe: @@ -5198,7 +5198,8 @@ ecl_open_stream(cl_object filename, enum ecl_smmode smm, cl_object if_exists, if (file_kind == @':fifo') { fp = safe_fdopen(fd, OPEN_R); } else { - safe_close(fd); + if (fd >= 0) + safe_close(fd); fp = safe_fopen(fname, OPEN_R); } break; @@ -5207,7 +5208,8 @@ ecl_open_stream(cl_object filename, enum ecl_smmode smm, cl_object if_exists, if (file_kind == @':fifo') { fp = safe_fdopen(fd, OPEN_RW); } else { - safe_close(fd); + if (fd >= 0) + safe_close(fd); fp = safe_fopen(fname, OPEN_RW); } break;