diff -r 345b1ca54e88 -r 039a3e647356 kerneltest/e32utils/nistsecurerng/src/utils/openc.cpp --- a/kerneltest/e32utils/nistsecurerng/src/utils/openc.cpp Wed Sep 15 13:42:27 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,616 +0,0 @@ -/* -* Copyright (c) 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: -*/ - - -//------------------------------------ System Header Files ------------------------------------------------ -#include // ConsoleBase -//------------------------------------ Local Header Files ------------------------------------------------- -#include "openc.h" - -//-------------------------------- Constants, global variables and Macro Definitions ---------------------------------------- -_LIT(KConsoleName, "NIST Test Console"); -CConsoleBase* gConsole = NULL; - - -int PrintToScreen(const char* aString); - -const TInt KIntStringLen = 10; -RFs gFileSession; - -enum TDataType - { - EInteger, - EFloat, - EUnknownType = 0x10000 - }; - -const TInt KMaxReadSize = 50; -const TInt KMaxScreenBufferSize = 100; - -TBuf gScreenBuffer; - -class GlobalInitilizer - { -public: - GlobalInitilizer() - { - TInt err = gFileSession.Connect(); - - if(err != KErrNone) - { - User::Exit(err); - } - - TRAP(err, gConsole = Console::NewL(KConsoleName, TSize(KConsFullScreen,KConsFullScreen))); - if(err != KErrNone) - { - User::Exit(err); - } - } - ~GlobalInitilizer() - { - gFileSession.Close(); - delete gConsole; - } - }; - -GlobalInitilizer globalObj; - -//------------------------------------ Function Definitions ----------------------------------------------- - -double log(double aSource) - { - double result = 0.0; - Math::Ln(result, aSource); - return result; - } - -double exp(double aSource) - { - double result = 0.0; - Math::Exp(result, aSource); - return result; - } - -double fabs(double aSource) - { - return (aSource >= 0.0)? aSource: -aSource; - } - - -double floor(double aSource) - { - if(aSource >= 0.0 || aSource == (TInt64)aSource) - { - return (double)(TInt64)aSource; - } - - return (double)((TInt64)aSource - 1); - } - -double sqrt(double aSource) - { - double result = 0.0; - Math::Sqrt(result, aSource); - return result; - } - -double pow(double aSource, double aPower) - { - double result = 0.0; - Math::Pow(result, aSource, aPower); - return result; - } - -// Math trigonometric functions -double sin(double aSource) - { - double result = 0.0; - Math::Sin(result, aSource); - return result; - } - -double cos(double aSource) - { - double result = 0.0; - Math::Cos(result, aSource); - return result; - } - -// Stdio functions -int printf(const char* aFormatString, ...) - { - TUint length = User::StringLength((TUint8*)aFormatString) + 100; - HBufC8* buffer = HBufC8::New(length); - if(NULL == buffer) - { - return KErrNoMemory; - } - - TPtr8 targetPtr = buffer->Des(); - TPtrC8 formatPtr((TUint8*)aFormatString); - - VA_LIST list; - VA_START(list, aFormatString); - - targetPtr.FormatList(formatPtr, list); - - PrintToScreen((const char*)targetPtr.PtrZ()); - - delete buffer; - - return targetPtr.Length(); - } - -int puts(const char* aString) - { - int ret = PrintToScreen(aString); - gConsole->Printf(_L("\n")); - - return ret; - } - -int putchar(int aChar) - { - gConsole->Printf(_L("%c"), aChar); - return aChar; - } - -char* strcpy(char* aDst, const char* aSrc) - { - char* cp = aDst; - - while((*cp++ = *aSrc++) != 0) - ; // Copy src over dst - - return(aDst); - } - -int scanf(const char* aFormatString, ...) - { - TDataType type = EUnknownType; - TBool byteRead = EFalse; - - if(Mem::Compare((const unsigned char*)aFormatString, 2, (const unsigned char*)"%d", 2) == 0) - { - type = EInteger; - } - else if(Mem::Compare((const unsigned char*)aFormatString, 2, (const unsigned char*)"%f", 2) == 0) - { - type = EFloat; - } - else if(Mem::Compare((const unsigned char*)aFormatString, 3, (const unsigned char*)"%1d", 3) == 0) - { - type = EInteger; - byteRead = ETrue; - } - else - { - User::Panic(_L("NIST TestSuit Error"), KErrArgument); - } - - if(!byteRead || (gScreenBuffer.Length() == 0)) - { - ReadStringFromConsole(gScreenBuffer); - } - - TLex parser(gScreenBuffer); - parser.SkipSpace(); - - VA_LIST list; - VA_START(list, aFormatString); - - switch(type) - { - case EInteger: - { - TInt* ptr = VA_ARG(list, TInt*); - if(byteRead) - { - TChar ch(gScreenBuffer[0]); - gScreenBuffer.Delete(0, 1); - *ptr = ch.GetNumericValue(); - } - else - { - parser.Val(*ptr); - gScreenBuffer.Zero(); - } - break; - } - case EFloat: - { - float* ptr = VA_ARG(list, float*); - parser.Val(*ptr); - gScreenBuffer.Zero(); - break; - } - case EUnknownType: - { - User::Panic(_L("NIST TestSuit Error"), KErrArgument); - } - } - - return 1; - } - -int sprintf(char *aBuffer, const char* aFormatString, ...) - { - TUint length = User::StringLength((TUint8*)aFormatString) + 100; - TPtr8 aTargetPtr((TUint8*)aBuffer, length); - TPtrC8 formatPtr((TUint8*)aFormatString); - - VA_LIST list; - VA_START(list, aFormatString); - - aTargetPtr.FormatList(formatPtr, list); - aTargetPtr.ZeroTerminate(); - - return User::StringLength((TUint8*)aBuffer);; - } - -int GetFileMode(const char* aModeStr, TFileMode& aFileMode, TBool& aIsAppend) - { - aIsAppend = EFalse; - switch (*aModeStr) - { - case 'r': - aFileMode = EFileRead; - break; - - case 'w': - aFileMode = EFileWrite; - break; - - case 'a': - aFileMode = EFileWrite; - aIsAppend = ETrue; - break; - - default: - return KErrArgument; - } - - return KErrNone; - } - -FILE *fopen(const char *aFileName, const char *aMode) - { - TPtrC8 fileNamePtr(reinterpret_cast(aFileName)); - TFileName fileName; - fileName.Copy(fileNamePtr); - RFile* file = new RFile; - if(NULL == file) - { - return NULL; - } - - TFileMode mode = EFileRead; - TBool isAppend = EFalse; - GetFileMode(aMode, mode, isAppend); - int err = KErrArgument; - switch(mode) - { - case EFileRead: - { - err = file->Open(gFileSession, fileName, mode); - break; - } - case EFileWrite: - { - if(isAppend) - { - err = file->Open(gFileSession, fileName, mode); - if(err == KErrNone) - { - TInt offset = 0; - err = file->Seek(ESeekEnd, offset); - break; - } - } - - err = file->Replace(gFileSession, fileName, mode); - break; - } - default: - err = KErrArgument; - } - - if(KErrNone != err) - { - file->Close(); - delete file; - file = NULL; - } - return file; - } - - - -int fclose(FILE *aFp) - { - if(NULL != aFp) - { - aFp->Close(); - delete aFp; - } - return KErrNone; - } - -int fprintf(FILE* aFile, const char* aFormatString, ...) - { - TUint length = User::StringLength((TUint8*)aFormatString) + 100; - HBufC8* buffer = HBufC8::New(length); - if(NULL == buffer) - { - return KErrNoMemory; - } - - TPtr8 targetPtr = buffer->Des(); - TPtrC8 formatPtr((TUint8*)aFormatString); - - VA_LIST list; - VA_START(list, aFormatString); - - targetPtr.FormatList(formatPtr, list); - targetPtr.ZeroTerminate(); - - aFile->Write(targetPtr); - - delete buffer; - - return targetPtr.Length(); - } - -int fscanf(FILE* aFp, const char * aFormatString, ...) - { - TDataType type = EUnknownType; - TBool byteRead = EFalse; - - if(Mem::Compare((const unsigned char*)aFormatString, 2, (const unsigned char*)"%d", 2) == 0) - { - type = EInteger; - } - else if(Mem::Compare((const unsigned char*)aFormatString, 2, (const unsigned char*)"%f", 2) == 0) - { - type = EFloat; - } - else if(Mem::Compare((const unsigned char*)aFormatString, 3, (const unsigned char*)"%1d", 3) == 0) - { - type = EInteger; - byteRead = ETrue; - } - else - { - User::Panic(_L("NIST TestSuit Error"), KErrArgument); - } - - TInt initialOffset = 0; - aFp->Seek(ESeekCurrent, initialOffset); - TBuf8 readBuffer; - aFp->Read(readBuffer, KMaxReadSize); - readBuffer.ZeroTerminate(); - TLex8 parser(readBuffer); - parser.SkipSpace(); - - VA_LIST list; - VA_START(list, aFormatString); - - switch(type) - { - case EInteger: - { - TInt* ptr = VA_ARG(list, TInt*); - TChar ch = parser.Peek(); - - if(!ch.IsDigit()) - { - break; - } - - if(byteRead) - { - ch = parser.Get(); - *ptr = ch.GetNumericValue(); - } - else - { - parser.Val(*ptr); - } - - break; - } - case EFloat: - { - float* ptr = VA_ARG(list, float*); - parser.Val(*ptr); - break; - } - case EUnknownType: - { - User::Panic(_L("NIST TestSuit Error"), KErrArgument); - } - } - - TInt len = initialOffset + parser.Offset(); - aFp->Seek(ESeekStart, len); - - return 1; - } - -TUint32 fread(void* aPtr, TUint32 aSize, TUint32 aCount, FILE* aFile) - { - TUint32 size = aSize * aCount; - TPtr8 dataPtr((TUint8*)aPtr, size); - TInt err = aFile->Read(dataPtr); - if(KErrNone != err) - { - size = (TUint32)dataPtr.Length(); - } - return size; - } - -int fseek(FILE* aFile, long aOffset, int aWhence) - { - int ret = KErrNone; - int fileOffset = aOffset; - switch(aWhence) - { - case SEEK_SET: - { - ret = aFile->Seek(ESeekStart, fileOffset); - break; - } - case SEEK_CUR: - { - ret = aFile->Seek(ESeekCurrent, fileOffset); - break; - } - case SEEK_END: - { - ret = aFile->Seek(ESeekEnd, fileOffset); - break; - } - default: - User::Panic(_L("NIST TestSuit Error"), KErrArgument); - } - - return ret; - } - - - -int fflush(FILE *aFile) - { - TInt err = aFile->Flush(); - if(err != KErrNone) - { - err = EOF; - } - return err; - } - - -// Conio functions -void* calloc(TUint32 aElementCount, TUint32 aSize) - { - aSize *= aElementCount; - return User::AllocZ(aSize); - } - -void free(void *aMemory) - { - User::Free(aMemory); - } - -TBool IsCharacterKey(TKeyCode aKey) - { - if(aKey > EKeyEscape && aKey < EKeyDelete) - { - return ETrue; - } - - return EFalse; - } - -_LIT(KLineBreaker, "\r\n"); - -void ReadStringFromConsole(TDes& aString) - { - // This infinte loop terminates when user hits an "enter" key - FOREVER - { - // Get a key(character) from the console - TKeyCode ch = gConsole->Getch(); - - switch(ch) - { - case EKeyEnter: - { - if(aString.Length() == 0) - { - break;// At least one character should be read. - } - gConsole->Printf(KLineBreaker); - return; - } - case EKeyBackspace: - { - if(0 != aString.Length()) - { - // Back-space only takes the cursor one position back - // So to delete a character blank-space is inserted at - // that position and later cursor is again adjusted. - gConsole->Printf(_L("%c%c%c"), EKeyBackspace, - EKeySpace, - EKeyBackspace); - // Delete the character from the target string also. - aString.Delete(aString.Length() - 1, 1); - } - break; - } - default: - { - TInt maxBufferLength = aString.MaxLength(); - // IsCharacterKey will return true if ch is a displayable - // character else it will return false. - if(IsCharacterKey(ch) && aString.Length() != maxBufferLength) - { - gConsole->Printf(_L("%c"), ch); - aString.Append(ch); - } - } - } - } - } - -TInt ReadIntL(TInt& aValue) - { - TBuf string; - ReadStringFromConsole(string); - TLex lexObj(string); - return lexObj.Val(aValue); - } - -int PrintToScreen(const char* aString) - { - TUint length = User::StringLength((TUint8*)aString); - HBufC* buffer = HBufC::New(length); - if(NULL == buffer) - { - return EOF; - } - - TPtr targetPtr = buffer->Des(); - - TPtrC8 stringPtr((TUint8*)aString); - - targetPtr.Copy(stringPtr); - gConsole->Printf(targetPtr); - - delete buffer; - - return KErrNone; - } - -void exit ( int status ) - { - User::Exit(status); - for(;;){} // So that GCC compiler don't complain about noreturn function returns. - } - -//------------------------------------------ E O F ----------------------------------------------------- -