path: root/compat
diff options
authorJohannes Sixt <>2010-02-25 20:03:44 (GMT)
committerJunio C Hamano <>2010-02-25 20:27:38 (GMT)
commit3fdcdbdf301dadb7af58fe038501f0af6419a2e0 (patch)
treea93e6858dfc1b9db2bd6fd71eff8a3ece8d2f9d5 /compat
parent251a4951a20b23760c3ccf3f3122d4394ab37357 (diff)
Windows: redirect f[re]open("/dev/null") to f[re]open("nul")
On Windows, the equivalent of "/dev/null" is "nul". This implements compatibility wrappers around fopen() and freopen() that check for this particular file name. The new tests exercise code paths where this is relevant. Signed-off-by: Johannes Sixt <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'compat')
2 files changed, 22 insertions, 0 deletions
diff --git a/compat/mingw.c b/compat/mingw.c
index ab65f77..c5bfb39 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -140,6 +140,22 @@ int mingw_open (const char *filename, int oflags, ...)
return fd;
+#undef fopen
+FILE *mingw_fopen (const char *filename, const char *otype)
+ if (!strcmp(filename, "/dev/null"))
+ filename = "nul";
+ return fopen(filename, otype);
+#undef freopen
+FILE *mingw_freopen (const char *filename, const char *otype, FILE *stream)
+ if (filename && !strcmp(filename, "/dev/null"))
+ filename = "nul";
+ return freopen(filename, otype, stream);
* The unit of FILETIME is 100-nanoseconds since January 1, 1601, UTC.
* Returns the 100-nanoseconds ("hekto nanoseconds") since the epoch.
diff --git a/compat/mingw.h b/compat/mingw.h
index e254fb4..e81e752 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -170,6 +170,12 @@ int link(const char *oldpath, const char *newpath);
int mingw_open (const char *filename, int oflags, ...);
#define open mingw_open
+FILE *mingw_fopen (const char *filename, const char *otype);
+#define fopen mingw_fopen
+FILE *mingw_freopen (const char *filename, const char *otype, FILE *stream);
+#define freopen mingw_freopen
char *mingw_getcwd(char *pointer, int len);
#define getcwd mingw_getcwd