|
|
1.1 ! root 1: /* m_sync.c - synchronize message sequences */ ! 2: ! 3: #include "../h/mh.h" ! 4: #include <stdio.h> ! 5: #include <signal.h> ! 6: ! 7: ! 8: /* decision logic ! 9: 1. public and folder readonly: make it private ! 10: 2a. public: add it to the sequences file ! 11: 2b. private: add it to the profile ! 12: */ ! 13: ! 14: ! 15: void m_sync (mp) ! 16: register struct msgs *mp; ! 17: { ! 18: int bits; ! 19: register int i; ! 20: register char *cp; ! 21: char flags, ! 22: attr[BUFSIZ], ! 23: seq[BUFSIZ]; ! 24: register FILE *fp; ! 25: #ifdef BSD42 ! 26: int oldsig; ! 27: #else not BSD42 ! 28: int (*hstat) (), (*istat) (), (*qstat) (), (*tstat) (); ! 29: #endif BSD42 ! 30: ! 31: if (!(mp -> msgflags & SEQMOD)) ! 32: return; ! 33: mp -> msgflags &= ~SEQMOD; ! 34: ! 35: m_getdefs (); ! 36: (void) sprintf (seq, "%s/%s", mp -> foldpath, mh_seq); ! 37: bits = FFATTRSLOT; ! 38: fp = NULL; ! 39: ! 40: flags = mp -> msgflags; ! 41: if (mh_seq == NULL || *mh_seq == NULL) ! 42: mp -> msgflags |= READONLY; ! 43: ! 44: for (i = 0; mp -> msgattrs[i]; i++) { ! 45: (void) sprintf (attr, "atr-%s-%s", mp -> msgattrs[i], mp -> foldpath); ! 46: if (mp -> msgflags & READONLY ! 47: || mp -> attrstats & (1 << (bits + i))) { ! 48: private: ; ! 49: if (cp = m_seq (mp, mp -> msgattrs[i])) ! 50: m_replace (attr, cp); ! 51: else ! 52: (void) m_delete (attr); ! 53: } ! 54: else { ! 55: (void) m_delete (attr); ! 56: if ((cp = m_seq (mp, mp -> msgattrs[i])) == NULL) ! 57: continue; ! 58: if (fp == NULL) { ! 59: if ((fp = fopen (seq, "w")) == NULL ! 60: && unlink (seq) != NOTOK ! 61: && (fp = fopen (seq, "w")) == NULL) { ! 62: admonish (attr, "unable to write"); ! 63: goto private; ! 64: } ! 65: #ifdef BSD42 ! 66: oldsig = sigblock (sigmask(SIGHUP) | sigmask(SIGINT) | ! 67: sigmask(SIGQUIT) | sigmask(SIGTERM)); ! 68: #else not BSD42 ! 69: hstat = signal (SIGHUP, SIG_IGN); ! 70: istat = signal (SIGINT, SIG_IGN); ! 71: qstat = signal (SIGQUIT, SIG_IGN); ! 72: tstat = signal (SIGTERM, SIG_IGN); ! 73: #endif BSD42 ! 74: } ! 75: fprintf (fp, "%s: %s\n", mp -> msgattrs[i], cp); ! 76: } ! 77: } ! 78: ! 79: if (fp) { ! 80: (void) fclose (fp); ! 81: #ifdef BSD42 ! 82: (void) sigsetmask (oldsig); ! 83: #else not BSD42 ! 84: (void) signal (SIGHUP, hstat); ! 85: (void) signal (SIGINT, istat); ! 86: (void) signal (SIGQUIT, qstat); ! 87: (void) signal (SIGTERM, tstat); ! 88: #endif BSD42 ! 89: } ! 90: else ! 91: if (!(mp -> msgflags & READONLY)) ! 92: (void) unlink (seq); ! 93: ! 94: mp -> msgflags = flags; ! 95: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.