Index: /trunk/src/kmk/kmkbuiltin/redirect.c
===================================================================
--- /trunk/src/kmk/kmkbuiltin/redirect.c	(revision 2683)
+++ /trunk/src/kmk/kmkbuiltin/redirect.c	(revision 2684)
@@ -137,4 +137,30 @@
 }
 #endif /* _MSC_VER */
+
+
+#ifdef _MSC_VER
+/** Used by safeCloseFd. */
+static void __cdecl ignore_invalid_parameter(const wchar_t *a, const wchar_t *b, const wchar_t *c, unsigned d, uintptr_t e)
+{
+}
+#endif
+
+
+/**
+ * Safely works around MS CRT's pedantic close() function.
+ *
+ * @param   fd      The file handle.
+ */
+static void safeCloseFd(int fd)
+{
+#ifdef _MSC_VER
+    _invalid_parameter_handler pfnOld = _get_invalid_parameter_handler();
+    _set_invalid_parameter_handler(ignore_invalid_parameter);
+    close(fd);
+    _set_invalid_parameter_handler(pfnOld);
+#else
+    close(fd);
+#endif
+}
 
 
@@ -397,5 +423,5 @@
                 }
                 /** @todo deal with stderr */
-                close(fd);
+                safeCloseFd(fd);
                 continue;
             }
@@ -602,5 +628,5 @@
              * Close and open the new file descriptor.
              */
-            close(fd);
+            safeCloseFd(fd);
 #if defined(_MSC_VER)
             if (!strcmp(psz, "/dev/null"))
