]> granicus.if.org Git - neomutt/commitdiff
Ensure alias file ends with \n before appending new aliases.
authorBrendan Cully <brendan@kublai.com>
Wed, 14 May 2008 23:23:52 +0000 (16:23 -0700)
committerBrendan Cully <brendan@kublai.com>
Wed, 14 May 2008 23:23:52 +0000 (16:23 -0700)
Closes #1580.

ChangeLog
alias.c

index 69198c45bd9fa15a2aa639509d916e67eb4f3a1c..94b28cd8fe504d532d1e6e76b03dabdc83d1aa52 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-05-14 15:19 +0200  Samuel Tardieu  <sam@rfc1149.net>  (5518355bc6da)
+
+       * curs_main.c: Always update status bar after sorting method changes
+       (closes #2120).
+
+2008-05-12 23:15 -0700  Brendan Cully  <brendan@kublai.com>  (97aa20438c47)
+
+       * imap/imap.c: Terminate open IMAP message sets at end of mailbox
+       even if the last message is inactive. Closes #3002.
+
 2008-05-11 10:52 +0200  Matthias Andree  <matthias.andree@gmx.de>  (09b0363cdf54)
 
        * rfc3676.c: In debug output, cast size_t arguments to long for
diff --git a/alias.c b/alias.c
index 0a5b38d8e5cf92c8c36de18fc4b7f8b95d6ddab1..e8696cdba3116b40104ed5aba0a0fce9f4897ac0 100644 (file)
--- a/alias.c
+++ b/alias.c
@@ -331,8 +331,26 @@ retry_name:
   if (mutt_get_field (_("Save to file: "), buf, sizeof (buf), M_FILE) != 0)
     return;
   mutt_expand_path (buf, sizeof (buf));
-  if ((rc = fopen (buf, "a")))
+  if ((rc = fopen (buf, "a+")))
   {
+    /* terminate existing file with \n if necessary */
+    if (fseek (rc, 0, SEEK_END))
+      goto fseek_err;
+    if (ftell(rc) > 0)
+    {
+      if (fseek (rc, -1, SEEK_CUR) < 0)
+       goto fseek_err;
+      if (fread(buf, 1, 1, rc) < 0)
+      {
+       mutt_perror (_("Error reading alias file"));
+       return;
+      }
+      if (fseek (rc, 0, SEEK_END) < 0)
+       goto fseek_err;
+      if (buf[0] != '\n')
+       fputc ('\n', rc);
+    }
+
     if (mutt_check_alias_name (new->name, NULL))
       mutt_quote_filename (buf, sizeof (buf), new->name);
     else
@@ -347,6 +365,13 @@ retry_name:
   }
   else
     mutt_perror (buf);
+
+  return;
+  
+  fseek_err:
+  mutt_perror (_("Error seeking in alias file"));
+  fclose(rc);
+  return;
 }
 
 /*