X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/6bc64765f773ce75454ec1592a86779e3547fe46..af2ad7be43057a4f82dc8a223d79d68bf932ae00:/sbr/seq_save.c diff --git a/sbr/seq_save.c b/sbr/seq_save.c index 5b06dcdf..3abf9e27 100644 --- a/sbr/seq_save.c +++ b/sbr/seq_save.c @@ -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 -#include +#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; }