home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_10_02 / 1002017a < prev    next >
Text File  |  1991-12-17  |  681b  |  35 lines

  1.  
  2. Listing 5 -- xfgpos.c
  3.  
  4. /* _Fgpos function -- UNIX version */
  5. #include <errno.h>
  6. #include "xstdio.h"
  7.  
  8.         /* UNIX system call */
  9. long _Lseek(int, long, int);
  10.  
  11. long _Fgpos(FILE *str, fpos_t *ptr)
  12.     {   /* get file position */
  13.     long loff = _Lseek(str->_Handle, 0L, 1);
  14.  
  15.     if (loff == -1)
  16.         {   /* query failed */
  17.         errno = EFPOS;
  18.         return (EOF);
  19.         }
  20.     if (str-_Mode & _MWRITE)
  21.         loff += str->_Next - str->_Buf;
  22.     else if (str->_Mode & _MREAD)
  23.         loff -= str->_Nback
  24.             ? str->_Rsave - str->_Next + str->_Nback
  25.             : str->_Rend - str->_Next;
  26.     if (ptr == NULL)
  27.         return (loff);  /* ftell */
  28.     else
  29.         {   /* fgetpos */
  30.         ptr->_Off = loff;
  31.         return (0);
  32.         }
  33.     }
  34.  
  35.