diff options
author | gshapiro <gshapiro@FreeBSD.org> | 2000-08-12 21:55:49 +0000 |
---|---|---|
committer | gshapiro <gshapiro@FreeBSD.org> | 2000-08-12 21:55:49 +0000 |
commit | c3cd75415d60bc002b20182ffd3383ea9e901a80 (patch) | |
tree | 211dfd0f771f89d6abe14fa94cab53985a9d0116 /contrib/sendmail/src/stats.c | |
parent | 231592eb7942ebd4becae24ea8e018acea3742a9 (diff) | |
parent | 4332139a9a11f773ffe5109bed871561e3c290a1 (diff) | |
download | FreeBSD-src-c3cd75415d60bc002b20182ffd3383ea9e901a80.zip FreeBSD-src-c3cd75415d60bc002b20182ffd3383ea9e901a80.tar.gz |
This commit was generated by cvs2svn to compensate for changes in r64562,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib/sendmail/src/stats.c')
-rw-r--r-- | contrib/sendmail/src/stats.c | 93 |
1 files changed, 67 insertions, 26 deletions
diff --git a/contrib/sendmail/src/stats.c b/contrib/sendmail/src/stats.c index b1162ff..383cb37 100644 --- a/contrib/sendmail/src/stats.c +++ b/contrib/sendmail/src/stats.c @@ -1,5 +1,6 @@ /* - * Copyright (c) 1998 Sendmail, Inc. All rights reserved. + * Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers. + * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 * The Regents of the University of California. All rights reserved. @@ -11,20 +12,33 @@ */ #ifndef lint -static char sccsid[] = "@(#)stats.c 8.22 (Berkeley) 5/19/1998"; -#endif /* not lint */ +static char id[] = "@(#)$Id: stats.c,v 8.36.14.2 2000/05/25 23:33:34 gshapiro Exp $"; +#endif /* ! lint */ -# include "sendmail.h" -# include "mailstats.h" +#include <sendmail.h> +#include <sendmail/mailstats.h> -struct statistics Stat; -bool GotStats = FALSE; /* set when we have stats to merge */ +static struct statistics Stat; +static bool GotStats = FALSE; /* set when we have stats to merge */ + +/* See http://physics.nist.gov/cuu/Units/binary.html */ #define ONE_K 1000 /* one thousand (twenty-four?) */ #define KBYTES(x) (((x) + (ONE_K - 1)) / ONE_K) /* ** MARKSTATS -- mark statistics +** +** Parameters: +** e -- the envelope. +** to -- to address. +** reject -- whether this is a rejection. +** +** Returns: +** none. +** +** Side Effects: +** changes static Stat structure */ void @@ -33,7 +47,7 @@ markstats(e, to, reject) register ADDRESS *to; bool reject; { - if (reject == TRUE) + if (reject) { if (e->e_from.q_mailer != NULL) { @@ -42,9 +56,11 @@ markstats(e, to, reject) else Stat.stat_nr[e->e_from.q_mailer->m_mno]++; } + Stat.stat_cr++; } else if (to == NULL) { + Stat.stat_cf++; if (e->e_from.q_mailer != NULL) { Stat.stat_nf[e->e_from.q_mailer->m_mno]++; @@ -54,12 +70,35 @@ markstats(e, to, reject) } else { + Stat.stat_ct++; Stat.stat_nt[to->q_mailer->m_mno]++; Stat.stat_bt[to->q_mailer->m_mno] += KBYTES(e->e_msgsize); } + + GotStats = TRUE; } /* +** CLEARSTATS -- clear statistics structure +** +** Parameters: +** none. +** +** Returns: +** none. +** +** Side Effects: +** clears the Stat structure. +*/ + +void +clearstats() +{ + /* clear the structure to avoid future disappointment */ + memset(&Stat, '\0', sizeof Stat); + GotStats = FALSE; +} +/* ** POSTSTATS -- post statistics in the statistics file ** ** Parameters: @@ -77,8 +116,8 @@ poststats(sfile) char *sfile; { register int fd; - int sff = SFF_REGONLY|SFF_OPENASROOT; - struct statistics stat; + long sff = SFF_REGONLY|SFF_OPENASROOT; + struct statistics stats; extern off_t lseek(); if (sfile == NULL || !GotStats) @@ -89,9 +128,9 @@ poststats(sfile) Stat.stat_magic = STAT_MAGIC; Stat.stat_version = STAT_VERSION; - if (!bitset(DBS_WRITESTATSTOSYMLINK, DontBlameSendmail)) + if (!bitnset(DBS_WRITESTATSTOSYMLINK, DontBlameSendmail)) sff |= SFF_NOSLINK; - if (!bitset(DBS_WRITESTATSTOHARDLINK, DontBlameSendmail)) + if (!bitnset(DBS_WRITESTATSTOHARDLINK, DontBlameSendmail)) sff |= SFF_NOHLINK; fd = safeopen(sfile, O_RDWR, 0644, sff); @@ -103,33 +142,35 @@ poststats(sfile) errno = 0; return; } - if (read(fd, (char *) &stat, sizeof stat) == sizeof stat && - stat.stat_size == sizeof stat && - stat.stat_magic == Stat.stat_magic && - stat.stat_version == Stat.stat_version) + if (read(fd, (char *) &stats, sizeof stats) == sizeof stats && + stats.stat_size == sizeof stats && + stats.stat_magic == Stat.stat_magic && + stats.stat_version == Stat.stat_version) { /* merge current statistics into statfile */ register int i; for (i = 0; i < MAXMAILERS; i++) { - stat.stat_nf[i] += Stat.stat_nf[i]; - stat.stat_bf[i] += Stat.stat_bf[i]; - stat.stat_nt[i] += Stat.stat_nt[i]; - stat.stat_bt[i] += Stat.stat_bt[i]; - stat.stat_nr[i] += Stat.stat_nr[i]; - stat.stat_nd[i] += Stat.stat_nd[i]; + stats.stat_nf[i] += Stat.stat_nf[i]; + stats.stat_bf[i] += Stat.stat_bf[i]; + stats.stat_nt[i] += Stat.stat_nt[i]; + stats.stat_bt[i] += Stat.stat_bt[i]; + stats.stat_nr[i] += Stat.stat_nr[i]; + stats.stat_nd[i] += Stat.stat_nd[i]; } + stats.stat_cr += Stat.stat_cr; + stats.stat_ct += Stat.stat_ct; + stats.stat_cf += Stat.stat_cf; } else - bcopy((char *) &Stat, (char *) &stat, sizeof stat); + memmove((char *) &stats, (char *) &Stat, sizeof stats); /* write out results */ (void) lseek(fd, (off_t) 0, 0); - (void) write(fd, (char *) &stat, sizeof stat); + (void) write(fd, (char *) &stats, sizeof stats); (void) close(fd); /* clear the structure to avoid future disappointment */ - bzero(&Stat, sizeof stat); - GotStats = FALSE; + clearstats(); } |