Mercurial > hg > octave-kai > gnulib-hg
annotate lib/ftello.c @ 10780:5c7a68d31801
Add support for Haiku.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Mon, 10 Nov 2008 12:37:32 +0100 |
parents | bbbbbf4cd1c5 |
children | e8d2c6fc33ad |
rev | line source |
---|---|
8868 | 1 /* An ftello() function that works around platform bugs. |
2 Copyright (C) 2007 Free Software Foundation, Inc. | |
3 | |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8872
diff
changeset
|
4 This program is free software: you can redistribute it and/or modify |
8868 | 5 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8872
diff
changeset
|
6 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8872
diff
changeset
|
7 (at your option) any later version. |
8868 | 8 |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8872
diff
changeset
|
14 You should have received a copy of the GNU General Public License |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8872
diff
changeset
|
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
8868 | 16 |
17 #include <config.h> | |
18 | |
19 /* Specification. */ | |
20 #include <stdio.h> | |
21 | |
8872 | 22 /* Get lseek. */ |
23 #include <unistd.h> | |
24 | |
8868 | 25 #undef ftello |
26 #if !HAVE_FTELLO | |
8872 | 27 # undef ftell |
8868 | 28 # define ftello ftell |
29 #endif | |
30 | |
31 off_t | |
32 rpl_ftello (FILE *fp) | |
33 { | |
8872 | 34 #if LSEEK_PIPE_BROKEN |
35 /* mingw gives bogus answers rather than failure on non-seekable files. */ | |
36 if (lseek (fileno (fp), 0, SEEK_CUR) == -1) | |
37 return -1; | |
38 #endif | |
39 | |
8868 | 40 #if defined __SL64 && defined __SCLE /* Cygwin */ |
41 if ((fp->_flags & __SL64) == 0) | |
42 { | |
43 /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit | |
44 mode; but has an ftello that requires 64-bit mode. */ | |
45 FILE *tmp = fopen ("/dev/null", "r"); | |
46 if (!tmp) | |
47 return -1; | |
48 fp->_flags |= __SL64; | |
49 fp->_seek64 = tmp->_seek64; | |
50 fclose (tmp); | |
51 } | |
52 #endif | |
53 return ftello (fp); | |
54 } |