X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/82a21b6f3cddf8ab048dcb02c080ea9797c73c5a..3dc0fe0bcb41205700cf9229cb6d7bbfd95a3c2a:/sbr/seq_save.c?ds=sidebyside diff --git a/sbr/seq_save.c b/sbr/seq_save.c index 84775b97..a431804e 100644 --- a/sbr/seq_save.c +++ b/sbr/seq_save.c @@ -3,8 +3,6 @@ * seq_save.c -- 1) synchronize sequences * -- 2) save public sequences * - * $Id$ - * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. @@ -32,8 +30,15 @@ seq_save (struct msgs *mp) sigset_t set, oset; /* check if sequence information has changed */ - if (!(mp->msgflags & SEQMOD)) + if (!(mp->msgflags & SEQMOD)) { + if (mp->seqhandle) { + lkfclosedata (mp->seqhandle, mp->seqname); + mp->seqhandle = NULL; + free(mp->seqname); + mp->seqname = NULL; + } return; + } mp->msgflags &= ~SEQMOD; fp = NULL; @@ -76,9 +81,17 @@ priv: * If that fails (probably because folder is * readonly), then make sequence private. */ - if ((fp = lkfopen (seqfile, "w")) == NULL + + if (mp->seqhandle) { + fp = mp->seqhandle; + mp->seqhandle = NULL; + free(mp->seqname); + mp->seqname = NULL; + rewind(fp); + ftruncate(fileno(fp), 0); + } else if ((fp = lkfopendata (seqfile, "w")) == NULL && (unlink (seqfile) == -1 || - (fp = lkfopen (seqfile, "w")) == NULL)) { + (fp = lkfopendata (seqfile, "w")) == NULL)) { admonish (attr, "unable to write"); goto priv; } @@ -89,15 +102,15 @@ priv: sigaddset(&set, SIGINT); sigaddset(&set, SIGQUIT); sigaddset(&set, SIGTERM); - SIGPROCMASK (SIG_BLOCK, &set, &oset); + sigprocmask (SIG_BLOCK, &set, &oset); } fprintf (fp, "%s: %s\n", mp->msgattrs[i], cp); } } if (fp) { - lkfclose (fp, seqfile); - SIGPROCMASK (SIG_SETMASK, &oset, &set); /* reset signal mask */ + lkfclosedata (fp, seqfile); + sigprocmask (SIG_SETMASK, &oset, &set); /* reset signal mask */ } else { /* * If folder is not readonly, and we didn't save any