LCOV - code coverage report
Current view: top level - include/llvm/BinaryFormat - Magic.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 2 2 100.0 %
Date: 2017-09-14 15:23:50 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- llvm/BinaryFormat/Magic.h - File magic identification ----*- C++ -*-===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : 
      10             : #ifndef LLVM_BINARYFORMAT_MAGIC_H
      11             : #define LLVM_BINARYFORMAT_MAGIC_H
      12             : 
      13             : #include "llvm/ADT/StringRef.h"
      14             : #include "llvm/ADT/Twine.h"
      15             : 
      16             : #include <system_error>
      17             : 
      18             : namespace llvm {
      19             : /// file_magic - An "enum class" enumeration of file types based on magic (the
      20             : /// first N bytes of the file).
      21             : struct file_magic {
      22             :   enum Impl {
      23             :     unknown = 0,       ///< Unrecognized file
      24             :     bitcode,           ///< Bitcode file
      25             :     archive,           ///< ar style archive file
      26             :     elf,               ///< ELF Unknown type
      27             :     elf_relocatable,   ///< ELF Relocatable object file
      28             :     elf_executable,    ///< ELF Executable image
      29             :     elf_shared_object, ///< ELF dynamically linked shared lib
      30             :     elf_core,          ///< ELF core image
      31             :     macho_object,      ///< Mach-O Object file
      32             :     macho_executable,  ///< Mach-O Executable
      33             :     macho_fixed_virtual_memory_shared_lib,    ///< Mach-O Shared Lib, FVM
      34             :     macho_core,                               ///< Mach-O Core File
      35             :     macho_preload_executable,                 ///< Mach-O Preloaded Executable
      36             :     macho_dynamically_linked_shared_lib,      ///< Mach-O dynlinked shared lib
      37             :     macho_dynamic_linker,                     ///< The Mach-O dynamic linker
      38             :     macho_bundle,                             ///< Mach-O Bundle file
      39             :     macho_dynamically_linked_shared_lib_stub, ///< Mach-O Shared lib stub
      40             :     macho_dsym_companion,                     ///< Mach-O dSYM companion file
      41             :     macho_kext_bundle,                        ///< Mach-O kext bundle file
      42             :     macho_universal_binary,                   ///< Mach-O universal binary
      43             :     coff_cl_gl_object,   ///< Microsoft cl.exe's intermediate code file
      44             :     coff_object,         ///< COFF object file
      45             :     coff_import_library, ///< COFF import library
      46             :     pecoff_executable,   ///< PECOFF executable file
      47             :     windows_resource,    ///< Windows compiled resource file (.res)
      48             :     wasm_object          ///< WebAssembly Object file
      49             :   };
      50             : 
      51             :   bool is_object() const { return V != unknown; }
      52             : 
      53             :   file_magic() = default;
      54        1650 :   file_magic(Impl V) : V(V) {}
      55       11621 :   operator Impl() const { return V; }
      56             : 
      57             : private:
      58             :   Impl V = unknown;
      59             : };
      60             : 
      61             : /// @brief Identify the type of a binary file based on how magical it is.
      62             : file_magic identify_magic(StringRef magic);
      63             : 
      64             : /// @brief Get and identify \a path's type based on its content.
      65             : ///
      66             : /// @param path Input path.
      67             : /// @param result Set to the type of file, or file_magic::unknown.
      68             : /// @returns errc::success if result has been successfully set, otherwise a
      69             : ///          platform-specific error_code.
      70             : std::error_code identify_magic(const Twine &path, file_magic &result);
      71             : } // namespace llvm
      72             : 
      73             : #endif

Generated by: LCOV version 1.13