* 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.
FILE *fp;
sigset_t set, oset;
- /* sanity check - check that context has been read */
- if (defpath == NULL)
- adios (NULL, "oops, context hasn't been read yet");
-
/* 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 = fopen (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 = fopen (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) {
- fclose (fp);
- 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