From fb64a78174042189f4d012cbd748d565f021cd69 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Fri, 29 May 2020 05:45:40 +0200 Subject: [PATCH] read-file: disable buffering if RF_SENSITIVE is set * lib/read-file.c (read_file): Call setvbuf if RF_SENSITIVE. Suggested by Glenn Strauss. (fread_file): Suggest calling setvbuf before calling this function. Suggested by Bruno Haible. --- ChangeLog | 8 ++++++++ lib/read-file.c | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 566dfabbc2..9ff3543225 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2020-05-29 Daiki Ueno + + read-file: disable buffering if RF_SENSITIVE is set + * lib/read-file.c (read_file): Call setvbuf if RF_SENSITIVE. + Suggested by Glenn Strauss. + (fread_file): Suggest calling setvbuf before calling this + function. Suggested by Bruno Haible. + 2020-05-29 Bruno Haible wmemchr, wmemcmp, wmemcpy, wmemmove, wmemset: Fix autoconf test. diff --git a/lib/read-file.c b/lib/read-file.c index 36780cc157..88bc0070a9 100644 --- a/lib/read-file.c +++ b/lib/read-file.c @@ -43,8 +43,11 @@ *LENGTH. On errors, *LENGTH is undefined, errno preserves the values set by system functions (if any), and NULL is returned. - If the RF_SENSITIVE flag is set in FLAGS, the memory buffer - internally allocated will be cleared upon failure. */ + If the RF_SENSITIVE flag is set in FLAGS: + - You should control the buffering of STREAM using 'setvbuf'. Either + clear the buffer of STREAM after closing it, or disable buffering of + STREAM before calling this function. + - The memory buffer internally allocated will be cleared upon failure. */ char * fread_file (FILE *stream, int flags, size_t *length) { @@ -195,6 +198,9 @@ read_file (const char *filename, int flags, size_t *length) if (!stream) return NULL; + if (flags & RF_SENSITIVE) + setvbuf (stream, NULL, _IONBF, 0); + out = fread_file (stream, flags, length); save_errno = errno; -- 2.39.5