From a25b9b39ac2c49b822328414240061f6d22ddef2 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 30 May 2013 21:20:49 +0300 Subject: Minor fix in io.c. --- io.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'io.c') diff --git a/io.c b/io.c index 333d8704..4f682622 100644 --- a/io.c +++ b/io.c @@ -2912,8 +2912,18 @@ iop_finish(IOBUF *iop) if (isdir) iop->errcode = EISDIR; else { + struct stat sbuf; + iop->errcode = EIO; - (void) close(iop->public.fd); + /* + * Extensions can supply values that are not + * INVALID_HANDLE but that are also not real + * file descriptors. So check the fd before + * trying to close it, which avoids errors + * on some operating systems. + */ + if (fstat(iop->public.fd, & sbuf) == 0) + (void) close(iop->public.fd); iop->public.fd = INVALID_HANDLE; } /* -- cgit v1.2.3