update for HEAD-2003021201
[reactos.git] / lib / crtdll / stdio / ftell.c
1 /* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */
2 /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
3
4 #include <msvcrt/stdio.h>
5 #include <msvcrt/fcntl.h>
6 #include <msvcrt/io.h>
7 #include <errno.h>
8 #include <msvcrt/internal/file.h>
9
10
11 long ftell(FILE *f)
12 {
13   long tres;
14   int adjust=0;
15
16   if (!f) 
17   {
18     __set_errno(EBADF);
19     return -1;
20   }
21
22   if (f->_cnt < 0)
23     f->_cnt = 0;
24   else if (f->_flag&_IOREAD)
25   {
26     adjust = - f->_cnt;
27   }
28   else if (f->_flag&(_IOWRT))
29   {
30     if (f->_base && (f->_flag&_IONBF)==0)
31       adjust = f->_ptr - f->_base;
32   }
33   else
34     return -1;
35
36   tres = lseek(fileno(f), 0L, SEEK_CUR);
37   if (tres<0)
38     return tres;
39   tres += adjust;
40   
41   //f->_cnt = f->_bufsiz - tres;
42   //f->_ptr = f->_base + tres;
43
44   return tres;
45 }