eeb6d312f5
prevents doing this in one pass.
62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
/*
|
|
* Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
|
|
* All rights reserved.
|
|
* Copyright (c) 1990, 1993
|
|
* The Regents of the University of California. All rights reserved.
|
|
*
|
|
* This code is derived from software contributed to Berkeley by
|
|
* Chris Torek.
|
|
*
|
|
* By using this file, you agree to the terms and conditions set
|
|
* forth in the LICENSE file which can be found at the top level of
|
|
* the sendmail distribution.
|
|
*/
|
|
|
|
#include <sm/gen.h>
|
|
SM_RCSID("@(#)$Id: fwalk.c,v 1.21 2001/09/11 04:04:48 gshapiro Exp $")
|
|
#include <errno.h>
|
|
#include <sm/io.h>
|
|
#include "local.h"
|
|
#include "glue.h"
|
|
|
|
/*
|
|
** SM_FWALK -- apply a function to all found-open file pointers
|
|
**
|
|
** Parameters:
|
|
** function -- a function vector to be applied
|
|
** timeout -- time to complete actions (milliseconds)
|
|
**
|
|
** Returns:
|
|
** The (binary) OR'd result of each function call
|
|
*/
|
|
|
|
int
|
|
sm_fwalk(function, timeout)
|
|
int (*function) __P((SM_FILE_T *, int *));
|
|
int *timeout;
|
|
{
|
|
register SM_FILE_T *fp;
|
|
register int n, ret;
|
|
register struct sm_glue *g;
|
|
int fptimeout;
|
|
|
|
ret = 0;
|
|
for (g = &smglue; g != NULL; g = g->gl_next)
|
|
{
|
|
for (fp = g->gl_iobs, n = g->gl_niobs; --n >= 0; fp++)
|
|
{
|
|
if (fp->f_flags != 0)
|
|
{
|
|
if (*timeout == SM_TIME_DEFAULT)
|
|
fptimeout = fp->f_timeout;
|
|
else
|
|
fptimeout = *timeout;
|
|
if (fptimeout == SM_TIME_IMMEDIATE)
|
|
continue; /* skip it */
|
|
ret |= (*function)(fp, &fptimeout);
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|