[PATCH] D44225: Fix identification of COFF executable files

Zachary Turner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 8 11:50:01 PST 2018


This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rL327050: Fix detection of COFF executable files. (authored by zturner, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D44225?vs=137482&id=137629#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D44225

Files:
  llvm/trunk/lib/BinaryFormat/Magic.cpp


Index: llvm/trunk/lib/BinaryFormat/Magic.cpp
===================================================================
--- llvm/trunk/lib/BinaryFormat/Magic.cpp
+++ llvm/trunk/lib/BinaryFormat/Magic.cpp
@@ -14,6 +14,7 @@
 #include "llvm/BinaryFormat/MachO.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/FileSystem.h"
+#include "llvm/Support/MemoryBuffer.h"
 
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
 #include <unistd.h>
@@ -205,15 +206,12 @@
 }
 
 std::error_code llvm::identify_magic(const Twine &Path, file_magic &Result) {
-  int FD;
-  if (std::error_code EC = openFileForRead(Path, FD))
-    return EC;
-
-  char Buffer[32];
-  int Length = read(FD, Buffer, sizeof(Buffer));
-  if (close(FD) != 0 || Length < 0)
-    return std::error_code(errno, std::generic_category());
+  auto FileOrError = MemoryBuffer::getFile(Path);
+  if (!FileOrError)
+    return FileOrError.getError();
+
+  std::unique_ptr<MemoryBuffer> FileBuffer = std::move(*FileOrError);
+  Result = identify_magic(FileBuffer->getBuffer());
 
-  Result = identify_magic(StringRef(Buffer, Length));
   return std::error_code();
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44225.137629.patch
Type: text/x-patch
Size: 1118 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180308/a2f74454/attachment.bin>


More information about the llvm-commits mailing list