diff -r 59148e28d9f6 -r 626366955efb toolsandutils/e32tools/elf2e32/source/messageimplementation.cpp --- 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 -#include -#include -#include - -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(atoi(index),errStr)); - - lineToken=strtok(lineToken+lineLength+1,"\n"); - } - - delete messageEntries; - - } - else - { - for(i=0;i(MessageArray[i].index,errStr)); - } - } -} - -