1 /*
2 Copyright (c) 1990 The Regents of the University of California.
3 All rights reserved.
4 
5 Redistribution and use in source and binary forms are permitted
6 provided that the above copyright notice and this paragraph are
7 duplicated in all such forms and that any documentation,
8 and/or other materials related to such
9 distribution and use acknowledge that the software was developed
10 by the University of California, Berkeley.  The name of the
11 University may not be used to endorse or promote products derived
12 from this software without specific prior written permission.
13 THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  */
17 /*
18 FUNCTION
19 <<fgetpos64>>---record position in a large stream or file
20 
21 INDEX
22 	fgetpos64
23 INDEX
24 	_fgetpos64_r
25 
26 SYNOPSIS
27 	#include <stdio.h>
28 	int fgetpos64(FILE *<[fp]>, _fpos64_t *<[pos]>);
29 	int _fgetpos64_r(struct _reent *<[ptr]>, FILE *<[fp]>,
30 	                 _fpos64_t *<[pos]>);
31 
32 DESCRIPTION
33 Objects of type <<FILE>> can have a ``position'' that records how much
34 of the file your program has already read.  Many of the <<stdio>> functions
35 depend on this position, and many change it as a side effect.
36 
37 You can use <<fgetpos64>> to report on the current position for a file
38 identified by <[fp]> that was opened by <<fopen64>>; <<fgetpos>> will write
39 a value representing that position at <<*<[pos]>>>.  Later, you can
40 use this value with <<fsetpos64>> to return the file to this
41 position.
42 
43 In the current implementation, <<fgetpos64>> simply uses a character
44 count to represent the file position; this is the same number that
45 would be returned by <<ftello64>>.
46 
47 RETURNS
48 <<fgetpos64>> returns <<0>> when successful.  If <<fgetpos64>> fails, the
49 result is <<1>>.  Failure occurs on streams that do not support
50 positioning or streams not opened via <<fopen64>>; the global <<errno>>
51 indicates these conditions with the value <<ESPIPE>>.
52 
53 PORTABILITY
54 <<fgetpos64>> is a glibc extension.
55 
56 No supporting OS subroutines are required.
57 */
58 
59 #define _DEFAULT_SOURCE
60 #include <stdio.h>
61 
62 #ifdef __LARGE64_FILES
63 
64 int
fgetpos64(FILE * fp,_fpos64_t * pos)65 fgetpos64 (
66 	FILE * fp,
67 	_fpos64_t * pos)
68 {
69   *pos = (_fpos64_t)ftello64 (fp);
70 
71   if (*pos != -1)
72     {
73       return 0;
74     }
75   return 1;
76 }
77 
78 #endif /* __LARGE64_FILES */
79