Message ID | 2577a04a-611e-ab46-b2c5-f39c71f02cca@suse.cz |
---|---|
State | New |
Headers | show |
On Thu, Jan 05, 2017 at 10:00:33AM +0100, Martin Liška wrote: > Having '-' used as indication that input should be taken from standard input > is unfriendly to pch which calculates md5sum of all input file descriptors. > With that fdopen fails for STDIN_FILENO. To be honest my patch is just a workaround > for the ICE. Is there a better solution for that? Shouldn't we just error on trying to create PCH for - ? I mean, how are you going to use such a PCH file? ./- is something different from - . If it makes some sense (I don't see it), then the question is if the stdin is seakable or not. If it is not seakable, don't we reject it already, or aren't there other places where we want to seek on it? If it is seakable, then you might e.g. just read it into a buffer in a loop and md5sum the buffer instead of md5summing the stream. Jakub
From ad7f98ed0412e5213f5be9894bcf021b6bf93450 Mon Sep 17 00:00:00 2001 From: marxin <mliska@suse.cz> Date: Wed, 4 Jan 2017 16:04:44 +0100 Subject: [PATCH] Fix precompiled header for '-' being input file (PR pch/78970) libcpp/ChangeLog: 2017-01-04 Martin Liska <mliska@suse.cz> PR pch/78970 * files.c (_cpp_save_file_entries): Do not calculate md5sum when input file is STDIN. --- libcpp/files.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libcpp/files.c b/libcpp/files.c index 969a531033f..cc597d4f22a 100644 --- a/libcpp/files.c +++ b/libcpp/files.c @@ -1885,9 +1885,13 @@ _cpp_save_file_entries (cpp_reader *pfile, FILE *fp) free (result); return false; } - ff = fdopen (f->fd, "rb"); - md5_stream (ff, result->entries[count].sum); - fclose (ff); + /* Skip STDIN as fdopen would fail for the file descriptor. */ + if (f->fd != STDIN_FILENO) + { + ff = fdopen (f->fd, "rb"); + md5_stream (ff, result->entries[count].sum); + fclose (ff); + } f->fd = oldfd; } result->entries[count].size = f->st.st_size; -- 2.11.0