Some filesystems, such as sshfs, implement hard links strangely. The
hard link is created, but is represented by a different inode number
by the sshfs layer. The current maildir code goes into an infinite
loop in this case. Remove the compare_stat() and trust that a link()
return code of 0 means the link really did get created. Still, keep
the stats just as a minor check.
/* pretend that the link failed because the target file did already exist. */
+#if 0
+ /*
+ * Remove this check, because it causes problems with maildir on
+ * filesystems that don't properly support hard links, such as
+ * sshfs. The filesystem creates the link, but the resulting file
+ * is given a different inode number by the sshfs layer. This
+ * results in an infinite loop creating links.
+ */
if (!compare_stat(&ssb, &tsb))
{
mutt_debug(1, "stat blocks for %s and %s diverge; pretending EEXIST.\n", src, target);
errno = EEXIST;
return -1;
}
+#endif
/* Unlink the original link.
* Should we really ignore the return value here? XXX */