--- a/toolsandutils/e32tools/elf2e32/source/messageimplementation.cpp Fri Jun 25 18:24:47 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,425 +0,0 @@
-// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// Message Implementation Operations for elf2e32 tool
-// @internalComponent
-// @released
-//
-//
-
-
-#include "messageimplementation.h"
-#include "errorhandler.h"
-#include<iostream>
-#include<stdarg.h>
-#include<string>
-#include <stdio.h>
-
-using std::endl;
-using std::cout;
-typedef std::string String;
-
-char *errorMssgPrefix="elf2e32 : Error: E";
-char *warnMssgPrefix="elf2e32 : Warning: W";
-char *infoMssgPrefix="elf2e32 : Information: I";
-char *colSpace=": ";
-
-enum MessageArraySize{MAX=66};
-
-//Messages stored required for the program
-struct EnglishMessage MessageArray[MAX]=
-{
- {FILEOPENERROR,"Could not open file : %s."},
- {FILEREADERROR,"Could not read file : %s."},
- {FILEWRITEERROR,"Could not write file : %s."},
- {ELFMAGICERROR,"Invalid ELF magic in file : %s."},
- {ELFCLASSERROR,"ELF file %s is not 32 bit."},
- {ELFABIVERSIONERROR,"ELF file %s is not BPABI conformant."},
- {ELFLEERROR,"ELF file %s is not Little Endian."},
- {ELFARMERROR,"ELF file %s does not target ARM."},
- {ELFEXECUTABLEERROR,"ELF file %s is neither executable (ET_EXEC) or shared (ET_DYN)."},
- {ELFSHSTRINDEXERROR,"Error in ELF Section Header String Index : %s."},
- {NAMELIBRARYNOTCORRECT,"Name or Library not supplied correctly : %s[Line No=%d][%s]"},
- {ORDINALSEQUENCEERROR,"Ordinal number is not in sequence : %s[Line No=%d][%s]."},
- {ARGUMENTNAMEERROR,"Argument %s is not correct."},
- {OPTIONNAMEERROR,"Option %s is Unrecognized."},
- {NOARGUMENTERROR,"Missing arguments for option : %s."},
- {OPTIONPREFIXERROR,"Option %s is neither preceedded by '-' nor '--'."},
- {NOREQUIREDOPTIONERROR,"Missing options : %s."},
- {NOFILENAMEERROR,"Missing argument for option : %s."},
- {INVALIDARGUMENTERROR,"Argument '%s' not permitted for option %s."},
- {HUFFMANBUFFEROVERFLOWERROR,"Huffman buffer overflow during E32Image compression."},
- {HUFFMANTOOMANYCODESERROR,"Too many Huffman codes during E32Image compression."},
- {HUFFMANINVALIDCODINGERROR,"Invalid Huffman coding during E32Image compression."},
- {CAPABILITYALLINVERSIONERROR,"-ALL not a valid capability."},
- {CAPABILITYNONEINVERSIONERROR,"+NONE not a valid capability."},
- {UNRECOGNISEDCAPABILITYERROR,"Unrecognized capability : %s."},
- {NOSTATICSYMBOLSERROR,"ELF File %s contains no static symbols."},
- {DLLHASINITIALISEDDATAERROR,"ELF File %s contains initialized writable data."},
- {DLLHASUNINITIALISEDDATAERROR,"ELF File %s contains uninitialized writable data."},
- {ENTRYPOINTCORRUPTERROR,"ELF File %s has corrupt entry point."},
- {ENTRYPOINTNOTSUPPORTEDERROR,"ELF File %s has unsupported entry point type."},
- {EXCEPTIONDESCRIPTOROUTSIDEROERROR,"ELF File %s has invalid exception descriptor."},
- {NOEXCEPTIONDESCRIPTORERROR,"ELF File %s has no exception descriptor."},
- {NEEDSECTIONVIEWERROR,"ELF File %s has no section headers."},
- {DSONOTFOUNDERROR,"DSO %s not found."},
- {UNDEFINEDSYMBOLERROR,"Undefined Symbol %s found in ELF File %s."},
- {SYMBOLMISSINGFROMELFERROR,"Symbol %s Missing from ELF File : %s."},
- {MEMORYALLOCATIONERROR,"Memory allocation failure : %s."},
- {E32IMAGEERROR,"Not able to write E32 Image file."},
- {INVALIDINVOCATIONERROR,"Invalid invocation of elf2e32."},
- {TARGETTYPENOTSPECIFIEDERROR,"Target Type Not Specified."},
- {UNSUPPORTEDTARGETTYPEERROR,"Unsupported Target Type '%s'."},
- {INDEXNOMESSAGEERROR,"There is no message for the message index[%d]."},
- {INDEXNOTREQUIREDERROR,"Message index[%d] not required in message file."},
- {INDEXNOTFOUNDERROR,"Message index [%d] not found in message file"},
- {NOMESSAGEFILEERROR,"There is no message file."},
- {ENTRYPOINTNOTSETERROR,"Entry point is not set for %s."},
- {UNDEFINEDENTRYPOINTERROR,"Entry point and Text segment base both 0, can't tell if entry point set for %s."},
- {ORDINALNOTANUMBER,"Ordinal not a Number : %s[Line No=%d][%s]."},
- {UNRECOGNIZEDTOKEN,"Unrecognized Token : %s[Line No=%d][%s]."},
- {NONAMEMISSING,"NONAME Missing : %s[Line No=%d][%s]."},
- {EXPORTSEXPECTED,"EXPORTS expected before first export entry : %s[Line No=%d][%s]."},
- {ATRATEMISSING,"@ Missing : %s[Line No=%d][%s]."},
- {SYSDEFSMISMATCHERROR,"Symbol %s passed through '--sysdef' option is not at the specified ordinal in the DEF file %s."},
- {SYSDEFERROR,"Ordinal number is not provided as input to the option: %s"},
- {INVALIDE32IMAGEERROR,"%s is not a valid E32Image file."},
- {HUFFMANBUFFERUNDERFLOWERROR,"Huffman buffer underflow on deflate."},
- {HUFFMANINCONSISTENTSIZEERROR,"Inconsistent sizes discovered during uncompression."},
- {MULTIPLESYSDEFERROR, "Multiple system definitions passed to %s should be separated by ';'"},
- {SYSDEFNOSYMBOLERROR, "Symbol Name is not provided as input to the option: %s"},
- {VALUEIGNOREDWARNING, "Value passed to '%s' is ignored"},
- {ELFFILEERROR,"Error while processing the ELF file %s."},
- {SYMBOLCOUNTMISMATCHERROR, "Symbol count provided by DT_ARM_SYMTABSZ is not same as that in the Hash Table in %s"},
- {POSTLINKERERROR,"Fatal Error in Postlinker"},
- {BYTEPAIRINCONSISTENTSIZEERROR, "Inconsistent sizes discovered during Byte pair uncompression." },
- {ILLEGALEXPORTFROMDATASEGMENT,"'%s' : '%s' Import relocation does not refer to code segment."},
- {VALIDATIONERROR,"Image failed validation"}
-};
-
-/**
-Constructor to reset the logging option flag.
-
-@internalComponent
-@released
-*/
-MessageImplementation::MessageImplementation()
-{
- iLogging = false;
-}
-
-/**
-Destructor to close log file if logging is enabled and to clear the messaged.
-@internalComponent
-@released
-*/
-MessageImplementation::~MessageImplementation()
-{
- if(iLogging)
- {
- fclose(iLogPtr);
- }
- iMessage.clear();
-}
-
-/**
-Function to Get Message stored in map.
-
-@internalComponent
-@released
-
-@param aMessageIndex
-Index of the Message to be displayed
-@return Message string to be displayed
-*/
-char * MessageImplementation::GetMessageString(int aMessageIndex)
-{
- Map::iterator p;
-
- if(iMessage.empty())
- {
- if(aMessageIndex <= MAX)
- {
- return MessageArray[aMessageIndex-1].message;
- }
- else
- {
- return NULL;
- }
- }
- else
- {
- p=iMessage.find(aMessageIndex);
- if(p == iMessage.end())
- {
- if(aMessageIndex <= MAX)
- {
- return MessageArray[aMessageIndex-1].message;
- }
- else
- {
- return NULL;
- }
- }
-
- if(aMessageIndex <= MAX)
- {
- return p->second;
- }
- else
- {
- return NULL;
- }
- }
-}
-
-/**
-Function to display output and log message in log file if logging is enable.
-
-@internalComponent
-@released
-
-@param aString
-Message to be displayed
-*/
-void MessageImplementation::Output(const char *aString)
-{
-
- if (iLogging)
- {
- fputs(aString,iLogPtr);
- fputs("\n",iLogPtr);
- }
- cout << aString << endl;
-}
-
-/**
-Function to Get Message stored in map and to display the Message
-
-@internalComponent
-@released
-
-@param
-The type of the message, whether it is Error or Warning or Information.
-@param
-The index of the information and the corresponding arguments.
-*/
-void MessageImplementation::ReportMessage(int aMessageType, int aMsgIndex,...)
-{
- char *reportMessage, *ptr, *tmpMessage;
- char intStr[16];
- char mssgNo[MAXMSSGNOLENGTH];
- int mssgIndex,k;
-
- va_list ap;
- va_start(ap,aMsgIndex);
-
- reportMessage=GetMessageString(aMsgIndex);
-
- if(reportMessage)
- {
- String message;
- switch (aMessageType)
- {
- case ERROR:
- message = errorMssgPrefix;
- break;
- case WARNING:
- message = warnMssgPrefix;
- break;
- case INFORMATION:
- message = infoMssgPrefix;
- break;
- }
- mssgIndex = BASEMSSGNO + aMsgIndex;
- sprintf(mssgNo,"%d",mssgIndex);
- message += mssgNo;
- message += colSpace;
-
- ptr = strchr(reportMessage,'%');
-
- while( ptr != NULL && (ptr[0]) == '%' )
- {
- tmpMessage=new char[ptr - reportMessage + 1];
- strncpy(tmpMessage, reportMessage, ptr - reportMessage+1);
- tmpMessage[ptr - reportMessage]='\0';
- message += tmpMessage;
- delete tmpMessage;
- ptr++;
- switch(ptr[0])
- {
- case 'd':
- k = va_arg(ap, int);
- sprintf(intStr,"%d",k);
- message += intStr;
- ptr++;
- reportMessage = ptr;
- break;
- case 's':
- message += va_arg(ap, char *);
- ptr++;
- reportMessage = ptr;
- break;
- case '%':
- message += ptr[0];
- reportMessage = ptr;
- default:
- break;
- }
- ptr=strchr(reportMessage,'%');
- }
- message += reportMessage;
- Output(message.c_str());
- }
-}
-
-/**
-Function to start logging.
-
-@internalComponent
-@released
-
-@param aFileName
-Name of the Log file
-*/
-void MessageImplementation::StartLogging(char *aFileName)
-{
- char logFile[1024];
- FILE *fptr;
-
- strcpy(logFile,aFileName);
-
- // open file for log etc.
- if((fptr=fopen(logFile,"w"))==NULL)
- {
- ReportMessage(WARNING, FILEOPENERROR,aFileName);
- }
- else
- {
- iLogging = true;
- iLogPtr=fptr;
- }
-}
-
-/**
-Function to Create Messages file.
-
-@internalComponent
-@released
-@param aFileName
-Name of the Message file to be dumped
-*/
-void MessageImplementation::CreateMessageFile(char *aFileName)
-{
- int i;
- FILE *fptr;
-
- // open file for writing messages.
- if((fptr=fopen(aFileName,"w"))==NULL)
- {
- ReportMessage(WARNING, FILEOPENERROR,aFileName);
- }
- else
- {
- for(i=0;i<MAX;i++)
- {
- fprintf(fptr,"%d,%s\n",i+1,MessageArray[i].message);
- }
-
- fclose(fptr);
- }
-
-}
-
-/**
-Function to put Message string in map which is stored in message file.
-If file is not available the put message in map from Message Array structure.
-
-@internalComponent
-@released
-
-@param aFileName
-Name of the Message file passed in
-*/
-void MessageImplementation::InitializeMessages(char *aFileName)
-{
- char index[16];
- char *message, *errStr;
- int i, lineLength;
- int fileSize;
- char *messageEntries, *lineToken;
-
- FILE *fptr;
-
- if(aFileName && (fptr=fopen(aFileName,"rb"))!=NULL)
- {
-
- iMessage.clear();
- //Getting File size
- fseek(fptr, 0, SEEK_END);
- fileSize=ftell(fptr);
- rewind(fptr);
-
- messageEntries= new char[fileSize+2];
-
- //Getting whole file in memory
- fread(messageEntries, fileSize, 1, fptr);
-
- //Adding ENTER at end
- *(messageEntries+fileSize)='\n';
- //Adding '\0' at end
- *(messageEntries+fileSize+1)='\0';
-
- fclose(fptr);
-
- lineToken=strtok(messageEntries,"\n");
- while(lineToken != NULL)
- {
- if( lineToken[0] == '\n' || lineToken[0] == '\r' )
- {
- lineToken=strtok(NULL,"\n");
- continue;
- }
-
- lineLength=strlen(lineToken);
-
- if( lineToken[strlen(lineToken)-1] == '\r' )
- {
- lineToken[strlen(lineToken)-1]='\0';
- }
-
- message=strchr(lineToken,',');
- strncpy(index,lineToken,message-lineToken);
- index[message-lineToken]='\0';
- errStr = new char[strlen(message+1) + 1];
- strcpy(errStr, (message+1));
- iMessage.insert(std::pair<int,char*>(atoi(index),errStr));
-
- lineToken=strtok(lineToken+lineLength+1,"\n");
- }
-
- delete messageEntries;
-
- }
- else
- {
- for(i=0;i<MAX;i++)
- {
- errStr = new char[strlen(MessageArray[i].message) + 1];
- strcpy(errStr, MessageArray[i].message);
- iMessage.insert(std::pair<int,char*>(MessageArray[i].index,errStr));
- }
- }
-}
-
-