- snprintf (tmpfile, sizeof(tmpfile), "%s.tmp", filename);
- debug_print (1, ("Opening %s\n", tmpfile));
- if (!(ofp = fopen (tmpfile, "w"))) {
- fclose (ifp);
- mutt_error (_("Unable to open %s for writing"), tmpfile);
+
+ /* use m_tempfile() to get a tempfile in the same
+ * directory as filename is so that we can follow symlinks
+ * via rename(2); as dirname(2) may modify its argument,
+ * temporarily use buf as copy of it
+ */
+ m_strcpy(buf, sizeof(buf), filename);
+ ofp = m_tempfile(tmpf, sizeof(tmpf), dirname(buf), filename);
+ if (!ofp) {
+ m_fclose(&ifp);
+ mutt_error (_("Unable to open %s for writing"), tmpf);