summaryrefslogtreecommitdiffstats
path: root/contrib/sendmail/libsm/fpos.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sendmail/libsm/fpos.c')
-rw-r--r--contrib/sendmail/libsm/fpos.c153
1 files changed, 0 insertions, 153 deletions
diff --git a/contrib/sendmail/libsm/fpos.c b/contrib/sendmail/libsm/fpos.c
deleted file mode 100644
index 4fe22bf..0000000
--- a/contrib/sendmail/libsm/fpos.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2000-2001, 2004 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: fpos.c,v 1.39 2005/06/14 23:07:20 ca Exp $")
-#include <errno.h>
-#include <setjmp.h>
-#include <sm/time.h>
-#include <sm/heap.h>
-#include <sm/signal.h>
-#include <sm/clock.h>
-#include <sm/io.h>
-#include <sm/assert.h>
-#include "local.h"
-
-static void tellalrm __P((int));
-static jmp_buf TellTimeOut;
-
-/*
-** TELLALRM -- handler when timeout activated for sm_io_tell()
-**
-** Returns flow of control to where setjmp(TellTimeOut) was set.
-**
-** Parameters:
-** sig -- unused
-**
-** Returns:
-** does not return
-**
-** Side Effects:
-** returns flow of control to setjmp(TellTimeOut).
-**
-** NOTE: THIS CAN BE CALLED FROM A SIGNAL HANDLER. DO NOT ADD
-** ANYTHING TO THIS ROUTINE UNLESS YOU KNOW WHAT YOU ARE
-** DOING.
-*/
-
-/* ARGSUSED0 */
-static void
-tellalrm(sig)
- int sig;
-{
- longjmp(TellTimeOut, 1);
-}
-
-/*
-** SM_IO_TELL -- position the file pointer
-**
-** Paramters:
-** fp -- the file pointer to get repositioned
-** timeout -- time to complete the tell (milliseconds)
-**
-** Returns:
-** Success -- the repositioned location.
-** Failure -- -1 (minus 1) and sets errno
-*/
-
-long
-sm_io_tell(fp, timeout)
- register SM_FILE_T *fp;
- int SM_NONVOLATILE timeout;
-{
- register off_t pos;
- SM_EVENT *evt = NULL;
-
- SM_REQUIRE_ISA(fp, SmFileMagic);
- if (fp->f_seek == NULL)
- {
- errno = ESPIPE; /* historic practice */
- return -1L;
- }
-
- if (timeout == SM_TIME_DEFAULT)
- timeout = fp->f_timeout;
- if (timeout == SM_TIME_IMMEDIATE)
- {
- /*
- ** Filling the buffer will take time and we are wanted to
- ** return immediately. So...
- */
-
- errno = EAGAIN;
- return -1L;
- }
-
- /*
- ** Find offset of underlying I/O object, then adjust byte position
- ** may adjust seek offset on append stream
- */
-
- (void) sm_flush(fp, (int *) &timeout);
-
- /* This is where we start the timeout */
- if (timeout != SM_TIME_FOREVER)
- {
- if (setjmp(TellTimeOut) != 0)
- {
- errno = EAGAIN;
- return -1L;
- }
-
- evt = sm_seteventm(timeout, tellalrm, 0);
- }
-
- if (fp->f_flags & SMOFF)
- pos = fp->f_lseekoff;
- else
- {
- /* XXX only set the timeout here? */
- pos = (*fp->f_seek)(fp, (off_t) 0, SM_IO_SEEK_CUR);
- if (pos == -1L)
- goto clean;
- }
- if (fp->f_flags & SMRD)
- {
- /*
- ** Reading. Any unread characters (including
- ** those from ungetc) cause the position to be
- ** smaller than that in the underlying object.
- */
-
- pos -= fp->f_r;
- if (HASUB(fp))
- pos -= fp->f_ur;
- }
- else if (fp->f_flags & SMWR && fp->f_p != NULL)
- {
- /*
- ** Writing. Any buffered characters cause the
- ** position to be greater than that in the
- ** underlying object.
- */
-
- pos += fp->f_p - fp->f_bf.smb_base;
- }
-
-clean:
- /* We're back. So undo our timeout and handler */
- if (evt != NULL)
- sm_clrevent(evt);
- return pos;
-}
OpenPOWER on IntegriCloud