ArchiveReader.h revision affc150dc44fab1911775a49636d0ce85333b634
1//===- ArchiveReader.h ----------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#ifndef MCLD_ARCHIVE_READER_INTERFACE_H 10#define MCLD_ARCHIVE_READER_INTERFACE_H 11#ifdef ENABLE_UNITTEST 12#include <gtest.h> 13#endif 14#include "mcld/LD/LDReader.h" 15 16namespace mcld 17{ 18 19class Input; 20class InputTree; 21 22/** \class ArchiveReader 23 * \brief ArchiveReader provides an common interface for all archive readers. 24 * 25 * ArchiveReader also reads the target-independent parts of an archive file. 26 * There are some property on all the archive formats. 27 * 1. All archive elements star on an even boundary, new line padded; 28 * 2. All archive headers are char *; 29 * 3. All archive headers are the same size. 30 */ 31 32class ArchiveReader : public LDReader 33{ 34protected: 35 struct ArchiveMemberHeader 36 { 37 char name[16]; 38 char date[12]; 39 char uid[6]; 40 char gid[6]; 41 char mode[8]; 42 char size[10]; 43 char finalMagic[2]; 44 }; 45 46public: 47 ArchiveReader(); 48 virtual ~ArchiveReader(); 49 50 virtual InputTree *readArchive(Input &input) = 0; 51}; 52 53} // namespace of mcld 54 55#endif 56 57