--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/elf4rom/src/elfsection.cpp Fri Jan 15 09:07:44 2010 +0000
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "outputfile.h"
+#include "inputfile.h"
+#include "filefragment.h"
+#include "elfsection.h"
+
+
+ElfSection & ElfSection::operator=(const ElfSection & aSection) {
+ iSectionName = aSection.iSectionName;
+ iSectionHdr = aSection.iSectionHdr;
+ iSectionData = aSection.iSectionData->Clone();
+ iIndex = aSection.iIndex;
+ return *this;
+}
+
+ElfSection::ElfSection(const ElfSection & aSection){
+ *this = aSection;
+}
+
+ElfSectionRomData::ElfSectionRomData(const ElfSectionRomData & aData) {
+ iOffset = aData.iOffset;
+ iSize = aData.iSize;
+}
+
+ElfSectionRomData * ElfSectionRomData::Clone(){
+ return new ElfSectionRomData(*this);
+}
+
+ElfSectionElfData::ElfSectionElfData(const ElfSectionElfData & aData) :
+ iSource(aData.iSource)
+{
+ iOffset = aData.iOffset;
+}
+
+ElfSectionElfData * ElfSectionElfData::Clone(){
+ return new ElfSectionElfData(*this);
+}
+
+void ElfSectionElfData::AddData(OutputFile & aOutputFile){
+ iSource.AddData(aOutputFile);
+}
+
+void ElfSectionElfData::GetFileFragmentData(FileFragmentData & aFileFragmentData ){
+ iSource.GetFileFragmentData(aFileFragmentData);
+}
+
+void ElfSectionElfData::DeleteFileFragmentData(){
+ iSource.DeleteFileFragmentData();
+}
+
+size_t ElfSectionElfData::Size(){
+ return iSource.Size();
+}
+
+size_t ElfSectionElfData::GetOffset(){
+ return iSource.GetOffset();
+}
+
+ElfSectionFileData::ElfSectionFileData(const ElfSectionFileData & aData) {
+ iOffset = aData.iOffset;
+ iInputFile = aData.iInputFile;
+ iData = aData.iData;
+}
+
+ElfSectionFileData * ElfSectionFileData::Clone(){
+ return new ElfSectionFileData(*this);
+}
+
+void ElfSectionFileData::GetFileFragmentData(FileFragmentData & aFileFragmentData ){
+ iData = iInputFile->GetData();
+ SetFileFragmentData(aFileFragmentData, iInputFile->Size(), (char *)iData);
+}
+
+void ElfSectionFileData::DeleteFileFragmentData(){
+ if (iData) {
+ char * d = iData;
+ iData = NULL;
+ delete [] d;
+ }
+}
+
+size_t ElfSectionFileData::Size(){
+ return iInputFile->Size();
+}
+
+ElfSectionNoData::ElfSectionNoData(const ElfSectionNoData & aData) {
+ iOffset = aData.iOffset;
+}
+
+ElfSectionNoData * ElfSectionNoData::Clone(){
+ return new ElfSectionNoData(*this);
+}
+
+void ElfSectionNoData::GetFileFragmentData(FileFragmentData & aFileFragmentData ){
+ SetFileFragmentData(aFileFragmentData, 0u, reinterpret_cast<char *>(NULL));
+}
+
+ElfSection::~ElfSection(){
+ delete iSectionData;
+}
+
+void ElfSection::AddData(OutputFile & aOutputFile){
+ iSectionData->AddData(aOutputFile);
+ SetSize(iSectionData->Size());
+ SetOffset(iSectionData->GetOffset());
+}