]> diplodocus.org Git - nmh/blobdiff - sbr/seq_save.c
dtime.c: Move interface to own file.
[nmh] / sbr / seq_save.c
index 5b06dcdfe8019c73d7ea54e299b446906d487c26..3abf9e2708c42c9d46dc9c3f570414a8854ba087 100644 (file)
@@ -1,6 +1,4 @@
-
-/*
- * seq_save.c -- 1) synchronize sequences
+/* seq_save.c -- 1) synchronize sequences
  *            -- 2) save public sequences
  *
  * This code is Copyright (c) 2002, by the authors of nmh.  See the
@@ -8,8 +6,15 @@
  * complete copyright information.
  */
 
-#include <h/mh.h>
-#include <h/signals.h>
+#include "h/mh.h"
+#include "seq_save.h"
+#include "context_replace.h"
+#include "context_del.h"
+#include "seq_list.h"
+#include "error.h"
+#include "h/signals.h"
+#include "lock_file.h"
+#include "m_mktemp.h"
 
 
 /*
@@ -77,6 +82,8 @@ priv:
            context_del (attr);                 /* delete sequence from context */
 
            if (!fp) {
+               int failed_to_lock = 0;
+
                /*
                 * Attempt to open file for public sequences.
                 * If that fails (probably because folder is
@@ -89,11 +96,19 @@ priv:
                    free(mp->seqname);
                    mp->seqname = NULL;
                    rewind(fp);
-                   ftruncate(fileno(fp), 0);
-               } else if ((fp = lkfopendata (seqfile, "w")) == NULL
+                   if (ftruncate(fileno(fp), 0) < 0) {
+                       advise ("sequence file", "ftruncate");
+                   }
+               } else if ((fp = lkfopendata (seqfile, "w", &failed_to_lock))
+                          == NULL
                        && (m_unlink (seqfile) == -1 ||
-                           (fp = lkfopendata (seqfile, "w")) == NULL)) {
-                   admonish (attr, "unable to write");
+                           (fp = lkfopendata (seqfile, "w", &failed_to_lock))
+                           == NULL)) {
+                   if (failed_to_lock) {
+                       admonish (attr, "unable to lock");
+                   } else {
+                       admonish (attr, "unable to write");
+                   }
                    goto priv;
                }