diff --git a/src/fdlib.h b/src/fdlib.h
index ef0fcef789295ce7ccd40762cd67e7020d6f34ba..1fe5ea8f5f368f479adf25a7a5b3b0311da033a9 100644
--- a/src/fdlib.h
+++ b/src/fdlib.h
@@ -319,7 +319,13 @@ typedef off_t PIKE_OFF_T;
 #define fd_CREAT O_CREAT
 #define fd_TRUNC O_TRUNC
 #define fd_EXCL O_EXCL
+
+#ifdef O_BINARY
+#define fd_BINARY O_BINARY
+#else
 #define fd_BINARY 0
+#endif
+
 #ifdef O_LARGEFILE
 #define fd_LARGEFILE O_LARGEFILE
 #else /* !O_LARGEFILE */
diff --git a/src/object.c b/src/object.c
index 691fe6609cdad6701fc5a97aa6597aef128b12d5..fff835e26f5b75adf7f5de1b1a49aac9ec24fd7d 100644
--- a/src/object.c
+++ b/src/object.c
@@ -476,7 +476,7 @@ static struct pike_string *low_read_file(const char *file)
   PIKE_OFF_T len;
   FD f;
 
-  while((f = fd_open(file,fd_RDONLY,0666)) <0 && errno==EINTR)
+  while((f = fd_open(file,fd_RDONLY|fd_BINARY,0666)) <0 && errno==EINTR)
     check_threads_etc();
   if(f >= 0)
   {