]> git.proxmox.com Git - mirror_edk2.git/blame - StdLib/LibC/Stdio/ftello.c
StdLib/LibC/Stdio: fix "missing braces around initializer"
[mirror_edk2.git] / StdLib / LibC / Stdio / ftello.c
CommitLineData
2aa62f2b 1/* $NetBSD: ftello.c,v 1.4 2003/08/07 16:43:26 agc Exp $ */\r
2\r
3/*-\r
4 * Copyright (c) 1990, 1993\r
5 * The Regents of the University of California. All rights reserved.\r
6 *\r
7 * This code is derived from software contributed to Berkeley by\r
8 * Chris Torek.\r
9 *\r
10 * Redistribution and use in source and binary forms, with or without\r
11 * modification, are permitted provided that the following conditions\r
12 * are met:\r
13 * 1. Redistributions of source code must retain the above copyright\r
14 * notice, this list of conditions and the following disclaimer.\r
15 * 2. Redistributions in binary form must reproduce the above copyright\r
16 * notice, this list of conditions and the following disclaimer in the\r
17 * documentation and/or other materials provided with the distribution.\r
18 * 3. Neither the name of the University nor the names of its contributors\r
19 * may be used to endorse or promote products derived from this software\r
20 * without specific prior written permission.\r
21 *\r
22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\r
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\r
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
32 * SUCH DAMAGE.\r
33 */\r
34#include <LibConfig.h>\r
35#include <sys/EfiCdefs.h>\r
36#if defined(LIBC_SCCS) && !defined(lint)\r
37__RCSID("$NetBSD: ftello.c,v 1.4 2003/08/07 16:43:26 agc Exp $");\r
38#endif /* LIBC_SCCS and not lint */\r
39\r
40#include "namespace.h"\r
41#include <assert.h>\r
42#include <errno.h>\r
43#include <stdio.h>\r
44#include "reentrant.h"\r
45#include "local.h"\r
46\r
47#ifdef __weak_alias\r
48__weak_alias(ftello, _ftello)\r
49#endif\r
50\r
51/*\r
52 * ftell: return current offset.\r
53 */\r
54off_t\r
55ftello(FILE *fp)\r
56{\r
57 fpos_t pos;\r
58\r
59 FLOCKFILE(fp);\r
60\r
61 if (fp->_seek == NULL) {\r
62 FUNLOCKFILE(fp);\r
63 errno = ESPIPE; /* historic practice */\r
64 return ((off_t)-1);\r
65 }\r
66\r
67 /*\r
68 * Find offset of underlying I/O object, then\r
69 * adjust for buffered bytes.\r
70 */\r
71 __sflush(fp); /* may adjust seek offset on append stream */\r
72 if (fp->_flags & __SOFF)\r
73 pos = fp->_offset;\r
74 else {\r
75 pos = (*fp->_seek)(fp->_cookie, (fpos_t)0, SEEK_CUR);\r
76 if (pos == (fpos_t)-1) {\r
77 FUNLOCKFILE(fp);\r
78 return (pos);\r
79 }\r
80 }\r
81 if (fp->_flags & __SRD) {\r
82 /*\r
83 * Reading. Any unread characters (including\r
84 * those from ungetc) cause the position to be\r
85 * smaller than that in the underlying object.\r
86 */\r
87 pos -= fp->_r;\r
88 if (HASUB(fp))\r
89 pos -= fp->_ur;\r
90 } else if (fp->_flags & __SWR && fp->_p != NULL) {\r
91 /*\r
92 * Writing. Any buffered characters cause the\r
93 * position to be greater than that in the\r
94 * underlying object.\r
95 */\r
96 pos += fp->_p - fp->_bf._base;\r
97 }\r
98 FUNLOCKFILE(fp);\r
99 return (pos);\r
100}\r