X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/5dd6771b28c257af405d7248639ed0e3bcdce38b..3dc0fe0bcb41205700cf9229cb6d7bbfd95a3c2a:/sbr/seq_save.c?ds=sidebyside diff --git a/sbr/seq_save.c b/sbr/seq_save.c index 94b75432..a431804e 100644 --- a/sbr/seq_save.c +++ b/sbr/seq_save.c @@ -30,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; @@ -74,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; } @@ -87,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