patch 8.1.0602: DirChanged is also triggered when directory didn't change

Problem:    DirChanged is also triggered when the directory didn't change.
            (Daniel Hahler)
Solution:   Compare the current with the new directory. (closes #3697)
diff --git a/src/misc2.c b/src/misc2.c
index fbf8a08..4e3b845 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -3390,17 +3390,29 @@
  * Return OK or FAIL.
  */
     int
-vim_chdirfile(char_u *fname, char *trigger_autocmd UNUSED)
+vim_chdirfile(char_u *fname, char *trigger_autocmd)
 {
-    char_u	dir[MAXPATHL];
+    char_u	old_dir[MAXPATHL];
+    char_u	new_dir[MAXPATHL];
     int		res;
 
-    vim_strncpy(dir, fname, MAXPATHL - 1);
-    *gettail_sep(dir) = NUL;
-    res = mch_chdir((char *)dir) == 0 ? OK : FAIL;
-    if (res == OK && trigger_autocmd != NULL)
-	apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd,
-							   dir, FALSE, curbuf);
+    if (mch_dirname(old_dir, MAXPATHL) != OK)
+	*old_dir = NUL;
+
+    vim_strncpy(new_dir, fname, MAXPATHL - 1);
+    *gettail_sep(new_dir) = NUL;
+
+    if (STRCMP(old_dir, new_dir) == 0)
+	// nothing to do
+	res = OK;
+    else
+    {
+	res = mch_chdir((char *)new_dir) == 0 ? OK : FAIL;
+
+	if (res == OK && trigger_autocmd != NULL)
+	    apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd,
+						       new_dir, FALSE, curbuf);
+    }
     return res;
 }
 #endif