xref: /haiku/src/system/libroot/posix/glibc/libio/ftello64.c (revision 5af32e752606778be5dd7379f319fe43cb3f6b8c)
1*5af32e75SAxel Dörfler /* Copyright (C) 1993, 1995-2001, 2002 Free Software Foundation, Inc.
2*5af32e75SAxel Dörfler    This file is part of the GNU C Library.
3*5af32e75SAxel Dörfler 
4*5af32e75SAxel Dörfler    The GNU C Library is free software; you can redistribute it and/or
5*5af32e75SAxel Dörfler    modify it under the terms of the GNU Lesser General Public
6*5af32e75SAxel Dörfler    License as published by the Free Software Foundation; either
7*5af32e75SAxel Dörfler    version 2.1 of the License, or (at your option) any later version.
8*5af32e75SAxel Dörfler 
9*5af32e75SAxel Dörfler    The GNU C Library is distributed in the hope that it will be useful,
10*5af32e75SAxel Dörfler    but WITHOUT ANY WARRANTY; without even the implied warranty of
11*5af32e75SAxel Dörfler    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*5af32e75SAxel Dörfler    Lesser General Public License for more details.
13*5af32e75SAxel Dörfler 
14*5af32e75SAxel Dörfler    You should have received a copy of the GNU Lesser General Public
15*5af32e75SAxel Dörfler    License along with the GNU C Library; if not, write to the Free
16*5af32e75SAxel Dörfler    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17*5af32e75SAxel Dörfler    02111-1307 USA.
18*5af32e75SAxel Dörfler 
19*5af32e75SAxel Dörfler    As a special exception, if you link the code in this file with
20*5af32e75SAxel Dörfler    files compiled with a GNU compiler to produce an executable,
21*5af32e75SAxel Dörfler    that does not cause the resulting executable to be covered by
22*5af32e75SAxel Dörfler    the GNU Lesser General Public License.  This exception does not
23*5af32e75SAxel Dörfler    however invalidate any other reasons why the executable file
24*5af32e75SAxel Dörfler    might be covered by the GNU Lesser General Public License.
25*5af32e75SAxel Dörfler    This exception applies to code released by its copyright holders
26*5af32e75SAxel Dörfler    in files containing the exception.  */
27*5af32e75SAxel Dörfler 
28*5af32e75SAxel Dörfler #include <stdio.h>
29*5af32e75SAxel Dörfler #include <stdlib.h>
30*5af32e75SAxel Dörfler #include <libioP.h>
31*5af32e75SAxel Dörfler #include <errno.h>
32*5af32e75SAxel Dörfler 
33*5af32e75SAxel Dörfler 
34*5af32e75SAxel Dörfler off64_t
ftello64(fp)35*5af32e75SAxel Dörfler ftello64 (fp)
36*5af32e75SAxel Dörfler      _IO_FILE *fp;
37*5af32e75SAxel Dörfler {
38*5af32e75SAxel Dörfler #ifdef _G_LSEEK64
39*5af32e75SAxel Dörfler   _IO_off64_t pos;
40*5af32e75SAxel Dörfler   CHECK_FILE (fp, -1L);
41*5af32e75SAxel Dörfler   _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp);
42*5af32e75SAxel Dörfler   _IO_flockfile (fp);
43*5af32e75SAxel Dörfler   pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0);
44*5af32e75SAxel Dörfler   if (_IO_in_backup (fp))
45*5af32e75SAxel Dörfler     {
46*5af32e75SAxel Dörfler       if (fp->_mode <= 0)
47*5af32e75SAxel Dörfler 	pos -= fp->_IO_save_end - fp->_IO_save_base;
48*5af32e75SAxel Dörfler     }
49*5af32e75SAxel Dörfler   _IO_funlockfile (fp);
50*5af32e75SAxel Dörfler   _IO_cleanup_region_end (0);
51*5af32e75SAxel Dörfler   if (pos == _IO_pos_BAD)
52*5af32e75SAxel Dörfler     {
53*5af32e75SAxel Dörfler #ifdef EIO
54*5af32e75SAxel Dörfler       if (errno == 0)
55*5af32e75SAxel Dörfler 	__set_errno (EIO);
56*5af32e75SAxel Dörfler #endif
57*5af32e75SAxel Dörfler       return -1L;
58*5af32e75SAxel Dörfler     }
59*5af32e75SAxel Dörfler   return pos;
60*5af32e75SAxel Dörfler #else
61*5af32e75SAxel Dörfler   __set_errno (ENOSYS);
62*5af32e75SAxel Dörfler   return -1;
63*5af32e75SAxel Dörfler #endif
64*5af32e75SAxel Dörfler }
65