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;
* 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;
}
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