diff -r 59148e28d9f6 -r 626366955efb toolsandutils/e32tools/elf2e32/source/h_utl.cpp --- a/toolsandutils/e32tools/elf2e32/source/h_utl.cpp Fri Jun 25 18:24:47 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,260 +0,0 @@ -// Copyright (c) 2005-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: -// Implementation of the e32 image version for e32 image dump for the elf2e32 tool -// @internalComponent -// @released -// -// - -#include -#include -#include "h_utl.h" - -/** -Function to check bracketed hex i.e '{', '}' - -@internalComponent -@released - -@param aTemp -@param aBrackets -@param aDigits -@param aValue - -@return True if the value passed in is a bracketed hex. -*/ -TBool IsBracketedHex(const char* aTemp, const char* aBrackets, TInt aDigits, TUint32& aValue) -{ - if (aTemp[0]!=aBrackets[0] || aTemp[1+aDigits]!=aBrackets[1]) - return 0; - TInt i; - TUint32 x = 0; - for (i=1; i<=aDigits; ++i) - { - TInt c = aTemp[i]; - if (c>='a' && c<='z') c-=32; - if (c<'0' || (c>'9' && c<'A') || c>'F') - return 0; - c-='0'; - if (c>9) - c-=7; - x = (x<<4) | (TUint32)c; - } - aValue = x; - - return 1; -} - -/** -Function to check the decimal version - -@internalComponent -@released - -@param aBegin -Beginning of the version information -@param aTemp -@param aValue -Holds the hexadecimal value -@return the checked value. -*/ -TInt CheckForDecimalVersion(const char* aBegin, const char* aTemp, TUint32& aValue) -{ - aValue = 0; - if (aTemp <= aBegin || *aTemp != '}') - return 0; - TUint32 v[2] = {0,0}; - TUint32 m = 1; - TInt pos = 0; - const char* s0 = aTemp + 1; - for (--aTemp; aTemp >= aBegin; --aTemp) - { - int c = *aTemp; - if (c >= '0' && c <= '9') - { - v[pos] += m * (c - '0'); - if (v[pos] >= 65536u) - return 0; - m *= 10; - } - else if (c == '.') - { - m = 1; - if (++pos >= 2) - return 0; - } - else if (c == '{') - break; - else - return 0; - } - if (aTemp < aBegin) - return 0; - - aValue = (v[1] << 16) | v[0]; - - return s0 - aTemp; -} - -/** -Function to Parse a filename and convert decimal version number to hex - -@internalComponent -@released - -@param aName -Filename to be parsed - -@return the converted name wherein the decimal number is converted to hex. -*/ -char* NormaliseFileName(const char* aName) -{ - TFileNameInfo f(aName, 0); - TInt nl = f.iBaseLength; - TInt el = f.iTotalLength - f.iExtPos; - TInt tl = nl + el; - if (f.iFlags & EVerPresent) - tl += 10; - char* t = new char[tl + 1]; - if (t) - { - memcpy(t, aName, nl); - if (f.iFlags & EVerPresent) - sprintf(t + nl, "{%08x}%s", (TInt)f.iModuleVersion, aName + f.iExtPos); - else if (el) - memcpy(t + nl, aName + f.iExtPos, el); - t[tl] = 0; - } - - return t; -} - -/** -Constructor for Class TFileNameInfo - -@internalComponent -@released - -@param aFileName -Filename to be parsed -@param aLookForUid -*/ -TFileNameInfo::TFileNameInfo(const char* aFileName, TBool aLookForUid) -{ - iFileName = aFileName; - TInt l = strlen(aFileName); - iTotalLength = l; - TInt remain = l; - iFlags = 0; - iUid3 = 0; - iModuleVersion = 0; - iBaseLength = l; - iExtPos = l; - const char* s = iFileName + l; - for (; s>=iFileName && *s!='.' && *s!='}' && (!aLookForUid || *s!=']'); --s) - { - } - - if (s=10 && IsBracketedHex(s-9, "[]", 8, iUid3)) - { - iFlags |= EUidPresent; - remain -= 10; - s -= 10; - } - - if (remain>=10 && IsBracketedHex(s-9, "{}", 8, iModuleVersion)) - { - iFlags |= EVerPresent; - remain -= 10; - s -= 10; - } - else - { - TInt n = CheckForDecimalVersion(iFileName, s, iModuleVersion); - if (n>0) - { - iFlags |= EVerPresent; - remain -= n; - s -= n; - } - } - iBaseLength = remain; -} - -/*------------------------------------------------------------------------- -String comparison on Linux seems to be a little half-baked. --------------------------------------------------------------------------*/ -#ifdef __LINUX__ - -int stricmp(const char *a, const char *b) - { - unsigned char ca,cb; - - do { - ca = *a++; - cb = *b++; - ca = tolower(ca); - cb = tolower(cb); - } - while((ca == cb) && (ca)); - return (int) ca-cb; - } - -int strnicmp(const char *a, const char *b, int n) - { - unsigned char ca,cb; - int i = 0; - - do { - if (++i > n) return 0; - ca = *a++; - cb = *b++; - ca = tolower(ca); - cb = tolower(cb); - } - while((ca == cb) && (ca)); - return (int) ca-cb; - } - -char* strupr(char *a) - { - char *ret = a; - - while (*a) - { - *a = toupper(*a); - a++; - } - - return ret; - } - - -#endif