|
|
1.1 ! root 1: /* ! 2: ** Sendmail ! 3: ** Copyright (c) 1983 Eric P. Allman ! 4: ** Berkeley, California ! 5: ** ! 6: ** Copyright (c) 1983 Regents of the University of California. ! 7: ** All rights reserved. The Berkeley software License Agreement ! 8: ** specifies the terms and conditions for redistribution. ! 9: */ ! 10: ! 11: #ifndef lint ! 12: static char SccsId[] = "@(#)stats.c 5.8 (Berkeley) 5/2/86"; ! 13: #endif not lint ! 14: ! 15: # include "sendmail.h" ! 16: # include "mailstats.h" ! 17: ! 18: struct statistics Stat; ! 19: ! 20: #define ONE_K 1000 /* one thousand (twenty-four?) */ ! 21: #define KBYTES(x) (((x) + (ONE_K - 1)) / ONE_K) ! 22: /* ! 23: ** MARKSTATS -- mark statistics ! 24: */ ! 25: ! 26: markstats(e, to) ! 27: register ENVELOPE *e; ! 28: register ADDRESS *to; ! 29: { ! 30: if (to == NULL) ! 31: { ! 32: if (e->e_from.q_mailer != NULL) ! 33: { ! 34: Stat.stat_nf[e->e_from.q_mailer->m_mno]++; ! 35: Stat.stat_bf[e->e_from.q_mailer->m_mno] += ! 36: KBYTES(CurEnv->e_msgsize); ! 37: } ! 38: } ! 39: else ! 40: { ! 41: Stat.stat_nt[to->q_mailer->m_mno]++; ! 42: Stat.stat_bt[to->q_mailer->m_mno] += KBYTES(CurEnv->e_msgsize); ! 43: } ! 44: } ! 45: /* ! 46: ** POSTSTATS -- post statistics in the statistics file ! 47: ** ! 48: ** Parameters: ! 49: ** sfile -- the name of the statistics file. ! 50: ** ! 51: ** Returns: ! 52: ** none. ! 53: ** ! 54: ** Side Effects: ! 55: ** merges the Stat structure with the sfile file. ! 56: */ ! 57: ! 58: poststats(sfile) ! 59: char *sfile; ! 60: { ! 61: register int fd; ! 62: struct statistics stat; ! 63: extern off_t lseek(); ! 64: ! 65: if (sfile == NULL) ! 66: return; ! 67: ! 68: (void) time(&Stat.stat_itime); ! 69: Stat.stat_size = sizeof Stat; ! 70: ! 71: fd = open(sfile, 2); ! 72: if (fd < 0) ! 73: { ! 74: errno = 0; ! 75: return; ! 76: } ! 77: if (read(fd, (char *) &stat, sizeof stat) == sizeof stat && ! 78: stat.stat_size == sizeof stat) ! 79: { ! 80: /* merge current statistics into statfile */ ! 81: register int i; ! 82: ! 83: for (i = 0; i < MAXMAILERS; i++) ! 84: { ! 85: stat.stat_nf[i] += Stat.stat_nf[i]; ! 86: stat.stat_bf[i] += Stat.stat_bf[i]; ! 87: stat.stat_nt[i] += Stat.stat_nt[i]; ! 88: stat.stat_bt[i] += Stat.stat_bt[i]; ! 89: } ! 90: } ! 91: else ! 92: bcopy((char *) &Stat, (char *) &stat, sizeof stat); ! 93: ! 94: /* write out results */ ! 95: (void) lseek(fd, (off_t) 0, 0); ! 96: (void) write(fd, (char *) &stat, sizeof stat); ! 97: (void) close(fd); ! 98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.