@@ -117,8 +117,9 @@ FileSystem::~FileSystem() = default;
117117
118118ErrorOr<std::unique_ptr<MemoryBuffer>>
119119FileSystem::getBufferForFile (const llvm::Twine &Name, int64_t FileSize,
120- bool RequiresNullTerminator, bool IsVolatile) {
121- auto F = openFileForRead (Name);
120+ bool RequiresNullTerminator, bool IsVolatile,
121+ bool IsText) {
122+ auto F = IsText ? openFileForRead (Name) : openFileForReadBinary (Name);
122123 if (!F)
123124 return F.getError ();
124125
@@ -279,6 +280,8 @@ class RealFileSystem : public FileSystem {
279280
280281 ErrorOr<Status> status (const Twine &Path) override ;
281282 ErrorOr<std::unique_ptr<File>> openFileForRead (const Twine &Path) override ;
283+ ErrorOr<std::unique_ptr<File>>
284+ openFileForReadBinary (const Twine &Path) override ;
282285 directory_iterator dir_begin (const Twine &Dir, std::error_code &EC) override ;
283286
284287 llvm::ErrorOr<std::string> getCurrentWorkingDirectory () const override ;
@@ -302,6 +305,17 @@ class RealFileSystem : public FileSystem {
302305 return Storage;
303306 }
304307
308+ ErrorOr<std::unique_ptr<File>> openFileForRead (const Twine &Name,
309+ sys::fs::OpenFlags Flags) {
310+ SmallString<256 > RealName, Storage;
311+ Expected<file_t > FDOrErr = sys::fs::openNativeFileForRead (
312+ adjustPath (Name, Storage), Flags, &RealName);
313+ if (!FDOrErr)
314+ return errorToErrorCode (FDOrErr.takeError ());
315+ return std::unique_ptr<File>(
316+ new RealFile (*FDOrErr, Name.str (), RealName.str ()));
317+ }
318+
305319 struct WorkingDirectory {
306320 // The current working directory, without symlinks resolved. (echo $PWD).
307321 SmallString<128 > Specified;
@@ -324,13 +338,12 @@ ErrorOr<Status> RealFileSystem::status(const Twine &Path) {
324338
325339ErrorOr<std::unique_ptr<File>>
326340RealFileSystem::openFileForRead (const Twine &Name) {
327- SmallString<256 > RealName, Storage;
328- Expected<file_t > FDOrErr = sys::fs::openNativeFileForRead (
329- adjustPath (Name, Storage), sys::fs::OF_None, &RealName);
330- if (!FDOrErr)
331- return errorToErrorCode (FDOrErr.takeError ());
332- return std::unique_ptr<File>(
333- new RealFile (*FDOrErr, Name.str (), RealName.str ()));
341+ return openFileForRead (Name, sys::fs::OF_Text);
342+ }
343+
344+ ErrorOr<std::unique_ptr<File>>
345+ RealFileSystem::openFileForReadBinary (const Twine &Name) {
346+ return openFileForRead (Name, sys::fs::OF_None);
334347}
335348
336349llvm::ErrorOr<std::string> RealFileSystem::getCurrentWorkingDirectory () const {
0 commit comments