Don't trust st_size of a character device. This fixes using

/dev/stdin as an input when stdin is connected to a tty, for example.

No test, because it's difficult to write a reasonably portable test
for this. /dev/stdin isn't a character device when stdin is redirected
from a file or connected to a pipe.

llvm-svn: 175542
This commit is contained in:
Dan Gohman 2013-02-19 18:57:53 +00:00
parent 3fa275e6f7
commit 22954dbb7e
1 changed files with 3 additions and 3 deletions

View File

@ -322,9 +322,9 @@ error_code MemoryBuffer::getOpenFile(int FD, const char *Filename,
return error_code(errno, posix_category());
}
// If this is a named pipe, we can't trust the size. Create the memory
// buffer by copying off the stream.
if (S_ISFIFO(FileInfo.st_mode)) {
// If this is a named pipe or character device, we can't trust the size.
// Create the memory buffer by copying off the stream.
if (S_ISFIFO(FileInfo.st_mode) || S_ISCHR(FileInfo.st_mode)) {
return getMemoryBufferForStream(FD, Filename, result);
}