aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2018-07-06 16:53:48 +0200
committerFlorian Weimer <fweimer@redhat.com>2018-07-06 17:52:54 +0200
commit3f5e3f5d066dcffb80af48ae2cf35a01a85a8f10 (patch)
tree2eb99509fbdfb5f61ee40bdf634c63f092b85ae2 /include
parent397c54c1afa531242602fe3ac7bb47eff0e909f9 (diff)
downloadglibc-3f5e3f5d066dcffb80af48ae2cf35a01a85a8f10.zip
glibc-3f5e3f5d066dcffb80af48ae2cf35a01a85a8f10.tar.gz
glibc-3f5e3f5d066dcffb80af48ae2cf35a01a85a8f10.tar.bz2
libio: Implement internal function __libc_readline_unlocked
This is a variant of fgets which fails with ERANGE if the buffer is too small, and the buffer length is given as an argument of type size_t. This function will be useful for implementing NSS file reading operations. Compared to a direct implementation using the public API, it avoids an lseek system call in case the line terminator can be found in the internal read buffer.
Diffstat (limited to 'include')
-rw-r--r--include/stdio.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/stdio.h b/include/stdio.h
index 3ba0edc..9162d4e 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -127,6 +127,19 @@ extern int __fxprintf (FILE *__fp, const char *__fmt, ...)
extern int __fxprintf_nocancel (FILE *__fp, const char *__fmt, ...)
__attribute__ ((__format__ (__printf__, 2, 3))) attribute_hidden;
+/* Read the next line from FP into BUFFER, of LENGTH bytes. LINE will
+ include the line terminator and a NUL terminator. On success,
+ return the length of the line, including the line terminator, but
+ excluding the NUL termintor. On EOF, return zero and write a NUL
+ terminator. On error, return -1 and set errno. If the total byte
+ count (line and both terminators) exceeds LENGTH, return -1 and set
+ errno to ERANGE (but do not mark the stream as failed).
+
+ The behavior is undefined if FP is not seekable, or if the stream
+ is already in an error state. */
+ssize_t __libc_readline_unlocked (FILE *fp, char *buffer, size_t length);
+libc_hidden_proto (__libc_readline_unlocked);
+
extern const char *const _sys_errlist_internal[] attribute_hidden;
extern int _sys_nerr_internal attribute_hidden;
@@ -170,6 +183,10 @@ libc_hidden_proto (fwrite)
libc_hidden_proto (fseek)
extern __typeof (ftello) __ftello;
libc_hidden_proto (__ftello)
+extern __typeof (fseeko64) __fseeko64;
+libc_hidden_proto (__fseeko64)
+extern __typeof (ftello64) __ftello64;
+libc_hidden_proto (__ftello64)
libc_hidden_proto (fflush)
libc_hidden_proto (fflush_unlocked)
extern __typeof (fflush_unlocked) __fflush_unlocked;