updated for version 7.0166
diff --git a/src/os_unix.c b/src/os_unix.c
index 7d2d0cc..4535aef 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -2354,6 +2354,72 @@
 #endif
 }
 
+#if defined(USE_FNAME_CASE) || defined(PROTO)
+/*
+ * Set the case of the file name, if it already exists.  This will cause the
+ * file name to remain exactly the same.
+ * Only required for file systems where case is ingored and preserved.
+ */
+/*ARGSUSED*/
+    void
+fname_case(name, len)
+    char_u	*name;
+    int		len;	    /* buffer size, only used when name gets longer */
+{
+    struct stat st;
+    char_u	*slash, *tail;
+    DIR		*dirp;
+    struct dirent *dp;
+
+    if (lstat((char *)name, &st) >= 0)
+    {
+	/* Open the directory where the file is located. */
+	slash = vim_strrchr(name, '/');
+	if (slash == NULL)
+	{
+	    dirp = opendir(".");
+	    tail = name;
+	}
+	else
+	{
+	    *slash = NUL;
+	    dirp = opendir((char *)name);
+	    *slash = '/';
+	    tail = slash + 1;
+	}
+
+	if (dirp != NULL)
+	{
+	    while ((dp = readdir(dirp)) != NULL)
+	    {
+		/* Only accept names that differ in case and are the same byte
+		 * length. TODO: accept different length name. */
+		if (STRICMP(tail, dp->d_name) == 0
+			&& STRLEN(tail) == STRLEN(dp->d_name))
+		{
+		    char_u	newname[MAXPATHL + 1];
+		    struct stat st2;
+
+		    /* Verify the inode is equal. */
+		    vim_strncpy(newname, name, MAXPATHL);
+		    vim_strncpy(newname + (tail - name), (char_u *)dp->d_name,
+						    MAXPATHL - (tail - name));
+		    if (lstat((char *)newname, &st2) >= 0
+			    && st.st_ino == st2.st_ino
+			    && st.st_dev == st2.st_dev)
+		    {
+			STRCPY(tail, dp->d_name);
+			break;
+		    }
+		}
+	    }
+
+	    closedir(dirp);
+	}
+    }
+}
+#endif
+
 /*
  * Get file permissions for 'name'.
  * Returns -1 when it doesn't exist.
diff --git a/src/os_unix.h b/src/os_unix.h
index b78b23e..c1458d6 100644
--- a/src/os_unix.h
+++ b/src/os_unix.h
@@ -40,6 +40,9 @@
 #if defined(__CYGWIN__) || defined(__CYGWIN32__)
 # define WIN32UNIX	/* Compiling for Win32 using Unix files. */
 # define BINARY_FILE_IO
+
+# define CASE_INSENSITIVE_FILENAME
+# define USE_FNAME_CASE	/* Fix filename case differences. */
 #endif
 
 /* On AIX 4.2 there is a conflicting prototype for ioctl() in stropts.h and