summaryrefslogtreecommitdiffstats
path: root/contrib/sendmail/src/stats.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sendmail/src/stats.c')
-rw-r--r--contrib/sendmail/src/stats.c93
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();
}
OpenPOWER on IntegriCloud