Binary.cpp revision c44c915372ee453bd63a8b6b3eca586ab6f18545
1c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//===- Binary.cpp - A generic binary file -----------------------*- C++ -*-===//
2c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//
3c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//                     The LLVM Compiler Infrastructure
4c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//
5c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// This file is distributed under the University of Illinois Open Source
6c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// License. See LICENSE.TXT for details.
7c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//
8c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//===----------------------------------------------------------------------===//
9c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//
10c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// This file defines the Binary class.
11c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//
12c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//===----------------------------------------------------------------------===//
13c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer
14c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer#include "llvm/Object/Binary.h"
15c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer#include "llvm/ADT/StringRef.h"
16c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer#include "llvm/Support/MemoryBuffer.h"
17c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer#include "llvm/Support/Path.h"
18c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer
19c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencerusing namespace llvm;
20c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencerusing namespace object;
21c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer
22c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. SpencerBinary::~Binary() {
23c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  delete Data;
24c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer}
25c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer
26c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. SpencerBinary::Binary(unsigned int Type, MemoryBuffer *Source)
27c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  : TypeID(Type)
28c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  , Data(Source) {}
29c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer
30c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. SpencerStringRef Binary::getData() const {
31c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  return Data->getBuffer();
32c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer}
33c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer
34c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. SpencerStringRef Binary::getFileName() const {
35c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  return Data->getBufferIdentifier();
36c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer}
37c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer
38c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencererror_code object::createBinary(MemoryBuffer *Source,
39c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer                                OwningPtr<Binary> &Result) {
40c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  // We don't support any at the moment.
41c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  delete Source;
42c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  return object_error::invalid_file_type;
43c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer}
44c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer
45c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencererror_code object::createBinary(StringRef Path, OwningPtr<Binary> &Result) {
46c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  OwningPtr<MemoryBuffer> File;
47c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  if (error_code ec = MemoryBuffer::getFile(Path, File))
48c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer    return ec;
49c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer  return createBinary(File.take(), Result);
50c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer}
51