summaryrefslogtreecommitdiff
path: root/libc/stdio/_rfill.c
blob: e9d2fa698788cbcbd7182e4e489729a6f18efc9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/* Copyright (C) 2004       Manuel Novoa III    <mjn3@codepoet.org>
 *
 * GNU Library General Public License (LGPL) version 2 or later.
 *
 * Dedicated to Toni.  See uClibc/DEDICATION.mjn3 for details.
 */

#include "_stdio.h"

#ifdef __UCLIBC_MJN3_ONLY__
#warning CONSIDER: Do we really need a seperate rfill function?
#endif

#ifdef __STDIO_BUFFERS

/* Read some data into the buffer.
 * Returns number of bytes read into the buffer.
 * If 0 is returned, then either EOF or ERROR.
 * Side effects are those of _stdio_READ.
 */

size_t attribute_hidden __stdio_rfill(register FILE *__restrict stream)
{
	size_t rv;

	__STDIO_STREAM_VALIDATE(stream);
	assert(stream->__filedes >= -2);
	assert(__STDIO_STREAM_IS_READING(stream));
	assert(!__STDIO_STREAM_BUFFER_RAVAIL(stream)); /* Buffer must be empty. */
	assert(__STDIO_STREAM_BUFFER_SIZE(stream));	/* Must have a buffer. */
	assert(!(stream->__modeflags & __FLAG_UNGOT));
#ifdef __UCLIBC_HAS_STDIO_GETC_MACRO__
	assert(stream->__bufgetc_u == stream->__bufstart);
#endif

	rv = __stdio_READ(stream, stream->__bufstart,
					  stream->__bufend - stream->__bufstart);
	stream->__bufpos = stream->__bufstart;
	stream->__bufread = stream->__bufstart + rv;

	__STDIO_STREAM_VALIDATE(stream);
	return rv;
}

#endif